2 This is the keymap for the keyboard
3 Copyright 2012 Jun Wako <wakojun@gmail.com>
4 Copyright 2015 Jack Humbert
5 Copyright 2017 Art Ortenburger
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 2 of the License, or
9 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 #include QMK_KEYBOARD_H
19 #include "action_layer.h"
23 #include "keymap_german.h"
25 #include "keymap_nordic.h"
37 #define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
38 #define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
39 #define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
41 //define macro keycodes
42 #define M_VERSION M(0)
47 #define M_GOODGAME M(5)
48 #define M_MORESALT M(6)
49 #define M_DOOMFIST M(7)
52 //define layer change stuff for underglow indicator
53 bool skip_leds = false;
55 //This is both for underglow, and Diablo 3 macros
56 bool has_layer_changed = false;
57 static uint8_t current_layer;
59 //define diablo macro timer variables
60 static uint16_t diablo_timer[4];
61 static uint8_t diablo_times[] = {0, 1, 3, 5, 10, 30};
62 static uint8_t diablo_key_time[4];
64 bool check_dtimer(uint8_t dtimer) {
65 // has the correct number of seconds elapsed (as defined by diablo_times)
66 return (timer_elapsed(diablo_timer[dtimer]) < ( diablo_key_time[dtimer] * 1000 ) ) ? false : true;
70 enum custom_keycodes {
71 PLACEHOLDER = SAFE_RANGE, // can always be here
83 #ifdef TAP_DANCE_ENABLE
95 // on each tap, light up one led, from right to left
96 // on the forth tap, turn them off from right to leftmake ergodox-ez-drashna-custom-teensy
98 void dance_flsh_each(qk_tap_dance_state_t *state, void *user_data) {
100 ergodox_board_led_off();
101 ergodox_right_led_1_off();
102 ergodox_right_led_2_off();
103 ergodox_right_led_3_off();
106 switch (state->count) {
108 ergodox_right_led_1_on();
111 ergodox_right_led_2_on();
114 ergodox_right_led_3_on();
117 ergodox_right_led_1_off();
119 ergodox_right_led_2_off();
121 ergodox_right_led_3_off();
126 // on the fourth tap, set the keyboard on flash state
127 // and set the underglow to red, because red == bad
128 void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) {
129 if (state->count >= 4) {
132 rgblight_setrgb(0xff,0x00,0x00);
134 reset_tap_dance(state);
138 // Cycle through the times for the macro, starting at 0, for disabled.
139 // Max of six values, so don't exceed
140 void diablo_tapdance_master (qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
141 if (state->count >= 7) {
142 diablo_key_time[diablo_key] = diablo_times[0];
143 reset_tap_dance(state);
145 diablo_key_time[diablo_key] = diablo_times[state->count - 1];
150 // Would rather have one function for all of this, but no idea how to do that...
151 void diablo_tapdance1 (qk_tap_dance_state_t *state, void *user_data) {
152 diablo_tapdance_master (state, user_data, 0);
155 void diablo_tapdance2 (qk_tap_dance_state_t *state, void *user_data) {
156 diablo_tapdance_master (state, user_data, 1);
159 void diablo_tapdance3 (qk_tap_dance_state_t *state, void *user_data) {
160 diablo_tapdance_master (state, user_data, 2);
163 void diablo_tapdance4 (qk_tap_dance_state_t *state, void *user_data) {
164 diablo_tapdance_master (state, user_data, 3);
168 // if the flash state didnt happen, then turn off leds, left to right
169 void dance_flsh_reset(qk_tap_dance_state_t *state, void *user_data) {
171 ergodox_right_led_3_off();
173 ergodox_right_led_2_off();
175 ergodox_right_led_1_off();
180 //Tap Dance Definitions
181 qk_tap_dance_action_t tap_dance_actions[] = {
182 //Once for Blue, Twice for Green, Thrice for Red, and four to flash
183 [TD_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED (dance_flsh_each, dance_flsh_finished, dance_flsh_reset),
184 // tap once to disable, and more to enable timed micros
185 [TD_DIABLO_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
186 [TD_DIABLO_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
187 [TD_DIABLO_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
188 [TD_DIABLO_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
193 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
194 /* Keymap 0: Basic layer
197 * ,--------------------------------------------------. ,--------------------------------------------------.
198 * | = + | 1 ! | 2 @ | 3 # | 4 $ | 5 % | TG(4)| | TG(4)| 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ |
199 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
200 * | TAB | Q | W | E | R | T | TG(3)| |TG(3) | Y | U | I | O | P | \ | |
201 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
202 * | Bksp | A | S | D | F | G |------| |------| H | J | K | L | ; | ' " |
203 * |--------+------+------+------+------+------| TG(2)| | TG(2)|------+------+------+------+------+--------|
204 * | Shift | Z | X | C | V | B | | | | N | M | , < | . > | ? / | Shift |
205 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
206 * | `/SYM| ' " | LGUI | [ { | ] } | | LEFT | DOWN | UP |RIGHT | SYMB |
207 * `----------------------------------' `----------------------------------'
208 * ,--------------. ,--------------.
209 * |Alt/Ap| Win | | Alt |Ctl/Esc|
210 * ,------|------|-------| |------+-------+------.
211 * | | | Home | | PgUp | | |
212 * | Space| Bksp |-------| |------| DEL |Enter |
213 * | | | End | | PgDn | | |
214 * `---------------------' `---------------------'
217 KC_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS),
218 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(DIABLO),
219 KC_BSPACE, KC_A, KC_S, KC_D, KC_F, KC_G,
220 KC_LSHIFT, CTL_T(KC_Z),KC_X, KC_C, KC_V, KC_B, TG(OVERWATCH),
221 LT(SYMB,KC_GRAVE),KC_QUOTE, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
223 ALT_T(KC_APPLICATION), KC_LGUI,
225 KC_SPACE, KC_BSPACE, KC_END,
227 TG(SYMB), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
228 TG(DVORAK), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
229 KC_H, KC_J, KC_K, KC_L, KC_SCOLON, GUI_T(KC_QUOTE),
230 TG(COLEMAK), KC_N, KC_M, KC_COMMA, KC_DOT, CTL_T(KC_SLASH),KC_RSHIFT,
231 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1,
232 KC_LALT, CTL_T(KC_ESCAPE),
234 KC_PGDOWN, KC_DELETE, KC_ENTER
236 /* Keymap 1: Basic layer
238 * ,--------------------------------------------------. ,--------------------------------------------------.
239 * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
240 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
241 * | Del | Q | W | F | P | G | L1 | | L1 | J | L | U | Y | ; | \ |
242 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
243 * | BkSp | A | R | S | T | D |------| |------| H | N | E | I |O / L2| ' |
244 * |--------+------+------+------+------+------| OVER | | Meh |------+------+------+------+------+--------|
245 * | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift |
246 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
247 * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
248 * `----------------------------------' `----------------------------------'
249 * ,-------------. ,-------------.
250 * | App | LGui | | Alt |Ctrl/Esc|
251 * ,------|------|------| |------+--------+------.
252 * | | | Home | | PgUp | | |
253 * | Space|Backsp|------| |------| Tab |Enter |
254 * | |ace | End | | PgDn | | |
255 * `--------------------' `----------------------'
257 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
258 // Otherwise, it needs KC_*
261 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS),
262 KC_DELT, KC_Q, KC_W, KC_F, KC_P, KC_G, TG(DIABLO),
263 KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D,
264 KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(OVERWATCH),
265 LT(SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
266 ALT_T(KC_APP), KC_LGUI,
268 KC_SPC,KC_BSPC,KC_END,
270 KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
271 KC_NO, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
272 KC_H, KC_N, KC_E, KC_I, LT(MOUS, KC_O), KC_QUOTE,
273 KC_TRNS,KC_K,KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLASH),KC_RSHIFT,
274 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1,
275 KC_LALT, CTL_T(KC_ESC),
277 KC_PGDN,KC_TAB, KC_ENT
279 /* Keymap 2: Basic layer
281 * ,--------------------------------------------------. ,--------------------------------------------------.
282 * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | \ |
283 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
284 * | Del | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / |
285 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
286 * | BkSp | A | O | E | U | I |------| |------| D | H | T | N |S / L2| - |
287 * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
288 * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/Ctrl| RShift |
289 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
290 * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
291 * `----------------------------------' `----------------------------------'
292 * ,-------------. ,-------------.
293 * | App | LGui | | Alt |Ctrl/Esc|
294 * ,------|------|------| |------+--------+------.
295 * | | | Home | | PgUp | | |
296 * | Space|Backsp|------| |------| Tab |Enter |
297 * | |ace | End | | PgDn | | |
298 * `--------------------' `----------------------'
300 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
301 // Otherwise, it needs KC_*
304 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS),
305 KC_DELT, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(DIABLO),
306 KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I,
307 KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, TG(OVERWATCH),
308 LT(SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET, KC_RBRACKET,
309 ALT_T(KC_APP), KC_LGUI,
311 KC_SPC,KC_BSPC,KC_END,
313 KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
314 KC_TRNS, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
315 KC_D, KC_H, KC_T, KC_N, LT(MOUS, KC_S), KC_MINS,
316 KC_NO,KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSHIFT,
317 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1,
318 KC_LALT, CTL_T(KC_ESC),
320 KC_PGDN,KC_TAB, KC_ENT
323 /* Keymap 3: Symbol Layer
325 * ,--------------------------------------------------. ,--------------------------------------------------.
326 * | ESC | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
327 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
328 * | VERSION| ! | @ | { | } | | | | | | + | 7 | 8 | 9 | * | F12 |
329 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
330 * | MAKE | # | $ | ( | ) | ` |------| |------| - | 4 | 5 | 6 | / | PrtSc |
331 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
332 * | RESET | % | ^ | [ | ] | ~ | | | | NUM | 1 | 2 | 3 | = | PAUSE |
333 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
334 * | LT0 | & | * | : | ; | | | 0 | NUM. | ENT | ENT |
335 * `----------------------------------' `----------------------------------'
336 * ,-------------. ,-------------.
337 * | RGBM | RED | | OFF | SOLID|
338 * ,------|------|------| |------+------+------.
339 * | | | GREEN| | | | |
340 * | RGB | RGB |------| |------| NUM0 | NUME |
341 * | DARK |BRITE | BLUE | | | | |
342 * `--------------------' `--------------------'
345 KC_ESCAPE,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
346 M_VERSION, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
347 M_MAKE, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE,
348 TD(TD_FLSH), KC_PERC, KC_CIRC, KC_LBRACKET,KC_RBRACKET,KC_TILD, KC_TRNS,
349 KC_NO, KC_AMPR, KC_ASTR, KC_COLN, KC_SCOLON,
352 KC_TRNS, KC_TRNS, KC_TRNS,
354 KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
355 KC_TRNS, KC_KP_PLUS, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_ASTERISK, KC_F12,
356 KC_KP_MINUS, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_SLASH,KC_PSCREEN,
357 KC_TRNS, KC_NUMLOCK, KC_KP_1, KC_KP_2, KC_KP_3, KC_EQUAL, KC_PAUSE,
358 KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, KC_TRNS,
361 KC_KP_DOT, KC_KP_0, KC_KP_ENTER
364 /* Keymap 4: Customized Overwatch Layout
366 * ,--------------------------------------------------. ,--------------------------------------------------.
367 * | ESC | SALT | MORE | GG | SYMM | DOOM | HARD | | | F9 | F10 | F11 | F12 | | |
368 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
369 * | F1 | K | Q | W | E | R | T | | | | | | | | |
370 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
371 * | TAB | G | A | S | D | F |------| |------| | | | | | |
372 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
373 * | LCTR | LSHFT| Z | X | C | M | | | | | | | | | |
374 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
375 * | J | U | I | Y | T | | | | | | |
376 * `----------------------------------' `----------------------------------'
377 * ,-------------. ,-------------.
379 * ,------|------|------| |------+------+------.
380 * | | | LGUI | | | | |
381 * | V | SPACE|------ |------| | Enter|
383 * `--------------------' `--------------------'
385 [OVERWATCH] = KEYMAP(
386 KC_ESCAPE, M_SALT, M_MORESALT, M_GOODGAME, M_SYMM, M_DOOMFIST, M_HARD,
387 KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T,
388 KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F,
389 KC_LCTL, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_M, KC_TRNS,
390 KC_G, KC_U, KC_I, KC_Y, KC_T,
393 KC_V, KC_SPACE, KC_H,
395 KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
396 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
397 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
398 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
399 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
402 KC_NO, KC_NO, KC_ENTER
407 * ,--------------------------------------------------. ,--------------------------------------------------.
408 * | ESC | V | D | ALT | | | | | | | | | | | |
409 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
410 * | TAB | S | I | F | M | T | | | | | | | | | |
411 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
412 * | Q | 1 | 2 | 3 | 4 | G |------| |------| | | | | | |
413 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
414 * | NUMLOCK| NUM1 | NUM2 | NUM3 | NUM4 | Z | | | | | | | | | |
415 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
416 * | LCTL | MAC1 | MAC2 | MAC3 | MAC4 | | | | | | |
417 * `----------------------------------' `----------------------------------'
418 * ,-------------. ,-------------.
420 * ,------|------|------| |------+------+------.
422 * | SPACE| Q |------ |------| | |
423 * | SHIFT| ALT | 0MAC | | | | |
424 * `--------------------' `--------------------'
427 KC_ESCAPE, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_NO,
428 KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_TRNS,
429 KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G,
430 KC_LCTL, TD(TD_DIABLO_1), TD(TD_DIABLO_2), TD(TD_DIABLO_3), TD(TD_DIABLO_4), KC_Z, KC_NO,
431 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
434 SFT_T(KC_SPACE), ALT_T(KC_Q), KC_DIABLO_CLEAR,
437 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
438 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
439 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
440 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
441 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
447 /* Keymap 4: Media and mouse keys
449 * ,--------------------------------------------------. ,--------------------------------------------------.
450 * | | | | | | | | | | | | | | | |
451 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
452 * | | | MsUp | | | | | | | | | | | | |
453 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
454 * | |MsLeft|MsDown|MsRght| | |------| |------| | | Acc0 | Acc1 | Acc2 | |
455 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
456 * | | Acc0 | Acc1 | Acc2 | | | | | | Play | Stop | Mute |VolDn |VolUp | |
457 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
458 * | | | | | | | | | | | |
459 * `----------------------------------' `----------------------------------'
460 * ,-------------. ,-------------.
462 * ,------|------|------| |------+------+------.
463 * | | | MWUp | | | | |
464 * | Lclk | Rclk |------| |------| MBn4 | MBn4 |
465 * | | | MWDn | | Mclk | | |
466 * `--------------------' `--------------------'
469 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
470 KC_NO, KC_NO, KC_MS_UP, KC_NO, KC_NO, KC_NO, KC_TRNS,
471 KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT,KC_NO, KC_NO,
472 KC_NO, KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2,KC_NO, KC_NO, KC_TRNS,
473 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
476 KC_MS_BTN1,KC_MS_BTN2,KC_MS_WH_DOWN,
478 KC_TRNS,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
479 KC_TRNS,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
480 KC_NO,KC_NO,KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2,KC_NO,KC_NO,
481 KC_TRNS,KC_MEDIA_PLAY_PAUSE,KC_MEDIA_STOP,KC_AUDIO_MUTE,KC_AUDIO_VOL_DOWN,KC_AUDIO_VOL_UP,KC_NO,
482 KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
485 KC_MS_BTN3,KC_MS_BTN4,KC_MS_BTN5
490 const uint16_t PROGMEM fn_actions[] = {
491 [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),
492 // FN1 - Momentary Layer 1 (Symbols)
495 void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
500 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
504 if (record->event.pressed) {
505 // Output Keyboard Firmware info
506 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
510 if (record->event.pressed) {
511 // Symmentra "Left Click to win" salt
512 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 );
515 if (record->event.pressed) {
517 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 );
520 if (record->event.pressed) {
521 // your saltiness makes me hard
522 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 );
525 if (record->event.pressed) {
526 // make ergodox-ez-drashna-custom-teensy
527 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), D(LSFT), T(MINUS), U(LSFT), 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);
530 if (record->event.pressed) {
532 return MACRO(I(50), T(ENTER), I(5), T(G), T(G), T(ENTER), END);
535 if (record->event.pressed) {
536 // Please sir, can I have some more salt
537 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 );
541 if (record->event.pressed) {
543 // Hey, look at me. I'm Doomfist, and I'm overpowered!
544 // All I do is spam punches all day! I'm DPS, tank and
545 // defense, rolled into one! All I need is team healing to be complete!
546 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 );
555 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
557 // dynamically generate these.
559 if (record->event.pressed) {
565 if (record->event.pressed) {
566 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
571 if (record->event.pressed) {
578 if (record->event.pressed) {
579 #ifdef RGBLIGHT_ENABLE
582 rgblight_setrgb(0x00,0x00,0xff);
589 if (record->event.pressed) {
590 #ifdef RGBLIGHT_ENABLE
593 rgblight_setrgb(0x00,0x80,0x00);
600 if (record->event.pressed) {
601 #ifdef RGBLIGHT_ENABLE
604 rgblight_setrgb(0xff,0x00,0x00);
611 if (record->event.pressed) {
612 #ifdef RGBLIGHT_ENABLE
615 rgblight_setrgb(0x80,0x00,0x80);
622 if (record->event.pressed) {
623 #ifdef RGBLIGHT_ENABLE
626 rgblight_setrgb(0x00,0xff,0x90);
631 case KC_DIABLO_CLEAR: // reset all Diable timers, disabling them
632 if (record->event.pressed) {
635 for (dtime = 0; dtime < 4; dtime++) {
636 diablo_key_time[dtime] = diablo_times[0];
647 // Sends the key press to system, but only if on the Diablo layer
648 void send_diablo_keystroke (uint8_t diablo_key) {
649 if (current_layer == DIABLO) {
650 switch (diablo_key) {
667 // Checks each of the 4 timers/keys to see if enough time has elapsed
668 // Runs the "send string" command if enough time has passed, and resets the timer.
669 void run_diablo_macro_check(void) {
672 for (dtime = 0; dtime < 4; dtime++) {
673 if (check_dtimer(dtime) && diablo_key_time[dtime]) {
674 diablo_timer[dtime] = timer_read();
675 send_diablo_keystroke(dtime);
681 void matrix_init_user(void) { // Runs boot tasks for keyboard
682 has_layer_changed = true;
687 void matrix_scan_user(void) { // runs frequently to update info
688 uint8_t modifiders = get_mods();
689 uint8_t layer = biton32(layer_state);
692 ergodox_board_led_off();
693 ergodox_right_led_1_off();
694 ergodox_right_led_2_off();
695 ergodox_right_led_3_off();
697 // Since we're not using the LEDs here for layer indication anymore,
698 // then lets use them for modifier indicators. Shame we don't have 4...
699 // Also, no "else", since we want to know each, independantly.
700 if ( modifiders & MODS_SHIFT_MASK) {
701 ergodox_right_led_1_on();
703 if ( modifiders & MODS_CTRL_MASK) {
704 ergodox_right_led_2_on();
706 if ( modifiders & MODS_ALT_MASK) {
707 ergodox_right_led_3_on();
711 // Check layer, and apply color if its changed since last check
714 if (has_layer_changed) {
715 rgblight_sethsv (255,255,255);
719 if (has_layer_changed) {
720 rgblight_sethsv (30,255,255);
724 if (has_layer_changed) {
725 rgblight_sethsv (0,255,255);
729 if (has_layer_changed) {
730 rgblight_sethsv (60,255,255);
734 if (has_layer_changed) {
735 rgblight_sethsv (300,255,255);
739 if (has_layer_changed) {
740 rgblight_sethsv (120,255,255);
744 if (has_layer_changed) {
745 rgblight_sethsv (255,255,255);
749 if (has_layer_changed) {
750 rgblight_sethsv (195,255,255);
755 // Update layer status at the end, so this sets the default color
756 // rather than relying on the init, which was unreliably...
757 // Probably due to a timing issue, but this requires no additional code
758 if (current_layer == layer) {
759 has_layer_changed = false;
761 has_layer_changed = true;
762 current_layer = layer;
765 // Run Diablo 3 macro checking code.
766 run_diablo_macro_check();