1 #include QMK_KEYBOARD_H
3 #include "action_layer.h"
7 #include "keymap_german.h"
9 #include "keymap_nordic.h"
21 #define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
22 #define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
23 #define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
25 //define macro keycodes
26 #define M_VERSION M(0)
31 #define M_COVECUBE M(5)
32 #define M_MORESALT M(6)
33 #define M_DOOMFIST M(7)
36 //define layer change stuff for underglow indicator
37 bool skip_leds = false;
38 bool has_layer_changed = false;
39 static uint8_t current_layer;
41 static uint16_t key_timer;
42 //define diablo macro timer variables
43 static uint16_t diablo_timer[4];
44 static uint8_t diablo_times[] = {0, 1, 3, 5, 10, 30};
45 static uint8_t diablo_key_time[4];
47 bool check_dtimer(uint8_t dtimer) {
48 // has the correct number of seconds elapsed (as defined by diablo_times)
49 return (timer_elapsed(diablo_timer[dtimer]) < ( diablo_key_time[dtimer] * 1000 ) ) ? false : true;
53 return (timer_elapsed(key_timer) < 150) ? true : false;
57 enum custom_keycodes {
58 PLACEHOLDER = SAFE_RANGE, // can always be here
70 #ifdef TAP_DANCE_ENABLE
85 void dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) {
86 if (state->count == 1) {
87 register_code (KC_RSFT);
88 register_code (KC_SCLN);
90 register_code (KC_SCLN);
94 void dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) {
95 if (state->count == 1) {
96 unregister_code (KC_RSFT);
97 unregister_code (KC_SCLN);
99 unregister_code (KC_SCLN);
103 void dance_egg (qk_tap_dance_state_t *state, void *user_data) {
104 if (state->count >= 10) {
105 SEND_STRING ("Safety dance!");
106 reset_tap_dance (state);
110 // on each tap, light up one led, from right to left
111 // on the forth tap, turn them off from right to left
112 void dance_flsh_each(qk_tap_dance_state_t *state, void *user_data) {
114 ergodox_board_led_off();
115 ergodox_right_led_1_off();
116 ergodox_right_led_2_off();
117 ergodox_right_led_3_off();
120 switch (state->count) {
122 ergodox_right_led_3_on();
125 ergodox_right_led_2_on();
128 ergodox_right_led_1_on();
131 ergodox_right_led_3_off();
133 ergodox_right_led_2_off();
135 ergodox_right_led_1_off();
140 // on the fourth tap, set the keyboard on flash state
141 void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) {
142 if (state->count >= 4) {
143 #ifdef LAYER_UNDERGLOW_LIGHTING
146 rgblight_setrgb(0xff,0x00,0x00);
149 reset_tap_dance(state);
153 void diablo_tapdance_master (qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
154 if (state->count >= 7) {
155 diablo_key_time[diablo_key] = diablo_times[0];
156 reset_tap_dance(state);
158 diablo_key_time[diablo_key] = diablo_times[state->count - 1];
162 void diablo_tapdance1 (qk_tap_dance_state_t *state, void *user_data) {
163 diablo_tapdance_master (state, user_data, 0);
166 void diablo_tapdance2 (qk_tap_dance_state_t *state, void *user_data) {
167 diablo_tapdance_master (state, user_data, 1);
170 void diablo_tapdance3 (qk_tap_dance_state_t *state, void *user_data) {
171 diablo_tapdance_master (state, user_data, 2);
174 void diablo_tapdance4 (qk_tap_dance_state_t *state, void *user_data) {
175 diablo_tapdance_master (state, user_data, 3);
179 // if the flash state didnt happen, then turn off leds, left to right
180 void dance_flsh_reset(qk_tap_dance_state_t *state, void *user_data) {
182 ergodox_right_led_1_off();
184 ergodox_right_led_2_off();
186 ergodox_right_led_3_off();
191 //Tap Dance Definitions
192 qk_tap_dance_action_t tap_dance_actions[] = {
193 //Tap one for Space, and twice for Enter
194 [SFT_CAP] = ACTION_TAP_DANCE_DOUBLE(KC_LSHIFT, KC_CAPS),
196 [TD_DIABLO_J] = ACTION_TAP_DANCE_DOUBLE(KC_J, S(KC_J)),
197 // Once for colin, twice for semi-colin
198 [TD_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cln_finished, dance_cln_reset),
199 // Tap until you get a surprise
200 [TD_EGG] = ACTION_TAP_DANCE_FN (dance_egg),
201 //Once for Blue, Twice for Green, Thrice for Red, and four to flash
202 [TD_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED (dance_flsh_each, dance_flsh_finished, dance_flsh_reset),
204 [TD_DIABLO_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
205 [TD_DIABLO_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
206 [TD_DIABLO_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
207 [TD_DIABLO_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
212 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
213 /* Keymap 0: Basic layer
216 * ,--------------------------------------------------. ,--------------------------------------------------.
217 * | = + | 1 ! | 2 @ | 3 # | 4 $ | 5 % | TG(4)| | TG(4)| 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ |
218 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
219 * | TAB | Q | W | E | R | T | TG(3)| |TG(3) | Y | U | I | O | P | \ | |
220 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
221 * | Bksp | A | S | D | F | G |------| |------| H | J | K | L | ; | ' " |
222 * |--------+------+------+------+------+------| TG(2)| | TG(2)|------+------+------+------+------+--------|
223 * | Shift | Z | X | C | V | B | | | | N | M | , < | . > | UP | Shift |
224 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
225 * | `/SYM| ' " | LGUI | [ { | ] } | | SYMB | ? / | LEFT | DOWN |RIGHT |
226 * `----------------------------------' `----------------------------------'
227 * ,--------------. ,--------------.
228 * |Alt/Ap| Win | | Alt |Ctl/Esc|
229 * ,------|------|-------| |------+-------+------.
230 * | | | Home | | PgUp | | |
231 * | Space| Bksp |-------| |------| DEL |Enter |
232 * | | | End | | PgDn | | |
233 * `---------------------' `---------------------'
236 KC_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS),
237 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(DIABLO),
238 KC_BSPACE, KC_A, KC_S, KC_D, KC_F, KC_G,
239 KC_LSHIFT, CTL_T(KC_Z),KC_X, KC_C, KC_V, KC_B, TG(OVERWATCH),
240 LT(SYMB,KC_GRAVE),KC_QUOTE, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
242 ALT_T(KC_APPLICATION), KC_LGUI,
244 KC_SPACE, KC_BSPACE, KC_END,
246 TG(SYMB), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
247 TG(DVORAK), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
248 KC_H, KC_J, KC_K, KC_L, KC_SCOLON, GUI_T(KC_QUOTE),
249 TG(COLEMAK), KC_N, KC_M, KC_COMMA, KC_DOT, CTL_T(KC_SLASH),KC_RSHIFT,
250 KC_FN1, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT,
251 KC_LALT, CTL_T(KC_ESCAPE),
253 KC_PGDOWN, KC_DELETE, KC_ENTER
255 /* Keymap 1: Basic layer
257 * ,--------------------------------------------------. ,--------------------------------------------------.
258 * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
259 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
260 * | Del | Q | W | F | P | G | L1 | | L1 | J | L | U | Y | ; | \ |
261 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
262 * | BkSp | A | R | S | T | D |------| |------| H | N | E | I |O / L2| ' |
263 * |--------+------+------+------+------+------| OVER | | Meh |------+------+------+------+------+--------|
264 * | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift |
265 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
266 * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
267 * `----------------------------------' `----------------------------------'
268 * ,-------------. ,-------------.
269 * | App | LGui | | Alt |Ctrl/Esc|
270 * ,------|------|------| |------+--------+------.
271 * | | | Home | | PgUp | | |
272 * | Space|Backsp|------| |------| Tab |Enter |
273 * | |ace | End | | PgDn | | |
274 * `--------------------' `----------------------'
276 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
277 // Otherwise, it needs KC_*
280 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS),
281 KC_DELT, KC_Q, KC_W, KC_F, KC_P, KC_G, TG(DIABLO),
282 KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D,
283 KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(OVERWATCH),
284 LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LBRACKET,KC_RBRACKET,
285 ALT_T(KC_APP), KC_LGUI,
287 KC_SPC,KC_BSPC,KC_END,
289 KC_TRANSPARENT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
290 KC_NO, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
291 KC_H, KC_N, KC_E, KC_I, LT(MOUS, KC_O), KC_QUOTE,
292 KC_TRANSPARENT,KC_K, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLASH),KC_RSHIFT,
293 KC_FN1, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT,
294 KC_LALT, CTL_T(KC_ESC),
296 KC_PGDN,KC_TAB, KC_ENT
298 /* Keymap 2: Basic layer
300 * ,--------------------------------------------------. ,--------------------------------------------------.
301 * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | \ |
302 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
303 * | Del | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / |
304 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
305 * | BkSp | A | O | E | U | I |------| |------| D | H | T | N |S / L2| - |
306 * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
307 * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/Ctrl| RShift |
308 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
309 * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
310 * `----------------------------------' `----------------------------------'
311 * ,-------------. ,-------------.
312 * | App | LGui | | Alt |Ctrl/Esc|
313 * ,------|------|------| |------+--------+------.
314 * | | | Home | | PgUp | | |
315 * | Space|Backsp|------| |------| Tab |Enter |
316 * | |ace | End | | PgDn | | |
317 * `--------------------' `----------------------'
319 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
320 // Otherwise, it needs KC_*
323 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS),
324 KC_DELT, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(DIABLO),
325 KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I,
326 KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, TG(OVERWATCH),
327 LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LBRACKET,KC_RBRACKET,
328 ALT_T(KC_APP), KC_LGUI,
330 KC_SPC,KC_BSPC,KC_END,
332 KC_TRANSPARENT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
333 KC_TRANSPARENT, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
334 KC_D, KC_H, KC_T, KC_N, LT(MOUS, KC_S), KC_MINS,
335 KC_NO,KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSHIFT,
336 KC_FN1, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT,
337 KC_LALT, CTL_T(KC_ESC),
339 KC_PGDN,KC_TAB, KC_ENT
342 /* Keymap 3: Symbol Layer
344 * ,--------------------------------------------------. ,--------------------------------------------------.
345 * | ESC | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
346 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
347 * | VERSION| ! | @ | { | } | | | | | | + | 7 | 8 | 9 | * | F12 |
348 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
349 * | MAKE | # | $ | ( | ) | ` |------| |------| - | 4 | 5 | 6 | / | PrtSc |
350 * |--------+------+------+------+------+------| COVE | | |------+------+------+------+------+--------|
351 * | RESET | % | ^ | [ | ] | ~ | CUBE | | | NUM | 1 | 2 | 3 | = | PAUSE |
352 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
353 * | LT0 | & | * | : | ; | | 0 | 0 | NUM. | ENT | ENT |
354 * `----------------------------------' `----------------------------------'
355 * ,-------------. ,-------------.
356 * | RGBM | RED | | OFF | SOLID|
357 * ,------|------|------| |------+------+------.
358 * | | | GREEN| | | | |
359 * | RGB | RGB |------| |------| NUM. | NUM0 |
360 * | DARK |BRITE | BLUE | | | | |
361 * `--------------------' `--------------------'
364 KC_ESCAPE,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRANSPARENT,
365 M_VERSION, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRANSPARENT,
366 M_MAKE, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE,
367 TD(TD_FLSH), KC_PERC, KC_CIRC, KC_LBRACKET,KC_RBRACKET,KC_TILD, M_COVECUBE,
368 KC_NO, KC_AMPR, KC_ASTR, KC_COLN, KC_SCOLON,
371 RGB_VAD, RGB_VAI, RGB_FF0000,
373 KC_TRANSPARENT, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
374 KC_TRANSPARENT, KC_KP_PLUS, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_ASTERISK, KC_F12,
375 KC_KP_MINUS, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_SLASH,KC_PSCREEN,
376 KC_TRANSPARENT, KC_NUMLOCK, KC_KP_1, KC_KP_2, KC_KP_3, KC_EQUAL, KC_PAUSE,
377 KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, KC_KP_ENTER,
380 RGB_HUD, KC_KP_DOT, KC_KP_0
383 /* Keymap 4: Customized Overwatch Layout
385 * ,--------------------------------------------------. ,--------------------------------------------------.
386 * | ESC | SALT | SYMM | MORE | DOOM | | | | | F9 | F10 | F11 | F12 | | |
387 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
388 * | F1 | K | Q | W | E | R | T | | | | | | | | |
389 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
390 * | TAB | G | A | S | D | F |------| |------| | | | | | |
391 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
392 * | LCTR | LSHFT| Z | X | C | M | | | | | | | | | |
393 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
394 * | J | U | I | Y | T | | | | | | |
395 * `----------------------------------' `----------------------------------'
396 * ,-------------. ,-------------.
398 * ,------|------|------| |------+------+------.
399 * | | | LGUI | | | | |
400 * | V | SPACE|------ |------| | Enter|
402 * `--------------------' `--------------------'
404 [OVERWATCH] = KEYMAP(
405 KC_ESCAPE, M_SALT, M_SYMM, M_MORESALT, M_DOOMFIST, KC_NO, KC_NO,
406 KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T,
407 KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F,
408 KC_LCTL, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_M, KC_TRANSPARENT,
409 KC_G, KC_U, KC_I, KC_Y, KC_T,
412 KC_V, KC_SPACE, KC_H,
414 KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
415 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
416 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
417 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
418 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
421 KC_NO, KC_NO, KC_ENTER
426 * ,--------------------------------------------------. ,--------------------------------------------------.
427 * | ESC | V | D | ALT | | | | | | | | | | | |
428 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
429 * | TAB | S | I | F | M | T | | | | | | | | | |
430 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
431 * | Q | 1 | 2 | 3 | 4 | G |------| |------| | | | | | |
432 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
433 * | NUMLOCK| NUM1 | NUM2 | NUM3 | NUM4 | Z | | | | | | | | | |
434 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
435 * | LCTL | MAC1 | MAC2 | MAC3 | MAC4 | | | | | | |
436 * `----------------------------------' `----------------------------------'
437 * ,-------------. ,-------------.
439 * ,------|------|------| |------+------+------.
441 * | SPACE| Q |------ |------| | |
442 * | SHIFT| ALT | 0MAC | | | | |
443 * `--------------------' `--------------------'
446 KC_ESCAPE, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_NO,
447 KC_TAB, KC_S, KC_I, KC_F, KC_M, KC_T, KC_TRANSPARENT,
448 KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G,
449 KC_NUMLOCK, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_4, KC_Z, KC_NO,
450 KC_LCTL, TD(TD_DIABLO_1), TD(TD_DIABLO_2), TD(TD_DIABLO_3), TD(TD_DIABLO_4),
453 SFT_T(KC_SPACE), ALT_T(KC_Q), KC_DIABLO_CLEAR,
456 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
457 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
458 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
459 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
460 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
466 /* Keymap 4: Media and mouse keys
468 * ,--------------------------------------------------. ,--------------------------------------------------.
469 * | | | | | | | | | | | | | | | |
470 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
471 * | | | MsUp | | | | | | | | | | | | |
472 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
473 * | |MsLeft|MsDown|MsRght| | |------| |------| | | Acc0 | Acc1 | Acc2 | |
474 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
475 * | | Acc0 | Acc1 | Acc2 | | | | | | Play | Stop | Mute |VolDn |VolUp | |
476 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
477 * | | | | | | | | | | | |
478 * `----------------------------------' `----------------------------------'
479 * ,-------------. ,-------------.
481 * ,------|------|------| |------+------+------.
482 * | | | MWUp | | | | |
483 * | Lclk | Rclk |------| |------| MBn4 | MBn4 |
484 * | | | MWDn | | Mclk | | |
485 * `--------------------' `--------------------'
488 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
489 KC_NO, KC_NO, KC_MS_UP, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
490 KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT,KC_NO, KC_NO,
491 KC_NO, KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2,KC_NO, KC_NO, KC_TRANSPARENT,
492 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
495 KC_MS_BTN1,KC_MS_BTN2,KC_MS_WH_DOWN,
497 KC_TRANSPARENT,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
498 KC_TRANSPARENT,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
499 KC_NO,KC_NO,KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2,KC_NO,KC_NO,
500 KC_TRANSPARENT,KC_MEDIA_PLAY_PAUSE,KC_MEDIA_STOP,KC_AUDIO_MUTE,KC_AUDIO_VOL_DOWN,KC_AUDIO_VOL_UP,KC_NO,
501 KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
504 KC_MS_BTN3,KC_MS_BTN4,KC_MS_BTN5
509 const uint16_t PROGMEM fn_actions[] = {
510 [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),
511 // FN1 - Momentary Layer 1 (Symbols)
512 [2] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_UP),
513 [3] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_LEFT),
514 [4] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_DOWN),
515 [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_RIGHT),
518 void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
523 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
527 if (record->event.pressed) {
528 // Output Keyboard Firmware info
529 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
533 if (record->event.pressed) {
534 // Symmentra "Left Click to win" salt
535 return MACRO( I(50), T(ENTER), I(5), D(LSFT), T(L), U(LSFT), T(E), T(F), T(T), T(SPACE), T(C), T(L), T(I), T(C), T(K), T(SPACE), T(T), T(O), T(SPACE), T(W), T(I), T(N), D(LSFT), T(1), U(LSFT), T(ENTER), END );
538 if (record->event.pressed) {
540 return MACRO( I(50), T(ENTER), I(5), D(LSFT), T(S), U(LSFT), T(A), T(L), T(T), T(COMMA), T(SPACE), T(S), T(A), T(L), T(T), T(COMMA), T(SPACE), T(S), T(A), T(L), T(T), T(DOT), T(DOT), T(DOT), T(ENTER), END );
543 if (record->event.pressed) {
544 // your saltiness makes me hard
545 return MACRO( I(50), T(ENTER), I(5), D(LSFT), T(Y), U(LSFT), T(O), T(U), T(R), T(SPACE), T(S), T(A), T(L), T(T), T(SPACE), T(O), T(N), T(L), T(Y), T(SPACE), T(M), T(A), T(K), T(E), T(S), T(SPACE), T(M), T(Y), T(SPACE), T(P), T(E), T(N), T(I), T(S), T(SPACE), T(T), T(H), T(A), T(T), T(SPACE), T(M), T(U), T(C), T(H), T(SPACE), T(H), T(A), T(R), T(D), T(E), T(R), T(COMMA), T(SPACE), T(A), T(N), T(D), T(SPACE), T(E), T(V), T(E), T(N), T(SPACE), T(M), T(O), T(R), T(E), T(SPACE), T(A), T(G), T(G), T(R), T(E), T(S), T(S), T(I), T(V), T(E), D(LSFT), T(1), U(LSFT), T(ENTER), END );
548 if (record->event.pressed) {
549 // make ergodox-ez-drashna-custom-teensy
550 return MACRO( I(5), T(M), T(A), T(K), T(E), T(SPACE), T(E), T(R), T(G), T(O), T(D), T(O), T(X), T(MINUS), T(E), T(Z), T(MINUS), T(D), T(R), T(A), T(S), T(H), T(N), T(A), T(MINUS), T(C), T(U), T(S), T(T), T(O), T(M), T(MINUS), T(T), T(E), T(E), T(N), T(S), T(Y), T(ENTER), END );
553 if (record->event.pressed) {
555 SEND_STRING("supersecrethash");
559 if (record->event.pressed) {
560 // Please sir, can I have some more salt
561 return MACRO( I(50), T(ENTER), I(5), D(LSFT), T(P), U(LSFT), T(L), T(E), T(A), T(S), T(E), T(SPACE), T(S), T(I), T(R), T(COMMA), T(SPACE), T(C), T(A), T(N), T(SPACE), D(LSFT), T(I), U(LSFT), T(SPACE), T(H), T(A), T(V), T(E), T(SPACE), T(S), T(O), T(M), T(E), T(SPACE), T(M), T(O), T(R), T(E), T(SPACE), T(S), T(A), T(L), T(T), D(LSFT), T(SLASH), U(LSFT), D(LSFT), T(1), U(LSFT), T(ENTER), END );
565 if (record->event.pressed) {
567 // Hey, look at me. I'm Doomfist, and I'm overpowered!
568 // All I do is spam punches all day! I'm DPS, tank and
569 // defense, rolled into one! All I need is team healing to be complete!
570 return MACRO( I(50), T(ENTER), I(5), D(LSFT), T(H), U(LSFT), T(E), T(Y), T(COMMA), T(SPACE), T(L), T(O), T(O), T(K), T(SPACE), T(A), T(T), T(SPACE), T(M), T(E), T(DOT), T(SPACE), T(SPACE), D(LSFT), T(I), U(LSFT), T(QUOTE), T(M), T(SPACE), D(LSFT), T(D), U(LSFT), T(O), T(O), T(M), T(F), T(I), T(S), T(T), T(COMMA), T(SPACE), T(A), T(N), T(D), T(SPACE), D(LSFT), T(I), U(LSFT), T(QUOTE), T(M), T(SPACE), T(O), T(V), T(E), T(R), T(P), T(O), T(W), T(E), T(R), T(E), T(D), D(LSFT), T(1), U(LSFT), T(SPACE), T(SPACE), D(LSFT), T(A), U(LSFT), T(L), T(L), T(SPACE), D(LSFT), T(I), U(LSFT), T(SPACE), T(D), T(O), T(SPACE), T(I), T(S), T(SPACE), T(S), T(P), T(A), T(M), T(SPACE), T(P), T(U), T(N), T(C), T(H), T(E), T(S), T(SPACE), T(A), T(L), T(L), T(SPACE), T(D), T(A), T(Y), D(LSFT), T(1), U(LSFT), T(SPACE), T(SPACE), T(SPACE), D(LSFT), T(I), U(LSFT), T(QUOTE), T(M), T(SPACE), D(LSFT), T(D), U(LSFT), D(LSFT), T(P), U(LSFT), D(LSFT), T(S), U(LSFT), T(COMMA), T(SPACE), T(T), T(A), T(N), T(K), T(SPACE), T(A), T(N), T(D), T(SPACE), T(D), T(E), T(F), T(E), T(N), T(S), T(E), T(COMMA), T(SPACE), T(R), T(O), T(L), T(L), T(E), T(D), T(SPACE), T(I), T(N), T(T), T(O), T(SPACE), T(O), T(N), T(E), D(LSFT), T(1), U(LSFT), T(SPACE), D(LSFT), T(A), U(LSFT), T(L), T(L), T(SPACE), D(LSFT), T(I), U(LSFT), T(SPACE), T(N), T(E), T(E), T(D), T(SPACE), T(I), T(S), T(SPACE), T(T), T(E), T(A), T(M), T(SPACE), T(H), T(E), T(A), T(L), T(I), T(N), T(G), T(SPACE), T(T), T(O), T(SPACE), T(B), T(E), T(SPACE), T(C), T(O), T(M), T(P), T(L), T(E), T(T), T(E), D(LSFT), T(1), U(LSFT), T(ENTER), END );
572 case 8: //MAC1 - Hold for rshift and } on tap
573 if (record->event.pressed) {
574 key_timer = timer_read();
575 return MACRO(D(LSFT), END );
577 return checktime() ? MACRO(U(LSFT),D(RALT),T(7),U(RALT),END): MACRO(U(LSFT),END);
579 case 9: //MAC1 - Hold for rshift and } on tap
580 if (record->event.pressed) {
581 key_timer = timer_read();
582 return MACRO(D(RSFT), END );
584 return checktime() ? MACRO(U(RSFT),D(RALT),T(0),U(RALT),END): MACRO(U(RSFT),END);
586 case 10: //MAC2 - Hold for lctrl and [ on tap
587 if (record->event.pressed) {
588 key_timer = timer_read();
589 return MACRO(D(LCTL), END );
590 } else {return checktime() ? MACRO(U(LCTL),D(RALT),T(8),U(RALT),END):MACRO(U(LCTL),END);
592 case 11: //MAC3 - Hold for rctrl and ] on tap
593 if (record->event.pressed) {
594 key_timer = timer_read();
595 return MACRO(D(RCTL), END );
597 return checktime() ? MACRO(U(RCTL),D(RALT),T(9),U(RALT),END):MACRO(U(RCTL),END);
604 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
606 // dynamically generate these.
608 if (record->event.pressed) {
614 if (record->event.pressed) {
615 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
620 if (record->event.pressed) {
627 if (record->event.pressed) {
628 #ifdef RGBLIGHT_ENABLE
631 rgblight_setrgb(0x00,0x00,0xff);
638 if (record->event.pressed) {
639 #ifdef RGBLIGHT_ENABLE
642 rgblight_setrgb(0x00,0x80,0x00);
649 if (record->event.pressed) {
650 #ifdef RGBLIGHT_ENABLE
653 rgblight_setrgb(0xff,0x00,0x00);
660 if (record->event.pressed) {
661 #ifdef RGBLIGHT_ENABLE
664 rgblight_setrgb(0x80,0x00,0x80);
671 if (record->event.pressed) {
672 #ifdef RGBLIGHT_ENABLE
675 rgblight_setrgb(0x00,0xff,0x90);
680 case KC_DIABLO_CLEAR:
681 if (record->event.pressed) {
684 for (dtime = 0; dtime < 4; dtime++) {
685 diablo_key_time[dtime] = diablo_times[0];
695 void send_diablo_keystroke (uint8_t diablo_key) {
696 if (current_layer == DIABLO) {
697 switch (diablo_key) {
714 void run_diablo_macro_check(void) {
717 for (dtime = 0; dtime < 4; dtime++) {
718 if (check_dtimer(dtime) && diablo_key_time[dtime]) {
719 diablo_timer[dtime] = timer_read();
720 send_diablo_keystroke(dtime);
726 void matrix_init_user(void) { // Runs boot tasks for keyboard
728 ergodox_board_led_on();
730 ergodox_right_led_1_on();
732 ergodox_right_led_2_on();
734 ergodox_right_led_3_on();
736 ergodox_board_led_off();
738 ergodox_right_led_1_off();
740 ergodox_right_led_2_off();
742 ergodox_right_led_3_off();
745 #ifdef LAYER_UNDERGLOW_LIGHTING
747 rgblight_sethsv(195,255,255);
749 has_layer_changed = false;
757 void matrix_scan_user(void) { // runs frequently to update info
758 uint8_t modifiders = get_mods();
759 uint8_t layer = biton32(layer_state);
762 ergodox_board_led_off();
763 ergodox_right_led_1_off();
764 ergodox_right_led_2_off();
765 ergodox_right_led_3_off();
767 if ( modifiders & MODS_SHIFT_MASK) {
768 ergodox_right_led_1_on();
770 if ( modifiders & MODS_CTRL_MASK) {
771 ergodox_right_led_2_on();
773 if ( modifiders & MODS_ALT_MASK) {
774 ergodox_right_led_3_on();
781 #ifdef LAYER_UNDERGLOW_LIGHTING
782 if (has_layer_changed) {
783 rgblight_sethsv (240,255,255);
786 ergodox_right_led_3_on();
790 #ifdef LAYER_UNDERGLOW_LIGHTING
791 if (has_layer_changed) {
792 rgblight_sethsv (30,255,255);
795 ergodox_right_led_2_on();
799 #ifdef LAYER_UNDERGLOW_LIGHTING
800 if (has_layer_changed) {
801 rgblight_sethsv (0,255,255);
804 ergodox_right_led_1_on();
808 #ifdef LAYER_UNDERGLOW_LIGHTING
809 if (has_layer_changed) {
810 rgblight_sethsv (60,255,255);
813 ergodox_right_led_3_on();
814 ergodox_right_led_2_on();
818 #ifdef LAYER_UNDERGLOW_LIGHTING
819 if (has_layer_changed) {
820 rgblight_sethsv (300,255,255);
823 ergodox_right_led_1_on();
824 ergodox_right_led_3_on();
828 #ifdef LAYER_UNDERGLOW_LIGHTING
829 if (has_layer_changed) {
830 rgblight_sethsv (120,255,255);
833 ergodox_right_led_2_on();
834 ergodox_right_led_1_on();
838 #ifdef LAYER_UNDERGLOW_LIGHTING
839 if (has_layer_changed) {
840 rgblight_sethsv (255,255,255);
843 ergodox_right_led_1_on();
844 ergodox_right_led_2_on();
845 ergodox_right_led_3_on();
849 // Do not add anything here, as this will be ran EVERY check, and can cause a significant slowdown
850 #ifdef LAYER_UNDERGLOW_LIGHTING
851 if (has_layer_changed) {
852 rgblight_sethsv (195,255,255);
858 if (current_layer == layer) {
859 has_layer_changed = false;
861 has_layer_changed = true;
862 current_layer = layer;
864 run_diablo_macro_check();