]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/kinesis/keymaps/insertsnideremarks/keymap.c
a failed attempt at hot-plugging
[qmk_firmware.git] / keyboards / kinesis / keymaps / insertsnideremarks / keymap.c
1 #include "kinesis.h"
2 #include "action_layer.h"
3 #include "eeconfig.h"
4
5 extern keymap_config_t keymap_config;
6
7 enum kinesis_layers {
8   _CMODDH,    // Colemak Mod-DH Matrix (default layer)
9   _QWERTY,    // Qwerty
10   _COLEMAK,   // Colemak
11   _NUMBERS,   // Numbers & Symbols
12   _NUMBERS2,  // Numbers & Symbols 2 (identical as _NUMBERS; basically used for tri-layer access to _ADJUST)
13   _FUNCTION,  // Function
14   _FUNCTION2, // Function 2 (identical as _FUNCTION; used to allow for easier use of space and backspace while using function layer arrows)
15   _NUMPAD,    // Numpad
16   _CMODDHGM,  // Colemak Mod-DH Matrix gaming/vanilla (no dual-role keys with layer access)
17   _QWERTYGM,  // QWERTY gaming/vanilla (no dual-role keys with layer access)
18   _ADJUST     // Adjust layer
19 };
20
21 enum kinesis_keycodes {
22   CMODDH = SAFE_RANGE,
23   QWERTY,
24   COLEMAK,
25   CMODDHGM,
26   QWERTYGM,
27   SPCFN  = LT(_FUNCTION, KC_SPC),
28   BSPCFN = LT(_FUNCTION2, KC_BSPC),
29   ENTNS  = LT(_NUMBERS, KC_ENT),
30   DELNS  = LT(_NUMBERS2, KC_DEL),
31   CTLESC = CTL_T(KC_ESC),
32   NKROTG = MAGIC_TOGGLE_NKRO
33 };
34
35 #define _______ KC_TRNS
36 #define XXXXXXX KC_NO
37
38 //Tap Dance Declarations
39 enum {
40   ADJ = 0,
41   LBCB,
42   RBCB,
43   EQPL,
44   PLEQ,
45   MNUN,
46   SLAS,
47   GVTL,
48   PPLEQ,
49   PMNUN,
50   PSLPAS
51 };
52
53 void dance_LAYER_finished(qk_tap_dance_state_t *state, void *user_data) {
54   if (state->count == 2) {
55      layer_on(_ADJUST);
56      set_oneshot_layer(_ADJUST, ONESHOT_START);
57   }
58 }
59 void dance_LAYER_reset(qk_tap_dance_state_t *state, void *user_data) {
60   if (state->count == 2) {
61      layer_off(_ADJUST);
62      clear_oneshot_layer_state(ONESHOT_PRESSED);
63   }
64 }
65
66 qk_tap_dance_action_t tap_dance_actions[] = {
67 [ADJ]    = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_LAYER_finished, dance_LAYER_reset),  //  Double-tap to activate Adjust layer via oneshot layer 
68 [LBCB]   = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LCBR),  // Left bracket on a single-tap, left brace on a double-tap
69 [RBCB]   = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RCBR),  // Right bracket on a single-tap, right brace on a double-tap
70 [EQPL]   = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_PLUS),   // Plus sign on a single-tap, equal sign on a double-tap
71 [PLEQ]   = ACTION_TAP_DANCE_DOUBLE(KC_PLUS, KC_EQL),   // Equal sign on a single-tap, plus sign on a double-tap
72 [MNUN]   = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS),  // Minus sign on a single-tap, underscore on a double-tap
73 [SLAS]   = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_ASTR),  // Slash in a single-tap, asterisk in a double-tap
74 [GVTL]   = ACTION_TAP_DANCE_DOUBLE(KC_GRV, KC_TILD),   // Grave on a single-tap, tilde on a double-tap
75 [PPLEQ]  = ACTION_TAP_DANCE_DOUBLE(KC_PPLS, KC_EQL),   // Numpad plus sign on a single-tap, equal sign on a double-tap
76 [PMNUN]  = ACTION_TAP_DANCE_DOUBLE(KC_PMNS, KC_UNDS),  // Numpad minus sign on a single-tap, underscore on a double-tap
77 [PSLPAS] = ACTION_TAP_DANCE_DOUBLE(KC_PSLS, KC_PAST)   // Numpad slash on a single-tap, numpad asterisk on a double-tap
78 };
79
80 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
81 /* Colemak Mod-DH Matrix
82 *  (Defauit layer; keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
83 *  ,-----------------------------------------------------------------------------------------------------------.
84 *  | ESC |  F1 |  F2 |  F3 |  F4 |  F5 |  F6 |  F7 |  F8 |  F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
85 *  `-----------------------------------------------------------------------------------------------------------'
86 *  ,-------------------------------------------.                   ,-------------------------------------------.
87 *  |    =   |   1  |   2  |   3  |   4  |   5  |                   |   6  |   7  |   8  |   9  |   0  |   -    |
88 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
89 *  |   Tab  |   Q  |   W  |   F  |   P  |   B  |                   |   J  |   L  |   U  |   Y  |   ;  |   \    |
90 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
91 *  |Esc/Ctrl|   A  |   R  |   S  |   T  |   G  |                   |   M  |   N  |   E  |   I  |   O  |   '    |
92 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
93 *  |SC Shift|   Z  |   X  |   C  |   D  |   V  |                   |   K  |   H  |   ,  |   .  |   /  |SC Shift|
94 *  `--------+------+------+------+------+------'                   `------+------+------+------+------+--------'
95 *           |  Ins |   `  |   [  |   ]  |                                 | Left | Down |  Up  | Right|
96 *           `---------------------------'                                 `---------------------------'
97 *                              ,---------------.                   ,---------------.
98 *                              |Esc/Ctl| Hyper |                   |  RAlt |  RCtl |
99 *                      ,-------|-------|-------|                   |-------+-------+-------.
100 *                      | Space | Enter |App/Alt|                   |  RGUI | Delete|  Bspc |
101 *                      |   /   |   /   |-------|                   |-------|   /   |   /   |
102 *                      |  Fn   | Number|  Bspc |                   |  Tab  |Number2|  Fn2  |
103 *                      `-----------------------'                   `-----------------------' 
104 */
105 [_CMODDH] = KEYMAP(
106   // Left Hand
107   KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,       KC_F8,
108   KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,
109   KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_B,
110   CTLESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_G,
111   KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_D,    KC_V,
112            KC_INS,  KC_GRV,  KC_LBRC, KC_RBRC,
113   //Left Thumb
114                                       CTLESC,  ALL_T(KC_NO),
115                                                ALT_T(KC_APP),
116                              SPCFN,   ENTNS,   KC_BSPC,
117   //Right Hand
118   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PSCR, KC_SLCK, KC_PAUS, TG(_NUMPAD), MO(_ADJUST),
119   KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
120   KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSLS,
121   KC_M,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT,
122   KC_K,    KC_H,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC,
123   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT,
124   //Right Thumb
125   KC_RALT, KC_RCTL,
126   KC_RGUI,
127   KC_TAB,  DELNS,   BSPCFN
128 ),
129
130 /* QWERTY
131 *  (Keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
132 *  ,-----------------------------------------------------------------------------------------------------------.
133 *  | ESC |  F1 |  F2 |  F3 |  F4 |  F5 |  F6 |  F7 |  F8 |  F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
134 *  `-----------------------------------------------------------------------------------------------------------'
135 *  ,-------------------------------------------.                   ,-------------------------------------------.
136 *  |    =   |   1  |   2  |   3  |   4  |   5  |                   |   6  |   7  |   8  |   9  |   0  |   -    |
137 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
138 *  |   Tab  |   Q  |   W  |   E  |   R  |   T  |                   |   Y  |   U  |   I  |   O  |   P  |   \    |
139 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
140 *  |Esc/Ctrl|   A  |   S  |   D  |   F  |   G  |                   |   H  |   J  |   K  |   L  |   ;  |   '    |
141 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
142 *  |SC Shift|   Z  |   X  |   C  |   V  |   B  |                   |   N  |   M  |   ,  |   .  |   /  |SC Shift|
143 *  `--------+------+------+------+------+------'                   `------+------+------+------+------+--------'
144 *           |  Ins |   `  |   [  |   ]  |                                 | Left | Down |  Up  | Right|
145 *           `---------------------------'                                 `---------------------------'
146 *                              ,---------------.                   ,---------------.
147 *                              |Esc/Ctl| Hyper |                   |  RAlt |  RCtl |
148 *                      ,-------|-------|-------|                   |-------+-------+-------.
149 *                      | Space | Enter |App/Alt|                   |  RGUI | Delete|  Bspc |
150 *                      |   /   |   /   |-------|                   |-------|   /   |   /   |
151 *                      |  Fn   | Number|  Bspc |                   |  Tab  |Number2|  Fn2  |
152 *                      `-----------------------'                   `-----------------------' 
153 */
154 [_QWERTY] = KEYMAP(
155   // Left Hand
156   KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,       KC_F8,
157   KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,
158   KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,
159   CTLESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,
160   KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,
161            KC_INS,  KC_GRV,  KC_LBRC, KC_RBRC,
162   //Left Thumb                         
163                                       CTLESC,  ALL_T(KC_NO),
164                                                ALT_T(KC_APP),
165                              SPCFN,   ENTNS,   KC_BSPC,
166
167   //Right Hand
168   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PSCR, KC_SLCK, KC_PAUS, TG(_NUMPAD), MO(_ADJUST),
169   KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
170   KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSLS,
171   KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
172   KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC,
173   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT,
174   //Right Thumb
175   KC_RALT, KC_RCTL,
176   KC_RGUI,
177   KC_TAB,  DELNS,   BSPCFN
178 ),
179
180 /* Colemak
181 *  (Keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
182 *  ,-----------------------------------------------------------------------------------------------------------.
183 *  | ESC |  F1 |  F2 |  F3 |  F4 |  F5 |  F6 |  F7 |  F8 |  F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
184 *  `-----------------------------------------------------------------------------------------------------------'
185 *  ,-------------------------------------------.                   ,-------------------------------------------.
186 *  |    =   |   1  |   2  |   3  |   4  |   5  |                   |   6  |   7  |   8  |   9  |   0  |   -    |
187 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
188 *  |   Tab  |   Q  |   W  |   F  |   P  |   G  |                   |   J  |   L  |   U  |   Y  |   ;  |   \    |
189 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
190 *  |Esc/Ctrl|   A  |   R  |   S  |   T  |   D  |                   |   H  |   N  |   E  |   I  |   O  |   '    |
191 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
192 *  |SC Shift|   Z  |   X  |   C  |   V  |   B  |                   |   K  |   M  |   ,  |   .  |   /  |SC Shift|
193 *  `--------+------+------+------+------+------'                   `------+------+------+------+------+--------'
194 *           |  Ins |   `  |   [  |   ]  |                                 | Left | Down |  Up  | Right|
195 *           `---------------------------'                                 `---------------------------'
196 *                              ,---------------.                   ,---------------.
197 *                              |Esc/Ctl| Hyper |                   |  RAlt |  RCtl |
198 *                      ,-------|-------|-------|                   |-------+-------+-------.
199 *                      | Space | Enter |App/Alt|                   |  RGUI | Delete|  Bspc |
200 *                      |   /   |   /   |-------|                   |-------|   /   |   /   |
201 *                      |  Fn   | Number|  Bspc |                   |  Tab  |Number2|  Fn2  |
202 *                      `-----------------------'                   `-----------------------' 
203 */
204 [_COLEMAK] = KEYMAP(
205   // Left Hand
206   KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,
207   KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,
208   KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,
209   CTLESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,
210   KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,
211            KC_INS,  KC_GRV,  KC_LBRC, KC_RBRC,
212   //Left Thumb
213                                       CTLESC,  ALL_T(KC_NO),
214                                                ALT_T(KC_APP),
215                              SPCFN,   ENTNS,   KC_BSPC,
216   //Right Hand
217   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PSCR, KC_SLCK, KC_PAUS, TG(_NUMPAD), MO(_ADJUST),
218   KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
219   KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSLS,
220   KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT,
221   KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC,
222   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT,
223   //Right Thumb
224   KC_RALT, KC_RCTL,
225   KC_RGUI,
226   KC_TAB,  DELNS,   BSPCFN
227 ),
228
229 /* Number/symbol layer
230 *  (Multiple characters: single-tap for first, double-tap for second)
231 *  ,-----------------------------------------------------------------------------------------------------------.
232 *  |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |
233 *  `-----------------------------------------------------------------------------------------------------------'
234 *  ,-------------------------------------------.                   ,-------------------------------------------.
235 *  |   F12  |  F1  |  F2  |  F3  |  F4  |  F5  |                   |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
236 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
237 *  |        |   6  |   7  |   8  |   9  |   0  |                   |   ^  |   &  |   *  |   (  |   )  |        |
238 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
239 *  |        |   1  |   2  |   3  |   4  |   5  |                   |   !  |   @  |   #  |   $  |   %  |        |
240 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
241 *  |        |      |   .  |  / * |  - _ |  + = |                   |  ` ~ |  [ { |  ] } |      |      |        |
242 *  `--------+------+------+------+------+------'                   `------+------+------+------+------+--------'
243 *           |   (  |   )  |  [ { |  ] } |                                 |      |      |      |      |
244 *           `---------------------------'                                 `---------------------------'
245 *                              ,---------------.                   ,---------------.
246 *                              |       |       |                   |       |       |
247 *                      ,-------|-------|-------|                   |-------+-------+-------.
248 *                      |       |       |       |                   |       |       |       |
249 *                      |       |       |-------|                   |-------|       |       |
250 *                      |       |       |       |                   |       |       |       |
251 *                      `-----------------------'                   `-----------------------' 
252 */
253 [_NUMBERS] = KEYMAP(
254   // Left Hand
255   _______,  _______,  _______,  _______,  _______,  _______, _______, _______, _______,
256   KC_F12,   KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,
257   _______,  KC_6,     KC_7,     KC_8,     KC_9,     KC_0,
258   _______,  KC_1,     KC_2,     KC_3,     KC_4,     KC_5,
259   _______,  _______,  KC_DOT,   TD(SLAS), TD(MNUN), TD(PLEQ),
260             KC_LPRN,  KC_RPRN,  TD(LBCB), TD(RBCB),
261   // Left Thumb
262                                           _______,  _______,
263                                                     _______,
264                                 _______,  _______,  _______,
265   // Right Hand
266   _______,  _______,  _______,  _______,  _______,  _______, _______, _______, _______,
267   KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,
268   KC_CIRC,  KC_AMPR,  KC_ASTR,  KC_LPRN,  KC_RPRN,  _______, 
269   KC_EXLM,  KC_AT,    KC_HASH,  KC_DLR,   KC_PERC,  _______, 
270   TD(GVTL), TD(LBCB), TD(RBCB), _______,  _______,  _______,
271             _______,  _______,  _______,  _______, 
272   // Right Thumb
273   _______,  _______,
274   _______,
275   _______,  _______,  _______
276 ),
277
278 [_NUMBERS2] = KEYMAP(
279   // Left Hand
280   _______,  _______,  _______,  _______,  _______,  _______, _______, _______, _______,
281   KC_F12,   KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,
282   _______,  KC_6,     KC_7,     KC_8,     KC_9,     KC_0,
283   _______,  KC_1,     KC_2,     KC_3,     KC_4,     KC_5,
284   _______,  _______,  KC_DOT,   TD(SLAS), TD(MNUN), TD(PLEQ),
285             KC_LPRN,  KC_RPRN,  TD(LBCB), TD(RBCB),
286   // Left Thumb
287                                           _______,  _______,
288                                                     _______,
289                                 _______,  _______,  _______,
290   // Right Hand
291   _______,  _______,  _______,  _______,  _______,  _______, _______, _______, _______,
292   KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,
293   KC_CIRC,  KC_AMPR,  KC_ASTR,  KC_LPRN,  KC_RPRN,  _______, 
294   KC_EXLM,  KC_AT,    KC_HASH,  KC_DLR,   KC_PERC,  _______, 
295   TD(GVTL), TD(LBCB), TD(RBCB), _______,  _______,  _______,
296             _______,  _______,  _______,  _______, 
297   // Right Thumb
298   _______,  _______,
299   _______,
300   _______,  _______,  _______
301 ),
302
303 /* Function layer
304 *  ,-----------------------------------------------------------------------------------------------------------.
305 *  |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |
306 *  `-----------------------------------------------------------------------------------------------------------'
307 *  ,-------------------------------------------.                   ,-------------------------------------------.
308 *  |   F12  |  F1  |  F2  |  F3  |  F4  |  F5  |                   |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
309 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
310 *  |        |      |      |  Up  |      |      |                   |      |      |  Up  |Ctrl+Y|      |        |
311 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
312 *  |        |Ctrl+A| Left | Down | Right|C+A+Tb|                   | PgUp | Right| Down | Left | Home |        |
313 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
314 *  |        |Ctrl+Z|Ctrl+X|Ctrl+C|Ctrl+V| Bspc |                   | PgDn | Mute | Vol- | Vol+ |  End |        |
315 *  `--------+------+------+------+------+------'                   `------+------+------+------+------+--------'
316 *           |      |      |      |      |                                 | Prev | Play | Next | Stop |
317 *           `---------------------------'                                 `---------------------------'
318 *                              ,---------------.                   ,---------------.
319 *                              |       |       |                   |       |       |
320 *                      ,-------|-------|-------|                   |-------+-------+-------.
321 *                      |       |       |       |                   |       |       |       |
322 *                      |       |       |-------|                   |-------|       |       |
323 *                      |       |       |       |                   |C+A+Tab|       |       |
324 *                      `-----------------------'                   `-----------------------' 
325 */
326 [_FUNCTION] = KEYMAP(
327   // Left Hand
328   _______, _______,    _______,    _______,    _______,    _______, _______, _______, _______,
329   KC_F12,  KC_F1,      KC_F2,      KC_F3,      KC_F4,      KC_F5,
330   _______, _______,    _______,    KC_UP,      _______,    _______, 
331   _______, LCTL(KC_A), KC_LEFT,    KC_DOWN,    KC_RGHT,    LCA(KC_TAB),
332   _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC,
333            _______,    _______,    _______,    _______,
334   // Left Thumb
335                                                _______,    _______,
336                                                            _______,
337                                    _______,    _______,    _______,
338   // Right Hand  
339   _______, _______,    _______,    _______,    _______,    _______, _______, _______, _______,
340   KC_F6,   KC_F7,      KC_F8,      KC_F9,      KC_F10,     KC_F11,
341   _______, _______,    KC_UP,      LCTL(KC_Y), _______,    _______,
342   KC_PGUP, KC_LEFT,    KC_DOWN,    KC_RGHT,    KC_HOME,    _______,
343   KC_PGDN, KC_MUTE,    KC_VOLD,    KC_VOLU,    KC_END,     _______,
344            KC_MPRV,    KC_MPLY,    KC_MNXT,    KC_MSTP,
345   // Right Thumb
346   _______,     _______,
347   _______,
348   LCA(KC_TAB), _______, _______
349 ),
350
351 [_FUNCTION2] = KEYMAP(
352   // Left Hand
353   _______, _______,    _______,    _______,    _______,    _______, _______, _______, _______,
354   KC_F12,  KC_F1,      KC_F2,      KC_F3,      KC_F4,      KC_F5,
355   _______, _______,    _______,    KC_UP,      _______,    _______, 
356   _______, LCTL(KC_A), KC_LEFT,    KC_DOWN,    KC_RGHT,    LCA(KC_TAB),
357   _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC,
358            _______,    _______,    _______,    _______,
359   // Left Thumb
360                                                _______,    _______,
361                                                            _______,
362                                    _______,    _______,    _______,
363   // Right Hand  
364   _______, _______,    _______,    _______,    _______,    _______, _______, _______, _______,
365   KC_F6,   KC_F7,      KC_F8,      KC_F9,      KC_F10,     KC_F11,
366   _______, _______,    KC_UP,      LCTL(KC_Y), _______,    _______,
367   KC_PGUP, KC_LEFT,    KC_DOWN,    KC_RGHT,    KC_HOME,    _______,
368   KC_PGDN, KC_MUTE,    KC_VOLD,    KC_VOLU,    KC_END,     _______,
369            KC_MPRV,    KC_MPLY,    KC_MNXT,    KC_MSTP,
370   // Right Thumb
371   _______,     _______,
372   _______,
373   LCA(KC_TAB), _______, _______
374 ),
375
376 /* Numpad layer
377 *  (Left side duplicates layout from the Numbers layer, just with numpad output; right side layout close to PC numpad layout)
378 *  ,-----------------------------------------------------------------------------------------------------------.
379 *  |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |
380 *  `-----------------------------------------------------------------------------------------------------------'
381 *  ,-------------------------------------------.                   ,-------------------------------------------.
382 *  |        | NumLk|      |      |      |      |                   |  Tab | NumLk| KP / |  kP *| KP - |        |
383 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
384 *  |        | KP 6 | KP 7 | KP 8 | KP 9 | KP 0 |                   |      | KP 7 | KP 8 | KP 9 | KP + |        |
385 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
386 *  |        | KP 1 | KP 2 | KP 3 | KP 4 | KP 5 |                   |      | KP 4 | KP 5 | KP 6 |  =   |        |
387 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
388 *  |        |      | KP . |KP/KP*| KP- _| KP+ =|                   |      | KP 1 | KP 2 | KP 3 |KP Ent|        |
389 *  `--------+------+------+------+------+------'                   `------+------+------+------+------+--------'
390 *           |   (  |   )  |  [ { |  ] } |                                 | KP 0 |  ,   | KP . |KP Ent|
391 *           `---------------------------'                                 `---------------------------'
392 *                              ,---------------.                   ,---------------.
393 *                              |       |       |                   |       |       |
394 *                      ,-------|-------|-------|                   |-------+-------+-------.
395 *                      |       |       |       |                   |       |       |       |
396 *                      |       |       |-------|                   |-------|       |       |
397 *                      |       |       |       |                   |       |       |       |
398 *                      `-----------------------'                   `-----------------------' 
399 */
400 [_NUMPAD] = KEYMAP(
401   // Left Hand
402   _______, _______, _______, _______,    _______,   _______, _______, _______, _______,
403   _______, KC_NLCK, _______, _______,    _______,   _______,
404   _______, KC_P6,   KC_P7,   KC_P8,      KC_P9,     KC_P0,
405   _______, KC_P1,   KC_P2,   KC_P3,      KC_P4,     KC_P5,
406   _______, _______, KC_PDOT, TD(PSLPAS), TD(PMNUN), TD(PPLEQ),
407            KC_LPRN, KC_RPRN, TD(LBCB),   TD(RBCB),
408   // Left Thumb
409                                          _______,   _______,
410                                                     _______,
411                              _______,    _______,   _______,
412   // Right Hand
413   _______, _______, _______, _______, _______, _______, _______, _______, _______,
414   KC_TAB,  KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______,
415   _______, KC_P7,   KC_P8,   KC_P9,   KC_PPLS, _______,
416   _______, KC_P4,   KC_P5,   KC_P6,   KC_EQL,  _______,
417   _______, KC_P1,   KC_P2,   KC_P3,   KC_PENT, _______,
418            KC_P0,   KC_COMM, KC_PDOT, KC_PENT,
419   // Right Thumb
420   _______, _______,
421   _______,
422   _______, _______, _______
423 ),
424
425 /* Colemak Mod-DH Matrix gaming/vanilla
426 *  (No access to Function or Numbers layers; mainly used for gaming; double-tap the TD(ADJ) above LAlt to access Adjust layer)
427 *  ,-----------------------------------------------------------------------------------------------------------.
428 *  | ESC |  F1 |  F2 |  F3 |  F4 |  F5 |  F6 |  F7 |  F8 |  F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
429 *  `-----------------------------------------------------------------------------------------------------------'
430 *  ,-------------------------------------------.                   ,-------------------------------------------.
431 *  |    =   |   1  |   2  |   3  |   4  |   5  |                   |   6  |   7  |   8  |   9  |   0  |   -    |
432 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
433 *  |   Tab  |   Q  |   W  |   F  |   P  |   B  |                   |   J  |   L  |   U  |   Y  |   ;  |   \    |
434 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
435 *  |  Ctrl  |   A  |   R  |   S  |   T  |   G  |                   |   M  |   N  |   E  |   I  |   O  |   '    |
436 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
437 *  |  Shift |   Z  |   X  |   C  |   D  |   V  |                   |   K  |   H  |   ,  |   .  |   /  |  Shift |
438 *  `--------+------+------+------+------+------'                   `------+------+------+------+------+--------'
439 *           |  Ins |   `  |   [  |   ]  |                                 | Left | Down |  Up  | Right|
440 *           `---------------------------'                                 `---------------------------'
441 *                              ,---------------.                   ,---------------.
442 *                              |Esc/Ctl|TD(ADJ)|                   |  RAlt |  RCtl |
443 *                      ,-------|-------|-------|                   |-------+-------+-------.
444 *                      |       |       |  LAlt |                   |  RGUI |       |       |
445 *                      | Space | Enter |-------|                   |-------| Delete|  Bspc |
446 *                      |       |       |  Bspc |                   |  Tab  |       |       |
447 *                      `-----------------------'                   `-----------------------' 
448 */
449 [_CMODDHGM] = KEYMAP(
450   // Left Hand
451   KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,
452   KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,
453   KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_B,
454   KC_LCTL, KC_A,    KC_R,    KC_S,    KC_T,    KC_G,
455   KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_D,    KC_V,
456            KC_INS,  KC_GRV,  KC_LBRC, KC_RBRC,
457   //Left Thumb
458                                       CTLESC,  TD(ADJ),
459                                                KC_LALT,
460                              KC_SPC,  KC_ENT,  KC_BSPC,
461   //Right Hand
462   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PSCR, KC_SLCK, KC_PAUS, TG(_NUMPAD), MO(_ADJUST),
463   KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
464   KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSLS,
465   KC_M,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT,
466   KC_K,    KC_H,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
467   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT,
468   //Right Thumb
469   KC_RALT, KC_RCTL,
470   KC_RGUI,
471   KC_TAB,  KC_DEL,  KC_BSPC
472 ),
473
474 /* QWERTY gaming/vanilla
475 *  (No access to Function or Numbers layers; mainly used for gaming; double-tap the TD(ADJ) above LAlt to access Adjust layer)
476 *  ,-----------------------------------------------------------------------------------------------------------.
477 *  | ESC |  F1 |  F2 |  F3 |  F4 |  F5 |  F6 |  F7 |  F8 |  F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
478 *  `-----------------------------------------------------------------------------------------------------------'
479 *  ,-------------------------------------------.                   ,-------------------------------------------.
480 *  |    =   |   1  |   2  |   3  |   4  |   5  |                   |   6  |   7  |   8  |   9  |   0  |   -    |
481 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
482 *  |   Tab  |   Q  |   W  |   E  |   R  |   T  |                   |   Y  |   U  |   I  |   O  |   P  |   \    |
483 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
484 *  |  Ctrl  |   A  |   S  |   D  |   F  |   G  |                   |   H  |   J  |   K  |   L  |   ;  |   '    |
485 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
486 *  |  Shift |   Z  |   X  |   C  |   V  |   B  |                   |   N  |   M  |   ,  |   .  |   /  |  Shift |
487 *  `--------+------+------+------+------+------'                   `------+------+------+------+------+--------'
488 *           |  Ins |   `  |   [  |   ]  |                                 | Left | Down |  Up  | Right|
489 *           `---------------------------'                                 `---------------------------'
490 *                              ,---------------.                   ,---------------.
491 *                              |Esc/Ctl|TD(ADJ)|                   |  RAlt |  RCtl |
492 *                      ,-------|-------|-------|                   |-------+-------+-------.
493 *                      |       |       |  LAlt |                   |  RGUI |       |       |
494 *                      | Space | Enter |-------|                   |-------| Delete|  Bspc |
495 *                      |       |       |  Bspc |                   |  Tab  |       |       |
496 *                      `-----------------------'                   `-----------------------' 
497 */
498 [_QWERTYGM] = KEYMAP(
499   // Left Hand
500   KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,
501   KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,
502   KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,
503   KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,
504   KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,
505            KC_INS,  KC_GRV,  KC_LBRC, KC_RBRC,
506   //Left Thumb
507                                       CTLESC,  TD(ADJ),
508                                                KC_LALT,
509                              KC_SPC,  KC_ENT,  KC_BSPC,
510   //Right Hand
511   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PSCR, KC_SLCK, KC_PAUS, TG(_NUMPAD), MO(_ADJUST),
512   KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
513   KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSLS,
514   KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
515   KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
516   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT,
517   //Right Thumb
518   KC_RALT, KC_RCTL,
519   KC_RGUI,
520   KC_TAB,  KC_DEL,  KC_BSPC
521 ),
522
523 /* Adjust layer
524 *  (Enter/Number + Delete/Number2 under non-gaming/vanilla layers)
525 *  ,-----------------------------------------------------------------------------------------------------------.
526 *  |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |
527 *  `-----------------------------------------------------------------------------------------------------------'
528 *  ,-------------------------------------------.                   ,-------------------------------------------.
529 *  |        |CModDH|Qwerty|Colmak|CMoDGM| QWGM |                   |Numpad|      |      |      |      | RESET  |
530 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
531 *  |        |      |      |      |      |      |                   |      |      |      |      |      |        |
532 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
533 *  |        |      |      |      |      |      |                   |      |NKROTG|      |      |      |        |
534 *  |--------+------+------+------+------+------|                   |------+------+------+------+------+--------|
535 *  |        |      |      |      |      |      |                   |      |      |      |      |      |        |
536 *  `--------+------+------+------+------+------'                   `------+------+------+------+------+--------'
537 *           |      |      |      |      |                                 |      |      |      |      |
538 *           `---------------------------'                                 `---------------------------'
539 *                              ,---------------.                   ,---------------.
540 *                              |       |       |                   |       |       |
541 *                      ,-------|-------|-------|                   |-------+-------+-------.
542 *                      |       |       |       |                   |       |       |       |
543 *                      |       |       |-------|                   |-------|       |       |
544 *                      |       |       |       |                   |       |       |       |
545 *                      `-----------------------'                   `-----------------------' 
546 */
547 [_ADJUST] = KEYMAP(
548   // Left Hand
549   _______, _______, _______, _______, _______,  _______,  _______, _______, _______,
550   _______, CMODDH,  QWERTY,  COLEMAK, CMODDHGM, QWERTYGM,
551   _______, _______, _______, _______, _______,  _______,
552   _______, _______, _______, _______, _______,  _______,
553   _______, _______, _______, _______, _______,  _______,
554            _______, _______, _______, _______,
555   // Left Thumb
556                                       _______,  _______,
557                                                 _______,
558                              _______, _______,  _______,
559   // Right Hand
560   _______,     _______, _______, _______, _______,  _______,  _______, _______, _______,
561   TG(_NUMPAD), _______, _______, _______, _______,  RESET,
562   _______,     _______, _______, _______, _______,  _______,
563   _______,     NKROTG,  _______, _______, _______,  _______,
564   _______,     _______, _______, _______, _______,  _______,
565                _______, _______, _______, _______, 
566   // Right Thumb
567   _______, _______,
568   _______,
569   _______, _______, _______
570 )
571
572 };
573
574 uint32_t layer_state_set_user(uint32_t state) {
575   return update_tri_layer_state(state, _NUMBERS, _NUMBERS2, _ADJUST);
576 }
577
578 void persistent_default_layer_set(uint16_t default_layer) {
579   eeconfig_update_default_layer(default_layer);
580   default_layer_set(default_layer);
581 }
582
583 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
584   switch (keycode) {
585     case CMODDH:
586       if (record->event.pressed) {
587         persistent_default_layer_set(1UL << _CMODDH);
588         layer_off ( _QWERTY);
589         layer_off ( _COLEMAK);
590         layer_off ( _NUMBERS);
591         layer_off ( _NUMBERS2);
592         layer_off ( _FUNCTION);
593         layer_off ( _FUNCTION2);
594         layer_off ( _NUMPAD);
595         layer_off ( _CMODDHGM);
596         layer_off ( _QWERTYGM);
597         layer_off ( _ADJUST);
598       }
599       return false;
600       break;
601     case QWERTY:
602       if (record->event.pressed) {
603         persistent_default_layer_set(1UL << _QWERTY);
604         layer_off ( _CMODDH);
605         layer_off ( _COLEMAK);
606         layer_off ( _NUMBERS);
607         layer_off ( _NUMBERS2);
608         layer_off ( _FUNCTION);
609         layer_off ( _FUNCTION2);
610         layer_off ( _NUMPAD);
611         layer_off ( _CMODDHGM);
612         layer_off ( _QWERTYGM);
613         layer_off ( _ADJUST);
614       }
615       return false;
616       break;
617     case COLEMAK:
618       if (record->event.pressed) {
619         persistent_default_layer_set(1UL << _COLEMAK);
620         layer_off ( _CMODDH);
621         layer_off ( _QWERTY);
622         layer_off ( _NUMBERS);
623         layer_off ( _NUMBERS2);
624         layer_off ( _FUNCTION);
625         layer_off ( _FUNCTION2);
626         layer_off ( _NUMPAD);
627         layer_off ( _CMODDHGM);
628         layer_off ( _QWERTYGM);
629         layer_off ( _ADJUST);
630       }
631       return false;
632       break;
633     case CMODDHGM:
634       if (record->event.pressed) {
635         default_layer_set(1UL << _CMODDHGM);
636         layer_off ( _CMODDH);
637         layer_off ( _QWERTY);
638         layer_off ( _COLEMAK);
639         layer_off ( _NUMBERS);
640         layer_off ( _NUMBERS2);
641         layer_off ( _FUNCTION);
642         layer_off ( _FUNCTION2);
643         layer_off ( _NUMPAD);
644         layer_off ( _QWERTYGM);
645         layer_off ( _ADJUST);
646       }
647       return false;
648       break;
649     case QWERTYGM:
650       if (record->event.pressed) {
651         default_layer_set(1UL << _QWERTYGM);
652         layer_off ( _CMODDH);
653         layer_off ( _QWERTY);
654         layer_off ( _COLEMAK);
655         layer_off ( _NUMBERS);
656         layer_off ( _NUMBERS2);
657         layer_off ( _FUNCTION);
658         layer_off ( _FUNCTION2);
659         layer_off ( _NUMPAD);
660         layer_off ( _CMODDHGM);
661         layer_off ( _ADJUST);
662       }
663       return false;
664       break;
665   }
666   return true;
667 }