Commit | Line | Data |
---|---|---|
26eef35f | 1 | #include QMK_KEYBOARD_H |
2ffcf477 | 2 | #include "keymap_plover.h" |
2ffcf477 BH |
3 | |
4 | extern keymap_config_t keymap_config; | |
5 | ||
6 | // Keymap layers | |
7 | enum planck_layers { | |
8 | BASE_QWERTY_LAYER, | |
9 | BASE_COLEMAK_LAYER, | |
10 | BASE_STENO_LAYER, | |
11 | LOWER_LAYER, | |
12 | RAISE_LAYER, | |
13 | NAVIGATION_LAYER, | |
14 | GUI_LAYER, | |
15 | KEYBOARD_LAYER | |
16 | }; | |
17 | ||
18 | // Key aliases for legibility | |
2ffcf477 BH |
19 | #define ___x___ KC_NO |
20 | ||
21 | // Macros | |
22 | enum planck_macros { | |
23 | LALT_BRACE, | |
24 | RALT_BRACE | |
25 | }; | |
26 | ||
27 | // Dashes (macOS) | |
28 | #define KC_NDSH LALT(KC_MINS) | |
29 | #define KC_MDSH S(LALT(KC_MINS)) | |
073a6c20 | 30 | |
2ffcf477 BH |
31 | // Window manager keys |
32 | #define WM_FULL LALT(LGUI(KC_F)) | |
33 | #define WM_NEXT LCTL(LALT(LGUI(KC_RGHT))) | |
34 | #define WM_PREV LCTL(LALT(LGUI(KC_LEFT))) | |
35 | #define WM_NW LCTL(LGUI(KC_LEFT)) | |
36 | #define WM_N LALT(LGUI(KC_UP)) | |
37 | #define WM_NE LCTL(LGUI(KC_RGHT)) | |
38 | #define WM_E LALT(LGUI(KC_RGHT)) | |
39 | #define WM_SE S(LCTL(LGUI(KC_RGHT))) | |
40 | #define WM_S LALT(LGUI(KC_DOWN)) | |
41 | #define WM_SW S(LCTL(LGUI(KC_LEFT))) | |
42 | #define WM_W LALT(LGUI(KC_LEFT)) | |
43 | #define WM_CNTR LALT(LGUI(KC_C)) | |
44 | ||
26eef35f JY |
45 | #define LT_NAVS LT(NAVIGATION_LAYER, KC_SCLN) |
46 | #define LT_NAVO LT(NAVIGATION_LAYER, KC_O) | |
47 | #define LT_GUIL LT(GUI_LAYER, KC_LBRC) | |
48 | #define LT_GUIR LT(GUI_LAYER, KC_RBRC) | |
49 | ||
2ffcf477 BH |
50 | // Special key codes |
51 | enum planck_keycodes { | |
52 | QWERTY = SAFE_RANGE, | |
53 | COLEMAK, | |
54 | STENO, | |
55 | LOWER, | |
56 | RAISE, | |
57 | PV_EXIT, | |
58 | PV_LOOK | |
59 | }; | |
60 | ||
61 | //Tap Dance Declarations | |
62 | enum { | |
63 | TD_ESC_GRV = 0 | |
64 | }; | |
65 | ||
66 | // Tap Dance Definitions | |
67 | qk_tap_dance_action_t tap_dance_actions[] = { | |
68 | // Tap once for Esc, twice for Backspace | |
69 | [TD_ESC_GRV] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_GRV) | |
70 | // Other declarations would go here, separated by commas, if you have them | |
71 | }; | |
073a6c20 LH |
72 | |
73 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |
2ffcf477 BH |
74 | /* Base layer (Qwerty) |
75 | * ,-----------------------------------------------------------------------. | |
76 | * Double tap 4 ~ | ESC | Q | W | E | R | T | Y | U | I | O | P | ' | | |
77 | * |-----------------------------------------------------------------------| | |
78 | * Tap for Tab -- |Ctrl | A | S | D | F | G | H | J | K | L |; Fn4|Ctrl | -- Tap for Enter | |
79 | * |-----------------------------------------------------------------------| | |
80 | * Tap for ( -- |Shift| Z | X | C | V | B | N | M | , | . | / |Shift| -- Tap for ) | |
81 | * |-----------------------------------------------------------------------| | |
82 | * Tap for [ -- | Fn3 |Hyper| Alt |Super| Fn1 | Space | Fn2 |Super| Alt |Hyper| Fn3 | -- Tap for ] | |
83 | * `-----------------------------------------------------------------------' | |
84 | * / / | |
85 | * Tap for ] [ --------'-----------------------------------------------------' | |
86 | */ | |
26eef35f JY |
87 | [BASE_QWERTY_LAYER] = LAYOUT_planck_grid( |
88 | TD(TD_ESC_GRV), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT, | |
89 | F(5), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT_NAVS, F(6), | |
90 | KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, | |
91 | LT_GUIL, ALL_T(KC_RBRC), M(LALT_BRACE), KC_LGUI, LOWER, KC_SPC, KC_BSPC, RAISE, KC_RGUI, M(RALT_BRACE), ALL_T(KC_LBRC), LT_GUIR | |
92 | ), | |
2ffcf477 BH |
93 | |
94 | /* Base layer (Colemak) | |
95 | * ,-----------------------------------------------------------------------. | |
96 | * | | Q | W | F | P | G | J | L | U | Y | ; | | | |
97 | * |-----------------------------------------------------------------------| | |
98 | * | | A | R | S | T | D | H | N | E | I |O Fn4| | | |
99 | * |-----------------------------------------------------------------------| | |
100 | * | | Z | X | C | V | B | K | M | | | | | | |
101 | * |-----------------------------------------------------------------------| | |
102 | * | | | | | | | | | | | | | |
103 | * `-----------------------------------------------------------------------' | |
104 | */ | |
26eef35f JY |
105 | [BASE_COLEMAK_LAYER] = LAYOUT_planck_grid( |
106 | _______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, _______, | |
107 | _______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, LT_NAVO, _______, | |
108 | _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, _______, _______, _______, _______, | |
109 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | |
110 | ), | |
2ffcf477 BH |
111 | |
112 | /* Base layer (Qwerty-Steno) | |
113 | * ,-----------------------------------------------------------------------. | |
114 | * | # | # | # | # | # | # | # | # | # | # | # | # | | |
115 | * |-----------------------------------------------------------------------| | |
116 | * |Look | | T | P | H | | F | P | L | T | D | | |
117 | * | -up | S |-----+-----+-----| * |-----+-----+-----+-----+-----| | |
118 | * | | | K | W | R | | R | B | G | S | Z | | |
119 | * |-----------------------------------------------------------------------| | |
120 | * |Exit | | | A | O | | E | U | | | | | |
121 | * `-----------------------------------------------------------------------' | |
122 | */ | |
26eef35f JY |
123 | [BASE_STENO_LAYER] = LAYOUT_planck_grid( |
124 | PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, | |
125 | PV_LOOK, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD, | |
126 | PV_LOOK, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, | |
127 | PV_EXIT, ___x___, ___x___, PV_A, PV_O, _______, _______, PV_E, PV_U, ___x___, ___x___, ___x___ | |
128 | ), | |
2ffcf477 BH |
129 | |
130 | /* Numeric layer | |
131 | * ,-----------------------------------------------------------------------. | |
132 | * Application -- |D-Grv| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | # | | |
133 | * window |-----------------------------------------------------------------------| | |
134 | * switcher | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | |
135 | * |-----------------------------------------------------------------------| | |
136 | * | | - | = | ` | \ | |ndash|mdash| , | . | / | | | |
137 | * |-----------------------------------------------------------------------| | |
138 | * | | | | | | Backspace | | | | | | | |
139 | * `-----------------------------------------------------------------------' | |
140 | */ | |
26eef35f JY |
141 | [LOWER_LAYER] = LAYOUT_planck_grid( |
142 | LGUI(KC_GRV), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, S(KC_3), | |
143 | F(5), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, F(6), | |
144 | KC_LSPO, KC_MINS, KC_EQL, KC_GRV, KC_BSLS, ___x___, KC_NDSH, KC_MDSH, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, | |
145 | LT_GUIL, ALL_T(KC_LBRC), M(LALT_BRACE), KC_LGUI, LOWER, KC_BSPC, KC_BSPC, RAISE, KC_RGUI, M(RALT_BRACE), ALL_T(KC_RBRC), LT_GUIR | |
146 | ), | |
2ffcf477 BH |
147 | |
148 | /* Symbol layer | |
149 | * ,-----------------------------------------------------------------------. | |
150 | * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | # | | |
151 | * |-----------------------------------------------------------------------| | |
152 | * | | ! | @ | # | $ | % | ^ | & | * | ' | " | | \ | |
153 | * |-----------------------------------------------------------------------| |-- Mostly shifted version | |
154 | * | | _ | + | ~ | | | |ndash|mdash| , | . | / | | / of lower layer | |
155 | * |-----------------------------------------------------------------------| | |
156 | * | | | | | | Delete | | | | | | | |
157 | * `-----------------------------------------------------------------------' | |
158 | */ | |
26eef35f JY |
159 | [RAISE_LAYER] = LAYOUT_planck_grid( |
160 | _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, S(KC_3), | |
161 | _______, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), KC_QUOT, S(KC_QUOT), _______, | |
162 | _______, KC_UNDS, KC_PLUS, KC_TILD, KC_PIPE, ___x___, KC_NDSH, KC_MDSH, KC_COMM, KC_DOT, KC_SLSH, _______, | |
163 | _______, _______, _______, _______, _______, KC_DEL, KC_DEL, _______, _______, _______, _______, _______ | |
164 | ), | |
2ffcf477 BH |
165 | |
166 | /* Directional navigation layer | |
167 | * | |
168 | * Large movements -----/```````````````````\ /```````````````````\----- Vim-style arrow keys | |
169 | * ,-----------------------------------------------------------------------. | |
170 | * | | | | | | | | | | | | | | |
171 | * |-----------------------------------------------------------------------| | |
172 | * | | |Home |PgUp |PgDn | End |Left |Down | Up |Right| | | | |
173 | * |-----------------------------------------------------------------------| | |
174 | * | | | | | | | | | | | | | | |
175 | * |-----------------------------------------------------------------------| | |
176 | * | | | | | | | | | | | | | |
177 | * `-----------------------------------------------------------------------' | |
178 | */ | |
26eef35f JY |
179 | [NAVIGATION_LAYER] = LAYOUT_planck_grid( |
180 | ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, | |
181 | _______, ___x___, KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, LT_NAVS, _______, | |
182 | _______, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, _______, | |
183 | _______, _______, _______, _______, ___x___, ___x___, ___x___, ___x___, _______, _______, _______, _______ | |
184 | ), | |
006d277e | 185 | |
2ffcf477 BH |
186 | /* GUI (window management/mouse/media controls) layer |
187 | * | |
188 | * Mouse keys -----/```````````````````\ /```````````````````\----- Window manager | |
189 | * ,-----------------------------------------------------------------------. | |
190 | * | |Ms B2|Ms Up|Ms B1|Ms WD| | |Prev | NW | N | NE | | | |
191 | * |-----------------------------------------------------------------------| | |
192 | * | |Ms L |Ms Dn|Ms R |Ms WU| | |Full | W |Centr| E | | | |
193 | * |-----------------------------------------------------------------------| | |
194 | * | |Ms WL|Ms B3|Ms WR| | | |Next | SW | S | SE | | | |
195 | * |-----------------------------------------------------------------------| | |
196 | * | |Prev |Play |Next |Brig-| Sleep |Brig+|Mute |Vol- |Vol+ | | | |
197 | * `-----------------------------------------------------------------------' | |
198 | * \___ Media ___/ \___ Screen/sleep __/ \___ Volume __/ | |
199 | */ | |
26eef35f JY |
200 | [GUI_LAYER] = LAYOUT_planck_grid( |
201 | _______, KC_BTN2, KC_MS_U, KC_BTN1, KC_WH_D, ___x___, ___x___, WM_PREV, WM_NW, WM_N, WM_NE, _______, | |
202 | _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, ___x___, ___x___, WM_FULL, WM_W, WM_CNTR, WM_E, _______, | |
203 | _______, KC_WH_L, KC_BTN3, KC_WH_R, ___x___, ___x___, ___x___, WM_NEXT, WM_SW, WM_S, WM_SE, _______, | |
204 | _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_SLCK, KC_SLEP, KC_SLEP, KC_PAUS, KC_MUTE, KC_VOLD, KC_VOLU, _______ | |
205 | ), | |
2ffcf477 BH |
206 | |
207 | /* Keyboard settings layer | |
208 | * ,-----------------------------------------------------------------------. | |
209 | * Firmware -- | |Reset| | | | | | | | | | | | |
210 | * |-----------------------------------------------------------------------| | |
211 | * Set layer -- | |Qwert|Colem|Steno| ... | | | | | | | | | |
212 | * |-----------------------------------------------------------------------| | |
213 | * Audio -- | |Voic-|Voic+|Mus +|Mus -|MIDI+|MIDI-| | |Aud +|Aud -| | | |
214 | * |-----------------------------------------------------------------------| | |
215 | * | | | | | | Toggle | |Toggl| BL- | BL+ | | | |
216 | * `-----------------------------------------------------------------------' | |
217 | * \_____________\_ Backlight _/ | |
218 | */ | |
26eef35f JY |
219 | [KEYBOARD_LAYER] = LAYOUT_planck_grid( |
220 | ___x___, RESET, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, | |
221 | ___x___, QWERTY, COLEMAK, STENO, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, | |
222 | ___x___, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, ___x___, ___x___, AU_ON, AU_OFF, ___x___, | |
223 | ___x___, ___x___, ___x___, ___x___, LOWER, BL_TOGG, BL_TOGG, RAISE, BL_TOGG, BL_DEC, BL_INC, ___x___ | |
224 | ) | |
073a6c20 LH |
225 | }; |
226 | ||
227 | const uint16_t PROGMEM fn_actions[] = { | |
2ffcf477 BH |
228 | // Modifiers |
229 | [5] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_TAB), | |
230 | [6] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT), | |
073a6c20 LH |
231 | }; |
232 | ||
233 | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | |
234 | { | |
2ffcf477 BH |
235 | switch(id) { |
236 | case LALT_BRACE: | |
237 | if (record->event.pressed) { | |
238 | register_mods(MOD_LALT); | |
239 | record->tap.interrupted = 0; | |
240 | } else { | |
241 | unregister_mods(MOD_LALT); | |
242 | ||
243 | if (record->tap.count && !record->tap.interrupted) { | |
244 | add_weak_mods(MOD_LSFT); | |
245 | register_code(KC_LBRACKET); | |
246 | unregister_code(KC_LBRACKET); | |
247 | del_weak_mods(MOD_LSFT); | |
248 | } | |
249 | ||
250 | record->tap.count = 0; | |
073a6c20 | 251 | } |
2ffcf477 BH |
252 | break; |
253 | case RALT_BRACE: | |
254 | if (record->event.pressed) { | |
255 | register_mods(MOD_RALT); | |
256 | record->tap.interrupted = 0; | |
257 | } else { | |
258 | unregister_mods(MOD_RALT); | |
259 | ||
260 | if (record->tap.count && !record->tap.interrupted) { | |
261 | add_weak_mods(MOD_LSFT); | |
262 | register_code(KC_RBRACKET); | |
263 | unregister_code(KC_RBRACKET); | |
264 | del_weak_mods(MOD_LSFT); | |
265 | } | |
266 | ||
267 | record->tap.count = 0; | |
268 | } | |
269 | break; | |
270 | } | |
271 | return MACRO_NONE; | |
272 | } | |
273 | ||
274 | #ifdef AUDIO_ENABLE | |
275 | ||
276 | float tone_startup[][2] = SONG(STARTUP_SOUND); | |
277 | float tone_qwerty[][2] = SONG(QWERTY_SOUND); | |
278 | float tone_colemak[][2] = SONG(COLEMAK_SOUND); | |
279 | float tone_plover[][2] = SONG(PLOVER_SOUND); | |
280 | float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); | |
281 | float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); | |
282 | float tone_goodbye[][2] = SONG(GOODBYE_SOUND); | |
283 | ||
284 | #endif | |
285 | ||
286 | void persistant_default_layer_set(uint16_t default_layer) { | |
287 | eeconfig_update_default_layer(default_layer); | |
288 | default_layer_set(default_layer); | |
289 | } | |
290 | ||
291 | // Send PHROPB ({PLOVER:RESUME}). | |
292 | void plover_resume(void) { | |
293 | register_code(PV_LP); | |
294 | register_code(PV_LH); | |
295 | register_code(PV_LR); | |
296 | register_code(PV_O); | |
297 | register_code(PV_RP); | |
298 | register_code(PV_RB); | |
299 | unregister_code(PV_LP); | |
300 | unregister_code(PV_LH); | |
301 | unregister_code(PV_LR); | |
302 | unregister_code(PV_O); | |
303 | unregister_code(PV_RP); | |
304 | unregister_code(PV_RB); | |
305 | } | |
306 | ||
307 | // Send PHROF ({PLOVER:SUSPEND}). | |
308 | void plover_suspend(void) { | |
309 | register_code(PV_LP); | |
310 | register_code(PV_LH); | |
311 | register_code(PV_LR); | |
312 | register_code(PV_O); | |
313 | register_code(PV_RF); | |
314 | unregister_code(PV_LP); | |
315 | unregister_code(PV_LH); | |
316 | unregister_code(PV_LR); | |
317 | unregister_code(PV_O); | |
318 | unregister_code(PV_RF); | |
319 | } | |
320 | ||
321 | // Send PHROBG ({PLOVER:LOOKUP}). | |
322 | void plover_lookup(void) { | |
323 | register_code(PV_LP); | |
324 | register_code(PV_LH); | |
325 | register_code(PV_LR); | |
326 | register_code(PV_O); | |
327 | register_code(PV_RB); | |
328 | register_code(PV_RG); | |
329 | unregister_code(PV_LP); | |
330 | unregister_code(PV_LH); | |
331 | unregister_code(PV_LR); | |
332 | unregister_code(PV_O); | |
333 | unregister_code(PV_RB); | |
334 | unregister_code(PV_RG); | |
335 | } | |
336 | ||
337 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |
338 | switch (keycode) { | |
339 | case QWERTY: | |
340 | if (record->event.pressed) { | |
341 | persistant_default_layer_set(1UL<<BASE_QWERTY_LAYER); | |
342 | } | |
343 | return false; | |
344 | case COLEMAK: | |
345 | if (record->event.pressed) { | |
346 | persistant_default_layer_set(1UL<<BASE_COLEMAK_LAYER); | |
347 | } | |
348 | return false; | |
349 | case LOWER: | |
350 | if (record->event.pressed) { | |
351 | layer_on(LOWER_LAYER); | |
352 | update_tri_layer(LOWER_LAYER, RAISE_LAYER, KEYBOARD_LAYER); | |
353 | } else { | |
354 | layer_off(LOWER_LAYER); | |
355 | update_tri_layer(LOWER_LAYER, RAISE_LAYER, KEYBOARD_LAYER); | |
356 | } | |
357 | return false; | |
358 | case RAISE: | |
359 | if (record->event.pressed) { | |
360 | layer_on(RAISE_LAYER); | |
361 | update_tri_layer(LOWER_LAYER, RAISE_LAYER, KEYBOARD_LAYER); | |
362 | } else { | |
363 | layer_off(RAISE_LAYER); | |
364 | update_tri_layer(LOWER_LAYER, RAISE_LAYER, KEYBOARD_LAYER); | |
365 | } | |
366 | return false; | |
367 | case STENO: | |
368 | if (record->event.pressed) { | |
369 | layer_off(RAISE_LAYER); | |
370 | layer_off(LOWER_LAYER); | |
371 | layer_off(KEYBOARD_LAYER); | |
372 | layer_on(BASE_STENO_LAYER); | |
373 | if (!eeconfig_is_enabled()) { | |
374 | eeconfig_init(); | |
375 | } | |
376 | keymap_config.raw = eeconfig_read_keymap(); | |
377 | keymap_config.nkro = 1; | |
378 | eeconfig_update_keymap(keymap_config.raw); | |
379 | plover_resume(); | |
380 | } | |
381 | return false; | |
382 | case PV_EXIT: | |
383 | if (record->event.pressed) { | |
384 | plover_suspend(); | |
385 | layer_off(BASE_STENO_LAYER); | |
386 | } | |
387 | return false; | |
388 | case PV_LOOK: | |
389 | if (record->event.pressed) { | |
390 | plover_lookup(); | |
391 | } | |
392 | return false; | |
393 | } | |
394 | return true; | |
395 | } | |
396 | ||
397 | void matrix_init_user(void) { | |
398 | #ifdef AUDIO_ENABLE | |
399 | startup_user(); | |
400 | #endif | |
401 | } |