Browse Source

[Keymap] update gunp layout for Planck (#12926)

Co-authored-by: Ryan <fauxpark@gmail.com>
Gun Pinyo 4 years ago
parent
commit
0399271a73

+ 22 - 34
keyboards/planck/keymaps/gunp/config.h

@@ -1,39 +1,27 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#ifdef AUDIO_ENABLE
-    #define STARTUP_SONG SONG(PLANCK_SOUND)
-    // #define STARTUP_SONG SONG(NO_SOUND)
-
-    #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
-                                  SONG(COLEMAK_SOUND), \
-                                  SONG(DVORAK_SOUND) \
-                                }
-#endif
-
-#define MUSIC_MASK (keycode != KC_NO)
-
-/*
- * MIDI options
+/* Copyright 2021 Gun Pinyo
+ *
+ * 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/>.
  */
  */
 
 
-/* enable basic MIDI features:
-   - MIDI notes can be sent when in Music mode is on
-*/
-
-#define MIDI_BASIC
+#pragma once
 
 
-/* enable advanced MIDI features:
-   - MIDI notes can be added to the keymap
-   - Octave shift and transpose
-   - Virtual sustain, portamento, and modulation wheel
-   - etc.
-*/
-//#define MIDI_ADVANCED
-
-/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
-//#define MIDI_TONE_KEYCODE_OCTAVES 2
+/* Tapping this number of times holds the key until tapped once again. */
+#define ONESHOT_TAP_TOGGLE 7
+/* Time (in ms) before the one shot key is released */
+#define ONESHOT_TIMEOUT 5000
 
 
+/* Audio */
+#ifdef AUDIO_ENABLE
+    #define STARTUP_SONG SONG(PLANCK_SOUND)
 #endif
 #endif

+ 240 - 123
keyboards/planck/keymaps/gunp/keymap.c

@@ -1,4 +1,4 @@
-/* Copyright 2015-2017 Jack Humbert
+/* Copyright 2021 Gun Pinyo
  *
  *
  * This program is free software: you can redistribute it and/or modify
  * 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
  * it under the terms of the GNU General Public License as published by
@@ -14,8 +14,6 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
  */
 
 
-/* modified by Gun Pinyo */
-
 #include QMK_KEYBOARD_H
 #include QMK_KEYBOARD_H
 
 
 extern keymap_config_t keymap_config;
 extern keymap_config_t keymap_config;
@@ -25,141 +23,276 @@ enum planck_layers {
   LY_0100, LY_0101, LY_0110, LY_0111,
   LY_0100, LY_0101, LY_0110, LY_0111,
   LY_1000, LY_1001, LY_1010, LY_1011,
   LY_1000, LY_1001, LY_1010, LY_1011,
   LY_1100, LY_1101, LY_1110, LY_1111,
   LY_1100, LY_1101, LY_1110, LY_1111,
+  LY_THAI_A, LY_THAI_B, LY_THAI_C,
+  LY_SANDBOX, LY_STICK,
 };
 };
 
 
 enum planck_keycodes {
 enum planck_keycodes {
-  FN_A = SAFE_RANGE,
-  FN_B,
-  FN_C,
-  FN_D,
+  MIN_KC = SAFE_RANGE,
+  FUNC_A, FUNC_B, FUNC_C, FUNC_D,
+  SANDBOX, STICK,
+  LTHAI_A, LTHAI_B, LTHAI_C,
+  LSW0110, LSW1111, LSW0100,
+  USER_NAME, USER_EMAIL,
+  MAX_KC,
   DYNAMIC_MACRO_RANGE,
   DYNAMIC_MACRO_RANGE,
 };
 };
 
 
-#include "dynamic_macro.h"
-
-#define MFN_R1 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
-#define MFN_R2 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
-#define MFN_R3 XXXXXXX, FN_A,    FN_B,    FN_C,    XXXXXXX, XXXXXXX
-#define MFN_R4 XXXXXXX, KC_LCTL, KC_LSFT, KC_LALT, FN_D,    XXXXXXX
-#define UNUSED_LAYER {\
-  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MFN_R1},\
-  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MFN_R2},\
-  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MFN_R3},\
-  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MFN_R4}},
-#define MC(kc) LCTL(kc)
-#define MA(kc) LALT(kc)
-#define MG(kc) LGUI(kc)          // ModGui, for i3 shortcuts
+#define KC_L2_0 KC_LSFT
+#define KC_L3_0 KC_LCTL
+#define KC_L3_1 KC_LALT
+#define KC_L3_2 KC_LGUI
+
+#define KC_R2_1 FUNC_A
+#define KC_R2_2 FUNC_B
+#define KC_R2_3 FUNC_C
+#define KC_R2_4 FUNC_D
+
+#define KC_R2_5 KC_RSFT
+#define KC_R3_0 KC_R2_4
+#define KC_R3_1 KC_SPC
+
+#define LAYOUT_gunp( k00, k01, k02, k03, k04, k05, \
+                     k10, k11, k12, k13, k14, k15, \
+                     k20, k21, k22, k23, k24, k25, \
+                     k30, k31, k32, k33, k34, k35) \
+LAYOUT_ortho_4x12( \
+k00,k01,k02,k03,k04,k05, LSW0110, KC_LEFT, KC_BSPC, KC_RIGHT,XXXXXXX, XXXXXXX,\
+k10,k11,k12,k13,k14,k15, LSW1111, LTHAI_A, LTHAI_B, LTHAI_C, XXXXXXX, XXXXXXX,\
+k20,k21,k22,k23,k24,k25, LSW0100, KC_R2_1, KC_R2_2, KC_R2_3, KC_R2_4, KC_R2_5,\
+k30,k31,k32,k33,k34,k35, KC_R3_0, KC_R3_1, KC_ENT,  KC_RGUI, KC_RALT, KC_RCTL)
+
+#define UNUSED_LAYER LAYOUT_gunp(\
+  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
+  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
+  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
+  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX),
+
+#define F1_F12_LAYER(M) LAYOUT_gunp(\
+  S(M(KC_F7 )), S(M(KC_F8 )), M(KC_F7 ), M(KC_F8 ), M(KC_F9 ), S(M(KC_F9 )),\
+  S(M(KC_F4 )), S(M(KC_F5 )), M(KC_F4 ), M(KC_F5 ), M(KC_F6 ), S(M(KC_F6 )),\
+  S(M(KC_F1 )), S(M(KC_F2 )), M(KC_F1 ), M(KC_F2 ), M(KC_F3 ), S(M(KC_F3 )),\
+  S(M(KC_F10)), S(M(KC_F11)), M(KC_F10), M(KC_F11), M(KC_F12), S(M(KC_F12))),
+
+#define MC(kc)  LCTL(kc)
+#define MA(kc)  LALT(kc)
+#define MG(kc)  LGUI(kc)
 #define MSC(kc) LSFT(LCTL(kc))
 #define MSC(kc) LSFT(LCTL(kc))
-#define MSA(kc) LSFT(LALT(kc))
-#define MCA(kc) LCTL(LALT(kc))
-#define XX XXXXXXX
 
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[LY_0000] = LAYOUT_planck_grid(
- KC_DEL,  KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_K, KC_TAB,
- KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_M, FN_A, FN_B, FN_C, XX,  KC_LSFT,
- XX,KC_F21,KC_F22,KC_ESC,KC_SPC,KC_F23,KC_F24,KC_LCTL,KC_LSFT,KC_LALT,FN_D,XX
+[LY_0000] = LAYOUT_ortho_4x12(
+  KC_PGUP, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_K, KC_TAB,
+  KC_PGDN, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, STICK,
+  KC_L2_0, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_M,
+                                KC_R2_1, KC_R2_2,    KC_R2_3, KC_UP,   KC_R2_5,
+  KC_L3_0, KC_L3_1, KC_L3_2, KC_ESCAPE,  KC_BSPACE,  KC_ENTER,
+                       KC_R3_0, KC_R3_1, KC_PSCREEN, KC_LEFT, KC_DOWN, KC_RIGHT
 ),
 ),
-[LY_1000] = LAYOUT_planck_grid(
-  UC(L'โˆƒ'), KC_SLSH,  KC_RCBR,  KC_RPRN,  KC_RBRC,  KC_GT,    MFN_R1,
-  UC(L'โˆ€'), KC_BSLS,  KC_LCBR,  KC_LPRN,  KC_LBRC,  KC_LT,    MFN_R2,
-  KC_AMPR,  KC_PIPE,  KC_AT,    KC_TILD,  KC_DLR,   KC_CIRC,  MFN_R3,
-  KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    MFN_R4,
+[LY_1000] = LAYOUT_gunp(
+  XXXXXXX,   KC_PERC,   KC_QUES,   KC_EXLM,   KC_GRV,    XXXXXXX,
+  XXXXXXX,   KC_AT,     KC_COMM,   KC_DOT,    KC_QUOT,   KC_EQL,
+  KC_L2_0,   KC_DLR,    KC_SCLN,   KC_COLN,   KC_DQUO,   KC_UNDS,
+  KC_L3_0,   KC_L3_1,   KC_L3_2,   XXXXXXX,   XXXXXXX,   XXXXXXX
 ),
 ),
-[LY_0010] = LAYOUT_planck_grid(
-  UC(L'ร—'), KC_ASTR,  KC_QUES,  KC_EXLM,  KC_GRV,   KC_HASH,  MFN_R1,
-  UC(L'โ†’'), KC_MINS,  KC_COMM,  KC_DOT,   KC_QUOT,  KC_EQL,   MFN_R2,
-  UC(L'โˆ˜'), KC_PLUS,  KC_SCLN,  KC_COLN,  KC_DQUO,  KC_UNDS,  MFN_R3,
-  KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   MFN_R4,
+[LY_0010] = LAYOUT_gunp(
+  XXXXXXX,   KC_AMPR,   KC_PIPE,   KC_TILD,   KC_CIRC,   XXXXXXX,
+  XXXXXXX,   KC_LCBR,   KC_LBRC,   KC_LPRN,   KC_LT,     KC_SLSH,
+  KC_L2_0,   KC_RCBR,   KC_RBRC,   KC_RPRN,   KC_GT,     KC_BSLS,
+  KC_L3_0,   KC_L3_1,   KC_L3_2,   XXXXXXX,   XXXXXXX,   XXXXXXX
 ),
 ),
-[LY_1010] = LAYOUT_planck_grid(
-  UC(L'โŠ—'), UC(L'โŠ•'), KC_7,     KC_8,     KC_9,     UC(L'โ”ป'), MFN_R1,
-  UC(L'โŠš'), KC_0,     KC_1,     KC_2,     KC_3,     UC(L'โ”ƒ'), MFN_R2,
-  UC(L'โ”'), UC(L'โ”“'), KC_4,     KC_5,     KC_6,     UC(L'โ”ณ'), MFN_R3,
-  UC(L'โ”—'), UC(L'โ”›'), UC(L'โ”ซ'), UC(L'โ”'), UC(L'โ”ฃ'), UC(L'โ•‹'), MFN_R4
+[LY_1010] = LAYOUT_gunp(
+  XXXXXXX,   KC_HASH,   KC_7,      KC_8,      KC_9,      XXXXXXX,
+  XXXXXXX,   KC_ASTR,   KC_4,      KC_5,      KC_6,      KC_PLUS,
+  KC_L2_0,   KC_0,      KC_1,      KC_2,      KC_3,      KC_MINS,
+  KC_L3_0,   KC_L3_1,   KC_L3_2,   XXXXXXX,   XXXXXXX,   XXXXXXX
 ),
 ),
-[LY_0100] = LAYOUT_planck_grid(
- KC_F13, KC_WSCH,     KC_HOME,     KC_UP,     KC_END,     KC_PGUP,     MFN_R1,
- KC_F14, XXXXXXX,     KC_LEFT,     KC_DOWN,   KC_RGHT,    KC_PGDN,     MFN_R2,
- KC_F15, KC_WBAK,     KC_WFWD,     MC(KC_A),  MC(KC_Z),   MSC(KC_Z),   MFN_R3,
- KC_F16, MA(KC_LEFT), MC(KC_LEFT), MC(KC_F),  MC(KC_RGHT),MA(KC_RGHT), MFN_R4,
+[LY_0100] = LAYOUT_gunp(
+  XXXXXXX,   MC(KC_G),   KC_HOME,      KC_UP,      KC_END,        MC(KC_UP),
+  XXXXXXX,   KC_PGUP,    KC_LEFT,      KC_DOWN,    KC_RIGHT,      MC(KC_DOWN),
+  XXXXXXX,   KC_PGDN,    MC(KC_S),     MC(KC_A),   MC(KC_Z),      MSC(KC_Z),
+  XXXXXXX,   XXXXXXX,    MC(KC_LEFT),  MC(KC_F),   MC(KC_RIGHT),  XXXXXXX
 ),
 ),
-[LY_1100] = LAYOUT_planck_grid(
- KC_F17, MC(KC_WSCH), S(KC_HOME),  S(KC_UP),  S(KC_END),  MC(KC_PGUP), MFN_R1,
- KC_F18, XXXXXXX,     S(KC_LEFT),  S(KC_DOWN),S(KC_RGHT), MC(KC_PGDN), MFN_R2,
- KC_F19, MC(KC_S),    MC(KC_X),    MC(KC_C),  MC(KC_V),   MC(KC_L),    MFN_R3,
- KC_F20, MCA(KC_LEFT),MSC(KC_LEFT),MCA(KC_F),MSC(KC_RGHT),MCA(KC_RGHT),MFN_R4,
+[LY_1100] = LAYOUT_gunp(
+  XXXXXXX,   MSC(KC_G),  S(KC_HOME),   S(KC_UP),   S(KC_END),     MSC(KC_UP),
+  XXXXXXX,   S(KC_PGUP), S(KC_LEFT),   S(KC_DOWN), S(KC_RIGHT),   MSC(KC_DOWN),
+  XXXXXXX,   S(KC_PGDN), MC(KC_X),     MC(KC_C),   MC(KC_V),      MC(KC_L),
+  XXXXXXX,   XXXXXXX,    MSC(KC_LEFT), MC(KC_R),   MSC(KC_RIGHT), XXXXXXX
 ),
 ),
-[LY_0110] = LAYOUT_planck_grid(
-  MC(KC_F1) ,MC(KC_F2) ,MC(KC_F3) ,MC(KC_F4) ,MC(KC_F5) ,MC(KC_F6) , MFN_R1,
-  MC(KC_F7) ,MC(KC_F8) ,MC(KC_F9) ,MC(KC_F10),MC(KC_F11),MC(KC_F12), MFN_R2,
-  MC(KC_F13),MC(KC_F14),MC(KC_F15),MC(KC_F16),MC(KC_F17),MC(KC_F18), MFN_R3,
-  MC(KC_F19),MC(KC_F20),MC(KC_F21),MC(KC_F22),MC(KC_F23),MC(KC_F24), MFN_R4
+[LY_0110] = F1_F12_LAYER()
+[LY_1110] = F1_F12_LAYER(MG)
+
+[LY_0001] = LAYOUT_gunp(
+  MC(KC_H),      MC(KC_0),      MSC(KC_PGUP),  KC_BRIU,  MSC(KC_PGDN), KC_VOLU,
+  MSC(KC_T),     MC(KC_PLUS),   MC(KC_PGUP),   KC_BRID,  MC(KC_PGDN),  KC_VOLD,
+  OSM(MOD_LSFT), MC(KC_MINS),   MA(KC_LEFT),   MC(KC_T), MA(KC_RIGHT), KC_MUTE,
+  OSM(MOD_LCTL), OSM(MOD_LALT), OSM(MOD_LGUI), MC(KC_W), KC_DELETE,    KC_APP
 ),
 ),
-[LY_1110] = LAYOUT_planck_grid(
-  MG(KC_F1) ,MG(KC_F2) ,MG(KC_F3) ,MG(KC_F4) ,MG(KC_F5) ,MG(KC_F6) , MFN_R1,
-  MG(KC_F7) ,MG(KC_F8) ,MG(KC_F9) ,MG(KC_F10),MG(KC_F11),MG(KC_F12), MFN_R2,
-  MG(KC_F13),MG(KC_F14),MG(KC_F15),MG(KC_F16),MG(KC_F17),MG(KC_F18), MFN_R3,
-  MG(KC_F19),MG(KC_F20),MG(KC_F21),MG(KC_F22),MG(KC_F23),MG(KC_F24), MFN_R4
+[LY_1101] = LAYOUT_gunp(
+  SANDBOX,   XXXXXXX,    AU_TOG,       KC_LOCK,    RGB_TOG,       RESET,
+  KC_WAKE,   KC_CLCK,    USER_NAME,    USER_EMAIL, RGB_MOD,       DEBUG,
+  KC_SLEP,   KC_NLCK,    DM_REC1,      DM_PLY1,    XXXXXXX,       EEP_RST,
+  KC_PWR,    KC_SLCK,    DM_REC2,      DM_PLY2,    DM_RSTP,       KC_INSERT
 ),
 ),
-[LY_1111] = LAYOUT_planck_grid(
- KC_MPRV, DYN_REC_STOP,    KC_WH_L,         KC_MS_U, KC_WH_R, KC_WH_U, MFN_R1,
- KC_CAPS, XXXXXXX,         KC_MS_L,         KC_MS_D, KC_MS_R, KC_WH_D, MFN_R2,
- KC_MNXT, DYN_MACRO_PLAY2, DYN_MACRO_PLAY1, KC_MPLY, KC_MRWD, KC_MFFD, MFN_R3,
- KC_MSTP, DYN_REC_START2,  DYN_REC_START1,  KC_BTN2, KC_BTN1, KC_BTN3, MFN_R4,
+[LY_1111] = LAYOUT_gunp(
+  KC_ACL1,   KC_ACL0,    KC_WH_L,      KC_MS_U,    KC_WH_R,       KC_WH_U,
+  KC_ACL2,   XXXXXXX,    KC_MS_L,      KC_MS_D,    KC_MS_R,       KC_WH_D,
+  KC_MPRV,   KC_BTN5,    KC_MRWD,      KC_MPLY,    KC_MFFD,       KC_BTN3,
+  KC_MNXT,   KC_BTN4,    KC_PAUSE,     KC_MSTP,    KC_BTN1,       KC_BTN2
 ),
 ),
-[LY_1101] = LAYOUT_planck_grid(
-  XXXXXXX, MU_ON,   MU_OFF,      PRINT_ON, PRINT_OFF,   DEBUG,   MFN_R1,
-  XXXXXXX, KC_APP,  KC_VOLD,     KC_MUTE,  KC_VOLU,     XXXXXXX, MFN_R2,
-  XXXXXXX, KC_MAIL, S(KC_VOLD),  KC_INS,   S(KC_VOLU),  KC_PSCR, MFN_R3,
-  XXXXXXX, MUV_DE,  MUV_IN,      AU_ON,    AU_OFF,      RESET,   MFN_R4,
+[LY_0111] = UNUSED_LAYER
+[LY_1011] = UNUSED_LAYER
+
+[LY_1001] = UNUSED_LAYER
+[LY_0101] = UNUSED_LAYER
+[LY_0011] = UNUSED_LAYER
+
+/* mapping from US QWERTY to TH Kedmanee */
+[LY_THAI_A] = LAYOUT_gunp(
+  S(KC_G),  KC_PIPE,  KC_8,     KC_COMM,  S(KC_A),  KC_QUES,
+  S(KC_I),  KC_SCLN,  KC_QUOT,  KC_O,     KC_I,     KC_RBRC,
+  S(KC_P),  S(KC_T),  KC_M,     KC_P,     KC_EQL,   KC_COLN,
+  KC_LT,    S(KC_S),  S(KC_R),  KC_GT,    KC_R,     KC_A
 ),
 ),
-[LY_0011] = LAYOUT_planck_grid(
-  UC(L'เน‡'),  UC(L'เนŒ'),  UC(L'เนˆ'),  UC(L'เน‰'),  UC(L'เนŠ'),  UC(L'เน‹'), MFN_R1,
-  UC(L'เน‚'),  UC(L'เน'),  UC(L'เน€'),  UC(L'เธฒ'),  UC(L'เธฑ'),  UC(L'เธฐ'), MFN_R2,
-  UC(L'เน„'),  UC(L'เนƒ'),  UC(L'เธด'),  UC(L'เธต'),  UC(L'เธถ'),  UC(L'เธท'), MFN_R3,
-  UC(L'เน…'),  UC(L'เธบ'),  UC(L'เน'),  UC(L'เธธ'),  UC(L'เธน'),  UC(L'เธณ'), MFN_R4,
+[LY_THAI_B] = LAYOUT_gunp(
+  S(KC_N),  S(KC_H),  KC_J,     KC_H,     S(KC_U),  S(KC_J),
+  S(KC_F),  KC_C,     KC_G,     KC_K,     KC_Y,     KC_T,
+  KC_DOT,   KC_W,     KC_B,     KC_U,     KC_7,     KC_N,
+  KC_1,     S(KC_B),  S(KC_Y),  KC_E,     KC_6,     KC_CIRC
 ),
 ),
-[LY_1011] = LAYOUT_planck_grid(
-  UC(L'เธ'),  UC(L'เธŽ'),  UC(L'เธ'),  UC(L'เธฎ'),  UC(L'เธ‚'),  UC(L'เธƒ'), MFN_R1,
-  UC(L'เธ–'),  UC(L'เธ”'),  UC(L'เธ•'),  UC(L'เธญ'),  UC(L'เธ'),  UC(L'เธˆ'), MFN_R2,
-  UC(L'เธ '),  UC(L'เธš'),  UC(L'เธ›'),  UC(L'เธช'),  UC(L'เธซ'),  UC(L'เธ‰'), MFN_R3,
-  UC(L'เธฏ'),  UC(L'เธœ'),  UC(L'เธ'),  UC(L'เธจ'),  UC(L'เธฉ'),  UC(L'เน†'), MFN_R4,
+[LY_THAI_C] = LAYOUT_gunp(
+  KC_4,     KC_BSLS,  KC_MINS,  S(KC_V),  S(KC_E),  S(KC_D),
+  KC_5,     KC_0,     KC_D,     KC_V,     KC_F,     KC_9,
+  S(KC_L),  S(KC_K),  KC_L,     KC_S,     KC_LBRC,  KC_X,
+  S(KC_O),  KC_Q,     KC_LCBR,  S(KC_C),  KC_Z,     KC_SLSH
 ),
 ),
-[LY_0111] = LAYOUT_planck_grid(
-  UC(L'เธ’'),  UC(L'เธค'),  UC(L'เธฆ'),  UC(L'เธก'),  UC(L'เธ„'),  UC(L'เธ…'), MFN_R1,
-  UC(L'เธ“'),  UC(L'เธฃ'),  UC(L'เธฅ'),  UC(L'เธ™'),  UC(L'เธง'),  UC(L'เธ‡'), MFN_R2,
-  UC(L'เธ'),  UC(L'เธŠ'),  UC(L'เธ‹'),  UC(L'เธข'),  UC(L'เธ—'),  UC(L'เธ‘'), MFN_R3,
-  UC(L'เธŒ'),  UC(L'เธฌ'),  UC(L'เธŸ'),  UC(L'เธž'),  UC(L'เธ˜'),  UC(L'เธ†'), MFN_R4,
+[LY_SANDBOX] = LAYOUT_ortho_4x12(
+  KC_LCBR, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_K, KC_RCBR,
+  KC_LBRC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_RBRC,
+  KC_LPRN,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_M,KC_COMM,KC_DOT,KC_SCLN,KC_COLN,KC_RPRN,
+  KC_LT  , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GT
 ),
 ),
-[LY_0001] = UNUSED_LAYER
-[LY_0101] = UNUSED_LAYER
-[LY_1001] = UNUSED_LAYER
+[LY_STICK] = UNUSED_LAYER // as a gateway to other persistant layers
 };
 };
 
 
-#ifdef AUDIO_ENABLE
-  float plover_song[][2]     = SONG(PLOVER_SOUND);
-  float plover_gb_song[][2]  = SONG(PLOVER_GOODBYE_SOUND);
-#endif
+#define NUM_LANGS 2
+#define LANG_ENG  0
+#define LANG_THAI 1
+
+uint16_t cur_layer = LY_0000;
+uint16_t cur_lang = LANG_ENG;
+bool is_layer_persistant = false;
+
+void change_layer(uint16_t new_layer) {
+  if(cur_layer != new_layer) {
+    layer_off(cur_layer);
+    layer_on(new_layer);
+    cur_layer = new_layer;
+  }
+}
+
+void change_lang(uint16_t lang) {
+  while(lang != cur_lang) {
+    SEND_STRING(SS_LGUI(" "));
+    cur_lang = (cur_lang + 1) % NUM_LANGS;
+  }
+}
+
+void user_panic(void) {
+  SEND_STRING("Planck Keyboard: User Panic!");
+}
+
+void update_env_thai(void) {
+  if(LY_THAI_A <= cur_layer && cur_layer <= LY_THAI_C) {
+    change_lang(LANG_THAI);
+  } else {
+    change_lang(LANG_ENG);
+  }
+}
+
+uint16_t get_persistant_layer_from_keycode(uint16_t keycode) {
+  switch(keycode) {
+    case FUNC_A:   return LY_1000;
+    case FUNC_B:   return LY_1010;
+    case FUNC_C:   return LY_0010;
+    case FUNC_D:   return LY_0000;
+    case LTHAI_A:  return LY_THAI_A;
+    case LTHAI_B:  return LY_THAI_B;
+    case LTHAI_C:  return LY_THAI_C;
+    case LSW0110:  return LY_0110;
+    case LSW1111:  return LY_1111;
+    case LSW0100:  return LY_0100;
+  }
+  return 0; // this line is unreachable but be here to make the complier happy
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+  if(!is_layer_persistant && FUNC_A <= keycode && keycode <= FUNC_D) {
+    uint16_t mask = 1 << (3 - (keycode - FUNC_A));
+    uint16_t cur_layer_code = cur_layer - LY_0000;
+    if(!(LY_0000 <= cur_layer && cur_layer <= LY_1111))
+      user_panic();
+    if(!(cur_layer_code & mask) == record->event.pressed)
+      change_layer((mask ^ cur_layer_code) + LY_0000);
+    return false;
+  }
+
+  if(!(record->event.pressed))
+    return !(MIN_KC <= keycode && keycode <= MAX_KC);
+
+  switch(keycode) {
+    case USER_NAME:
+      SEND_STRING("Gun Pinyo");
+      return false;
 
 
-uint16_t cur_layer_code = 0;
+    case USER_EMAIL:
+      SEND_STRING("gunpinyo@gmail.com");
+      return false;
+
+    case SANDBOX:
+    case STICK:
+      change_layer(keycode == STICK ? LY_STICK : LY_SANDBOX);
+      change_lang(LANG_ENG);
+      is_layer_persistant = true;
+      return false;
+
+    case FUNC_A:  case FUNC_B:  case FUNC_C:   case FUNC_D:
+    case LTHAI_A: case LTHAI_B: case LTHAI_C:
+    case LSW0110: case LSW1111: case LSW0100:
+      if(is_layer_persistant) {
+        change_layer(get_persistant_layer_from_keycode(keycode));
+        update_env_thai();
+        // `FUNC_D` resets the layer configuration when `is_layer_persistant`
+        is_layer_persistant = keycode != FUNC_D;
+        if(!is_layer_persistant) {
+          clear_keyboard();
+          layer_clear();
+        }
+      }
+      return false;
+  }
+  return true;
+}
+
+#ifdef RGB_MATRIX_ENABLE
+  void rgb_matrix_indicators_kb(void) {
+    // `42` is the index of the middle light at the bottom row (in planck light)
+    // it is disabled because it does not have a cover, hence irritates my eyes
+    rgb_matrix_set_color(42, 0, 0, 0);
+  }
+#endif
 
 
 #ifdef AUDIO_ENABLE
 #ifdef AUDIO_ENABLE
+  float tone_startup[][2]    = SONG(STARTUP_SOUND);
+  float tone_goodbye[][2]    = SONG(GOODBYE_SOUND);
+
+  float tone_ly_normal[][2]  = SONG(QWERTY_SOUND);
+  float tone_ly_spacial[][2] = SONG(DVORAK_SOUND);
 
 
-float tone_startup[][2]    = SONG(STARTUP_SOUND);
-float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
-float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
-float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
-float tone_plover[][2]     = SONG(PLOVER_SOUND);
-float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
-float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
-float tone_goodbye[][2]    = SONG(GOODBYE_SOUND);
+  float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
 #endif
 #endif
 
 
 void startup_user() {
 void startup_user() {
-  _delay_ms(20); // gets rid of tick
-  set_unicode_input_mode(UC_LNX);
 #ifdef AUDIO_ENABLE
 #ifdef AUDIO_ENABLE
   PLAY_SONG(tone_startup);
   PLAY_SONG(tone_startup);
 #endif
 #endif
@@ -168,22 +301,6 @@ void startup_user() {
 void shutdown_user() {
 void shutdown_user() {
 #ifdef AUDIO_ENABLE
 #ifdef AUDIO_ENABLE
   PLAY_SONG(tone_goodbye);
   PLAY_SONG(tone_goodbye);
-  _delay_ms(150);
   stop_all_notes();
   stop_all_notes();
 #endif
 #endif
 }
 }
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-  uint16_t mask = 1 << (3 - (keycode - FN_A));
-  if (!process_record_dynamic_macro(keycode, record))
-    return false;
-  if(FN_A <= keycode && keycode <= FN_D) {
-    if(!(cur_layer_code & mask) == record->event.pressed) {
-      layer_off(cur_layer_code + LY_0000);
-      cur_layer_code ^= mask;
-      layer_on(cur_layer_code + LY_0000);
-    }
-    return false;
-  }
-  return true;
-}

+ 77 - 23
keyboards/planck/keymaps/gunp/readme.md

@@ -1,24 +1,78 @@
-# GunP Planck Layout
-## TODO:
-  - fix the problem between builtin dynamic macros
-      and my custom layout switching mechanism.
-  - implement Thai layers.
-                                                                            ```
-  {8| Gun Pinyo |8}     "with no modifiers or with Shift"     {8| Gun Pinyo |8}
-  {0| Del |  Q  |  W  |  F  |  P  |  G  |  J  |  L  |  U  |  Y  |  K  | Tab |0}
-  {0|BkSpc|  A  |  R  |  S  |  T  |  D  |  H  |  N  |  E  |  I  |  O  |Enter|0}
-  {0|Shift|  Z  |  X  |  C  |  V  |  B  |  M  |FN_A |FN_B |FN_C |FN_D |Shift|0}
-  {0| XXX | F21 | F22 | Esc |Space| F23 | F24 | Ctr |Shift| Alt | Gui | XXX |0}
-
-    {8| "with FN_A" |8}     {8| "with FN_A, FN_C" |8}     {8| "with FN_C" |8}
-   {0|  โˆƒ / } ) ] >  |0}      {0|  โŠ— โŠ• 7 8 9 โ”ป  |0}      {0|  ร— * ? ! ` #  |0}
-   {0|  โˆ€ \ { ( [ <  |0}      {0|  โŠš 0 1 2 3 โ”ƒ  |0}      {0|  โ†’ - , .\' =  |0}
-   {0|  & | @ ~ $ ^  |0}      {0|  โ” โ”“ 4 5 6 โ”ณ  |0}      {0|  โˆ˜ + ; :\" _  |0}
-   {0|  F1 ..... F6  |0}      {0|  โ”— โ”› โ”ซ โ” โ”ฃ โ•‹  |0}      {0|  F7 .... F12  |0}
-
-   {8| "with FN_ACD" |8}      {8| "with  FN_CD" |8}      {8| "with FN_BCD" |8}
-   {0|  เธ เธŽ เธ เธฎ เธ‚ เธƒ  |0}      {0|  เน‡  เนŒ เนˆ เน‰ เนŠ เน‹  |0}      {0|  เธ’ เธค เธฆ เธก เธ„ เธ…  |0}
-   {0|  เธ– เธ” เธ• เธญ เธ เธˆ  |0}      {0|  เน‚ เน เน€ เธฒ เธฑ เธฐ  |0}      {0|  เธ“ เธฃ เธฅ  เธ™ เธง เธ‡  |0}
-   {0|  เธ  เธš เธ› เธช เธซ เธ‰  |0}      {0| เน„ เนƒ เธด เธต เธถ เธท  |0}      {0|  เธ เธŠ เธ‹ เธข เธ— เธ‘  |0}
-   {0|  เธฏ เธœ เธ เธจ เธฉ เน†  |0}      {0|  เน… เธบ เน  เธธ เธน เธณ  |0}      {0|  เธŒ เธฌ เธŸ เธž เธ˜ เธ†  |0}
+![Cheat sheet of gunp layout for Planck keyboards](https://drive.google.com/uc?export=view&id=1INtnZhzoHpPkZ2kueP1K0Dpr6T1spr4m)
+
+# gunp layout for Planck keyboards
+
+* Layout Maintainer: [Gun Pinyo](https://github.com/gunpinyo)
+
+This is my personal layout for Planck keyboards. Almost all of important
+information is already in the picture of the cheat sheet above. There is also a
+text-version of this cheat sheet at the end of this readme file. If both of them
+are not the same, then please trust the text-version more because the picture is
+just a screenshot of the text.
+
+The base layer is `LY-0000`. Next, we custom keycodes called `FuncA`, `FuncB`,
+`FuncC`, and `FuncD` (`FuncX` for short) which will switch to layout `LY-ABCD`
+depending on the binary state of each `FuncX` where the corresponded binary
+digit is a boolean "keycode `FuncX` is currently being pressed". This mechanism
+allows us to access up to 16 different layers, however, only some of them have
+been used. A layer matches regex `LY-....` is currently used if and only if the
+cheat sheet mentions it.
+
+Once each of these non-based layers activates (by a combination of `FuncX`
+keycodes):
+  - the left-half (rows 0-3, columns 0-5) will switch according to its
+    individual keymap on cheat sheet,
+  - the right-half (rows 0-3, columns 6-11) will switch to the `RIGHT-HALF`
+    keymap such that keycodes that matches the regex `(L....|Thai[ABC])` are
+    disabled and (partially) being replaced by `FuncX` keycodes on the same
+    position of the base layer and keycodes in binary numbers there are
+    disabled.
+
+Another keycode in the base layer is `Stick`. When it is press, the rules of
+keyboard change into persistent mode. Here, the right-half is exactly the
+`RIGHT-HALF` keymap in the cheat sheet. Keycodes in left-half are all no-op
+initially and can be changed to other layers by tapping on the corresponded
+keycodes `(L....|Thai[ABC])`. To switch back to the normal rules governed by
+`FuncX` press a `Relax` keycode.
+
+Remark:
+  - Layers `LY-Thai[ABC]` are only accessible via persistent mode.
+  - This layout doesn't employ any transparent keycode, therefore, empty
+    keycodes (including dummy keycodes `XXX`) are all no-op.
+  - Prefixes `S-`, `C-`, `A-`, and `G-` are combinators for `sft-๐Ÿ œ`, `ctl-๐Ÿ œ`,
+    `alt-๐Ÿ œ`, and `gui-๐Ÿ œ`, respectively.
+  - All keycodes that starts with a capital letter are custom keycodes. Except
+    single letters which stand for their alphabet.
+  - There is a conflict with dynamic macro (QMK's feature) with my layer
+    switching mechanisms, so I disable it but keep its keycodes there for later
+    implementation.
+
+```
+  {H| "LY-0000": base-layer -- "`[๐Ÿ ]` here becomes `FuncD` in other layers" |H}   {H| "RIGHT-HALF":  "when `Stick` is on" |H}
+  {8| pgup|  Q  |  W  |  F  |  P  |  G  |  J  |  L  |  U  |  Y  |  K  | tab |8}   {8| L0110| [๐Ÿ œ] |bkspc| [๐Ÿ ž] | XXX | XXX  |8}
+  {8| pgdn|  A  |  R  |  S  |  T  |  D  |  H  |  N  |  E  |  I  |  O  |Stick|8}   {8| L1111|ThaiA|ThaiB|ThaiC| XXX | XXX  |8}
+  {8|sft-๐Ÿ œ|  Z  |  X  |  C  |  V  |  B  |  M  |FuncA|FuncB|FuncC| [๐Ÿ ] |sft-๐Ÿ ž|8}   {8| L0100|L1000|L1010|L0010|Relax|sft-๐Ÿ ž |8}
+  {8|ctl-๐Ÿ œ|alt-๐Ÿ œ|gui-๐Ÿ œ| esc |bkspc|enter|FuncD|space|print| [๐Ÿ œ] | [๐Ÿ Ÿ] | [๐Ÿ ž] |8}   {8| Relax|space|enter|gui-๐Ÿ ž|alt-๐Ÿ ž|ctl-๐Ÿ ž |8}
+
+  {H| "LY-0100": "col0 as no-op" |H}   {H|  "LY-1101" -- "Email: gunpinyo@gmail.com"  |H}   {x|  "LY-0110" -- "gunpinyo"  |x}
+  {8| C-G  home  [๐Ÿ ]  end  C-[๐Ÿ ] |8}   {8| Sandbox XXX AudTog KeyLock RgbTog QmkReset |8}   {โœœ| S-f7 S-f8  f7 f8 f9  S-f9 |โœœ}
+  {8| pgup  [๐Ÿ œ]  [๐Ÿ Ÿ]  [๐Ÿ ž]  C-[๐Ÿ Ÿ] |8}   {8| wake  caplock MyName Email RgbMod QmkDebug |8}   {โœœ| S-f4 S-f5  f4 f5 f6  S-f6 |โœœ}
+  {8| pgdn  C-S  C-A  C-Z  SC-Z  |8}   {8| sleep numlock DmRec1 DmPlay1 XXX QmkEepRst |8}   {โœœ| S-f1 S-f2  f1 f2 f3  S-f3 |โœœ}
+  {8|     C-[๐Ÿ œ]  C-F  C-[๐Ÿ ž]      |8}   {8| power scrlock DmRec2 DmPlay2 DmStop insert |8}   {โœœ|S-f10 S-f11 f10f11f12 S-f12|โœœ}
+
+  {8|    "LY-1000"    |8}   {8|    "LY-1010"    |8}   {8|    "LY-0010"    |8}   {H| "LY-1111" - "powered by QMK firmware" |H}
+  {H|  %  ?  !  `     |H}   {H|  #  7  8  9     |H}   {H|  &  |  ~  ^     |H}   {8| msAC1 msAC0  scr-๐Ÿ œ mov-๐Ÿ  scr-๐Ÿ ž  scr-๐Ÿ  |8}
+  {H|  @  ,  .  '  =  |H}   {H|  *  4  5  6  +  |H}   {H|  {  [  (  <  /  |H}   {8| msAC2  XXX   mov-๐Ÿ œ mov-๐Ÿ Ÿ mov-๐Ÿ ž  scr-๐Ÿ Ÿ |8}
+  {H|  $  ;  : \"  _  |H}   {H|  0  1  2  3  -  |H}   {H|  }  ]  )  >  \  |H}   {8| mPrev btn-๐Ÿ   mRWD  mPlay mFFD   btn-โœœ |8}
+                                                                                {8| mNext btn-๐Ÿ Ÿ  pause mStop btn-๐Ÿ œ  btn-๐Ÿ ž |8}
+  1. evdev pc105 (US: qwerty, TH: kedmanee)    5. "LY-1110" is `G-`+"LY-0110"
+  2. `G-space` is used to switch XKB layout    6. "LY-1100" is `S-`+"LY-0100" except [C-S, C-A, C-Z, SC-Z, C-F] which become
+  3. when `Stick` is off, layer switchers other than `FuncX` are disabled       [C-X, C-C, C-V,  C-L, C-R] respectively
+  4. ["LY-1000", "LY-1010", "LY-0010"] omit col0 and row3, but they have all `mod-๐Ÿ œ` from the base-layer, the rest are no-op
+
+  {H| "LY-0001" -- "`mod#๐Ÿ œ` is oneshot-mod" |H}   {8|    "LY-ThaiA"   |8}   {8|    "LY-ThaiB"   |8}   {8|    "LY-ThaiC"   |8}
+  {8|  C-H C-0  SC-pgup bri-๐Ÿ  SC-pgdn vol-๐Ÿ  |8}   {H|  เธŒ โ€โ€โ€เธ… โ€เธ„  เธก เธค เธฆ  |H}   {H|  เนŒ โ€โ€โ€โ€โ€เน‡  เนˆ  เน‰  เนŠ  เน‹  |H}   {H|  เธ  โ€โ€เธƒ โ€เธ‚  เธฎ โ€โ€โ€เธŽ โ€โ€เธ  |H}
+  {8| SC-T C-[+] C-pgup bri-๐Ÿ Ÿ  C-pgdn vol-๐Ÿ Ÿ |8}   {H|  เธ“ โ€เธง โ€โ€โ€โ€โ€เธ‡  โ€เธ™ โ€โ€เธฃ โ€เธฅ  |H}   {H|  เน‚ โ€เน โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€เน€ โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€เธฒ โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€เธฑ โ€โ€โ€โ€โ€โ€โ€โ€เธฐ  |H}   {H|  เธ– โ€โ€โ€โ€เธˆ โ€โ€โ€เธ  เธญ โ€โ€โ€เธ” โ€โ€เธ•  |H}
+  {8| sft#๐Ÿ œ C-[-]  A-[๐Ÿ œ]  C-T  A-[๐Ÿ ž]  vol-โœœ |8}   {H|  เธ โ€โ€เธ˜ โ€โ€โ€เธ—  เธข เธŠโ€โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€เธ‹  |H}   {H|  เนƒ โ€โ€โ€เน„ โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€เธด โ€โ€โ€โ€โ€โ€เธต โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€เธถ โ€โ€โ€โ€โ€เธท  |H}   {H|  เธจ โ€เธฉ โ€โ€เธช  เธซ โ€เธš เธ›  |H}
+  {8| ctl#๐Ÿ œ alt#๐Ÿ œ  gui#๐Ÿ œ  C-W  delete  menu |8}   {H|  เธ’ เธ† เธ‘ โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€เธฌ เธžโ€โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€เธŸ  |H}   {H|  โ€โ€โ€โ€เน… โ€โ€โ€โ€โ€โ€โ€เธบ  เน  เธณ  เธธ โ€โ€โ€โ€โ€โ€โ€โ€โ€โ€เธน  |H}   {H|  เธฏ โ€โ€เน† โ€โ€โ€โ€เธ  เธ‰ โ€โ€โ€เธœ โ€เธ  |H}
 ```
 ```

+ 15 - 17
keyboards/planck/keymaps/gunp/rules.mk

@@ -1,20 +1,18 @@
 # Build Options
 # Build Options
-#   change to "no" to disable the options, or define them in the Makefile in
-#   the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
-CONSOLE_ENABLE = no         # Console for debug(+400)
-COMMAND_ENABLE = no        # Commands for debug and configuration
-NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality
-MIDI_ENABLE = no            # MIDI controls
-AUDIO_ENABLE = yes           # Audio output on port C6
-UNICODE_ENABLE = yes         # Unicode
-BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight. 
-
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = yes        # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
 # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if NKRO_ENABLE doesn't work, see here:
+# https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no       # Enable Bluetooth
+AUDIO_ENABLE = yes          # Audio output
 
 
+KEY_LOCK_ENABLE = yes
+DEBOUNCE_TYPE = sym_defer_pk

+ 0 - 16
keyboards/planck/keymaps/gunp/upload-and-make.sh

@@ -1,16 +0,0 @@
-#!/usr/bin/env bash
-
-pushd ~/git-repos/qmk_firmware/
-rm -rf keyboards/planck/keymaps/gunp/
-cp -rf ~/Documents/qmk-planck/ keyboards/planck/keymaps/gunp/
-if [[ $1 == "dfu" ]]; then
-    # sudo dfu-programmer atmega32u4 erase --force
-    # sudo dfu-programmer atmega32u4 flash .build/planck_rev4_gunp.hex
-    # sudo dfu-programmer atmega32u4 reset
-    sudo make planck/rev4:gunp:dfu
-    # bash ~/bin/gunp-kb-layout-reset
-else
-    make planck/rev4:gunp:clean
-    make planck/rev4:gunp:all
-fi
-popd