]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c
c42b551084049d6e6642c9c085fad7c44994588e
[qmk_firmware.git] / keyboards / ergodox_ez / keymaps / hacker_dvorak / keymap.c
1 #include QMK_KEYBOARD_H
2 #include "keymap_dvorak.h"
3 #include "sendstring_dvorak.h"
4 #include "keymap_plover.h"
5 #include "keymap_plover_dvorak.h"
6
7
8 #define SCTL(kc) LSFT(LCTL(kc))
9
10 // Layers
11 enum layers {
12     DVORAK_US = 0,
13     PLOVER_US,
14     GAMING_US,
15     ARROWS_US,
16     MOUSE_US,
17     NUMPAD_US,
18     LAYERS_US,
19     DVORAK_DV,
20     PLOVER_DV,
21     GAMING_DV,
22     ARROWS_DV,
23     MOUSE_DV,
24     NUMPAD_DV,
25     LAYERS_DV,
26     MEDIA_FN,
27     HYPER_FN,
28     MEH_FN,
29     MEH_FN_PLUS,
30     FIRMWARE
31 };
32
33 int CAPS_LOCK   = 0;
34 int NUM_LOCK    = 0;
35 int SCROLL_LOCK = 0;
36
37 enum tap_dances {
38     TD_ESC_CAPS = 0
39 };
40
41 qk_tap_dance_action_t tap_dance_actions[] = {
42     [TD_ESC_CAPS]  = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CLCK)
43 };
44
45
46 enum custom_keycodes {
47     PLACEHOLDER = SAFE_RANGE, // can always be here
48     RGB_GREEN  // to set default RGB layer as green once
49 };
50
51 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
52     /*
53      * ,--------------------------------------------------.    ,--------------------------------------------------.
54      * |    0   |   1  |   2  |   3  |   4  |   5  |  6   |    |  38  |  39  |  40  |  41  |  42  |  43  |   44   |
55      * |--------+------+------+------+------+------+------|    |------+------+------+------+------+------+--------|
56      * |    7   |   8  |   9  |  10  |  11  |  12  |  13  |    |  45  |  46  |  47  |  48  |  49  |  50  |   51   |
57      * |--------+------+------+------+------+------|      |    |      |------+------+------+------+------+--------|
58      * |   14   |  15  |  16  |  17  |  18  |  19  |------|    |------|  52  |  53  |  54  |  55  |  56  |   57   |
59      * |--------+------+------+------+------+------|  26  |    |  58  |------+------+------+------+------+--------|
60      * |   20   |  21  |  22  |  23  |  24  |  25  |      |    |      |  59  |  60  |  61  |  62  |  63  |   64   |
61      * `--------+------+------+------+------+-------------'    `-------------+------+------+------+------+--------'
62      *   |  27  |  28  |  29  |  30  |  31  |                                |  65  |  66  |  67  |  68  |  69  |
63      *   `----------------------------------'                                `----------------------------------'
64      *                                       ,-------------.  ,-------------.
65      *                                       |  32  |  33  |  |  70  |  71  |
66      *                                ,------+------+------|  |------+------+------.
67      *                                |      |      |  34  |  |  72  |      |      |
68      *                                |  35  |  36  |------|  |------|  74  |  75  |
69      *                                |      |      |  37  |  |  73  |      |      |
70      *                                `--------------------'  `--------------------'
71      */
72     [DVORAK_US] = LAYOUT_ergodox(
73         // left hand
74         KC_ESC,     KC_LABK,         KC_LCBR,         KC_LBRC,             KC_LPRN,             KC_EXLM, KC_AMPR,
75         KC_TAB,     KC_QUOT,         SCMD_T(KC_COMM), MEH_T(KC_DOT),       ALL_T(KC_P),         KC_Y,    KC_AT,
76         KC_EQL,     CTL_T(KC_A),     SFT_T(KC_O),     LT(NUMPAD_US, KC_E), LT(ARROWS_US, KC_U), KC_I,
77         KC_BSLS,    ALGR_T(KC_SCLN), ALT_T(KC_Q),     LT(MEDIA_FN, KC_J),  GUI_T(KC_K),         KC_X,    KC_PERC,
78         MO(MEH_FN), TG(LAYERS_US),   KC_CIRC,         KC_PLUS,             KC_COLN,
79
80         // left thumb
81                 KC_LEFT, KC_RGHT,
82                          KC_HOME,
83         KC_SPC, KC_BSPC, KC_END,
84
85         // right hand
86         KC_PIPE, KC_QUES, KC_RPRN,            KC_RBRC,            KC_RCBR,      KC_RABK,       KC_ASTR,
87         KC_HASH, KC_F,    ALL_T(KC_G),        MEH_T(KC_C),        SCMD_T(KC_R), KC_L,          KC_SLSH,
88                  KC_D,    LT(MOUSE_US, KC_H), LT(HYPER_FN, KC_T), SFT_T(KC_N),  CTL_T(KC_S),   KC_MINS,
89         KC_DLR,  KC_B,    GUI_T(KC_M),        LT(MEDIA_FN, KC_W), ALT_T(KC_V),  ALGR_T(KC_Z),  KC_GRV,
90                           KC_DQUO,            KC_UNDS,            KC_TILD,      TG(DVORAK_DV), MO(MEH_FN_PLUS),
91
92         // right thumb
93         KC_UP,   KC_DOWN,
94         KC_PGUP,
95         KC_PGDN, KC_DEL,  KC_ENT
96     ),
97
98     [PLOVER_US] = LAYOUT_ergodox(
99         // left hand
100         XXXXXXX,    XXXXXXX,       KC_MS_BTN2, KC_MS_UP,   KC_MS_BTN1,  KC_MS_BTN3, GUI_T(KC_NO),
101         KC_ESC,     KC_MS_BTN4,    KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_BTN5, PV_NUM,
102         KC_TAB,     PV_LS,         PV_LT,      PV_LP,      PV_LH,       PV_STAR,
103         KC_CLCK,    PV_LS,         PV_LK,      PV_LW,      PV_LR,       PV_STAR,    PV_STAR,
104         MO(MEH_FN), TG(LAYERS_US), PV_NUM,     PV_NUM,     PV_NUM,
105
106         // left thumb
107               KC_SPACE, KC_BSPACE,
108                         KC_HOME,
109         PV_A, PV_O,     KC_END,
110
111         // right hand
112         KC_MS_ACCEL2, KC_MS_ACCEL1,  KC_MS_ACCEL0, KC_UP,   KC_APPLICATION, XXXXXXX,        KC_MS_WH_UP,
113         PV_NUM,       KC_MS_WH_LEFT, KC_LEFT,      KC_DOWN, KC_RIGHT,       KC_MS_WH_RIGHT, KC_MS_WH_DOWN,
114                       PV_STAR,       PV_RF,        PV_RP,   PV_RL,          PV_RT,          PV_RD,
115         PV_STAR,      PV_STAR,       PV_RR,        PV_RB,   PV_RG,          PV_RS,          PV_RZ,
116                                      PV_NUM,       PV_NUM,  PV_NUM,         PV_NUM,         MO(MEH_FN_PLUS),
117
118         // right thumb
119         KC_DELETE, KC_ENTER,
120         KC_PGUP,
121         KC_PGDOWN, PV_E,     PV_U
122     ),
123
124     [GAMING_US] = LAYOUT_ergodox(
125         // left hand
126         KC_ESCAPE,            GUI_T(KC_MINS), KC_I,     KC_O,   KC_P,   ALGR_T(KC_EQL), KC_T,
127         KC_TAB,               KC_LALT,        KC_Q,     KC_W,   KC_E,   ALL_T(KC_R),    KC_G,
128         LT(MOUSE_US, KC_GRV), KC_LCTRL,       KC_A,     KC_S,   KC_D,   MEH_T(KC_F),
129         KC_BSLS,              KC_LSHIFT,      KC_Z,     KC_X,   KC_C,   SCMD_T(KC_V),   KC_M,
130         MO(MEH_FN),           TG(LAYERS_US),  KC_COMM, KC_DOT, KC_LBRC,
131
132         // left thumb
133                    MO(MEDIA_FN), KC_NLCK,
134                                  KC_SCLN,
135          KC_SPACE, KC_ENTER,     KC_BSPACE,
136
137         // right hand
138         KC_QUOT,       KC_Y,       KC_K,        KC_U,        KC_KP_7, KC_KP_8,  KC_KP_9,
139         KC_MS_WH_UP,   KC_H,       KC_J,        KC_L,        KC_KP_4, KC_KP_2,  KC_KP_6,
140                        KC_B,       KC_MS_UP,    KC_N,        KC_KP_1, KC_KP_5,  KC_KP_3,
141         KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN,  KC_MS_RIGHT, KC_UP,   KC_KP_0,  KC_SLASH,
142                                    KC_RBRC,     KC_LEFT,     KC_DOWN, KC_RIGHT, MO(MEH_FN_PLUS),
143
144         // right thumb
145         KC_MS_BTN5, MO(HYPER_FN),
146         KC_MS_BTN4,
147         KC_MS_BTN3, KC_MS_BTN2,   KC_MS_BTN1
148     ),
149
150     [ARROWS_US] = LAYOUT_ergodox(
151         // left hand
152         XXXXXXX, XXXXXXX,       XXXXXXX,      XXXXXXX,      XXXXXXX,    XXXXXXX, XXXXXXX,
153         XXXXXXX, SCMD_T(KC_NO), MEH_T(KC_NO), ALL_T(KC_NO), XXXXXXX,    XXXXXXX, XXXXXXX,
154         XXXXXXX, KC_LCTRL,      KC_LSHIFT,    XXXXXXX,      _______,    XXXXXXX,
155         XXXXXXX, KC_RALT,       KC_LALT,      GUI_T(KC_NO), XXXXXXX,    XXXXXXX, XXXXXXX,
156         XXXXXXX, XXXXXXX,       XXXXXXX,      XXXXXXX,      XXXXXXX,
157
158         // left thumb
159                   XXXXXXX,   XXXXXXX,
160                              KC_HOME,
161         KC_SPACE, KC_BSPACE, KC_END,
162
163         // right hand
164         LGUI(KC_X), XXXXXXX,       LCTL(KC_X), KC_MS_WH_UP,   XXXXXXX,       XXXXXXX,        XXXXXXX,
165         LGUI(KC_C), XXXXXXX,       LCTL(KC_C), KC_UP,         SCTL(KC_C),    LCTL(KC_Z),     LGUI(KC_Z),
166                     KC_MS_WH_LEFT, KC_LEFT,    KC_DOWN,       KC_RIGHT,      KC_MS_WH_RIGHT, KC_APPLICATION,
167         LGUI(KC_V), XXXXXXX,       LCTL(KC_V), KC_MS_WH_DOWN, SCTL(KC_V),    LCTL(KC_Y),     SGUI(KC_Z),
168         XXXXXXX,    XXXXXXX,       XXXXXXX,    XXXXXXX,       KC_SLCK,
169
170         // right thumb
171         XXXXXXX,   XXXXXXX,
172         KC_PGUP,
173         KC_PGDOWN, KC_DELETE, KC_ENTER
174     ),
175
176     [MOUSE_US] = LAYOUT_ergodox(
177         // left hand
178         XXXXXXX,       XXXXXXX,       XXXXXXX,    KC_MS_WH_UP,   LCTL(KC_X),  XXXXXXX,        LGUI(KC_X),
179         LGUI(KC_Z),    LCTL(KC_Z),    SCTL(KC_C), KC_MS_UP,      LCTL(KC_C),  KC_MS_BTN4,     LGUI(KC_C),
180         KC_MS_BTN3,    KC_MS_WH_LEFT, KC_MS_LEFT, KC_MS_DOWN,    KC_MS_RIGHT, KC_MS_WH_RIGHT,
181         LGUI(KC_Z),    LCTL(KC_Y),    SCTL(KC_V), KC_MS_WH_DOWN, LCTL(KC_V),  KC_MS_BTN5,     LGUI(KC_V),
182         KC_SLCK, XXXXXXX,       XXXXXXX,    XXXXXXX,       XXXXXXX,
183
184         // left thumb
185                     XXXXXXX,    XXXXXXX,
186                                 XXXXXXX,
187         KC_MS_BTN1, KC_MS_BTN2, XXXXXXX,
188
189         // right hand
190         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,      XXXXXXX,      XXXXXXX,       XXXXXXX,
191         XXXXXXX, XXXXXXX, XXXXXXX, ALL_T(KC_NO), MEH_T(KC_NO), SCMD_T(KC_NO), XXXXXXX,
192                  XXXXXXX, _______, KC_MS_ACCEL1, KC_LSHIFT,    KC_LCTRL,      KC_MS_ACCEL2,
193         XXXXXXX, XXXXXXX, XXXXXXX, GUI_T(KC_NO), KC_LALT,      KC_RALT,       XXXXXXX,
194                           XXXXXXX, XXXXXXX,      XXXXXXX,      XXXXXXX,       XXXXXXX,
195
196         // right thumb
197         XXXXXXX, XXXXXXX,
198         XXXXXXX,
199         XXXXXXX, XXXXXXX, KC_MS_ACCEL0
200     ),
201
202     [NUMPAD_US] = LAYOUT_ergodox(
203         // left hand
204         XXXXXXX, XXXXXXX,  XXXXXXX,      XXXXXXX, XXXXXXX,       XXXXXXX, XXXXXXX,
205         XXXXXXX, XXXXXXX,  GUI_T(KC_NO), XXXXXXX, ALL_T(KC_NO),  XXXXXXX, XXXXXXX,
206         _______, KC_LCTRL, KC_LSHIFT,    _______, MEH_T(KC_NO),  XXXXXXX,
207         XXXXXXX, KC_RALT,  KC_LALT,      XXXXXXX, SCMD_T(KC_NO), XXXXXXX, XXXXXXX,
208         XXXXXXX, XXXXXXX,  XXXXXXX,      XXXXXXX, XXXXXXX,
209
210         // left thumb
211                   XXXXXXX,   XXXXXXX,
212                              KC_HOME,
213         KC_SPACE, KC_BSPACE, KC_END,
214
215         // right hand
216         KC_X, KC_A, KC_B,   KC_C, KC_D,     KC_E,    KC_F,
217         KC_O, KC_I, KC_1,   KC_2, KC_3,     KC_SLSH, KC_PERC,
218               KC_M, KC_4,   KC_5, KC_6,     KC_PLUS, KC_MINS,
219         KC_L, KC_J, KC_7,   KC_8, KC_9,     KC_ASTR, KC_CIRC,
220                     KC_DOT, KC_0, KC_COMM, KC_UNDS,  KC_BSLS,
221
222         // right thumb
223         XXXXXXX,   XXXXXXX,
224         KC_PGUP,
225         KC_PGDOWN, KC_DELETE, KC_ENTER
226     ),
227
228     [LAYERS_US] = LAYOUT_ergodox(
229         // left hand
230         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
231         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
232         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
233         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
234         XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
235
236         // left thumb
237                  XXXXXXX, XXXXXXX,
238                           XXXXXXX,
239         XXXXXXX, XXXXXXX, XXXXXXX,
240
241         // right hand
242         XXXXXXX, XXXXXXX, XXXXXXX,       XXXXXXX,       XXXXXXX,       XXXXXXX, XXXXXXX,
243         XXXXXXX, XXXXXXX, XXXXXXX,       XXXXXXX,       XXXXXXX,       XXXXXXX, XXXXXXX,
244                  XXXXXXX, TO(DVORAK_US), TO(PLOVER_US), TO(GAMING_US), XXXXXXX, XXXXXXX,
245         XXXXXXX, XXXXXXX, XXXXXXX,       XXXXXXX,       XXXXXXX,       XXXXXXX, XXXXXXX,
246                           XXXXXXX,       XXXXXXX,       XXXXXXX,       XXXXXXX, XXXXXXX,
247
248         // right thumb
249         XXXXXXX, XXXXXXX,
250         XXXXXXX,
251         XXXXXXX, XXXXXXX, XXXXXXX
252     ),
253
254     [DVORAK_DV] = LAYOUT_ergodox(
255         // left hand
256         KC_ESC,     DV_LABK,         DV_LCBR,         DV_LBRC,             DV_LPRN,             DV_EXLM, DV_AMPR,
257         KC_TAB,     DV_QUOT,         SCMD_T(DV_COMM), MEH_T(DV_DOT),       ALL_T(DV_P),         DV_Y,    DV_AT,
258         DV_EQL,     CTL_T(DV_A),     SFT_T(DV_O),     LT(NUMPAD_DV, DV_E), LT(ARROWS_DV, DV_U), DV_I,
259         DV_BSLS,    ALGR_T(DV_SCLN), ALT_T(DV_Q),     LT(MEDIA_FN, DV_J),  GUI_T(DV_K),         DV_X,    DV_PERC,
260         MO(MEH_FN), TG(LAYERS_DV),   DV_CIRC,         DV_PLUS,             DV_COLN,
261
262         // left thumb
263                 KC_LEFT, KC_RGHT,
264                          KC_HOME,
265         KC_SPC, KC_BSPC, KC_END,
266
267         // right hand
268         DV_PIPE, DV_QUES, DV_RPRN,            DV_RBRC,            DV_RCBR,      DV_RABK,      DV_ASTR,
269         DV_HASH, DV_F,    ALL_T(DV_G),        MEH_T(DV_C),        SCMD_T(DV_R), DV_L,         DV_SLSH,
270                  DV_D,    LT(MOUSE_DV, DV_H), LT(HYPER_FN, DV_T), SFT_T(DV_N),  CTL_T(DV_S),  DV_MINS,
271         DV_DLR,  DV_B,    GUI_T(DV_M),        LT(MEDIA_FN, DV_W), ALT_T(DV_V),  ALGR_T(DV_Z), DV_GRV,
272                           DV_DQUO,            DV_UNDS,            DV_TILD,      _______,      MO(MEH_FN_PLUS),
273
274         // right thumb
275         KC_UP,   KC_DOWN,
276         KC_PGUP,
277         KC_PGDN, KC_DEL,  KC_ENT
278     ),
279
280     [PLOVER_DV] = LAYOUT_ergodox(
281         // left hand
282         XXXXXXX,    XXXXXXX,       KC_MS_BTN2, KC_MS_UP,   KC_MS_BTN1,  KC_MS_BTN3, GUI_T(KC_NO),
283         KC_ESC,     KC_MS_BTN4,    KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_BTN5, PD_NUM,
284         KC_TAB,     PD_LS,         PD_LT,      PD_LP,      PD_LH,       PD_STAR,
285         KC_CLCK,    PD_LS,         PD_LK,      PD_LW,      PD_LR,       PD_STAR,    PD_STAR,
286         MO(MEH_FN), TG(LAYERS_DV), PD_NUM,     PD_NUM,     PD_NUM,
287
288         // left thumb
289               KC_SPACE, KC_BSPACE,
290                         KC_HOME,
291         PD_A, PD_O,     KC_END,
292
293         // right hand
294         KC_MS_ACCEL2, KC_MS_ACCEL1,  KC_MS_ACCEL0, KC_UP,   KC_APPLICATION, XXXXXXX,        KC_MS_WH_UP,
295         PD_NUM,       KC_MS_WH_LEFT, KC_LEFT,      KC_DOWN, KC_RIGHT,       KC_MS_WH_RIGHT, KC_MS_WH_DOWN,
296                       PD_STAR,       PD_RF,        PD_RP,   PD_RL,          PD_RT,          PD_RD,
297         PD_STAR,      PD_STAR,       PD_RR,        PD_RB,   PD_RG,          PD_RS,          PD_RZ,
298                                      PD_NUM,       PD_NUM,  PD_NUM,         PD_NUM,         MO(MEH_FN_PLUS),
299
300         // right thumb
301         KC_DELETE, KC_ENTER,
302         KC_PGUP,
303         KC_PGDOWN, PD_E,     PD_U
304     ),
305
306     [GAMING_DV] = LAYOUT_ergodox(
307         // left hand
308         KC_ESCAPE,            GUI_T(DV_MINS), DV_I,    DV_O,   DV_P,    ALGR_T(DV_EQL), DV_T,
309         KC_TAB,               KC_LALT,        DV_Q,    DV_W,   DV_E,    ALL_T(DV_R),    DV_G,
310         LT(MOUSE_DV, DV_GRV), KC_LCTRL,       DV_A,    DV_S,   DV_D,    MEH_T(DV_F),
311         DV_BSLS,              KC_LSHIFT,      DV_Z,    DV_X,   DV_C,    SCMD_T(DV_V),   DV_M,
312         MO(MEH_FN),           TG(LAYERS_DV),  DV_COMM, DV_DOT, DV_LBRC,
313
314         // left thumb
315                    MO(MEDIA_FN), KC_NLCK,
316                                  DV_SCLN,
317          KC_SPACE, KC_ENTER,     KC_BSPACE,
318
319         // right hand
320         DV_QUOT,       DV_Y,       DV_K,       DV_U,        KC_KP_7, KC_KP_8,  KC_KP_9,
321         KC_MS_WH_UP,   DV_H,       DV_J,       DV_L,        KC_KP_4, KC_KP_2,  KC_KP_6,
322                        DV_B,       KC_MS_UP,   DV_N,        KC_KP_1, KC_KP_5,  KC_KP_3,
323         KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_UP,   KC_KP_0,  DV_SLSH,
324                                    DV_RBRC,    KC_LEFT,     KC_DOWN, KC_RIGHT, MO(MEH_FN_PLUS),
325
326         // right thumb
327         KC_MS_BTN5, MO(HYPER_FN),
328         KC_MS_BTN4,
329         KC_MS_BTN3, KC_MS_BTN2,   KC_MS_BTN1
330     ),
331
332     [ARROWS_DV] = LAYOUT_ergodox(
333         // left hand
334         XXXXXXX, XXXXXXX,       XXXXXXX,      XXXXXXX,      XXXXXXX, XXXXXXX, XXXXXXX,
335         XXXXXXX, SCMD_T(KC_NO), MEH_T(KC_NO), ALL_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
336         XXXXXXX, KC_LCTRL,      KC_LSHIFT,    XXXXXXX,      _______, XXXXXXX,
337         XXXXXXX, KC_RALT,       KC_LALT,      GUI_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
338         XXXXXXX, XXXXXXX,       XXXXXXX,      XXXXXXX,      XXXXXXX,
339
340         // left thumb
341                   XXXXXXX,   XXXXXXX,
342                              KC_HOME,
343         KC_SPACE, KC_BSPACE, KC_END,
344
345         // right hand
346         LGUI(DV_X), XXXXXXX,       LCTL(DV_X), KC_MS_WH_UP,   XXXXXXX,       XXXXXXX,        XXXXXXX,
347         LGUI(DV_C), XXXXXXX,       LCTL(DV_C), KC_UP,         SCTL(DV_C),    LCTL(DV_Z),     LGUI(DV_Z),
348                     KC_MS_WH_LEFT, KC_LEFT,    KC_DOWN,       KC_RIGHT,      KC_MS_WH_RIGHT, KC_APPLICATION,
349         LGUI(DV_V), XXXXXXX,       LCTL(DV_V), KC_MS_WH_DOWN, SCTL(DV_V),    LCTL(DV_Y),     SGUI(DV_Z),
350         XXXXXXX,    XXXXXXX,       XXXXXXX,    XXXXXXX,       KC_SLCK,
351
352         // right thumb
353         XXXXXXX,   XXXXXXX,
354         KC_PGUP,
355         KC_PGDOWN, KC_DELETE, KC_ENTER
356     ),
357
358     [MOUSE_DV] = LAYOUT_ergodox(
359         // left hand
360         XXXXXXX,       XXXXXXX,       XXXXXXX,    KC_MS_WH_UP,   LCTL(DV_X),  XXXXXXX,        LGUI(DV_X),
361         LGUI(DV_Z),    LCTL(DV_Z),    SCTL(DV_C), KC_MS_UP,      LCTL(DV_C),  KC_MS_BTN4,     LGUI(DV_C),
362         KC_MS_BTN3,    KC_MS_WH_LEFT, KC_MS_LEFT, KC_MS_DOWN,    KC_MS_RIGHT, KC_MS_WH_RIGHT,
363         LGUI(DV_Z),    LCTL(DV_Y),    SCTL(DV_V), KC_MS_WH_DOWN, LCTL(DV_V),  KC_MS_BTN5,     LGUI(DV_V),
364         KC_SLCK, XXXXXXX,       XXXXXXX,    XXXXXXX,       XXXXXXX,
365
366         // left thumb
367                     XXXXXXX,    XXXXXXX,
368                                 XXXXXXX,
369         KC_MS_BTN1, KC_MS_BTN2, XXXXXXX,
370
371         // right hand
372         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,      XXXXXXX,      XXXXXXX,       XXXXXXX,
373         XXXXXXX, XXXXXXX, XXXXXXX, ALL_T(KC_NO), MEH_T(KC_NO), SCMD_T(KC_NO), XXXXXXX,
374                  XXXXXXX, _______, KC_MS_ACCEL1, KC_LSHIFT,    KC_LCTRL,      KC_MS_ACCEL2,
375         XXXXXXX, XXXXXXX, XXXXXXX, GUI_T(KC_NO), KC_LALT,      KC_RALT,       XXXXXXX,
376                           XXXXXXX, XXXXXXX,      XXXXXXX,      XXXXXXX,       XXXXXXX,
377
378         // right thumb
379         XXXXXXX, XXXXXXX,
380         XXXXXXX,
381         XXXXXXX, XXXXXXX, KC_MS_ACCEL0
382     ),
383
384     [NUMPAD_DV] = LAYOUT_ergodox(
385         // left hand
386         XXXXXXX, XXXXXXX,  XXXXXXX,      XXXXXXX, XXXXXXX,       XXXXXXX, XXXXXXX,
387         XXXXXXX, XXXXXXX,  GUI_T(KC_NO), XXXXXXX, ALL_T(KC_NO),  XXXXXXX, XXXXXXX,
388         _______, KC_LCTRL, KC_LSHIFT,    _______, MEH_T(KC_NO),  XXXXXXX,
389         XXXXXXX, KC_RALT,  KC_LALT,      XXXXXXX, SCMD_T(KC_NO), XXXXXXX, XXXXXXX,
390         XXXXXXX, XXXXXXX,  XXXXXXX,      XXXXXXX, XXXXXXX,
391
392         // left thumb
393                   XXXXXXX,   XXXXXXX,
394                              KC_HOME,
395         KC_SPACE, KC_BSPACE, KC_END,
396
397         // right hand
398         DV_X, DV_A, DV_B,   DV_C, DV_D,    DV_E,    DV_F,
399         DV_O, DV_I, DV_1,   DV_2, DV_3,    DV_SLSH, DV_PERC,
400               DV_M, DV_4,   DV_5, DV_6,    DV_PLUS, DV_MINS,
401         DV_L, DV_J, DV_7,   DV_8, DV_9,    DV_ASTR, DV_CIRC,
402                     DV_DOT, DV_0, DV_COMM, DV_UNDS, DV_BSLS,
403
404         // right thumb
405         XXXXXXX,   XXXXXXX,
406         KC_PGUP,
407         KC_PGDOWN, KC_DELETE, KC_ENTER
408     ),
409
410     [LAYERS_DV] = LAYOUT_ergodox(
411         // left hand
412         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
413         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
414         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
415         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
416         XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
417
418         // left thumb
419                  XXXXXXX, XXXXXXX,
420                           XXXXXXX,
421         XXXXXXX, XXXXXXX, XXXXXXX,
422
423         // right hand
424         XXXXXXX, XXXXXXX, XXXXXXX,       XXXXXXX,       XXXXXXX,       XXXXXXX, XXXXXXX,
425         XXXXXXX, XXXXXXX, XXXXXXX,       XXXXXXX,       XXXXXXX,       XXXXXXX, XXXXXXX,
426                  XXXXXXX, TO(DVORAK_DV), TO(PLOVER_DV), TO(GAMING_DV), XXXXXXX, XXXXXXX,
427         XXXXXXX, XXXXXXX, XXXXXXX,       XXXXXXX,       XXXXXXX,       XXXXXXX, XXXXXXX,
428                           XXXXXXX,       XXXXXXX,       XXXXXXX,       XXXXXXX, XXXXXXX,
429
430         // right thumb
431         XXXXXXX, XXXXXXX,
432         XXXXXXX,
433         XXXXXXX, XXXXXXX, XXXXXXX
434     ),
435
436     [MEDIA_FN] = LAYOUT_ergodox(
437         // left hand
438         KC_AUDIO_VOL_DOWN,   KC_AUDIO_MUTE, RGB_TOG,    XXXXXXX, KC_MAIL,      KC_FIND, KC_WWW_REFRESH,
439         KC_MEDIA_PREV_TRACK, KC_F9,         KC_F7,      KC_F5,   KC_F3,        KC_F1,   KC_WWW_HOME,
440         KC_PAUSE,            KC_F19,        KC_F17,     KC_F15,  KC_F13,       KC_F11,
441         RGB_HUD,             XXXXXXX,       XXXXXXX,    _______, KC_F23,       KC_F21,  KC_WWW_BACK,
442         RGB_VAD,             KC_CLCK,       KC_PSCREEN, XXXXXXX, MO(FIRMWARE),
443
444         // left thumb
445                  _______, XXXXXXX,
446                           XXXXXXX,
447         XXXXXXX, XXXXXXX, KC_MEDIA_EJECT,
448
449         // right hand
450         KC_WWW_FAVORITES, KC_MY_COMPUTER, KC_CALCULATOR,   XXXXXXX, RGB_MOD,         RGB_M_P,        KC_AUDIO_VOL_UP,
451         KC_WWW_SEARCH,    KC_F2,          KC_F4,           KC_F6,   KC_F8,           KC_F10,         KC_MEDIA_NEXT_TRACK,
452                           KC_F12,         KC_F14,          KC_F16,  KC_F18,          KC_F20,         KC_MEDIA_PLAY_PAUSE,
453         KC_WWW_FORWARD,   KC_F22,         KC_F24,          _______, XXXXXXX,         XXXXXXX,        RGB_HUI,
454                                           KC_SYSTEM_POWER, XXXXXXX, KC_SYSTEM_SLEEP, KC_SYSTEM_WAKE, RGB_VAI,
455
456         // right thumb
457         XXXXXXX,   XXXXXXX,
458         XXXXXXX,
459         RGB_GREEN, XXXXXXX, XXXXXXX
460     ),
461
462     [HYPER_FN] = LAYOUT_ergodox(
463         // left hand
464         XXXXXXX, HYPR(KC_F1),  HYPR(KC_F2),  HYPR(KC_F3),  HYPR(KC_F4),  HYPR(KC_F5),  XXXXXXX,
465         XXXXXXX, HYPR(KC_F6),  HYPR(KC_F7),  HYPR(KC_F8),  HYPR(KC_F9),  HYPR(KC_F10), XXXXXXX,
466         XXXXXXX, HYPR(KC_F11), HYPR(KC_F12), HYPR(KC_F13), HYPR(KC_F14), HYPR(KC_F15),
467         XXXXXXX, HYPR(KC_F16), HYPR(KC_F17), HYPR(KC_F18), HYPR(KC_F19), HYPR(KC_F20), XXXXXXX,
468         XXXXXXX, HYPR(KC_F21), HYPR(KC_F22), HYPR(KC_F23), HYPR(KC_F24),
469
470         // left thumb
471                  XXXXXXX, XXXXXXX,
472                           XXXXXXX,
473         XXXXXXX, XXXXXXX, XXXXXXX,
474
475         // right hand
476         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
477         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
478                  XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
479         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
480                  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
481
482         // right thumb
483         XXXXXXX, _______,
484         XXXXXXX,
485         XXXXXXX, XXXXXXX, XXXXXXX
486     ),
487
488     [MEH_FN] = LAYOUT_ergodox(
489         // left hand
490         LCA(KC_F11),  LCA(KC_F9),  LCA(KC_F7),  LCA(KC_F5),  LCA(KC_F3),  LCA(KC_F1),  XXXXXXX,
491         LCAG(KC_F11), LCAG(KC_F9), LCAG(KC_F7), LCAG(KC_F5), LCAG(KC_F3), LCAG(KC_F1), XXXXXXX,
492         MEH(KC_F11),  MEH(KC_F9),  MEH(KC_F7),  MEH(KC_F5),  MEH(KC_F3),  MEH(KC_F1),
493         SGUI(KC_F11), SGUI(KC_F9), SGUI(KC_F7), SGUI(KC_F5), SGUI(KC_F3), SGUI(KC_F1), XXXXXXX,
494         _______,      XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,
495
496         // left thumb
497                  XXXXXXX, XXXXXXX,
498                           XXXXXXX,
499         XXXXXXX, XXXXXXX, XXXXXXX,
500
501         // right hand
502         XXXXXXX, LCA(KC_F2),  LCA(KC_F4),  LCA(KC_F6),  LCA(KC_F8),  LCA(KC_F10),  LCA(KC_F12),
503         XXXXXXX, LCAG(KC_F2), LCAG(KC_F4), LCAG(KC_F6), LCAG(KC_F8), LCAG(KC_F10), LCAG(KC_F12),
504                  MEH(KC_F2),  MEH(KC_F4),  MEH(KC_F6),  MEH(KC_F8),  MEH(KC_F10),  MEH(KC_F12),
505         XXXXXXX, SGUI(KC_F2), SGUI(KC_F4), SGUI(KC_F6), SGUI(KC_F8), SGUI(KC_F10), SGUI(KC_F12),
506                               XXXXXXX,     XXXXXXX,     XXXXXXX,     XXXXXXX,      XXXXXXX,
507
508         // right thumb
509         XXXXXXX, XXXXXXX,
510         XXXXXXX,
511         XXXXXXX, XXXXXXX, XXXXXXX
512     ),
513
514     [MEH_FN_PLUS] = LAYOUT_ergodox(
515         // left hand
516         LCA(KC_F23),  LCA(KC_F21),  LCA(KC_F19),  LCA(KC_F17),  LCA(KC_F15),  LCA(KC_F13),  XXXXXXX,
517         LCAG(KC_F23), LCAG(KC_F21), LCAG(KC_F19), LCAG(KC_F17), LCAG(KC_F15), LCAG(KC_F13), XXXXXXX,
518         MEH(KC_F23),  MEH(KC_F21),  MEH(KC_F19),  MEH(KC_F17),  MEH(KC_F15),  MEH(KC_F13),
519         SGUI(KC_F23), SGUI(KC_F21), SGUI(KC_F19), SGUI(KC_F17), SGUI(KC_F15), SGUI(KC_F13), XXXXXXX,
520         XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,
521
522         // left thumb
523                  XXXXXXX, XXXXXXX,
524                           XXXXXXX,
525         XXXXXXX, XXXXXXX, XXXXXXX,
526
527         // right hand
528         XXXXXXX, LCA(KC_F14),  LCA(KC_F16),  LCA(KC_F18),  LCA(KC_F20),  LCA(KC_F22),  LCA(KC_F24),
529         XXXXXXX, LCAG(KC_F14), LCAG(KC_F16), LCAG(KC_F18), LCAG(KC_F20), LCAG(KC_F22), LCAG(KC_F24),
530                  MEH(KC_F14),  MEH(KC_F16),  MEH(KC_F18),  MEH(KC_F20),  MEH(KC_F22),  MEH(KC_F24),
531         XXXXXXX, SGUI(KC_F14), SGUI(KC_F16), SGUI(KC_F18), SGUI(KC_F20), SGUI(KC_F22), SGUI(KC_F24),
532                                XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      _______,
533
534         // right thumb
535         XXXXXXX, XXXXXXX,
536         XXXXXXX,
537         XXXXXXX, XXXXXXX, XXXXXXX
538     ),
539
540     [FIRMWARE] = LAYOUT_ergodox(
541         // left hand
542         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
543         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
544         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
545         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
546         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
547
548         // left thumb
549                XXXXXXX, XXXXXXX,
550                         XXXXXXX,
551         RESET, XXXXXXX, XXXXXXX,
552
553         // right hand
554         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
555         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
556                  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
557         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
558                           XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
559
560         // right thumb
561         XXXXXXX, XXXXXXX,
562         XXXXXXX,
563         XXXXXXX, XXXXXXX, EEP_RST
564     )
565 };
566
567
568 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
569     switch (keycode) {
570         case RGB_GREEN:
571             if (record->event.pressed) {
572                 #ifdef RGBLIGHT_ENABLE
573                     rgblight_enable();
574                     rgblight_mode(1);
575                     rgblight_sethsv_red();
576                 #endif
577             }
578
579             return false;
580
581         case KC_CLCK:
582             if (record->event.pressed) {
583                 if (!(CAPS_LOCK)) {
584                     ergodox_right_led_1_on();
585                     CAPS_LOCK = 1;
586                 } else {
587                     ergodox_right_led_1_off();
588                     CAPS_LOCK = 0;
589                 }
590             }
591
592             return true;
593
594         case KC_NLCK:
595             if (record->event.pressed) {
596                 if (!(NUM_LOCK)) {
597                     ergodox_right_led_2_on();
598                     NUM_LOCK = 1;
599                 } else {
600                     ergodox_right_led_2_off();
601                     NUM_LOCK = 0;
602                 }
603             }
604
605             return true;
606
607         case KC_SLCK:
608             if (record->event.pressed) {
609                 if (!(SCROLL_LOCK)) {
610                     ergodox_right_led_3_on();
611                     SCROLL_LOCK = 1;
612                 } else {
613                     ergodox_right_led_3_off();
614                     SCROLL_LOCK = 0;
615                 }
616             }
617
618         case KC_MS_WH_LEFT:
619             if (record->event.pressed) {
620                 if (SCROLL_LOCK) {
621                     return false;
622                 } else {
623                     return true;
624                 }
625             }
626
627         case KC_MS_WH_UP:
628             if (record->event.pressed) {
629                 if (SCROLL_LOCK) {
630                     return false;
631                 } else {
632                     return true;
633                 }
634             }
635
636         case KC_MS_WH_DOWN:
637             if (record->event.pressed) {
638                 if (SCROLL_LOCK) {
639                     return false;
640                 } else {
641                     return true;
642                 }
643             }
644
645         case KC_MS_WH_RIGHT:
646             if (record->event.pressed) {
647                 if (SCROLL_LOCK) {
648                     return false;
649                 } else {
650                     return true;
651                 }
652             }
653
654         default:
655             return true;
656     }
657 }
658
659 uint32_t layer_state_set_user(uint32_t state) {
660     uint8_t layer = biton32(state);
661
662     switch (layer) {
663         case DVORAK_US:
664             rgblight_sethsv_noeeprom_red();
665             rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
666
667             break;
668
669         case PLOVER_US:
670             rgblight_sethsv_noeeprom_red();
671             rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
672
673             break;
674
675         case GAMING_US:
676             rgblight_sethsv_noeeprom_red();
677             rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
678
679             break;
680
681         case ARROWS_US:
682             rgblight_sethsv_noeeprom_blue();
683             rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
684
685             break;
686
687         case MOUSE_US:
688             rgblight_sethsv_noeeprom_blue();
689             rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
690
691             break;
692
693         case NUMPAD_US:
694             rgblight_sethsv_noeeprom_blue();
695             rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
696
697             break;
698
699         case LAYERS_US:
700             rgblight_sethsv_noeeprom_cyan();
701             rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
702
703             break;
704
705         case DVORAK_DV:
706             rgblight_sethsv_noeeprom_green();
707             rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
708             break;
709
710         case PLOVER_DV:
711             rgblight_sethsv_noeeprom_green();
712             rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
713
714             break;
715
716         case GAMING_DV:
717             rgblight_sethsv_noeeprom_green();
718             rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
719
720             break;
721
722         case ARROWS_DV:
723             rgblight_sethsv_noeeprom_blue();
724             rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
725
726             break;
727
728         case MOUSE_DV:
729             rgblight_sethsv_noeeprom_blue();
730             rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
731
732             break;
733
734         case NUMPAD_DV:
735             rgblight_sethsv_noeeprom_blue();
736             rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
737
738             break;
739
740         case LAYERS_DV:
741             rgblight_sethsv_noeeprom_cyan();
742             rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
743
744             break;
745
746         case MEDIA_FN:
747             rgblight_sethsv_noeeprom_yellow();
748             rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
749
750             break;
751
752         case HYPER_FN:
753             rgblight_sethsv_noeeprom_magenta();
754             rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
755
756             break;
757
758         case MEH_FN:
759             rgblight_sethsv_noeeprom_magenta();
760             rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 4);
761
762             break;
763
764         case MEH_FN_PLUS:
765             rgblight_sethsv_noeeprom_magenta();
766             rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 5);
767
768             break;
769
770         case FIRMWARE:
771             rgblight_sethsv_noeeprom_pink();
772             rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
773
774             break;
775
776         default:
777             break;
778     }
779
780     return state;
781 };