aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIsmael Venegas Castelló <ismael.vc1337@gmail.com>2018-12-19 18:49:56 -0600
committerDrashna Jaelre <drashna@live.com>2018-12-19 16:49:56 -0800
commit5eb8f3f6b51cecc067aaedfb8b2f08cb626381bb (patch)
treeb9e1b89d43ec3be60d03daa052556f90a7190dd6
parentb13162f7fd5a4c09dff15ff6f9713526622925a7 (diff)
downloadqmk_firmware-5eb8f3f6b51cecc067aaedfb8b2f08cb626381bb.tar.gz
qmk_firmware-5eb8f3f6b51cecc067aaedfb8b2f08cb626381bb.zip
Keymap: Refactor Hacker Dvorak (#4688)
Programmer Dvorak based layout for the Ergodox EZ.
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h50
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/default.png.md1
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/default_highres.png.md1
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js10
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/hacker_dvorak.c353
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/aliases_definitions.c5
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/custom_keycodes.c8
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c800
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/layers/layers_definitions.c12
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_dictionary.c14
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_setup.c14
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/plover/plover_mode.c20
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md10
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk33
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c40
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_actions.c20
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_setup.c75
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dances.c74
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/user/eeconfig_init_user.c3
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/user/layer_set_state_user.c121
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/user/matrix_scan_user.c12
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c75
22 files changed, 925 insertions, 826 deletions
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h b/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
index c6b86004c..e188d95d5 100644
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
@@ -5,26 +5,33 @@
5#pragma once 5#pragma once
6 6
7 7
8/* Keyboard Settings */
9#undef TAPPING_TERM 8#undef TAPPING_TERM
10#define TAPPING_TERM 150 9#define TAPPING_TERM 200
11 10
12#undef DEBOUNCE 11#undef DEBOUNCE
13#define DEBOUNCE 10 12#define DEBOUNCE 10
14 13
15#undef IGNORE_MOD_TAP_INTERRUPT 14#undef IGNORE_MOD_TAP_INTERRUPT
16#define IGNORE_MOD_TAP_INTERRUPT
17 15
18#undef FORCE_NKRO 16#undef FORCE_NKRO
19#define FORCE_NKRO 17#define FORCE_NKRO
20 18
21/* This isn't defined by default, so there is no need to undefine it first. */ 19#undef TAPPING_TOGGLE
22#define LEADER_TIMEOUT 500 20#define TAPPING_TOGGLE 5
21
22#define LEADER_TIMEOUT 1000
23#define IGNORE_MOD_TAP_INTERRUPT
23#define PERMISSIVE_HOLD 24#define PERMISSIVE_HOLD
24#define QMK_KEYS_PER_SCAN 4 25#define QMK_KEYS_PER_SCAN 4
26#define DANCING_TERM 175
27
28#define ONESHOT_TAP_TOGGLE 5
29#define ONESHOT_TIMEOUT 5000
30
31#define COMBO_COUNT 4
32#define COMBO_TERM 200
25 33
26 34
27// RGB Lights
28#undef RGBLIGHT_HUE_STEP 35#undef RGBLIGHT_HUE_STEP
29#define RGBLIGHT_HUE_STEP 24 36#define RGBLIGHT_HUE_STEP 24
30 37
@@ -40,11 +47,7 @@
40#undef RGBLIGHT_LIMIT_VAL 47#undef RGBLIGHT_LIMIT_VAL
41#define RGBLIGHT_LIMIT_VAL 255 48#define RGBLIGHT_LIMIT_VAL 255
42 49
43/* This isn't defined by default, so there is no need to undefine it first. */
44#define RGBLIGHT_SLEEP
45
46 50
47// Mouse
48#undef MOUSEKEY_INTERVAL 51#undef MOUSEKEY_INTERVAL
49#define MOUSEKEY_INTERVAL 10 52#define MOUSEKEY_INTERVAL 10
50 53
@@ -52,31 +55,34 @@
52#define MOUSEKEY_DELAY 15 55#define MOUSEKEY_DELAY 15
53 56
54#undef MOUSEKEY_MAX_SPEED 57#undef MOUSEKEY_MAX_SPEED
55#define MOUSEKEY_MAX_SPEED 15 58#define MOUSEKEY_MAX_SPEED 20
56 59
57#undef MOUSEKEY_TIME_TO_MAX 60#undef MOUSEKEY_TIME_TO_MAX
58#define MOUSEKEY_TIME_TO_MAX 150 61#define MOUSEKEY_TIME_TO_MAX 200
59 62
60#undef MOUSEKEY_WHEEL_MAX_SPEED 63#undef MOUSEKEY_WHEEL_MAX_SPEED
61#define MOUSEKEY_WHEEL_MAX_SPEED 15 64#define MOUSEKEY_WHEEL_MAX_SPEED 20
62 65
63#undef MOUSEKEY_WHEEL_TIME_TO_MAX 66#undef MOUSEKEY_WHEEL_TIME_TO_MAX
64#define MOUSEKEY_WHEEL_TIME_TO_MAX 150 67#define MOUSEKEY_WHEEL_TIME_TO_MAX 200
65 68
66 69
67/* This is defined only if CONSOLE_ENABLE is set to "yes" */
68// #undef NO_DEBUG 70// #undef NO_DEBUG
69// #define NO_DEBUG 71// #define NO_DEBUG
70 72
71// #undef NO_PRINT 73// #undef NO_PRINT
72// #define NO_PRINT 74// #define NO_PRINT
73 75
74/* For COMBO only*/ 76// #define RETRO_TAPPING
75// #define COMBO_COUNT 1 77// #define TAPPING_FORCE_HOLD
76// #define COMBO_TERM 200 78
79// #define AUTO_SHIFT_TIMEOUT 150
80// #define NO_AUTO_SHIFT_SPECIAL
81// #define NO_AUTO_SHIFT_NUMERIC
82// #define NO_AUTO_SHIFT_ALPHA
77 83
78/* For tap toggle */ 84// #define EXTRA_LONG_COMBOS
79// #define TAPPING_TOGGLE 2 85// #define EXTRA_EXTRA_LONG_COMBOS
80// #define ONESHOT_TAP_TOGGLE 2 86// #define COMBO_ALLOW_ACTION_KEYS
81// #define ONESHOT_TIMEOUT 300
82 87
88// #define RGBLIGHT_SLEEP
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/default.png.md b/keyboards/ergodox_ez/keymaps/hacker_dvorak/default.png.md
deleted file mode 100644
index 744e7d172..000000000
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/default.png.md
+++ /dev/null
@@ -1 +0,0 @@
1https://i.imgur.com/fKX0Zbs.png
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/default_highres.png.md b/keyboards/ergodox_ez/keymaps/hacker_dvorak/default_highres.png.md
deleted file mode 100644
index 074e0634d..000000000
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/default_highres.png.md
+++ /dev/null
@@ -1 +0,0 @@
1https://i.imgur.com/giAc3M9.jpg
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js b/keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js
index 338b0c6ba..23f19d18a 100644
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js
@@ -1,7 +1,7 @@
1let gulp = require('gulp'); 1let gulp = require('gulp');
2let run = require('gulp-run-command').default; 2let run = require('gulp-run-command').default;
3 3
4 4
5gulp.task('clean', run('rm -rf ../../../../.build')); 5gulp.task('clean', run('rm -rf ../../../../.build'));
6 6
7gulp.task('build', ['clean'], run('make -C ../../../../ ergodox_ez:hacker_dvorak', { 7gulp.task('build', ['clean'], run('make -C ../../../../ ergodox_ez:hacker_dvorak', {
@@ -9,5 +9,11 @@ gulp.task('build', ['clean'], run('make -C ../../../../ ergodox_ez:hacker_dvorak
9})); 9}));
10 10
11gulp.task('watch', ['build'], () => { 11gulp.task('watch', ['build'], () => {
12 gulp.watch(['keymap.c', 'config.h', 'rules.mk'], ['build']); 12 gulp.watch([
13 'keymap.c',
14 'config.h',
15 'rules.mk',
16 ], ['build']);
13}); 17});
18
19gulp.task('default', ['watch']);
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/hacker_dvorak.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/hacker_dvorak.c
new file mode 100644
index 000000000..65878a67c
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/hacker_dvorak.c
@@ -0,0 +1,353 @@
1// Keyboard keymap:
2const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
3 [DVORAK] = LAYOUT_ergodox(
4
5 // HACKER DVORAK left hand
6
7 //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
8 // ESCAPE | | | | | | START RECORDING //
9 // | | | | | | //
10 KC_ESC, TD(GRV_TILD), TD(AT_DLR), TD(LCBR_LABK), TD(LPRN_LBRC), TD(EXLM_QUES), DYN_REC_START1, //
11 // | ~ | $ | < | [ | ? | //
12 // | TAP DANCE: ` | TAP DANCE: @ TAP DANCE: { | TAP DANCE: ( | TAP DANCE: ! | DYNAMIC MARCO 1 //
13 //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
14 // TAB | MOD TAP: ALT+SHIFT | MOD TAP: CTRL+ALT | MOD TAP: CTRL+SHIFT | P | Y | //
15 // | | | | | | //
16 KC_TAB, TD(NONE_LEAD), TD(QUOT_DQUO), TD(DOT_COMM), ALL_T(KC_P), MEH_T(KC_Y), DYN_MACRO_PLAY1, //
17 // | LEAD | " | , | | | //
18 // | TAP DANCE: NONE | TAP DANCE: ' | TAP DANCE: . | MOD TAP: HYPER | MOD TAP: MEH | //
19 //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------| PLAY DYNAMIC MACRO 1 //
20 // | MOD TAP: ALT | MOD TAP: CTRL | LAYER TAP: SHIFT | LAYER TAP: ARROW KEYS | MOD TAP: GUI | //
21 // | | | | Ü | | //
22 TD(EQL_PLUS), ALT_T(KC_A), CTL_T(KC_O), SFT_T(KC_E), LT(ARROWS, KC_U), LGUI_T(KC_I), //-----------------------//
23 // + | Á | Ó | É | Ú | Í | //
24 // TAP DANCE: = | TAP DANCE: A | TAP DANCE: O | TAP DANCE: E | TAP DANCE: U | TAP DANCE: I | //
25 //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------| META //
26 // STOP RECORDING | MOD TAP: GUI+SHIFT+ALT | Q | J | K | X | //
27 // | | | | | | //
28 DYN_REC_STOP, TD(SCLN_COLN), SGUI_T(KC_Q), LT(MEDIA_FN, KC_J), LT(NUMPAD, KC_K), LCAG_T(KC_X), KC_LGUI, //
29 // | : | | | | | //
30 // DYNAMIC MACRO | TAP DANCE: ; | MOD TAP: SHIFT+GUI | LAYER TAP: MEDIA/F-KEYS | LAYER TAP: ATM NUMPAD | MOD TAP: CTL+ALT+GUI | //
31 //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
32 // LAYERS SWITCHER | APPLICATION MENU | | | //
33 // | | | | SCROLL //
34 TG(LAYERS), KC_APP, KC_NLCK, KC_SLCK, KC_CAPS, //
35 // | | | | NUM //
36 // LAYER TOGGLE | | | | TAP DANCE: CAPS //
37 //------------------------+-------------------------+-------------------------+-------------------------+------------------------//
38
39 // HACKER DVORAK left thumb
40
41 //------------------------+------------------------//
42 // MOUSE WHEEL LEFT | MOUSE WHEEL RIGHT //
43 // | //
44 KC_WH_L, KC_WH_R, //
45 // | //
46 // | //
47 //-------------------------+-------------------------+------------------------//
48 // | | HOME //
49 // | | //
50 /* SPACE | BACKSPACE */ KC_HOME, //
51 // | | //
52 // | | //
53 KC_SPC, KC_BSPC, //-----------------------//
54 // | | END //
55 // | | //
56 /* | */ KC_END, //
57 // | | //
58 // | | //
59 //-------------------------+-------------------------+------------------------//
60
61 // HACKER DVORAK right hand
62
63 //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
64 // | | | | | | //
65 // | | | | | | //
66 DYN_REC_START2, TD(APMR_PIPE), TD(RPRN_RBRC), TD(RCBR_RABK), TD(HASH_PERC), TD(ASTR_CIRC), XXXXXXX, //
67 // | | | | | | //
68 // | | | | | | //
69 //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
70 // | | | | | | //
71 // | | | | | | //
72 DYN_MACRO_PLAY2, MEH_T(KC_F), ALL_T(KC_G), C_S_T(KC_C), LCA_T(KC_R), LAS_T(KC_L), TD(SLSH_BSLS), //
73 // | | | | | | //
74 // | | | | | | //
75 // |-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
76 // | | | | | | //
77 // | | | | | | //
78 /*-----------------------*/ LGUI_T(KC_D), LT(MOUSE, KC_H), SFT_T(KC_T), CTL_T(KC_N), ALT_T(KC_S), TD(MINS_UNDS), //
79 // | | | | | | //
80 // | | | | | | //
81 // |-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
82 // | | | | | | //
83 // | | | | | | //
84 KC_LGUI, LCAG_T(KC_B), LT(HYPER, KC_M), LT(MEDIA_FN, KC_W), SGUI_T(KC_V), LGAS_T(KC_Z), COMPOSE, //
85 // | | | | | | //
86 // | | | | | | ⎄ //
87 //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
88 // | | | | //
89 // | | | | //
90 KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_SYSREQ, //
91 // | | | | //
92 // | | | | //
93 //------------------------+-------------------------+-------------------------+-------------------------+------------------------//
94
95 // HACKER DVORAK right thumb
96
97 //------------------------+------------------------//
98 // | //
99 // | //
100 KC_WH_U, KC_WH_D, //
101 // | //
102 // | //
103 //------------------------+-------------------------+------------------------//
104 // | | //
105 // | | //
106 KC_PGUP, // | //
107 // | | //
108 // | | //
109 //------------------------| | //
110 // | | //
111 // | | //
112 KC_PGDN, KC_DEL, KC_ENT //
113 // | | //
114 // | | //
115 //------------------------+-------------------------+------------------------//
116
117 ),
118
119 [PLOVER] = LAYOUT_ergodox(
120 // left hand
121 XXXXXXX, XXXXXXX, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, KC_MS_BTN3, GUI_T(KC_NO),
122 KC_ESC, KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_BTN5, PV_NUM,
123 KC_TAB, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
124 KC_CLCK, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
125 XXXXXXX, TG(LAYERS), PV_NUM, PV_NUM, PV_NUM,
126
127 // left thumb
128 KC_SPACE, KC_BSPACE,
129 KC_HOME,
130 PV_A, PV_O, KC_END,
131
132 // right hand
133 KC_MS_ACCEL2, KC_MS_ACCEL1, KC_MS_ACCEL0, KC_UP, KC_APPLICATION, XXXXXXX, KC_MS_WH_UP,
134 PV_NUM, KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_MS_WH_DOWN,
135 PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
136 PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
137 PV_NUM, PV_NUM, PV_NUM, PV_NUM, XXXXXXX,
138
139 // right thumb
140 KC_DELETE, KC_ENTER,
141 KC_PGUP,
142 KC_PGDOWN, PV_E, PV_U
143 ),
144
145 [GAMING] = LAYOUT_ergodox(
146 // left hand
147 KC_ESCAPE, GUI_T(KC_MINS), KC_I, KC_O, KC_P, ALGR_T(KC_EQL), KC_T,
148 KC_TAB, KC_LALT, KC_Q, KC_W, KC_E, ALL_T(KC_R), KC_G,
149 LT(MOUSE, KC_GRV), KC_LCTRL, KC_A, KC_S, KC_D, MEH_T(KC_F),
150 KC_BSLS, KC_LSHIFT, KC_Z, KC_X, KC_C, SCMD_T(KC_V), KC_M,
151 XXXXXXX, TG(LAYERS), KC_COMM, KC_DOT, KC_LBRC,
152
153 // left thumb
154 MO(MEDIA_FN), KC_NLCK,
155 KC_SCLN,
156 KC_SPACE, KC_ENTER, KC_BSPACE,
157
158 // right hand
159 KC_QUOT, KC_Y, KC_K, KC_U, KC_KP_7, KC_KP_8, KC_KP_9,
160 KC_MS_WH_UP, KC_H, KC_J, KC_L, KC_KP_4, KC_KP_2, KC_KP_6,
161 KC_B, KC_MS_UP, KC_N, KC_KP_1, KC_KP_5, KC_KP_3,
162 KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_UP, KC_KP_0, KC_SLASH,
163 KC_RBRC, KC_LEFT, KC_DOWN, KC_RIGHT, XXXXXXX,
164
165 // right thumb
166 KC_MS_BTN5, MO(HYPER),
167 KC_MS_BTN4,
168 KC_MS_BTN3, KC_MS_BTN2, KC_MS_BTN1
169 ),
170
171 [ARROWS] = LAYOUT_ergodox(
172 // left hand
173 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
174 XXXXXXX, SCMD_T(KC_NO), MEH_T(KC_NO), ALL_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
175 XXXXXXX, KC_LCTRL, KC_LSHIFT, XXXXXXX, _______, XXXXXXX,
176 XXXXXXX, KC_RALT, KC_LALT, GUI_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
177 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
178
179 // left thumb
180 XXXXXXX, XXXXXXX,
181 KC_HOME,
182 KC_SPACE, KC_BSPACE, KC_END,
183
184 // right hand
185 LGUI(KC_X), XXXXXXX, LCTL(KC_X), KC_MS_WH_UP, XXXXXXX, XXXXXXX, XXXXXXX,
186 LGUI(KC_C), XXXXXXX, LCTL(KC_C), KC_UP, SCTL(KC_C), LCTL(KC_Z), LGUI(KC_Z),
187 KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_APPLICATION,
188 LGUI(KC_V), XXXXXXX, LCTL(KC_V), KC_MS_WH_DOWN, SCTL(KC_V), LCTL(KC_Y), SGUI(KC_Z),
189 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLCK,
190
191 // right thumb
192 XXXXXXX, XXXXXXX,
193 KC_PGUP,
194 KC_PGDOWN, KC_DELETE, KC_ENTER
195 ),
196
197 [MOUSE] = LAYOUT_ergodox(
198 // left hand
199 XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_WH_UP, LCTL(KC_X), XXXXXXX, LGUI(KC_X),
200 LGUI(KC_Z), LCTL(KC_Z), SCTL(KC_C), KC_MS_UP, LCTL(KC_C), KC_MS_BTN4, LGUI(KC_C),
201 KC_MS_BTN3, KC_MS_WH_LEFT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_RIGHT,
202 LGUI(KC_Z), LCTL(KC_Y), SCTL(KC_V), KC_MS_WH_DOWN, LCTL(KC_V), KC_MS_BTN5, LGUI(KC_V),
203 KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
204
205 // left thumb
206 XXXXXXX, XXXXXXX,
207 XXXXXXX,
208 KC_MS_BTN1, KC_MS_BTN2, XXXXXXX,
209
210 // right hand
211 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
212 XXXXXXX, XXXXXXX, XXXXXXX, ALL_T(KC_NO), MEH_T(KC_NO), SCMD_T(KC_NO), XXXXXXX,
213 XXXXXXX, _______, KC_MS_ACCEL1, KC_LSHIFT, KC_LCTRL, KC_MS_ACCEL2,
214 XXXXXXX, XXXXXXX, XXXXXXX, GUI_T(KC_NO), KC_LALT, KC_RALT, XXXXXXX,
215 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
216
217 // right thumb
218 XXXXXXX, XXXXXXX,
219 XXXXXXX,
220 XXXXXXX, XXXXXXX, KC_MS_ACCEL0
221 ),
222
223 [NUMPAD] = LAYOUT_ergodox(
224 // left hand
225 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
226 XXXXXXX, XXXXXXX, GUI_T(KC_NO), XXXXXXX, ALL_T(KC_NO), XXXXXXX, XXXXXXX,
227 _______, KC_LCTRL, KC_LSHIFT, _______, MEH_T(KC_NO), XXXXXXX,
228 XXXXXXX, KC_RALT, KC_LALT, XXXXXXX, SCMD_T(KC_NO), XXXXXXX, XXXXXXX,
229 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
230
231 // left thumb
232 XXXXXXX, XXXXXXX,
233 KC_HOME,
234 KC_SPACE, KC_BSPACE, KC_END,
235
236 // right hand
237 KC_X, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F,
238 KC_O, KC_I, KC_1, KC_2, KC_3, KC_SLSH, KC_PERC,
239 KC_M, KC_4, KC_5, KC_6, KC_PLUS, KC_MINS,
240 KC_L, KC_J, KC_7, KC_8, KC_9, KC_ASTR, KC_CIRC,
241 KC_DOT, KC_0, KC_COMM, KC_UNDS, KC_BSLS,
242
243 // right thumb
244 XXXXXXX, XXXXXXX,
245 KC_PGUP,
246 KC_PGDOWN, KC_DELETE, KC_ENTER
247 ),
248
249 [LAYERS] = LAYOUT_ergodox(
250 // left hand
251 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
252 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
253 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
254 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
255 XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
256
257 // left thumb
258 XXXXXXX, XXXXXXX,
259 XXXXXXX,
260 XXXXXXX, XXXXXXX, XXXXXXX,
261
262 // right hand
263 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
264 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
265 XXXXXXX, TO(DVORAK), TO(PLOVER), TO(GAMING), XXXXXXX, XXXXXXX,
266 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
267 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
268
269 // right thumb
270 XXXXXXX, XXXXXXX,
271 XXXXXXX,
272 XXXXXXX, XXXXXXX, XXXXXXX
273 ),
274
275 [MEDIA_FN] = LAYOUT_ergodox(
276 // left hand
277 KC_VOLD, KC_MUTE, RGB_TOG, XXXXXXX, KC_MAIL, KC_FIND, KC_WWW_REFRESH,
278 KC_MPRV, KC_F9, KC_F7, KC_F5, KC_F3, KC_F1, KC_WWW_HOME,
279 KC_PAUS, KC_F19, KC_F17, KC_F15, KC_F13, KC_F11,
280 RGB_HUD, XXXXXXX, XXXXXXX, _______, KC_F23, KC_F21, KC_WWW_BACK,
281 RGB_VAD, KC_CLCK, KC_PSCREEN, XXXXXXX, MO(FIRMWARE),
282
283 // left thumb
284 _______, XXXXXXX,
285 XXXXXXX,
286 XXXXXXX, XXXXXXX, KC_MEDIA_EJECT,
287
288 // right hand
289 KC_WWW_FAVORITES, KC_MYCM, KC_CALC, XXXXXXX, RGB_MOD, RGB_M_P, KC_VOLU,
290 KC_WWW_SEARCH, KC_F2, KC_F4, KC_F6, KC_F8, KC_F10, KC_MNXT,
291 KC_F12, KC_F14, KC_F16, KC_F18, KC_F20, KC_MPLY,
292 KC_WWW_FORWARD, KC_F22, KC_F24, _______, XXXXXXX, XXXXXXX, RGB_HUI,
293 KC_PWR, XXXXXXX, KC_SLEP, KC_WAKE, RGB_VAI,
294
295 // right thumb
296 XXXXXXX, XXXXXXX,
297 XXXXXXX,
298 RGB_GREEN, XXXXXXX, XXXXXXX
299 ),
300
301 [HYPER] = LAYOUT_ergodox(
302 // left hand
303 XXXXXXX, HYPR(KC_F1), HYPR(KC_F2), HYPR(KC_F3), HYPR(KC_F4), HYPR(KC_F5), XXXXXXX,
304 XXXXXXX, HYPR(KC_F6), HYPR(KC_F7), HYPR(KC_F8), HYPR(KC_F9), HYPR(KC_F10), XXXXXXX,
305 XXXXXXX, HYPR(KC_F11), HYPR(KC_F12), HYPR(KC_F13), HYPR(KC_F14), HYPR(KC_F15),
306 XXXXXXX, HYPR(KC_F16), HYPR(KC_F17), HYPR(KC_F18), HYPR(KC_F19), HYPR(KC_F20), XXXXXXX,
307 XXXXXXX, HYPR(KC_F21), HYPR(KC_F22), HYPR(KC_F23), HYPR(KC_F24),
308
309 // left thumb
310 XXXXXXX, XXXXXXX,
311 XXXXXXX,
312 XXXXXXX, XXXXXXX, XXXXXXX,
313
314 // right hand
315 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
316 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
317 XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
318 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
319 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
320
321 // right thumb
322 XXXXXXX, _______,
323 XXXXXXX,
324 XXXXXXX, XXXXXXX, XXXXXXX
325 ),
326
327 [FIRMWARE] = LAYOUT_ergodox(
328
329 // left hand
330 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
331 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
332 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
333 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
334 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
335
336 // left thumb
337 XXXXXXX, XXXXXXX,
338 XXXXXXX,
339 RESET, XXXXXXX, XXXXXXX,
340
341 // right hand
342 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
343 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
344 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
345 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
346 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
347
348 // right thumb
349 XXXXXXX, XXXXXXX,
350 XXXXXXX,
351 XXXXXXX, XXXXXXX, EEP_RST
352 )
353};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/aliases_definitions.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/aliases_definitions.c
new file mode 100644
index 000000000..e5eba1820
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/aliases_definitions.c
@@ -0,0 +1,5 @@
1// Keycode aliases
2#define SCTL(kc) LSFT(LCTL(kc)) // Modifier keys: SHIFT+CTRL+kc combination.
3#define LGAS_T(kc) MT(MOD_LGUI | MOD_LALT | MOD_LSFT, kc) // Mod tap: kc when tapped, GUI+ALT+SHIFT when held.
4#define LAS_T(kc) MT(MOD_LALT | MOD_LSFT, kc) // Mod tap: kc when tapped, ALT+SHIFT whin held.
5#define COMPOSE KC_RALT // Compose key (used to input characters like á, ñ, ü).
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/custom_keycodes.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/custom_keycodes.c
new file mode 100644
index 000000000..368062172
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/custom_keycodes.c
@@ -0,0 +1,8 @@
1// Define custom user keycodes:
2enum custom_keycodes {
3 PLACEHOLDER = SAFE_RANGE, // Can always be here.
4 RGB_GREEN, // To set default RGB layer as green once.
5 MY_CUSTOM_MACRO, // Custom macro example.
6 MY_OTHER_MACRO, // Custom macro example.
7 DYNAMIC_MACRO_RANGE // Should always be the last.
8};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c
index c42b55108..af06d2bd8 100644
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c
@@ -1,781 +1,19 @@
1#include QMK_KEYBOARD_H 1#include QMK_KEYBOARD_H // Includes the QMK-verse.
2#include "keymap_dvorak.h" 2#include "keymap_plover.h" // Includes the Plover keymap for easier readability.
3#include "sendstring_dvorak.h" 3
4#include "keymap_plover.h" 4
5#include "keymap_plover_dvorak.h" 5// TODO: No eeprom changes unless needed, custom rgb settings for animations.
6 6#include "keycodes/aliases_definitions.c"
7 7#include "layers/layers_definitions.c"
8#define SCTL(kc) LSFT(LCTL(kc)) 8#include "tap_dance/tap_dance_setup.c"
9 9#include "tap_dance/tap_dances.c"
10// Layers 10#include "user/matrix_scan_user.c"
11enum layers { 11#include "tap_dance/mod_tap_layer_dances/none_lead.c"
12 DVORAK_US = 0, 12#include "tap_dance/tap_dance_actions.c"
13 PLOVER_US, 13#include "keycodes/custom_keycodes.c"
14 GAMING_US, 14#include "dynamic_macro.h" // Includes dynamic macro definitions, needed *after* the custom keycodes.
15 ARROWS_US, 15#include "hacker_dvorak.c"
16 MOUSE_US, 16#include "user/eeconfig_init_user.c"
17 NUMPAD_US, 17#include "user/process_record_user.c"
18 LAYERS_US, 18#include "plover/plover_mode.c"
19 DVORAK_DV, 19#include "user/layer_set_state_user.c"
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
33int CAPS_LOCK = 0;
34int NUM_LOCK = 0;
35int SCROLL_LOCK = 0;
36
37enum tap_dances {
38 TD_ESC_CAPS = 0
39};
40
41qk_tap_dance_action_t tap_dance_actions[] = {
42 [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CLCK)
43};
44
45
46enum custom_keycodes {
47 PLACEHOLDER = SAFE_RANGE, // can always be here
48 RGB_GREEN // to set default RGB layer as green once
49};
50
51const 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
568bool 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
659uint32_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};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/layers/layers_definitions.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/layers/layers_definitions.c
new file mode 100644
index 000000000..f190e4f6f
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/layers/layers_definitions.c
@@ -0,0 +1,12 @@
1enum layers { // Hacker Dvorak keyboard layers:
2 DVORAK = 0, // * Dvorak base layer.
3 PLOVER = 1, // * Steno layer for use with Plover.
4 GAMING = 2, // * Gaming layer intended for general purpose playing.
5 ARROWS = 3, // * Arrows movement keys and edition shortcuts.
6 MOUSE = 4, // * Mouse movement keys and edition shortcuts.
7 NUMPAD = 5, // * ATM style numpad with symbols and letters that should suffice to input any numeric literal.
8 LAYERS = 6, // * Layer switcher used to change between DVORAK, PLOVER and GAMING layers.
9 MEDIA_FN = 7, // * Media, RGB and function keys from F1 to F24 in symmetric fashion.
10 HYPER = 8, // * Hot keys layer (uses hyper + F1 .. F24) suitable for global shortcut tasks.
11 FIRMWARE = 9 // * Layer with firmware related functionality, like the reset and EEPROM keys.
12};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_dictionary.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_dictionary.c
new file mode 100644
index 000000000..8d5fa00a7
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_dictionary.c
@@ -0,0 +1,14 @@
1LEADER_DICTIONARY() {
2 leading = false;
3 leader_end();
4
5 SEQ_ONE_KEY(TD(APMR_PIPE)) {
6 register_code(KC_LCTL);
7 register_code(KC_LSFT);
8 register_code(KC_U);
9
10 unregister_code(KC_U);
11 unregister_code(KC_LSFT);
12 unregister_code(KC_LCTL);
13 }
14}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_setup.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_setup.c
new file mode 100644
index 000000000..1e89c4bfc
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_setup.c
@@ -0,0 +1,14 @@
1LEADER_EXTERNS();
2
3void qk_leader_start(void) {
4 if (!leading) {
5 leading = true;
6 leader_time = timer_read();
7 leader_sequence_size = 0;
8 leader_sequence[0] = 0;
9 leader_sequence[1] = 0;
10 leader_sequence[2] = 0;
11 leader_sequence[3] = 0;
12 leader_sequence[4] = 0;
13 }
14}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/plover/plover_mode.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/plover/plover_mode.c
new file mode 100644
index 000000000..b38826490
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/plover/plover_mode.c
@@ -0,0 +1,20 @@
1// TODO: improve feedback
2void plover_toggle(void) {
3 // Press "PHROLG"
4 register_code(PV_LP);
5 register_code(PV_LH);
6 register_code(PV_LR);
7 register_code(PV_O);
8 register_code(PV_RL);
9 register_code(PV_RG);
10
11 // Release "PHROLG"
12 unregister_code(PV_LP);
13 unregister_code(PV_LH);
14 unregister_code(PV_LR);
15 unregister_code(PV_O);
16 unregister_code(PV_RL);
17 unregister_code(PV_RG);
18}
19
20bool PLOVER_MODE = false;
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md b/keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md
index c7df0d748..8089a6d55 100644
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md
@@ -17,8 +17,8 @@ I plan to use [QMK](https://docs.qmk.fm) in the future, in order to overcome som
17 * All symbols (including shifted symbols). 17 * All symbols (including shifted symbols).
18 * All modifier are dual keys positioned near the home row. 18 * All modifier are dual keys positioned near the home row.
192. Querty 192. Querty
20 * Used to overcome the limitation pointed above, when your OS layout is set to Dvorak instead of US, this way you can use 20 * Used to overcome the limitation pointed above, when your OS layout is set to Dvorak instead of US, this way you can use
21 Standard Dvorak (available by default on all the main operating systems) on other normal keybdoards and Hacker Dvorak on 21 Standard Dvorak (available by default on all the main operating systems) on other normal keybdoards and Hacker Dvorak on
22 the Ergodox EZ Shine at the same time, without changing back and forth tho OS layout. 22 the Ergodox EZ Shine at the same time, without changing back and forth tho OS layout.
233. Gaming 233. Gaming
24 * Still in development. 24 * Still in development.
@@ -35,7 +35,7 @@ I plan to use [QMK](https://docs.qmk.fm) in the future, in order to overcome som
356. Numpad 356. Numpad
36 * ATM style numpad. 36 * ATM style numpad.
37 * All modifier keys. 37 * All modifier keys.
38 * Letters from `A` to `F` for hexadecimal numbers (`B` is also used for binary numeric literals in most programming 38 * Letters from `A` to `F` for hexadecimal numbers (`B` is also used for binary numeric literals in most programming
39 languages, ie. `0b11001`). 39 languages, ie. `0b11001`).
40 * `X` for hexadecimal numeric literals in most programming languages, ie. `0xbeef`. 40 * `X` for hexadecimal numeric literals in most programming languages, ie. `0xbeef`.
41 * `O` for octal numeric literals in most programming languages, ie `0o123`. 41 * `O` for octal numeric literals in most programming languages, ie `0o123`.
@@ -52,11 +52,11 @@ I plan to use [QMK](https://docs.qmk.fm) in the future, in order to overcome som
52 * Useful for custom application shortcuts. 52 * Useful for custom application shortcuts.
5310. Meh Fn + 5310. Meh Fn +
54 * Useful for custom standard shortcuts. 54 * Useful for custom standard shortcuts.
55 55
56## To Do 56## To Do
57 57
58Add images. 58Add images.
59 59
60*** 60***
61 61
62Please comment below if you have any ideas or suggestions. If you have used this layout or used it as a base, I'd love to hear about your experience! \ No newline at end of file 62Please comment below if you have any ideas or suggestions. If you have used this layout or used it as a base, I'd love to hear about your experience!
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk b/keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk
index 4aa2f262b..51a9ff0d4 100644
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk
@@ -1,35 +1,40 @@
1# Set any rules.mk overrides for your specific keymap here. 1# Set any rules.mk overrides for your specific keymap here.
2# See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file 2# See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file
3NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
4TAP_DANCE_ENABLE = yes
5MOUSEKEY_ENABLE = yes # Mouse keys(+4700b).
6EXTRAKEY_ENABLE = yes # Audio control and System control(+450b).
7SLEEP_LED_ENABLE = yes # Turn off leds when computer is sleeping.
8KEY_LOCK_ENABLE = yes # (+1730b)
9RGBLIGHT_ENABLE = yes
10LEADER_ENABLE = yes
11 3
4NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
5TAP_DANCE_ENABLE = yes
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700b).
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450b).
8RGBLIGHT_ENABLE = yes
9LEADER_ENABLE = yes
12 10
13UNICODE_ENABLE = no # For Unicode. 11UNICODE_ENABLE = no
14COMMAND_ENABLE = no # Commands for debug and configuration 12COMMAND_ENABLE = no # Commands for debug and configuration
15SWAP_HANDS_ENABLE = no # Allow swapping hands of keyboard. 13SWAP_HANDS_ENABLE = no # Allow swapping hands of keyboard.
16 14
17 15
18# This are by default off: 16# This are by default off:
19# CONSOLE_ENABLE = no # Console for debug(+400) 17# COMBO_ENABLE = no
20# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) 18# UCIS_ENABLE = no # For Unicode.
19# UNICODEMAP_ENABLE = no
20# SLEEP_LED_ENABLE = no # Turn off leds when computer is sleeping.
21# KEY_LOCK_ENABLE = no # (+1730b)
22# CONSOLE_ENABLE = no # Console for debug(+400b)
23# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000b)
21# API_SYSEX_ENABLE = no 24# API_SYSEX_ENABLE = no
22# MIDI_ENABLE = no 25# MIDI_ENABLE = no
23# UNICODEMAP_ENABLE = no
24# BLUETOOTH_ENABLE = no 26# BLUETOOTH_ENABLE = no
25# AUDIO_ENABLE = no 27# AUDIO_ENABLE = no
26# FAUXCLICKY_ENABLE = no 28# FAUXCLICKY_ENABLE = no
27# VARIABLE_TRACE = no 29# VARIABLE_TRACE = no
28# BACKLIGHT_ENABLE = no 30# BACKLIGHT_ENABLE = no
29# RGB_MATRIX_ENABLE = no 31# RGB_MATRIX_ENABLE = no
30# COMBO_ENABLE = no
31 32
33# POINTING_DEVICE_ENABLE = no
34
35# AUTO_SHIFT_ENABLE = no
36# AUTO_SHIFT_MODIFIERS = no
32 37
33# This don't need argument: 38# This don't need argument?
34# CUSTOM_MATRIX # Custom matrix file for the ErgoDox EZ 39# CUSTOM_MATRIX # Custom matrix file for the ErgoDox EZ
35# SPLIT_KEYBOARD 40# SPLIT_KEYBOARD
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c
new file mode 100644
index 000000000..6debc1ce4
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c
@@ -0,0 +1,40 @@
1//instanalize an instance of 'tap' for the None - Lead tap dance.
2static tap none_lead_state = {
3 .is_press_action = true,
4 .state = 0
5};
6
7void none_lead_finished(qk_tap_dance_state_t *state, void *user_data) {
8 none_lead_state.state = current_dance(state);
9 switch (none_lead_state.state) {
10 case SINGLE_TAP:
11 register_code(KC_NO);
12 break;
13
14 case SINGLE_HOLD:
15 register_code(KC_LALT);
16 register_code(KC_LSFT);
17 break;
18
19 case DOUBLE_TAP:
20 qk_leader_start();
21 break;
22 }
23}
24
25void none_lead_reset(qk_tap_dance_state_t *state, void *user_data) {
26 switch (none_lead_state.state) {
27 case SINGLE_TAP:
28 unregister_code(KC_NO);
29 break;
30
31 case SINGLE_HOLD:
32 unregister_code(KC_LALT);
33 unregister_code(KC_LSFT);
34 break;
35
36 case DOUBLE_TAP:
37 break;
38 }
39 none_lead_state.state = 0;
40}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_actions.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_actions.c
new file mode 100644
index 000000000..550e1f7c8
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_actions.c
@@ -0,0 +1,20 @@
1// Register the double tap dances:
2qk_tap_dance_action_t tap_dance_actions[] = {
3 [EQL_PLUS] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_PLUS),
4 [MINS_UNDS] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS),
5 [SLSH_BSLS] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_BSLS),
6 [GRV_TILD] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, KC_TILD),
7 [QUOT_DQUO] = ACTION_TAP_DANCE_DOUBLE(KC_QUOT, KC_DQUO),
8 [SCLN_COLN] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_COLN),
9 [ASTR_CIRC] = ACTION_TAP_DANCE_DOUBLE(KC_ASTR, KC_CIRC),
10 [APMR_PIPE] = ACTION_TAP_DANCE_DOUBLE(KC_AMPR, KC_PIPE),
11 [EXLM_QUES] = ACTION_TAP_DANCE_DOUBLE(KC_EXLM, KC_QUES),
12 [HASH_PERC] = ACTION_TAP_DANCE_DOUBLE(KC_HASH, KC_PERC),
13 [AT_DLR] = ACTION_TAP_DANCE_DOUBLE(KC_AT, KC_DLR),
14 [LPRN_LBRC] = ACTION_TAP_DANCE_DOUBLE(KC_LPRN, KC_LBRC),
15 [RPRN_RBRC] = ACTION_TAP_DANCE_DOUBLE(KC_RPRN, KC_RBRC),
16 [LCBR_LABK] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR, KC_LABK),
17 [RCBR_RABK] = ACTION_TAP_DANCE_DOUBLE(KC_RCBR, KC_RABK),
18 [DOT_COMM] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_COMM),
19 [NONE_LEAD] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, none_lead_finished, none_lead_reset, DANCING_TERM)
20};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_setup.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_setup.c
new file mode 100644
index 000000000..340ccca13
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_setup.c
@@ -0,0 +1,75 @@
1typedef struct {
2 bool is_press_action;
3 int state;
4} tap;
5
6enum {
7 SINGLE_TAP = 1,
8 SINGLE_HOLD = 2,
9 DOUBLE_TAP = 3,
10 DOUBLE_HOLD = 4,
11 DOUBLE_SINGLE_TAP = 5, // Send two single taps.
12 TRIPLE_TAP = 6,
13 TRIPLE_HOLD = 7,
14 TRIPLE_SINGLE_TAP = 8 // Send three single taps.
15};
16
17/* Return an integer that corresponds to what kind of tap dance should be executed.
18 *
19 * How to figure out tap dance state: interrupted and pressed.
20 *
21 * Interrupted: If the state of a dance dance is "interrupted", that means that another key has been hit
22 * under the tapping term. This is typically indicitive that you are trying to "tap" the key.
23 *
24 * Pressed: Whether or not the key is still being pressed. If this value is true, that means the tapping term
25 * has ended, but the key is still being pressed down. This generally means the key is being "held".
26 *
27 * One thing that is currenlty not possible with qmk software in regards to tap dance is to mimic the "permissive hold"
28 * feature. In general, advanced tap dances do not work well if they are used with commonly typed letters.
29 * For example "A". Tap dances are best used on non-letter keys that are not hit while typing letters.
30 *
31 * Good places to put an advanced tap dance:
32 * z,q,x,j,k,v,b, any function key, home/end, comma, semi-colon
33 *
34 * Criteria for "good placement" of a tap dance key:
35 * Not a key that is hit frequently in a sentence
36 * Not a key that is used frequently to double tap, for example 'tab' is often double tapped in a terminal, or
37 * in a web form. So 'tab' would be a poor choice for a tap dance.
38 * Letters used in common words as a double. For example 'p' in 'pepper'. If a tap dance function existed on the
39 * letter 'p', the word 'pepper' would be quite frustating to type.
40 *
41 * For the third point, there does exist the 'DOUBLE_SINGLE_TAP', however this is not fully tested
42 *
43 */
44int current_dance(qk_tap_dance_state_t *state) {
45 int current_state = 0;
46 if (state->count == 1) {
47 if (state->interrupted || !state->pressed) {
48 current_state = SINGLE_TAP;
49 } else {
50 current_state = SINGLE_HOLD; //key has not been interrupted, but they key is still held. Means you want to send a 'HOLD'.
51 }
52 } else if (state->count == 2) {
53 /*
54 * DOUBLE_SINGLE_TAP is to distinguish between typing "pepper", and actually wanting a double tap
55 * action when hitting 'pp'. Suggested use case for this return value is when you want to send two
56 * keystrokes of the key, and not the 'double tap' action/macro.
57 */
58 if (state->interrupted) {
59 current_state = DOUBLE_SINGLE_TAP;
60 } else if (state->pressed) {
61 current_state = DOUBLE_HOLD;
62 } else {
63 current_state = DOUBLE_TAP;
64 }
65 } else if (state->count == 3) {
66 if (state->interrupted) {
67 current_state = TRIPLE_SINGLE_TAP;
68 } else if (state->pressed) {
69 current_state = TRIPLE_HOLD;
70 } else {
71 current_state = TRIPLE_TAP;
72 }
73 }
74 return current_state;
75}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dances.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dances.c
new file mode 100644
index 000000000..3d4469872
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dances.c
@@ -0,0 +1,74 @@
1 //--------------------------------------------------------------------------------------------//
2 // | | | | | //
3 // Single tap | Single hold | Double tap | Double hold | Triple tap | Triple hold //
4// Mod tap dances: // | | | | | //
5enum tap_dances { //--------------------------------------------------------------------------------------------//
6 // | | | | | //
7 EQL_PLUS = 0, // = | + | | | | //
8 // | | | | | //
9 //--------------------------------------------------------------------------------------------//
10 // | | | | | //
11 MINS_UNDS = 1, // - | _ | | | | //
12 // | | | | | //
13 //--------------------------------------------------------------------------------------------//
14 // | | | | | //
15 SLSH_BSLS = 2, // / | \ | | | | //
16 // | | | | | //
17 //--------------------------------------------------------------------------------------------//
18 // | | | | | //
19 GRV_TILD = 3, // ` | ~ | | | | //
20 // | | | | | //
21 //--------------------------------------------------------------------------------------------//
22 // | | | | | //
23 QUOT_DQUO = 4, // ' | " | | | | //
24 // | | | | | //
25 //--------------------------------------------------------------------------------------------//
26 // | | | | | //
27 SCLN_COLN = 5, // ; | : | | | | //
28 // | | | | | //
29 //--------------------------------------------------------------------------------------------//
30 // | | | | | //
31 ASTR_CIRC = 6, // * | ^ | | | | //
32 // | | | | | //
33 //--------------------------------------------------------------------------------------------//
34 // | | | | | //
35 APMR_PIPE = 7, // & | | | | | | //
36 // | | | | | //
37 //--------------------------------------------------------------------------------------------//
38 // | | | | | //
39 EXLM_QUES = 8, // ! | ? | | | | //
40 // | | | | | //
41 //--------------------------------------------------------------------------------------------//
42 // | | | | | //
43 HASH_PERC = 9, // # | % | | | | //
44 // | | | | | //
45 //--------------------------------------------------------------------------------------------//
46 // | | | | | //
47 AT_DLR = 10, // @ | $ | | | | //
48 // | | | | | //
49 //--------------------------------------------------------------------------------------------//
50 // | | | | | //
51 LPRN_LBRC = 11, // ( | [ | | | | //
52 // | | | | | //
53 //--------------------------------------------------------------------------------------------//
54 // | | | | | //
55 RPRN_RBRC = 12, // ) | ] | | | | //
56 // | | | | | //
57 //--------------------------------------------------------------------------------------------//
58 // | | | | | //
59 LCBR_LABK = 13, // { | < | | | | //
60 // | | | | | //
61 //--------------------------------------------------------------------------------------------//
62 // | | | | | //
63 RCBR_RABK = 14, // } | > | | | | //
64 // | | | | | //
65 //--------------------------------------------------------------------------------------------//
66 // | | | | | //
67 DOT_COMM = 15, // . | , | | | | //
68 // | | | | | //
69 //--------------------------------------------------------------------------------------------//
70 // | | | | | //
71 NONE_LEAD = 16, // NONE | ALT+SHIFT | LEAD | | | //
72 // | | | | | //
73 //--------------------------------------------------------------------------------------------//
74};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/eeconfig_init_user.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/eeconfig_init_user.c
new file mode 100644
index 000000000..41b7b6694
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/eeconfig_init_user.c
@@ -0,0 +1,3 @@
1// void eeconfig_init_user(void) {
2//
3// };
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/layer_set_state_user.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/layer_set_state_user.c
new file mode 100644
index 000000000..e2eeed6fa
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/layer_set_state_user.c
@@ -0,0 +1,121 @@
1
2uint32_t layer_state_set_user(uint32_t state) {
3 uint8_t layer = biton32(state);
4
5 switch (layer) {
6 case DVORAK:
7 rgblight_sethsv_noeeprom_green();
8 rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
9
10 if (PLOVER_MODE) {
11 plover_toggle();
12 PLOVER_MODE = false;
13 }
14
15 break;
16
17 case PLOVER:
18 rgblight_sethsv_noeeprom_red();
19 rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
20
21 if (!(PLOVER_MODE)) {
22 plover_toggle();
23 PLOVER_MODE = true;
24 }
25
26 break;
27
28 case GAMING:
29 rgblight_sethsv_noeeprom_red();
30 rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
31
32 if (PLOVER_MODE) {
33 plover_toggle();
34 PLOVER_MODE = false;
35 }
36
37 break;
38
39 case ARROWS:
40 rgblight_sethsv_noeeprom_blue();
41 rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
42
43 if (PLOVER_MODE) {
44 plover_toggle();
45 PLOVER_MODE = false;
46 }
47
48 break;
49
50 case MOUSE:
51 rgblight_sethsv_noeeprom_blue();
52 rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
53
54 if (PLOVER_MODE) {
55 plover_toggle();
56 PLOVER_MODE = false;
57 }
58
59 break;
60
61 case NUMPAD:
62 rgblight_sethsv_noeeprom_blue();
63 rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
64
65 if (PLOVER_MODE) {
66 plover_toggle();
67 PLOVER_MODE = false;
68 }
69
70 break;
71
72 case LAYERS:
73 rgblight_sethsv_noeeprom_cyan();
74 rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
75
76 if (PLOVER_MODE) {
77 plover_toggle();
78 PLOVER_MODE = false;
79 }
80
81 break;
82
83 case MEDIA_FN:
84 rgblight_sethsv_noeeprom_yellow();
85 rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
86
87 if (PLOVER_MODE) {
88 plover_toggle();
89 PLOVER_MODE = false;
90 }
91
92 break;
93
94 case HYPER:
95 rgblight_sethsv_noeeprom_magenta();
96 rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
97
98 if (PLOVER_MODE) {
99 plover_toggle();
100 PLOVER_MODE = false;
101 }
102
103 break;
104
105 case FIRMWARE:
106 rgblight_sethsv_noeeprom_magenta();
107 rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
108
109 if (PLOVER_MODE) {
110 plover_toggle();
111 PLOVER_MODE = false;
112 }
113
114 break;
115
116 default:
117 break;
118 }
119
120 return state;
121}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/matrix_scan_user.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/matrix_scan_user.c
new file mode 100644
index 000000000..3b78079cc
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/matrix_scan_user.c
@@ -0,0 +1,12 @@
1#include "../leader/leader_setup.c"
2
3bool MATRIX_SCANNED = false;
4
5void matrix_scan_user(void) {
6 if (!(MATRIX_SCANNED)) {
7 rgblight_sethsv_noeeprom_green();
8 MATRIX_SCANNED = true;
9 }
10
11 #include "../leader/leader_dictionary.c"
12};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c
new file mode 100644
index 000000000..764463582
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c
@@ -0,0 +1,75 @@
1// TODO: Improve this currently there is no feedback if activated by other means.
2bool CAPS_LOCK = false;
3bool NUM_LOCK = false;
4bool SCROLL_LOCK = false;
5
6bool process_record_user(uint16_t keycode, keyrecord_t *record) {
7 if (!process_record_dynamic_macro(keycode, record)) {
8 return false;
9 }
10
11 switch (keycode) {
12 case KC_CLCK:
13 if (record->event.pressed) {
14 if (!(CAPS_LOCK)) {
15 ergodox_right_led_1_on();
16 CAPS_LOCK = true;
17 } else {
18 ergodox_right_led_1_off();
19 CAPS_LOCK = false;
20 }
21 }
22
23 return true;
24
25 case KC_NLCK:
26 if (record->event.pressed) {
27 if (!(NUM_LOCK)) {
28 ergodox_right_led_2_on();
29 NUM_LOCK = true;
30 } else {
31 ergodox_right_led_2_off();
32 NUM_LOCK = false;
33 }
34 }
35
36 return true;
37
38 case KC_SLCK:
39 if (record->event.pressed) {
40 if (!(SCROLL_LOCK)) {
41 ergodox_right_led_3_on();
42 SCROLL_LOCK = true;
43 } else {
44 ergodox_right_led_3_off();
45 SCROLL_LOCK = false;
46 }
47 }
48
49 return true;
50
51 case KC_MS_WH_UP ... KC_MS_WH_RIGHT:
52 if (record->event.pressed) {
53 if (SCROLL_LOCK) {
54 return false;
55 } else {
56 return true;
57 }
58 }
59
60 case MY_CUSTOM_MACRO:
61 if (record->event.pressed) {
62 SEND_STRING("QMK is the best thing ever!"); // this is our macro!
63 return false;
64 }
65
66 case MY_OTHER_MACRO:
67 if (record->event.pressed) {
68 SEND_STRING(SS_LCTRL("ac")); // selects all and copies
69 return false;
70 }
71
72 default:
73 return true;
74 }
75}