aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDusty Pomerleau <dustypomerleau@users.noreply.github.com>2019-02-13 11:46:40 +1100
committerDrashna Jaelre <drashna@live.com>2019-02-12 16:46:40 -0800
commit15297bcfce016b8f03c2004b3db5a26e38cf994e (patch)
tree785a37a3fd2e4d423f22e49937178080935f2521
parentd3f7910e680379edd80f8fbe76dd756f7f35c0f3 (diff)
downloadqmk_firmware-15297bcfce016b8f03c2004b3db5a26e38cf994e.tar.gz
qmk_firmware-15297bcfce016b8f03c2004b3db5a26e38cf994e.zip
[Keymap] Add Minidox keymap by dustypomerleau (#5101)
* add dusty keymap * change keymap folder to match my github username * initial keymap completed in comments only * layout without NAV completed in comments only * disable Command to prevent interference with Space Cadet keys * switch _ and \ in the symbol layer * Layers complete through _NAV * add thumb keys to _NAV * complete _NUM * all layouts complete; still needs `process_user_record()` * completed first draft of keymap; still needs config.h to match * corrected keycodes for Mac macro-volume keys * fix Mac mute keycode * add missing Mac keycodes for previous and next track * placeholder for qwerty layout, not yet completed; remove unnecessary breaks; add todos * eliminate Preonic branch before switching to Minidox branch: • delete dustypomerleau Preonic keymap folder • complete keymap.c (QWERTY layer, vanilla numbers layer) TODO: • add preferences to config.h • complete the README * edit commented keymap diagrams for clarity in dual function keys * define initial config.h and add rules.mk for mouse key support * fix redundant line after implementation of tap_code() * fixed key_timer declaration, added README and rules * formatting of keymap * add CTPC to config * cycle thumb keys to favor center position * modify config.h for temporary Pro Micro compatibility * remove superfluous call to use serial; homebrewed mod tap keys are still broken with OSL * merge _SYS and _MEDIA on new Z_SYS key * ALT_OP example of new MT macro complete * initial narze-inspired MT fixes in PRU * add (currently superfluous) custom keycode for the _SYS layer * rudimentary `OSL` symbol macros that immediately register the mod and fail to reset the oneshot layer, but do output the proper keys—fix both of these things * remove permissive hold to improve tapping performance * remove calls to `clear_oneshot_layer_state()`, as they have no effect inside `process_record_user()`. Tapdance appears to be the way forward. * final commit before tapdance code; correct layout in comments * initial tapdance code for shifted mod taps * add numeric and ergo NUM layers and pinky shifts for keycuts * add TD() wrappers to tapdance codes and clean up commented layout guides * add faux return to cur_dance to allow compilation - TODO: research what the default clause should be in cur_dance * update commented schematics for better readability * add backspace and delete to lockable layers, Z_SYS -> SYS_Z for consistency, fix schematic errors * add `DOUBLE_SINGLE_TAP` to tapdance cases to allow doubling of the single tap character without waiting tapping term * remove reduced oneshot tapping toggles * update README * newline tweak :) * Update keyboards/minidox/keymaps/dustypomerleau/keymap.c Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com> * Update keyboards/minidox/keymaps/dustypomerleau/config.h Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com> * Update keyboards/minidox/keymaps/dustypomerleau/config.h Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com> * Update keyboards/minidox/keymaps/dustypomerleau/config.h Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com> * Update keyboards/minidox/keymaps/dustypomerleau/config.h Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com> * remove `PREVENT_STUCK_MODIFIERS`, as this is default behavior
-rw-r--r--keyboards/minidox/keymaps/dustypomerleau/README.md28
-rw-r--r--keyboards/minidox/keymaps/dustypomerleau/config.h26
-rw-r--r--keyboards/minidox/keymaps/dustypomerleau/keymap.c489
-rw-r--r--keyboards/minidox/keymaps/dustypomerleau/rules.mk4
4 files changed, 547 insertions, 0 deletions
diff --git a/keyboards/minidox/keymaps/dustypomerleau/README.md b/keyboards/minidox/keymaps/dustypomerleau/README.md
new file mode 100644
index 000000000..b2ec77125
--- /dev/null
+++ b/keyboards/minidox/keymaps/dustypomerleau/README.md
@@ -0,0 +1,28 @@
1## dustypomerleau, Minidox layout
2
3The rationale behind my layout can be summarized as follows:
4
5- Symmetry is important because use-cases are hard to predict. Whenever possible, modifiers and layer keys should be available from either hand.
6- Inward rolls should be leveraged not just for alphas (Colemak DHm), but also for coding/symbols.
7- Number order—like alpha order—should be designed to favor use of the strongest fingers.
8- One-shot keys can greatly reduce the strain of typing, and should be leveraged.
9
10Some aspects of my layout are optimized for macOS (order of modifiers, manner of producing en and em dashes, coding of micro-volume adjustments, etc.), but can be easily tweaked for the OS of your choice.
11
12Shift can be a tricky modifier when used in `MT()` combinations, particularly for fast typists on split boards using serial. This can be partially mitigated with options in `config.h`, but still requires a relatively strict typing style/accuracy from the fast typist. The tendency is for faster typists to combat mod/tap mistakes by using very short intervals for `TAPPING_TERM`, but this can introduce its own set of complications. Shift is also one of the highest-yield opportunities to use `OSM()`. For these reasons, I pulled Shift onto dedicated keys in the thumbs for use during regular typing (the home row Shifts have been left in place for use during selection and keycuts).
13
14The tapdance code that I used to create mod/tap keys inside my symbol layer allows up to 2 consecutive symbols within `TAPPING_TERM`. If you think you will need to quickly nest more than that, feel free to add more `case`s.
15
16### Special thanks
17
18- Everyone on the QMK Discord, for helping me work out the code for mod/tap keys using shifted symbols.
19- Everyone on the Colemak Discord, for their initial feedback on the layout.
20- @stevep and @DreymaR, for their work on Colemak DH(m), a truly awesome typing experience (and of course Shai Coleman, for starting it all off!).
21- @ckofy, for offering a dramatic improvement on Dvorak's original number order.
22- u/That-Canadian, for designing this awesome keyboard.
23
24### Questions or comments?
25
26- GitHub @dustypomerleau
27- Twitter @duspom
28- Discord @dusty#8897
diff --git a/keyboards/minidox/keymaps/dustypomerleau/config.h b/keyboards/minidox/keymaps/dustypomerleau/config.h
new file mode 100644
index 000000000..5166e06d8
--- /dev/null
+++ b/keyboards/minidox/keymaps/dustypomerleau/config.h
@@ -0,0 +1,26 @@
1// dustypomerleau, Minidox config
2
3#pragma once
4
5
6#define EE_HANDS
7#define IGNORE_MOD_TAP_INTERRUPT
8#define ONESHOT_TIMEOUT 1000
9#define TAPPING_TERM 200
10#define USE_SERIAL
11
12// optional configuration:
13
14// #define CONVERT_TO_PROTON_C
15// #define ONESHOT_TAP_TOGGLE 2 // not compatible with TAPPING_FORCE_HOLD
16// #define PERMISSIVE_HOLD
17// #define TAPPING_FORCE_HOLD // allows rapid mod use after tap event, but sacrifices double-tap to repeat
18
19// #define MOUSEKEY_DELAY 0 // delay before cursor movement (high feels sluggish, low makes fine movement difficult)
20// #define MOUSEKEY_INTERVAL 20 // time between movement reports - low settings feel like high mouse speed
21// #define MOUSEKEY_MAX_SPEED 10
22// #define MOUSEKEY_TIME_TO_MAX 60
23// #define MOUSEKEY_WHEEL_DELAY 0
24// #define MOUSEKEY_WHEEL_MAX_SPEED 8
25// #define MOUSEKEY_WHEEL_TIME_TO_MAX 4
26
diff --git a/keyboards/minidox/keymaps/dustypomerleau/keymap.c b/keyboards/minidox/keymaps/dustypomerleau/keymap.c
new file mode 100644
index 000000000..13b84d64d
--- /dev/null
+++ b/keyboards/minidox/keymaps/dustypomerleau/keymap.c
@@ -0,0 +1,489 @@
1// Minidox keymap by dustypomerleau
2// Thanks for checking out my keymap. The rationale behind the layout is described in the README.
3
4#include QMK_KEYBOARD_H
5
6extern keymap_config_t keymap_config;
7
8enum custom_layers {
9 _CMK_DHM,
10 _QWERTY,
11 _SYS,
12 _NAV,
13 _NUM_E,
14 _NUM_N,
15 _SYM
16};
17
18enum custom_keycodes {
19 CMK_DHM = SAFE_RANGE,
20 QWERTY,
21 SYS,
22 NAV,
23 NUM_E,
24 NUM_N,
25 SYM
26};
27
28typedef struct {
29 bool is_press_action;
30 int state;
31} tap;
32
33enum {
34 SINGLE_TAP = 1,
35 SINGLE_HOLD = 2,
36 DOUBLE_SINGLE_TAP = 3
37};
38
39enum {
40 ALT_OP = 0,
41 CTL_CCB,
42 GUI_CP,
43 SFT_OCB,
44 SFT_PLS
45};
46
47int cur_dance (qk_tap_dance_state_t *state);
48void altop_finished (qk_tap_dance_state_t *state, void *user_data);
49void altop_reset (qk_tap_dance_state_t *state, void *user_data);
50void ctlccb_finished (qk_tap_dance_state_t *state, void *user_data);
51void ctlccb_reset (qk_tap_dance_state_t *state, void *user_data);
52void guicp_finished (qk_tap_dance_state_t *state, void *user_data);
53void guicp_reset (qk_tap_dance_state_t *state, void *user_data);
54void sftocb_finished (qk_tap_dance_state_t *state, void *user_data);
55void sftocb_reset (qk_tap_dance_state_t *state, void *user_data);
56void sftpls_finished (qk_tap_dance_state_t *state, void *user_data);
57void sftpls_reset (qk_tap_dance_state_t *state, void *user_data);
58
59#define _______ KC_TRNS
60#define ALT_2 LALT_T(KC_2)
61#define ALT_3 LALT_T(KC_3)
62#define ALT_8 LALT_T(KC_8)
63#define ALT_D LALT_T(KC_D)
64#define ALT_E LALT_T(KC_E)
65#define ALT_K LALT_T(KC_K)
66#define ALT_OB LALT_T(KC_LBRC)
67#define ALT_S LALT_T(KC_S)
68#define CTRL_2 LCTL_T(KC_2)
69#define CTRL_4 LCTL_T(KC_4)
70#define CTRL_5 LCTL_T(KC_5)
71#define CTRL_9 LCTL_T(KC_9)
72#define CTRL_EQ LCTL_T(KC_EQL)
73#define CTRL_I LCTL_T(KC_I)
74#define CTRL_L LCTL_T(KC_L)
75#define CTRL_R LCTL_T(KC_R)
76#define CTRL_S LCTL_T(KC_S)
77#define GUI_0 LGUI_T(KC_0)
78#define GUI_1 LGUI_T(KC_1)
79#define GUI_4 LGUI_T(KC_4)
80#define GUI_7 LGUI_T(KC_7)
81#define GUI_CB LGUI_T(KC_RBRC)
82#define GUI_F LGUI_T(KC_F)
83#define GUI_J LGUI_T(KC_J)
84#define GUI_N LGUI_T(KC_N)
85#define GUI_TEA LGUI_T(KC_T)
86#define MAC_EM S(LALT(KC_MINS))
87#define MAC_EN LALT(KC_MINS)
88#define NAV_BK LT(_NAV, KC_BSPC)
89#define NAV_LK TG(_NAV)
90#define NUME_SPC LT(_NUM_E, KC_SPC)
91#define NUMLK_E TG(_NUM_E)
92#define NUMLK_N TG(_NUM_N)
93#define NUMN_SPC LT(_NUM_N, KC_SPC)
94#define SFT_0 LSFT_T(KC_0)
95#define SFT_1 LSFT_T(KC_1)
96#define SFT_6 LSFT_T(KC_6)
97#define SFT_7 LSFT_T(KC_7)
98#define SFT_A LSFT_T(KC_A)
99#define SFT_O LSFT_T(KC_O)
100#define SFT_OS OSM(MOD_LSFT)
101#define SFT_QOT LSFT_T(KC_QUOT)
102#define SYM_OS OSL(_SYM)
103#define SYS_Z LT(_SYS, KC_Z)
104#define VOL_DN S(LALT(KC__VOLDOWN))
105#define VOL_UP S(LALT(KC__VOLUP))
106
107const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
108
109/* Colemak DHm
110 *
111 * ,----------------------------------. ,----------------------------------.
112 * | Q | W | F | P | B | | J | L | U | Y | ' |
113 * |------+------+------+------+------| |------+------+------+------+------|
114 * | SFT/A| CTL/R| ALT/S| GUI/T| G | | M | GUI/N| ALT/E| CTL/I| SFT/O|
115 * |------+------+------+------+------| |------+------+------+------+------|
116 * | SYS/Z| X | C | D | V | | K | H | , | . | ; |
117 * `----------------------------------' `----------------------------------'
118 * ,--------------------. ,--------------------.
119 * |SFT/OS|NAV/BK| | | |NUM/SP|SFT/OS|
120 * `------+------|SYM/OS| |SYM/OS|------+------'
121 * | | | |
122 * `------' `------'
123 */
124[_CMK_DHM] = LAYOUT( \
125 KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, \
126 SFT_A, CTRL_R, ALT_S, GUI_TEA, KC_G, KC_M, GUI_N, ALT_E, CTRL_I, SFT_O, \
127 SYS_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SCLN, \
128 SFT_OS, NAV_BK, SYM_OS, SYM_OS, NUME_SPC, SFT_OS \
129),
130
131/* QWERTY
132 *
133 * ,----------------------------------. ,----------------------------------.
134 * | Q | W | E | R | T | | Y | U | I | O | P |
135 * |------+------+------+------+------| |------+------+------+------+------|
136 * | SFT/A| CTL/S| ALT/D| GUI/F| G | | H | GUI/J| ALT/K| CTL/L| SFT/'|
137 * |------+------+------+------+------| |------+------+------+------+------|
138 * | SYS/Z| X | C | V | B | | N | M | , | . | ; |
139 * `----------------------------------' `----------------------------------'
140 * ,--------------------. ,--------------------.
141 * |SFT/OS|NAV/BK| | | |NUM/SP|SFT/OS|
142 * `------+------|SYM/OS| |SYM/OS|------+------'
143 * | | | |
144 * `------' `------'
145 */
146[_QWERTY] = LAYOUT( \
147 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
148 SFT_A, CTRL_S, ALT_D, GUI_F, KC_G, KC_H, GUI_J, ALT_K, CTRL_L, SFT_QOT, \
149 SYS_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SCLN, \
150 SFT_OS, NAV_BK, SYM_OS, SYM_OS, NUMN_SPC, SFT_OS \
151),
152
153/* System, media, and layer lock keys
154 * If you use QWERTY + the Vanilla numbers primarily, change NUMLK_E to NUMLK_N here.
155 *
156 * ,----------------------------------. ,----------------------------------.
157 * | RESET|DEBUG |QWERTY|CMKDHM| | | | VOL--| VOL++| | |
158 * |------+------+------+------+------| |------+------+------+------+------|
159 * | SHIFT| CTRL | ALT | GUI |NAV LK| | POWER| VOL- | VOL+ | MUTE | MPLY |
160 * |------+------+------+------+------| |------+------+------+------+------|
161 * | | |AU OFF| AU ON| | | |NUM LK| MRWD | MFFD | |
162 * `----------------------------------' `----------------------------------'
163 * ,--------------------. ,------,-------------.
164 * | | | | | | | |
165 * `-------------| | | |------+------.
166 * | | | |
167 * `------' `------'
168 */
169[_SYS] = LAYOUT( \
170 RESET, DEBUG, QWERTY, CMK_DHM, _______, _______, KC__VOLDOWN, KC__VOLUP, _______, _______, \
171 KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, NAV_LK, KC_POWER, VOL_DN, VOL_UP, KC__MUTE, KC_MPLY, \
172 _______, _______, AU_OFF, AU_ON, _______, _______, NUMLK_E, KC_MRWD, KC_MFFD, _______, \
173 _______, _______, _______, _______, _______, _______ \
174),
175
176/* Navigation + mouse keys
177 *
178 * ,----------------------------------. ,----------------------------------.
179 * | PSCR | | WH U | WH D | | | BSPC | PGDN | PGUP | HOME | END |
180 * |------+------+------+------+------| |------+------+------+------+------|
181 * | SHIFT| CTRL | ALT | GUI |NAV LK| | CAPS | LEFT | DOWN | UP | RIGHT|
182 * |------+------+------+------+------| |------+------+------+------+------|
183 * | | ACL0 | ACL1 | ACL2 | BTN2 | | BTN1 | MS L | MS D | MS U | MS R |
184 * `----------------------------------' `----------------------------------'
185 * ,--------------------. ,--------------------.
186 * | | | | | | ENTER| |
187 * `------+------| ESC | | DEL |------+------'
188 * | | | |
189 * `------' `------'
190 */
191[_NAV] = LAYOUT( \
192 KC_PSCR, _______, KC_WH_U, KC_WH_D, _______, KC_BSPC, KC_PGDN, KC_PGUP, KC_HOME, KC_END, \
193 KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, NAV_LK, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, \
194 _______, KC_ACL0, KC_ACL1, KC_ACL2, KC_BTN2, KC_BTN1, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, \
195 _______, _______, KC_ESC, KC_DEL, KC_ENT, _______ \
196),
197
198/* Number + function keys (ergonomic number order - default pairing with Colemak)
199 *
200 * ,----------------------------------. ,----------------------------------.
201 * | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 |
202 * |------+------+------+------+------| |------+------+------+------+------|
203 * | SFT/7| CTL/5| ALT/3| GUI/1| 9 | | 8 | GUI/0| ALT/2| CTL/4| SFT/6|
204 * |------+------+------+------+------| |------+------+------+------+------|
205 * | | | F11 | F12 | BSPC | | DEL |NUM LK| | | |
206 * `----------------------------------' `----------------------------------'
207 * ,--------------------. ,--------------------.
208 * | | TAB | | | | | |
209 * `------+------| ESC | | |------+------'
210 * | | | |
211 * `------' `------'
212 */
213[_NUM_E] = LAYOUT( \
214 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, \
215 SFT_7, CTRL_5, ALT_3, GUI_1, KC_9, KC_8, GUI_0, ALT_2, CTRL_4, SFT_6, \
216 _______, _______, KC_F11, KC_F12, KC_BSPC, KC_DEL, NUMLK_E, _______, _______, _______, \
217 _______, KC_TAB, KC_ESC, _______, _______, _______ \
218),
219
220/* Number + function keys (numeric number order - default pairing with QWERTY)
221 *
222 * ,----------------------------------. ,----------------------------------.
223 * | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 |
224 * |------+------+------+------+------| |------+------+------+------+------|
225 * | SFT/1| CTL/2| ALT/3| GUI/4| 5 | | 6 | GUI/7| ALT/8| CTL/9| SFT/0|
226 * |------+------+------+------+------| |------+------+------+------+------|
227 * | | | F11 | F12 | BSPC | | DEL |NUM LK| | | |
228 * `----------------------------------' `----------------------------------'
229 * ,--------------------. ,--------------------.
230 * | | TAB | | | | | |
231 * `------+------| ESC | | |------+------'
232 * | | | |
233 * `------' `------'
234 */
235[_NUM_N] = LAYOUT( \
236 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, \
237 SFT_1, CTRL_2, ALT_3, GUI_4, KC_5, KC_6, GUI_7, ALT_8, CTRL_9, SFT_0, \
238 _______, _______, KC_F11, KC_F12, KC_BSPC, KC_DEL, NUMLK_N, _______, _______, _______, \
239 _______, KC_TAB, KC_ESC, _______, _______, _______ \
240),
241
242
243/* Symbols
244 *
245 * ,----------------------------------. ,----------------------------------.
246 * | ! | @ | # | $ | % | | ^ | & | * | ? | ' |
247 * |------+------+------+------+------| |------+------+------+------+------|
248 * | SFT/+| CTL/=| ALT/(| GUI/)| " | | : | GUI/]| ALT/[| CTL/}| SFT/{|
249 * |------+------+------+------+------| |------+------+------+------+------|
250 * | < | | | - | > | \ | | ` | _ | / | ~ | ; |
251 * `----------------------------------' `----------------------------------'
252 * ,--------------------. ,--------------------.
253 * | |ENDASH| | | |EMDASH| |
254 * `------+------| | | |------+------'
255 * | | | |
256 * `------' `------'
257 */
258[_SYM] = LAYOUT( \
259 KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_QUES, KC_QUOT, \
260 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), \
261 KC_LT, KC_PIPE, KC_MINS, KC_GT, KC_BSLS, KC_GRV, KC_UNDS, KC_SLSH, KC_TILD, KC_SCLN, \
262 _______, MAC_EN, _______, _______, MAC_EM, _______ \
263)
264
265};
266
267bool process_record_user(uint16_t keycode, keyrecord_t *record) {
268 switch (keycode) {
269 case CMK_DHM:
270 if (record->event.pressed) {
271 set_single_persistent_default_layer(_CMK_DHM);
272 }
273 return false;
274 case QWERTY:
275 if (record->event.pressed) {
276 set_single_persistent_default_layer(_QWERTY);
277 }
278 return false;
279 default:
280 return true;
281 }
282};
283
284int cur_dance (qk_tap_dance_state_t *state) {
285 if (state->count == 1) {
286 if (state->interrupted || !state->pressed) return SINGLE_TAP;
287 else return SINGLE_HOLD;
288 }
289 if (state->count == 2) return DOUBLE_SINGLE_TAP;
290 else return 8;
291}
292
293static tap altop_tap_state = {
294 .is_press_action = true,
295 .state = 0
296};
297
298void altop_finished (qk_tap_dance_state_t *state, void *user_data) {
299 altop_tap_state.state = cur_dance(state);
300 switch (altop_tap_state.state) {
301 case SINGLE_TAP:
302 register_mods(MOD_BIT(KC_LSFT));
303 register_code(KC_9);
304 break;
305 case SINGLE_HOLD:
306 register_mods(MOD_BIT(KC_LALT));
307 break;
308 case DOUBLE_SINGLE_TAP:
309 register_mods(MOD_BIT(KC_LSFT));
310 tap_code(KC_9);
311 register_code(KC_9);
312 }
313}
314
315void altop_reset (qk_tap_dance_state_t *state, void *user_data) {
316 switch (altop_tap_state.state) {
317 case SINGLE_TAP:
318 unregister_code(KC_9);
319 unregister_mods(MOD_BIT(KC_LSFT));
320 break;
321 case SINGLE_HOLD:
322 unregister_mods(MOD_BIT(KC_LALT));
323 break;
324 case DOUBLE_SINGLE_TAP:
325 unregister_code(KC_9);
326 unregister_mods(MOD_BIT(KC_LSFT));
327 }
328 altop_tap_state.state = 0;
329}
330
331static tap ctlccb_tap_state = {
332 .is_press_action = true,
333 .state = 0
334};
335
336void ctlccb_finished (qk_tap_dance_state_t *state, void *user_data) {
337 ctlccb_tap_state.state = cur_dance(state);
338 switch (ctlccb_tap_state.state) {
339 case SINGLE_TAP:
340 register_mods(MOD_BIT(KC_LSFT));
341 register_code(KC_RBRC);
342 break;
343 case SINGLE_HOLD:
344 register_mods(MOD_BIT(KC_LCTL));
345 break;
346 case DOUBLE_SINGLE_TAP:
347 register_mods(MOD_BIT(KC_LSFT));
348 tap_code(KC_RBRC);
349 register_code(KC_RBRC);
350 }
351}
352
353void ctlccb_reset (qk_tap_dance_state_t *state, void *user_data) {
354 switch (ctlccb_tap_state.state) {
355 case SINGLE_TAP:
356 unregister_code(KC_RBRC);
357 unregister_mods(MOD_BIT(KC_LSFT));
358 break;
359 case SINGLE_HOLD:
360 unregister_mods(MOD_BIT(KC_LCTL));
361 break;
362 case DOUBLE_SINGLE_TAP:
363 unregister_code(KC_RBRC);
364 unregister_mods(MOD_BIT(KC_LSFT));
365 }
366 ctlccb_tap_state.state = 0;
367}
368
369static tap guicp_tap_state = {
370 .is_press_action = true,
371 .state = 0
372};
373
374void guicp_finished (qk_tap_dance_state_t *state, void *user_data) {
375 guicp_tap_state.state = cur_dance(state);
376 switch (guicp_tap_state.state) {
377 case SINGLE_TAP:
378 register_mods(MOD_BIT(KC_LSFT));
379 register_code(KC_0);
380 break;
381 case SINGLE_HOLD:
382 register_mods(MOD_BIT(KC_LGUI));
383 break;
384 case DOUBLE_SINGLE_TAP:
385 register_mods(MOD_BIT(KC_LSFT));
386 tap_code(KC_0);
387 register_code(KC_0);
388 }
389}
390
391void guicp_reset (qk_tap_dance_state_t *state, void *user_data) {
392 switch (guicp_tap_state.state) {
393 case SINGLE_TAP:
394 unregister_code(KC_0);
395 unregister_mods(MOD_BIT(KC_LSFT));
396 break;
397 case SINGLE_HOLD:
398 unregister_mods(MOD_BIT(KC_LGUI));
399 break;
400 case DOUBLE_SINGLE_TAP:
401 unregister_code(KC_0);
402 unregister_mods(MOD_BIT(KC_LSFT));
403 }
404 guicp_tap_state.state = 0;
405}
406
407static tap sftocb_tap_state = {
408 .is_press_action = true,
409 .state = 0
410};
411
412void sftocb_finished (qk_tap_dance_state_t *state, void *user_data) {
413 sftocb_tap_state.state = cur_dance(state);
414 switch (sftocb_tap_state.state) {
415 case SINGLE_TAP:
416 register_mods(MOD_BIT(KC_LSFT));
417 register_code(KC_LBRC);
418 break;
419 case SINGLE_HOLD:
420 register_mods(MOD_BIT(KC_LSFT));
421 break;
422 case DOUBLE_SINGLE_TAP:
423 register_mods(MOD_BIT(KC_LSFT));
424 tap_code(KC_LBRC);
425 register_code(KC_LBRC);
426 }
427}
428
429void sftocb_reset (qk_tap_dance_state_t *state, void *user_data) {
430 switch (sftocb_tap_state.state) {
431 case SINGLE_TAP:
432 unregister_code(KC_LBRC);
433 unregister_mods(MOD_BIT(KC_LSFT));
434 break;
435 case SINGLE_HOLD:
436 unregister_mods(MOD_BIT(KC_LSFT));
437 break;
438 case DOUBLE_SINGLE_TAP:
439 unregister_code(KC_LBRC);
440 unregister_mods(MOD_BIT(KC_LSFT));
441 }
442 sftocb_tap_state.state = 0;
443}
444
445static tap sftpls_tap_state = {
446 .is_press_action = true,
447 .state = 0
448};
449
450void sftpls_finished (qk_tap_dance_state_t *state, void *user_data) {
451 sftpls_tap_state.state = cur_dance(state);
452 switch (sftpls_tap_state.state) {
453 case SINGLE_TAP:
454 register_mods(MOD_BIT(KC_LSFT));
455 register_code(KC_EQL);
456 break;
457 case SINGLE_HOLD:
458 register_mods(MOD_BIT(KC_LSFT));
459 break;
460 case DOUBLE_SINGLE_TAP:
461 register_mods(MOD_BIT(KC_LSFT));
462 tap_code(KC_EQL);
463 register_code(KC_EQL);
464 }
465}
466
467void sftpls_reset (qk_tap_dance_state_t *state, void *user_data) {
468 switch (sftpls_tap_state.state) {
469 case SINGLE_TAP:
470 unregister_code(KC_EQL);
471 unregister_mods(MOD_BIT(KC_LSFT));
472 break;
473 case SINGLE_HOLD:
474 unregister_mods(MOD_BIT(KC_LSFT));
475 break;
476 case DOUBLE_SINGLE_TAP:
477 unregister_code(KC_EQL);
478 unregister_mods(MOD_BIT(KC_LSFT));
479 }
480 sftpls_tap_state.state = 0;
481}
482
483qk_tap_dance_action_t tap_dance_actions[] = {
484 [ALT_OP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altop_finished, altop_reset),
485 [CTL_CCB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctlccb_finished, ctlccb_reset),
486 [GUI_CP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, guicp_finished, guicp_reset),
487 [SFT_OCB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, sftocb_finished, sftocb_reset),
488 [SFT_PLS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, sftpls_finished, sftpls_reset)
489};
diff --git a/keyboards/minidox/keymaps/dustypomerleau/rules.mk b/keyboards/minidox/keymaps/dustypomerleau/rules.mk
new file mode 100644
index 000000000..5ed4c5446
--- /dev/null
+++ b/keyboards/minidox/keymaps/dustypomerleau/rules.mk
@@ -0,0 +1,4 @@
1# dustypomerleau, Minidox rules
2
3MOUSEKEY_ENABLE = yes
4TAP_DANCE_ENABLE = yes