summary refs log tree commit diff
diff options
context:
space:
mode:
authorQMK Bot <hello@qmk.fm>2022-07-02 12:41:05 +0000
committerQMK Bot <hello@qmk.fm>2022-07-02 12:41:05 +0000
commit90ad47b1f24af2aef20b871b4061523c68eb2c4e (patch)
tree7a6e3294277016e544e380d4f43c47b5f9436ac8
parentf996a4c5b7858b91ecea3ec4394a584ea7a3e0b8 (diff)
parent07f6fba6ded1cf7a06df4aeef263fdcd9583ee59 (diff)
Merge remote-tracking branch 'origin/master' into develop
-rw-r--r--keyboards/preonic/keymaps/jpe230/config.h28
-rw-r--r--keyboards/preonic/keymaps/jpe230/jpe230.h35
-rw-r--r--keyboards/preonic/keymaps/jpe230/keymap.c116
-rw-r--r--keyboards/preonic/keymaps/jpe230/rules.mk9
-rw-r--r--keyboards/ymdk/sp64/keymaps/minkezhang/config.h5
-rw-r--r--keyboards/ymdk/sp64/keymaps/minkezhang/keymap.c149
-rw-r--r--keyboards/ymdk/sp64/keymaps/minkezhang/readme.md7
-rw-r--r--keyboards/ymdk/sp64/keymaps/minkezhang/rules.mk1
8 files changed, 350 insertions, 0 deletions
diff --git a/keyboards/preonic/keymaps/jpe230/config.h b/keyboards/preonic/keymaps/jpe230/config.h
new file mode 100644
index 0000000000..70cb9d826b
--- /dev/null
+++ b/keyboards/preonic/keymaps/jpe230/config.h
@@ -0,0 +1,28 @@
+/*
+Copyright 2022 Jose Pablo Ramirez <jp.ramangulo@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#ifdef AUDIO_ENABLE
+#define STARTUP_SONG SONG(ODE_TO_JOY)
+#endif
+
+#define MUSIC_MASK (keycode != KC_NO)
+
+#define ENABLE_COMPILE_KEYCODE
+#define AUDIO_ENABLE_TONE_MULTIPLEXING
+#define AUDIO_TONE_MULTIPLEXING_RATE_DEFAULT 10
\ No newline at end of file
diff --git a/keyboards/preonic/keymaps/jpe230/jpe230.h b/keyboards/preonic/keymaps/jpe230/jpe230.h
new file mode 100644
index 0000000000..e6b4ed1401
--- /dev/null
+++ b/keyboards/preonic/keymaps/jpe230/jpe230.h
@@ -0,0 +1,35 @@
+/*
+Copyright 2022 Jose Pablo Ramirez <jp.ramangulo@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifdef VIA_ENABLE
+  #define USER_START USER00
+#else
+  #define USER_START SAFE_RANGE
+#endif
+
+enum jpe230_keycodes {
+  KC_LSRS = USER_START,
+  KC_LERS,
+  KC_LSRE
+};
+
+#define LEFT_BAR 0, 9, 5
+#define RIGHT_BAR 0, 9, 1
+
+float song_lsrs[][2] = SONG(QWERTY_SOUND);
+float song_lers[][2] = SONG(COLEMAK_SOUND);
+float song_lsre[][2] = SONG(DVORAK_SOUND);
\ No newline at end of file
diff --git a/keyboards/preonic/keymaps/jpe230/keymap.c b/keyboards/preonic/keymaps/jpe230/keymap.c
new file mode 100644
index 0000000000..43aa42aaf1
--- /dev/null
+++ b/keyboards/preonic/keymaps/jpe230/keymap.c
@@ -0,0 +1,116 @@
+/*
+Copyright 2022 Jose Pablo Ramirez <jp.ramangulo@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+#include "jpe230.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT_preonic_grid(
+  //,-----------------------------------------------------------------------------------------------------------.
+       KC_ESC,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,  KC_DEL,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+       KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,   KC_P,  KC_BSPC,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+      KC_LCTL,    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+      KC_LSFT,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,  KC_ESC,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+      KC_LBRC, KC_RBRC, KC_LGUI,   MO(1), _______,  KC_SPC, _______,  KC_ENT,   MO(2), KC_RALT, KC_MINS,  KC_EQL
+  //`-----------------------------------------------------------------------------------------------------------'
+  ),
+
+  [1] = LAYOUT_preonic_grid(
+  //,-----------------------------------------------------------------------------------------------------------.
+       KC_GRV,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10, KC_BSPC,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+       KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______,   CK_UP,  AU_TOG,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+      KC_CAPS, _______, _______, _______, _______, _______, _______,   KC_UP, _______, _______, CK_DOWN, _______,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+      KC_LSFT, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN,KC_RIGHT, _______,  CK_RST, _______,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+      _______, _______, _______, _______, _______, _______, _______, _______,   MO(3), _______, _______, _______
+  //`-----------------------------------------------------------------------------------------------------------'
+  ),
+
+  [2] = LAYOUT_preonic_grid(
+  //,-----------------------------------------------------------------------------------------------------------.
+       KC_GRV,  KC_F11,  KC_F12,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10, KC_BSPC,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+       KC_ESC, KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+      KC_CAPS, _______, KC_MS_U, _______, _______, _______, KC_MINS,  KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,  KC_GRV,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+      KC_LSFT, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+      _______, _______, _______,  MO(3),  _______, KC_BTN1, _______, _______, _______, _______, _______, _______
+  //`-----------------------------------------------------------------------------------------------------------'
+  ),
+
+  [3] = LAYOUT_preonic_grid(
+  //,-----------------------------------------------------------------------------------------------------------.
+       KC_ESC,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,  KC_DEL,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+      KC_MUTE, KC_WBAK, KC_WFWD,   KC_F7,   KC_F8,   KC_F9, _______,    KC_7,    KC_8,    KC_9, _______, QK_BOOT,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+      KC_VOLU, _______, KC_MNXT,   KC_F6,   KC_F5,   KC_F6, _______,    KC_6,    KC_5,    KC_4, _______, QK_MAKE,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+      KC_VOLD, KC_MPRV, KC_MNXT,   KC_F1,   KC_F2,   KC_F3, KC_LSRS,    KC_1,    KC_2,    KC_3, _______, DB_TOGG,
+  //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+       MU_TOG,  MU_MOD, _______, _______, _______, KC_LSRE, _______, KC_LERS, _______, _______, _______,  EE_CLR
+  //`-----------------------------------------------------------------------------------------------------------'
+  )
+};
+
+/* 
+Logic to shift between the bars:
+    KC_LSRE => Left Bar - Space... Right Bar - Enter
+    KC_LERS => Left Bar - Enter... Right Bar - Space
+    KC_LSRS => Left Bar - Space... Right Bar - Space
+
+    Hack into dynamic_keymap_set_keycode and change the value of the keymap.
+    (Just like VIA does, but instead it is done inside the keyboard so no need
+    to open the app)
+
+    Possible alternatives:
+        - Create 3 layers but only change the KC_ENTER and KC_SPACE position between them
+        - Create a custom keycode and use process_record_user to alter the behaviour
+*/
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  if (record->event.pressed) {
+    switch (keycode) {
+    case KC_LSRS:
+      dynamic_keymap_set_keycode(LEFT_BAR, KC_SPC);
+      dynamic_keymap_set_keycode(RIGHT_BAR, KC_SPC);
+      PLAY_SONG(song_lsrs);
+      return false;
+    case KC_LERS:
+      dynamic_keymap_set_keycode(LEFT_BAR, KC_ENT);
+      dynamic_keymap_set_keycode(RIGHT_BAR, KC_SPC);
+      PLAY_SONG(song_lers);
+      return false;
+    case KC_LSRE:
+      dynamic_keymap_set_keycode(LEFT_BAR, KC_SPC);
+      dynamic_keymap_set_keycode(RIGHT_BAR, KC_ENT);
+      PLAY_SONG(song_lsre);
+      return false;
+    default:
+      return true; // Process all other keycodes normally
+    }
+  }
+  return true;
+}
diff --git a/keyboards/preonic/keymaps/jpe230/rules.mk b/keyboards/preonic/keymaps/jpe230/rules.mk
new file mode 100644
index 0000000000..d57d1e33f2
--- /dev/null
+++ b/keyboards/preonic/keymaps/jpe230/rules.mk
@@ -0,0 +1,9 @@
+# Disable unused features inherited from the kb rules.mk
+RGBLIGHT_ENABLE   = no 
+ENCODER_ENABLE    = no
+DIP_SWITCH_ENABLE = no
+CONSOLE_ENABLE    = no
+COMMAND_ENABLE    = no
+
+# Enable VIA
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/ymdk/sp64/keymaps/minkezhang/config.h b/keyboards/ymdk/sp64/keymaps/minkezhang/config.h
new file mode 100644
index 0000000000..5bfa79eb21
--- /dev/null
+++ b/keyboards/ymdk/sp64/keymaps/minkezhang/config.h
@@ -0,0 +1,5 @@
+// Copyright 2022 Minke Zhang (@minkezhang)
+// SPDX-License-Identifier: GPL-3.0-only
+#pragma once
+
+#define RGBLIGHT_LAYERS
diff --git a/keyboards/ymdk/sp64/keymaps/minkezhang/keymap.c b/keyboards/ymdk/sp64/keymaps/minkezhang/keymap.c
new file mode 100644
index 0000000000..7481696fd6
--- /dev/null
+++ b/keyboards/ymdk/sp64/keymaps/minkezhang/keymap.c
@@ -0,0 +1,149 @@
+// Copyright 2022 Minke Zhang (@minkezhang)
+// SPDX-License-Identifier: GPL-3.0-only
+#include QMK_KEYBOARD_H
+
+/* Layer transitions diagram
+ *
+ * BASE <-> _FN     [MO]
+ * BASE <-> _NUM    [TG]
+ * _NUM <-> _MIRROR [MO]
+ *
+ * Direct transitions between layers not listed here are considered bugs.
+ */
+enum layer_names {
+    BASE,     // default layer
+    _FN,      // function layer
+    _NUM,     // numpad
+    _MIRROR,  // mirrorboard layer
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐    ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
+ * │ Esc │  1  │  2  │  3  │  4  │  5  │  6  │    │  7  │  8  │  9  │  0  │  -  │  =  │ BkSp     │
+ * ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
+ * │ Tab    │  Q  │  W  │  E  │  R  │  T  │    │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │ \     │
+ * ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐   └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
+ * │ Caps    │  A  │  S  │  D  │  F  │  G  │    │  H  │  J  │  K  │  L  │  ;  │  '  │ Enter      │
+ * ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐   └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
+ * │ LShift   │  Z  │  X  │  C  │  V  │  B  │    │  N  │  M  │  <  │  >  │  ?  │Shft │ Up  │ Del │
+ * ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘   ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
+ * │ Ctrl │ Win │ Alt  │ Fn          │ Sp  │    │               │ Alt   │ Fn   │ Lft │ Dwn │ Rgt │
+ * └------┴-----┴------┴-------------┴-----┘    └---------------┴-------┴------┴-----┴-----┴-----┘
+ */
+[BASE] = LAYOUT(
+  KC_ESC,  KC_1,    KC_2,    KC_3,     KC_4, KC_5,     KC_6,           KC_7, KC_8,    KC_9,     KC_0,      KC_MINUS,    KC_EQUAL,    KC_BSPC,
+  KC_TAB,  KC_Q,    KC_W,    KC_E,     KC_R, KC_T,           KC_Y,     KC_U, KC_I,    KC_O,     KC_P,      KC_LBRACKET, KC_RBRACKET, KC_BSLS,
+  KC_CAPS, KC_A,    KC_S,    KC_D,     KC_F, KC_G,           KC_H,     KC_J, KC_K,    KC_L,     KC_SCOLON, KC_QUOTE,                 KC_ENT,
+  KC_LSFT, KC_Z,    KC_X,    KC_C,     KC_V, KC_B,           KC_N,     KC_M, KC_COMM, KC_DOT,   KC_SLSH,   KC_RSFT,     KC_UP,       KC_DEL,
+  KC_LCTL, KC_LGUI, KC_LALT, MO(_FN),        KC_SPACE,       KC_SPACE,       KC_RALT, TG(_NUM),            KC_LEFT,     KC_DOWN,     KC_RIGHT
+  ),
+
+/* Function
+ *
+ * Cannot access the _NUM layer directly.
+ *
+ * ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐    ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
+ * │  `  │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │    │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │          │
+ * ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
+ * │        │     │     │ Up  │     │     │    │     │     │     │     │     │     │     │       │
+ * ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐   └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
+ * │ Enter   │     │ Lft │ Dwn │ Rgt │     │    │     │     │     │     │     │     │            │
+ * ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐   └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
+ * │          │     │     │     │     │     │    │     │     │     │     │     │     │     │     │
+ * ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘   ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
+ * │      │     │      │             │     │    │               │       │ NO   │     │     │     │
+ * └------┴-----┴------┴-------------┴-----┘    └---------------┴-------┴------┴-----┴-----┴-----┘
+ */
+[_FN] = LAYOUT(
+  KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,    KC_F5,   KC_F6,          KC_F7,   KC_F8,   KC_F9,   KC_F10,   KC_F11,   KC_F12,  _______,
+  _______, _______, _______, KC_UP,   _______,  _______,        _______, _______, _______, _______, _______,  _______,  _______, _______,
+  KC_ENT,  _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______,        _______, _______, _______, _______, _______,  _______,           _______,
+  _______, _______, _______, _______, _______,  _______,        _______, _______, _______, _______, _______,  _______,  _______, _______,
+  _______, _______, _______, _______,           _______,        _______,          _______, KC_NO,             _______,  _______, _______
+  ),
+
+/* Numpad
+ *
+ * ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐    ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
+ * │  `  │     │     │     │     │     │     │    │ Num │  /  │  *  │  -  │     |     │          |
+ * ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
+ * │        │     │     │     │     │     │    │     │  7  │  8  │  9  │  +  │     │     │       │
+ * ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐   └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
+ * │         │     │     │     │     │     │    │     │  4  │  5  │  6  │     │     │            │
+ * ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐   └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
+ * │          │     │     │     │     │     │    │     │  1  │  2  │  3  │ Ent │     │     │     │
+ * ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘   ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
+ * │      │     │      │ Fn          │     │    │ 0             │ .     │ Fn   │     │     │     │
+ * └------┴-----┴------┴-------------┴-----┘    └---------------┴-------┴------┴-----┴-----┴-----┘
+ */
+[_NUM] = LAYOUT(
+  KC_GRV,  _______, _______, _______,     _______, _______, _______,          KC_NUM, KC_PSLS, KC_PAST,  KC_PMNS, _______, _______, _______,
+  _______, _______, _______, _______,     _______, _______,          _______, KC_P7,  KC_P8,   KC_P9,    KC_PPLS, _______, _______, _______,
+  _______, _______, _______, _______,     _______, _______,          _______, KC_P4,  KC_P5,   KC_P6,    _______, _______,          _______,
+  _______, _______, _______, _______,     _______, _______,          _______, KC_P1,  KC_P2,   KC_P3,    KC_PENT, _______, _______, _______,
+  _______, _______, _______, MO(_MIRROR),          _______,          KC_P0,           KC_PDOT, TG(_NUM),          _______, _______, _______
+  ),
+
+/* Mirrorboard
+ *
+ * Useful in some niche situations per XKCD. Cannot pass directly to BASE layer
+ * without releasing the _MIRROR toggle key.
+ *
+ * ┌-----┬-----┬-----┬-----┬-----┬-----┬-----┐    ┌-----┬-----┬-----┬-----┬-----┬-----┬----------┐
+ * │ Bk  │  =  │  -  │  0  │  9  │  8  │  7  │    │     │     │     │     │     |     │          |
+ * ├-----┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┘ ┌--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬--┴--┬-------┤
+ * │ \      │  P  │  O  │  I  │  U  │  Y  │    │     │     │     │     │     │     │     │       │
+ * ├--------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐   └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴-------┤
+ * │ Enter   │  ;  │  L  │  K  │  J  │  H  │    │     │     │     │     │     │     │            │
+ * ├---------┴┬----┴┬----┴┬----┴┬----┴┬----┴┐   └┬----┴┬----┴┬----┴┬----┴┬----┴┬----┴┬-----┬-----┤
+ * │          │  ?  │  >  │  <  │  M  │  N  │    │     │     │     │     │     │     │     │     │
+ * ├------┬---┴-┬---┴--┬--┴-----┴----┬┴----┬┘   ┌┴-----┴-----┴--┬--┴----┬┴-----┼-----┼-----┼-----┤
+ * │      │     │      │             │     │    │               │       │ NO   │     │     │     │
+ * └------┴-----┴------┴-------------┴-----┘    └---------------┴-------┴------┴-----┴-----┴-----┘
+ */
+[_MIRROR] = LAYOUT(
+  KC_BSPC, KC_EQUAL,  KC_MINUS, KC_0,    KC_9, KC_8,    KC_7,          _______, _______, _______, _______, _______, _______, _______,
+  KC_BSLS, KC_P,      KC_O,     KC_I,    KC_U, KC_Y,          _______, _______, _______, _______, _______, _______, _______, _______,
+  KC_ENT,  KC_SCOLON, KC_L,     KC_K,    KC_J, KC_H,          _______, _______, _______, _______, _______, _______,          _______,
+  _______, KC_SLSH,   KC_DOT,   KC_COMM, KC_M, KC_N,          _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, _______,   _______,  _______,       _______,       _______,          _______, KC_NO,            _______, _______, _______
+  ),
+};
+
+#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
+const rgblight_segment_t PROGMEM BASE_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 12, HSV_OFF});
+const rgblight_segment_t PROGMEM _FN_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 12, HSV_RED});
+const rgblight_segment_t PROGMEM _NUM_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 12, HSV_YELLOW});
+const rgblight_segment_t PROGMEM _MIRROR_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 12, HSV_ORANGE});
+
+const rgblight_segment_t* const PROGMEM user_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
+    BASE_layer,
+    _FN_layer,
+    _NUM_layer,
+    _MIRROR_layer
+);
+
+void keyboard_post_init_user(void) {
+    rgblight_layers = user_rgb_layers;
+}
+layer_state_t default_layer_state_set_user(layer_state_t state) {
+    rgblight_set_layer_state(0, layer_state_cmp(state, BASE));
+
+    return state;
+}
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+
+/* Add some indication for current function layer.
+ *
+ * N.B.: rgblight_set_layer_state calls rgblight_mode_noeeprom.
+ */
+    rgblight_set_layer_state(1, layer_state_cmp(state, _FN));
+    rgblight_set_layer_state(2, layer_state_cmp(state, _NUM));
+    rgblight_set_layer_state(3, layer_state_cmp(state, _MIRROR));
+
+    return state;
+}
+#endif
diff --git a/keyboards/ymdk/sp64/keymaps/minkezhang/readme.md b/keyboards/ymdk/sp64/keymaps/minkezhang/readme.md
new file mode 100644
index 0000000000..50d4eb8788
--- /dev/null
+++ b/keyboards/ymdk/sp64/keymaps/minkezhang/readme.md
@@ -0,0 +1,7 @@
+# YMDK Split 64
+Personal Keymap for [minkezhang](https://github.com/minkezhang)
+
+## Compile
+```bash
+qmk compile -kb ymdk/sp64 -km minkezhang
+```
diff --git a/keyboards/ymdk/sp64/keymaps/minkezhang/rules.mk b/keyboards/ymdk/sp64/keymaps/minkezhang/rules.mk
new file mode 100644
index 0000000000..1e3cebb145
--- /dev/null
+++ b/keyboards/ymdk/sp64/keymaps/minkezhang/rules.mk
@@ -0,0 +1 @@
+RGBLIGHT_ENABLE = yes