1 #ifndef LOSINGGENERATION_KEYMAP_H
2 #define LOSINGGENERATION_KEYMAP_H
4 #include "action_layer.h"
6 #include "losinggeneration-common.h"
8 /* Tap dance keycodes */
9 enum tap_dance_keycodes {
17 Used to indicate a CTRL should be pressed on one press, or CTRL+ALT on
20 void dance_ctl_ctlalt_each(qk_tap_dance_state_t *state, void *user_data) {
21 register_code(KC_LCTL);
22 if(state->count > 1) {
23 register_code(KC_LALT);
27 /* Used to release CTRL or the double tapped variant CTRL+ALT */
28 void dance_ctl_ctlalt_reset(qk_tap_dance_state_t *state, void *user_data) {
29 unregister_code(KC_LCTL);
30 if(state->count > 1) {
31 unregister_code(KC_LALT);
36 Set ADJUST layer on the first press and off after that.
37 Each is used to make sure ADJUST activates as soon as it's pressed the first
40 void dance_adj_each(qk_tap_dance_state_t *state, void *user_data) {
41 if(state->count == 1) {
48 /* Set NUMPAD layer on second tap and MOUSE layer on 3rd */
49 void dance_adj_finish(qk_tap_dance_state_t *state, void *user_data) {
50 switch(state->count) {
59 reset_tap_dance(state);
64 /* Turn off any layer that may have been tapped on */
65 void dance_adj_reset(qk_tap_dance_state_t *state, void *user_data) {
66 switch(state->count) {
79 qk_tap_dance_action_t tap_dance_actions[] = {
80 [TD_CTL_CTLALT] = ACTION_TAP_DANCE_FN_ADVANCED(dance_ctl_ctlalt_each, NULL, dance_ctl_ctlalt_reset),
81 [TD_LGUI_RGUI] = ACTION_TAP_DANCE_DOUBLE(KC_LGUI, KC_RGUI),
82 [TD_LALT_RALT] = ACTION_TAP_DANCE_DOUBLE(KC_LALT, KC_RALT),
83 [TD_ADJUST] = ACTION_TAP_DANCE_FN_ADVANCED(dance_adj_each, dance_adj_finish, dance_adj_reset),
87 * ,-----------------------------------------..-----------------------------------------.
88 * |Adjust| Ctrl | Alt | GUI |Lower | Del ||Space |Raise | Left | Down | Up |Right |
89 * `-----------------------------------------'`-----------------------------------------'
91 #define BOTTOM_GRID_ROW \
92 TD_ADJ ,TD_CTL , TD_ALT , TD_GUI , LOWER , KC_DEL , KC_SPC , RAISE , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT
95 * ,-----------------------------------------..-----------------------------------------.
96 * |Adjust| Ctrl | Alt | GUI |Lower |Space ||Space |Raise | Left | Down | Up |Right |
97 * `-----------------------------------------'`-----------------------------------------'
99 #define BOTTOM_MIT_ROW \
100 TD_ADJ ,TD_CTL , TD_ALT , TD_GUI , LOWER , KC_SPC , KC_SPC , RAISE , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT
102 #ifdef USE_MIT_LAYOUT
103 #define BOTTOM_ROW BOTTOM_MIT_ROW
106 * ,-----------------------------------------..-----------------------------------------.
107 * | | F7 | F8 | F9 | F10 | F11 || F12 | PgUp | PgDn | Home | End | ⏹ |
108 * |------+------+------+------+------+------||------+------+------+------+------+------|
109 * | | | | | | || | | Mute | Vol- | Vol+ | ⏯ |
110 * `-----------------------------------------'`-----------------------------------------'
112 #define BOTTOM_RAISE_LOWER_ROWS \
113 _______, KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PGUP, KC_PGDN, KC_HOME, KC_END , KC_MSTP, \
114 _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY
117 #define BOTTOM_ROW BOTTOM_GRID_ROW
120 * ,-----------------------------------------..-----------------------------------------.
121 * | | F7 | F8 | F9 | F10 | F11 || F12 | PgUp | PgDn | Home | End | ⏹ |
122 * |------+------+------+------+------+------||------+------+------+------+------+------|
123 * | | | | | | || Bksp | | Mute | Vol- | Vol+ | ⏯ |
124 * `-----------------------------------------'`-----------------------------------------'
126 #define BOTTOM_RAISE_LOWER_ROWS \
127 _______, KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PGUP, KC_PGDN, KC_HOME, KC_END , KC_MSTP, \
128 _______, _______, _______, _______, _______, KC_BSPC, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY
133 * ,-----------------------------------------..-----------------------------------------.
134 * | Tab | || | Bksp |
135 * `-----------------------------------------'`-----------------------------------------'
137 #define STD_TAB_ROW(...) KC_TAB, __VA_ARGS__, KC_BSPC
140 * ,-----------------------------------------..-----------------------------------------.
142 * `-----------------------------------------'`-----------------------------------------'
145 #define STD_ESC_ROW(...) MT_ESC, __VA_ARGS__
148 * ,-----------------------------------------..-----------------------------------------.
149 * | Shift| || |Enter |
150 * `-----------------------------------------'`-----------------------------------------'
152 #define STD_LSFT_ROW(...) OSM_LSFT, __VA_ARGS__, MT_ENT
155 * ,-----------------------------------------..-----------------------------------------.
156 * | Tab | Q | W | E | R | T || Y | U | I | O | P | Bksp |
157 * |------+------+------+------+------+------||------+------+------+------+------+------|
158 * | Esc | A | S | D | F | G || H | J | K | L | ; | " |
159 * |------+------+------+------+------+------||------+------+------+------+------+------|
160 * | Shift| Z | X | C | V | B || N | M | , | . | / |Enter |
161 * |------+------+------+------+------+------||------+------+------+------+------+------|
162 * |Adjust| Ctrl | Alt | GUI |Lower | Del ||Space |Raise | Left | Down | Up |Right |
163 * `-----------------------------------------'`-----------------------------------------'
165 #define QWERTY_LAYER \
166 STD_TAB_ROW( KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ), \
167 STD_ESC_ROW( KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT), \
168 STD_LSFT_ROW(KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH), \
172 * ,-----------------------------------------.,-----------------------------------------.
173 * | Tab | Q | W | F | P | G || J | L | U | Y | ; | Bksp |
174 * |------+------+------+------+------+------||------+------+------+------+------+------|
175 * | Esc | A | R | S | T | D || H | N | E | I | O | " |
176 * |------+------+------+------+------+------||------+------+------+------+------+------|
177 * | Shift| Z | X | C | V | B || K | M | , | . | / |Enter |
178 * |------+------+------+------+------+------||------+------+------+------+------+------|
179 * |Adjust| Ctrl | Alt | GUI |Lower | Del ||Space |Raise | Left | Down | Up |Right |
180 * `-----------------------------------------'`-----------------------------------------'
182 #define COLEMAK_LAYER \
183 STD_TAB_ROW( KC_Q , KC_W , KC_F , KC_P , KC_G , KC_J , KC_L , KC_U , KC_Y , KC_SCLN), \
184 STD_ESC_ROW( KC_A , KC_R , KC_S , KC_T , KC_D , KC_H , KC_N , KC_E , KC_I , KC_O , KC_QUOT), \
185 STD_LSFT_ROW(KC_Z , KC_X , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMM, KC_DOT , KC_SLSH), \
189 * ,-----------------------------------------..-----------------------------------------.
190 * | Tab | Q | D | R | W | B || J | F | U | P | ; | Bksp |
191 * |------+------+------+------+------+------||------+------+------+------+------+------|
192 * | Esc | A | S | H | T | G || Y | N | E | O | I | " |
193 * |------+------+------+------+------+------||------+------+------+------+------+------|
194 * | Shift| Z | X | M | C | V || K | L | , | . | / |Enter |
195 * |------+------+------+------+------+------||------+------+------+------+------+------|
196 * |Adjust| Ctrl | Alt | GUI |Lower | Del ||Space |Raise | Left | Down | Up |Right |
197 * `-----------------------------------------'`-----------------------------------------'
199 #define WORKMAN_LAYER \
200 STD_TAB_ROW( KC_Q , KC_D , KC_R , KC_W , KC_B , KC_J , KC_F , KC_U , KC_P , KC_SCLN), \
201 STD_ESC_ROW( KC_A , KC_S , KC_H , KC_T , KC_G , KC_Y , KC_N , KC_E , KC_O , KC_I , KC_QUOT), \
202 STD_LSFT_ROW(KC_Z , KC_X , KC_M , KC_C , KC_V , KC_K , KC_L , KC_COMM, KC_DOT , KC_SLSH), \
206 * ,-----------------------------------------..-----------------------------------------.
207 * | Tab | " | , | . | P | Y || F | G | C | R | L | Bksp |
208 * |------+------+------+------+------+------||------+------+------+------+------+------|
209 * | Esc | A | O | E | U | I || D | H | T | N | S | / |
210 * |------+------+------+------+------+------||------+------+------+------+------+------|
211 * | Shift| ; | Q | J | K | X || B | M | W | V | Z |Enter |
212 * |------+------+------+------+------+------||------+------+------+------+------+------|
213 * |Adjust| Ctrl | Alt | GUI |Lower | Del ||Space |Raise | Left | Down | Up |Right |
214 * `-----------------------------------------'`-----------------------------------------'
216 #define DVORAK_LAYER \
217 STD_TAB_ROW( KC_QUOT, KC_COMM, KC_DOT , KC_P , KC_Y , KC_F , KC_G , KC_C , KC_R , KC_L), \
218 STD_ESC_ROW( KC_A , KC_O , KC_E , KC_U , KC_I , KC_D , KC_H , KC_T , KC_N , KC_S , KC_SLSH), \
219 STD_LSFT_ROW(KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_B , KC_M , KC_W , KC_V , KC_Z), \
222 /* Game (Qwerty without one shot modifiers & tap dancing)
223 * ,-----------------------------------------..-----------------------------------------.
224 * | Tab | Q | W | E | R | T || Y | U | I | O | P | Bksp |
225 * |------+------+------+------+------+------||------+------+------+------+------+------|
226 * | Esc | A | S | D | F | G || H | J | K | L | ; | " |
227 * |------+------+------+------+------+------||------+------+------+------+------+------|
228 * | Shift| Z | X | C | V | B || N | M | , | . | / |Enter |
229 * |------+------+------+------+------+------||------+------+------+------+------+------|
230 * |Adjust| Ctrl | Alt | GUI |Lower |Space ||Space |Raise | Left | Down | Up |Right |
231 * `-----------------------------------------'`-----------------------------------------'
234 KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC, \
235 KC_ESC , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, \
236 KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_ENT , \
237 MO_ADJ , KC_LCTL, KC_LALT, KC_LGUI, LOWER , KC_SPC , KC_SPC , RAISE , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT
240 * ,-----------------------------------------..-----------------------------------------.
241 * | Tab | XXX | XXX | XXX | XXX | XXX || NLCK | 7 | 8 | 9 | - | BKSP |
242 * |------+------+------+------+------+------||------+------+------+------+------+------|
243 * | Esc | XXX | XXX | XXX | XXX | XXX || * | 4 | 5 | 6 | + | BKSP |
244 * |------+------+------+------+------+------||------+------+------+------+------+------|
245 * |Shift | XXX | XXX | XXX | XXX | XXX || / | 1 | 2 | 3 | ENT | XXX |
246 * |------+------+------+------+------+------||------+------+------+------+------+------|
247 * |Adjust| Ctrl | Alt | GUI | XXX |Space ||Space | 0 | 0 | . | ENT | XXX |
248 * `-----------------------------------------''-----------------------------------------'
250 #define NUMPAD_LAYER \
251 KC_TAB , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NLCK, KC_P7 , KC_P8 , KC_P9 , KC_PMNS, KC_BSPC, \
252 KC_ESC , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAST, KC_P4 , KC_P5 , KC_P6 , KC_PPLS, KC_BSPC, \
253 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSLS, KC_P1 , KC_P2 , KC_P3 , KC_PENT, XXXXXXX, \
254 TD_ADJ , TD_CTL , TD_ALT , TD_GUI , XXXXXXX, KC_SPC , KC_SPC , KC_P0 , KC_P0 , KC_PDOT, KC_PENT, XXXXXXX
257 * ,-----------------------------------------..-----------------------------------------.
258 * | Tab | MB_1 | MB_3 | MB_2 | MB_4 | MB_5 || MA_0 | MB_1 | MB_3 | MB_2 | MB_4 | MB_5 |
259 * |------+------+------+------+------+------||------+------+------+------+------+------|
260 * | Esc | MW_L | MW_U | MW_D | MW_R | XXX || MA_1 | M_LT | M_UP | M_DN | M_RT | XXX |
261 * |------+------+------+------+------+------||------+------+------+------+------+------|
262 * |Shift | MA_0 | MA_1 | MA_2 | XXX | XXX || MA_2 | MW_L | MW_U | MW_D | MW_R | XXX |
263 * |------+------+------+------+------+------||------+------+------+------+------+------|
264 * |Adjust| Ctrl | Alt | GUI | XXX |Space || XXX | XXX | XXX | XXX | XXX | XXX |
265 * `-----------------------------------------''-----------------------------------------'
267 #define MOUSE_LAYER \
268 KC_TAB , MS_BTN1, MS_BTN3, MS_BTN2, MS_BTN4, MS_BTN5, MS_ACL0, MS_BTN1, MS_BTN3, MS_BTN2, MS_BTN4, MS_BTN5, \
269 KC_ESC , MW_LEFT, MW_DOWN, MW_UP , MW_RGHT, XXXXXXX, MS_ACL1, MS_LEFT, MS_DOWN, MS_UP , MS_RGHT, XXXXXXX, \
270 KC_LSFT, MS_ACL0, MS_ACL1, MS_ACL2, XXXXXXX, XXXXXXX, MS_ACL2, MW_LEFT, MW_DOWN, MW_UP , MW_RGHT, XXXXXXX, \
271 TD_ADJ , TD_CTL , TD_ALT , TD_GUI , XXXXXXX, KC_SPC , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
274 * ,-----------------------------------------..-----------------------------------------.
275 * | ~ | ! | @ | # | $ | % || ^ | & | * | ( | ) | Bksp |
276 * |------+------+------+------+------+------||------+------+------+------+------+------|
277 * | Del | F1 | F2 | F3 | F4 | F5 || F6 | _ | + | | \ | | |
278 * |------+------+------+------+------+------||------+------+------+------+------+------|
279 * | | F7 | F8 | F9 | F10 | F11 || F12 | PgUp | PgDn | Home | End | ⏹ |
280 * |------+------+------+------+------+------||------+------+------+------+------+------|
281 * | | | | | | || | | Mute | Vol- | Vol+ | ⏯ |
282 * `-----------------------------------------'`-----------------------------------------'
284 #define LOWER_LAYER \
285 KC_TILD, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
286 KC_DEL , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
287 BOTTOM_RAISE_LOWER_ROWS
290 * ,-----------------------------------------..-----------------------------------------.
291 * | ` | 1 | 2 | 3 | 4 | 5 || 6 | 7 | 8 | 9 | 0 | Bksp |
292 * |------+------+------+------+------+------||------+------+------+------+------+------|
293 * | Del | F1 | F2 | F3 | F4 | F5 || F6 | - | = | [ | ] | \ |
294 * |------+------+------+------+------+------||------+------+------+------+------+------|
295 * | | F7 | F8 | F9 | F10 | F11 || F12 | PgUp | PgDn | Home | End | ⏹ |
296 * |------+------+------+------+------+------||------+------+------+------+------+------|
297 * | | | | | | || | | Mute | Vol- | Vol+ | ⏯ |
298 * `-----------------------------------------''-----------------------------------------'
300 #define RAISE_LAYER \
301 KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC, \
302 KC_DEL , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_MINS, KC_EQL , KC_LBRC, KC_RBRC, KC_BSLS, \
303 BOTTOM_RAISE_LOWER_ROWS
306 float tone_qwerty[][2] = SONG(QWERTY_SOUND);
307 float tone_dvorak[][2] = SONG(DVORAK_SOUND);
308 float tone_colemak[][2] = SONG(COLEMAK_SOUND);
309 float tone_workman[][2] = SONG(PLOVER_SOUND);
315 #define PLAY_SONG(tone)
318 void persistent_default_layer_set(uint16_t default_layer) {
319 layer_state_set(default_layer);
320 eeconfig_update_default_layer(default_layer);
321 default_layer_set(default_layer);
324 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
327 if (record->event.pressed) {
328 PLAY_SONG(tone_qwerty);
329 persistent_default_layer_set(1UL<<_QWERTY);
334 if (record->event.pressed) {
335 PLAY_SONG(tone_colemak);
336 persistent_default_layer_set(1UL<<_COLEMAK);
341 if (record->event.pressed) {
342 PLAY_SONG(tone_workman);
343 persistent_default_layer_set(1UL<<_WORKMAN);
348 if (record->event.pressed) {
349 PLAY_SONG(tone_dvorak);
350 persistent_default_layer_set(1UL<<_DVORAK);
355 if (record->event.pressed) {
357 update_tri_layer(_LOWER, _RAISE, _ADJUST);
360 update_tri_layer(_LOWER, _RAISE, _ADJUST);
365 if (record->event.pressed) {
367 update_tri_layer(_LOWER, _RAISE, _ADJUST);
370 update_tri_layer(_LOWER, _RAISE, _ADJUST);