1 // Minidox keymap by dustypomerleau
2 // Thanks for checking out my keymap. The rationale behind the layout is described in the README.
4 #include QMK_KEYBOARD_H
6 extern keymap_config_t keymap_config;
18 enum custom_keycodes {
47 int cur_dance (qk_tap_dance_state_t *state);
48 void altop_finished (qk_tap_dance_state_t *state, void *user_data);
49 void altop_reset (qk_tap_dance_state_t *state, void *user_data);
50 void ctlccb_finished (qk_tap_dance_state_t *state, void *user_data);
51 void ctlccb_reset (qk_tap_dance_state_t *state, void *user_data);
52 void guicp_finished (qk_tap_dance_state_t *state, void *user_data);
53 void guicp_reset (qk_tap_dance_state_t *state, void *user_data);
54 void sftocb_finished (qk_tap_dance_state_t *state, void *user_data);
55 void sftocb_reset (qk_tap_dance_state_t *state, void *user_data);
56 void sftpls_finished (qk_tap_dance_state_t *state, void *user_data);
57 void sftpls_reset (qk_tap_dance_state_t *state, void *user_data);
59 #define ALT_2 LALT_T(KC_2)
60 #define ALT_3 LALT_T(KC_3)
61 #define ALT_8 LALT_T(KC_8)
62 #define ALT_D LALT_T(KC_D)
63 #define ALT_E LALT_T(KC_E)
64 #define ALT_K LALT_T(KC_K)
65 #define ALT_OB LALT_T(KC_LBRC)
66 #define ALT_S LALT_T(KC_S)
67 #define CTRL_2 LCTL_T(KC_2)
68 #define CTRL_4 LCTL_T(KC_4)
69 #define CTRL_5 LCTL_T(KC_5)
70 #define CTRL_9 LCTL_T(KC_9)
71 #define CTRL_EQ LCTL_T(KC_EQL)
72 #define CTRL_I LCTL_T(KC_I)
73 #define CTRL_L LCTL_T(KC_L)
74 #define CTRL_R LCTL_T(KC_R)
75 #define CTRL_S LCTL_T(KC_S)
76 #define GUI_0 LGUI_T(KC_0)
77 #define GUI_1 LGUI_T(KC_1)
78 #define GUI_4 LGUI_T(KC_4)
79 #define GUI_7 LGUI_T(KC_7)
80 #define GUI_CB LGUI_T(KC_RBRC)
81 #define GUI_F LGUI_T(KC_F)
82 #define GUI_J LGUI_T(KC_J)
83 #define GUI_N LGUI_T(KC_N)
84 #define GUI_TEA LGUI_T(KC_T)
85 #define MAC_EM S(LALT(KC_MINS))
86 #define MAC_EN LALT(KC_MINS)
87 #define NAV_BK LT(_NAV, KC_BSPC)
88 #define NAV_LK TG(_NAV)
89 #define NUME_SPC LT(_NUM_E, KC_SPC)
90 #define NUMLK_E TG(_NUM_E)
91 #define NUMLK_N TG(_NUM_N)
92 #define NUMN_SPC LT(_NUM_N, KC_SPC)
93 #define SFT_0 LSFT_T(KC_0)
94 #define SFT_1 LSFT_T(KC_1)
95 #define SFT_6 LSFT_T(KC_6)
96 #define SFT_7 LSFT_T(KC_7)
97 #define SFT_A LSFT_T(KC_A)
98 #define SFT_O LSFT_T(KC_O)
99 #define SFT_OS OSM(MOD_LSFT)
100 #define SFT_QOT LSFT_T(KC_QUOT)
101 #define SYM_OS OSL(_SYM)
102 #define SYS_Z LT(_SYS, KC_Z)
103 #define VOL_DN S(LALT(KC__VOLDOWN))
104 #define VOL_UP S(LALT(KC__VOLUP))
106 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
110 * ,----------------------------------. ,----------------------------------.
111 * | Q | W | F | P | B | | J | L | U | Y | ' |
112 * |------+------+------+------+------| |------+------+------+------+------|
113 * | SFT/A| CTL/R| ALT/S| GUI/T| G | | M | GUI/N| ALT/E| CTL/I| SFT/O|
114 * |------+------+------+------+------| |------+------+------+------+------|
115 * | SYS/Z| X | C | D | V | | K | H | , | . | ; |
116 * `----------------------------------' `----------------------------------'
117 * ,--------------------. ,--------------------.
118 * |SFT/OS|NAV/BK| | | |NUM/SP|SFT/OS|
119 * `------+------|SYM/OS| |SYM/OS|------+------'
123 [_CMK_DHM] = LAYOUT( \
124 KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, \
125 SFT_A, CTRL_R, ALT_S, GUI_TEA, KC_G, KC_M, GUI_N, ALT_E, CTRL_I, SFT_O, \
126 SYS_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SCLN, \
127 SFT_OS, NAV_BK, SYM_OS, SYM_OS, NUME_SPC, SFT_OS \
132 * ,----------------------------------. ,----------------------------------.
133 * | Q | W | E | R | T | | Y | U | I | O | P |
134 * |------+------+------+------+------| |------+------+------+------+------|
135 * | SFT/A| CTL/S| ALT/D| GUI/F| G | | H | GUI/J| ALT/K| CTL/L| SFT/'|
136 * |------+------+------+------+------| |------+------+------+------+------|
137 * | SYS/Z| X | C | V | B | | N | M | , | . | ; |
138 * `----------------------------------' `----------------------------------'
139 * ,--------------------. ,--------------------.
140 * |SFT/OS|NAV/BK| | | |NUM/SP|SFT/OS|
141 * `------+------|SYM/OS| |SYM/OS|------+------'
145 [_QWERTY] = LAYOUT( \
146 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
147 SFT_A, CTRL_S, ALT_D, GUI_F, KC_G, KC_H, GUI_J, ALT_K, CTRL_L, SFT_QOT, \
148 SYS_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SCLN, \
149 SFT_OS, NAV_BK, SYM_OS, SYM_OS, NUMN_SPC, SFT_OS \
152 /* System, media, and layer lock keys
153 * If you use QWERTY + the Vanilla numbers primarily, change NUMLK_E to NUMLK_N here.
155 * ,----------------------------------. ,----------------------------------.
156 * | RESET|DEBUG |QWERTY|CMKDHM| | | | VOL--| VOL++| | |
157 * |------+------+------+------+------| |------+------+------+------+------|
158 * | SHIFT| CTRL | ALT | GUI |NAV LK| | POWER| VOL- | VOL+ | MUTE | MPLY |
159 * |------+------+------+------+------| |------+------+------+------+------|
160 * | | |AU OFF| AU ON| | | |NUM LK| MRWD | MFFD | |
161 * `----------------------------------' `----------------------------------'
162 * ,--------------------. ,------,-------------.
164 * `-------------| | | |------+------.
169 RESET, DEBUG, QWERTY, CMK_DHM, _______, _______, KC__VOLDOWN, KC__VOLUP, _______, _______, \
170 KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, NAV_LK, KC_POWER, VOL_DN, VOL_UP, KC__MUTE, KC_MPLY, \
171 _______, _______, AU_OFF, AU_ON, _______, _______, NUMLK_E, KC_MRWD, KC_MFFD, _______, \
172 _______, _______, _______, _______, _______, _______ \
175 /* Navigation + mouse keys
177 * ,----------------------------------. ,----------------------------------.
178 * | PSCR | | WH U | WH D | | | BSPC | PGDN | PGUP | HOME | END |
179 * |------+------+------+------+------| |------+------+------+------+------|
180 * | SHIFT| CTRL | ALT | GUI |NAV LK| | CAPS | LEFT | DOWN | UP | RIGHT|
181 * |------+------+------+------+------| |------+------+------+------+------|
182 * | | ACL0 | ACL1 | ACL2 | BTN2 | | BTN1 | MS L | MS D | MS U | MS R |
183 * `----------------------------------' `----------------------------------'
184 * ,--------------------. ,--------------------.
185 * | | | | | | ENTER| |
186 * `------+------| ESC | | DEL |------+------'
191 KC_PSCR, _______, KC_WH_U, KC_WH_D, _______, KC_BSPC, KC_PGDN, KC_PGUP, KC_HOME, KC_END, \
192 KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, NAV_LK, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, \
193 _______, KC_ACL0, KC_ACL1, KC_ACL2, KC_BTN2, KC_BTN1, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, \
194 _______, _______, KC_ESC, KC_DEL, KC_ENT, _______ \
197 /* Number + function keys (ergonomic number order - default pairing with Colemak)
199 * ,----------------------------------. ,----------------------------------.
200 * | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 |
201 * |------+------+------+------+------| |------+------+------+------+------|
202 * | SFT/7| CTL/5| ALT/3| GUI/1| 9 | | 8 | GUI/0| ALT/2| CTL/4| SFT/6|
203 * |------+------+------+------+------| |------+------+------+------+------|
204 * | | | F11 | F12 | BSPC | | DEL |NUM LK| | | |
205 * `----------------------------------' `----------------------------------'
206 * ,--------------------. ,--------------------.
207 * | | TAB | | | | | |
208 * `------+------| ESC | | |------+------'
213 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, \
214 SFT_7, CTRL_5, ALT_3, GUI_1, KC_9, KC_8, GUI_0, ALT_2, CTRL_4, SFT_6, \
215 _______, _______, KC_F11, KC_F12, KC_BSPC, KC_DEL, NUMLK_E, _______, _______, _______, \
216 _______, KC_TAB, KC_ESC, _______, _______, _______ \
219 /* Number + function keys (numeric number order - default pairing with QWERTY)
221 * ,----------------------------------. ,----------------------------------.
222 * | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 |
223 * |------+------+------+------+------| |------+------+------+------+------|
224 * | SFT/1| CTL/2| ALT/3| GUI/4| 5 | | 6 | GUI/7| ALT/8| CTL/9| SFT/0|
225 * |------+------+------+------+------| |------+------+------+------+------|
226 * | | | F11 | F12 | BSPC | | DEL |NUM LK| | | |
227 * `----------------------------------' `----------------------------------'
228 * ,--------------------. ,--------------------.
229 * | | TAB | | | | | |
230 * `------+------| ESC | | |------+------'
235 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, \
236 SFT_1, CTRL_2, ALT_3, GUI_4, KC_5, KC_6, GUI_7, ALT_8, CTRL_9, SFT_0, \
237 _______, _______, KC_F11, KC_F12, KC_BSPC, KC_DEL, NUMLK_N, _______, _______, _______, \
238 _______, KC_TAB, KC_ESC, _______, _______, _______ \
244 * ,----------------------------------. ,----------------------------------.
245 * | ! | @ | # | $ | % | | ^ | & | * | ? | ' |
246 * |------+------+------+------+------| |------+------+------+------+------|
247 * | SFT/+| CTL/=| ALT/(| GUI/)| " | | : | GUI/]| ALT/[| CTL/}| SFT/{|
248 * |------+------+------+------+------| |------+------+------+------+------|
249 * | < | | | - | > | \ | | ` | _ | / | ~ | ; |
250 * `----------------------------------' `----------------------------------'
251 * ,--------------------. ,--------------------.
252 * | |ENDASH| | | |EMDASH| |
253 * `------+------| | | |------+------'
258 KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_QUES, KC_QUOT, \
259 TD(SFT_PLS), CTRL_EQ, TD(ALT_OP), TD(GUI_CP), KC_DQT, KC_COLN, GUI_CB, ALT_OB, TD(CTL_CCB), TD(SFT_OCB), \
260 KC_LT, KC_PIPE, KC_MINS, KC_GT, KC_BSLS, KC_GRV, KC_UNDS, KC_SLSH, KC_TILD, KC_SCLN, \
261 _______, MAC_EN, _______, _______, MAC_EM, _______ \
266 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
269 if (record->event.pressed) {
270 set_single_persistent_default_layer(_CMK_DHM);
274 if (record->event.pressed) {
275 set_single_persistent_default_layer(_QWERTY);
283 int cur_dance (qk_tap_dance_state_t *state) {
284 if (state->count == 1) {
285 if (state->interrupted || !state->pressed) return SINGLE_TAP;
286 else return SINGLE_HOLD;
288 if (state->count == 2) return DOUBLE_SINGLE_TAP;
292 static tap altop_tap_state = {
293 .is_press_action = true,
297 void altop_finished (qk_tap_dance_state_t *state, void *user_data) {
298 altop_tap_state.state = cur_dance(state);
299 switch (altop_tap_state.state) {
301 register_mods(MOD_BIT(KC_LSFT));
305 register_mods(MOD_BIT(KC_LALT));
307 case DOUBLE_SINGLE_TAP:
308 register_mods(MOD_BIT(KC_LSFT));
314 void altop_reset (qk_tap_dance_state_t *state, void *user_data) {
315 switch (altop_tap_state.state) {
317 unregister_code(KC_9);
318 unregister_mods(MOD_BIT(KC_LSFT));
321 unregister_mods(MOD_BIT(KC_LALT));
323 case DOUBLE_SINGLE_TAP:
324 unregister_code(KC_9);
325 unregister_mods(MOD_BIT(KC_LSFT));
327 altop_tap_state.state = 0;
330 static tap ctlccb_tap_state = {
331 .is_press_action = true,
335 void ctlccb_finished (qk_tap_dance_state_t *state, void *user_data) {
336 ctlccb_tap_state.state = cur_dance(state);
337 switch (ctlccb_tap_state.state) {
339 register_mods(MOD_BIT(KC_LSFT));
340 register_code(KC_RBRC);
343 register_mods(MOD_BIT(KC_LCTL));
345 case DOUBLE_SINGLE_TAP:
346 register_mods(MOD_BIT(KC_LSFT));
348 register_code(KC_RBRC);
352 void ctlccb_reset (qk_tap_dance_state_t *state, void *user_data) {
353 switch (ctlccb_tap_state.state) {
355 unregister_code(KC_RBRC);
356 unregister_mods(MOD_BIT(KC_LSFT));
359 unregister_mods(MOD_BIT(KC_LCTL));
361 case DOUBLE_SINGLE_TAP:
362 unregister_code(KC_RBRC);
363 unregister_mods(MOD_BIT(KC_LSFT));
365 ctlccb_tap_state.state = 0;
368 static tap guicp_tap_state = {
369 .is_press_action = true,
373 void guicp_finished (qk_tap_dance_state_t *state, void *user_data) {
374 guicp_tap_state.state = cur_dance(state);
375 switch (guicp_tap_state.state) {
377 register_mods(MOD_BIT(KC_LSFT));
381 register_mods(MOD_BIT(KC_LGUI));
383 case DOUBLE_SINGLE_TAP:
384 register_mods(MOD_BIT(KC_LSFT));
390 void guicp_reset (qk_tap_dance_state_t *state, void *user_data) {
391 switch (guicp_tap_state.state) {
393 unregister_code(KC_0);
394 unregister_mods(MOD_BIT(KC_LSFT));
397 unregister_mods(MOD_BIT(KC_LGUI));
399 case DOUBLE_SINGLE_TAP:
400 unregister_code(KC_0);
401 unregister_mods(MOD_BIT(KC_LSFT));
403 guicp_tap_state.state = 0;
406 static tap sftocb_tap_state = {
407 .is_press_action = true,
411 void sftocb_finished (qk_tap_dance_state_t *state, void *user_data) {
412 sftocb_tap_state.state = cur_dance(state);
413 switch (sftocb_tap_state.state) {
415 register_mods(MOD_BIT(KC_LSFT));
416 register_code(KC_LBRC);
419 register_mods(MOD_BIT(KC_LSFT));
421 case DOUBLE_SINGLE_TAP:
422 register_mods(MOD_BIT(KC_LSFT));
424 register_code(KC_LBRC);
428 void sftocb_reset (qk_tap_dance_state_t *state, void *user_data) {
429 switch (sftocb_tap_state.state) {
431 unregister_code(KC_LBRC);
432 unregister_mods(MOD_BIT(KC_LSFT));
435 unregister_mods(MOD_BIT(KC_LSFT));
437 case DOUBLE_SINGLE_TAP:
438 unregister_code(KC_LBRC);
439 unregister_mods(MOD_BIT(KC_LSFT));
441 sftocb_tap_state.state = 0;
444 static tap sftpls_tap_state = {
445 .is_press_action = true,
449 void sftpls_finished (qk_tap_dance_state_t *state, void *user_data) {
450 sftpls_tap_state.state = cur_dance(state);
451 switch (sftpls_tap_state.state) {
453 register_mods(MOD_BIT(KC_LSFT));
454 register_code(KC_EQL);
457 register_mods(MOD_BIT(KC_LSFT));
459 case DOUBLE_SINGLE_TAP:
460 register_mods(MOD_BIT(KC_LSFT));
462 register_code(KC_EQL);
466 void sftpls_reset (qk_tap_dance_state_t *state, void *user_data) {
467 switch (sftpls_tap_state.state) {
469 unregister_code(KC_EQL);
470 unregister_mods(MOD_BIT(KC_LSFT));
473 unregister_mods(MOD_BIT(KC_LSFT));
475 case DOUBLE_SINGLE_TAP:
476 unregister_code(KC_EQL);
477 unregister_mods(MOD_BIT(KC_LSFT));
479 sftpls_tap_state.state = 0;
482 qk_tap_dance_action_t tap_dance_actions[] = {
483 [ALT_OP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altop_finished, altop_reset),
484 [CTL_CCB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctlccb_finished, ctlccb_reset),
485 [GUI_CP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, guicp_finished, guicp_reset),
486 [SFT_OCB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, sftocb_finished, sftocb_reset),
487 [SFT_PLS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, sftpls_finished, sftpls_reset)