]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
update with qmk master (#2887)
authorsdothum <sdothum@gmail.com>
Sat, 5 May 2018 01:36:23 +0000 (21:36 -0400)
committerDrashna Jaelre <drashna@live.com>
Sat, 5 May 2018 01:36:23 +0000 (18:36 -0700)
* add splitography

* trim keymap.c

* add Makefile

* rename Makefile to rules.mk

* thumb key definition

* thumb key definition

* thumb key definition

* blue/orange layer swap, double qwerty steno exit

* fix TxBolt 1-3 key chord suppression (PREVENT_STUCK_MODIFIERS)

* add audio control

* beakl 8+10, dvorak (standard and splitography wide variant)

* beakl 8+10, dvorak (standard and splitography wide variant)

* shift layer home blocks

* regex layer key changes

* tilde align symbol navigation and regex layer

* splitography/planck code break out into common .h segments

* splitography/planck code break out into common .h segments

* splitography common library

* splitography common library

* splitography beakl altgr home row

* updating with qmk master

68 files changed:
keyboards/planck/keymaps/altgr/beakl.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/colemak.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/common/chord_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/common/init.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/common/keycode_functions.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/common/number_fkey_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/common/number_fkey_layout.save.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/common/plover_keybind.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/common/sounds.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/common/steno_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/common/symbol_guifn_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/common/tapdance.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/common/toggle_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/config.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/altgr/private_string.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/qwerty.h [new file with mode: 0644]
keyboards/planck/keymaps/altgr/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/altgr/rules.mk [new file with mode: 0644]
keyboards/planck/keymaps/hiea/common/chord_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/hiea/common/init.h [new file with mode: 0644]
keyboards/planck/keymaps/hiea/common/keycode_functions.h [new file with mode: 0644]
keyboards/planck/keymaps/hiea/common/number_fkey_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/hiea/common/plover_keybind.h [new file with mode: 0644]
keyboards/planck/keymaps/hiea/common/sounds.h [new file with mode: 0644]
keyboards/planck/keymaps/hiea/common/steno_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/hiea/common/symbol_guifn_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/hiea/common/tapdance.h [new file with mode: 0644]
keyboards/planck/keymaps/hiea/common/toggle_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/hiea/config.h [new file with mode: 0644]
keyboards/planck/keymaps/hiea/hiea.h [new file with mode: 0644]
keyboards/planck/keymaps/hiea/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/hiea/qwerty.h [new file with mode: 0644]
keyboards/planck/keymaps/hiea/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/hiea/rules.mk [new file with mode: 0644]
keyboards/planck/keymaps/hieax/common/chord_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/hieax/common/init.h [new file with mode: 0644]
keyboards/planck/keymaps/hieax/common/keycode_functions.h [new file with mode: 0644]
keyboards/planck/keymaps/hieax/common/number_fkey_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/hieax/common/plover_keybind.h [new file with mode: 0644]
keyboards/planck/keymaps/hieax/common/sounds.h [new file with mode: 0644]
keyboards/planck/keymaps/hieax/common/steno_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/hieax/common/symbol_guifn_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/hieax/common/tapdance.h [new file with mode: 0644]
keyboards/planck/keymaps/hieax/common/toggle_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/hieax/config.h [new file with mode: 0644]
keyboards/planck/keymaps/hieax/hiea.h [new file with mode: 0644]
keyboards/planck/keymaps/hieax/hiea.sync-conflict-20180501-144403-SMV4TP4.h [new file with mode: 0644]
keyboards/planck/keymaps/hieax/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/hieax/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/hieax/rules.mk [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/beakl.h [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/colemak.h [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/common/chord_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/common/init.h [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/common/keycode_functions.h [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/common/number_fkey_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/common/plover_keybind.h [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/common/sounds.h [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/common/steno_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/common/symbol_guifn_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/common/tapdance.h [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/common/toggle_layout.h [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/config.h [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/qwerty.h [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/sdothum/rules.mk [new file with mode: 0644]

diff --git a/keyboards/planck/keymaps/altgr/beakl.h b/keyboards/planck/keymaps/altgr/beakl.h
new file mode 100644 (file)
index 0000000..a684a6c
--- /dev/null
@@ -0,0 +1,612 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// .................................................................... BEAKL EZ
+#ifdef BEAKLEZ
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   K  | ^Alt | ^GUI |   F  |   G  |   R  |   C  |   V  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |   A  |   "  | ↑Alt | ↑GUI |   L  |   S  |   T  |   N  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   ;  |   ,  |   J  |   .  |   X  | Caps |^Shift|   B  |   D  |   M  |   P  |   Z  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_K,    CNTR_TL, CNTR_TR, KC_F,    KC_G,    KC_R,    KC_C,    KC_V   },
+    {KC_H,    KC_I,    KC_E,    HOME_A,  TD_QUOT, CNTR_HL, CNTR_HR, KC_L,    KC_S,    KC_T,    KC_N,    KC_W   },
+    {KC_SCLN, KC_COMM, KC_J,    KC_DOT,  KC_X,    CNTR_BL, CNTR_BR, KC_B,    KC_D,    KC_M,    KC_P,    KC_Z   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_K), CNTR_TL, CNTR_TR, S(KC_F), S(KC_G), S(KC_R), S(KC_C), S(KC_V)},
+    {S(KC_H), S(KC_I), S(KC_E), S(KC_A), TD_QUOT, CNTR_HL, CNTR_HR, S(KC_L), S(KC_S), S(KC_T), S(KC_N), S(KC_W)},
+    {KC_SCLN, KC_COMM, S(KC_J), KC_DOT,  S(KC_X), CNTR_BL, CNTR_BR, S(KC_B), S(KC_D), S(KC_M), S(KC_P), S(KC_Z)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   K  | ^Alt | ^GUI |   F  |   G  |   R  |   C  |   V  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |   A  |   "  | ↑Alt | ↑GUI |   L  |   S  |   T  |   N  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   :  |   ~  |   J  |   `  |   X  | Caps |^Shift|   B  |   D  |   M  |   P  |   Z  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_K), CNTR_TL, CNTR_TR, S(KC_F), S(KC_G), S(KC_R), S(KC_C), S(KC_V)},
+    {S(KC_H), S(KC_I), S(KC_E), S(KC_A), TD_DQOT, CNTR_HL, CNTR_HR, S(KC_L), S(KC_S), S(KC_T), S(KC_N), S(KC_W)},
+    {TD_COLN, TD_TILD, S(KC_J), TD_GRV,  S(KC_X), CNTR_BL, CNTR_BR, S(KC_B), S(KC_D), S(KC_M), S(KC_P), S(KC_Z)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   K  | ^Alt | ^GUI |   F  |   G  |   R  |   C  |   V  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |   A  |   "  | ↑Alt | ↑GUI |   L  |   S  |   T  |   N  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   :  |   /  |   J  |   ?  |   X  | Caps |^Shift|   B  |   D  |   M  |   P  |   Z  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_K), CNTR_TL, CNTR_TR, S(KC_F), S(KC_G), S(KC_R), S(KC_C), S(KC_V)},
+    {S(KC_H), S(KC_I), S(KC_E), S(KC_A), TD_DQOT, CNTR_HL, CNTR_HR, S(KC_L), S(KC_S), S(KC_T), S(KC_N), S(KC_W)},
+    {TD_COLN, KC_SLSH, S(KC_J), KC_QUES, S(KC_X), CNTR_BL, CNTR_BR, S(KC_B), S(KC_D), S(KC_M), S(KC_P), S(KC_Z)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// ..................................................................... BEAKL 8
+#ifdef BEAKL8
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   X  | ^Alt | ^GUI |   G  |   C  |   R  |   F  |   Z  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  | ↑Alt | ↑GUI |   D  |   S  |   T  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   I  |   ,  | Caps |^Shift|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_X,    CNTR_TL, CNTR_TR, KC_G,    KC_C,    KC_R,    KC_F,    KC_Z   },
+    {KC_K,    KC_H,    KC_E,    HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_D,    KC_S,    KC_T,    KC_N,    KC_B   },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_W,    KC_M,    KC_L,    KC_P,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_C), S(KC_R), S(KC_F), S(KC_Z)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_D), S(KC_S), S(KC_T), S(KC_N), S(KC_B)},
+    {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   X  | ^Alt | ^GUI |   G  |   C  |   R  |   F  |   Z  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ~  | ↑Alt | ↑GUI |   D  |   S  |   T  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   I  |   `  | Caps |^Shift|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_C), S(KC_R), S(KC_F), S(KC_Z)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), TD_TILD, CNTR_HL, CNTR_HR, S(KC_D), S(KC_S), S(KC_T), S(KC_N), S(KC_B)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), TD_GRV,  CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   X  | ^Alt | ^GUI |   G  |   C  |   R  |   F  |   Z  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  | ↑Alt | ↑GUI |   D  |   S  |   T  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   I  |   /  | Caps |^Shift|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_C), S(KC_R), S(KC_F), S(KC_Z)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_D), S(KC_S), S(KC_T), S(KC_N), S(KC_B)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// .................................................................... BEAKL 8P
+#ifdef BEAKL8P
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | ^Alt | ^GUI |   G  |   D  |   R  |   F  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  | ↑Alt | ↑GUI |   C  |   T  |   S  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   I  |   ,  | Caps |^Shift|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_Z,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_R,    KC_F,    KC_X   },
+    {KC_K,    KC_H,    KC_E,    HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    KC_T,    KC_S,    KC_N,    KC_B   },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_W,    KC_M,    KC_L,    KC_P,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)},
+    {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   {  |   }  |   $  | ^Alt | ^GUI |   G  |   D  |   R  |   F  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   <  |   >  |   ~  | ↑Alt | ↑GUI |   C  |   T  |   S  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   !  |   =  |   `  | Caps |^Shift|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_Y), KC_LCBR, KC_RCBR, KC_DLR,  CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)},
+    {S(KC_K), S(KC_H), TD_LT,   TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)},
+    {S(KC_J), KC_COLN, KC_EXLM, KC_EQL,  TD_GRV,  CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | ^Alt | ^GUI |   ^  |   [  |   ]  |   F  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  | ↑Alt | ↑GUI |   |  |   (  |   )  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   I  |   /  | Caps |^Shift|   \  |   $  |   *  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, KC_CIRC, KC_LBRC, KC_RBRC, S(KC_F), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, S(KC_N), S(KC_B)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_DLR,  KC_ASTR, S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// ................................................................... BEAKL 8TX
+#ifdef BEAKL8TX
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   J  | ^Alt | ^GUI |   G  |   D  |   R  |   F  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  | ↑Alt | ↑GUI |   C  |   T  |   S  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   ;  |   "  |   I  |   ,  | Caps |^Shift|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_J,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_R,    KC_F,    KC_X   },
+    {HOME_K,  HOME_H,  HOME_E,  HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    HOME_T,  HOME_S,  HOME_N,  HOME_B },
+    {KC_Z,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_W,    KC_M,    KC_L,    KC_P,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)},
+    {S(KC_Z), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   $  |   {  |   }  |   J  | ^Alt | ^GUI |   G  |   D  |   R  |   F  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   /  |   <  |   >  |   ~  | ↑Alt | ↑GUI |   C  |   T  |   S  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   :  |   !  |   =  |   `  | Caps |^Shift|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), KC_DLR,  KC_LCBR, KC_RCBR, S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)},
+    {S(KC_K), KC_SLSH, TD_LT,   TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)},
+    {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL,  TD_GRV,  CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   J  | ^Alt | ^GUI |   G  |   [  |   ]  |   ^  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  | ↑Alt | ↑GUI |   |  |   (  |   )  |   $  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   :  |   "  |   I  |   /  | Caps |^Shift|   \  |   *  |   .  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  S(KC_B)},
+    {S(KC_Z), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT,  S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// ................................................................... BEAKL 8TT
+#ifdef BEAKL8TT
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   J  |   Fn | Caps |   G  |   D  |   R  |   F  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  |Cursor| Mouse|   C  |   T  |   S  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   ;  |   "  |   I  |   ,  |  Num | Regex|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_J,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_R,    KC_F,    KC_X   },
+    {HOME_K,  HOME_H,  HOME_E,  HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    HOME_T,  HOME_S,  HOME_N,  HOME_B },
+    {KC_Z,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_W,    KC_M,    KC_L,    KC_P,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)},
+    {S(KC_Z), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   $  |   {  |   }  |   J  |   Fn | Caps |   G  |   D  |   R  |   F  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   /  |   <  |   >  |   ~  |Cursor| Mouse|   C  |   T  |   S  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   :  |   !  |   =  |   `  |  Num | Regex|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), KC_DLR,  KC_LCBR, KC_RCBR, S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)},
+    {S(KC_K), KC_SLSH, TD_LT,   TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)},
+    {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL,  TD_GRV,  CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   J  |   Fn | Caps |   G  |   [  |   ]  |   ^  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  |Cursor| Mouse|   |  |   (  |   )  |   $  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   :  |   "  |   I  |   /  |  Num | Regex|   \  |   *  |   .  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  S(KC_B)},
+    {S(KC_Z), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT,  S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// .................................................................... BEAKL 10
+#ifdef BEAKL10
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   H  |   O  |   U  |   X  | ^Alt | ^GUI |   G  |   D  |   N  |   M  |   V  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   Y  |   I  |   E  |   A  |   .  | ↑Alt | ↑GUI |   C  |   S  |   R  |   T  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   ,  |   Z  | Caps |^Shift|   B  |   P  |   L  |   F  |   K  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_H,    KC_O,    KC_U,    KC_X,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_N,    KC_M,    KC_V   },
+    {KC_Y,    KC_I,    KC_E,    HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    KC_S,    KC_R,    KC_T,    KC_W   },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_COMM, KC_Z,    CNTR_BL, CNTR_BR, KC_B,    KC_P,    KC_L,    KC_F,    KC_K   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_H), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_V)},
+    {S(KC_Y), S(KC_I), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_S), S(KC_R), S(KC_T), S(KC_W)},
+    {S(KC_J), KC_SCLN, TD_QUOT, KC_COMM, S(KC_Z), CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_K)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   [  |   !  |   ]  |   X  | ^Alt | ^GUI |   G  |   D  |   N  |   M  |   V  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   Y  |   <  |   =  |   >  |   ~  | ↑Alt | ↑GUI |   C  |   S  |   R  |   T  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   `  |   Z  | Caps |^Shift|   B  |   P  |   L  |   F  |   K  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), TD_LBRC, KC_EXLM, TD_RBRC, S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_V)},
+    {S(KC_Y), TD_LT,   KC_EQL,  TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_S), S(KC_R), S(KC_T), S(KC_W)},
+    {S(KC_J), KC_COLN, TD_DQOT, TD_GRV,  S(KC_Z), CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_K)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   H  |   O  |   U  |   X  | ^Alt | ^GUI |   G  |   {  |   +  |   }  |   V  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   Y  |   I  |   E  |   A  |   ?  | ↑Alt | ↑GUI |   C  |   (  |   *  |   )  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   /  |   Z  | Caps |^Shift|   B  |   P  |   L  |   F  |   K  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_H), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), TD_LCBR, KC_PLUS, TD_RCBR, S(KC_V)},
+    {S(KC_Y), S(KC_I), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), TD_LPRN, KC_ASTR, TD_RPRN, S(KC_W)},
+    {S(KC_J), TD_COLN, TD_DQOT, KC_SLSH, S(KC_Z), CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_K)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// ............................................................... BEAKL Mash Up
+#ifdef BEAKL810
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | ^Alt | ^GUI |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  | ↑Alt | ↑GUI |   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   I  |   ,  | Caps |^Shift|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_Z,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_N,    KC_M,    KC_X   },
+    {KC_K,    KC_H,    KC_E,    HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    KC_T,    KC_R,    KC_S,    KC_W   },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_B,    KC_P,    KC_L,    KC_F,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   {  |   }  |   $  | ^Alt | ^GUI |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   <  |   >  |   ~  | ↑Alt | ↑GUI |   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   !  |   =  |   `  | Caps |^Shift|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_Y), KC_LCBR, KC_RCBR, KC_DLR,  CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_K), S(KC_H), TD_LT,   TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), KC_COLN, KC_EXLM, KC_EQL,  TD_GRV,  CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | ^Alt | ^GUI |   ^  |   [  |   ]  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  | ↑Alt | ↑GUI |   |  |   (  |   )  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   I  |   /  | Caps |^Shift|   \  |   $  |   *  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, KC_CIRC, KC_LBRC, KC_RBRC, S(KC_M), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, S(KC_S), S(KC_W)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_DLR,  KC_ASTR, S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// .................................................................... BEAKL MU
+#ifdef BEAKLMU
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  |  Fn  | Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   I  |   ,  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_Z,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_N,    KC_M,    KC_X   },
+    {HOME_K,  HOME_H,  HOME_E,  HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    HOME_T,  HOME_R,  HOME_S,  HOME_W },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_B,    KC_P,    KC_L,    KC_F,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   $  |   {  |   }  |   Z  |  Fn  | Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   /  |   <  |   >  |   ~  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   !  |   =  |   `  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), KC_DLR,  KC_LCBR, KC_RCBR, S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_K), KC_SLSH, TD_LT,   TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL,  TD_GRV,  CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  |  Fn  | Caps |   G  |   [  |   ]  |   ^  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  |Cursor| Mouse|   |  |   (  |   )  |   $  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   I  |   /  |  Num | Regex|   \  |   *  |   .  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  S(KC_W)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT,  S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// .................................................................... BEAKL SP
+#ifdef BEAKLSP
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | Shift| Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   I  |   ,  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Ins | Left |  Ent | Bksp | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_Z,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_N,    KC_M,    KC_X   },
+    {HOME_K,  HOME_H,  HOME_E,  HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    HOME_T,  HOME_R,  HOME_S,  HOME_W },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_B,    KC_P,    KC_L,    KC_F,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_INS,  SP_LEFT, TD_ENT,  SP_BSPC, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_INS,  SP_LEFT, TD_ENT,  SP_BSPC, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   [  |   ]  |   Z  | Shift| Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   ^  |   <  |   >  |   ~  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   !  |   =  |   `  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | ↑Tab |  f() |  Ins | Left |   _  |  Del | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_Y), KC_LBRC, KC_RBRC, S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_K), KC_CIRC, TD_LT,   TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL,  TD_GRV,  CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  S_TAB,   ___fn__, LT_INS,  S_LEFT,  KC_UNDS, SP_DEL,  S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | Shift| Caps |   G  |   {  |   }  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  |Cursor| Mouse|   |  |   (  |   )  |   $  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   I  |   /  |  Num | Regex|   \  |   *  |   .  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Tab |   -  |  Ins | Left |  f() | Bksp | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), KC_LCBR, KC_RCBR, S(KC_M), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  S(KC_W)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT,  S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_TAB,  KC_MINS, LT_INS,  S_LEFT,  ___fn__, SP_BSPC, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// .................................................................... BEAKL GR
+#ifdef BEAKLGR
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | Shift| Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   I  |   ,  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Ins | Left |  Ent | Bksp | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_Z,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_N,    KC_M,    KC_X   },
+    {HOME_K,  HOME_H,  HOME_E,  HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    HOME_T,  HOME_R,  HOME_S,  HOME_W },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_B,    KC_P,    KC_L,    KC_F,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_INS,  SP_LEFT, TD_ENT,  SP_BSPC, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_INS,  SP_LEFT, TD_ENT,  SP_BSPC, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   [  |   ]  |   Z  | Shift| Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   ^  |   <  |   >  |   ~  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   !  |   =  |   `  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | ↑Tab |  f() |  Ins | Left |   _  |  Del | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_Y), KC_LBRC, KC_RBRC, S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {SM_K,    KC_CIRC, TD_LT,   TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL,  TD_GRV,  CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  S_TAB,   ___fn__, LT_INS,  S_LEFT,  KC_UNDS, SP_DEL,  S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | Shift| Caps |   G  |   {  |   }  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  |Cursor| Mouse|   |  |   (  |   )  |   $  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   I  |   /  |  Num | Regex|   \  |   *  |   .  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Tab |   -  |  Ins | Left |  f() | Bksp | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), KC_LCBR, KC_RCBR, S(KC_M), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  SM_W   },
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT,  S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_TAB,  KC_MINS, LT_INS,  S_LEFT,  ___fn__, SP_BSPC, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
diff --git a/keyboards/planck/keymaps/altgr/colemak.h b/keyboards/planck/keymaps/altgr/colemak.h
new file mode 100644 (file)
index 0000000..8810ba8
--- /dev/null
@@ -0,0 +1,124 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// .............................................................. Colemak Mod-DH
+#ifdef COLEMAK
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   F  |   P  |   B  | ^Alt | ^GUI |   J  |   L  |   U  |   Y  |   ;  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   R  |   S  |   T  |   G  | ↑Alt | ↑GUI |   M  |   N  |   E  |   I  |   O  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   D  |   V  | Caps |^Shift|   K  |   H  |   ,  |   .  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_W,    KC_F,    KC_P,    KC_B,    CNTR_TL, CNTR_TR, KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN},
+    {KC_A,    KC_R,    KC_S,    KC_T,    KC_G,    CNTR_HL, CNTR_HR, KC_M,    KC_N,    KC_E,    KC_I,    KC_O   },
+    {KC_Z,    KC_X,    KC_C,    KC_D,    KC_V,    CNTR_BL, CNTR_BR, KC_K,    KC_H,    KC_COMM, KC_DOT,  TD_QUOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_F), S(KC_P), S(KC_B), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), KC_SCLN},
+    {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_G), CNTR_HL, CNTR_HR, S(KC_M), S(KC_N), S(KC_E), S(KC_I), S(KC_O)},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_D), S(KC_V), CNTR_BL, CNTR_BR, S(KC_K), S(KC_H), KC_COMM, KC_DOT,  TD_QUOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   F  |   P  |   B  | ^Alt | ^GUI |   J  |   L  |   U  |   Y  |   :  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   R  |   S  |   T  |   G  | ↑Alt | ↑GUI |   M  |   N  |   E  |   I  |   O  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   D  |   V  | Caps |^Shift|   K  |   H  |   /  |   ?  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   -  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_F), S(KC_P), S(KC_B), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN},
+    {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_G), CNTR_HL, CNTR_HR, S(KC_M), S(KC_N), S(KC_E), S(KC_I), S(KC_O)},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_D), S(KC_V), CNTR_BL, CNTR_BR, S(KC_K), S(KC_H), KC_SLSH, KC_QUES, TD_DQOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_MINS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   F  |   P  |   B  | ^Alt | ^GUI |   J  |   L  |   U  |   Y  |   :  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   R  |   S  |   T  |   G  | ↑Alt | ↑GUI |   M  |   N  |   E  |   I  |   O  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   D  |   V  | Caps |^Shift|   K  |   H  |   ~  |   `  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   _  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_F), S(KC_P), S(KC_B), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN},
+    {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_G), CNTR_HL, CNTR_HR, S(KC_M), S(KC_N), S(KC_E), S(KC_I), S(KC_O)},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_D), S(KC_V), CNTR_BL, CNTR_BR, S(KC_K), S(KC_H), TD_TILD, TD_GRV,  TD_DQOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_UNDS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// ..................................................................... ColemaX
+#ifdef COLEMAX
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   C  |   G  |   Z  | ^Alt | ^GUI |   J  |   L  |   U  |   Y  |   ;  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   R  |   S  |   T  |   B  | ↑Alt | ↑GUI |   K  |   N  |   E  |   I  |   O  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   X  |   V  |   F  |   D  |   P  | Caps |^Shift|   M  |   H  |   ,  |   .  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_W,    KC_C,    KC_G,    KC_Z,    CNTR_TL, CNTR_TR, KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN},
+    {KC_A,    KC_R,    KC_S,    KC_T,    KC_B,    CNTR_HL, CNTR_HR, KC_K,    KC_N,    KC_E,    KC_I,    KC_O   },
+    {KC_X,    KC_V,    KC_F,    KC_D,    KC_P,    CNTR_BL, CNTR_BR, KC_M,    KC_H,    KC_COMM, KC_DOT,  TD_QUOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_C), S(KC_G), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), KC_SCLN},
+    {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_B), CNTR_HL, CNTR_HR, S(KC_K), S(KC_N), S(KC_E), S(KC_I), S(KC_O)},
+    {S(KC_X), S(KC_V), S(KC_F), S(KC_D), S(KC_P), CNTR_BL, CNTR_BR, S(KC_M), S(KC_H), KC_COMM, KC_DOT,  TD_QUOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   C  |   G  |   Z  | ^Alt | ^GUI |   J  |   L  |   U  |   Y  |   :  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   R  |   S  |   T  |   B  | ↑Alt | ↑GUI |   K  |   N  |   E  |   I  |   O  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   X  |   V  |   F  |   D  |   P  | Caps |^Shift|   M  |   H  |   /  |   ?  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   -  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_C), S(KC_G), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN},
+    {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_B), CNTR_HL, CNTR_HR, S(KC_K), S(KC_N), S(KC_E), S(KC_I), S(KC_O)},
+    {S(KC_X), S(KC_V), S(KC_F), S(KC_D), S(KC_P), CNTR_BL, CNTR_BR, S(KC_M), S(KC_H), KC_SLSH, KC_QUES, TD_DQOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_MINS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   C  |   G  |   Z  | ^Alt | ^GUI |   J  |   L  |   U  |   Y  |   :  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   R  |   S  |   T  |   B  | ↑Alt | ↑GUI |   K  |   N  |   E  |   I  |   O  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   X  |   V  |   F  |   D  |   P  | Caps |^Shift|   M  |   H  |   ~  |   `  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   _  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_C), S(KC_G), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN},
+    {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_B), CNTR_HL, CNTR_HR, S(KC_K), S(KC_N), S(KC_E), S(KC_I), S(KC_O)},
+    {S(KC_X), S(KC_V), S(KC_F), S(KC_D), S(KC_P), CNTR_BL, CNTR_BR, S(KC_M), S(KC_H), TD_TILD, TD_GRV,  TD_DQOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_UNDS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
diff --git a/keyboards/planck/keymaps/altgr/common/chord_layout.h b/keyboards/planck/keymaps/altgr/common/chord_layout.h
new file mode 100644 (file)
index 0000000..2c785d5
--- /dev/null
@@ -0,0 +1,41 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// .................................................................. Short Cuts
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      | Copy | Paste|      |      |      |      |      |      |      |      |
+  // |--------------------------------------------------------------+------+------+------|
+  // | Undo |  Cut | Copy | Paste|      |      |      |      | PRIV |  PUB |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |  Nak |  Eot |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |  f() |      |      |      |      |      |
+  // |      |      |      |      |      |      |      |  f() |      |      |      |      | see _PLOVER
+  // '-----------------------------------------------------------------------------------'
+
+  [_EDIT] = {
+    {_______, _______, TMCOPY,  TMPASTE, _______, _______, _______, _______, _______, _______, _______, _______},
+    {UNDO,    CUT,     COPY,    PASTE,   _______, _______, _______, _______, TD_PRIV, TD_SEND, _______, _______},
+    {_______, _______, NAK,     EOT,     _______, _______, _______, _______, _______, _______, _______, _______},
+    {_______, _______, _______, _______, _______, _______, ___fn__, ___fn__, _______, _______, _______, _______},
+  },
+
+// ................................................................ Adjust Layer
+
+  // ,-----------------------------------------------------------------------------------.
+  // |Plover|      |      |      |      |      |      |      |      |      |      |      |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |Aud on|      |      |      |      |      |      |      |      |      |      |      |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // | Reset|      |      |      |      |      |      |      |      |      |      |      |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |      |      |      |  f() |      |      |      |      |  f() |      |      |      |
+  // `-----------------------------------------------------------------------------------'
+
+  [_ADJUST] = {
+    {PLOVER,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {AU_ON,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {_______, _______, _______, ___fn__, _______, _______, _______, _______, ___fn__, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/altgr/common/init.h b/keyboards/planck/keymaps/altgr/common/init.h
new file mode 100644 (file)
index 0000000..6366a19
--- /dev/null
@@ -0,0 +1,56 @@
+
+// ....................................................................... Audio
+
+void matrix_init_user(void)
+{
+#ifdef STENO_ENABLE
+  steno_set_mode(STENO_MODE_BOLT);          // or STENO_MODE_GEMINI
+#endif
+#ifdef AUDIO_ENABLE
+  startup_user();
+#endif
+}
+
+#ifdef AUDIO_ENABLE
+#ifdef BACKLIGHT_ENABLE
+void led_set_user(uint8_t usb_led)
+{
+  static uint8_t old_usb_led = 0;
+  _delay_ms(10);                            // gets rid of tick
+  if (!is_playing_notes()) {
+    if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK))) {
+      // if capslock LED is turning on
+      PLAY_SONG(song_caps_on);
+    }
+    else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK))) {
+      // if capslock LED is turning off
+      PLAY_SONG(song_caps_off);
+    }
+  }
+  old_usb_led = usb_led;
+}
+#endif
+
+void startup_user(void)
+{
+  _delay_ms(20);                            // gets rid of tick
+  PLAY_SONG(song_startup);
+}
+
+void shutdown_user(void)
+{
+  PLAY_SONG(song_goodbye);
+  _delay_ms(150);
+  stop_all_notes();
+}
+
+void music_on_user(void)
+{
+  music_scale_user();
+}
+
+void music_scale_user(void)
+{
+  PLAY_SONG(music_scale);
+}
+#endif
diff --git a/keyboards/planck/keymaps/altgr/common/keycode_functions.h b/keyboards/planck/keymaps/altgr/common/keycode_functions.h
new file mode 100644 (file)
index 0000000..e0ae150
--- /dev/null
@@ -0,0 +1,657 @@
+
+// .......................................................... Keycode Primitives
+
+// register simple key press
+void tap_key(uint16_t keycode)
+{
+  register_code  (keycode);
+  unregister_code(keycode);
+}
+
+void shift_key(uint16_t keycode)
+{
+  register_code  (KC_LSFT);
+  tap_key        (keycode);
+  unregister_code(KC_LSFT);
+}
+
+#define SHIFT   1
+#define NOSHIFT 0
+
+static uint16_t key_timer = 0;
+
+// key press for thumb_layer() and lt_shift() macros
+bool key_press(uint8_t shift, uint16_t keycode)
+{
+  if (keycode) {
+    if (timer_elapsed(key_timer) < TAPPING_TERM) {
+      if (shift) {
+        shift_key(keycode);
+      }
+      else {
+        tap_key(keycode);
+      }
+      return true;
+    }
+  }
+  return false;
+}
+
+// ALT_T, CTL_T, GUI_T, SFT_T for shifted keycodes
+void mt_shift(keyrecord_t *record, uint16_t modifier, uint16_t modifier2, uint16_t keycode)
+{
+  if (record->event.pressed) {
+    key_timer = timer_read();
+    register_code(modifier);
+    if (modifier2) {
+      register_code(modifier2);
+    }
+  }
+  else {
+    unregister_code(modifier);
+    if (modifier2) {
+      unregister_code(modifier2);
+    }
+    if (timer_elapsed(key_timer) < TAPPING_TERM) {
+      shift_key(keycode);
+    }
+    key_timer = 0;
+  }
+}
+
+// ................................................................... Mod Masks
+
+// tap dance persistant mods, see process_record_user()
+// keyboard_report->mods (?) appears to be cleared by tap dance
+static uint8_t mods = 0;
+
+void tap_mods(keyrecord_t *record, uint16_t keycode)
+{
+  if (record->event.pressed) {
+    mods |= MOD_BIT(keycode);
+  }
+  else {
+    mods &= ~(MOD_BIT(keycode));
+  }
+}
+
+// (un)register modifiers
+void modifier(void (*f)(uint8_t))
+{
+  if (mods & MOD_BIT(KC_LCTL)) {
+    (*f)(KC_LCTL);
+  }
+  if (mods & MOD_BIT(KC_LGUI)) {
+    (*f)(KC_LGUI);
+  }
+  if (mods & MOD_BIT(KC_LALT)) {
+    (*f)(KC_LALT);
+  }
+}
+
+// .................................................... Triple Dance Shift/Layer
+
+static uint8_t dt_shift = 0;
+
+void double_shift(uint16_t keycode, uint8_t layer)
+{
+  tap_key (keycode);
+  if (DT_SHIFT) {
+    // set_oneshot_mods(MOD_LSFT);
+    // layer_on(layer);
+    layer_on         (_SHIFT);
+    set_oneshot_layer(_SHIFT, ONESHOT_START);
+    dt_shift = 1;
+  }
+  else {
+    layer_on(layer);
+  }
+}
+
+// tap dance LT (LAYER, KEY) emulation with <KEY><DOWN> -> <KEY><SHIFT> and auto-repeat extensions!
+void tap_shift(qk_tap_dance_state_t *state, uint16_t keycode, uint8_t layer)
+{
+  // double tap plus down
+  if (state->count > 2) {
+    // double enter shift
+    if (keycode == KC_ENT) {
+      tap_key     (keycode);
+      double_shift(keycode, layer);
+    }
+    // repeating keycode
+    else {
+      register_code(keycode);
+    }
+  }
+  // tap plus down (or double tap): keycode (one shot) shift
+  else if (state->count > 1) {
+    double_shift(keycode, layer);
+  }
+  // down: shift
+  else if (state->pressed) {
+    layer_on(layer);
+  }
+  // tap: keycode
+  else {
+    modifier(register_code);
+    tap_key (keycode);
+    modifier(unregister_code);
+  }
+}
+
+void tap_reset(uint16_t keycode, uint8_t layer)
+{
+  unregister_code(keycode);
+  if (DT_SHIFT && dt_shift) {
+    clear_oneshot_layer_state(ONESHOT_PRESSED);
+    dt_shift = 0;
+  }
+  else {
+    layer_off(layer);
+  }
+}
+
+// augment pseudo LT (_RSHIFT, KC_ENT) handling below for rapid <ENTER><SHIFT> sequences
+void enter(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_shift(state, KC_ENT, _RSHIFT);
+}
+
+void enter_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_reset(KC_ENT, _RSHIFT);
+}
+
+// augment pseudo LT (_LSHIFT, KC_SPC) handling below for rapid <SPACE><SHIFT> sequences
+void space(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_shift(state, KC_SPC, _LSHIFT);
+}
+
+void space_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_reset(KC_SPC, _LSHIFT);
+}
+
+// ......................................................... Triple Dance Insert
+
+void double_max(uint8_t count, uint8_t shift, uint16_t keycode)
+{
+  if (shift) {
+    shift_key(keycode);
+    if (count > 1) {
+      shift_key(keycode);
+    }
+  }
+  else {
+    tap_key(keycode);
+    if (count > 1) {
+      tap_key(keycode);
+    }
+  }
+}
+
+void colon(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key  (KC_SPC);
+    shift_key(KC_SCLN);
+    shift_key(KC_SCLN);
+    tap_key  (KC_SPC);
+  }
+  else {
+    double_max(state->count, SHIFT, KC_SCLN);
+  }
+  reset_tap_dance(state);
+}
+
+void eql(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key(KC_SPC);
+    tap_key(KC_SLSH);
+    tap_key(KC_EQL);
+    tap_key(KC_SPC);
+  }
+  else {
+    double_max(state->count, NOSHIFT, KC_EQL);
+  }
+  reset_tap_dance(state);
+}
+
+void greater(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key  (KC_SPC);
+    tap_key  (KC_MINS);
+    shift_key(KC_DOT);
+    tap_key  (KC_SPC);
+  }
+  else {
+    double_max(state->count, SHIFT, KC_DOT);
+  }
+  reset_tap_dance(state);
+}
+
+void lesser(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key  (KC_SPC);
+    shift_key(KC_COMM);
+    tap_key  (KC_MINS);
+    tap_key  (KC_SPC);
+  }
+  else {
+    double_max(state->count, SHIFT, KC_COMM);
+  }
+  reset_tap_dance(state);
+}
+
+void tilde(qk_tap_dance_state_t *state, void *user_data)
+{
+  // double tap plus down: repeating keycode
+  if (state->count > 2) {
+    register_code(KC_LSFT);
+    register_code(KC_GRV);
+  }
+  // tap: keycode
+  else {
+    shift_key(KC_GRV);
+    // double tap: unix home directory
+    if (state->count > 1) {
+      tap_key(KC_SLSH);
+    }
+  }
+}
+
+void tilde_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_GRV);
+  unregister_code(KC_LSFT);
+}
+
+// ............................................................. Tap Dance Pairs
+
+// tap dance shift rules
+#define S_NEVER  0
+#define S_SINGLE 1
+#define S_DOUBLE 2
+#define S_ALWAYS S_SINGLE | S_DOUBLE
+
+void symbol_pair(uint8_t shift, uint16_t left, uint16_t right)
+{
+  if (shift & S_DOUBLE) {
+    shift_key(left);
+    shift_key(right);
+  }
+  else {
+    tap_key(left);
+    tap_key(right);
+  }
+}
+
+#define CLOSE 1
+
+// tap dance symbol pairs
+void tap_pair(qk_tap_dance_state_t *state, uint8_t shift, uint16_t left, uint16_t right, uint16_t modifier, uint8_t close)
+{
+  // triple tap: left right with cursor between symbol pair a la vim :-)
+  if (state->count > 2) {
+    symbol_pair(shift, left, right);
+    tap_key    (KC_LEFT);
+  }
+  // double tap: left right
+  else if (state->count > 1) {
+    symbol_pair(shift, left, right);
+  }
+  // down: modifier
+  else if (state->pressed) {
+    if (modifier) {
+      register_code(modifier);
+    }
+  }
+  // tap: left (close: right)
+  else {
+    if (shift & S_SINGLE) {
+      shift_key(close ? right : left);
+    }
+    else {
+      tap_key(close ? right : left);
+    }
+  }
+  if (!modifier) {
+    reset_tap_dance(state);
+  }
+}
+
+void doublequote(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_QUOT, KC_QUOT, 0, 0);
+}
+
+void grave(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_GRV, KC_GRV, 0, 0);
+}
+
+void lbrace(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, 0);
+}
+
+void lcurly(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, 0);
+}
+
+void lparen(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_9, KC_0, KC_LCTL, 0);
+}
+
+void lparen_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_LCTL);
+}
+
+void quote(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_QUOT, KC_QUOT, 0, 0);
+}
+
+void rangle(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_COMM, KC_DOT, 0, CLOSE);
+}
+
+void rbrace(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, CLOSE);
+}
+
+void rcurly(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, CLOSE);
+}
+
+void rparen(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_9, KC_0, 0, CLOSE);
+}
+
+void rparen_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_LCTL);
+}
+
+// ............................................................ Tap Dance Insert
+
+void comma(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_key(KC_COMM);
+  if (state->count > 1) {
+    tap_key(KC_SPC);
+  }
+  reset_tap_dance(state);
+}
+
+void dot(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+    shift_key(KC_COLN);
+  }
+  else {
+    tap_key(KC_DOT);
+  }
+  reset_tap_dance(state);
+}
+
+// compile time macro string, see functions/hardware planck script
+void private(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+#ifdef PRIVATE_STRING
+#include "private_string.h"
+#endif
+  }
+  reset_tap_dance(state);
+}
+
+// config.h defined string
+void send(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+    SEND_STRING(PUBLIC_STRING);
+  }
+  reset_tap_dance(state);
+}
+
+// .......................................................... Tap Dance One Shot
+
+void caps(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+    tap_key(KC_CAPS);
+  }
+  else {
+    set_oneshot_mods(MOD_LSFT);
+    register_code   (KC_LSFT);              // on hold down
+  }
+}
+
+void caps_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_LSFT);
+}
+
+// ................................................................... Tap Dance
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [_CAPS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, caps, caps_reset)
+ ,[_COLN] = ACTION_TAP_DANCE_FN         (colon)
+ ,[_COMM] = ACTION_TAP_DANCE_FN         (comma)
+ ,[_DOT]  = ACTION_TAP_DANCE_FN         (dot)
+ ,[_DQOT] = ACTION_TAP_DANCE_FN         (doublequote)
+ ,[_ENT]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, enter, enter_reset)
+ ,[_EQL]  = ACTION_TAP_DANCE_FN         (eql)
+ ,[_GRV]  = ACTION_TAP_DANCE_FN         (grave)
+ ,[_GT]   = ACTION_TAP_DANCE_FN         (greater)
+ ,[_LBRC] = ACTION_TAP_DANCE_FN         (lbrace)
+ ,[_LCBR] = ACTION_TAP_DANCE_FN         (lcurly)
+ ,[_LPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lparen, lparen_reset)
+ ,[_LT]   = ACTION_TAP_DANCE_FN         (lesser)
+ ,[_PRIV] = ACTION_TAP_DANCE_FN         (private)
+ ,[_QUOT] = ACTION_TAP_DANCE_FN         (quote)
+ ,[_RBRC] = ACTION_TAP_DANCE_FN         (rbrace)
+ ,[_RCBR] = ACTION_TAP_DANCE_FN         (rcurly)
+ ,[_RNGL] = ACTION_TAP_DANCE_FN         (rangle)
+ ,[_RPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rparen, rparen_reset)
+ ,[_SEND] = ACTION_TAP_DANCE_FN         (send)
+ ,[_SPC]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, space, space_reset)
+ ,[_TILD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tilde, tilde_reset)
+};
+
+// .............................................................. Dynamic Layers
+
+#define        LEFT    1
+#define        RIGHT   2
+static uint8_t thumb = 0;
+
+// LEFT (KC_SPC, S(KC_BSLS)), RIGHT (KC_LEFT, S(KC_LEFT)) opposite thumb combinations, see process_record_user()
+// up,   up   -> _BASE
+// up,   down -> _SYMBOL
+// down, up   -> _NUMBER
+// down, down -> _MOUSE                     // see layer keycodes that raise mouse layer
+#define THUMBS_DOWN _MOUSE                  // layer
+
+static uint8_t overlayer = 0;
+
+// left right thumb layer combinations
+void thumb_layer(keyrecord_t *record, uint8_t side, uint8_t shift, uint16_t keycode, uint8_t thumb_dn_layer, uint8_t thumb_up_layer)
+{
+  if (record->event.pressed) {
+    // layer_on via tap_layer(), see process_record_user()
+    key_timer = timer_read();
+    thumb     = thumb | side;
+  }
+  else {
+    layer_off(thumb_dn_layer);
+    // opposite thumb_layer() thumb may have switched effective layer!
+    if (overlayer) {
+      layer_off(overlayer);
+      overlayer = 0;
+    }
+    if (!key_press(shift, keycode)) {
+      layer_off(THUMBS_DOWN);               // both thumbs needed
+      // opposite thumb down? see left right combination layer table above
+      if (thumb & (side == LEFT ? RIGHT : LEFT)) {
+        layer_on(thumb_up_layer);
+        overlayer = thumb_up_layer;
+      }
+    }
+    clear_mods();
+    thumb     = thumb & ~side;
+    key_timer = 0;
+  }
+}
+
+// #ifdef STENO_ENABLE
+// // LT for steno keycode
+// void stn_layer(keyrecord_t *record, uint16_t keycode, uint8_t layer)
+// {
+//   if (record->event.pressed) {
+//     key_timer = timer_read();
+//     if (keycode) {
+//       process_steno(keycode, record);
+//     }
+//     layer_on(layer);
+//   }
+//   else {
+//     layer_off(layer);
+//     if (keycode) {
+//       if (timer_elapsed(key_timer) < TAPPING_TERM) {
+//         process_steno(keycode, record);
+//       }
+//       else {
+//         // clear pressed state (request push of updated) process_steno.c and .h
+//         // steno_clear_state();
+//       }
+//     }
+//     key_timer = 0;
+//   }
+// }
+// #endif
+
+// LT for S(keycode)
+void lt_shift(keyrecord_t *record, uint16_t keycode, uint8_t layer)
+{
+  if (record->event.pressed) {
+    key_timer = timer_read();
+    layer_on(layer);
+  }
+  else {
+    layer_off(layer);
+    // for shifted keycodes, hence, LT_SHIFT
+    key_press(SHIFT, keycode);
+    clear_mods();
+    key_timer = 0;
+  }
+}
+
+// set layer asap to overcome macro latency errors, notably tap dance and LT usage
+// this routine inexplicably (?) sets layer_on() faster than can be done in thumb_layer()
+void tap_layer(keyrecord_t *record, uint8_t layer)
+{
+  if (record->event.pressed) {
+    layer_on(layer);
+  }
+  else {
+    layer_off(layer);
+  }
+}
+
+// ..................................................................... Keymaps
+
+// void persistant_default_layer_set(uint16_t default_layer)
+// {
+//   eeconfig_update_default_layer(default_layer);
+//   default_layer_set            (default_layer);
+// }
+
+void clear_layers(void)
+{
+  uint8_t layer;
+  for (layer = 0; layer < _END_LAYERS; layer++) {
+    layer_off(layer);
+  }
+}
+
+#ifdef CENTER_TT
+static uint16_t tt_keycode = 0;             // current TT keycode
+
+void clear_tt(void)
+{
+  if (tt_keycode == KC_CAPS) {
+    tap_key(KC_CAPS);                       // clear capslock
+  }
+  tt_keycode = 0;
+  clear_layers();
+  set_single_persistent_default_layer(_BASE);
+}
+#endif
+
+// txbolt plover run state
+static uint8_t plover = 0;
+
+void toggle_plover(uint8_t state)
+{
+  if (plover != state) {
+#ifdef PLOVER_KEYBIND
+#include "plover_keybind.h"
+#endif
+    plover = state;
+  }
+}
+
+void base_layer(void)
+{
+#ifdef AUDIO_ENABLE
+  if (plover) {
+    PLAY_SONG(song_plover_gb);
+  }
+  else {
+    PLAY_SONG(song_qwerty);
+  }
+#endif
+  clear_layers();
+  set_single_persistent_default_layer(_BASE);
+  toggle_plover(0);
+}
+
+void steno(keyrecord_t *record)
+{
+  if (record->event.pressed) {
+#ifdef AUDIO_ENABLE
+    PLAY_SONG(song_plover);
+#endif
+    clear_layers();
+    layer_on(_PLOVER);
+    if (!eeconfig_is_enabled()) {
+      eeconfig_init();
+    }
+    keymap_config.raw  = eeconfig_read_keymap();
+    keymap_config.nkro = 1;
+    eeconfig_update_keymap(keymap_config.raw);
+    if (!plover) {
+      toggle_plover(1);
+    }
+  }
+}
+
+void steno_exit(keyrecord_t *record)
+{
+  if (record->event.pressed) {
+    base_layer();
+    toggle_plover(0);
+  }
+}
diff --git a/keyboards/planck/keymaps/altgr/common/number_fkey_layout.h b/keyboards/planck/keymaps/altgr/common/number_fkey_layout.h
new file mode 100644 (file)
index 0000000..528020e
--- /dev/null
@@ -0,0 +1,86 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ......................................................... Number Keypad Layer
+#ifdef SHIFT_SYMBOLS
+  // .-----------------------------------------------------------------------------------.
+  // |      |   F  |   E  |   D  |      |      |      |   /  |   7  |   8  |   9  |   *  |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI |   C  |   B  |   A  |      |      |      |   .  |   4  |   5  |   6  |   -  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   G  |   \  |      |      |      |   ,  |   1  |   2  |   3  |   +  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   0  |   =  |      |      |      |
+  // |      |      |      |  f() |      |      |      |   =  |   0  |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_NUMBER] = {
+    {_______, KC_F,    MT_E,    KC_D,    _______, ___x___, ___x___, KC_SLSH, KC_7,    KC_8,    KC_9,    KC_ASTR},
+    {OS_GUI,  GT_C,    AT_B,    ST_A,    _______, ___x___, ___x___, TD_DOT,  KC_4,    KC_5,    KC_6,    KC_MINS},
+    {_______, KC_HASH, SM_G,    KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1,    KC_2,    KC_3,    KC_PLUS},
+#ifdef THUMB_0
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0,    LT_EQL,  ___x___, ___x___, ___x___},
+#else
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL,  LT_0,    ___x___, ___x___, ___x___},
+#endif
+  },
+#else
+  // .-----------------------------------------------------------------------------------.
+  // |      |   F  |   E  |   D  |      |      |      |   /  |   7  |   8  |   9  |   *  |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI |   C  |   B  |   A  |      |      |      |   .  |   4  |   5  |   6  |   -  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   X  |   G  |      |      |      |   ,  |   1  |   2  |   3  |   +  |
+  // |-----------------------------------------------------------------------------------|
+  // |                           |  f() |      |   0  |   =  |                           |
+  // |                           |  f() |      |   =  |   0  |                           |
+  // '-----------------------------------------------------------------------------------'
+
+  [_NUMBER] = {
+    {_______, KC_F,    MT_E,    KC_D,    _______, _______, _______, KC_SLSH, KC_7,    KC_8,    KC_9,    KC_ASTR},
+    {OS_GUI,  GT_C,    AT_B,    LT_A,    _______, _______, _______, KC_DOT,  KC_4,    KC_5,    KC_6,    KC_MINS},
+    {_______, KC_HASH, MT_X,    S(KC_G), _______, _______, _______, TD_COMM, KC_1,    KC_2,    KC_3,    KC_PLUS},
+#ifdef THUMB_0
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0,    LT_EQL,  ___x___, ___x___, ___x___},
+#else
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL,  LT_0,    ___x___, ___x___, ___x___},
+#endif
+  },
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |   {  |   &  |   ?  |   :  |   }  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   (  |   $  |   %  |   ^  |   )  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |   [  |   <  |   ~  |   >  |   ]  |
+  // |-----------------------------------------------------------------------------------|
+  // |                           |  f() |      |   \  |   |  |                           |
+  // '-----------------------------------------------------------------------------------'
+
+  [_NUMSYM] = {
+    {_______, _______, _______, ___x___, _______, _______, _______, TD_LCBR, KC_AMPR, KC_QUES, KC_COLN, KC_RCBR},
+    {___x___, ___x___, ___x___, ___fn__, _______, _______, _______, TD_LPRN, KC_DLR,  KC_PERC, KC_CIRC, KC_RPRN},
+    {_______, _______, _______, ___x___, _______, _______, _______, TD_LBRC, KC_LT,   KC_TILD, KC_GT,   KC_RBRC},
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_BSLS, KC_PIPE, ___x___, ___x___, ___x___},
+  },
+#endif
+
+// ............ .................................................. Function Keys
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      |  F7  |  F8  |  F9  |  F12 |
+  // |-----------------------------------------------------------------------------------|
+  // | Ctrl |  GUI |  Alt | Shift|      |      |      |      |  F4  |  F5  |  F6  |  F11 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |  F1  |  F2  |  F3  |  F10 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |  f() |      |   +  |      |      |      |      |
+  // |      |      |      |      |  f() |      |      |   +  |      |      |      |      | see _PLOVER
+  // '-----------------------------------------------------------------------------------'
+
+  [_FNCKEY] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7,   KC_F8,   KC_F9,   KC_F12 },
+    {OS_GUI,  OS_CTL,  OS_ALT,  OS_SFT,  _______, ___x___, ___x___, _______, KC_F4,   KC_F5,   KC_F6,   KC_F11 },
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1,   KC_F2,   KC_F3,   KC_F10 },
+    {_______, _______, _______, _______, ___fn__, ___fn__, _______, KC_PLUS, _______, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/altgr/common/number_fkey_layout.save.h b/keyboards/planck/keymaps/altgr/common/number_fkey_layout.save.h
new file mode 100644 (file)
index 0000000..7022863
--- /dev/null
@@ -0,0 +1,86 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ......................................................... Number Keypad Layer
+#ifdef SHIFT_SYMBOLS
+  // .-----------------------------------------------------------------------------------.
+  // |      |   F  |   E  |   D  |      |      |      |   /  |   7  |   8  |   9  |   *  |
+  // |-----------------------------------------------------------------------------------|
+  // | Ctrl |   C  |   B  |   A  |      |      |      |   .  |   4  |   5  |   6  |   -  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   G  |   \  |      |      |      |   ,  |   1  |   2  |   3  |   +  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   0  |   =  |      |      |      |
+  // |      |      |      |  f() |      |      |      |   =  |   0  |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_NUMBER] = {
+    {_______, KC_F,    MT_E,    KC_D,    _______, ___x___, ___x___, KC_SLSH, KC_7,    KC_8,    KC_9,    KC_ASTR},
+    {OS_CTL,  GT_C,    AT_B,    ST_A,    _______, ___x___, ___x___, TD_DOT,  KC_4,    KC_5,    KC_6,    KC_MINS},
+    {_______, KC_HASH, SM_G,    KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1,    KC_2,    KC_3,    KC_PLUS},
+#ifdef THUMB_0
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0,    LT_EQL,  ___x___, ___x___, ___x___},
+#else
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL,  LT_0,    ___x___, ___x___, ___x___},
+#endif
+  },
+#else
+  // .-----------------------------------------------------------------------------------.
+  // |      |   F  |   E  |   D  |      |      |      |   /  |   7  |   8  |   9  |   *  |
+  // |-----------------------------------------------------------------------------------|
+  // | Ctrl |   C  |   B  |   A  |      |      |      |   .  |   4  |   5  |   6  |   -  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   X  |   G  |      |      |      |   ,  |   1  |   2  |   3  |   +  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   0  |   =  |      |      |      |
+  // |      |      |      |  f() |      |      |      |   =  |   0  |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_NUMBER] = {
+    {_______, KC_F,    MT_E,    KC_D,    _______, _______, _______, KC_SLSH, KC_7,    KC_8,    KC_9,    KC_ASTR},
+    {OS_CTL,  GT_C,    AT_B,    LT_A,    _______, _______, _______, KC_DOT,  KC_4,    KC_5,    KC_6,    KC_MINS},
+    {_______, KC_HASH, MT_X,    S(KC_G), _______, _______, _______, TD_COMM, KC_1,    KC_2,    KC_3,    KC_PLUS},
+#ifdef THUMB_0
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0,    LT_EQL,  ___x___, ___x___, ___x___},
+#else
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL,  LT_0,    ___x___, ___x___, ___x___},
+#endif
+  },
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |   {  |   &  |   ?  |   :  |   }  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   (  |   $  |   %  |   ^  |   )  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |   [  |   <  |   ~  |   >  |   ]  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   \  |   |  |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_NUMSYM] = {
+    {_______, _______, _______, ___x___, _______, _______, _______, TD_LCBR, KC_AMPR, KC_QUES, KC_COLN, KC_RCBR},
+    {___x___, ___x___, ___x___, ___fn__, _______, _______, _______, TD_LPRN, KC_DLR,  KC_PERC, KC_CIRC, KC_RPRN},
+    {_______, _______, _______, ___x___, _______, _______, _______, TD_LBRC, KC_LT,   KC_TILD, KC_GT,   KC_RBRC},
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_BSLS, KC_PIPE, ___x___, ___x___, ___x___},
+  },
+#endif
+
+// ............ .................................................. Function Keys
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      |  F7  |  F8  |  F9  |  F12 |
+  // |-----------------------------------------------------------------------------------|
+  // | Ctrl |  GUI |  Alt | Shift|      |      |      |      |  F4  |  F5  |  F6  |  F11 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |  F1  |  F2  |  F3  |  F10 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |  f() |      |   +  |      |      |      |      |
+  // |      |      |      |      |  f() |      |      |   +  |      |      |      |      | see _PLOVER
+  // '-----------------------------------------------------------------------------------'
+
+  [_FNCKEY] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7,   KC_F8,   KC_F9,   KC_F12 },
+    {OS_CTL,  OS_GUI,  OS_ALT,  OS_SFT,  _______, ___x___, ___x___, _______, KC_F4,   KC_F5,   KC_F6,   KC_F11 },
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1,   KC_F2,   KC_F3,   KC_F10 },
+    {_______, _______, _______, _______, ___fn__, ___fn__, _______, KC_PLUS, _______, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/altgr/common/plover_keybind.h b/keyboards/planck/keymaps/altgr/common/plover_keybind.h
new file mode 100644 (file)
index 0000000..cb4ef92
--- /dev/null
@@ -0,0 +1,9 @@
+
+// simple window manager specific plover keybind hook
+
+// toggle plover application, see herbstluftwm/config/appbinds
+register_code  (KC_LGUI);
+register_code  (KC_LCTL);
+tap_key        (KC_EQL);
+unregister_code(KC_LCTL);
+unregister_code(KC_LGUI);
diff --git a/keyboards/planck/keymaps/altgr/common/sounds.h b/keyboards/planck/keymaps/altgr/common/sounds.h
new file mode 100644 (file)
index 0000000..1bfc7a6
--- /dev/null
@@ -0,0 +1,14 @@
+
+// ................................................................ Audio Sounds
+
+#ifdef AUDIO_ENABLE
+float song_startup  [][2] = SONG(STARTUP_SOUND);
+float song_colemak  [][2] = SONG(COLEMAK_SOUND);
+float song_qwerty   [][2] = SONG(QWERTY_SOUND);
+float song_plover   [][2] = SONG(PLOVER_SOUND);
+float song_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float song_caps_on  [][2] = SONG(CAPS_LOCK_ON_SOUND);
+float song_caps_off [][2] = SONG(CAPS_LOCK_OFF_SOUND);
+float music_scale   [][2] = SONG(MUSIC_SCALE_SOUND);
+float song_goodbye  [][2] = SONG(GOODBYE_SOUND);
+#endif
diff --git a/keyboards/planck/keymaps/altgr/common/steno_layout.h b/keyboards/planck/keymaps/altgr/common/steno_layout.h
new file mode 100644 (file)
index 0000000..ab4a6fe
--- /dev/null
@@ -0,0 +1,39 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ...................................................................... Plover
+#ifdef STENO_ENABLE
+  // ,-----------------------------------------------------------------------------------.
+  // |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // | Base |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // | Base |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |                           |   A  |   O  |   E  |   U  |                           |
+  // `-----------------------------------------------------------------------------------'
+
+  [_PLOVER] = {
+    {STN_N1,  STN_N2,  STN_N3,  STN_N4,  STN_N5,  STN_N6,  STN_N7,  STN_N8,  STN_N9,  STN_NA,  STN_NB,  STN_NC },
+    {BASE1,   STN_S1,  STN_TL,  STN_PL,  STN_HL,  STN_ST1, STN_ST3, STN_FR,  STN_PR,  STN_LR,  STN_TR,  STN_DR },
+    {BASE2,   STN_S2,  STN_KL,  STN_WL,  STN_RL,  STN_ST2, STN_ST4, STN_RR,  STN_BR,  STN_GR,  STN_SR,  STN_ZR },
+    {_______, _______, _______, PS_STNA, PS_STNO, _______, _______, PS_STNE, PS_STNU, _______, _______, _______},
+  },
+#else
+  // ,-----------------------------------------------------------------------------------.
+  // |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // | Base |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // | Base |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |                           |   A  |   O  |   E  |   U  |                           |
+  // `-----------------------------------------------------------------------------------'
+
+  [_PLOVER] = {
+    {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
+    {BASE1,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC},
+    {BASE2,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+    {_______, _______, _______, LT_C,    LT_V,    _______, _______, LT_N,    LT_M,    _______, _______, _______},
+  },
+#endif
diff --git a/keyboards/planck/keymaps/altgr/common/symbol_guifn_layout.h b/keyboards/planck/keymaps/altgr/common/symbol_guifn_layout.h
new file mode 100644 (file)
index 0000000..7986108
--- /dev/null
@@ -0,0 +1,75 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ..................................................... Symbol Navigation Layer
+#ifdef SHIFT_SYMBOLS
+  // .-----------------------------------------------------------------------------------.
+  // |      |   ~  |   *  |   &  |      |      |      |      | Home |  Up  |  End | PgUp |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI |   ^  |   %  |   $  |      |      |      |      | Left | Down | Right| PgDn |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   @  |   !  |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |                           |Adjust|   \  |      |  f() |                           |
+  // '-----------------------------------------------------------------------------------'
+
+  [_SYMBOL] = {
+    {_______, KC_TILD, KC_ASTR, KC_AMPR, _______, ___x___, ___x___, _______, KC_HOME, KC_UP,   KC_END,  KC_PGUP},
+    {OS_GUI,  SM_CIRC, SM_PERC, SM_DLR,  _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN},
+    {_______, KC_HASH, KC_AT,   KC_EXLM, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {___x___, ___x___, ___x___, ADJUST,  LT_BSLS, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___},
+  },
+#else
+  // .-----------------------------------------------------------------------------------.
+  // |   {  |   .  |   *  |   &  |   }  |      |      |      | Home |  Up  |  End | PgUp |
+  // |-----------------------------------------------------------------------------------|
+  // |   (  |   ^  |   %  |   $  |   )  |      |      |      | Left | Down | Right| PgDn |
+  // |-----------------------------------------------------------------------------------|
+  // |   [  |   #  |   @  |   !  |   ]  |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |                           |   |  |   \  |      |  f() |                           |
+  // '-----------------------------------------------------------------------------------'
+
+  [_SYMBOL] = {
+    {KC_LCBR, KC_DOT,  KC_ASTR, KC_AMPR, TD_RCBR, _______, _______, _______, KC_HOME, KC_UP,   KC_END,  KC_PGUP},
+    {SM_LPRN, SM_CIRC, SM_PERC, SM_DLR,  TD_RPRN, _______, _______, _______, LT_LFTX, KC_DOWN, KC_RGHT, KC_PGDN},
+    {KC_LBRC, KC_HASH, KC_AT,   KC_EXLM, TD_RBRC, _______, _______, _______, _______, _______, _______, _______},
+    {___x___, ___x___, ___x___, SL_PIPE, LT_BSLS, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___},
+  },
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |   ?  |   +  |   ~  |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   <  |   =  |   >  |      |      |      |      |  f() |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   3  |   2  |   1  |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |                           |      |      |      |  f() |                           |
+  // '-----------------------------------------------------------------------------------'
+
+  [_SYMREG] = {
+    {___x___, KC_QUES, KC_PLUS, KC_TILD, ___x___, _______, _______, _______, ___x___, ___x___, ___x___, ___x___},
+    {___x___, KC_LT,   KC_EQL,  TD_RNGL, ___x___, _______, _______, _______, ___fn__, ___x___, ___x___, ___x___},
+    {___x___, KC_3,    KC_2,    KC_1,    ___x___, _______, _______, _______, _______, _______, _______, _______},
+    {___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___},
+  },
+#endif
+
+// ............................................................... Mouse Actions
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      | Left |  Up  | Right|  Up  |
+  // |-----------------------------------------------------------------------------------|
+  // |      | Btn3 | Btn2 | Btn1 |      |      |      |      | Left | Down | Right| Down |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |                           |      |  f() |      |  f() |                           |
+  // '-----------------------------------------------------------------------------------'
+
+  [_MOUSE] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U},
+    {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D},
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {_______, _______, _______, _______, ___fn__, _______, _______, _______, ___fn__, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/altgr/common/tapdance.h b/keyboards/planck/keymaps/altgr/common/tapdance.h
new file mode 100644 (file)
index 0000000..d778286
--- /dev/null
@@ -0,0 +1,49 @@
+
+// tap dance keys
+enum tap_dance {
+  _CAPS = 0
+ ,_COLN
+ ,_COMM
+ ,_DOT
+ ,_DQOT
+ ,_ENT
+ ,_EQL
+ ,_GRV
+ ,_GT
+ ,_LBRC
+ ,_LCBR
+ ,_LPRN
+ ,_LT
+ ,_PRIV
+ ,_QUOT
+ ,_RBRC
+ ,_RCBR
+ ,_RNGL
+ ,_RPRN
+ ,_SEND
+ ,_SPC
+ ,_TILD
+};
+
+#define TD_CAPS TD(_CAPS)
+#define TD_COLN TD(_COLN)
+#define TD_COMM TD(_COMM)
+#define TD_DOT  TD(_DOT)
+#define TD_DQOT TD(_DQOT)
+#define TD_ENT  TD(_ENT)
+#define TD_EQL  TD(_EQL)
+#define TD_GRV  TD(_GRV)
+#define TD_GT   TD(_GT)
+#define TD_LBRC TD(_LBRC)
+#define TD_LCBR TD(_LCBR)
+#define TD_LPRN TD(_LPRN)
+#define TD_LT   TD(_LT)
+#define TD_PRIV TD(_PRIV)                   // compile time macro string, provided in private_string.h
+#define TD_QUOT TD(_QUOT)
+#define TD_RBRC TD(_RBRC)
+#define TD_RCBR TD(_RCBR)
+#define TD_RNGL TD(_RNGL)
+#define TD_RPRN TD(_RPRN)
+#define TD_SEND TD(_SEND)                   // config.h defined macro string
+#define TD_SPC  TD(_SPC)                    // see process_record_user() for extended handling of Spc
+#define TD_TILD TD(_TILD)
diff --git a/keyboards/planck/keymaps/altgr/common/toggle_layout.h b/keyboards/planck/keymaps/altgr/common/toggle_layout.h
new file mode 100644 (file)
index 0000000..713d27b
--- /dev/null
@@ -0,0 +1,102 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ......................................................... Number Keypad Layer
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |   F  |   E  |   D  |      |      |      |   /  |   7  |   8  |   9  |   *  |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI |   C  |   B  |   A  |      |      |      |   .  |   4  |   5  |   6  |   -  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   G  |   \  |      |      |      |   ,  |   1  |   2  |   3  |   +  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() | Space|      |      |   0  |   =  |      |      |      |
+  // |      |      |      |  f() | Space|      |      |   =  |   0  |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTNUMBER] = {
+    {_______, KC_F,    MT_E,    KC_D,    _______, ___x___, ___x___, KC_SLSH, KC_7,    KC_8,    KC_9,    KC_ASTR},
+    {OS_GUI,  GT_C,    AT_B,    ST_A,    _______, ___x___, ___x___, TD_DOT,  KC_4,    KC_5,    KC_6,    KC_MINS},
+    {_______, KC_HASH, SM_G,    KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1,    KC_2,    KC_3,    KC_PLUS},
+#ifdef THUMB_0
+    {_______, _______, _______, TT_ESC,  KC_SPC,  _______, _______, KC_0,    LT_EQL,  _______, _______, _______},
+#else
+    {_______, _______, _______, TT_ESC,  KC_SPC,  _______, _______, KC_EQL,  LT_0,    _______, _______, _______},
+#endif
+  },
+
+// ............ .................................................. Function Keys
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      |  F7  |  F8  |  F9  |  F12 |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI | Ctrl |  Alt | Shift|      |      |      |      |  F4  |  F5  |  F6  |  F11 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |  F1  |  F2  |  F3  |  F10 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   +  |      |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTFNCKEY] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7,   KC_F8,   KC_F9,   KC_F12 },
+    {OS_GUI,  OS_CTL,  OS_ALT,  OS_SFT,  _______, ___x___, ___x___, _______, KC_F4,   KC_F5,   KC_F6,   KC_F11 },
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1,   KC_F2,   KC_F3,   KC_F10 },
+    {_______, _______, _______, TT_ESC,  _______, _______, _______, KC_PLUS, _______, _______, _______, _______},
+  },
+
+// ....................................................................... Regex
+
+  // ,-----------------------------------------------------------------------------------.
+  // |      |   ~  |   {  |   }  |   &  |      |      |   %  |   [  |   ]  |   @  |      |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |      |   ^  |   <  |   >  |   ?  |      |      |   |  |   (  |   )  |   $  |      |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |      |   :  |   !  |   =  |   /  |      |      |   \  |   *  |   .  |   #  |      |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |      |      |      |  f() |   -  |      |      |   +  | Space|      |      |      |
+  // `-----------------------------------------------------------------------------------'
+
+  [_TTREGEX] = {
+    {___x___, KC_TILD, KC_LCBR, KC_RCBR, KC_AMPR, ___x___, ___x___, KC_PERC, KC_LBRC, KC_RBRC, KC_AT,   ___x___},
+    {___x___, KC_CIRC, KC_LT,   KC_GT,   KC_QUES, ___x___, ___x___, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  ___x___},
+    {___x___, KC_COLN, KC_EXLM, KC_EQL,  KC_SLSH, ___x___, ___x___, KC_BSLS, KC_ASTR, KC_DOT,  KC_HASH, ___x___},
+    {_______, _______, _______, TT_ESC,  KC_MINS, _______, _______, KC_PLUS, KC_SPC,  _______, _______, _______},
+  },
+
+// ............................................................ Navigation Layer
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      | Home |  Up  |  End | PgUp |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI | Ctrl |  Alt | Shift|      |      |      |      | Left | Down | Right| PgDn |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |      |      |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTCURSOR] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_HOME, KC_UP,   KC_END,  KC_PGUP},
+    {OS_GUI,  OS_CTL,  OS_ALT,  OS_SFT,  _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN},
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {_______, _______, _______, TT_ESC,  _______, _______, _______, _______, _______, _______, _______, _______},
+  },
+
+// ............................................................... Mouse Actions
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      | Left |  Up  | Right|  Up  |
+  // |-----------------------------------------------------------------------------------|
+  // |      | Btn3 | Btn2 | Btn1 |      |      |      |      | Left | Down | Right| Down |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |      |      |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTMOUSE] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U},
+    {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D},
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {_______, _______, _______, TT_ESC,  _______, _______, _______, _______, _______, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/altgr/config.h b/keyboards/planck/keymaps/altgr/config.h
new file mode 100644 (file)
index 0000000..d55258c
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// required because lower/raise modifiers are redefined by colemak-dh
+#define PREVENT_STUCK_MODIFIERS
+
+// tap dance key press termination interval
+#define TAPPING_TERM 250
+
+// smooth mouse motion
+// #define MOUSEKEY_INTERVAL    20
+// #define MOUSEKEY_DELAY       0
+// #define MOUSEKEY_TIME_TO_MAX 60
+// #define MOUSEKEY_MAX_SPEED   7
+// #define MOUSEKEY_WHEEL_DELAY 0
+
+// compile time macro string, see functions/hardware planck script (undefine otherwise)
+#define PRIVATE_STRING
+
+// compile time macro string, must be in quotes
+#define PUBLIC_STRING ":%s/arch=(.*)/arch=('any')\n"
+
+// thumb key tap-shift() double tap: one shot shift (0) off (1) on
+#define DT_SHIFT 1
+
+// number layer 0 position KEYPAD_0, THUMB_0
+#define THUMB_0
+
+// home block shift symbol clustes defined (no overlays required for extended symbols, undefine otherwise)
+#define SHIFT_SYMBOLS
+
+// center column TT assignments (undefine for OSM chords)
+#define CENTER_TT
+#define TAPPING_TOGGLE 1
+
+// home row modifiers
+#define HOME_MODS
+// fix dual function timing
+#define PERMISSIVE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT
+
+// layout ADNW*, BEAKL*, COLEKA*, QWERTY (default)
+#define BEAKLGR
+
+// sync app with window manager keybind hook defined in plover_keybind.h
+#define PLOVER_KEYBIND
+
+#endif
diff --git a/keyboards/planck/keymaps/altgr/keymap.c b/keyboards/planck/keymaps/altgr/keymap.c
new file mode 100644 (file)
index 0000000..516f481
--- /dev/null
@@ -0,0 +1,490 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+//
+// To flash planck firmware
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   Reset keyboard or press hw reset button on base (hole)
+//
+//   cd qmk_firmware/keyboards/planck
+//   sudo make KEYMAP=sdothum dfu
+//
+//   sudo make clean          (good practice before flashing)
+//   sudo make KEYMAP=sdothum (to compile check)
+//
+// Package requirements (for arch linux)
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   avr-gcc-atmel
+//   avr-libc-atmel
+//   dfu-programmer
+//
+// Notes
+// ▔▔▔▔▔
+//   ** E R G O   W I D E   S P L I T ** Layout
+//
+//   Autocompletion tap dance key pairs (),[],{} are available from the
+//   number/symbol layer, as well as, numerous (un)shift key values
+//
+//   The navigation pad provides a single hand right thumb activated cluster
+//   with left hand modifiers
+//
+//   #define PRIVATE_STRING includes private_string.h, a user defined code
+//   block for the PRIV tap dance e.g. SEND_STRING("secret messape"),
+//   see function private()
+//
+// Modifier clusters
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   The num and sym keys together access the navigation pad layer
+//
+//   ,-----------------------------------------------------------------------------------.
+//   | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+//   `-----------------------------------------------------------------------------------'
+//
+// Hint
+// ▔▔▔▔
+//   For sculpted keycaps such as Cherry or OEM profile, reverse the Alt, Num,
+//   Shift, Shift, Nav, Sym keycaps for more ergonomic thumb orientation and
+//   actuation
+//
+// Code
+// ▔▔▔▔
+//   This source is shamelessly based on the "default" planck layout
+//
+//   #ifdef/#endif block structures are not indented, as syntax highlighting
+//   in vim is sufficient for identification
+//
+//   c++ commenting style is used throughout
+//
+// Change history
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   See http://thedarnedestthing.com/planck%20constant
+//   See http://thedarnedestthing.com/planck%20done
+
+
+
+//                === N O T E ===
+//
+// sudo CPATH=<keymap.c directory>/common make ...
+
+
+#include "config.h"
+#include "planck.h"
+#include "action_layer.h"
+#ifdef STENO_ENABLE
+#include "keymap_steno.h"
+#endif
+#ifdef AUDIO_ENABLE
+#include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _BASE = 0
+ ,_SHIFT
+ ,_LSHIFT
+ ,_RSHIFT
+ ,_PLOVER
+ ,_NUMBER
+ ,_SYMBOL
+ ,_FNCKEY
+ ,_MOUSE
+#ifdef CENTER_TT
+ ,_TTNUMBER
+ ,_TTREGEX
+ ,_TTFNCKEY
+ ,_TTCURSOR
+ ,_TTMOUSE
+#endif
+#ifndef SHIFT_SYMBOLS
+ ,_NUMSYM
+ ,_SYMREG
+#endif
+ ,_EDIT
+ ,_QWERTY
+ ,_ADJUST
+ ,_END_LAYERS
+};
+
+enum planck_keycodes {
+  BASE = SAFE_RANGE
+ ,BASE1
+ ,BASE2
+ ,PLOVER
+ ,PLOEXIT
+ ,SM_CIRC   // pseudo GUI_T(S(KC_6))                      for shifted key-codes, see process_record_user()
+ ,SM_DLR    // pseudo SFT_T(S(KC_4))                      for shifted key-codes, see process_record_user()
+ ,SM_G      // pseudo MT   (MOD_LALT | MOD_LSFT, S(KC_G)) for shifted key-codes, see process_record_user()
+ ,SM_K      // pseudo MT   (MOD_LGUI | MOD_LSFT, S(KC_K)) for shifted key-codes, see process_record_user()
+ ,SM_PERC   // pseudo ALT_T(S(KC_5))                      for shifted key-codes, see process_record_user()
+ ,SM_LPRN   // pseudo CTL_T(S(KC_9))                      for shifted key-codes, see process_record_user()
+ ,SM_W      // pseudo MT   (MOD_LGUI | MOD_LSFT, S(KC_W)) for shifted key-codes, see process_record_user()
+ ,SL_LEFT   // pseudo LT   (_MOUSE, S(KC_LEFT))           for shifted key-codes, see process_record_user()
+ ,SP_DEL    // pseudo LT   (_MOUSE, KC_DEL)               for shifted key-codes, see process_record_user()
+ ,SL_PIPE   // pseudo LT   (_ADJUST, S(KC_BSLS))          for shifted key-codes, see process_record_user()
+ ,SL_TAB    // pseudo LT   (_FNCKEY, S(KC_TAB))           for shifted key-codes, see process_record_user()
+#ifdef CENTER_TT
+ ,TT_ESC
+#endif
+#ifdef STENO_ENABLE
+ ,PS_STNA = STN_A
+ ,PS_STNO = STN_O
+ ,PS_STNE = STN_E
+ ,PS_STNU = STN_U
+#else
+ ,LT_C    = LT (_NUMBER, KC_C)
+ ,LT_V    = LT (_FNCKEY, KC_V)
+ ,LT_N    = LT (_EDIT,   KC_N)
+ ,LT_M    = LT (_SYMBOL, KC_M)
+#endif
+ ,PS_BASE
+};
+
+// modifier keys
+#define AT_B    ALT_T(KC_B)
+#define AT_DOWN ALT_T(KC_DOWN)
+#define CT_RGHT CTL_T(KC_RGHT)
+#define GT_C    GUI_T(KC_C)
+#define GT_UP   GUI_T(KC_UP)
+#define MT_E    MT   (MOD_LCTL | MOD_LALT, KC_E)
+#define MT_X    MT   (MOD_LALT | MOD_LSFT, KC_X)
+#define ST_A    SFT_T(KC_A)
+#ifdef HOME_MODS
+#define HOME_K  GUI_T(KC_K)
+#define HOME_H  CTL_T(KC_H)
+#define HOME_E  ALT_T(KC_E)
+#define HOME_A  SFT_T(KC_A)
+#if defined(BEAKLMU) || defined(BEAKLSP) || defined(BEAKLGR)
+#define HOME_T  SFT_T(KC_T)
+#define HOME_R  ALT_T(KC_R)
+#define HOME_S  CTL_T(KC_S)
+#define HOME_W  GUI_T(KC_W)
+#else
+#define HOME_T  SFT_T(KC_T)
+#define HOME_S  ALT_T(KC_S)
+#define HOME_N  GUI_T(KC_N)
+#define HOME_B  CTL_T(KC_B)
+#endif
+#else
+#define HOME_K  KC_K
+#define HOME_H  KC_H
+#define HOME_E  KC_E
+#define HOME_A  KC_A
+#define HOME_T  KC_T
+#define HOME_S  KC_S
+#define HOME_N  KC_N
+#define HOME_B  KC_B
+#endif
+
+#define S_DOWN  S    (KC_DOWN)
+#define S_LEFT  S    (KC_LEFT)
+#define S_RGHT  S    (KC_RGHT)
+#define S_TAB   S    (KC_TAB)
+#define S_UP    S    (KC_UP)
+
+#include "tapdance.h"
+
+// keycodes
+#define ___x___ KC_TRNS
+#define ___fn__ KC_TRNS
+#ifdef _______
+#undef _______
+#endif
+#define _______ KC_NO
+
+#define COPY    LCTL(KC_C)
+#define CUT     LCTL(KC_X)
+#define EOT     LCTL(KC_D)
+#define NAK     LCTL(KC_U)
+#define PASTE   LCTL(KC_V)
+#define UNDO    LCTL(KC_Z)
+#define TMCOPY  LALT(LCTL(KC_C))
+#define TMPASTE LALT(LCTL(KC_V))
+#define LT_BSLS LT  (_MOUSE,  KC_BSLS)      // see process_record_user() for extended handling
+#define LT_BSPC LT  (_EDIT,   KC_BSPC)
+#define SP_LEFT LT  (_EDIT,   KC_LEFT)
+#define LT_ESC  LT  (_NUMBER, KC_ESC)
+#define LT_LEFT LT  (_SYMBOL, KC_LEFT)      // see process_record_user() for extended handling
+#define SP_BSPC LT  (_SYMBOL, KC_BSPC)      // see process_record_user() for extended handling
+#define LT_TAB  LT  (_FNCKEY, KC_TAB)
+#define LT_INS  LT  (_FNCKEY, KC_INS)
+#define LT_ALTG LT  (_FNCKEY, KC_RALT)
+#define ADJUST  MO  (_ADJUST)
+#define OS_ALT  OSM (MOD_LALT)
+#define OS_CTL  OSM (MOD_LCTL)
+#define OS_GUI  OSM (MOD_LGUI)
+#define OS_SFT  OSM (MOD_LSFT)
+#define OS_CALT OSM (MOD_LALT | MOD_LCTL)
+#define OS_CGUI OSM (MOD_LGUI | MOD_LCTL)
+#define OS_CSFT OSM (MOD_LSFT | MOD_LCTL)
+#define OS_SALT OSM (MOD_LALT | MOD_LSFT)
+#define OS_SGUI OSM (MOD_LGUI | MOD_LSFT)
+
+#ifdef CENTER_TT
+#ifdef BEAKLSP
+#define CNTR_TL OSM (MOD_LSFT)
+#else
+#define CNTR_TL TT  (_TTFNCKEY)
+#endif
+#define CNTR_TR KC_CAPS
+#define CNTR_HL TT  (_TTCURSOR)
+#define CNTR_HR TT  (_TTMOUSE)
+#define CNTR_BL TT  (_TTNUMBER)
+#define CNTR_BR TT  (_TTREGEX)
+#else
+#define CNTR_TL OSM (MOD_LALT | MOD_LCTL)
+#define CNTR_TR OSM (MOD_LGUI | MOD_LCTL)
+#define CNTR_HL OSM (MOD_LALT | MOD_LSFT)
+#define CNTR_HR OSM (MOD_LGUI | MOD_LSFT)
+#define CNTR_BL TD  (_CAPS)
+#define CNTR_BR OSM (MOD_LSFT | MOD_LCTL)
+#endif
+
+#ifdef THUMB_0
+#define LT_EQL  LT  (_ADJUST, KC_EQL)
+#else
+#define LT_0    LT  (_ADJUST, KC_0)
+#endif
+#ifndef SHIFT_SYMBOLS
+#define LT_A    LT  (_NUMSYM, KC_A)
+#define LT_LFTX LT  (_SYMREG, KC_LEFT)
+#endif
+
+// ........................................................ Default Alpha Layout
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+#include "beakl.h"
+#include "colemak.h"
+#include "qwerty.h"
+#include "steno_layout.h"
+
+// ...................................................... Number / Function Keys
+
+#include "number_fkey_layout.h"
+
+// ......................................................... Symbol / Navigation
+
+#include "symbol_guifn_layout.h"
+
+// ............................................................... Toggle Layers
+
+#ifdef CENTER_TT
+#include "toggle_layout.h"
+#endif
+
+// ......................................................... Short Cuts / Adjust
+
+#include "chord_layout.h"
+
+};
+
+// ...................................................................... Sounds
+
+#include "sounds.h"
+
+// ........................................................... User Keycode Trap
+
+#include "keycode_functions.h"
+
+#define BASE_1  1
+#define BASE_2  2
+#define BASE_12 3
+static uint8_t base_n = 0;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+  switch (keycode) {
+    case BASE1:
+      if (record->event.pressed) {
+        base_n = base_n | BASE_1;
+        if (base_n == BASE_12) {
+          base_layer();
+        }
+      }
+      else {
+        base_n = base_n & ~BASE_1;
+      }
+      return false;
+    case BASE2:
+      if (record->event.pressed) {
+        base_n = base_n | BASE_2;
+        if (base_n == BASE_12) {
+          base_layer();
+        }
+      }
+      else {
+        base_n = base_n & ~BASE_2;
+      }
+      return false;
+    case AT_DOWN:
+#ifdef HOME_MODS
+    case HOME_E:
+#if defined(BEAKLMU) || defined(BEAKLSP) || defined(BEAKLGR)
+    case HOME_R:
+#else
+    case HOME_S:
+#endif
+#endif
+      tap_mods(record, KC_LALT);
+      break;
+    case CT_RGHT:
+#ifdef HOME_MODS
+    case HOME_K:
+#if defined(BEAKLMU) || defined(BEAKLSP) || defined(BEAKLGR)
+    case HOME_W:
+#else
+    case HOME_B:
+#endif
+#endif
+      tap_mods(record, KC_LGUI);
+      break;
+    case GT_UP:
+#ifdef HOME_MODS
+    case HOME_H:
+#if defined(BEAKLMU) || defined(BEAKLSP) || defined(BEAKLGR)
+    case HOME_S:
+#else
+    case HOME_N:
+#endif
+#endif
+      tap_mods(record, KC_LCTL);
+      break;
+#ifdef HOME_MODS
+    case HOME_A:
+    case HOME_T:
+      tap_mods(record, KC_LSFT);
+      break;
+#endif
+#ifdef CENTER_TT
+    case TT_ESC:
+      clear_tt();                           // exit TT layer
+      return false;
+#endif
+    case LT_ESC:
+#ifdef CENTER_TT
+      if (tt_keycode != 0) {
+        clear_tt();                         // exit TT layer
+        return false;
+      }
+#endif
+      tap_layer(record, _NUMBER);
+      break;
+    case LT_LEFT:
+    case SP_BSPC:
+      tap_layer(record, _SYMBOL);
+      // LT (_SYMBOL, KC_LEFT) left right combination layer
+      thumb_layer(record, RIGHT, 0, 0, _SYMBOL, _LSHIFT);
+      break;
+    case OS_ALT:
+      tap_mods(record, KC_LALT);
+      break;
+    case OS_CTL:
+      tap_mods(record, KC_LCTL);
+      break;
+    case OS_GUI:
+      tap_mods(record, KC_LGUI);
+      break;
+    case SM_CIRC:
+      // GUI_T(S(KC_6))
+      mt_shift(record, KC_LGUI, 0, KC_6);
+      break;
+    case SM_DLR:
+      // SFT_T(S(KC_4))
+      mt_shift(record, KC_LSFT, 0, KC_4);
+      break;
+    case SM_G:
+      // MT(MOD_LALT | MOD_LSFT, S(KC_G))
+      mt_shift(record, KC_LALT, KC_LSFT, KC_G);
+      break;
+    case SM_K:
+      // MT(MOD_LGUI | MOD_LSFT, S(KC_K))
+      mt_shift(record, KC_LGUI, KC_LSFT, KC_K);
+      break;
+    case SM_W:
+      // MT(MOD_LGUI | MOD_LSFT, S(KC_W))
+      mt_shift(record, KC_LGUI, KC_LSFT, KC_W);
+      break;
+    case SM_LPRN:
+      // CTL_T(S(KC_9))
+      mt_shift(record, KC_LCTL, 0, KC_9);
+      break;
+    case SM_PERC:
+      // ALT_T(S(KC_5))
+      mt_shift(record, KC_LALT, 0, KC_5);
+      break;
+    case LT_BSLS:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, KC_BSLS) left right combination layer, see #define LT_BSLS
+      thumb_layer(record, LEFT, 0, 0, _MOUSE, _SYMBOL);
+      break;
+    case SL_LEFT:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, S(KC_LEFT)) left right combination layer
+      thumb_layer(record, RIGHT, SHIFT, KC_LEFT, _MOUSE, _LSHIFT);
+      break;
+    case SP_DEL:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, S(KC_LEFT)) left right combination layer
+      thumb_layer(record, RIGHT, NOSHIFT, KC_DEL, _MOUSE, _LSHIFT);
+      break;
+    case SL_PIPE:
+      // LT (_ADJUST, S(KC_BSLS)) emulation
+      lt_shift(record, KC_BSLS, _ADJUST);
+      break;
+    case SL_TAB:
+      // LT (_FNCKEY, S(KC_TAB)) emulation
+      lt_shift(record, KC_TAB, _FNCKEY);
+      break;
+    case TD_ENT:
+      tap_layer(record, _RSHIFT);
+      // LT (_RSHIFT, KC_ENT) emulation, see tap dance enter
+      break;
+    case TD_SPC:
+      tap_layer(record, _LSHIFT);
+      // LT (_LSHIFT, KC_SPC) left right combination layer, see tap dance TD_SPC
+      thumb_layer(record, LEFT, 0, 0, _LSHIFT, _SYMBOL);
+      break;
+#ifdef CENTER_TT
+    case CNTR_TL:
+    case CNTR_TR:
+    case CNTR_HL:
+    case CNTR_HR:
+    case CNTR_BL:
+    case CNTR_BR:
+      if (tt_keycode != keycode && tt_keycode != 0) {
+        clear_tt();                         // return to base layer first if different TT layer selected
+      }
+      tt_keycode = keycode;
+      break;
+#endif
+// #ifdef STENO_ENABLE
+//     case PS_STNA:
+//       stn_layer(record, STN_A, _NUMBER);
+//       break;
+//     case PS_STNO:
+//       stn_layer(record, STN_O, _FNCKEY);
+//       break;
+//     case PS_STNE:
+//       stn_layer(record, STN_E, _EDIT);
+//       break;
+//     case PS_STNU:
+//       stn_layer(record, STN_U, _SYMBOL);
+//       break;
+// #endif
+    case PS_BASE:
+      if (record->event.pressed) {
+        base_layer();
+      }
+      return false;
+    case PLOVER:
+      steno(record);
+      return false;
+    case PLOEXIT:
+      steno_exit(record);
+      return false;
+  }
+  return true;
+}
+
+#include "init.h"
diff --git a/keyboards/planck/keymaps/altgr/private_string.h b/keyboards/planck/keymaps/altgr/private_string.h
new file mode 100644 (file)
index 0000000..6ea34cc
--- /dev/null
@@ -0,0 +1 @@
+SEND_STRING("the keys of enoch");
diff --git a/keyboards/planck/keymaps/altgr/qwerty.h b/keyboards/planck/keymaps/altgr/qwerty.h
new file mode 100644 (file)
index 0000000..d11d047
--- /dev/null
@@ -0,0 +1,64 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ...................................................................... Qwerty
+#ifdef QWERTY
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   E  |   R  |   T  | ^Alt | ^GUI |   Y  |   U  |   I  |   O  |   P  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   S  |   D  |   F  |   G  | ↑Alt | ↑GUI |   H  |   J  |   K  |   L  |   ;  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   V  |   B  | Caps |^Shift|   N  |   M  |   ,  |   .  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    CNTR_TL, CNTR_TR, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P   },
+    {KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    CNTR_HL, CNTR_HR, KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN},
+    {KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    CNTR_BL, CNTR_BR, KC_N,    KC_M,    KC_COMM, KC_DOT,  TD_QUOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)},
+    {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), KC_SCLN},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), KC_COMM, KC_DOT,  TD_QUOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   E  |   R  |   T  | ^Alt | ^GUI |   Y  |   U  |   I  |   O  |   P  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   S  |   D  |   F  |   G  | ↑Alt | ↑GUI |   H  |   J  |   K  |   L  |   :  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   V  |   B  | Caps |^Shift|   N  |   M  |   /  |   ?  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   -  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)},
+    {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), TD_COLN},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), KC_SLSH, KC_QUES, TD_DQOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_MINS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   E  |   R  |   T  | ^Alt | ^GUI |   Y  |   U  |   I  |   O  |   P  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   S  |   D  |   F  |   G  | ↑Alt | ↑GUI |   H  |   J  |   K  |   L  |   :  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   V  |   B  | Caps |^Shift|   N  |   M  |   ~  |   `  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   _  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)},
+    {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), TD_COLN},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), TD_TILD, TD_GRV,  TD_DQOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_UNDS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
diff --git a/keyboards/planck/keymaps/altgr/readme.md b/keyboards/planck/keymaps/altgr/readme.md
new file mode 100644 (file)
index 0000000..58f73e3
--- /dev/null
@@ -0,0 +1,10 @@
+# The sdothum extended Default Planck Layout
+
+- Colemak-DH layout layer with shift/tab key overlays
+- Number and symbol/function key layer
+- Hexadecimal keypad layer
+- Navigation keypad layer
+- Dynamic macro layer
+- Autocompletion tap key pairs (),[],{}
+- Normalized enter and esc key position across keyboard layers
+- Extensive use of tap keys
diff --git a/keyboards/planck/keymaps/altgr/rules.mk b/keyboards/planck/keymaps/altgr/rules.mk
new file mode 100644 (file)
index 0000000..40f1538
--- /dev/null
@@ -0,0 +1,26 @@
+# 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  = no   # 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
+BACKLIGHT_ENABLE = no   # enable keyboard backlight functionality
+MIDI_ENABLE      = no   # MIDI controls
+AUDIO_ENABLE     = no   # audio output on port C6
+UNICODE_ENABLE   = no   # unicode
+BLUETOOTH_ENABLE = no   # enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE  = no   # enable WS2812 RGB underlight, do not enable this with audio at the same time.
+STENO_ENABLE     = yes # enable TX Bolt protocol, requires VIRTSER and may not work with mouse keys
+
+# do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no   # breathing sleep LED during USB suspend
+
+TAP_DANCE_ENABLE = yes  # enable double tap completion of (),[],{}
+
+ifndef QUANTUM_DIR
+include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/hiea/common/chord_layout.h b/keyboards/planck/keymaps/hiea/common/chord_layout.h
new file mode 100644 (file)
index 0000000..2c785d5
--- /dev/null
@@ -0,0 +1,41 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// .................................................................. Short Cuts
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      | Copy | Paste|      |      |      |      |      |      |      |      |
+  // |--------------------------------------------------------------+------+------+------|
+  // | Undo |  Cut | Copy | Paste|      |      |      |      | PRIV |  PUB |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |  Nak |  Eot |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |  f() |      |      |      |      |      |
+  // |      |      |      |      |      |      |      |  f() |      |      |      |      | see _PLOVER
+  // '-----------------------------------------------------------------------------------'
+
+  [_EDIT] = {
+    {_______, _______, TMCOPY,  TMPASTE, _______, _______, _______, _______, _______, _______, _______, _______},
+    {UNDO,    CUT,     COPY,    PASTE,   _______, _______, _______, _______, TD_PRIV, TD_SEND, _______, _______},
+    {_______, _______, NAK,     EOT,     _______, _______, _______, _______, _______, _______, _______, _______},
+    {_______, _______, _______, _______, _______, _______, ___fn__, ___fn__, _______, _______, _______, _______},
+  },
+
+// ................................................................ Adjust Layer
+
+  // ,-----------------------------------------------------------------------------------.
+  // |Plover|      |      |      |      |      |      |      |      |      |      |      |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |Aud on|      |      |      |      |      |      |      |      |      |      |      |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // | Reset|      |      |      |      |      |      |      |      |      |      |      |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |      |      |      |  f() |      |      |      |      |  f() |      |      |      |
+  // `-----------------------------------------------------------------------------------'
+
+  [_ADJUST] = {
+    {PLOVER,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {AU_ON,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {_______, _______, _______, ___fn__, _______, _______, _______, _______, ___fn__, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/hiea/common/init.h b/keyboards/planck/keymaps/hiea/common/init.h
new file mode 100644 (file)
index 0000000..6366a19
--- /dev/null
@@ -0,0 +1,56 @@
+
+// ....................................................................... Audio
+
+void matrix_init_user(void)
+{
+#ifdef STENO_ENABLE
+  steno_set_mode(STENO_MODE_BOLT);          // or STENO_MODE_GEMINI
+#endif
+#ifdef AUDIO_ENABLE
+  startup_user();
+#endif
+}
+
+#ifdef AUDIO_ENABLE
+#ifdef BACKLIGHT_ENABLE
+void led_set_user(uint8_t usb_led)
+{
+  static uint8_t old_usb_led = 0;
+  _delay_ms(10);                            // gets rid of tick
+  if (!is_playing_notes()) {
+    if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK))) {
+      // if capslock LED is turning on
+      PLAY_SONG(song_caps_on);
+    }
+    else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK))) {
+      // if capslock LED is turning off
+      PLAY_SONG(song_caps_off);
+    }
+  }
+  old_usb_led = usb_led;
+}
+#endif
+
+void startup_user(void)
+{
+  _delay_ms(20);                            // gets rid of tick
+  PLAY_SONG(song_startup);
+}
+
+void shutdown_user(void)
+{
+  PLAY_SONG(song_goodbye);
+  _delay_ms(150);
+  stop_all_notes();
+}
+
+void music_on_user(void)
+{
+  music_scale_user();
+}
+
+void music_scale_user(void)
+{
+  PLAY_SONG(music_scale);
+}
+#endif
diff --git a/keyboards/planck/keymaps/hiea/common/keycode_functions.h b/keyboards/planck/keymaps/hiea/common/keycode_functions.h
new file mode 100644 (file)
index 0000000..e0ae150
--- /dev/null
@@ -0,0 +1,657 @@
+
+// .......................................................... Keycode Primitives
+
+// register simple key press
+void tap_key(uint16_t keycode)
+{
+  register_code  (keycode);
+  unregister_code(keycode);
+}
+
+void shift_key(uint16_t keycode)
+{
+  register_code  (KC_LSFT);
+  tap_key        (keycode);
+  unregister_code(KC_LSFT);
+}
+
+#define SHIFT   1
+#define NOSHIFT 0
+
+static uint16_t key_timer = 0;
+
+// key press for thumb_layer() and lt_shift() macros
+bool key_press(uint8_t shift, uint16_t keycode)
+{
+  if (keycode) {
+    if (timer_elapsed(key_timer) < TAPPING_TERM) {
+      if (shift) {
+        shift_key(keycode);
+      }
+      else {
+        tap_key(keycode);
+      }
+      return true;
+    }
+  }
+  return false;
+}
+
+// ALT_T, CTL_T, GUI_T, SFT_T for shifted keycodes
+void mt_shift(keyrecord_t *record, uint16_t modifier, uint16_t modifier2, uint16_t keycode)
+{
+  if (record->event.pressed) {
+    key_timer = timer_read();
+    register_code(modifier);
+    if (modifier2) {
+      register_code(modifier2);
+    }
+  }
+  else {
+    unregister_code(modifier);
+    if (modifier2) {
+      unregister_code(modifier2);
+    }
+    if (timer_elapsed(key_timer) < TAPPING_TERM) {
+      shift_key(keycode);
+    }
+    key_timer = 0;
+  }
+}
+
+// ................................................................... Mod Masks
+
+// tap dance persistant mods, see process_record_user()
+// keyboard_report->mods (?) appears to be cleared by tap dance
+static uint8_t mods = 0;
+
+void tap_mods(keyrecord_t *record, uint16_t keycode)
+{
+  if (record->event.pressed) {
+    mods |= MOD_BIT(keycode);
+  }
+  else {
+    mods &= ~(MOD_BIT(keycode));
+  }
+}
+
+// (un)register modifiers
+void modifier(void (*f)(uint8_t))
+{
+  if (mods & MOD_BIT(KC_LCTL)) {
+    (*f)(KC_LCTL);
+  }
+  if (mods & MOD_BIT(KC_LGUI)) {
+    (*f)(KC_LGUI);
+  }
+  if (mods & MOD_BIT(KC_LALT)) {
+    (*f)(KC_LALT);
+  }
+}
+
+// .................................................... Triple Dance Shift/Layer
+
+static uint8_t dt_shift = 0;
+
+void double_shift(uint16_t keycode, uint8_t layer)
+{
+  tap_key (keycode);
+  if (DT_SHIFT) {
+    // set_oneshot_mods(MOD_LSFT);
+    // layer_on(layer);
+    layer_on         (_SHIFT);
+    set_oneshot_layer(_SHIFT, ONESHOT_START);
+    dt_shift = 1;
+  }
+  else {
+    layer_on(layer);
+  }
+}
+
+// tap dance LT (LAYER, KEY) emulation with <KEY><DOWN> -> <KEY><SHIFT> and auto-repeat extensions!
+void tap_shift(qk_tap_dance_state_t *state, uint16_t keycode, uint8_t layer)
+{
+  // double tap plus down
+  if (state->count > 2) {
+    // double enter shift
+    if (keycode == KC_ENT) {
+      tap_key     (keycode);
+      double_shift(keycode, layer);
+    }
+    // repeating keycode
+    else {
+      register_code(keycode);
+    }
+  }
+  // tap plus down (or double tap): keycode (one shot) shift
+  else if (state->count > 1) {
+    double_shift(keycode, layer);
+  }
+  // down: shift
+  else if (state->pressed) {
+    layer_on(layer);
+  }
+  // tap: keycode
+  else {
+    modifier(register_code);
+    tap_key (keycode);
+    modifier(unregister_code);
+  }
+}
+
+void tap_reset(uint16_t keycode, uint8_t layer)
+{
+  unregister_code(keycode);
+  if (DT_SHIFT && dt_shift) {
+    clear_oneshot_layer_state(ONESHOT_PRESSED);
+    dt_shift = 0;
+  }
+  else {
+    layer_off(layer);
+  }
+}
+
+// augment pseudo LT (_RSHIFT, KC_ENT) handling below for rapid <ENTER><SHIFT> sequences
+void enter(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_shift(state, KC_ENT, _RSHIFT);
+}
+
+void enter_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_reset(KC_ENT, _RSHIFT);
+}
+
+// augment pseudo LT (_LSHIFT, KC_SPC) handling below for rapid <SPACE><SHIFT> sequences
+void space(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_shift(state, KC_SPC, _LSHIFT);
+}
+
+void space_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_reset(KC_SPC, _LSHIFT);
+}
+
+// ......................................................... Triple Dance Insert
+
+void double_max(uint8_t count, uint8_t shift, uint16_t keycode)
+{
+  if (shift) {
+    shift_key(keycode);
+    if (count > 1) {
+      shift_key(keycode);
+    }
+  }
+  else {
+    tap_key(keycode);
+    if (count > 1) {
+      tap_key(keycode);
+    }
+  }
+}
+
+void colon(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key  (KC_SPC);
+    shift_key(KC_SCLN);
+    shift_key(KC_SCLN);
+    tap_key  (KC_SPC);
+  }
+  else {
+    double_max(state->count, SHIFT, KC_SCLN);
+  }
+  reset_tap_dance(state);
+}
+
+void eql(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key(KC_SPC);
+    tap_key(KC_SLSH);
+    tap_key(KC_EQL);
+    tap_key(KC_SPC);
+  }
+  else {
+    double_max(state->count, NOSHIFT, KC_EQL);
+  }
+  reset_tap_dance(state);
+}
+
+void greater(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key  (KC_SPC);
+    tap_key  (KC_MINS);
+    shift_key(KC_DOT);
+    tap_key  (KC_SPC);
+  }
+  else {
+    double_max(state->count, SHIFT, KC_DOT);
+  }
+  reset_tap_dance(state);
+}
+
+void lesser(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key  (KC_SPC);
+    shift_key(KC_COMM);
+    tap_key  (KC_MINS);
+    tap_key  (KC_SPC);
+  }
+  else {
+    double_max(state->count, SHIFT, KC_COMM);
+  }
+  reset_tap_dance(state);
+}
+
+void tilde(qk_tap_dance_state_t *state, void *user_data)
+{
+  // double tap plus down: repeating keycode
+  if (state->count > 2) {
+    register_code(KC_LSFT);
+    register_code(KC_GRV);
+  }
+  // tap: keycode
+  else {
+    shift_key(KC_GRV);
+    // double tap: unix home directory
+    if (state->count > 1) {
+      tap_key(KC_SLSH);
+    }
+  }
+}
+
+void tilde_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_GRV);
+  unregister_code(KC_LSFT);
+}
+
+// ............................................................. Tap Dance Pairs
+
+// tap dance shift rules
+#define S_NEVER  0
+#define S_SINGLE 1
+#define S_DOUBLE 2
+#define S_ALWAYS S_SINGLE | S_DOUBLE
+
+void symbol_pair(uint8_t shift, uint16_t left, uint16_t right)
+{
+  if (shift & S_DOUBLE) {
+    shift_key(left);
+    shift_key(right);
+  }
+  else {
+    tap_key(left);
+    tap_key(right);
+  }
+}
+
+#define CLOSE 1
+
+// tap dance symbol pairs
+void tap_pair(qk_tap_dance_state_t *state, uint8_t shift, uint16_t left, uint16_t right, uint16_t modifier, uint8_t close)
+{
+  // triple tap: left right with cursor between symbol pair a la vim :-)
+  if (state->count > 2) {
+    symbol_pair(shift, left, right);
+    tap_key    (KC_LEFT);
+  }
+  // double tap: left right
+  else if (state->count > 1) {
+    symbol_pair(shift, left, right);
+  }
+  // down: modifier
+  else if (state->pressed) {
+    if (modifier) {
+      register_code(modifier);
+    }
+  }
+  // tap: left (close: right)
+  else {
+    if (shift & S_SINGLE) {
+      shift_key(close ? right : left);
+    }
+    else {
+      tap_key(close ? right : left);
+    }
+  }
+  if (!modifier) {
+    reset_tap_dance(state);
+  }
+}
+
+void doublequote(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_QUOT, KC_QUOT, 0, 0);
+}
+
+void grave(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_GRV, KC_GRV, 0, 0);
+}
+
+void lbrace(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, 0);
+}
+
+void lcurly(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, 0);
+}
+
+void lparen(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_9, KC_0, KC_LCTL, 0);
+}
+
+void lparen_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_LCTL);
+}
+
+void quote(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_QUOT, KC_QUOT, 0, 0);
+}
+
+void rangle(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_COMM, KC_DOT, 0, CLOSE);
+}
+
+void rbrace(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, CLOSE);
+}
+
+void rcurly(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, CLOSE);
+}
+
+void rparen(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_9, KC_0, 0, CLOSE);
+}
+
+void rparen_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_LCTL);
+}
+
+// ............................................................ Tap Dance Insert
+
+void comma(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_key(KC_COMM);
+  if (state->count > 1) {
+    tap_key(KC_SPC);
+  }
+  reset_tap_dance(state);
+}
+
+void dot(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+    shift_key(KC_COLN);
+  }
+  else {
+    tap_key(KC_DOT);
+  }
+  reset_tap_dance(state);
+}
+
+// compile time macro string, see functions/hardware planck script
+void private(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+#ifdef PRIVATE_STRING
+#include "private_string.h"
+#endif
+  }
+  reset_tap_dance(state);
+}
+
+// config.h defined string
+void send(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+    SEND_STRING(PUBLIC_STRING);
+  }
+  reset_tap_dance(state);
+}
+
+// .......................................................... Tap Dance One Shot
+
+void caps(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+    tap_key(KC_CAPS);
+  }
+  else {
+    set_oneshot_mods(MOD_LSFT);
+    register_code   (KC_LSFT);              // on hold down
+  }
+}
+
+void caps_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_LSFT);
+}
+
+// ................................................................... Tap Dance
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [_CAPS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, caps, caps_reset)
+ ,[_COLN] = ACTION_TAP_DANCE_FN         (colon)
+ ,[_COMM] = ACTION_TAP_DANCE_FN         (comma)
+ ,[_DOT]  = ACTION_TAP_DANCE_FN         (dot)
+ ,[_DQOT] = ACTION_TAP_DANCE_FN         (doublequote)
+ ,[_ENT]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, enter, enter_reset)
+ ,[_EQL]  = ACTION_TAP_DANCE_FN         (eql)
+ ,[_GRV]  = ACTION_TAP_DANCE_FN         (grave)
+ ,[_GT]   = ACTION_TAP_DANCE_FN         (greater)
+ ,[_LBRC] = ACTION_TAP_DANCE_FN         (lbrace)
+ ,[_LCBR] = ACTION_TAP_DANCE_FN         (lcurly)
+ ,[_LPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lparen, lparen_reset)
+ ,[_LT]   = ACTION_TAP_DANCE_FN         (lesser)
+ ,[_PRIV] = ACTION_TAP_DANCE_FN         (private)
+ ,[_QUOT] = ACTION_TAP_DANCE_FN         (quote)
+ ,[_RBRC] = ACTION_TAP_DANCE_FN         (rbrace)
+ ,[_RCBR] = ACTION_TAP_DANCE_FN         (rcurly)
+ ,[_RNGL] = ACTION_TAP_DANCE_FN         (rangle)
+ ,[_RPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rparen, rparen_reset)
+ ,[_SEND] = ACTION_TAP_DANCE_FN         (send)
+ ,[_SPC]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, space, space_reset)
+ ,[_TILD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tilde, tilde_reset)
+};
+
+// .............................................................. Dynamic Layers
+
+#define        LEFT    1
+#define        RIGHT   2
+static uint8_t thumb = 0;
+
+// LEFT (KC_SPC, S(KC_BSLS)), RIGHT (KC_LEFT, S(KC_LEFT)) opposite thumb combinations, see process_record_user()
+// up,   up   -> _BASE
+// up,   down -> _SYMBOL
+// down, up   -> _NUMBER
+// down, down -> _MOUSE                     // see layer keycodes that raise mouse layer
+#define THUMBS_DOWN _MOUSE                  // layer
+
+static uint8_t overlayer = 0;
+
+// left right thumb layer combinations
+void thumb_layer(keyrecord_t *record, uint8_t side, uint8_t shift, uint16_t keycode, uint8_t thumb_dn_layer, uint8_t thumb_up_layer)
+{
+  if (record->event.pressed) {
+    // layer_on via tap_layer(), see process_record_user()
+    key_timer = timer_read();
+    thumb     = thumb | side;
+  }
+  else {
+    layer_off(thumb_dn_layer);
+    // opposite thumb_layer() thumb may have switched effective layer!
+    if (overlayer) {
+      layer_off(overlayer);
+      overlayer = 0;
+    }
+    if (!key_press(shift, keycode)) {
+      layer_off(THUMBS_DOWN);               // both thumbs needed
+      // opposite thumb down? see left right combination layer table above
+      if (thumb & (side == LEFT ? RIGHT : LEFT)) {
+        layer_on(thumb_up_layer);
+        overlayer = thumb_up_layer;
+      }
+    }
+    clear_mods();
+    thumb     = thumb & ~side;
+    key_timer = 0;
+  }
+}
+
+// #ifdef STENO_ENABLE
+// // LT for steno keycode
+// void stn_layer(keyrecord_t *record, uint16_t keycode, uint8_t layer)
+// {
+//   if (record->event.pressed) {
+//     key_timer = timer_read();
+//     if (keycode) {
+//       process_steno(keycode, record);
+//     }
+//     layer_on(layer);
+//   }
+//   else {
+//     layer_off(layer);
+//     if (keycode) {
+//       if (timer_elapsed(key_timer) < TAPPING_TERM) {
+//         process_steno(keycode, record);
+//       }
+//       else {
+//         // clear pressed state (request push of updated) process_steno.c and .h
+//         // steno_clear_state();
+//       }
+//     }
+//     key_timer = 0;
+//   }
+// }
+// #endif
+
+// LT for S(keycode)
+void lt_shift(keyrecord_t *record, uint16_t keycode, uint8_t layer)
+{
+  if (record->event.pressed) {
+    key_timer = timer_read();
+    layer_on(layer);
+  }
+  else {
+    layer_off(layer);
+    // for shifted keycodes, hence, LT_SHIFT
+    key_press(SHIFT, keycode);
+    clear_mods();
+    key_timer = 0;
+  }
+}
+
+// set layer asap to overcome macro latency errors, notably tap dance and LT usage
+// this routine inexplicably (?) sets layer_on() faster than can be done in thumb_layer()
+void tap_layer(keyrecord_t *record, uint8_t layer)
+{
+  if (record->event.pressed) {
+    layer_on(layer);
+  }
+  else {
+    layer_off(layer);
+  }
+}
+
+// ..................................................................... Keymaps
+
+// void persistant_default_layer_set(uint16_t default_layer)
+// {
+//   eeconfig_update_default_layer(default_layer);
+//   default_layer_set            (default_layer);
+// }
+
+void clear_layers(void)
+{
+  uint8_t layer;
+  for (layer = 0; layer < _END_LAYERS; layer++) {
+    layer_off(layer);
+  }
+}
+
+#ifdef CENTER_TT
+static uint16_t tt_keycode = 0;             // current TT keycode
+
+void clear_tt(void)
+{
+  if (tt_keycode == KC_CAPS) {
+    tap_key(KC_CAPS);                       // clear capslock
+  }
+  tt_keycode = 0;
+  clear_layers();
+  set_single_persistent_default_layer(_BASE);
+}
+#endif
+
+// txbolt plover run state
+static uint8_t plover = 0;
+
+void toggle_plover(uint8_t state)
+{
+  if (plover != state) {
+#ifdef PLOVER_KEYBIND
+#include "plover_keybind.h"
+#endif
+    plover = state;
+  }
+}
+
+void base_layer(void)
+{
+#ifdef AUDIO_ENABLE
+  if (plover) {
+    PLAY_SONG(song_plover_gb);
+  }
+  else {
+    PLAY_SONG(song_qwerty);
+  }
+#endif
+  clear_layers();
+  set_single_persistent_default_layer(_BASE);
+  toggle_plover(0);
+}
+
+void steno(keyrecord_t *record)
+{
+  if (record->event.pressed) {
+#ifdef AUDIO_ENABLE
+    PLAY_SONG(song_plover);
+#endif
+    clear_layers();
+    layer_on(_PLOVER);
+    if (!eeconfig_is_enabled()) {
+      eeconfig_init();
+    }
+    keymap_config.raw  = eeconfig_read_keymap();
+    keymap_config.nkro = 1;
+    eeconfig_update_keymap(keymap_config.raw);
+    if (!plover) {
+      toggle_plover(1);
+    }
+  }
+}
+
+void steno_exit(keyrecord_t *record)
+{
+  if (record->event.pressed) {
+    base_layer();
+    toggle_plover(0);
+  }
+}
diff --git a/keyboards/planck/keymaps/hiea/common/number_fkey_layout.h b/keyboards/planck/keymaps/hiea/common/number_fkey_layout.h
new file mode 100644 (file)
index 0000000..321482b
--- /dev/null
@@ -0,0 +1,46 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ......................................................... Number Keypad Layer
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |   F  |   E  |   D  |      |      |      |   /  |   7  |   8  |   9  |   *  |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI |   C  |   B  |   A  |      |      |      |   .  |   4  |   5  |   6  |   -  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   G  |   \  |      |      |      |   ,  |   1  |   2  |   3  |   +  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   0  |   =  |      |      |      |
+  // |      |      |      |  f() |      |      |      |   =  |   0  |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_NUMBER] = {
+    {_______, KC_F,    MT_E,    KC_D,    _______, ___x___, ___x___, KC_SLSH, KC_7,    KC_8,    KC_9,    KC_ASTR},
+    {OS_GUI,  GT_C,    AT_B,    ST_A,    _______, ___x___, ___x___, TD_DOT,  KC_4,    KC_5,    KC_6,    KC_MINS},
+    {_______, KC_HASH, SM_G,    KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1,    KC_2,    KC_3,    KC_PLUS},
+#ifdef THUMB_0
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0,    LT_EQL,  ___x___, ___x___, ___x___},
+#else
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL,  LT_0,    ___x___, ___x___, ___x___},
+#endif
+  },
+
+// ............ .................................................. Function Keys
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      |  F7  |  F8  |  F9  |  F12 |
+  // |-----------------------------------------------------------------------------------|
+  // | Ctrl |  GUI |  Alt | Shift|      |      |      |      |  F4  |  F5  |  F6  |  F11 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |  F1  |  F2  |  F3  |  F10 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |  f() |      |   +  |      |      |      |      |
+  // |      |      |      |      |  f() |      |      |   +  |      |      |      |      | see _PLOVER
+  // '-----------------------------------------------------------------------------------'
+
+  [_FNCKEY] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7,   KC_F8,   KC_F9,   KC_F12 },
+    {OS_GUI,  OS_CTL,  OS_ALT,  OS_SFT,  _______, ___x___, ___x___, _______, KC_F4,   KC_F5,   KC_F6,   KC_F11 },
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1,   KC_F2,   KC_F3,   KC_F10 },
+    {_______, _______, _______, _______, ___fn__, ___fn__, _______, KC_PLUS, _______, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/hiea/common/plover_keybind.h b/keyboards/planck/keymaps/hiea/common/plover_keybind.h
new file mode 100644 (file)
index 0000000..cb4ef92
--- /dev/null
@@ -0,0 +1,9 @@
+
+// simple window manager specific plover keybind hook
+
+// toggle plover application, see herbstluftwm/config/appbinds
+register_code  (KC_LGUI);
+register_code  (KC_LCTL);
+tap_key        (KC_EQL);
+unregister_code(KC_LCTL);
+unregister_code(KC_LGUI);
diff --git a/keyboards/planck/keymaps/hiea/common/sounds.h b/keyboards/planck/keymaps/hiea/common/sounds.h
new file mode 100644 (file)
index 0000000..1bfc7a6
--- /dev/null
@@ -0,0 +1,14 @@
+
+// ................................................................ Audio Sounds
+
+#ifdef AUDIO_ENABLE
+float song_startup  [][2] = SONG(STARTUP_SOUND);
+float song_colemak  [][2] = SONG(COLEMAK_SOUND);
+float song_qwerty   [][2] = SONG(QWERTY_SOUND);
+float song_plover   [][2] = SONG(PLOVER_SOUND);
+float song_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float song_caps_on  [][2] = SONG(CAPS_LOCK_ON_SOUND);
+float song_caps_off [][2] = SONG(CAPS_LOCK_OFF_SOUND);
+float music_scale   [][2] = SONG(MUSIC_SCALE_SOUND);
+float song_goodbye  [][2] = SONG(GOODBYE_SOUND);
+#endif
diff --git a/keyboards/planck/keymaps/hiea/common/steno_layout.h b/keyboards/planck/keymaps/hiea/common/steno_layout.h
new file mode 100644 (file)
index 0000000..ab4a6fe
--- /dev/null
@@ -0,0 +1,39 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ...................................................................... Plover
+#ifdef STENO_ENABLE
+  // ,-----------------------------------------------------------------------------------.
+  // |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // | Base |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // | Base |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |                           |   A  |   O  |   E  |   U  |                           |
+  // `-----------------------------------------------------------------------------------'
+
+  [_PLOVER] = {
+    {STN_N1,  STN_N2,  STN_N3,  STN_N4,  STN_N5,  STN_N6,  STN_N7,  STN_N8,  STN_N9,  STN_NA,  STN_NB,  STN_NC },
+    {BASE1,   STN_S1,  STN_TL,  STN_PL,  STN_HL,  STN_ST1, STN_ST3, STN_FR,  STN_PR,  STN_LR,  STN_TR,  STN_DR },
+    {BASE2,   STN_S2,  STN_KL,  STN_WL,  STN_RL,  STN_ST2, STN_ST4, STN_RR,  STN_BR,  STN_GR,  STN_SR,  STN_ZR },
+    {_______, _______, _______, PS_STNA, PS_STNO, _______, _______, PS_STNE, PS_STNU, _______, _______, _______},
+  },
+#else
+  // ,-----------------------------------------------------------------------------------.
+  // |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // | Base |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // | Base |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |                           |   A  |   O  |   E  |   U  |                           |
+  // `-----------------------------------------------------------------------------------'
+
+  [_PLOVER] = {
+    {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
+    {BASE1,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC},
+    {BASE2,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+    {_______, _______, _______, LT_C,    LT_V,    _______, _______, LT_N,    LT_M,    _______, _______, _______},
+  },
+#endif
diff --git a/keyboards/planck/keymaps/hiea/common/symbol_guifn_layout.h b/keyboards/planck/keymaps/hiea/common/symbol_guifn_layout.h
new file mode 100644 (file)
index 0000000..677e464
--- /dev/null
@@ -0,0 +1,40 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ..................................................... Symbol Navigation Layer
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |   ~  |   *  |   &  |      |      |      |      | Home |  Up  |  End | PgUp |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI |   ^  |   %  |   $  |      |      |      |      | Left | Down | Right| PgDn |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   @  |   !  |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |                           |Adjust|   \  |      |  f() |                           |
+  // '-----------------------------------------------------------------------------------'
+
+  [_SYMBOL] = {
+    {_______, KC_TILD, KC_ASTR, KC_AMPR, _______, ___x___, ___x___, _______, KC_HOME, KC_UP,   KC_END,  KC_PGUP},
+    {OS_GUI,  SM_CIRC, SM_PERC, SM_DLR,  _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN},
+    {_______, KC_HASH, KC_AT,   KC_EXLM, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {___x___, ___x___, ___x___, ADJUST,  LT_BSLS, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___},
+  },
+
+// ............................................................... Mouse Actions
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      | Left |  Up  | Right|  Up  |
+  // |-----------------------------------------------------------------------------------|
+  // |      | Btn3 | Btn2 | Btn1 |      |      |      |      | Left | Down | Right| Down |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |                           |      |  f() |      |  f() |                           |
+  // '-----------------------------------------------------------------------------------'
+
+  [_MOUSE] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U},
+    {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D},
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {_______, _______, _______, _______, ___fn__, _______, _______, _______, ___fn__, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/hiea/common/tapdance.h b/keyboards/planck/keymaps/hiea/common/tapdance.h
new file mode 100644 (file)
index 0000000..d778286
--- /dev/null
@@ -0,0 +1,49 @@
+
+// tap dance keys
+enum tap_dance {
+  _CAPS = 0
+ ,_COLN
+ ,_COMM
+ ,_DOT
+ ,_DQOT
+ ,_ENT
+ ,_EQL
+ ,_GRV
+ ,_GT
+ ,_LBRC
+ ,_LCBR
+ ,_LPRN
+ ,_LT
+ ,_PRIV
+ ,_QUOT
+ ,_RBRC
+ ,_RCBR
+ ,_RNGL
+ ,_RPRN
+ ,_SEND
+ ,_SPC
+ ,_TILD
+};
+
+#define TD_CAPS TD(_CAPS)
+#define TD_COLN TD(_COLN)
+#define TD_COMM TD(_COMM)
+#define TD_DOT  TD(_DOT)
+#define TD_DQOT TD(_DQOT)
+#define TD_ENT  TD(_ENT)
+#define TD_EQL  TD(_EQL)
+#define TD_GRV  TD(_GRV)
+#define TD_GT   TD(_GT)
+#define TD_LBRC TD(_LBRC)
+#define TD_LCBR TD(_LCBR)
+#define TD_LPRN TD(_LPRN)
+#define TD_LT   TD(_LT)
+#define TD_PRIV TD(_PRIV)                   // compile time macro string, provided in private_string.h
+#define TD_QUOT TD(_QUOT)
+#define TD_RBRC TD(_RBRC)
+#define TD_RCBR TD(_RCBR)
+#define TD_RNGL TD(_RNGL)
+#define TD_RPRN TD(_RPRN)
+#define TD_SEND TD(_SEND)                   // config.h defined macro string
+#define TD_SPC  TD(_SPC)                    // see process_record_user() for extended handling of Spc
+#define TD_TILD TD(_TILD)
diff --git a/keyboards/planck/keymaps/hiea/common/toggle_layout.h b/keyboards/planck/keymaps/hiea/common/toggle_layout.h
new file mode 100644 (file)
index 0000000..713d27b
--- /dev/null
@@ -0,0 +1,102 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ......................................................... Number Keypad Layer
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |   F  |   E  |   D  |      |      |      |   /  |   7  |   8  |   9  |   *  |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI |   C  |   B  |   A  |      |      |      |   .  |   4  |   5  |   6  |   -  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   G  |   \  |      |      |      |   ,  |   1  |   2  |   3  |   +  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() | Space|      |      |   0  |   =  |      |      |      |
+  // |      |      |      |  f() | Space|      |      |   =  |   0  |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTNUMBER] = {
+    {_______, KC_F,    MT_E,    KC_D,    _______, ___x___, ___x___, KC_SLSH, KC_7,    KC_8,    KC_9,    KC_ASTR},
+    {OS_GUI,  GT_C,    AT_B,    ST_A,    _______, ___x___, ___x___, TD_DOT,  KC_4,    KC_5,    KC_6,    KC_MINS},
+    {_______, KC_HASH, SM_G,    KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1,    KC_2,    KC_3,    KC_PLUS},
+#ifdef THUMB_0
+    {_______, _______, _______, TT_ESC,  KC_SPC,  _______, _______, KC_0,    LT_EQL,  _______, _______, _______},
+#else
+    {_______, _______, _______, TT_ESC,  KC_SPC,  _______, _______, KC_EQL,  LT_0,    _______, _______, _______},
+#endif
+  },
+
+// ............ .................................................. Function Keys
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      |  F7  |  F8  |  F9  |  F12 |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI | Ctrl |  Alt | Shift|      |      |      |      |  F4  |  F5  |  F6  |  F11 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |  F1  |  F2  |  F3  |  F10 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   +  |      |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTFNCKEY] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7,   KC_F8,   KC_F9,   KC_F12 },
+    {OS_GUI,  OS_CTL,  OS_ALT,  OS_SFT,  _______, ___x___, ___x___, _______, KC_F4,   KC_F5,   KC_F6,   KC_F11 },
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1,   KC_F2,   KC_F3,   KC_F10 },
+    {_______, _______, _______, TT_ESC,  _______, _______, _______, KC_PLUS, _______, _______, _______, _______},
+  },
+
+// ....................................................................... Regex
+
+  // ,-----------------------------------------------------------------------------------.
+  // |      |   ~  |   {  |   }  |   &  |      |      |   %  |   [  |   ]  |   @  |      |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |      |   ^  |   <  |   >  |   ?  |      |      |   |  |   (  |   )  |   $  |      |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |      |   :  |   !  |   =  |   /  |      |      |   \  |   *  |   .  |   #  |      |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |      |      |      |  f() |   -  |      |      |   +  | Space|      |      |      |
+  // `-----------------------------------------------------------------------------------'
+
+  [_TTREGEX] = {
+    {___x___, KC_TILD, KC_LCBR, KC_RCBR, KC_AMPR, ___x___, ___x___, KC_PERC, KC_LBRC, KC_RBRC, KC_AT,   ___x___},
+    {___x___, KC_CIRC, KC_LT,   KC_GT,   KC_QUES, ___x___, ___x___, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  ___x___},
+    {___x___, KC_COLN, KC_EXLM, KC_EQL,  KC_SLSH, ___x___, ___x___, KC_BSLS, KC_ASTR, KC_DOT,  KC_HASH, ___x___},
+    {_______, _______, _______, TT_ESC,  KC_MINS, _______, _______, KC_PLUS, KC_SPC,  _______, _______, _______},
+  },
+
+// ............................................................ Navigation Layer
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      | Home |  Up  |  End | PgUp |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI | Ctrl |  Alt | Shift|      |      |      |      | Left | Down | Right| PgDn |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |      |      |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTCURSOR] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_HOME, KC_UP,   KC_END,  KC_PGUP},
+    {OS_GUI,  OS_CTL,  OS_ALT,  OS_SFT,  _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN},
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {_______, _______, _______, TT_ESC,  _______, _______, _______, _______, _______, _______, _______, _______},
+  },
+
+// ............................................................... Mouse Actions
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      | Left |  Up  | Right|  Up  |
+  // |-----------------------------------------------------------------------------------|
+  // |      | Btn3 | Btn2 | Btn1 |      |      |      |      | Left | Down | Right| Down |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |      |      |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTMOUSE] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U},
+    {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D},
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {_______, _______, _______, TT_ESC,  _______, _______, _______, _______, _______, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/hiea/config.h b/keyboards/planck/keymaps/hiea/config.h
new file mode 100644 (file)
index 0000000..9bb5e08
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// required because lower/raise modifiers are redefined by colemak-dh
+#define PREVENT_STUCK_MODIFIERS
+
+// tap dance key press termination interval
+#define TAPPING_TERM 250
+
+// smooth mouse motion
+// #define MOUSEKEY_INTERVAL    20
+// #define MOUSEKEY_DELAY       0
+// #define MOUSEKEY_TIME_TO_MAX 60
+// #define MOUSEKEY_MAX_SPEED   7
+// #define MOUSEKEY_WHEEL_DELAY 0
+
+// compile time macro string, see functions/hardware planck script (undefine otherwise)
+#define PRIVATE_STRING
+
+// compile time macro string, must be in quotes
+#define PUBLIC_STRING ":%s/arch=(.*)/arch=('any')\n"
+
+// thumb key tap-shift() double tap: one shot shift (0) off (1) on
+#define DT_SHIFT 1
+
+// number layer 0 position KEYPAD_0, THUMB_0
+#define THUMB_0
+
+// home block shift symbol clustes defined (no overlays required for extended symbols, undefine otherwise)
+#define SHIFT_SYMBOLS
+
+// center column TT assignments (undefine for OSM chords)
+#define CENTER_TT
+#define TAPPING_TOGGLE 1
+
+// home row modifiers
+#define HOME_MODS
+// fix dual function timing
+#define PERMISSIVE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT
+
+// layout ADNW*, BEAKL*, COLEKA*, QWERTY (default)
+#define DEFAULT
+
+// sync app with window manager keybind hook defined in plover_keybind.h
+#define PLOVER_KEYBIND
+
+#endif
diff --git a/keyboards/planck/keymaps/hiea/hiea.h b/keyboards/planck/keymaps/hiea/hiea.h
new file mode 100644 (file)
index 0000000..093802a
--- /dev/null
@@ -0,0 +1,63 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// .................................................................. BEAKL HIEA
+#ifdef DEFAULT
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | Shift| Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |   A  |   .  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   K  |   ,  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Ins | Left |  Ent | Bksp | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_Z,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_N,    KC_M,    KC_X   },
+    {HOME_H,  HOME_I,  HOME_E,  HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    HOME_T,  HOME_R,  HOME_S,  HOME_W },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_K,    KC_COMM, CNTR_BL, CNTR_BR, KC_B,    KC_P,    KC_L,    KC_F,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_INS,  SP_LEFT, TD_ENT,  SP_BSPC, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), KC_SCLN, TD_QUOT, S(KC_K), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_INS,  SP_LEFT, TD_ENT,  SP_BSPC, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   [  |   ]  |   Z  | Shift| Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   ^  |   <  |   >  |   ~  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   !  |   =  |   `  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | ↑Tab |  f() |  Ins | Left |   _  |  Del | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_Y), KC_LBRC, KC_RBRC, S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {SM_H,    KC_CIRC, TD_LT,   TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL,  TD_GRV,  CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  S_TAB,   ___fn__, LT_INS,  S_LEFT,  KC_UNDS, SP_DEL,  S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | Shift| Caps |   G  |   {  |   }  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |   A  |   ?  |Cursor| Mouse|   |  |   (  |   )  |   $  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   K  |   /  |  Num | Regex|   \  |   *  |   .  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Tab |   -  |  Ins | Left |  f() | Bksp | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), KC_LCBR, KC_RCBR, S(KC_M), S(KC_X)},
+    {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  SM_W   },
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_K), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT,  S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_TAB,  KC_MINS, LT_INS,  S_LEFT,  ___fn__, SP_BSPC, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
diff --git a/keyboards/planck/keymaps/hiea/keymap.c b/keyboards/planck/keymaps/hiea/keymap.c
new file mode 100644 (file)
index 0000000..2f573f9
--- /dev/null
@@ -0,0 +1,429 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+//
+// To flash planck firmware
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   Reset keyboard or press hw reset button on base (hole)
+//
+//   cd qmk_firmware/keyboards/planck
+//   sudo make KEYMAP=sdothum dfu
+//
+//   sudo make clean          (good practice before flashing)
+//   sudo make KEYMAP=sdothum (to compile check)
+//
+// Package requirements (for arch linux)
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   avr-gcc-atmel
+//   avr-libc-atmel
+//   dfu-programmer
+//
+// Notes
+// ▔▔▔▔▔
+//   ** E R G O   W I D E   S P L I T ** Layout
+//
+//   Autocompletion tap dance key pairs (),[],{} are available from the
+//   number/symbol layer, as well as, numerous (un)shift key values
+//
+//   The navigation pad provides a single hand right thumb activated cluster
+//   with left hand modifiers
+//
+//   #define PRIVATE_STRING includes private_string.h, a user defined code
+//   block for the PRIV tap dance e.g. SEND_STRING("secret messape"),
+//   see function private()
+//
+// Modifier clusters
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   The num and sym keys together access the navigation pad layer
+//
+//   ,-----------------------------------------------------------------------------------.
+//   | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+//   `-----------------------------------------------------------------------------------'
+//
+// Hint
+// ▔▔▔▔
+//   For sculpted keycaps such as Cherry or OEM profile, reverse the Alt, Num,
+//   Shift, Shift, Nav, Sym keycaps for more ergonomic thumb orientation and
+//   actuation
+//
+// Code
+// ▔▔▔▔
+//   This source is shamelessly based on the "default" planck layout
+//
+//   #ifdef/#endif block structures are not indented, as syntax highlighting
+//   in vim is sufficient for identification
+//
+//   c++ commenting style is used throughout
+//
+// Change history
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   See http://thedarnedestthing.com/planck%20constant
+//   See http://thedarnedestthing.com/planck%20done
+
+
+
+//                === N O T E ===
+//
+// sudo CPATH=<keymap.c directory>/common make ...
+
+
+#include "config.h"
+#include "planck.h"
+#include "action_layer.h"
+#ifdef STENO_ENABLE
+#include "keymap_steno.h"
+#endif
+#ifdef AUDIO_ENABLE
+#include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _BASE = 0
+ ,_SHIFT
+ ,_LSHIFT
+ ,_RSHIFT
+ ,_PLOVER
+ ,_NUMBER
+ ,_SYMBOL
+ ,_FNCKEY
+ ,_MOUSE
+#ifdef CENTER_TT
+ ,_TTNUMBER
+ ,_TTREGEX
+ ,_TTFNCKEY
+ ,_TTCURSOR
+ ,_TTMOUSE
+#endif
+ ,_EDIT
+ ,_ADJUST
+ ,_END_LAYERS
+};
+
+enum planck_keycodes {
+  BASE = SAFE_RANGE
+ ,BASE1
+ ,BASE2
+ ,PLOVER
+ ,SM_CIRC   // pseudo GUI_T(S(KC_6))                      for shifted key-codes, see process_record_user()
+ ,SM_DLR    // pseudo SFT_T(S(KC_4))                      for shifted key-codes, see process_record_user()
+ ,SM_G      // pseudo MT   (MOD_LALT | MOD_LSFT, S(KC_G)) for shifted key-codes, see process_record_user()
+ ,SM_H      // pseudo MT   (MOD_LCTL | MOD_LSFT, S(KC_H)) for shifted key-codes, see process_record_user()
+ ,SM_PERC   // pseudo ALT_T(S(KC_5))                      for shifted key-codes, see process_record_user()
+ ,SM_W      // pseudo MT   (MOD_LGUI | MOD_LSFT, S(KC_W)) for shifted key-codes, see process_record_user()
+ ,SL_LEFT   // pseudo LT   (_MOUSE, S(KC_LEFT))           for shifted key-codes, see process_record_user()
+ ,SP_DEL    // pseudo LT   (_MOUSE, KC_DEL)               for shifted key-codes, see process_record_user()
+ ,SL_TAB    // pseudo LT   (_FNCKEY, S(KC_TAB))           for shifted key-codes, see process_record_user()
+#ifdef CENTER_TT
+ ,TT_ESC
+#endif
+#ifdef STENO_ENABLE
+ ,PS_STNA = STN_A
+ ,PS_STNO = STN_O
+ ,PS_STNE = STN_E
+ ,PS_STNU = STN_U
+#else
+ ,LT_C    = LT (_NUMBER, KC_C)
+ ,LT_V    = LT (_FNCKEY, KC_V)
+ ,LT_N    = LT (_EDIT,   KC_N)
+ ,LT_M    = LT (_SYMBOL, KC_M)
+#endif
+};
+
+// modifier keys
+#define AT_B    ALT_T(KC_B)
+#define AT_DOWN ALT_T(KC_DOWN)
+#define CT_RGHT CTL_T(KC_RGHT)
+#define GT_C    GUI_T(KC_C)
+#define GT_UP   GUI_T(KC_UP)
+#define MT_E    MT   (MOD_LCTL | MOD_LALT, KC_E)
+#define ST_A    SFT_T(KC_A)
+#ifdef HOME_MODS
+#define HOME_H  GUI_T(KC_H)
+#define HOME_I  CTL_T(KC_I)
+#define HOME_E  ALT_T(KC_E)
+#define HOME_A  SFT_T(KC_A)
+#define HOME_T  SFT_T(KC_T)
+#define HOME_R  ALT_T(KC_R)
+#define HOME_S  CTL_T(KC_S)
+#define HOME_W  GUI_T(KC_W)
+#else
+#define HOME_H  KC_H
+#define HOME_I  KC_I
+#define HOME_E  KC_E
+#define HOME_A  KC_A
+#define HOME_T  KC_T
+#define HOME_R  KC_R
+#define HOME_S  KC_S
+#define HOME_W  KC_W
+#endif
+
+#define S_DOWN  S    (KC_DOWN)
+#define S_LEFT  S    (KC_LEFT)
+#define S_RGHT  S    (KC_RGHT)
+#define S_TAB   S    (KC_TAB)
+#define S_UP    S    (KC_UP)
+
+#include "tapdance.h"
+
+// keycodes
+#define ___x___ KC_TRNS
+#define ___fn__ KC_TRNS
+#ifdef _______
+#undef _______
+#endif
+#define _______ KC_NO
+
+#define COPY    LCTL(KC_C)
+#define CUT     LCTL(KC_X)
+#define EOT     LCTL(KC_D)
+#define NAK     LCTL(KC_U)
+#define PASTE   LCTL(KC_V)
+#define UNDO    LCTL(KC_Z)
+#define TMCOPY  LALT(LCTL(KC_C))
+#define TMPASTE LALT(LCTL(KC_V))
+#define LT_BSLS LT  (_MOUSE,  KC_BSLS)      // see process_record_user() for extended handling
+#define LT_BSPC LT  (_EDIT,   KC_BSPC)
+#define SP_LEFT LT  (_EDIT,   KC_LEFT)
+#define LT_ESC  LT  (_NUMBER, KC_ESC)
+#define LT_LEFT LT  (_SYMBOL, KC_LEFT)      // see process_record_user() for extended handling
+#define SP_BSPC LT  (_SYMBOL, KC_BSPC)      // see process_record_user() for extended handling
+#define LT_TAB  LT  (_FNCKEY, KC_TAB)
+#define LT_INS  LT  (_FNCKEY, KC_INS)
+#define ADJUST  MO  (_ADJUST)
+#define OS_ALT  OSM (MOD_LALT)
+#define OS_CTL  OSM (MOD_LCTL)
+#define OS_GUI  OSM (MOD_LGUI)
+#define OS_SFT  OSM (MOD_LSFT)
+
+#ifdef CENTER_TT
+#define CNTR_TL TT  (_TTFNCKEY)
+#define CNTR_TR     KC_CAPS
+#define CNTR_HL TT  (_TTCURSOR)
+#define CNTR_HR TT  (_TTMOUSE)
+#define CNTR_BL TT  (_TTNUMBER)
+#define CNTR_BR TT  (_TTREGEX)
+#else
+#define CNTR_TL OSM (MOD_LALT | MOD_LCTL)
+#define CNTR_TR OSM (MOD_LGUI | MOD_LCTL)
+#define CNTR_HL OSM (MOD_LALT | MOD_LSFT)
+#define CNTR_HR OSM (MOD_LGUI | MOD_LSFT)
+#define CNTR_BL TD  (_CAPS)
+#define CNTR_BR OSM (MOD_LSFT | MOD_LCTL)
+#endif
+
+#ifdef THUMB_0
+#define LT_EQL  LT  (_ADJUST, KC_EQL)
+#else
+#define LT_0    LT  (_ADJUST, KC_0)
+#endif
+
+// ........................................................ Default Alpha Layout
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+#include "hiea.h"
+#include "steno_layout.h"
+
+// ...................................................... Number / Function Keys
+
+#include "number_fkey_layout.h"
+
+// ......................................................... Symbol / Navigation
+
+#include "symbol_guifn_layout.h"
+
+// ............................................................... Toggle Layers
+
+#ifdef CENTER_TT
+#include "toggle_layout.h"
+#endif
+
+// ......................................................... Short Cuts / Adjust
+
+#include "chord_layout.h"
+
+};
+
+// ...................................................................... Sounds
+
+#include "sounds.h"
+
+// ........................................................... User Keycode Trap
+
+#include "keycode_functions.h"
+
+#define BASE_1  1
+#define BASE_2  2
+#define BASE_12 3
+static uint8_t base_n = 0;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+  switch (keycode) {
+    case BASE1:
+      if (record->event.pressed) {
+        base_n = base_n | BASE_1;
+        if (base_n == BASE_12) {
+          base_layer();
+        }
+      }
+      else {
+        base_n = base_n & ~BASE_1;
+      }
+      return false;
+    case BASE2:
+      if (record->event.pressed) {
+        base_n = base_n | BASE_2;
+        if (base_n == BASE_12) {
+          base_layer();
+        }
+      }
+      else {
+        base_n = base_n & ~BASE_2;
+      }
+      return false;
+    case AT_DOWN:
+#ifdef HOME_MODS
+    case HOME_E:
+    case HOME_R:
+#endif
+      tap_mods(record, KC_LALT);
+      break;
+    case CT_RGHT:
+#ifdef HOME_MODS
+    case HOME_H:
+    case HOME_W:
+#endif
+      tap_mods(record, KC_LGUI);
+      break;
+    case GT_UP:
+#ifdef HOME_MODS
+    case HOME_I:
+    case HOME_S:
+#endif
+      tap_mods(record, KC_LCTL);
+      break;
+#ifdef HOME_MODS
+    case HOME_A:
+    case HOME_T:
+      tap_mods(record, KC_LSFT);
+      break;
+#endif
+#ifdef CENTER_TT
+    case TT_ESC:
+      clear_tt();                           // exit TT layer
+      return false;
+#endif
+    case LT_ESC:
+#ifdef CENTER_TT
+      if (tt_keycode != 0) {
+        clear_tt();                         // exit TT layer
+        return false;
+      }
+#endif
+      tap_layer(record, _NUMBER);
+      break;
+    case LT_LEFT:
+    case SP_BSPC:
+      tap_layer(record, _SYMBOL);
+      // LT (_SYMBOL, KC_LEFT) left right combination layer
+      thumb_layer(record, RIGHT, 0, 0, _SYMBOL, _LSHIFT);
+      break;
+    case OS_ALT:
+      tap_mods(record, KC_LALT);
+      break;
+    case OS_CTL:
+      tap_mods(record, KC_LCTL);
+      break;
+    case OS_GUI:
+      tap_mods(record, KC_LGUI);
+      break;
+    case SM_CIRC:
+      // GUI_T(S(KC_6))
+      mt_shift(record, KC_LGUI, 0, KC_6);
+      break;
+    case SM_DLR:
+      // SFT_T(S(KC_4))
+      mt_shift(record, KC_LSFT, 0, KC_4);
+      break;
+    case SM_G:
+      // MT(MOD_LALT | MOD_LSFT, S(KC_G))
+      mt_shift(record, KC_LALT, KC_LSFT, KC_G);
+      break;
+    case SM_H:
+      // MT(MOD_LCTL | MOD_LSFT, S(KC_K))
+      mt_shift(record, KC_LCTL, KC_LSFT, KC_H);
+      break;
+    case SM_W:
+      // MT(MOD_LGUI | MOD_LSFT, S(KC_W))
+      mt_shift(record, KC_LGUI, KC_LSFT, KC_W);
+      break;
+    case SM_PERC:
+      // ALT_T(S(KC_5))
+      mt_shift(record, KC_LALT, 0, KC_5);
+      break;
+    case LT_BSLS:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, KC_BSLS) left right combination layer, see #define LT_BSLS
+      thumb_layer(record, LEFT, 0, 0, _MOUSE, _SYMBOL);
+      break;
+    case SL_LEFT:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, S(KC_LEFT)) left right combination layer
+      thumb_layer(record, RIGHT, SHIFT, KC_LEFT, _MOUSE, _LSHIFT);
+      break;
+    case SP_DEL:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, S(KC_LEFT)) left right combination layer
+      thumb_layer(record, RIGHT, NOSHIFT, KC_DEL, _MOUSE, _LSHIFT);
+      break;
+    case SL_TAB:
+      // LT (_FNCKEY, S(KC_TAB)) emulation
+      lt_shift(record, KC_TAB, _FNCKEY);
+      break;
+    case TD_ENT:
+      tap_layer(record, _RSHIFT);
+      // LT (_RSHIFT, KC_ENT) emulation, see tap dance enter
+      break;
+    case TD_SPC:
+      tap_layer(record, _LSHIFT);
+      // LT (_LSHIFT, KC_SPC) left right combination layer, see tap dance TD_SPC
+      thumb_layer(record, LEFT, 0, 0, _LSHIFT, _SYMBOL);
+      break;
+#ifdef CENTER_TT
+    case CNTR_TL:
+    case CNTR_TR:
+    case CNTR_HL:
+    case CNTR_HR:
+    case CNTR_BL:
+    case CNTR_BR:
+      if (tt_keycode != keycode && tt_keycode != 0) {
+        clear_tt();                         // return to base layer first if different TT layer selected
+      }
+      tt_keycode = keycode;
+      break;
+#endif
+// #ifdef STENO_ENABLE
+//     case PS_STNA:
+//       stn_layer(record, STN_A, _NUMBER);
+//       break;
+//     case PS_STNO:
+//       stn_layer(record, STN_O, _FNCKEY);
+//       break;
+//     case PS_STNE:
+//       stn_layer(record, STN_E, _EDIT);
+//       break;
+//     case PS_STNU:
+//       stn_layer(record, STN_U, _SYMBOL);
+//       break;
+// #endif
+    case PLOVER:
+      steno(record);
+      return false;
+  }
+  return true;
+}
+
+#include "init.h"
diff --git a/keyboards/planck/keymaps/hiea/qwerty.h b/keyboards/planck/keymaps/hiea/qwerty.h
new file mode 100644 (file)
index 0000000..d11d047
--- /dev/null
@@ -0,0 +1,64 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ...................................................................... Qwerty
+#ifdef QWERTY
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   E  |   R  |   T  | ^Alt | ^GUI |   Y  |   U  |   I  |   O  |   P  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   S  |   D  |   F  |   G  | ↑Alt | ↑GUI |   H  |   J  |   K  |   L  |   ;  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   V  |   B  | Caps |^Shift|   N  |   M  |   ,  |   .  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    CNTR_TL, CNTR_TR, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P   },
+    {KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    CNTR_HL, CNTR_HR, KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN},
+    {KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    CNTR_BL, CNTR_BR, KC_N,    KC_M,    KC_COMM, KC_DOT,  TD_QUOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)},
+    {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), KC_SCLN},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), KC_COMM, KC_DOT,  TD_QUOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   E  |   R  |   T  | ^Alt | ^GUI |   Y  |   U  |   I  |   O  |   P  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   S  |   D  |   F  |   G  | ↑Alt | ↑GUI |   H  |   J  |   K  |   L  |   :  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   V  |   B  | Caps |^Shift|   N  |   M  |   /  |   ?  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   -  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)},
+    {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), TD_COLN},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), KC_SLSH, KC_QUES, TD_DQOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_MINS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   E  |   R  |   T  | ^Alt | ^GUI |   Y  |   U  |   I  |   O  |   P  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   S  |   D  |   F  |   G  | ↑Alt | ↑GUI |   H  |   J  |   K  |   L  |   :  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   V  |   B  | Caps |^Shift|   N  |   M  |   ~  |   `  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   _  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)},
+    {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), TD_COLN},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), TD_TILD, TD_GRV,  TD_DQOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_UNDS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
diff --git a/keyboards/planck/keymaps/hiea/readme.md b/keyboards/planck/keymaps/hiea/readme.md
new file mode 100644 (file)
index 0000000..58f73e3
--- /dev/null
@@ -0,0 +1,10 @@
+# The sdothum extended Default Planck Layout
+
+- Colemak-DH layout layer with shift/tab key overlays
+- Number and symbol/function key layer
+- Hexadecimal keypad layer
+- Navigation keypad layer
+- Dynamic macro layer
+- Autocompletion tap key pairs (),[],{}
+- Normalized enter and esc key position across keyboard layers
+- Extensive use of tap keys
diff --git a/keyboards/planck/keymaps/hiea/rules.mk b/keyboards/planck/keymaps/hiea/rules.mk
new file mode 100644 (file)
index 0000000..40f1538
--- /dev/null
@@ -0,0 +1,26 @@
+# 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  = no   # 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
+BACKLIGHT_ENABLE = no   # enable keyboard backlight functionality
+MIDI_ENABLE      = no   # MIDI controls
+AUDIO_ENABLE     = no   # audio output on port C6
+UNICODE_ENABLE   = no   # unicode
+BLUETOOTH_ENABLE = no   # enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE  = no   # enable WS2812 RGB underlight, do not enable this with audio at the same time.
+STENO_ENABLE     = yes # enable TX Bolt protocol, requires VIRTSER and may not work with mouse keys
+
+# do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no   # breathing sleep LED during USB suspend
+
+TAP_DANCE_ENABLE = yes  # enable double tap completion of (),[],{}
+
+ifndef QUANTUM_DIR
+include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/hieax/common/chord_layout.h b/keyboards/planck/keymaps/hieax/common/chord_layout.h
new file mode 100644 (file)
index 0000000..2c785d5
--- /dev/null
@@ -0,0 +1,41 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// .................................................................. Short Cuts
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      | Copy | Paste|      |      |      |      |      |      |      |      |
+  // |--------------------------------------------------------------+------+------+------|
+  // | Undo |  Cut | Copy | Paste|      |      |      |      | PRIV |  PUB |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |  Nak |  Eot |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |  f() |      |      |      |      |      |
+  // |      |      |      |      |      |      |      |  f() |      |      |      |      | see _PLOVER
+  // '-----------------------------------------------------------------------------------'
+
+  [_EDIT] = {
+    {_______, _______, TMCOPY,  TMPASTE, _______, _______, _______, _______, _______, _______, _______, _______},
+    {UNDO,    CUT,     COPY,    PASTE,   _______, _______, _______, _______, TD_PRIV, TD_SEND, _______, _______},
+    {_______, _______, NAK,     EOT,     _______, _______, _______, _______, _______, _______, _______, _______},
+    {_______, _______, _______, _______, _______, _______, ___fn__, ___fn__, _______, _______, _______, _______},
+  },
+
+// ................................................................ Adjust Layer
+
+  // ,-----------------------------------------------------------------------------------.
+  // |Plover|      |      |      |      |      |      |      |      |      |      |      |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |Aud on|      |      |      |      |      |      |      |      |      |      |      |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // | Reset|      |      |      |      |      |      |      |      |      |      |      |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |      |      |      |  f() |      |      |      |      |  f() |      |      |      |
+  // `-----------------------------------------------------------------------------------'
+
+  [_ADJUST] = {
+    {PLOVER,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {AU_ON,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {_______, _______, _______, ___fn__, _______, _______, _______, _______, ___fn__, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/hieax/common/init.h b/keyboards/planck/keymaps/hieax/common/init.h
new file mode 100644 (file)
index 0000000..6366a19
--- /dev/null
@@ -0,0 +1,56 @@
+
+// ....................................................................... Audio
+
+void matrix_init_user(void)
+{
+#ifdef STENO_ENABLE
+  steno_set_mode(STENO_MODE_BOLT);          // or STENO_MODE_GEMINI
+#endif
+#ifdef AUDIO_ENABLE
+  startup_user();
+#endif
+}
+
+#ifdef AUDIO_ENABLE
+#ifdef BACKLIGHT_ENABLE
+void led_set_user(uint8_t usb_led)
+{
+  static uint8_t old_usb_led = 0;
+  _delay_ms(10);                            // gets rid of tick
+  if (!is_playing_notes()) {
+    if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK))) {
+      // if capslock LED is turning on
+      PLAY_SONG(song_caps_on);
+    }
+    else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK))) {
+      // if capslock LED is turning off
+      PLAY_SONG(song_caps_off);
+    }
+  }
+  old_usb_led = usb_led;
+}
+#endif
+
+void startup_user(void)
+{
+  _delay_ms(20);                            // gets rid of tick
+  PLAY_SONG(song_startup);
+}
+
+void shutdown_user(void)
+{
+  PLAY_SONG(song_goodbye);
+  _delay_ms(150);
+  stop_all_notes();
+}
+
+void music_on_user(void)
+{
+  music_scale_user();
+}
+
+void music_scale_user(void)
+{
+  PLAY_SONG(music_scale);
+}
+#endif
diff --git a/keyboards/planck/keymaps/hieax/common/keycode_functions.h b/keyboards/planck/keymaps/hieax/common/keycode_functions.h
new file mode 100644 (file)
index 0000000..a26b562
--- /dev/null
@@ -0,0 +1,732 @@
+
+// .......................................................... Keycode Primitives
+
+// register simple key press
+void tap_key(uint16_t keycode)
+{
+  register_code  (keycode);
+  unregister_code(keycode);
+}
+
+void shift_key(uint16_t keycode)
+{
+  register_code  (KC_LSFT);
+  tap_key        (keycode);
+  unregister_code(KC_LSFT);
+}
+
+#define SHIFT   1
+#define NOSHIFT 0
+
+static uint16_t key_timer = 0;
+
+// key press for thumb_layer() and lt_shift() macros
+bool key_press(uint8_t shift, uint16_t keycode)
+{
+  if (keycode) {
+    if (timer_elapsed(key_timer) < TAPPING_TERM) {
+      if (shift) {
+        shift_key(keycode);
+      }
+      else {
+        tap_key(keycode);
+      }
+      return true;
+    }
+  }
+  return false;
+}
+
+// ALT_T, CTL_T, GUI_T, SFT_T for shifted keycodes
+void mt_shift(keyrecord_t *record, uint16_t modifier, uint16_t modifier2, uint16_t keycode)
+{
+  if (record->event.pressed) {
+    key_timer = timer_read();
+    register_code(modifier);
+    if (modifier2) {
+      register_code(modifier2);
+    }
+  }
+  else {
+    unregister_code(modifier);
+    if (modifier2) {
+      unregister_code(modifier2);
+    }
+    if (timer_elapsed(key_timer) < TAPPING_TERM) {
+      shift_key(keycode);
+    }
+    key_timer = 0;
+  }
+}
+
+// ................................................................... Mod Masks
+
+// tap dance persistant mods, see process_record_user()
+// keyboard_report->mods (?) appears to be cleared by tap dance
+static uint8_t mods = 0;
+
+void tap_mods(keyrecord_t *record, uint16_t keycode)
+{
+  if (record->event.pressed) {
+    mods |= MOD_BIT(keycode);
+  }
+  else {
+    mods &= ~(MOD_BIT(keycode));
+  }
+}
+
+// (un)register modifiers
+void modifier(void (*f)(uint8_t))
+{
+  if (mods & MOD_BIT(KC_LCTL)) {
+    (*f)(KC_LCTL);
+  }
+  if (mods & MOD_BIT(KC_LGUI)) {
+    (*f)(KC_LGUI);
+  }
+  if (mods & MOD_BIT(KC_LALT)) {
+    (*f)(KC_LALT);
+  }
+  if (mods & MOD_BIT(KC_LSFT)) {
+    (*f)(KC_LSFT);
+  }
+  if (mods & MOD_BIT(KC_RSFT)) {
+    (*f)(KC_RSFT);
+  }
+}
+
+// .................................................... Triple Dance Shift/Layer
+
+static uint8_t dt_shift = 0;
+
+void double_shift(uint16_t keycode, uint8_t layer)
+{
+  tap_key (keycode);
+  if (DT_SHIFT) {
+    // set_oneshot_mods(MOD_LSFT);
+    // layer_on(layer);
+    layer_on         (_SHIFT);
+    set_oneshot_layer(_SHIFT, ONESHOT_START);
+    dt_shift = 1;
+  }
+  else {
+    layer_on(layer);
+  }
+}
+
+// tap dance LT (LAYER, KEY) emulation with <KEY><DOWN> -> <KEY><SHIFT> and auto-repeat extensions!
+void tap_shift(qk_tap_dance_state_t *state, uint16_t keycode, uint8_t layer)
+{
+  // double tap plus down
+  if (state->count > 2) {
+    // double enter shift
+    if (keycode == KC_ENT) {
+      tap_key     (keycode);
+      double_shift(keycode, layer);
+    }
+    // repeating keycode
+    else {
+      register_code(keycode);
+    }
+  }
+  // tap plus down (or double tap): keycode (one shot) shift
+  else if (state->count > 1) {
+    double_shift(keycode, layer);
+  }
+  // down: shift
+  else if (state->pressed) {
+    layer_on(layer);
+  }
+  // tap: keycode
+  else {
+    modifier(register_code);
+    tap_key (keycode);
+    modifier(unregister_code);
+  }
+}
+
+void tap_reset(uint16_t keycode, uint8_t layer)
+{
+  unregister_code(keycode);
+  if (DT_SHIFT && dt_shift) {
+    clear_oneshot_layer_state(ONESHOT_PRESSED);
+    dt_shift = 0;
+  }
+  else {
+    layer_off(layer);
+  }
+}
+
+// augment pseudo LT (_RSHIFT, KC_ENT) handling below for rapid <ENTER><SHIFT> sequences
+void enter(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_shift(state, KC_ENT, _RSHIFT);
+}
+
+void enter_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_reset(KC_ENT, _RSHIFT);
+}
+
+// augment pseudo LT (_LSHIFT, KC_SPC) handling below for rapid <SPACE><SHIFT> sequences
+void space(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_shift(state, KC_SPC, _LSHIFT);
+}
+
+void space_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_reset(KC_SPC, _LSHIFT);
+}
+
+// ......................................................... Triple Dance Insert
+
+void double_max(uint8_t count, uint8_t shift, uint16_t keycode)
+{
+  if (shift) {
+    shift_key(keycode);
+    if (count > 1) {
+      shift_key(keycode);
+    }
+  }
+  else {
+    tap_key(keycode);
+    if (count > 1) {
+      tap_key(keycode);
+    }
+  }
+}
+
+void colon(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key  (KC_SPC);
+    shift_key(KC_SCLN);
+    shift_key(KC_SCLN);
+    tap_key  (KC_SPC);
+  }
+  else {
+    double_max(state->count, SHIFT, KC_SCLN);
+  }
+  reset_tap_dance(state);
+}
+
+void eql(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key(KC_SPC);
+    tap_key(KC_SLSH);
+    tap_key(KC_EQL);
+    tap_key(KC_SPC);
+  }
+  else {
+    double_max(state->count, NOSHIFT, KC_EQL);
+  }
+  reset_tap_dance(state);
+}
+
+void greater(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key  (KC_SPC);
+    tap_key  (KC_MINS);
+    shift_key(KC_DOT);
+    tap_key  (KC_SPC);
+  }
+  else {
+    double_max(state->count, SHIFT, KC_DOT);
+  }
+  reset_tap_dance(state);
+}
+
+void lesser(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key  (KC_SPC);
+    shift_key(KC_COMM);
+    tap_key  (KC_MINS);
+    tap_key  (KC_SPC);
+  }
+  else {
+    double_max(state->count, SHIFT, KC_COMM);
+  }
+  reset_tap_dance(state);
+}
+
+void tilde(qk_tap_dance_state_t *state, void *user_data)
+{
+  // double tap plus down: repeating keycode
+  if (state->count > 2) {
+    register_code(KC_LSFT);
+    register_code(KC_GRV);
+  }
+  // tap: keycode
+  else {
+    shift_key(KC_GRV);
+    // double tap: unix home directory
+    if (state->count > 1) {
+      tap_key(KC_SLSH);
+    }
+  }
+}
+
+void tilde_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_GRV);
+  unregister_code(KC_LSFT);
+}
+
+// ............................................................. Tap Dance Pairs
+
+// tap dance shift rules
+#define S_NEVER  0
+#define S_SINGLE 1
+#define S_DOUBLE 2
+#define S_ALWAYS S_SINGLE | S_DOUBLE
+
+void symbol_pair(uint8_t shift, uint16_t left, uint16_t right)
+{
+  if (shift & S_DOUBLE) {
+    shift_key(left);
+    shift_key(right);
+  }
+  else {
+    tap_key(left);
+    tap_key(right);
+  }
+}
+
+#define CLOSE 1
+
+// tap dance symbol pairs
+void tap_pair(qk_tap_dance_state_t *state, uint8_t shift, uint16_t left, uint16_t right, uint16_t modifier, uint8_t close)
+{
+  // triple tap: left right with cursor between symbol pair a la vim :-)
+  if (state->count > 2) {
+    symbol_pair(shift, left, right);
+    tap_key    (KC_LEFT);
+  }
+  // double tap: left right
+  else if (state->count > 1) {
+    symbol_pair(shift, left, right);
+  }
+  // down: modifier
+  else if (state->pressed) {
+    if (modifier) {
+      register_code(modifier);
+    }
+  }
+  // tap: left (close: right)
+  else {
+    if (shift & S_SINGLE) {
+      shift_key(close ? right : left);
+    }
+    else {
+      tap_key(close ? right : left);
+    }
+  }
+  if (!modifier) {
+    reset_tap_dance(state);
+  }
+}
+
+void doublequote(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_QUOT, KC_QUOT, 0, 0);
+}
+
+void grave(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_GRV, KC_GRV, 0, 0);
+}
+
+void lbrace(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, 0);
+}
+
+void lcurly(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, 0);
+}
+
+void lparen(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_9, KC_0, KC_LCTL, 0);
+}
+
+void lparen_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_LCTL);
+}
+
+void quote(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_QUOT, KC_QUOT, 0, 0);
+}
+
+void rangle(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_COMM, KC_DOT, 0, CLOSE);
+}
+
+void rbrace(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, CLOSE);
+}
+
+void rcurly(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, CLOSE);
+}
+
+void rparen(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_9, KC_0, 0, CLOSE);
+}
+
+void rparen_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_LCTL);
+}
+
+// ............................................................ Tap Dance Insert
+
+void comma(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_key(KC_COMM);
+  if (state->count > 1) {
+    tap_key(KC_SPC);
+  }
+  reset_tap_dance(state);
+}
+
+void dot(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+    shift_key(KC_COLN);
+  }
+  else {
+    tap_key(KC_DOT);
+  }
+  reset_tap_dance(state);
+}
+
+// compile time macro string, see functions/hardware planck script
+void private(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+#ifdef PRIVATE_STRING
+#include "private_string.h"
+#endif
+  }
+  reset_tap_dance(state);
+}
+
+// config.h defined string
+void send(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+    SEND_STRING(PUBLIC_STRING);
+  }
+  reset_tap_dance(state);
+}
+
+// .......................................................... Tap Dance One Shot
+
+void caps(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+    tap_key(KC_CAPS);
+  }
+  else {
+    set_oneshot_mods(MOD_LSFT);
+    register_code   (KC_LSFT);              // on hold down
+  }
+}
+
+void caps_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_LSFT);
+}
+
+// ................................................................... Tap Dance
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [_CAPS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, caps, caps_reset)
+ ,[_COLN] = ACTION_TAP_DANCE_FN         (colon)
+ ,[_COMM] = ACTION_TAP_DANCE_FN         (comma)
+ ,[_DOT]  = ACTION_TAP_DANCE_FN         (dot)
+ ,[_DQOT] = ACTION_TAP_DANCE_FN         (doublequote)
+ ,[_ENT]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, enter, enter_reset)
+ ,[_EQL]  = ACTION_TAP_DANCE_FN         (eql)
+ ,[_GRV]  = ACTION_TAP_DANCE_FN         (grave)
+ ,[_GT]   = ACTION_TAP_DANCE_FN         (greater)
+ ,[_LBRC] = ACTION_TAP_DANCE_FN         (lbrace)
+ ,[_LCBR] = ACTION_TAP_DANCE_FN         (lcurly)
+ ,[_LPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lparen, lparen_reset)
+ ,[_LT]   = ACTION_TAP_DANCE_FN         (lesser)
+ ,[_PRIV] = ACTION_TAP_DANCE_FN         (private)
+ ,[_QUOT] = ACTION_TAP_DANCE_FN         (quote)
+ ,[_RBRC] = ACTION_TAP_DANCE_FN         (rbrace)
+ ,[_RCBR] = ACTION_TAP_DANCE_FN         (rcurly)
+ ,[_RNGL] = ACTION_TAP_DANCE_FN         (rangle)
+ ,[_RPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rparen, rparen_reset)
+ ,[_SEND] = ACTION_TAP_DANCE_FN         (send)
+ ,[_SPC]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, space, space_reset)
+ ,[_TILD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tilde, tilde_reset)
+};
+
+// .............................................................. Dynamic Layers
+
+#define        LEFT    1
+#define        RIGHT   2
+static uint8_t thumb = 0;
+
+// LEFT (KC_SPC, S(KC_BSLS)), RIGHT (KC_LEFT, S(KC_LEFT)) opposite thumb combinations, see process_record_user()
+// up,   up   -> _BASE
+// up,   down -> _SYMBOL
+// down, up   -> _NUMBER
+// down, down -> _MOUSE                     // see layer keycodes that raise mouse layer
+#define THUMBS_DOWN _MOUSE                  // layer
+
+static uint8_t overlayer = 0;
+
+// left right thumb layer combinations
+void thumb_layer(keyrecord_t *record, uint8_t side, uint8_t shift, uint16_t keycode, uint8_t thumb_dn_layer, uint8_t thumb_up_layer)
+{
+  if (record->event.pressed) {
+    // layer_on via tap_layer(), see process_record_user()
+    key_timer = timer_read();
+    thumb     = thumb | side;
+  }
+  else {
+    layer_off(thumb_dn_layer);
+    // opposite thumb_layer() thumb may have switched effective layer!
+    if (overlayer) {
+      layer_off(overlayer);
+      overlayer = 0;
+    }
+    if (!key_press(shift, keycode)) {
+      layer_off(THUMBS_DOWN);               // both thumbs needed
+      // opposite thumb down? see left right combination layer table above
+      if (thumb & (side == LEFT ? RIGHT : LEFT)) {
+        layer_on(thumb_up_layer);
+        overlayer = thumb_up_layer;
+      }
+    }
+    clear_mods();
+    thumb     = thumb & ~side;
+    key_timer = 0;
+  }
+}
+
+// #ifdef STENO_ENABLE
+// // LT for steno keycode
+// void stn_layer(keyrecord_t *record, uint16_t keycode, uint8_t layer)
+// {
+//   if (record->event.pressed) {
+//     key_timer = timer_read();
+//     if (keycode) {
+//       process_steno(keycode, record);
+//     }
+//     layer_on(layer);
+//   }
+//   else {
+//     layer_off(layer);
+//     if (keycode) {
+//       if (timer_elapsed(key_timer) < TAPPING_TERM) {
+//         process_steno(keycode, record);
+//       }
+//       else {
+//         // clear pressed state (request push of updated) process_steno.c and .h
+//         // steno_clear_state();
+//       }
+//     }
+//     key_timer = 0;
+//   }
+// }
+// #endif
+
+// LT macro for nested LT layers
+void lt(keyrecord_t *record, uint8_t shift, uint16_t keycode, uint16_t modifier, uint8_t layer)
+{
+  if (record->event.pressed) {
+    key_timer = timer_read();
+    if (modifier) {
+      register_code(modifier);
+    }
+    layer_on(layer);
+  }
+  else {
+    if (modifier) {
+      unregister_code(modifier);
+    }
+    layer_off(layer);
+    // for shifted keycodes, hence, LT_SHIFT
+    key_press(shift, keycode);
+    clear_mods();
+    key_timer = 0;
+  }
+}
+
+// LT for S(keycode)
+void lt_shift(keyrecord_t *record, uint16_t keycode, uint8_t layer)
+{
+  lt(record, SHIFT, keycode, 0, layer);
+}
+
+// set layer asap to overcome macro latency errors, notably tap dance and LT usage
+// this routine inexplicably (?) sets layer_on() faster than can be done in thumb_layer()
+void tap_layer(keyrecord_t *record, uint8_t layer)
+{
+  if (record->event.pressed) {
+    layer_on(layer);
+  }
+  else {
+    layer_off(layer);
+  }
+}
+
+// ..................................................................... Keymaps
+
+// void persistant_default_layer_set(uint16_t default_layer)
+// {
+//   eeconfig_update_default_layer(default_layer);
+//   default_layer_set            (default_layer);
+// }
+
+void clear_layers(void)
+{
+  uint8_t layer;
+  for (layer = 0; layer < _END_LAYERS; layer++) {
+    layer_off(layer);
+  }
+}
+
+#ifdef HOME_MODS
+// home row layer/shift key state, see tap_mods() and keymap.c
+#define LSYMBOL MOD_BIT(KC_LSFT)
+#define RSYMBOL MOD_BIT(KC_RSFT)
+
+void home_state(void) {
+  // if only the shift key, raise the opposite hand symbol layer
+  if (mods == LSYMBOL) {
+    layer_on(_LSYMBOL);
+  }
+  else if (mods == RSYMBOL) {
+    layer_on(_RSYMBOL);
+  }
+  // or combine modifiers
+  else if (mods & LSYMBOL) {
+    register_code(KC_LSFT);
+  }
+  else if (mods & RSYMBOL) {
+    register_code(KC_RSFT);
+  }
+}
+
+// home row layer/shift
+void symbol_shift(keyrecord_t *record, uint16_t keycode)
+{
+  if (keycode) {
+    if (record->event.pressed) {
+      key_timer = timer_read();
+      home_state();
+    }
+    else {
+      // clear layer/shift state
+      if (keycode == KC_A) {
+        layer_off(_LSYMBOL);
+        unregister_code(KC_LSFT);
+      }
+      else if (keycode == KC_T) {
+        layer_off(_RSYMBOL);
+        unregister_code(KC_RSFT);
+      }
+      // no other modifier enabled, issue keycode
+      if (~mods) {
+        key_press(NOSHIFT, keycode);
+      }
+      key_timer = 0;
+    }
+  }
+  else {
+    // a non-shift modifier disables symbol layer
+    layer_off(_LSYMBOL);
+    layer_off(_RSYMBOL);
+    // update home layer/shift state
+    home_state();
+  }
+}
+#endif
+
+#ifdef CENTER_TT
+static uint16_t tt_keycode = 0;             // current TT keycode
+
+void clear_tt(void)
+{
+  if (tt_keycode == KC_CAPS) {
+    tap_key(KC_CAPS);                       // clear capslock
+  }
+  tt_keycode = 0;
+  clear_layers();
+  set_single_persistent_default_layer(_BASE);
+}
+#endif
+
+// txbolt plover run state
+static uint8_t plover = 0;
+
+void toggle_plover(uint8_t state)
+{
+  if (plover != state) {
+#ifdef PLOVER_KEYBIND
+#include "plover_keybind.h"
+#endif
+    plover = state;
+  }
+}
+
+void base_layer(void)
+{
+#ifdef AUDIO_ENABLE
+  if (plover) {
+    PLAY_SONG(song_plover_gb);
+  }
+  else {
+    PLAY_SONG(song_qwerty);
+  }
+#endif
+  clear_layers();
+  set_single_persistent_default_layer(_BASE);
+  toggle_plover(0);
+}
+
+void steno(keyrecord_t *record)
+{
+  if (record->event.pressed) {
+#ifdef AUDIO_ENABLE
+    PLAY_SONG(song_plover);
+#endif
+    clear_layers();
+    layer_on(_PLOVER);
+    if (!eeconfig_is_enabled()) {
+      eeconfig_init();
+    }
+    keymap_config.raw  = eeconfig_read_keymap();
+    keymap_config.nkro = 1;
+    eeconfig_update_keymap(keymap_config.raw);
+    if (!plover) {
+      toggle_plover(1);
+    }
+  }
+}
+
+void steno_exit(keyrecord_t *record)
+{
+  if (record->event.pressed) {
+    base_layer();
+    toggle_plover(0);
+  }
+}
diff --git a/keyboards/planck/keymaps/hieax/common/number_fkey_layout.h b/keyboards/planck/keymaps/hieax/common/number_fkey_layout.h
new file mode 100644 (file)
index 0000000..321482b
--- /dev/null
@@ -0,0 +1,46 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ......................................................... Number Keypad Layer
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |   F  |   E  |   D  |      |      |      |   /  |   7  |   8  |   9  |   *  |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI |   C  |   B  |   A  |      |      |      |   .  |   4  |   5  |   6  |   -  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   G  |   \  |      |      |      |   ,  |   1  |   2  |   3  |   +  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   0  |   =  |      |      |      |
+  // |      |      |      |  f() |      |      |      |   =  |   0  |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_NUMBER] = {
+    {_______, KC_F,    MT_E,    KC_D,    _______, ___x___, ___x___, KC_SLSH, KC_7,    KC_8,    KC_9,    KC_ASTR},
+    {OS_GUI,  GT_C,    AT_B,    ST_A,    _______, ___x___, ___x___, TD_DOT,  KC_4,    KC_5,    KC_6,    KC_MINS},
+    {_______, KC_HASH, SM_G,    KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1,    KC_2,    KC_3,    KC_PLUS},
+#ifdef THUMB_0
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0,    LT_EQL,  ___x___, ___x___, ___x___},
+#else
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL,  LT_0,    ___x___, ___x___, ___x___},
+#endif
+  },
+
+// ............ .................................................. Function Keys
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      |  F7  |  F8  |  F9  |  F12 |
+  // |-----------------------------------------------------------------------------------|
+  // | Ctrl |  GUI |  Alt | Shift|      |      |      |      |  F4  |  F5  |  F6  |  F11 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |  F1  |  F2  |  F3  |  F10 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |  f() |      |   +  |      |      |      |      |
+  // |      |      |      |      |  f() |      |      |   +  |      |      |      |      | see _PLOVER
+  // '-----------------------------------------------------------------------------------'
+
+  [_FNCKEY] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7,   KC_F8,   KC_F9,   KC_F12 },
+    {OS_GUI,  OS_CTL,  OS_ALT,  OS_SFT,  _______, ___x___, ___x___, _______, KC_F4,   KC_F5,   KC_F6,   KC_F11 },
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1,   KC_F2,   KC_F3,   KC_F10 },
+    {_______, _______, _______, _______, ___fn__, ___fn__, _______, KC_PLUS, _______, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/hieax/common/plover_keybind.h b/keyboards/planck/keymaps/hieax/common/plover_keybind.h
new file mode 100644 (file)
index 0000000..cb4ef92
--- /dev/null
@@ -0,0 +1,9 @@
+
+// simple window manager specific plover keybind hook
+
+// toggle plover application, see herbstluftwm/config/appbinds
+register_code  (KC_LGUI);
+register_code  (KC_LCTL);
+tap_key        (KC_EQL);
+unregister_code(KC_LCTL);
+unregister_code(KC_LGUI);
diff --git a/keyboards/planck/keymaps/hieax/common/sounds.h b/keyboards/planck/keymaps/hieax/common/sounds.h
new file mode 100644 (file)
index 0000000..1bfc7a6
--- /dev/null
@@ -0,0 +1,14 @@
+
+// ................................................................ Audio Sounds
+
+#ifdef AUDIO_ENABLE
+float song_startup  [][2] = SONG(STARTUP_SOUND);
+float song_colemak  [][2] = SONG(COLEMAK_SOUND);
+float song_qwerty   [][2] = SONG(QWERTY_SOUND);
+float song_plover   [][2] = SONG(PLOVER_SOUND);
+float song_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float song_caps_on  [][2] = SONG(CAPS_LOCK_ON_SOUND);
+float song_caps_off [][2] = SONG(CAPS_LOCK_OFF_SOUND);
+float music_scale   [][2] = SONG(MUSIC_SCALE_SOUND);
+float song_goodbye  [][2] = SONG(GOODBYE_SOUND);
+#endif
diff --git a/keyboards/planck/keymaps/hieax/common/steno_layout.h b/keyboards/planck/keymaps/hieax/common/steno_layout.h
new file mode 100644 (file)
index 0000000..ab4a6fe
--- /dev/null
@@ -0,0 +1,39 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ...................................................................... Plover
+#ifdef STENO_ENABLE
+  // ,-----------------------------------------------------------------------------------.
+  // |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // | Base |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // | Base |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |                           |   A  |   O  |   E  |   U  |                           |
+  // `-----------------------------------------------------------------------------------'
+
+  [_PLOVER] = {
+    {STN_N1,  STN_N2,  STN_N3,  STN_N4,  STN_N5,  STN_N6,  STN_N7,  STN_N8,  STN_N9,  STN_NA,  STN_NB,  STN_NC },
+    {BASE1,   STN_S1,  STN_TL,  STN_PL,  STN_HL,  STN_ST1, STN_ST3, STN_FR,  STN_PR,  STN_LR,  STN_TR,  STN_DR },
+    {BASE2,   STN_S2,  STN_KL,  STN_WL,  STN_RL,  STN_ST2, STN_ST4, STN_RR,  STN_BR,  STN_GR,  STN_SR,  STN_ZR },
+    {_______, _______, _______, PS_STNA, PS_STNO, _______, _______, PS_STNE, PS_STNU, _______, _______, _______},
+  },
+#else
+  // ,-----------------------------------------------------------------------------------.
+  // |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // | Base |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // | Base |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |                           |   A  |   O  |   E  |   U  |                           |
+  // `-----------------------------------------------------------------------------------'
+
+  [_PLOVER] = {
+    {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
+    {BASE1,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC},
+    {BASE2,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+    {_______, _______, _______, LT_C,    LT_V,    _______, _______, LT_N,    LT_M,    _______, _______, _______},
+  },
+#endif
diff --git a/keyboards/planck/keymaps/hieax/common/symbol_guifn_layout.h b/keyboards/planck/keymaps/hieax/common/symbol_guifn_layout.h
new file mode 100644 (file)
index 0000000..677e464
--- /dev/null
@@ -0,0 +1,40 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ..................................................... Symbol Navigation Layer
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |   ~  |   *  |   &  |      |      |      |      | Home |  Up  |  End | PgUp |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI |   ^  |   %  |   $  |      |      |      |      | Left | Down | Right| PgDn |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   @  |   !  |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |                           |Adjust|   \  |      |  f() |                           |
+  // '-----------------------------------------------------------------------------------'
+
+  [_SYMBOL] = {
+    {_______, KC_TILD, KC_ASTR, KC_AMPR, _______, ___x___, ___x___, _______, KC_HOME, KC_UP,   KC_END,  KC_PGUP},
+    {OS_GUI,  SM_CIRC, SM_PERC, SM_DLR,  _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN},
+    {_______, KC_HASH, KC_AT,   KC_EXLM, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {___x___, ___x___, ___x___, ADJUST,  LT_BSLS, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___},
+  },
+
+// ............................................................... Mouse Actions
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      | Left |  Up  | Right|  Up  |
+  // |-----------------------------------------------------------------------------------|
+  // |      | Btn3 | Btn2 | Btn1 |      |      |      |      | Left | Down | Right| Down |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |                           |      |  f() |      |  f() |                           |
+  // '-----------------------------------------------------------------------------------'
+
+  [_MOUSE] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U},
+    {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D},
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {_______, _______, _______, _______, ___fn__, _______, _______, _______, ___fn__, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/hieax/common/tapdance.h b/keyboards/planck/keymaps/hieax/common/tapdance.h
new file mode 100644 (file)
index 0000000..d778286
--- /dev/null
@@ -0,0 +1,49 @@
+
+// tap dance keys
+enum tap_dance {
+  _CAPS = 0
+ ,_COLN
+ ,_COMM
+ ,_DOT
+ ,_DQOT
+ ,_ENT
+ ,_EQL
+ ,_GRV
+ ,_GT
+ ,_LBRC
+ ,_LCBR
+ ,_LPRN
+ ,_LT
+ ,_PRIV
+ ,_QUOT
+ ,_RBRC
+ ,_RCBR
+ ,_RNGL
+ ,_RPRN
+ ,_SEND
+ ,_SPC
+ ,_TILD
+};
+
+#define TD_CAPS TD(_CAPS)
+#define TD_COLN TD(_COLN)
+#define TD_COMM TD(_COMM)
+#define TD_DOT  TD(_DOT)
+#define TD_DQOT TD(_DQOT)
+#define TD_ENT  TD(_ENT)
+#define TD_EQL  TD(_EQL)
+#define TD_GRV  TD(_GRV)
+#define TD_GT   TD(_GT)
+#define TD_LBRC TD(_LBRC)
+#define TD_LCBR TD(_LCBR)
+#define TD_LPRN TD(_LPRN)
+#define TD_LT   TD(_LT)
+#define TD_PRIV TD(_PRIV)                   // compile time macro string, provided in private_string.h
+#define TD_QUOT TD(_QUOT)
+#define TD_RBRC TD(_RBRC)
+#define TD_RCBR TD(_RCBR)
+#define TD_RNGL TD(_RNGL)
+#define TD_RPRN TD(_RPRN)
+#define TD_SEND TD(_SEND)                   // config.h defined macro string
+#define TD_SPC  TD(_SPC)                    // see process_record_user() for extended handling of Spc
+#define TD_TILD TD(_TILD)
diff --git a/keyboards/planck/keymaps/hieax/common/toggle_layout.h b/keyboards/planck/keymaps/hieax/common/toggle_layout.h
new file mode 100644 (file)
index 0000000..ea4ead5
--- /dev/null
@@ -0,0 +1,102 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ......................................................... Number Keypad Layer
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |   F  |   E  |   D  |      |      |      |   /  |   7  |   8  |   9  |   *  |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI |   C  |   B  |   A  |      |      |      |   .  |   4  |   5  |   6  |   -  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   G  |   \  |      |      |      |   ,  |   1  |   2  |   3  |   +  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() | Space|      |      |   0  |   =  |      |      |      |
+  // |      |      |      |  f() | Space|      |      |   =  |   0  |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTNUMBER] = {
+    {_______, KC_F,    MT_E,    KC_D,    _______, ___x___, ___x___, KC_SLSH, KC_7,    KC_8,    KC_9,    KC_ASTR},
+    {OS_GUI,  GT_C,    AT_B,    ST_A,    _______, ___x___, ___x___, TD_DOT,  KC_4,    KC_5,    KC_6,    KC_MINS},
+    {_______, KC_HASH, SM_G,    KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1,    KC_2,    KC_3,    KC_PLUS},
+#ifdef THUMB_0
+    {_______, _______, _______, TT_ESC,  KC_SPC,  _______, _______, KC_0,    LT_EQL,  _______, _______, _______},
+#else
+    {_______, _______, _______, TT_ESC,  KC_SPC,  _______, _______, KC_EQL,  LT_0,    _______, _______, _______},
+#endif
+  },
+
+// ............ .................................................. Function Keys
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      |  F7  |  F8  |  F9  |  F12 |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI | Ctrl |  Alt | Shift|      |      |      |      |  F4  |  F5  |  F6  |  F11 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |  F1  |  F2  |  F3  |  F10 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   +  |      |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTFNCKEY] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7,   KC_F8,   KC_F9,   KC_F12 },
+    {OS_GUI,  OS_CTL,  OS_ALT,  OS_SFT,  _______, ___x___, ___x___, _______, KC_F4,   KC_F5,   KC_F6,   KC_F11 },
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1,   KC_F2,   KC_F3,   KC_F10 },
+    {_______, _______, _______, TT_ESC,  _______, _______, _______, KC_PLUS, _______, _______, _______, _______},
+  },
+
+// ....................................................................... Regex
+
+  // ,-----------------------------------------------------------------------------------.
+  // |      |   .  |   *  |   &  |   ~  |      |      |   `  |   [  |   ]  |   ^  |      |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |      |   <  |   %  |   >  |   ?  |      |      |   |  |   (  |   )  |   $  |      |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |      |   :  |   @  |   !  |   /  |      |      |   \  |   {  |   }  |   #  |      |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |      |      |      |  f() |   =  |      |      |   +  | Space|      |      |      |
+  // `-----------------------------------------------------------------------------------'
+
+  [_TTREGEX] = {
+    {___x___, KC_DOT,  KC_ASTR, KC_AMPR, KC_TILD, ___x___, ___x___, KC_GRV,  KC_LBRC, KC_RBRC, KC_CIRC, ___x___},
+    {___x___, KC_LT,   KC_PERC, KC_GT,   KC_QUES, ___x___, ___x___, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  ___x___},
+    {___x___, KC_COLN, KC_AT,   KC_EXLM, KC_SLSH, ___x___, ___x___, KC_BSLS, KC_LCBR, KC_RCBR, KC_HASH, ___x___},
+    {_______, _______, _______, TT_ESC,  KC_EQL,  _______, _______, KC_PLUS, KC_SPC,  _______, _______, _______},
+  },
+
+// ............................................................ Navigation Layer
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      | Home |  Up  |  End | PgUp |
+  // |-----------------------------------------------------------------------------------|
+  // |  GUI | Ctrl |  Alt | Shift|      |      |      |      | Left | Down | Right| PgDn |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |      |      |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTCURSOR] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_HOME, KC_UP,   KC_END,  KC_PGUP},
+    {OS_GUI,  OS_CTL,  OS_ALT,  OS_SFT,  _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN},
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {_______, _______, _______, TT_ESC,  _______, _______, _______, _______, _______, _______, _______, _______},
+  },
+
+// ............................................................... Mouse Actions
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      | Left |  Up  | Right|  Up  |
+  // |-----------------------------------------------------------------------------------|
+  // |      | Btn3 | Btn2 | Btn1 |      |      |      |      | Left | Down | Right| Down |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |      |      |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTMOUSE] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U},
+    {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D},
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {_______, _______, _______, TT_ESC,  _______, _______, _______, _______, _______, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/hieax/config.h b/keyboards/planck/keymaps/hieax/config.h
new file mode 100644 (file)
index 0000000..9bb5e08
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// required because lower/raise modifiers are redefined by colemak-dh
+#define PREVENT_STUCK_MODIFIERS
+
+// tap dance key press termination interval
+#define TAPPING_TERM 250
+
+// smooth mouse motion
+// #define MOUSEKEY_INTERVAL    20
+// #define MOUSEKEY_DELAY       0
+// #define MOUSEKEY_TIME_TO_MAX 60
+// #define MOUSEKEY_MAX_SPEED   7
+// #define MOUSEKEY_WHEEL_DELAY 0
+
+// compile time macro string, see functions/hardware planck script (undefine otherwise)
+#define PRIVATE_STRING
+
+// compile time macro string, must be in quotes
+#define PUBLIC_STRING ":%s/arch=(.*)/arch=('any')\n"
+
+// thumb key tap-shift() double tap: one shot shift (0) off (1) on
+#define DT_SHIFT 1
+
+// number layer 0 position KEYPAD_0, THUMB_0
+#define THUMB_0
+
+// home block shift symbol clustes defined (no overlays required for extended symbols, undefine otherwise)
+#define SHIFT_SYMBOLS
+
+// center column TT assignments (undefine for OSM chords)
+#define CENTER_TT
+#define TAPPING_TOGGLE 1
+
+// home row modifiers
+#define HOME_MODS
+// fix dual function timing
+#define PERMISSIVE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT
+
+// layout ADNW*, BEAKL*, COLEKA*, QWERTY (default)
+#define DEFAULT
+
+// sync app with window manager keybind hook defined in plover_keybind.h
+#define PLOVER_KEYBIND
+
+#endif
diff --git a/keyboards/planck/keymaps/hieax/hiea.h b/keyboards/planck/keymaps/hieax/hiea.h
new file mode 100644 (file)
index 0000000..64541d6
--- /dev/null
@@ -0,0 +1,99 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// .................................................................. BEAKL HIEA
+#ifdef DEFAULT
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | Shift| Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |   A  |   .  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   K  |   ,  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Ins | Left |  Ent | Bksp | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_Z,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_N,    KC_M,    KC_X   },
+    {HOME_H,  HOME_I,  HOME_E,  HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    HOME_T,  HOME_R,  HOME_S,  HOME_W },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_K,    KC_COMM, CNTR_BL, CNTR_BR, KC_B,    KC_P,    KC_L,    KC_F,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_INS,  SP_LEFT, TD_ENT,  SP_BSPC, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), KC_SCLN, TD_QUOT, S(KC_K), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_INS,  SP_LEFT, TD_ENT,  SP_BSPC, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | Shift| Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |   A  |   ?  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   K  |   /  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | ↑Tab |  f() |  Ins | Left |   _  |  Del | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_K), KC_SLSH, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  S_TAB,   ___fn__, LT_INS,  S_LEFT,  KC_UNDS, SP_DEL,  S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | Shift| Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |   A  |   ?  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   K  |   /  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Tab |   -  |  Ins | Left |  f() | Bksp | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_K), KC_SLSH, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_TAB,  KC_MINS, LT_INS,  S_LEFT,  ___fn__, SP_BSPC, S_DOWN,  S_UP,    S_RGHT },
+  },
+#ifdef HOME_MODS
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  |  Fn  | Caps |   `  |   [  |   ]  |   ^  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |  f() |   ?  |Cursor| Mouse|   |  |   (  |   )  |   $  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   K  |   /  |  Num | Regex|   \  |   {  |   }  |   #  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Ins | Left |   +  | Space| Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSYMBOL] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, TD_GRV,  KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)},
+    {HOME_H,  HOME_I,  HOME_E,  ___fn__, KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  S(KC_W)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_K), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_LCBR, KC_RCBR, KC_HASH, S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_INS,  SP_LEFT, KC_PLUS, SL_SPC,  AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   .  |   *  |   &  |   ~  |  Fn  | Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   <  |   %  |   >  |   ?  |Cursor| Mouse|   C  |  f() |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   @  |   !  |   /  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | ↑Tab |   =  |  Ins | Left |  Ent | Bksp | Down |  Up  | Right|
+  // |                           | ↑Tab |   =  |  Ent | Bksp |                           |
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSYMBOL] = {
+    {S(KC_Q), KC_DOT,  KC_ASTR, KC_AMPR, TD_TILD, CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_H), TD_LT,   KC_PERC, TD_GT,   KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), ___fn__, HOME_R,  HOME_S,  HOME_W },
+    {S(KC_J), TD_COLN, KC_AT,   KC_EXLM, KC_SLSH, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  S_TAB,   TD_EQL,  LT_INS,  SP_LEFT, TD_ENT,  LT_BSPC, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+#endif
+#endif
diff --git a/keyboards/planck/keymaps/hieax/hiea.sync-conflict-20180501-144403-SMV4TP4.h b/keyboards/planck/keymaps/hieax/hiea.sync-conflict-20180501-144403-SMV4TP4.h
new file mode 100644 (file)
index 0000000..53ffb88
--- /dev/null
@@ -0,0 +1,97 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// .................................................................. BEAKL HIEA
+#ifdef DEFAULT
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | Shift| Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |   A  |   .  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   K  |   ,  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Ins | Left |  Ent | Bksp | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_Z,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_N,    KC_M,    KC_X   },
+    {HOME_H,  HOME_I,  HOME_E,  HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    HOME_T,  HOME_R,  HOME_S,  HOME_W },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_K,    KC_COMM, CNTR_BL, CNTR_BR, KC_B,    KC_P,    KC_L,    KC_F,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_INS,  SP_LEFT, TD_ENT,  SP_BSPC, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), KC_SCLN, TD_QUOT, S(KC_K), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_INS,  SP_LEFT, TD_ENT,  SP_BSPC, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | Shift| Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |   A  |   ?  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   K  |   /  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | ↑Tab |  f() |  Ins | Left |   _  |  Del | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_K), KC_SLSH, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  S_TAB,   ___fn__, LT_INS,  S_LEFT,  KC_UNDS, SP_DEL,  S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | Shift| Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |   A  |   ?  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   K  |   /  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Tab |   -  |  Ins | Left |  f() | Bksp | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_K), KC_SLSH, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_TAB,  KC_MINS, LT_INS,  S_LEFT,  ___fn__, SP_BSPC, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  |  Fn  | Caps |   `  |   [  |   ]  |   ^  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |  f() |   ?  |Cursor| Mouse|   |  |   (  |   )  |   $  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   K  |   /  |  Num | Regex|   \  |   {  |   }  |   #  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |                           |  Esc | Space|   +  | Space|                           |
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSYMBOL] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, TD_GRV,  KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)},
+    {HOME_H,  HOME_I,  HOME_E,  ___fn__, KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  S(KC_W)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_K), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_LCBR, KC_RCBR, KC_HASH, S(KC_V)},
+    {_______, _______, _______, _______, LT_ESC,  TD_SPC,  KC_PLUS, KC_SPC,  _______, _______, _______, _______},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   .  |   *  |   &  |   ~  |  Fn  | Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   <  |   %  |   >  |   ?  |Cursor| Mouse|   C  |  f() |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   @  |   !  |   /  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |                           | ↑Tab |   =  |  Ent | Bksp |                           |
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSYMBOL] = {
+    {S(KC_Q), KC_DOT,  KC_ASTR, KC_AMPR, TD_TILD, CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_H), TD_LT,   KC_PERC, TD_GT,   KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), ___fn__, HOME_R,  HOME_S,  HOME_W },
+    {S(KC_J), TD_COLN, KC_AT,   KC_EXLM, KC_SLSH, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {_______, _______, _______, _______, S_TAB,   TD_EQL,  TD_ENT,  LT_BSPC, _______, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/hieax/keymap.c b/keyboards/planck/keymaps/hieax/keymap.c
new file mode 100644 (file)
index 0000000..d761ee6
--- /dev/null
@@ -0,0 +1,446 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+//
+// To flash planck firmware
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   Reset keyboard or press hw reset button on base (hole)
+//
+//   cd qmk_firmware/keyboards/planck
+//   sudo make KEYMAP=sdothum dfu
+//
+//   sudo make clean          (good practice before flashing)
+//   sudo make KEYMAP=sdothum (to compile check)
+//
+// Package requirements (for arch linux)
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   avr-gcc-atmel
+//   avr-libc-atmel
+//   dfu-programmer
+//
+// Notes
+// ▔▔▔▔▔
+//   ** E R G O   W I D E   S P L I T ** Layout
+//
+//   Autocompletion tap dance key pairs (),[],{} are available from the
+//   number/symbol layer, as well as, numerous (un)shift key values
+//
+//   The navigation pad provides a single hand right thumb activated cluster
+//   with left hand modifiers
+//
+//   #define PRIVATE_STRING includes private_string.h, a user defined code
+//   block for the PRIV tap dance e.g. SEND_STRING("secret messape"),
+//   see function private()
+//
+// Modifier clusters
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   The num and sym keys together access the navigation pad layer
+//
+//   ,-----------------------------------------------------------------------------------.
+//   | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+//   `-----------------------------------------------------------------------------------'
+//
+// Hint
+// ▔▔▔▔
+//   For sculpted keycaps such as Cherry or OEM profile, reverse the Alt, Num,
+//   Shift, Shift, Nav, Sym keycaps for more ergonomic thumb orientation and
+//   actuation
+//
+// Code
+// ▔▔▔▔
+//   This source is shamelessly based on the "default" planck layout
+//
+//   #ifdef/#endif block structures are not indented, as syntax highlighting
+//   in vim is sufficient for identification
+//
+//   c++ commenting style is used throughout
+//
+// Change history
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   See http://thedarnedestthing.com/planck%20constant
+//   See http://thedarnedestthing.com/planck%20done
+
+
+
+//                === N O T E ===
+//
+// sudo CPATH=<keymap.c directory>/common make ...
+
+
+#include "config.h"
+#include "planck.h"
+#include "action_layer.h"
+#ifdef STENO_ENABLE
+#include "keymap_steno.h"
+#endif
+#ifdef AUDIO_ENABLE
+#include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _BASE = 0
+ ,_SHIFT
+ ,_LSHIFT
+ ,_RSHIFT
+ ,_LSYMBOL
+ ,_RSYMBOL
+ ,_PLOVER
+ ,_NUMBER
+ ,_SYMBOL
+ ,_FNCKEY
+ ,_MOUSE
+ ,_EDIT
+ ,_ADJUST
+#ifdef CENTER_TT
+ ,_TTNUMBER
+ ,_TTREGEX
+ ,_TTFNCKEY
+ ,_TTCURSOR
+ ,_TTMOUSE
+#endif
+ ,_END_LAYERS
+};
+
+enum planck_keycodes {
+  BASE = SAFE_RANGE
+ ,BASE1
+ ,BASE2
+ ,PLOVER
+ ,SM_CIRC   // pseudo GUI_T(S(KC_6))                      for shifted key-codes, see process_record_user()
+ ,SM_DLR    // pseudo SFT_T(S(KC_4))                      for shifted key-codes, see process_record_user()
+ ,SM_G      // pseudo MT   (MOD_LALT | MOD_LSFT, S(KC_G)) for shifted key-codes, see process_record_user()
+ ,SM_H      // pseudo MT   (MOD_LCTL | MOD_LSFT, S(KC_H)) for shifted key-codes, see process_record_user()
+ ,SM_PERC   // pseudo ALT_T(S(KC_5))                      for shifted key-codes, see process_record_user()
+ ,SM_W      // pseudo MT   (MOD_LGUI | MOD_LSFT, S(KC_W)) for shifted key-codes, see process_record_user()
+ ,SL_LEFT   // pseudo LT   (_MOUSE, S(KC_LEFT))           for shifted key-codes, see process_record_user()
+ ,SP_DEL    // pseudo LT   (_MOUSE, KC_DEL)               for shifted key-codes, see process_record_user()
+ ,SL_TAB    // pseudo LT   (_FNCKEY, S(KC_TAB))           for shifted key-codes, see process_record_user()
+ ,SL_SPC    // pseudo LT   (S(_SYMBOL), KC_SPC)           for home row shifted GUIFN
+#ifdef HOME_MODS
+ ,HOME_A    // pseudo SFT_T(KC_A)
+ ,HOME_T    // pseudo SFT_T(KC_T)
+#endif
+#ifdef CENTER_TT
+ ,TT_ESC
+#endif
+#ifdef STENO_ENABLE
+ ,PS_STNA = STN_A
+ ,PS_STNO = STN_O
+ ,PS_STNE = STN_E
+ ,PS_STNU = STN_U
+#else
+ ,LT_C    = LT (_NUMBER, KC_C)
+ ,LT_V    = LT (_FNCKEY, KC_V)
+ ,LT_N    = LT (_EDIT,   KC_N)
+ ,LT_M    = LT (_SYMBOL, KC_M)
+#endif
+};
+
+// modifier keys
+#define AT_B    ALT_T(KC_B)
+#define AT_DOWN ALT_T(KC_DOWN)
+#define CT_RGHT CTL_T(KC_RGHT)
+#define GT_C    GUI_T(KC_C)
+#define GT_UP   GUI_T(KC_UP)
+#define MT_E    MT   (MOD_LCTL | MOD_LALT, KC_E)
+#define ST_A    SFT_T(KC_A)
+#ifdef HOME_MODS
+#define HOME_H  GUI_T(KC_H)
+#define HOME_I  CTL_T(KC_I)
+#define HOME_E  ALT_T(KC_E)
+#define HOME_R  ALT_T(KC_R)
+#define HOME_S  CTL_T(KC_S)
+#define HOME_W  GUI_T(KC_W)
+#else
+#define HOME_H  KC_H
+#define HOME_I  KC_I
+#define HOME_E  KC_E
+#define HOME_A  KC_A
+#define HOME_T  KC_T
+#define HOME_R  KC_R
+#define HOME_S  KC_S
+#define HOME_W  KC_W
+#endif
+
+#define S_DOWN  S    (KC_DOWN)
+#define S_LEFT  S    (KC_LEFT)
+#define S_RGHT  S    (KC_RGHT)
+#define S_TAB   S    (KC_TAB)
+#define S_UP    S    (KC_UP)
+
+#include "tapdance.h"
+
+// keycodes
+#define ___x___ KC_TRNS
+#define ___fn__ KC_TRNS
+#ifdef _______
+#undef _______
+#endif
+#define _______ KC_NO
+
+#define COPY    LCTL(KC_C)
+#define CUT     LCTL(KC_X)
+#define EOT     LCTL(KC_D)
+#define NAK     LCTL(KC_U)
+#define PASTE   LCTL(KC_V)
+#define UNDO    LCTL(KC_Z)
+#define TMCOPY  LALT(LCTL(KC_C))
+#define TMPASTE LALT(LCTL(KC_V))
+#define LT_BSLS LT  (_MOUSE,  KC_BSLS)      // see process_record_user() for extended handling
+#define LT_BSPC LT  (_EDIT,   KC_BSPC)
+#define SP_LEFT LT  (_EDIT,   KC_LEFT)
+#define LT_ESC  LT  (_NUMBER, KC_ESC)
+#define LT_LEFT LT  (_SYMBOL, KC_LEFT)      // see process_record_user() for extended handling
+#define SP_BSPC LT  (_SYMBOL, KC_BSPC)      // see process_record_user() for extended handling
+#define LT_TAB  LT  (_FNCKEY, KC_TAB)
+#define LT_INS  LT  (_FNCKEY, KC_INS)
+#define ADJUST  MO  (_ADJUST)
+#define OS_ALT  OSM (MOD_LALT)
+#define OS_CTL  OSM (MOD_LCTL)
+#define OS_GUI  OSM (MOD_LGUI)
+#define OS_SFT  OSM (MOD_LSFT)
+
+#ifdef CENTER_TT
+#define CNTR_TL TT  (_TTFNCKEY)
+#define CNTR_TR     KC_CAPS
+#define CNTR_HL TT  (_TTCURSOR)
+#define CNTR_HR TT  (_TTMOUSE)
+#define CNTR_BL TT  (_TTNUMBER)
+#define CNTR_BR TT  (_TTREGEX)
+#else
+#define CNTR_TL OSM (MOD_LALT | MOD_LCTL)
+#define CNTR_TR OSM (MOD_LGUI | MOD_LCTL)
+#define CNTR_HL OSM (MOD_LALT | MOD_LSFT)
+#define CNTR_HR OSM (MOD_LGUI | MOD_LSFT)
+#define CNTR_BL TD  (_CAPS)
+#define CNTR_BR OSM (MOD_LSFT | MOD_LCTL)
+#endif
+
+// LT can only reference layers 0-15
+#ifdef THUMB_0
+#define LT_EQL  LT  (_ADJUST, KC_EQL)
+#else
+#define LT_0    LT  (_ADJUST, KC_0)
+#endif
+
+// ........................................................ Default Alpha Layout
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+#include "hiea.h"
+#include "steno_layout.h"
+
+// ...................................................... Number / Function Keys
+
+#include "number_fkey_layout.h"
+
+// ......................................................... Symbol / Navigation
+
+#include "symbol_guifn_layout.h"
+
+// ............................................................... Toggle Layers
+
+#ifdef CENTER_TT
+#include "toggle_layout.h"
+#endif
+
+// ......................................................... Short Cuts / Adjust
+
+#include "chord_layout.h"
+
+};
+
+// ...................................................................... Sounds
+
+#include "sounds.h"
+
+// ........................................................... User Keycode Trap
+
+#include "keycode_functions.h"
+
+#define BASE_1  1
+#define BASE_2  2
+#define BASE_12 3
+static uint8_t base_n = 0;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+  switch (keycode) {
+    case BASE1:
+      if (record->event.pressed) {
+        base_n = base_n | BASE_1;
+        if (base_n == BASE_12) {
+          base_layer();
+        }
+      }
+      else {
+        base_n = base_n & ~BASE_1;
+      }
+      return false;
+    case BASE2:
+      if (record->event.pressed) {
+        base_n = base_n | BASE_2;
+        if (base_n == BASE_12) {
+          base_layer();
+        }
+      }
+      else {
+        base_n = base_n & ~BASE_2;
+      }
+      return false;
+#ifdef HOME_MODS
+    case HOME_E:
+    case HOME_R:
+      tap_mods(record, KC_LALT);
+      symbol_shift(record, 0);
+      break;
+    case HOME_H:
+    case HOME_W:
+      tap_mods(record, KC_LGUI);
+      symbol_shift(record, 0);
+      break;
+    case HOME_I:
+    case HOME_S:
+      tap_mods(record, KC_LCTL);
+      symbol_shift(record, 0);
+      break;
+    case HOME_A:
+      tap_mods(record, KC_LSFT);
+      symbol_shift(record, KC_A);
+      break;
+    case HOME_T:
+      tap_mods(record, KC_RSFT);
+      symbol_shift(record, KC_T);
+      break;
+#else
+    case AT_DOWN:
+      tap_mods(record, KC_LALT);
+      break;
+    case CT_RGHT:
+      tap_mods(record, KC_LGUI);
+      break;
+    case GT_UP:
+      tap_mods(record, KC_LCTL);
+      break;
+#endif
+    case SL_SPC:
+      lt(record, NOSHIFT, KC_SPC, KC_LSFT, _SYMBOL);
+      break;
+#ifdef CENTER_TT
+    case TT_ESC:
+      clear_tt();                           // exit TT layer
+      return false;
+#endif
+    case LT_ESC:
+#ifdef CENTER_TT
+      if (tt_keycode != 0) {
+        clear_tt();                         // exit TT layer
+        return false;
+      }
+#endif
+      tap_layer(record, _NUMBER);
+      break;
+    case LT_LEFT:
+    case SP_BSPC:
+      tap_layer(record, _SYMBOL);
+      // LT (_SYMBOL, KC_LEFT) left right combination layer
+      thumb_layer(record, RIGHT, 0, 0, _SYMBOL, _LSHIFT);
+      break;
+    case OS_ALT:
+      tap_mods(record, KC_LALT);
+      break;
+    case OS_CTL:
+      tap_mods(record, KC_LCTL);
+      break;
+    case OS_GUI:
+      tap_mods(record, KC_LGUI);
+      break;
+    case SM_CIRC:
+      // GUI_T(S(KC_6))
+      mt_shift(record, KC_LGUI, 0, KC_6);
+      break;
+    case SM_DLR:
+      // SFT_T(S(KC_4))
+      mt_shift(record, KC_LSFT, 0, KC_4);
+      break;
+    case SM_G:
+      // MT(MOD_LALT | MOD_LSFT, S(KC_G))
+      mt_shift(record, KC_LALT, KC_LSFT, KC_G);
+      break;
+    case SM_H:
+      // MT(MOD_LCTL | MOD_LSFT, S(KC_K))
+      mt_shift(record, KC_LCTL, KC_LSFT, KC_H);
+      break;
+    case SM_W:
+      // MT(MOD_LGUI | MOD_LSFT, S(KC_W))
+      mt_shift(record, KC_LGUI, KC_LSFT, KC_W);
+      break;
+    case SM_PERC:
+      // ALT_T(S(KC_5))
+      mt_shift(record, KC_LALT, 0, KC_5);
+      break;
+    case LT_BSLS:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, KC_BSLS) left right combination layer, see #define LT_BSLS
+      thumb_layer(record, LEFT, 0, 0, _MOUSE, _SYMBOL);
+      break;
+    case SL_LEFT:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, S(KC_LEFT)) left right combination layer
+      thumb_layer(record, RIGHT, SHIFT, KC_LEFT, _MOUSE, _LSHIFT);
+      break;
+    case SP_DEL:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, S(KC_LEFT)) left right combination layer
+      thumb_layer(record, RIGHT, NOSHIFT, KC_DEL, _MOUSE, _LSHIFT);
+      break;
+    case SL_TAB:
+      // LT (_FNCKEY, S(KC_TAB)) emulation
+      lt_shift(record, KC_TAB, _FNCKEY);
+      break;
+    case TD_ENT:
+      tap_layer(record, _RSHIFT);
+      // LT (_RSHIFT, KC_ENT) emulation, see tap dance enter
+      break;
+    case TD_SPC:
+      tap_layer(record, _LSHIFT);
+      // LT (_LSHIFT, KC_SPC) left right combination layer, see tap dance TD_SPC
+      thumb_layer(record, LEFT, 0, 0, _LSHIFT, _SYMBOL);
+      break;
+#ifdef CENTER_TT
+    case CNTR_TL:
+    case CNTR_TR:
+    case CNTR_HL:
+    case CNTR_HR:
+    case CNTR_BL:
+    case CNTR_BR:
+      if (tt_keycode != keycode && tt_keycode != 0) {
+        clear_tt();                         // return to base layer first if different TT layer selected
+      }
+      tt_keycode = keycode;
+      break;
+#endif
+// #ifdef STENO_ENABLE
+//     case PS_STNA:
+//       stn_layer(record, STN_A, _NUMBER);
+//       break;
+//     case PS_STNO:
+//       stn_layer(record, STN_O, _FNCKEY);
+//       break;
+//     case PS_STNE:
+//       stn_layer(record, STN_E, _EDIT);
+//       break;
+//     case PS_STNU:
+//       stn_layer(record, STN_U, _SYMBOL);
+//       break;
+// #endif
+    case PLOVER:
+      steno(record);
+      return false;
+  }
+  return true;
+}
+
+#include "init.h"
diff --git a/keyboards/planck/keymaps/hieax/readme.md b/keyboards/planck/keymaps/hieax/readme.md
new file mode 100644 (file)
index 0000000..58f73e3
--- /dev/null
@@ -0,0 +1,10 @@
+# The sdothum extended Default Planck Layout
+
+- Colemak-DH layout layer with shift/tab key overlays
+- Number and symbol/function key layer
+- Hexadecimal keypad layer
+- Navigation keypad layer
+- Dynamic macro layer
+- Autocompletion tap key pairs (),[],{}
+- Normalized enter and esc key position across keyboard layers
+- Extensive use of tap keys
diff --git a/keyboards/planck/keymaps/hieax/rules.mk b/keyboards/planck/keymaps/hieax/rules.mk
new file mode 100644 (file)
index 0000000..40f1538
--- /dev/null
@@ -0,0 +1,26 @@
+# 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  = no   # 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
+BACKLIGHT_ENABLE = no   # enable keyboard backlight functionality
+MIDI_ENABLE      = no   # MIDI controls
+AUDIO_ENABLE     = no   # audio output on port C6
+UNICODE_ENABLE   = no   # unicode
+BLUETOOTH_ENABLE = no   # enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE  = no   # enable WS2812 RGB underlight, do not enable this with audio at the same time.
+STENO_ENABLE     = yes # enable TX Bolt protocol, requires VIRTSER and may not work with mouse keys
+
+# do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no   # breathing sleep LED during USB suspend
+
+TAP_DANCE_ENABLE = yes  # enable double tap completion of (),[],{}
+
+ifndef QUANTUM_DIR
+include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/sdothum/beakl.h b/keyboards/planck/keymaps/sdothum/beakl.h
new file mode 100644 (file)
index 0000000..de3da34
--- /dev/null
@@ -0,0 +1,551 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// .................................................................... BEAKL EZ
+#ifdef BEAKLEZ
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   K  | ^Alt | ^GUI |   F  |   G  |   R  |   C  |   V  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |   A  |   "  | ↑Alt | ↑GUI |   L  |   S  |   T  |   N  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   ;  |   ,  |   J  |   .  |   X  | Caps |^Shift|   B  |   D  |   M  |   P  |   Z  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_K,    CNTR_TL, CNTR_TR, KC_F,    KC_G,    KC_R,    KC_C,    KC_V   },
+    {KC_H,    KC_I,    KC_E,    HOME_A,  TD_QUOT, CNTR_HL, CNTR_HR, KC_L,    KC_S,    KC_T,    KC_N,    KC_W   },
+    {KC_SCLN, KC_COMM, KC_J,    KC_DOT,  KC_X,    CNTR_BL, CNTR_BR, KC_B,    KC_D,    KC_M,    KC_P,    KC_Z   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_K), CNTR_TL, CNTR_TR, S(KC_F), S(KC_G), S(KC_R), S(KC_C), S(KC_V)},
+    {S(KC_H), S(KC_I), S(KC_E), S(KC_A), TD_QUOT, CNTR_HL, CNTR_HR, S(KC_L), S(KC_S), S(KC_T), S(KC_N), S(KC_W)},
+    {KC_SCLN, KC_COMM, S(KC_J), KC_DOT,  S(KC_X), CNTR_BL, CNTR_BR, S(KC_B), S(KC_D), S(KC_M), S(KC_P), S(KC_Z)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   K  | ^Alt | ^GUI |   F  |   G  |   R  |   C  |   V  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |   A  |   "  | ↑Alt | ↑GUI |   L  |   S  |   T  |   N  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   :  |   ~  |   J  |   `  |   X  | Caps |^Shift|   B  |   D  |   M  |   P  |   Z  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_K), CNTR_TL, CNTR_TR, S(KC_F), S(KC_G), S(KC_R), S(KC_C), S(KC_V)},
+    {S(KC_H), S(KC_I), S(KC_E), S(KC_A), TD_DQOT, CNTR_HL, CNTR_HR, S(KC_L), S(KC_S), S(KC_T), S(KC_N), S(KC_W)},
+    {TD_COLN, TD_TILD, S(KC_J), TD_GRV,  S(KC_X), CNTR_BL, CNTR_BR, S(KC_B), S(KC_D), S(KC_M), S(KC_P), S(KC_Z)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   K  | ^Alt | ^GUI |   F  |   G  |   R  |   C  |   V  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   H  |   I  |   E  |   A  |   "  | ↑Alt | ↑GUI |   L  |   S  |   T  |   N  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   :  |   /  |   J  |   ?  |   X  | Caps |^Shift|   B  |   D  |   M  |   P  |   Z  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_K), CNTR_TL, CNTR_TR, S(KC_F), S(KC_G), S(KC_R), S(KC_C), S(KC_V)},
+    {S(KC_H), S(KC_I), S(KC_E), S(KC_A), TD_DQOT, CNTR_HL, CNTR_HR, S(KC_L), S(KC_S), S(KC_T), S(KC_N), S(KC_W)},
+    {TD_COLN, KC_SLSH, S(KC_J), KC_QUES, S(KC_X), CNTR_BL, CNTR_BR, S(KC_B), S(KC_D), S(KC_M), S(KC_P), S(KC_Z)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// ..................................................................... BEAKL 8
+#ifdef BEAKL8
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   X  | ^Alt | ^GUI |   G  |   C  |   R  |   F  |   Z  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  | ↑Alt | ↑GUI |   D  |   S  |   T  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   I  |   ,  | Caps |^Shift|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_X,    CNTR_TL, CNTR_TR, KC_G,    KC_C,    KC_R,    KC_F,    KC_Z   },
+    {KC_K,    KC_H,    KC_E,    HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_D,    KC_S,    KC_T,    KC_N,    KC_B   },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_W,    KC_M,    KC_L,    KC_P,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_C), S(KC_R), S(KC_F), S(KC_Z)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_D), S(KC_S), S(KC_T), S(KC_N), S(KC_B)},
+    {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   X  | ^Alt | ^GUI |   G  |   C  |   R  |   F  |   Z  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ~  | ↑Alt | ↑GUI |   D  |   S  |   T  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   I  |   `  | Caps |^Shift|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_C), S(KC_R), S(KC_F), S(KC_Z)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), TD_TILD, CNTR_HL, CNTR_HR, S(KC_D), S(KC_S), S(KC_T), S(KC_N), S(KC_B)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), TD_GRV,  CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   X  | ^Alt | ^GUI |   G  |   C  |   R  |   F  |   Z  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  | ↑Alt | ↑GUI |   D  |   S  |   T  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   I  |   /  | Caps |^Shift|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_C), S(KC_R), S(KC_F), S(KC_Z)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_D), S(KC_S), S(KC_T), S(KC_N), S(KC_B)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// .................................................................... BEAKL 8P
+#ifdef BEAKL8P
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | ^Alt | ^GUI |   G  |   D  |   R  |   F  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  | ↑Alt | ↑GUI |   C  |   T  |   S  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   I  |   ,  | Caps |^Shift|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_Z,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_R,    KC_F,    KC_X   },
+    {KC_K,    KC_H,    KC_E,    HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    KC_T,    KC_S,    KC_N,    KC_B   },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_W,    KC_M,    KC_L,    KC_P,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)},
+    {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   {  |   }  |   $  | ^Alt | ^GUI |   G  |   D  |   R  |   F  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   <  |   >  |   ~  | ↑Alt | ↑GUI |   C  |   T  |   S  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   !  |   =  |   `  | Caps |^Shift|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_Y), KC_LCBR, KC_RCBR, KC_DLR,  CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)},
+    {S(KC_K), S(KC_H), TD_LT,   TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)},
+    {S(KC_J), KC_COLN, KC_EXLM, KC_EQL,  TD_GRV,  CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | ^Alt | ^GUI |   ^  |   [  |   ]  |   F  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  | ↑Alt | ↑GUI |   |  |   (  |   )  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   I  |   /  | Caps |^Shift|   \  |   $  |   *  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, KC_CIRC, KC_LBRC, KC_RBRC, S(KC_F), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, S(KC_N), S(KC_B)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_DLR,  KC_ASTR, S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// ................................................................... BEAKL 8TX
+#ifdef BEAKL8TX
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   J  | ^Alt | ^GUI |   G  |   D  |   R  |   F  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  | ↑Alt | ↑GUI |   C  |   T  |   S  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   ;  |   "  |   I  |   ,  | Caps |^Shift|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_J,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_R,    KC_F,    KC_X   },
+    {HOME_K,  HOME_H,  HOME_E,  HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    HOME_T,  HOME_S,  HOME_N,  HOME_B },
+    {KC_Z,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_W,    KC_M,    KC_L,    KC_P,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)},
+    {S(KC_Z), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   $  |   {  |   }  |   J  | ^Alt | ^GUI |   G  |   D  |   R  |   F  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   /  |   <  |   >  |   ~  | ↑Alt | ↑GUI |   C  |   T  |   S  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   :  |   !  |   =  |   `  | Caps |^Shift|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), KC_DLR,  KC_LCBR, KC_RCBR, S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)},
+    {S(KC_K), KC_SLSH, TD_LT,   TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)},
+    {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL,  TD_GRV,  CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   J  | ^Alt | ^GUI |   G  |   [  |   ]  |   ^  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  | ↑Alt | ↑GUI |   |  |   (  |   )  |   $  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   :  |   "  |   I  |   /  | Caps |^Shift|   \  |   *  |   .  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  S(KC_B)},
+    {S(KC_Z), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT,  S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// ................................................................... BEAKL 8TT
+#ifdef BEAKL8TT
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   J  |   Fn | Caps |   G  |   D  |   R  |   F  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  |Cursor| Mouse|   C  |   T  |   S  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   ;  |   "  |   I  |   ,  |  Num | Regex|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_J,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_R,    KC_F,    KC_X   },
+    {HOME_K,  HOME_H,  HOME_E,  HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    HOME_T,  HOME_S,  HOME_N,  HOME_B },
+    {KC_Z,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_W,    KC_M,    KC_L,    KC_P,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)},
+    {S(KC_Z), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   $  |   {  |   }  |   J  |   Fn | Caps |   G  |   D  |   R  |   F  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   /  |   <  |   >  |   ~  |Cursor| Mouse|   C  |   T  |   S  |   N  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   :  |   !  |   =  |   `  |  Num | Regex|   W  |   M  |   L  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), KC_DLR,  KC_LCBR, KC_RCBR, S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)},
+    {S(KC_K), KC_SLSH, TD_LT,   TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)},
+    {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL,  TD_GRV,  CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   J  |   Fn | Caps |   G  |   [  |   ]  |   ^  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  |Cursor| Mouse|   |  |   (  |   )  |   $  |   B  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   :  |   "  |   I  |   /  |  Num | Regex|   \  |   *  |   .  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  S(KC_B)},
+    {S(KC_Z), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT,  S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// .................................................................... BEAKL 10
+#ifdef BEAKL10
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   H  |   O  |   U  |   X  | ^Alt | ^GUI |   G  |   D  |   N  |   M  |   V  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   Y  |   I  |   E  |   A  |   .  | ↑Alt | ↑GUI |   C  |   S  |   R  |   T  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   ,  |   Z  | Caps |^Shift|   B  |   P  |   L  |   F  |   K  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_H,    KC_O,    KC_U,    KC_X,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_N,    KC_M,    KC_V   },
+    {KC_Y,    KC_I,    KC_E,    HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    KC_S,    KC_R,    KC_T,    KC_W   },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_COMM, KC_Z,    CNTR_BL, CNTR_BR, KC_B,    KC_P,    KC_L,    KC_F,    KC_K   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_H), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_V)},
+    {S(KC_Y), S(KC_I), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_S), S(KC_R), S(KC_T), S(KC_W)},
+    {S(KC_J), KC_SCLN, TD_QUOT, KC_COMM, S(KC_Z), CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_K)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   [  |   !  |   ]  |   X  | ^Alt | ^GUI |   G  |   D  |   N  |   M  |   V  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   Y  |   <  |   =  |   >  |   ~  | ↑Alt | ↑GUI |   C  |   S  |   R  |   T  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   `  |   Z  | Caps |^Shift|   B  |   P  |   L  |   F  |   K  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), TD_LBRC, KC_EXLM, TD_RBRC, S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_V)},
+    {S(KC_Y), TD_LT,   KC_EQL,  TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_S), S(KC_R), S(KC_T), S(KC_W)},
+    {S(KC_J), KC_COLN, TD_DQOT, TD_GRV,  S(KC_Z), CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_K)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   H  |   O  |   U  |   X  | ^Alt | ^GUI |   G  |   {  |   +  |   }  |   V  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   Y  |   I  |   E  |   A  |   ?  | ↑Alt | ↑GUI |   C  |   (  |   *  |   )  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   /  |   Z  | Caps |^Shift|   B  |   P  |   L  |   F  |   K  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_H), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), TD_LCBR, KC_PLUS, TD_RCBR, S(KC_V)},
+    {S(KC_Y), S(KC_I), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), TD_LPRN, KC_ASTR, TD_RPRN, S(KC_W)},
+    {S(KC_J), TD_COLN, TD_DQOT, KC_SLSH, S(KC_Z), CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_K)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// ............................................................... BEAKL Mash Up
+#ifdef BEAKL810
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | ^Alt | ^GUI |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  | ↑Alt | ↑GUI |   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   I  |   ,  | Caps |^Shift|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_Z,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_N,    KC_M,    KC_X   },
+    {KC_K,    KC_H,    KC_E,    HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    KC_T,    KC_R,    KC_S,    KC_W   },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_B,    KC_P,    KC_L,    KC_F,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   {  |   }  |   $  | ^Alt | ^GUI |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   <  |   >  |   ~  | ↑Alt | ↑GUI |   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   !  |   =  |   `  | Caps |^Shift|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_Y), KC_LCBR, KC_RCBR, KC_DLR,  CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_K), S(KC_H), TD_LT,   TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), KC_COLN, KC_EXLM, KC_EQL,  TD_GRV,  CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | ^Alt | ^GUI |   ^  |   [  |   ]  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  | ↑Alt | ↑GUI |   |  |   (  |   )  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   I  |   /  | Caps |^Shift|   \  |   $  |   *  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, KC_CIRC, KC_LBRC, KC_RBRC, S(KC_M), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, S(KC_S), S(KC_W)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_DLR,  KC_ASTR, S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// .................................................................... BEAKL MU
+#ifdef BEAKLMU
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  |  Fn  | Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   I  |   ,  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_Z,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_N,    KC_M,    KC_X   },
+    {HOME_K,  HOME_H,  HOME_E,  HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    HOME_T,  HOME_R,  HOME_S,  HOME_W },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_B,    KC_P,    KC_L,    KC_F,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   $  |   {  |   }  |   Z  |  Fn  | Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   /  |   <  |   >  |   ~  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   !  |   =  |   `  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   _  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), KC_DLR,  KC_LCBR, KC_RCBR, S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_K), KC_SLSH, TD_LT,   TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL,  TD_GRV,  CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_UNDS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  |  Fn  | Caps |   G  |   [  |   ]  |   ^  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  |Cursor| Mouse|   |  |   (  |   )  |   $  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   I  |   /  |  Num | Regex|   \  |   *  |   .  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   -  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  S(KC_W)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT,  S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_MINS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// .................................................................... BEAKL SP
+#ifdef BEAKLSP
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | Shift| Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   .  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   ;  |   "  |   I  |   ,  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Ins | Left |  Ent | Bksp | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_Y,    KC_O,    KC_U,    KC_Z,    CNTR_TL, CNTR_TR, KC_G,    KC_D,    KC_N,    KC_M,    KC_X   },
+    {HOME_K,  HOME_H,  HOME_E,  HOME_A,  KC_DOT,  CNTR_HL, CNTR_HR, KC_C,    HOME_T,  HOME_R,  HOME_S,  HOME_W },
+    {KC_J,    KC_SCLN, TD_QUOT, KC_I,    KC_COMM, CNTR_BL, CNTR_BR, KC_B,    KC_P,    KC_L,    KC_F,    KC_V   },
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_INS,  SP_LEFT, TD_ENT,  SP_BSPC, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT,  CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_INS,  SP_LEFT, TD_ENT,  SP_BSPC, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   [  |   ]  |   Z  | Shift| Caps |   G  |   D  |   N  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   ^  |   <  |   >  |   ~  |Cursor| Mouse|   C  |   T  |   R  |   S  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   !  |   =  |   `  |  Num | Regex|   B  |   P  |   L  |   F  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | ↑Tab |  f() |  Ins | Left |   _  |  Del | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_Y), KC_LBRC, KC_RBRC, S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)},
+    {S(KC_K), KC_CIRC, TD_LT,   TD_GT,   TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)},
+    {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL,  TD_GRV,  CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  S_TAB,   ___fn__, LT_INS,  S_LEFT,  KC_UNDS, SP_DEL,  S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   Y  |   O  |   U  |   Z  | Shift| Caps |   G  |   {  |   }  |   M  |   X  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   K  |   H  |   E  |   A  |   ?  |Cursor| Mouse|   |  |   (  |   )  |   $  |   W  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   J  |   :  |   "  |   I  |   /  |  Num | Regex|   \  |   *  |   .  |   P  |   V  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Tab |   -  |  Ins | Left |  f() | Bksp | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), KC_LCBR, KC_RCBR, S(KC_M), S(KC_X)},
+    {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  S(KC_W)},
+    {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT,  S(KC_P), S(KC_V)},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_TAB,  KC_MINS, LT_INS,  S_LEFT,  ___fn__, SP_BSPC, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
diff --git a/keyboards/planck/keymaps/sdothum/colemak.h b/keyboards/planck/keymaps/sdothum/colemak.h
new file mode 100644 (file)
index 0000000..b7e9df2
--- /dev/null
@@ -0,0 +1,125 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// .............................................................. Colemak Mod-DH
+#ifdef COLEMAK
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   F  |   P  |   B  | ^Alt | ^GUI |   J  |   L  |   U  |   Y  |   ;  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   R  |   S  |   T  |   G  | ↑Alt | ↑GUI |   M  |   N  |   E  |   I  |   O  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   D  |   V  | Caps |^Shift|   K  |   H  |   ,  |   .  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_W,    KC_F,    KC_P,    KC_B,    CNTR_TL, CNTR_TR, KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN},
+    {KC_A,    KC_R,    KC_S,    KC_T,    KC_G,    CNTR_HL, CNTR_HR, KC_M,    KC_N,    KC_E,    KC_I,    KC_O   },
+    {KC_Z,    KC_X,    KC_C,    KC_D,    KC_V,    CNTR_BL, CNTR_BR, KC_K,    KC_H,    KC_COMM, KC_DOT,  TD_QUOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_F), S(KC_P), S(KC_B), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), KC_SCLN},
+    {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_G), CNTR_HL, CNTR_HR, S(KC_M), S(KC_N), S(KC_E), S(KC_I), S(KC_O)},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_D), S(KC_V), CNTR_BL, CNTR_BR, S(KC_K), S(KC_H), KC_COMM, KC_DOT,  TD_QUOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   F  |   P  |   B  | ^Alt | ^GUI |   J  |   L  |   U  |   Y  |   :  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   R  |   S  |   T  |   G  | ↑Alt | ↑GUI |   M  |   N  |   E  |   I  |   O  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   D  |   V  | Caps |^Shift|   K  |   H  |   /  |   ?  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   -  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_F), S(KC_P), S(KC_B), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN},
+    {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_G), CNTR_HL, CNTR_HR, S(KC_M), S(KC_N), S(KC_E), S(KC_I), S(KC_O)},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_D), S(KC_V), CNTR_BL, CNTR_BR, S(KC_K), S(KC_H), KC_SLSH, KC_QUES, TD_DQOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_MINS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   F  |   P  |   B  | ^Alt | ^GUI |   J  |   L  |   U  |   Y  |   :  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   R  |   S  |   T  |   G  | ↑Alt | ↑GUI |   M  |   N  |   E  |   I  |   O  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   D  |   V  | Caps |^Shift|   K  |   H  |   ~  |   `  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   _  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_F), S(KC_P), S(KC_B), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN},
+    {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_G), CNTR_HL, CNTR_HR, S(KC_M), S(KC_N), S(KC_E), S(KC_I), S(KC_O)},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_D), S(KC_V), CNTR_BL, CNTR_BR, S(KC_K), S(KC_H), TD_TILD, TD_GRV,  TD_DQOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_UNDS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
+// ..................................................................... ColemaX
+#ifdef COLEMAX
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   C  |   G  |   Z  | ^Alt | ^GUI |   J  |   L  |   U  |   Y  |   ;  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   R  |   S  |   T  |   B  | ↑Alt | ↑GUI |   K  |   N  |   E  |   I  |   O  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   X  |   V  |   F  |   D  |   P  | Caps |^Shift|   M  |   H  |   ,  |   .  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_W,    KC_C,    KC_G,    KC_Z,    CNTR_TL, CNTR_TR, KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN},
+    {KC_A,    KC_R,    KC_S,    KC_T,    KC_B,    CNTR_HL, CNTR_HR, KC_K,    KC_N,    KC_E,    KC_I,    KC_O   },
+    {KC_X,    KC_V,    KC_F,    KC_D,    KC_P,    CNTR_BL, CNTR_BR, KC_M,    KC_H,    KC_COMM, KC_DOT,  TD_QUOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_C), S(KC_G), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), KC_SCLN},
+    {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_B), CNTR_HL, CNTR_HR, S(KC_K), S(KC_N), S(KC_E), S(KC_I), S(KC_O)},
+    {S(KC_X), S(KC_V), S(KC_F), S(KC_D), S(KC_P), CNTR_BL, CNTR_BR, S(KC_M), S(KC_H), KC_COMM, KC_DOT,  TD_QUOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   C  |   G  |   Z  | ^Alt | ^GUI |   J  |   L  |   U  |   Y  |   :  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   R  |   S  |   T  |   B  | ↑Alt | ↑GUI |   K  |   N  |   E  |   I  |   O  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   X  |   V  |   F  |   D  |   P  | Caps |^Shift|   M  |   H  |   /  |   ?  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   -  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_C), S(KC_G), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN},
+    {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_B), CNTR_HL, CNTR_HR, S(KC_K), S(KC_N), S(KC_E), S(KC_I), S(KC_O)},
+    {S(KC_X), S(KC_V), S(KC_F), S(KC_D), S(KC_P), CNTR_BL, CNTR_BR, S(KC_M), S(KC_H), KC_SLSH, KC_QUES, TD_DQOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_MINS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   C  |   G  |   Z  | ^Alt | ^GUI |   J  |   L  |   U  |   Y  |   :  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   R  |   S  |   T  |   B  | ↑Alt | ↑GUI |   K  |   N  |   E  |   I  |   O  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   X  |   V  |   F  |   D  |   P  | Caps |^Shift|   M  |   H  |   ~  |   `  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   _  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_C), S(KC_G), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN},
+    {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_B), CNTR_HL, CNTR_HR, S(KC_K), S(KC_N), S(KC_E), S(KC_I), S(KC_O)},
+    {S(KC_X), S(KC_V), S(KC_F), S(KC_D), S(KC_P), CNTR_BL, CNTR_BR, S(KC_M), S(KC_H), TD_TILD, TD_GRV,  TD_DQOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_UNDS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
diff --git a/keyboards/planck/keymaps/sdothum/common/chord_layout.h b/keyboards/planck/keymaps/sdothum/common/chord_layout.h
new file mode 100644 (file)
index 0000000..2c785d5
--- /dev/null
@@ -0,0 +1,41 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// .................................................................. Short Cuts
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      | Copy | Paste|      |      |      |      |      |      |      |      |
+  // |--------------------------------------------------------------+------+------+------|
+  // | Undo |  Cut | Copy | Paste|      |      |      |      | PRIV |  PUB |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |  Nak |  Eot |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |  f() |      |      |      |      |      |
+  // |      |      |      |      |      |      |      |  f() |      |      |      |      | see _PLOVER
+  // '-----------------------------------------------------------------------------------'
+
+  [_EDIT] = {
+    {_______, _______, TMCOPY,  TMPASTE, _______, _______, _______, _______, _______, _______, _______, _______},
+    {UNDO,    CUT,     COPY,    PASTE,   _______, _______, _______, _______, TD_PRIV, TD_SEND, _______, _______},
+    {_______, _______, NAK,     EOT,     _______, _______, _______, _______, _______, _______, _______, _______},
+    {_______, _______, _______, _______, _______, _______, ___fn__, ___fn__, _______, _______, _______, _______},
+  },
+
+// ................................................................ Adjust Layer
+
+  // ,-----------------------------------------------------------------------------------.
+  // |Plover|      |      |      |      |      |      |      |      |      |      |      |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |Aud on|      |      |      |      |      |      |      |      |      |      |      |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // | Reset|      |      |      |      |      |      |      |      |      |      |      |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |      |      |      |  f() |      |      |      |      |  f() |      |      |      |
+  // `-----------------------------------------------------------------------------------'
+
+  [_ADJUST] = {
+    {PLOVER,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {AU_ON,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {_______, _______, _______, ___fn__, _______, _______, _______, _______, ___fn__, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/sdothum/common/init.h b/keyboards/planck/keymaps/sdothum/common/init.h
new file mode 100644 (file)
index 0000000..6366a19
--- /dev/null
@@ -0,0 +1,56 @@
+
+// ....................................................................... Audio
+
+void matrix_init_user(void)
+{
+#ifdef STENO_ENABLE
+  steno_set_mode(STENO_MODE_BOLT);          // or STENO_MODE_GEMINI
+#endif
+#ifdef AUDIO_ENABLE
+  startup_user();
+#endif
+}
+
+#ifdef AUDIO_ENABLE
+#ifdef BACKLIGHT_ENABLE
+void led_set_user(uint8_t usb_led)
+{
+  static uint8_t old_usb_led = 0;
+  _delay_ms(10);                            // gets rid of tick
+  if (!is_playing_notes()) {
+    if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK))) {
+      // if capslock LED is turning on
+      PLAY_SONG(song_caps_on);
+    }
+    else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK))) {
+      // if capslock LED is turning off
+      PLAY_SONG(song_caps_off);
+    }
+  }
+  old_usb_led = usb_led;
+}
+#endif
+
+void startup_user(void)
+{
+  _delay_ms(20);                            // gets rid of tick
+  PLAY_SONG(song_startup);
+}
+
+void shutdown_user(void)
+{
+  PLAY_SONG(song_goodbye);
+  _delay_ms(150);
+  stop_all_notes();
+}
+
+void music_on_user(void)
+{
+  music_scale_user();
+}
+
+void music_scale_user(void)
+{
+  PLAY_SONG(music_scale);
+}
+#endif
diff --git a/keyboards/planck/keymaps/sdothum/common/keycode_functions.h b/keyboards/planck/keymaps/sdothum/common/keycode_functions.h
new file mode 100644 (file)
index 0000000..08c5dec
--- /dev/null
@@ -0,0 +1,656 @@
+
+// .......................................................... Keycode Primitives
+
+// register simple key press
+void tap_key(uint16_t keycode)
+{
+  register_code  (keycode);
+  unregister_code(keycode);
+}
+
+void shift_key(uint16_t keycode)
+{
+  register_code  (KC_LSFT);
+  tap_key        (keycode);
+  unregister_code(KC_LSFT);
+}
+
+#define SHIFT   1
+#define NOSHIFT 0
+
+static uint16_t key_timer = 0;
+
+// key press for thumb_layer() and lt_shift() macros
+bool key_press(uint8_t shift, uint16_t keycode)
+{
+  if (keycode) {
+    if (timer_elapsed(key_timer) < TAPPING_TERM) {
+      if (shift) {
+        shift_key(keycode);
+      }
+      else {
+        tap_key(keycode);
+      }
+      return true;
+    }
+  }
+  return false;
+}
+
+// ALT_T, CTL_T, GUI_T, SFT_T for shifted keycodes
+void mt_shift(keyrecord_t *record, uint16_t modifier, uint16_t modifier2, uint16_t keycode)
+{
+  if (record->event.pressed) {
+    key_timer = timer_read();
+    register_code(modifier);
+    if (modifier2) {
+      register_code(modifier2);
+    }
+  }
+  else {
+    unregister_code(modifier);
+    if (modifier2) {
+      unregister_code(modifier2);
+    }
+    if (timer_elapsed(key_timer) < TAPPING_TERM) {
+      shift_key(keycode);
+    }
+    key_timer = 0;
+  }
+}
+
+// ................................................................... Mod Masks
+
+// tap dance persistant mods, see process_record_user()
+// keyboard_report->mods (?) appears to be cleared by tap dance
+static uint8_t mods = 0;
+
+void tap_mods(keyrecord_t *record, uint16_t keycode)
+{
+  if (record->event.pressed) {
+    mods |= MOD_BIT(keycode);
+  }
+  else {
+    mods &= ~(MOD_BIT(keycode));
+  }
+}
+
+// (un)register modifiers
+void modifier(void (*f)(uint8_t))
+{
+  if (mods & MOD_BIT(KC_LCTL)) {
+    (*f)(KC_LCTL);
+  }
+  if (mods & MOD_BIT(KC_LGUI)) {
+    (*f)(KC_LGUI);
+  }
+  if (mods & MOD_BIT(KC_LALT)) {
+    (*f)(KC_LALT);
+  }
+}
+
+// .................................................... Triple Dance Shift/Layer
+
+static uint8_t dt_shift = 0;
+
+void double_shift(uint16_t keycode, uint8_t layer)
+{
+  tap_key (keycode);
+  if (DT_SHIFT) {
+    // set_oneshot_mods(MOD_LSFT);
+    // layer_on(layer);
+    layer_on         (_SHIFT);
+    set_oneshot_layer(_SHIFT, ONESHOT_START);
+    dt_shift = 1;
+  }
+  else {
+    layer_on(layer);
+  }
+}
+
+// tap dance LT (LAYER, KEY) emulation with <KEY><DOWN> -> <KEY><SHIFT> and auto-repeat extensions!
+void tap_shift(qk_tap_dance_state_t *state, uint16_t keycode, uint8_t layer)
+{
+  // double tap plus down
+  if (state->count > 2) {
+    // double enter shift
+    if (keycode == KC_ENT) {
+      tap_key     (keycode);
+      double_shift(keycode, layer);
+    }
+    // repeating keycode
+    else {
+      register_code(keycode);
+    }
+  }
+  // tap plus down (or double tap): keycode (one shot) shift
+  else if (state->count > 1) {
+    double_shift(keycode, layer);
+  }
+  // down: shift
+  else if (state->pressed) {
+    layer_on(layer);
+  }
+  // tap: keycode
+  else {
+    modifier(register_code);
+    tap_key (keycode);
+    modifier(unregister_code);
+  }
+}
+
+void tap_reset(uint16_t keycode, uint8_t layer)
+{
+  unregister_code(keycode);
+  if (DT_SHIFT && dt_shift) {
+    clear_oneshot_layer_state(ONESHOT_PRESSED);
+    dt_shift = 0;
+  }
+  else {
+    layer_off(layer);
+  }
+}
+
+// augment pseudo LT (_RSHIFT, KC_ENT) handling below for rapid <ENTER><SHIFT> sequences
+void enter(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_shift(state, KC_ENT, _RSHIFT);
+}
+
+void enter_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_reset(KC_ENT, _RSHIFT);
+}
+
+// augment pseudo LT (_LSHIFT, KC_SPC) handling below for rapid <SPACE><SHIFT> sequences
+void space(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_shift(state, KC_SPC, _LSHIFT);
+}
+
+void space_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_reset(KC_SPC, _LSHIFT);
+}
+
+// ......................................................... Triple Dance Insert
+
+void double_max(uint8_t count, uint8_t shift, uint16_t keycode)
+{
+  if (shift) {
+    shift_key(keycode);
+    if (count > 1) {
+      shift_key(keycode);
+    }
+  }
+  else {
+    tap_key(keycode);
+    if (count > 1) {
+      tap_key(keycode);
+    }
+  }
+}
+
+void colon(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key  (KC_SPC);
+    shift_key(KC_SCLN);
+    shift_key(KC_SCLN);
+    tap_key  (KC_SPC);
+  }
+  else {
+    double_max(state->count, SHIFT, KC_SCLN);
+  }
+  reset_tap_dance(state);
+}
+
+void eql(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key(KC_SPC);
+    tap_key(KC_SLSH);
+    tap_key(KC_EQL);
+    tap_key(KC_SPC);
+  }
+  else {
+    double_max(state->count, NOSHIFT, KC_EQL);
+  }
+  reset_tap_dance(state);
+}
+
+void greater(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key  (KC_SPC);
+    tap_key  (KC_MINS);
+    shift_key(KC_DOT);
+    tap_key  (KC_SPC);
+  }
+  else {
+    double_max(state->count, SHIFT, KC_DOT);
+  }
+  reset_tap_dance(state);
+}
+
+void lesser(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 2) {
+    tap_key  (KC_SPC);
+    shift_key(KC_COMM);
+    tap_key  (KC_MINS);
+    tap_key  (KC_SPC);
+  }
+  else {
+    double_max(state->count, SHIFT, KC_COMM);
+  }
+  reset_tap_dance(state);
+}
+
+void tilde(qk_tap_dance_state_t *state, void *user_data)
+{
+  // double tap plus down: repeating keycode
+  if (state->count > 2) {
+    register_code(KC_LSFT);
+    register_code(KC_GRV);
+  }
+  // tap: keycode
+  else {
+    shift_key(KC_GRV);
+    // double tap: unix home directory
+    if (state->count > 1) {
+      tap_key(KC_SLSH);
+    }
+  }
+}
+
+void tilde_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_GRV);
+  unregister_code(KC_LSFT);
+}
+
+// ............................................................. Tap Dance Pairs
+
+// tap dance shift rules
+#define S_NEVER  0
+#define S_SINGLE 1
+#define S_DOUBLE 2
+#define S_ALWAYS S_SINGLE | S_DOUBLE
+
+void symbol_pair(uint8_t shift, uint16_t left, uint16_t right)
+{
+  if (shift & S_DOUBLE) {
+    shift_key(left);
+    shift_key(right);
+  }
+  else {
+    tap_key(left);
+    tap_key(right);
+  }
+}
+
+#define CLOSE 1
+
+// tap dance symbol pairs
+void tap_pair(qk_tap_dance_state_t *state, uint8_t shift, uint16_t left, uint16_t right, uint16_t modifier, uint8_t close)
+{
+  // triple tap: left right with cursor between symbol pair a la vim :-)
+  if (state->count > 2) {
+    symbol_pair(shift, left, right);
+    tap_key    (KC_LEFT);
+  }
+  // double tap: left right
+  else if (state->count > 1) {
+    symbol_pair(shift, left, right);
+  }
+  // down: modifier
+  else if (state->pressed) {
+    if (modifier) {
+      register_code(modifier);
+    }
+  }
+  // tap: left (close: right)
+  else {
+    if (shift & S_SINGLE) {
+      shift_key(close ? right : left);
+    }
+    else {
+      tap_key(close ? right : left);
+    }
+  }
+  if (!modifier) {
+    reset_tap_dance(state);
+  }
+}
+
+void doublequote(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_QUOT, KC_QUOT, 0, 0);
+}
+
+void grave(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_GRV, KC_GRV, 0, 0);
+}
+
+void lbrace(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, 0);
+}
+
+void lcurly(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, 0);
+}
+
+void lparen(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_9, KC_0, KC_LCTL, 0);
+}
+
+void lparen_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_LCTL);
+}
+
+void quote(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_QUOT, KC_QUOT, 0, 0);
+}
+
+void rangle(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_COMM, KC_DOT, 0, CLOSE);
+}
+
+void rbrace(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, CLOSE);
+}
+
+void rcurly(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, CLOSE);
+}
+
+void rparen(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_pair(state, S_ALWAYS, KC_9, KC_0, 0, CLOSE);
+}
+
+void rparen_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_LCTL);
+}
+
+// ............................................................ Tap Dance Insert
+
+void comma(qk_tap_dance_state_t *state, void *user_data)
+{
+  tap_key(KC_COMM);
+  if (state->count > 1) {
+    tap_key(KC_SPC);
+  }
+  reset_tap_dance(state);
+}
+
+void dot(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+    shift_key(KC_COLN);
+  }
+  else {
+    tap_key(KC_DOT);
+  }
+  reset_tap_dance(state);
+}
+
+// compile time macro string, see functions/hardware planck script
+void private(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+#ifdef PRIVATE_STRING
+#include "private_string.h"
+#endif
+  }
+  reset_tap_dance(state);
+}
+
+// config.h defined string
+void send(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+    SEND_STRING(PUBLIC_STRING);
+  }
+  reset_tap_dance(state);
+}
+
+// .......................................................... Tap Dance One Shot
+
+void caps(qk_tap_dance_state_t *state, void *user_data)
+{
+  if (state->count > 1) {
+    tap_key(KC_CAPS);
+  }
+  else {
+    set_oneshot_mods(MOD_LSFT);
+    register_code   (KC_LSFT);              // on hold down
+  }
+}
+
+void caps_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+  unregister_code(KC_LSFT);
+}
+
+// ................................................................... Tap Dance
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [_CAPS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, caps, caps_reset)
+ ,[_COLN] = ACTION_TAP_DANCE_FN         (colon)
+ ,[_COMM] = ACTION_TAP_DANCE_FN         (comma)
+ ,[_DOT]  = ACTION_TAP_DANCE_FN         (dot)
+ ,[_DQOT] = ACTION_TAP_DANCE_FN         (doublequote)
+ ,[_ENT]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, enter, enter_reset)
+ ,[_EQL]  = ACTION_TAP_DANCE_FN         (eql)
+ ,[_GRV]  = ACTION_TAP_DANCE_FN         (grave)
+ ,[_GT]   = ACTION_TAP_DANCE_FN         (greater)
+ ,[_LBRC] = ACTION_TAP_DANCE_FN         (lbrace)
+ ,[_LCBR] = ACTION_TAP_DANCE_FN         (lcurly)
+ ,[_LPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lparen, lparen_reset)
+ ,[_LT]   = ACTION_TAP_DANCE_FN         (lesser)
+ ,[_PRIV] = ACTION_TAP_DANCE_FN         (private)
+ ,[_QUOT] = ACTION_TAP_DANCE_FN         (quote)
+ ,[_RBRC] = ACTION_TAP_DANCE_FN         (rbrace)
+ ,[_RCBR] = ACTION_TAP_DANCE_FN         (rcurly)
+ ,[_RNGL] = ACTION_TAP_DANCE_FN         (rangle)
+ ,[_RPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rparen, rparen_reset)
+ ,[_SEND] = ACTION_TAP_DANCE_FN         (send)
+ ,[_SPC]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, space, space_reset)
+ ,[_TILD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tilde, tilde_reset)
+};
+
+// .............................................................. Dynamic Layers
+
+#define        LEFT    1
+#define        RIGHT   2
+static uint8_t thumb = 0;
+
+// LEFT (KC_SPC, S(KC_BSLS)), RIGHT (KC_LEFT, S(KC_LEFT)) opposite thumb combinations, see process_record_user()
+// up,   up   -> _BASE
+// up,   down -> _SYMBOL
+// down, up   -> _NUMBER
+// down, down -> _MOUSE                     // see layer keycodes that raise mouse layer
+#define THUMBS_DOWN _MOUSE                  // layer
+
+static uint8_t overlayer = 0;
+
+// left right thumb layer combinations
+void thumb_layer(keyrecord_t *record, uint8_t side, uint8_t shift, uint16_t keycode, uint8_t thumb_dn_layer, uint8_t thumb_up_layer)
+{
+  if (record->event.pressed) {
+    // layer_on via tap_layer(), see process_record_user()
+    key_timer = timer_read();
+    thumb     = thumb | side;
+  }
+  else {
+    layer_off(thumb_dn_layer);
+    // opposite thumb_layer() thumb may have switched effective layer!
+    if (overlayer) {
+      layer_off(overlayer);
+      overlayer = 0;
+    }
+    if (!key_press(shift, keycode)) {
+      layer_off(THUMBS_DOWN);               // both thumbs needed
+      // opposite thumb down? see left right combination layer table above
+      if (thumb & (side == LEFT ? RIGHT : LEFT)) {
+        layer_on(thumb_up_layer);
+        overlayer = thumb_up_layer;
+      }
+    }
+    clear_mods();
+    thumb     = thumb & ~side;
+    key_timer = 0;
+  }
+}
+
+// #ifdef STENO_ENABLE
+// // LT for steno keycode
+// void stn_layer(keyrecord_t *record, uint16_t keycode, uint8_t layer)
+// {
+//   if (record->event.pressed) {
+//     key_timer = timer_read();
+//     if (keycode) {
+//       process_steno(keycode, record);
+//     }
+//     layer_on(layer);
+//   }
+//   else {
+//     layer_off(layer);
+//     if (keycode) {
+//       if (timer_elapsed(key_timer) < TAPPING_TERM) {
+//         process_steno(keycode, record);
+//       }
+//       else {
+//         // clear pressed state (request push of updated) process_steno.c and .h
+//         // steno_clear_state();
+//       }
+//     }
+//     key_timer = 0;
+//   }
+// }
+// #endif
+
+// LT for S(keycode)
+void lt_shift(keyrecord_t *record, uint16_t keycode, uint8_t layer)
+{
+  if (record->event.pressed) {
+    key_timer = timer_read();
+    layer_on(layer);
+  }
+  else {
+    layer_off(layer);
+    // for shifted keycodes, hence, LT_SHIFT
+    key_press(SHIFT, keycode);
+    clear_mods();
+    key_timer = 0;
+  }
+}
+
+// set layer asap to overcome macro latency errors, notably tap dance and LT usage
+// this routine inexplicably (?) sets layer_on() faster than can be done in thumb_layer()
+void tap_layer(keyrecord_t *record, uint8_t layer)
+{
+  if (record->event.pressed) {
+    layer_on(layer);
+  }
+  else {
+    layer_off(layer);
+  }
+}
+
+// ..................................................................... Keymaps
+
+// void persistant_default_layer_set(uint16_t default_layer)
+// {
+//   eeconfig_update_default_layer(default_layer);
+//   default_layer_set            (default_layer);
+// }
+
+void clear_layers(void)
+{
+  uint8_t layer;
+  for (layer = 0; layer < _END_LAYERS; layer++) {
+    layer_off(layer);
+  }
+}
+
+#ifdef CENTER_TT
+static uint16_t tt_keycode = 0;             // current TT keycode
+
+void clear_tt(void)
+{
+  if (tt_keycode == KC_CAPS) {
+    tap_key(KC_CAPS);                       // clear capslock
+  }
+  tt_keycode = 0;
+  clear_layers();
+  set_single_persistent_default_layer(_BASE);
+}
+#endif
+
+// txbolt plover run state
+static uint8_t plover = 0;
+
+void base_layer(void)
+{
+#ifdef AUDIO_ENABLE
+  if (plover) {
+    PLAY_SONG(song_plover_gb);
+  }
+  else {
+    PLAY_SONG(song_qwerty);
+  }
+#endif
+  clear_layers();
+  set_single_persistent_default_layer(_BASE);
+}
+
+void toggle_plover(uint8_t state)
+{
+  if (plover != state) {
+#ifdef PLOVER_KEYBIND
+#include "plover_keybind.h"
+#endif
+    plover = state;
+  }
+}
+
+void steno(keyrecord_t *record)
+{
+  if (record->event.pressed) {
+#ifdef AUDIO_ENABLE
+    PLAY_SONG(song_plover);
+#endif
+    clear_layers();
+    layer_on(_PLOVER);
+    if (!eeconfig_is_enabled()) {
+      eeconfig_init();
+    }
+    keymap_config.raw  = eeconfig_read_keymap();
+    keymap_config.nkro = 1;
+    eeconfig_update_keymap(keymap_config.raw);
+    if (!plover) {
+      toggle_plover(1);
+    }
+  }
+}
+
+void steno_exit(keyrecord_t *record)
+{
+  if (record->event.pressed) {
+    base_layer();
+    toggle_plover(0);
+  }
+}
diff --git a/keyboards/planck/keymaps/sdothum/common/number_fkey_layout.h b/keyboards/planck/keymaps/sdothum/common/number_fkey_layout.h
new file mode 100644 (file)
index 0000000..4824b82
--- /dev/null
@@ -0,0 +1,87 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ......................................................... Number Keypad Layer
+#ifdef SHIFT_SYMBOLS
+  // .-----------------------------------------------------------------------------------.
+  // |      |   F  |   E  |   D  |      |      |      |   /  |   7  |   8  |   9  |   *  |
+  // |-----------------------------------------------------------------------------------|
+  // | Ctrl |   C  |   B  |   A  |      |      |      |   .  |   4  |   5  |   6  |   -  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   G  |   \  |      |      |      |   ,  |   1  |   2  |   3  |   +  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   0  |   =  |      |      |      |
+  // |      |      |      |  f() |      |      |      |   =  |   0  |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_NUMBER] = {
+    {_______, KC_F,    MT_E,    KC_D,    _______, ___x___, ___x___, KC_SLSH, KC_7,    KC_8,    KC_9,    KC_ASTR},
+    {OS_CTL,  GT_C,    AT_B,    ST_A,    _______, ___x___, ___x___, TD_DOT,  KC_4,    KC_5,    KC_6,    KC_MINS},
+    {_______, KC_HASH, SM_G,    KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1,    KC_2,    KC_3,    KC_PLUS},
+#ifdef THUMB_0
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0,    LT_EQL,  ___x___, ___x___, ___x___},
+#else
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL,  LT_0,    ___x___, ___x___, ___x___},
+#endif
+  },
+#else
+  // .-----------------------------------------------------------------------------------.
+  // |      |   F  |   E  |   D  |      |      |      |   /  |   7  |   8  |   9  |   *  |
+  // |-----------------------------------------------------------------------------------|
+  // | Ctrl |   C  |   B  |   A  |      |      |      |   .  |   4  |   5  |   6  |   -  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   X  |   G  |      |      |      |   ,  |   1  |   2  |   3  |   +  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   0  |   =  |      |      |      |
+  // |      |      |      |  f() |      |      |      |   =  |   0  |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_NUMBER] = {
+    {_______, KC_F,    MT_E,    KC_D,    _______, _______, _______, KC_SLSH, KC_7,    KC_8,    KC_9,    KC_ASTR},
+    {OS_CTL,  GT_C,    AT_B,    LT_A,    _______, _______, _______, KC_DOT,  KC_4,    KC_5,    KC_6,    KC_MINS},
+    {_______, KC_HASH, MT_X,    S(KC_G), _______, _______, _______, TD_COMM, KC_1,    KC_2,    KC_3,    KC_PLUS},
+#ifdef THUMB_0
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0,    LT_EQL,  ___x___, ___x___, ___x___},
+#else
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL,  LT_0,    ___x___, ___x___, ___x___},
+#endif
+  },
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |   {  |   &  |   ?  |   :  |   }  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   (  |   $  |   %  |   ^  |   )  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |   [  |   <  |   ~  |   >  |   ]  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |  f() |      |      |      |   \  |   |  |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_NUMSYM] = {
+    {_______, _______, _______, ___x___, _______, _______, _______, TD_LCBR, KC_AMPR, KC_QUES, KC_COLN, KC_RCBR},
+    {___x___, ___x___, ___x___, ___fn__, _______, _______, _______, TD_LPRN, KC_DLR,  KC_PERC, KC_CIRC, KC_RPRN},
+    {_______, _______, _______, ___x___, _______, _______, _______, TD_LBRC, KC_LT,   KC_TILD, KC_GT,   KC_RBRC},
+    {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_BSLS, KC_PIPE, ___x___, ___x___, ___x___},
+  },
+#endif
+
+// ............ .................................................. Function Keys
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      |  F7  |  F8  |  F9  |  F12 |
+  // |-----------------------------------------------------------------------------------|
+  // | Ctrl |  GUI |  Alt | Shift|      |      |      |      |  F4  |  F5  |  F6  |  F11 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |  F1  |  F2  |  F3  |  F10 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |  f() |      |   +  |      |      |      |      |
+  // |      |      |      |      |  f() |      |      |   +  |      |      |      |      | see _PLOVER
+  // '-----------------------------------------------------------------------------------'
+
+  [_FNCKEY] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7,   KC_F8,   KC_F9,   KC_F12 },
+    {OS_CTL,  OS_GUI,  OS_ALT,  OS_SFT,  _______, ___x___, ___x___, _______, KC_F4,   KC_F5,   KC_F6,   KC_F11 },
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1,   KC_F2,   KC_F3,   KC_F10 },
+    {_______, _______, _______, _______, ___fn__, ___fn__, _______, KC_PLUS, _______, _______, _______, _______},
+  },
+
diff --git a/keyboards/planck/keymaps/sdothum/common/plover_keybind.h b/keyboards/planck/keymaps/sdothum/common/plover_keybind.h
new file mode 100644 (file)
index 0000000..88ec727
--- /dev/null
@@ -0,0 +1,7 @@
+
+// simple window manager specific plover keybind hook
+
+// toggle plover application, see herbstluftwm/config/appbinds
+register_code  (KC_LGUI);
+shift_key      (KC_RGHT);
+unregister_code(KC_LGUI);
diff --git a/keyboards/planck/keymaps/sdothum/common/sounds.h b/keyboards/planck/keymaps/sdothum/common/sounds.h
new file mode 100644 (file)
index 0000000..1bfc7a6
--- /dev/null
@@ -0,0 +1,14 @@
+
+// ................................................................ Audio Sounds
+
+#ifdef AUDIO_ENABLE
+float song_startup  [][2] = SONG(STARTUP_SOUND);
+float song_colemak  [][2] = SONG(COLEMAK_SOUND);
+float song_qwerty   [][2] = SONG(QWERTY_SOUND);
+float song_plover   [][2] = SONG(PLOVER_SOUND);
+float song_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float song_caps_on  [][2] = SONG(CAPS_LOCK_ON_SOUND);
+float song_caps_off [][2] = SONG(CAPS_LOCK_OFF_SOUND);
+float music_scale   [][2] = SONG(MUSIC_SCALE_SOUND);
+float song_goodbye  [][2] = SONG(GOODBYE_SOUND);
+#endif
diff --git a/keyboards/planck/keymaps/sdothum/common/steno_layout.h b/keyboards/planck/keymaps/sdothum/common/steno_layout.h
new file mode 100644 (file)
index 0000000..ab4a6fe
--- /dev/null
@@ -0,0 +1,39 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ...................................................................... Plover
+#ifdef STENO_ENABLE
+  // ,-----------------------------------------------------------------------------------.
+  // |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // | Base |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // | Base |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |                           |   A  |   O  |   E  |   U  |                           |
+  // `-----------------------------------------------------------------------------------'
+
+  [_PLOVER] = {
+    {STN_N1,  STN_N2,  STN_N3,  STN_N4,  STN_N5,  STN_N6,  STN_N7,  STN_N8,  STN_N9,  STN_NA,  STN_NB,  STN_NC },
+    {BASE1,   STN_S1,  STN_TL,  STN_PL,  STN_HL,  STN_ST1, STN_ST3, STN_FR,  STN_PR,  STN_LR,  STN_TR,  STN_DR },
+    {BASE2,   STN_S2,  STN_KL,  STN_WL,  STN_RL,  STN_ST2, STN_ST4, STN_RR,  STN_BR,  STN_GR,  STN_SR,  STN_ZR },
+    {_______, _______, _______, PS_STNA, PS_STNO, _______, _______, PS_STNE, PS_STNU, _______, _______, _______},
+  },
+#else
+  // ,-----------------------------------------------------------------------------------.
+  // |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |   1  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // | Base |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // | Base |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |                           |   A  |   O  |   E  |   U  |                           |
+  // `-----------------------------------------------------------------------------------'
+
+  [_PLOVER] = {
+    {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
+    {BASE1,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC},
+    {BASE2,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+    {_______, _______, _______, LT_C,    LT_V,    _______, _______, LT_N,    LT_M,    _______, _______, _______},
+  },
+#endif
diff --git a/keyboards/planck/keymaps/sdothum/common/symbol_guifn_layout.h b/keyboards/planck/keymaps/sdothum/common/symbol_guifn_layout.h
new file mode 100644 (file)
index 0000000..2edfe1a
--- /dev/null
@@ -0,0 +1,75 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ..................................................... Symbol Navigation Layer
+#ifdef SHIFT_SYMBOLS
+  // .-----------------------------------------------------------------------------------.
+  // |      |   ~  |   *  |   &  |      |      |      |      | Home |  Up  |  End | PgUp |
+  // |-----------------------------------------------------------------------------------|
+  // | Ctrl |   ^  |   %  |   $  |      |      |      |      | Left | Down | Right| PgDn |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   @  |   !  |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |Adjust|   \  |      |      |      |  f() |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_SYMBOL] = {
+    {_______, KC_TILD, KC_ASTR, KC_AMPR, _______, ___x___, ___x___, _______, KC_HOME, KC_UP,   KC_END,  KC_PGUP},
+    {OS_CTL,  SM_CIRC, SM_PERC, SM_DLR,  _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN},
+    {_______, KC_HASH, KC_AT,   KC_EXLM, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {___x___, ___x___, ___x___, ADJUST,  LT_BSLS, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___},
+  },
+#else
+  // .-----------------------------------------------------------------------------------.
+  // |   {  |   .  |   *  |   &  |   }  |      |      |      | Home |  Up  |  End | PgUp |
+  // |-----------------------------------------------------------------------------------|
+  // |   (  |   ^  |   %  |   $  |   )  |      |      |      | Left | Down | Right| PgDn |
+  // |-----------------------------------------------------------------------------------|
+  // |   [  |   #  |   @  |   !  |   ]  |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |   |  |   \  |      |      |      |  f() |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_SYMBOL] = {
+    {KC_LCBR, KC_DOT,  KC_ASTR, KC_AMPR, TD_RCBR, _______, _______, _______, KC_HOME, KC_UP,   KC_END,  KC_PGUP},
+    {SM_LPRN, SM_CIRC, SM_PERC, SM_DLR,  TD_RPRN, _______, _______, _______, LT_LFTX, KC_DOWN, KC_RGHT, KC_PGDN},
+    {KC_LBRC, KC_HASH, KC_AT,   KC_EXLM, TD_RBRC, _______, _______, _______, _______, _______, _______, _______},
+    {___x___, ___x___, ___x___, SL_PIPE, LT_BSLS, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___},
+  },
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |   ?  |   +  |   ~  |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   <  |   =  |   >  |      |      |      |      |  f() |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   3  |   2  |   1  |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |  f() |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_SYMREG] = {
+    {___x___, KC_QUES, KC_PLUS, KC_TILD, ___x___, _______, _______, _______, ___x___, ___x___, ___x___, ___x___},
+    {___x___, KC_LT,   KC_EQL,  TD_RNGL, ___x___, _______, _______, _______, ___fn__, ___x___, ___x___, ___x___},
+    {___x___, KC_3,    KC_2,    KC_1,    ___x___, _______, _______, _______, _______, _______, _______, _______},
+    {___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___},
+  },
+#endif
+
+// ............................................................... Mouse Actions
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      | Left |  Up  | Right|  Up  |
+  // |-----------------------------------------------------------------------------------|
+  // |      | Btn3 | Btn2 | Btn1 |      |      |      |      | Left | Down | Right| Down |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |  f() |      |      |      |  f() |      |      |      |
+  // '-----------------------------------------------------------------------------------'
+
+  [_MOUSE] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U},
+    {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D},
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {_______, _______, _______, _______, ___fn__, _______, _______, _______, ___fn__, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/sdothum/common/tapdance.h b/keyboards/planck/keymaps/sdothum/common/tapdance.h
new file mode 100644 (file)
index 0000000..d778286
--- /dev/null
@@ -0,0 +1,49 @@
+
+// tap dance keys
+enum tap_dance {
+  _CAPS = 0
+ ,_COLN
+ ,_COMM
+ ,_DOT
+ ,_DQOT
+ ,_ENT
+ ,_EQL
+ ,_GRV
+ ,_GT
+ ,_LBRC
+ ,_LCBR
+ ,_LPRN
+ ,_LT
+ ,_PRIV
+ ,_QUOT
+ ,_RBRC
+ ,_RCBR
+ ,_RNGL
+ ,_RPRN
+ ,_SEND
+ ,_SPC
+ ,_TILD
+};
+
+#define TD_CAPS TD(_CAPS)
+#define TD_COLN TD(_COLN)
+#define TD_COMM TD(_COMM)
+#define TD_DOT  TD(_DOT)
+#define TD_DQOT TD(_DQOT)
+#define TD_ENT  TD(_ENT)
+#define TD_EQL  TD(_EQL)
+#define TD_GRV  TD(_GRV)
+#define TD_GT   TD(_GT)
+#define TD_LBRC TD(_LBRC)
+#define TD_LCBR TD(_LCBR)
+#define TD_LPRN TD(_LPRN)
+#define TD_LT   TD(_LT)
+#define TD_PRIV TD(_PRIV)                   // compile time macro string, provided in private_string.h
+#define TD_QUOT TD(_QUOT)
+#define TD_RBRC TD(_RBRC)
+#define TD_RCBR TD(_RCBR)
+#define TD_RNGL TD(_RNGL)
+#define TD_RPRN TD(_RPRN)
+#define TD_SEND TD(_SEND)                   // config.h defined macro string
+#define TD_SPC  TD(_SPC)                    // see process_record_user() for extended handling of Spc
+#define TD_TILD TD(_TILD)
diff --git a/keyboards/planck/keymaps/sdothum/common/toggle_layout.h b/keyboards/planck/keymaps/sdothum/common/toggle_layout.h
new file mode 100644 (file)
index 0000000..504a1ff
--- /dev/null
@@ -0,0 +1,102 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ......................................................... Number Keypad Layer
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |   F  |   E  |   D  |      |      |      |   /  |   7  |   8  |   9  |   *  |
+  // |-----------------------------------------------------------------------------------|
+  // | Ctrl |   C  |   B  |   A  |      |      |      |   .  |   4  |   5  |   6  |   -  |
+  // |-----------------------------------------------------------------------------------|
+  // |      |   #  |   G  |   \  |      |      |      |   ,  |   1  |   2  |   3  |   +  |
+  // |-----------------------------------------------------------------------------------|
+  // |                           |  f() | Space|   0  |   =  |                           |
+  // |                           |  f() | Space|   =  |   0  |                           |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTNUMBER] = {
+    {_______, KC_F,    MT_E,    KC_D,    _______, ___x___, ___x___, KC_SLSH, KC_7,    KC_8,    KC_9,    KC_ASTR},
+    {OS_CTL,  GT_C,    AT_B,    ST_A,    _______, ___x___, ___x___, TD_DOT,  KC_4,    KC_5,    KC_6,    KC_MINS},
+    {_______, KC_HASH, SM_G,    KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1,    KC_2,    KC_3,    KC_PLUS},
+#ifdef THUMB_0
+    {_______, _______, _______, _______, TT_ESC,  KC_SPC,  KC_0,    LT_EQL,  _______, _______, _______, _______},
+#else
+    {_______, _______, _______, _______, TT_ESC,  KC_SPC,  KC_EQL,  LT_0,    _______, _______, _______, _______},
+#endif
+  },
+
+// ............ .................................................. Function Keys
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      |  F7  |  F8  |  F9  |  F12 |
+  // |-----------------------------------------------------------------------------------|
+  // | Ctrl |  GUI |  Alt | Shift|      |      |      |      |  F4  |  F5  |  F6  |  F11 |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |  F1  |  F2  |  F3  |  F10 |
+  // |-----------------------------------------------------------------------------------|
+  // |                           |  f() |      |   +  |      |                           |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTFNCKEY] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7,   KC_F8,   KC_F9,   KC_F12 },
+    {OS_CTL,  OS_GUI,  OS_ALT,  OS_SFT,  _______, ___x___, ___x___, _______, KC_F4,   KC_F5,   KC_F6,   KC_F11 },
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1,   KC_F2,   KC_F3,   KC_F10 },
+    {_______, _______, _______, _______, TT_ESC,  _______, KC_PLUS, _______, _______, _______, _______, _______},
+  },
+
+// ....................................................................... Regex
+
+  // ,-----------------------------------------------------------------------------------.
+  // |      |   ~  |   {  |   }  |   &  |      |      |   %  |   [  |   ]  |   @  |      |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |      |   ^  |   <  |   >  |   ?  |      |      |   |  |   (  |   )  |   $  |      |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |      |   :  |   !  |   =  |   /  |      |      |   \  |   *  |   .  |   #  |      |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // |                           |  f() |   -  |   +  | Space|                           |
+  // `-----------------------------------------------------------------------------------'
+
+  [_TTREGEX] = {
+    {___x___, KC_TILD, KC_LCBR, KC_RCBR, KC_AMPR, ___x___, ___x___, KC_PERC, KC_LBRC, KC_RBRC, KC_AT,   ___x___},
+    {___x___, KC_CIRC, KC_LT,   KC_GT,   KC_QUES, ___x___, ___x___, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR,  ___x___},
+    {___x___, KC_COLN, KC_EXLM, KC_EQL,  KC_SLSH, ___x___, ___x___, KC_BSLS, KC_ASTR, KC_DOT,  KC_HASH, ___x___},
+    {_______, _______, _______, _______, TT_ESC,  KC_MINS, KC_PLUS, KC_SPC,  _______, _______, _______, _______},
+  },
+
+// ............................................................ Navigation Layer
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      | Home |  Up  |  End | PgUp |
+  // |-----------------------------------------------------------------------------------|
+  // | Ctrl |  GUI |  Alt | Shift|      |      |      |      | Left | Down | Right| PgDn |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |                           |  f() |      |      |      |                           |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTCURSOR] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_HOME, KC_UP,   KC_END,  KC_PGUP},
+    {OS_CTL,  OS_GUI,  OS_ALT,  OS_SFT,  _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN},
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {_______, _______, _______, _______, TT_ESC,  _______, _______, _______, _______, _______, _______, _______},
+  },
+
+// ............................................................... Mouse Actions
+
+  // .-----------------------------------------------------------------------------------.
+  // |      |      |      |      |      |      |      |      | Left |  Up  | Right|  Up  |
+  // |-----------------------------------------------------------------------------------|
+  // |      | Btn3 | Btn2 | Btn1 |      |      |      |      | Left | Down | Right| Down |
+  // |-----------------------------------------------------------------------------------|
+  // |      |      |      |      |      |      |      |      |      |      |      |      |
+  // |-----------------------------------------------------------------------------------|
+  // |                           |  f() |      |      |      |                           |
+  // '-----------------------------------------------------------------------------------'
+
+  [_TTMOUSE] = {
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U},
+    {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D},
+    {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______},
+    {_______, _______, _______, _______, TT_ESC,  _______, _______, _______, _______, _______, _______, _______},
+  },
diff --git a/keyboards/planck/keymaps/sdothum/config.h b/keyboards/planck/keymaps/sdothum/config.h
new file mode 100644 (file)
index 0000000..4b2cdee
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// required because lower/raise modifiers are redefined by colemak-dh
+#define PREVENT_STUCK_MODIFIERS
+
+// tap dance key press termination interval
+#define TAPPING_TERM 250
+
+// smooth mouse motion
+// #define MOUSEKEY_INTERVAL    20
+// #define MOUSEKEY_DELAY       0
+// #define MOUSEKEY_TIME_TO_MAX 60
+// #define MOUSEKEY_MAX_SPEED   7
+// #define MOUSEKEY_WHEEL_DELAY 0
+
+// compile time macro string, see functions/hardware planck script (undefine otherwise)
+#define PRIVATE_STRING
+
+// compile time macro string, must be in quotes
+#define PUBLIC_STRING ":%s/arch=(.*)/arch=('any')\n"
+
+// thumb key tap-shift() double tap: one shot shift (0) off (1) on
+#define DT_SHIFT 1
+
+// number layer 0 position KEYPAD_0, THUMB_0
+#define THUMB_0
+
+// home block shift symbol clustes defined (no overlays required for extended symbols, undefine otherwise)
+#define SHIFT_SYMBOLS
+
+// center column TT assignments (undefine for OSM chords)
+#define CENTER_TT
+#define TAPPING_TOGGLE 1
+
+// home row modifiers
+#define HOME_MODS
+// fix dual function timing
+#define PERMISSIVE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT
+
+// layout ADNW*, BEAKL*, COLEKA*, QWERTY (default)
+#define BEAKLSP
+
+// sync app with window manager keybind hook defined in plover_keybind.h
+#define PLOVER_KEYBIND
+
+#endif
diff --git a/keyboards/planck/keymaps/sdothum/keymap.c b/keyboards/planck/keymaps/sdothum/keymap.c
new file mode 100644 (file)
index 0000000..ac509c4
--- /dev/null
@@ -0,0 +1,480 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+//
+// To flash planck firmware
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   Reset keyboard or press hw reset button on base (hole)
+//
+//   cd qmk_firmware/keyboards/planck
+//   sudo make KEYMAP=sdothum dfu
+//
+//   sudo make clean          (good practice before flashing)
+//   sudo make KEYMAP=sdothum (to compile check)
+//
+// Package requirements (for arch linux)
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   avr-gcc-atmel
+//   avr-libc-atmel
+//   dfu-programmer
+//
+// Notes
+// ▔▔▔▔▔
+//   ** E R G O   W I D E   S P L I T ** Layout
+//
+//   Autocompletion tap dance key pairs (),[],{} are available from the
+//   number/symbol layer, as well as, numerous (un)shift key values
+//
+//   The navigation pad provides a single hand right thumb activated cluster
+//   with left hand modifiers
+//
+//   #define PRIVATE_STRING includes private_string.h, a user defined code
+//   block for the PRIV tap dance e.g. SEND_STRING("secret messape"),
+//   see function private()
+//
+// Modifier clusters
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   The num and sym keys together access the navigation pad layer
+//
+//   ,-----------------------------------------------------------------------------------.
+//   | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+//   `-----------------------------------------------------------------------------------'
+//
+// Hint
+// ▔▔▔▔
+//   For sculpted keycaps such as Cherry or OEM profile, reverse the Alt, Num,
+//   Shift, Shift, Nav, Sym keycaps for more ergonomic thumb orientation and
+//   actuation
+//
+// Code
+// ▔▔▔▔
+//   This source is shamelessly based on the "default" planck layout
+//
+//   #ifdef/#endif block structures are not indented, as syntax highlighting
+//   in vim is sufficient for identification
+//
+//   c++ commenting style is used throughout
+//
+// Change history
+// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔
+//   See http://thedarnedestthing.com/planck%20constant
+//   See http://thedarnedestthing.com/planck%20done
+
+
+
+//                === N O T E ===
+//
+// sudo CPATH=<keymap.c directory>/common make ...
+
+
+#include "config.h"
+#include "planck.h"
+#include "action_layer.h"
+#ifdef STENO_ENABLE
+#include "keymap_steno.h"
+#endif
+#ifdef AUDIO_ENABLE
+#include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _BASE = 0
+ ,_SHIFT
+ ,_LSHIFT
+ ,_RSHIFT
+ ,_PLOVER
+ ,_NUMBER
+ ,_SYMBOL
+ ,_FNCKEY
+ ,_MOUSE
+#ifdef CENTER_TT
+ ,_TTNUMBER
+ ,_TTREGEX
+ ,_TTFNCKEY
+ ,_TTCURSOR
+ ,_TTMOUSE
+#endif
+#ifndef SHIFT_SYMBOLS
+ ,_NUMSYM
+ ,_SYMREG
+#endif
+ ,_EDIT
+ ,_QWERTY
+ ,_ADJUST
+ ,_END_LAYERS
+};
+
+enum planck_keycodes {
+  BASE = SAFE_RANGE
+ ,BASE1
+ ,BASE2
+ ,PLOVER
+ ,PLOEXIT
+ ,SM_CIRC   // pseudo GUI_T(S(KC_6))                      for shifted key-codes, see process_record_user()
+ ,SM_DLR    // pseudo SFT_T(S(KC_4))                      for shifted key-codes, see process_record_user()
+ ,SM_G      // pseudo MT   (MOD_LALT | MOD_LSFT, S(KC_G)) for shifted key-codes, see process_record_user()
+ ,SM_PERC   // pseudo ALT_T(S(KC_5))                      for shifted key-codes, see process_record_user()
+ ,SM_LPRN   // pseudo CTL_T(S(KC_9))                      for shifted key-codes, see process_record_user()
+ ,SL_LEFT   // pseudo LT   (_MOUSE, S(KC_LEFT))           for shifted key-codes, see process_record_user()
+ ,SP_DEL    // pseudo LT   (_MOUSE, KC_DEL)               for shifted key-codes, see process_record_user()
+ ,SL_PIPE   // pseudo LT   (_ADJUST, S(KC_BSLS))          for shifted key-codes, see process_record_user()
+ ,SL_TAB    // pseudo LT   (_FNCKEY, S(KC_TAB))           for shifted key-codes, see process_record_user()
+#ifdef CENTER_TT
+ ,TT_ESC
+#endif
+#ifdef STENO_ENABLE
+ ,PS_STNA = STN_A
+ ,PS_STNO = STN_O
+ ,PS_STNE = STN_E
+ ,PS_STNU = STN_U
+#else
+ ,LT_C    = LT (_NUMBER, KC_C)
+ ,LT_V    = LT (_FNCKEY, KC_V)
+ ,LT_N    = LT (_EDIT,   KC_N)
+ ,LT_M    = LT (_SYMBOL, KC_M)
+#endif
+ ,PS_BASE
+};
+
+// modifier keys
+#define AT_B    ALT_T(KC_B)
+#define AT_DOWN ALT_T(KC_DOWN)
+#define CT_RGHT CTL_T(KC_RGHT)
+#define GT_C    GUI_T(KC_C)
+#define GT_UP   GUI_T(KC_UP)
+#define MT_E    MT   (MOD_LCTL | MOD_LALT, KC_E)
+#define MT_X    MT   (MOD_LALT | MOD_LSFT, KC_X)
+#define ST_A    SFT_T(KC_A)
+#ifdef HOME_MODS
+#define HOME_K  CTL_T(KC_K)
+#define HOME_H  GUI_T(KC_H)
+#define HOME_E  ALT_T(KC_E)
+#define HOME_A  SFT_T(KC_A)
+#if defined(BEAKLMU) || defined(BEAKLSP)
+#define HOME_T  SFT_T(KC_T)
+#define HOME_R  ALT_T(KC_R)
+#define HOME_S  GUI_T(KC_S)
+#define HOME_W  CTL_T(KC_W)
+#else
+#define HOME_T  SFT_T(KC_T)
+#define HOME_S  ALT_T(KC_S)
+#define HOME_N  GUI_T(KC_N)
+#define HOME_B  CTL_T(KC_B)
+#endif
+#else
+#define HOME_K  KC_K
+#define HOME_H  KC_H
+#define HOME_E  KC_E
+#define HOME_A  KC_A
+#define HOME_T  KC_T
+#define HOME_S  KC_S
+#define HOME_N  KC_N
+#define HOME_B  KC_B
+#endif
+
+#define S_DOWN  S    (KC_DOWN)
+#define S_LEFT  S    (KC_LEFT)
+#define S_RGHT  S    (KC_RGHT)
+#define S_TAB   S    (KC_TAB)
+#define S_UP    S    (KC_UP)
+
+#include "tapdance.h"
+
+// keycodes
+#define ___x___ KC_TRNS
+#define ___fn__ KC_TRNS
+#ifdef _______
+#undef _______
+#endif
+#define _______ KC_NO
+
+#define COPY    LCTL(KC_C)
+#define CUT     LCTL(KC_X)
+#define EOT     LCTL(KC_D)
+#define NAK     LCTL(KC_U)
+#define PASTE   LCTL(KC_V)
+#define UNDO    LCTL(KC_Z)
+#define TMCOPY  LALT(LCTL(KC_C))
+#define TMPASTE LALT(LCTL(KC_V))
+#define LT_BSLS LT  (_MOUSE,  KC_BSLS)      // see process_record_user() for extended handling
+#define LT_BSPC LT  (_EDIT,   KC_BSPC)
+#define SP_LEFT LT  (_EDIT,   KC_LEFT)
+#define LT_ESC  LT  (_NUMBER, KC_ESC)
+#define LT_LEFT LT  (_SYMBOL, KC_LEFT)      // see process_record_user() for extended handling
+#define SP_BSPC LT  (_SYMBOL, KC_BSPC)      // see process_record_user() for extended handling
+#define LT_TAB  LT  (_FNCKEY, KC_TAB)
+#define LT_INS  LT  (_FNCKEY, KC_INS)
+#define LT_ALTG LT  (_FNCKEY, KC_RALT)
+#define ADJUST  MO  (_ADJUST)
+#define OS_ALT  OSM (MOD_LALT)
+#define OS_CTL  OSM (MOD_LCTL)
+#define OS_GUI  OSM (MOD_LGUI)
+#define OS_SFT  OSM (MOD_LSFT)
+#define OS_CALT OSM (MOD_LALT | MOD_LCTL)
+#define OS_CGUI OSM (MOD_LGUI | MOD_LCTL)
+#define OS_CSFT OSM (MOD_LSFT | MOD_LCTL)
+#define OS_SALT OSM (MOD_LALT | MOD_LSFT)
+#define OS_SGUI OSM (MOD_LGUI | MOD_LSFT)
+
+#ifdef CENTER_TT
+#ifdef BEAKLSP
+#define CNTR_TL OSM (MOD_LSFT)
+#else
+#define CNTR_TL TT  (_TTFNCKEY)
+#endif
+#define CNTR_TR KC_CAPS
+#define CNTR_HL TT  (_TTCURSOR)
+#define CNTR_HR TT  (_TTMOUSE)
+#define CNTR_BL TT  (_TTNUMBER)
+#define CNTR_BR TT  (_TTREGEX)
+#else
+#define CNTR_TL OSM (MOD_LALT | MOD_LCTL)
+#define CNTR_TR OSM (MOD_LGUI | MOD_LCTL)
+#define CNTR_HL OSM (MOD_LALT | MOD_LSFT)
+#define CNTR_HR OSM (MOD_LGUI | MOD_LSFT)
+#define CNTR_BL TD  (_CAPS)
+#define CNTR_BR OSM (MOD_LSFT | MOD_LCTL)
+#endif
+
+#ifdef THUMB_0
+#define LT_EQL  LT  (_ADJUST, KC_EQL)
+#else
+#define LT_0    LT  (_ADJUST, KC_0)
+#endif
+#ifndef SHIFT_SYMBOLS
+#define LT_A    LT  (_NUMSYM, KC_A)
+#define LT_LFTX LT  (_SYMREG, KC_LEFT)
+#endif
+
+// ........................................................ Default Alpha Layout
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+#include "beakl.h"
+#include "colemak.h"
+#include "qwerty.h"
+#include "steno_layout.h"
+
+// ...................................................... Number / Function Keys
+
+#include "number_fkey_layout.h"
+
+// ......................................................... Symbol / Navigation
+
+#include "symbol_guifn_layout.h"
+
+// ............................................................... Toggle Layers
+
+#ifdef CENTER_TT
+#include "toggle_layout.h"
+#endif
+
+// ......................................................... Short Cuts / Adjust
+
+#include "chord_layout.h"
+
+};
+
+// ...................................................................... Sounds
+
+#include "sounds.h"
+
+// ........................................................... User Keycode Trap
+
+#include "keycode_functions.h"
+
+#define BASE_1  1
+#define BASE_2  2
+#define BASE_12 3
+static uint8_t base_n = 0;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+  switch (keycode) {
+    case BASE1:
+      if (record->event.pressed) {
+        base_n = base_n | BASE_1;
+        if (base_n == BASE_12) {
+          base_layer();
+        }
+      }
+      else {
+        base_n = base_n & ~BASE_1;
+      }
+      return false;
+    case BASE2:
+      if (record->event.pressed) {
+        base_n = base_n | BASE_2;
+        if (base_n == BASE_12) {
+          base_layer();
+        }
+      }
+      else {
+        base_n = base_n & ~BASE_2;
+      }
+      return false;
+    case AT_DOWN:
+#ifdef HOME_MODS
+    case HOME_E:
+#if defined(BEAKLMU) || defined(BEAKLSP)
+    case HOME_R:
+#else
+    case HOME_S:
+#endif
+#endif
+      tap_mods(record, KC_LALT);
+      break;
+    case CT_RGHT:
+#ifdef HOME_MODS
+    case HOME_K:
+#if defined(BEAKLMU) || defined(BEAKLSP)
+    case HOME_W:
+#else
+    case HOME_B:
+#endif
+#endif
+      tap_mods(record, KC_LCTL);
+      break;
+    case GT_UP:
+#ifdef HOME_MODS
+    case HOME_H:
+#if defined(BEAKLMU) || defined(BEAKLSP)
+    case HOME_S:
+#else
+    case HOME_N:
+#endif
+#endif
+      tap_mods(record, KC_LGUI);
+      break;
+#ifdef HOME_MODS
+    case HOME_A:
+    case HOME_T:
+      tap_mods(record, KC_LSFT);
+      break;
+#endif
+#ifdef CENTER_TT
+    case TT_ESC:
+      clear_tt();                           // exit TT layer
+      return false;
+#endif
+    case LT_ESC:
+#ifdef CENTER_TT
+      if (tt_keycode != 0) {
+        clear_tt();                         // exit TT layer
+        return false;
+      }
+#endif
+      tap_layer(record, _NUMBER);
+      break;
+    case LT_LEFT:
+    case SP_BSPC:
+      tap_layer(record, _SYMBOL);
+      // LT (_SYMBOL, KC_LEFT) left right combination layer
+      thumb_layer(record, RIGHT, 0, 0, _SYMBOL, _LSHIFT);
+      break;
+    case OS_ALT:
+      tap_mods(record, KC_LALT);
+      break;
+    case OS_CTL:
+      tap_mods(record, KC_LCTL);
+      break;
+    case OS_GUI:
+      tap_mods(record, KC_LGUI);
+      break;
+    case SM_CIRC:
+      // GUI_T(S(KC_6))
+      mt_shift(record, KC_LGUI, 0, KC_6);
+      break;
+    case SM_DLR:
+      // SFT_T(S(KC_4))
+      mt_shift(record, KC_LSFT, 0, KC_4);
+      break;
+    case SM_G:
+      // MT(MOD_LALT | MOD_LSFT, S(KC_G))
+      mt_shift(record, KC_LALT, KC_LSFT, KC_G);
+      break;
+    case SM_LPRN:
+      // CTL_T(S(KC_9))
+      mt_shift(record, KC_LCTL, 0, KC_9);
+      break;
+    case SM_PERC:
+      // ALT_T(S(KC_5))
+      mt_shift(record, KC_LALT, 0, KC_5);
+      break;
+    case LT_BSLS:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, KC_BSLS) left right combination layer, see #define LT_BSLS
+      thumb_layer(record, LEFT, 0, 0, _MOUSE, _SYMBOL);
+      break;
+    case SL_LEFT:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, S(KC_LEFT)) left right combination layer
+      thumb_layer(record, RIGHT, SHIFT, KC_LEFT, _MOUSE, _LSHIFT);
+      break;
+    case SP_DEL:
+      tap_layer(record, _MOUSE);
+      // LT (_MOUSE, S(KC_LEFT)) left right combination layer
+      thumb_layer(record, RIGHT, NOSHIFT, KC_DEL, _MOUSE, _LSHIFT);
+      break;
+    case SL_PIPE:
+      // LT (_ADJUST, S(KC_BSLS)) emulation
+      lt_shift(record, KC_BSLS, _ADJUST);
+      break;
+    case SL_TAB:
+      // LT (_FNCKEY, S(KC_TAB)) emulation
+      lt_shift(record, KC_TAB, _FNCKEY);
+      break;
+    case TD_ENT:
+      tap_layer(record, _RSHIFT);
+      // LT (_RSHIFT, KC_ENT) emulation, see tap dance enter
+      break;
+    case TD_SPC:
+      tap_layer(record, _LSHIFT);
+      // LT (_LSHIFT, KC_SPC) left right combination layer, see tap dance TD_SPC
+      thumb_layer(record, LEFT, 0, 0, _LSHIFT, _SYMBOL);
+      break;
+#ifdef CENTER_TT
+    case CNTR_TL:
+    case CNTR_TR:
+    case CNTR_HL:
+    case CNTR_HR:
+    case CNTR_BL:
+    case CNTR_BR:
+      if (tt_keycode != keycode && tt_keycode != 0) {
+        clear_tt();                         // return to base layer first if different TT layer selected
+      }
+      tt_keycode = keycode;
+      break;
+#endif
+// #ifdef STENO_ENABLE
+//     case PS_STNA:
+//       stn_layer(record, STN_A, _NUMBER);
+//       break;
+//     case PS_STNO:
+//       stn_layer(record, STN_O, _FNCKEY);
+//       break;
+//     case PS_STNE:
+//       stn_layer(record, STN_E, _EDIT);
+//       break;
+//     case PS_STNU:
+//       stn_layer(record, STN_U, _SYMBOL);
+//       break;
+// #endif
+    case PS_BASE:
+      if (record->event.pressed) {
+        base_layer();
+      }
+      return false;
+    case PLOVER:
+      steno(record);
+      return false;
+    case PLOEXIT:
+      steno_exit(record);
+      return false;
+  }
+  return true;
+}
+
+#include "init.h"
diff --git a/keyboards/planck/keymaps/sdothum/qwerty.h b/keyboards/planck/keymaps/sdothum/qwerty.h
new file mode 100644 (file)
index 0000000..d11d047
--- /dev/null
@@ -0,0 +1,64 @@
+
+// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// ...................................................................... Qwerty
+#ifdef QWERTY
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   E  |   R  |   T  | ^Alt | ^GUI |   Y  |   U  |   I  |   O  |   P  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   S  |   D  |   F  |   G  | ↑Alt | ↑GUI |   H  |   J  |   K  |   L  |   ;  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   V  |   B  | Caps |^Shift|   N  |   M  |   ,  |   .  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc | Space|  Tab | Bksp |  Ent | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_BASE] = {
+    {KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    CNTR_TL, CNTR_TR, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P   },
+    {KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    CNTR_HL, CNTR_HR, KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN},
+    {KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    CNTR_BL, CNTR_BR, KC_N,    KC_M,    KC_COMM, KC_DOT,  TD_QUOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  [_SHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)},
+    {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), KC_SCLN},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), KC_COMM, KC_DOT,  TD_QUOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  TD_SPC,  LT_TAB,  LT_BSPC, TD_ENT,  LT_LEFT, AT_DOWN, GT_UP,   CT_RGHT},
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   E  |   R  |   T  | ^Alt | ^GUI |   Y  |   U  |   I  |   O  |   P  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   S  |   D  |   F  |   G  | ↑Alt | ↑GUI |   H  |   J  |   K  |   L  |   :  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   V  |   B  | Caps |^Shift|   N  |   M  |   /  |   ?  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt |  Esc |  f() |  Tab |  Del |   -  | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_LSHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)},
+    {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), TD_COLN},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), KC_SLSH, KC_QUES, TD_DQOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  LT_ESC,  ___fn__, LT_TAB,  KC_DEL,  KC_MINS, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+
+  // ,-----------------------------------------------------------------------------------.
+  // |   Q  |   W  |   E  |   R  |   T  | ^Alt | ^GUI |   Y  |   U  |   I  |   O  |   P  |
+  // |------+------+------+------+------+-------------+------+------+------+------+------|
+  // |   A  |   S  |   D  |   F  |   G  | ↑Alt | ↑GUI |   H  |   J  |   K  |   L  |   :  |
+  // |------+------+------+------+------+------|------+------+------+------+------+------|
+  // |   Z  |   X  |   C  |   V  |   B  | Caps |^Shift|   N  |   M  |   ~  |   `  |   "  |
+  // |------+------+------+------+------+------+------+------+------+------+------+------|
+  // | Ctrl |  GUI |  Alt | Caps |   _  | ↑Tab | Bksp |  f() | Left | Down |  Up  | Right|
+  // `-----------------------------------------------------------------------------------'
+
+  [_RSHIFT] = {
+    {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)},
+    {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), TD_COLN},
+    {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), TD_TILD, TD_GRV,  TD_DQOT},
+    {OS_CTL,  OS_GUI,  OS_ALT,  KC_CAPS, KC_UNDS, SL_TAB,  LT_BSPC, ___fn__, SL_LEFT, S_DOWN,  S_UP,    S_RGHT },
+  },
+#endif
+
diff --git a/keyboards/planck/keymaps/sdothum/readme.md b/keyboards/planck/keymaps/sdothum/readme.md
new file mode 100644 (file)
index 0000000..58f73e3
--- /dev/null
@@ -0,0 +1,10 @@
+# The sdothum extended Default Planck Layout
+
+- Colemak-DH layout layer with shift/tab key overlays
+- Number and symbol/function key layer
+- Hexadecimal keypad layer
+- Navigation keypad layer
+- Dynamic macro layer
+- Autocompletion tap key pairs (),[],{}
+- Normalized enter and esc key position across keyboard layers
+- Extensive use of tap keys
diff --git a/keyboards/planck/keymaps/sdothum/rules.mk b/keyboards/planck/keymaps/sdothum/rules.mk
new file mode 100644 (file)
index 0000000..40f1538
--- /dev/null
@@ -0,0 +1,26 @@
+# 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  = no   # 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
+BACKLIGHT_ENABLE = no   # enable keyboard backlight functionality
+MIDI_ENABLE      = no   # MIDI controls
+AUDIO_ENABLE     = no   # audio output on port C6
+UNICODE_ENABLE   = no   # unicode
+BLUETOOTH_ENABLE = no   # enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE  = no   # enable WS2812 RGB underlight, do not enable this with audio at the same time.
+STENO_ENABLE     = yes # enable TX Bolt protocol, requires VIRTSER and may not work with mouse keys
+
+# do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no   # breathing sleep LED during USB suspend
+
+TAP_DANCE_ENABLE = yes  # enable double tap completion of (),[],{}
+
+ifndef QUANTUM_DIR
+include ../../../../Makefile
+endif