summaryrefslogtreecommitdiff
path: root/keyboards/planck
diff options
context:
space:
mode:
authorsdothum2018-05-04 21:36:23 -0400
committerDrashna Jaelre2018-05-04 18:36:23 -0700
commit50b5c6ad72682776705b0faf5b8ef87deec5cd6a (patch)
tree68310c4da2741d803ebaf052ba2c22e91faca72b /keyboards/planck
parent5170398479c9e9ed36ff2966083c50e4808725be (diff)
update with qmk master (#2887)
* 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
Diffstat (limited to 'keyboards/planck')
-rw-r--r--keyboards/planck/keymaps/altgr/beakl.h612
-rw-r--r--keyboards/planck/keymaps/altgr/colemak.h124
-rw-r--r--keyboards/planck/keymaps/altgr/common/chord_layout.h41
-rw-r--r--keyboards/planck/keymaps/altgr/common/init.h56
-rw-r--r--keyboards/planck/keymaps/altgr/common/keycode_functions.h657
-rw-r--r--keyboards/planck/keymaps/altgr/common/number_fkey_layout.h86
-rw-r--r--keyboards/planck/keymaps/altgr/common/number_fkey_layout.save.h86
-rw-r--r--keyboards/planck/keymaps/altgr/common/plover_keybind.h9
-rw-r--r--keyboards/planck/keymaps/altgr/common/sounds.h14
-rw-r--r--keyboards/planck/keymaps/altgr/common/steno_layout.h39
-rw-r--r--keyboards/planck/keymaps/altgr/common/symbol_guifn_layout.h75
-rw-r--r--keyboards/planck/keymaps/altgr/common/tapdance.h49
-rw-r--r--keyboards/planck/keymaps/altgr/common/toggle_layout.h102
-rw-r--r--keyboards/planck/keymaps/altgr/config.h50
-rw-r--r--keyboards/planck/keymaps/altgr/keymap.c490
-rw-r--r--keyboards/planck/keymaps/altgr/private_string.h1
-rw-r--r--keyboards/planck/keymaps/altgr/qwerty.h64
-rw-r--r--keyboards/planck/keymaps/altgr/readme.md10
-rw-r--r--keyboards/planck/keymaps/altgr/rules.mk26
-rw-r--r--keyboards/planck/keymaps/hiea/common/chord_layout.h41
-rw-r--r--keyboards/planck/keymaps/hiea/common/init.h56
-rw-r--r--keyboards/planck/keymaps/hiea/common/keycode_functions.h657
-rw-r--r--keyboards/planck/keymaps/hiea/common/number_fkey_layout.h46
-rw-r--r--keyboards/planck/keymaps/hiea/common/plover_keybind.h9
-rw-r--r--keyboards/planck/keymaps/hiea/common/sounds.h14
-rw-r--r--keyboards/planck/keymaps/hiea/common/steno_layout.h39
-rw-r--r--keyboards/planck/keymaps/hiea/common/symbol_guifn_layout.h40
-rw-r--r--keyboards/planck/keymaps/hiea/common/tapdance.h49
-rw-r--r--keyboards/planck/keymaps/hiea/common/toggle_layout.h102
-rw-r--r--keyboards/planck/keymaps/hiea/config.h50
-rw-r--r--keyboards/planck/keymaps/hiea/hiea.h63
-rw-r--r--keyboards/planck/keymaps/hiea/keymap.c429
-rw-r--r--keyboards/planck/keymaps/hiea/qwerty.h64
-rw-r--r--keyboards/planck/keymaps/hiea/readme.md10
-rw-r--r--keyboards/planck/keymaps/hiea/rules.mk26
-rw-r--r--keyboards/planck/keymaps/hieax/common/chord_layout.h41
-rw-r--r--keyboards/planck/keymaps/hieax/common/init.h56
-rw-r--r--keyboards/planck/keymaps/hieax/common/keycode_functions.h732
-rw-r--r--keyboards/planck/keymaps/hieax/common/number_fkey_layout.h46
-rw-r--r--keyboards/planck/keymaps/hieax/common/plover_keybind.h9
-rw-r--r--keyboards/planck/keymaps/hieax/common/sounds.h14
-rw-r--r--keyboards/planck/keymaps/hieax/common/steno_layout.h39
-rw-r--r--keyboards/planck/keymaps/hieax/common/symbol_guifn_layout.h40
-rw-r--r--keyboards/planck/keymaps/hieax/common/tapdance.h49
-rw-r--r--keyboards/planck/keymaps/hieax/common/toggle_layout.h102
-rw-r--r--keyboards/planck/keymaps/hieax/config.h50
-rw-r--r--keyboards/planck/keymaps/hieax/hiea.h99
-rw-r--r--keyboards/planck/keymaps/hieax/hiea.sync-conflict-20180501-144403-SMV4TP4.h97
-rw-r--r--keyboards/planck/keymaps/hieax/keymap.c446
-rw-r--r--keyboards/planck/keymaps/hieax/readme.md10
-rw-r--r--keyboards/planck/keymaps/hieax/rules.mk26
-rw-r--r--keyboards/planck/keymaps/sdothum/beakl.h551
-rw-r--r--keyboards/planck/keymaps/sdothum/colemak.h125
-rw-r--r--keyboards/planck/keymaps/sdothum/common/chord_layout.h41
-rw-r--r--keyboards/planck/keymaps/sdothum/common/init.h56
-rw-r--r--keyboards/planck/keymaps/sdothum/common/keycode_functions.h656
-rw-r--r--keyboards/planck/keymaps/sdothum/common/number_fkey_layout.h87
-rw-r--r--keyboards/planck/keymaps/sdothum/common/plover_keybind.h7
-rw-r--r--keyboards/planck/keymaps/sdothum/common/sounds.h14
-rw-r--r--keyboards/planck/keymaps/sdothum/common/steno_layout.h39
-rw-r--r--keyboards/planck/keymaps/sdothum/common/symbol_guifn_layout.h75
-rw-r--r--keyboards/planck/keymaps/sdothum/common/tapdance.h49
-rw-r--r--keyboards/planck/keymaps/sdothum/common/toggle_layout.h102
-rw-r--r--keyboards/planck/keymaps/sdothum/config.h50
-rw-r--r--keyboards/planck/keymaps/sdothum/keymap.c480
-rw-r--r--keyboards/planck/keymaps/sdothum/qwerty.h64
-rw-r--r--keyboards/planck/keymaps/sdothum/readme.md10
-rw-r--r--keyboards/planck/keymaps/sdothum/rules.mk26
68 files changed, 8574 insertions, 0 deletions
diff --git a/keyboards/planck/keymaps/altgr/beakl.h b/keyboards/planck/keymaps/altgr/beakl.h
new file mode 100644
index 000000000..a684a6c43
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/beakl.h
@@ -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
index 000000000..8810ba82a
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/colemak.h
@@ -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
index 000000000..2c785d56c
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/common/chord_layout.h
@@ -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
index 000000000..6366a19f6
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/common/init.h
@@ -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
index 000000000..e0ae15089
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/common/keycode_functions.h
@@ -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
index 000000000..528020e74
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/common/number_fkey_layout.h
@@ -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
index 000000000..702286372
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/common/number_fkey_layout.save.h
@@ -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
index 000000000..cb4ef92ef
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/common/plover_keybind.h
@@ -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
index 000000000..1bfc7a6da
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/common/sounds.h
@@ -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
index 000000000..ab4a6fe01
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/common/steno_layout.h
@@ -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
index 000000000..798610870
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/common/symbol_guifn_layout.h
@@ -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
index 000000000..d778286bf
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/common/tapdance.h
@@ -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
index 000000000..713d27bbc
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/common/toggle_layout.h
@@ -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
index 000000000..d55258c02
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/config.h
@@ -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
index 000000000..516f481fc
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/keymap.c
@@ -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
index 000000000..6ea34cc8e
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/private_string.h
@@ -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
index 000000000..d11d0478b
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/qwerty.h
@@ -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
index 000000000..58f73e3b4
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/readme.md
@@ -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
index 000000000..40f153844
--- /dev/null
+++ b/keyboards/planck/keymaps/altgr/rules.mk
@@ -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
index 000000000..2c785d56c
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/common/chord_layout.h
@@ -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
index 000000000..6366a19f6
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/common/init.h
@@ -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
index 000000000..e0ae15089
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/common/keycode_functions.h
@@ -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
index 000000000..321482b29
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/common/number_fkey_layout.h
@@ -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
index 000000000..cb4ef92ef
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/common/plover_keybind.h
@@ -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
index 000000000..1bfc7a6da
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/common/sounds.h
@@ -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
index 000000000..ab4a6fe01
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/common/steno_layout.h
@@ -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
index 000000000..677e46409
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/common/symbol_guifn_layout.h
@@ -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
index 000000000..d778286bf
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/common/tapdance.h
@@ -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
index 000000000..713d27bbc
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/common/toggle_layout.h
@@ -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
index 000000000..9bb5e0873
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/config.h
@@ -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
index 000000000..093802aef
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/hiea.h
@@ -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
index 000000000..2f573f9a4
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/keymap.c
@@ -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
index 000000000..d11d0478b
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/qwerty.h
@@ -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
index 000000000..58f73e3b4
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/readme.md
@@ -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
index 000000000..40f153844
--- /dev/null
+++ b/keyboards/planck/keymaps/hiea/rules.mk
@@ -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
index 000000000..2c785d56c
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/common/chord_layout.h
@@ -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
index 000000000..6366a19f6
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/common/init.h
@@ -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
index 000000000..a26b562ff
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/common/keycode_functions.h
@@ -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
index 000000000..321482b29
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/common/number_fkey_layout.h
@@ -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
index 000000000..cb4ef92ef
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/common/plover_keybind.h
@@ -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
index 000000000..1bfc7a6da
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/common/sounds.h
@@ -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
index 000000000..ab4a6fe01
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/common/steno_layout.h
@@ -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
index 000000000..677e46409
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/common/symbol_guifn_layout.h
@@ -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
index 000000000..d778286bf
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/common/tapdance.h
@@ -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
index 000000000..ea4ead56b
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/common/toggle_layout.h
@@ -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
index 000000000..9bb5e0873
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/config.h
@@ -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
index 000000000..64541d633
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/hiea.h
@@ -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
index 000000000..53ffb8861
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/hiea.sync-conflict-20180501-144403-SMV4TP4.h
@@ -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
index 000000000..d761ee677
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/keymap.c
@@ -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
index 000000000..58f73e3b4
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/readme.md
@@ -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
index 000000000..40f153844
--- /dev/null
+++ b/keyboards/planck/keymaps/hieax/rules.mk
@@ -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
index 000000000..de3da34a5
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/beakl.h
@@ -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
index 000000000..b7e9df22c
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/colemak.h
@@ -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
index 000000000..2c785d56c
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/common/chord_layout.h
@@ -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
index 000000000..6366a19f6
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/common/init.h
@@ -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
index 000000000..08c5deca5
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/common/keycode_functions.h
@@ -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
index 000000000..4824b82a0
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/common/number_fkey_layout.h
@@ -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
index 000000000..88ec727bf
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/common/plover_keybind.h
@@ -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
index 000000000..1bfc7a6da
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/common/sounds.h
@@ -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
index 000000000..ab4a6fe01
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/common/steno_layout.h
@@ -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
index 000000000..2edfe1a04
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/common/symbol_guifn_layout.h
@@ -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
index 000000000..d778286bf
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/common/tapdance.h
@@ -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
index 000000000..504a1ff57
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/common/toggle_layout.h
@@ -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
index 000000000..4b2cdeece
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/config.h
@@ -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
index 000000000..ac509c41d
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/keymap.c
@@ -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
index 000000000..d11d0478b
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/qwerty.h
@@ -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
index 000000000..58f73e3b4
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/readme.md
@@ -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
index 000000000..40f153844
--- /dev/null
+++ b/keyboards/planck/keymaps/sdothum/rules.mk
@@ -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