2020 February 29 Breaking Changes Update (#8064)
[jackhill/qmk/firmware.git] / keyboards / planck / keymaps / jhenahan / keymap.c
1
2 #include QMK_KEYBOARD_H
3
4 extern keymap_config_t keymap_config;
5
6 // Each layer gets a name for readability, which is then used in the keymap matrix below.
7 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
8 // Layer names don't all need to be of the same length, obviously, and you can also skip them
9 // entirely and just use numbers.
10 #define _WORKMAN 0
11 #define _DEAD 1
12 #define _QWERTY 2
13 #define _LOWER 3
14 #define _RAISE 4
15 #define _PLOVER 5
16 #define _ADJUST 16
17
18 enum planck_keycodes {
19 WORKMAN = SAFE_RANGE,
20 DEAD,
21 QWERTY,
22 LOWER,
23 RAISE,
24 PLOVER,
25 EXT_PLV,
26 TOG_PLV
27 };
28
29 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
30
31
32 /* Workman
33 * ,-----------------------------------------------------------------------------------.
34 * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp |
35 * |------+------+------+------+------+-------------+------+------+------+------+------|
36 * | Esc | A | S | H | T | G | Y | N | E | O | I | " |
37 * |------+------+------+------+------+------|------+------+------+------+------+------|
38 * | Shift| Z | X | M | C | V | K | L | Dead | . | / |Enter |
39 * |------+------+------+------+------+------+------+------+------+------+------+------|
40 * | Ctrl | RAlt | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
41 * `-----------------------------------------------------------------------------------'
42 */
43 [_WORKMAN] = LAYOUT_planck_grid(
44 KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSPC,
45 MT(MOD_LCTL,KC_ESC), KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT,
46 KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, DEAD, KC_DOT, KC_SLSH, KC_ENT,
47 KC_LCTL, KC_RALT, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
48 ),
49
50 /* Workman Dead Layer
51 * ,-----------------------------------------------------------------------------------.
52 * | | % | & | ? | + | @ | $ | _ | [ | ] | ! | |
53 * |------+------+------+------+------+-------------+------+------+------+------+------|
54 * | | / | ( | = | 0 | { | } | 1 | * | ) | - | " |
55 * |------+------+------+------+------+------|------+------+------+------+------+------|
56 * | | 6 | 7 | 8 | 9 | | | \ | 2 | 3 | 4 | 5 | |
57 * |------+------+------+------+------+------+------+------+------+------+------+------|
58 * | | | < | ~ | ` | , | # | ^ | > | | |
59 * `-----------------------------------------------------------------------------------'
60 */
61 [_DEAD] = LAYOUT_planck_grid(
62 XXXXXXX, KC_PERC, KC_AMPR, KC_QUES, KC_PLUS, KC_AT, KC_DLR, KC_UNDS, KC_LBRC, KC_RBRC, KC_EXLM, XXXXXXX,
63 XXXXXXX, KC_SLSH, KC_LPRN, KC_EQL, KC_0, KC_LCBR, KC_RCBR, KC_1, KC_ASTR, KC_RPRN, KC_MINS, XXXXXXX,
64 XXXXXXX, KC_6, KC_7, KC_8, KC_9, KC_PIPE, KC_BSLS, KC_2, KC_3, KC_4, KC_5, XXXXXXX,
65 XXXXXXX, XXXXXXX, KC_LT, KC_TILD, KC_GRV, KC_COMM, KC_COMM, KC_HASH, KC_CIRC, KC_GT, XXXXXXX, XXXXXXX
66 ),
67
68 /* Qwerty
69 * ,-----------------------------------------------------------------------------------.
70 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
71 * |------+------+------+------+------+-------------+------+------+------+------+------|
72 * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
73 * |------+------+------+------+------+------|------+------+------+------+------+------|
74 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
75 * |------+------+------+------+------+------+------+------+------+------+------+------|
76 * | Ctrl | RAlt | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
77 * `-----------------------------------------------------------------------------------'
78 */
79 [_QWERTY] = LAYOUT_planck_grid(
80 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
81 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
82 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
83 KC_LCTL, KC_RALT, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
84 ),
85
86 /* Lower
87 * ,-----------------------------------------------------------------------------------.
88 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
89 * |------+------+------+------+------+-------------+------+------+------+------+------|
90 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
91 * |------+------+------+------+------+------|------+------+------+------+------+------|
92 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | Vol+ |Enter |
93 * |------+------+------+------+------+------+------+------+------+------+------+------|
94 * | | | | | | | | Prev | Next | Vol- | Play |
95 * `-----------------------------------------------------------------------------------'
96 */
97 [_LOWER] = LAYOUT_planck_grid(
98 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
99 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
100 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS), _______, KC_VOLU, _______,
101 _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, KC_MPLY
102 ),
103
104 /* Raise - KWM Interaction
105 * ,-----------------------------------------------------------------------------------.
106 * |Restrt| |TgSplt|Flotng|Parent|FlScrn|InsMrk| InsW | InsS | InsN | InsE | |
107 * |------+------+------+------+------+-------------+------+------+------+------+------|
108 * | | Mark |Rotate|Prefix| Term | BSP |SwpMrk|SwapW |SwapS |SwapN |SwapE | |
109 * |------+------+------+------+------+------|------+------+------+------+------+------|
110 * | |MarkW |MarkS |MarkN |MarkE |Monocl|Float |FocusW|FocusS|FocusN|FocusE| |
111 * |------+------+------+------+------+------+------+------+------+------+------+------|
112 * | | | | | | | | | | | |
113 * `-----------------------------------------------------------------------------------'
114 */
115 [_RAISE] = LAYOUT_planck_grid(
116 LCAG(KC_Q), XXXXXXX, LCAG(KC_S), LCAG(KC_W), LCAG(KC_D), LCAG(KC_F), LCTL(S(KC_X)), LCTL(S(KC_H)), LCTL(S(KC_J)), LCTL(S(KC_K)), LCTL(S(KC_L)), XXXXXXX,
117 XXXXXXX, LCAG(KC_M), LGUI(LCTL(KC_R)), LCAG(KC_DOT), LCAG(KC_T), LGUI(LCTL(KC_A)), LCTL(LALT(KC_M)), LCTL(LALT(KC_H)), LCTL(LALT(KC_J)), LCTL(LALT(KC_K)), LCTL(LALT(KC_L)), XXXXXXX,
118 _______, LCAG(KC_H), LCAG(KC_J), LCAG(KC_K), LCAG(KC_L), LGUI(LCTL(KC_S)), LGUI(LCTL(KC_D)), LGUI(LALT(KC_H)), LGUI(LALT(KC_J)), LGUI(LALT(KC_K)), LGUI(LALT(KC_L)), _______,
119 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
120 ),
121
122 /* Plover layer (http://opensteno.org)
123 * ,-----------------------------------------------------------------------------------.
124 * | # | # | # | # | # | # | # | # | # | # | # | # |
125 * |------+------+------+------+------+-------------+------+------+------+------+------|
126 * | | S | T | P | H | * | * | F | P | L | T | D |
127 * |------+------+------+------+------+------|------+------+------+------+------+------|
128 * |TogOut| S | K | W | R | * | * | R | B | G | S | Z |
129 * |------+------+------+------+------+------+------+------+------+------+------+------|
130 * | Exit | | | A | O | | E | U | | | |
131 * `-----------------------------------------------------------------------------------'
132 */
133
134 [_PLOVER] = LAYOUT_planck_grid(
135 KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
136 XXXXXXX, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSPC,
137 TOG_PLV, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT,
138 EXT_PLV, XXXXXXX, XXXXXXX, KC_M, KC_C, XXXXXXX, XXXXXXX, KC_L, KC_COMM, XXXXXXX, XXXXXXX, XXXXXXX
139 ),
140
141 /* Adjust (Lower + Raise)
142 * ,-----------------------------------------------------------------------------------.
143 * | | Reset| | | | | | | | | | Del |
144 * |------+------+------+------+------+-------------+------+------+------+------+------|
145 * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Workmn|Plover| | |
146 * |------+------+------+------+------+------|------+------+------+------+------+------|
147 * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
148 * |------+------+------+------+------+------+------+------+------+------+------+------|
149 * | | | | | | | | | | | |
150 * `-----------------------------------------------------------------------------------'
151 */
152 [_ADJUST] = LAYOUT_planck_grid(
153 _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
154 _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, WORKMAN, PLOVER, _______, _______,
155 _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
156 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
157 )
158
159
160 };
161
162 #ifdef AUDIO_ENABLE
163
164 float tone_startup[][2] = SONG(STARTUP_SOUND);
165 float tone_qwerty[][2] = SONG(QWERTY_SOUND);
166 float tone_workman[][2] = SONG(WORKMAN_SOUND);
167 float tone_plover[][2] = SONG(PLOVER_SOUND);
168 float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
169 float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
170
171 float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
172 #endif
173
174
175 void persistent_default_layer_set(uint16_t default_layer) {
176 eeconfig_update_default_layer(default_layer);
177 default_layer_set(default_layer);
178 }
179
180 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
181 switch (keycode) {
182 case WORKMAN:
183 if (record->event.pressed) {
184 #ifdef AUDIO_ENABLE
185 PLAY_SONG(tone_workman);
186 #endif
187 persistent_default_layer_set(1UL<<_WORKMAN);
188 }
189 return false;
190 break;
191 case DEAD:
192 if (record->event.pressed) {
193 layer_on(_DEAD);
194 set_oneshot_layer(_DEAD, ONESHOT_START);
195 clear_oneshot_layer_state(ONESHOT_PRESSED);
196 }
197 return false;
198 break;
199 case QWERTY:
200 if (record->event.pressed) {
201 #ifdef AUDIO_ENABLE
202 PLAY_SONG(tone_qwerty);
203 #endif
204 persistent_default_layer_set(1UL<<_QWERTY);
205 }
206 return false;
207 break;
208 case LOWER:
209 if (record->event.pressed) {
210 layer_on(_LOWER);
211 update_tri_layer(_LOWER, _RAISE, _ADJUST);
212 } else {
213 layer_off(_LOWER);
214 update_tri_layer(_LOWER, _RAISE, _ADJUST);
215 }
216 return false;
217 break;
218 case RAISE:
219 if (record->event.pressed) {
220 layer_on(_RAISE);
221 update_tri_layer(_LOWER, _RAISE, _ADJUST);
222 } else {
223 layer_off(_RAISE);
224 update_tri_layer(_LOWER, _RAISE, _ADJUST);
225 }
226 return false;
227 break;
228 case PLOVER:
229 if (record->event.pressed) {
230 #ifdef AUDIO_ENABLE
231 stop_all_notes();
232 PLAY_SONG(tone_plover);
233 #endif
234 layer_off(_RAISE);
235 layer_off(_LOWER);
236 layer_off(_ADJUST);
237 layer_on(_PLOVER);
238 if (!eeconfig_is_enabled()) {
239 eeconfig_init();
240 }
241 keymap_config.raw = eeconfig_read_keymap();
242 keymap_config.nkro = 1;
243 eeconfig_update_keymap(keymap_config.raw);
244 }
245 return false;
246 break;
247 case EXT_PLV:
248 if (record->event.pressed) {
249 #ifdef AUDIO_ENABLE
250 PLAY_SONG(tone_plover_gb);
251 #endif
252 layer_off(_PLOVER);
253 }
254 return false;
255 break;
256 case TOG_PLV:
257 if (record->event.pressed) {
258 register_code(KC_R);
259 register_code(KC_W);
260 register_code(KC_T);
261 register_code(KC_C);
262 register_code(KC_P);
263 register_code(KC_O);
264 clear_keyboard();
265 }
266 return false;
267 break;
268 }
269 return true;
270 }
271
272 void matrix_init_user(void) {
273 #ifdef AUDIO_ENABLE
274 startup_user();
275 #endif
276 }
277
278 #ifdef AUDIO_ENABLE
279
280 void startup_user()
281 {
282 _delay_ms(20); // gets rid of tick
283 PLAY_SONG(tone_startup);
284 }
285
286 void shutdown_user()
287 {
288 PLAY_SONG(tone_goodbye);
289 _delay_ms(150);
290 stop_all_notes();
291 }
292
293 void music_on_user(void)
294 {
295 music_scale_user();
296 }
297
298 void music_scale_user(void)
299 {
300 PLAY_SONG(music_scale);
301 }
302
303 #endif