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"
39 #define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
40 #define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
41 #define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
43 //define macro keycodes
44 #define M_VERSION M(0)
47 //define layer change stuff for underglow indicator
48 bool skip_leds = false;
50 #define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF);
51 #define rgblight_set_red rgblight_sethsv(0x00, 0xFF, 0xFF);
52 #define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF);
53 #define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF);
54 #define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
55 #define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
56 #define rgblight_set_urine rgblight_sethsv (0x3C, 0xFF, 0xFF);
57 //This is both for underglow, and Diablo 3 macros
59 static uint8_t current_layer = 0;
61 //define diablo macro timer variables
62 static uint16_t diablo_timer[4];
63 static uint8_t diablo_times[] = {0, 1, 3, 5, 10, 30};
64 static uint8_t diablo_key_time[4];
66 bool check_dtimer(uint8_t dtimer) {
67 // has the correct number of seconds elapsed (as defined by diablo_times)
68 return (timer_elapsed(diablo_timer[dtimer]) < ( diablo_key_time[dtimer] * 1000 ) ) ? false : true;
72 enum custom_keycodes {
73 PLACEHOLDER = SAFE_RANGE, // can always be here
88 #ifdef TAP_DANCE_ENABLE
100 // on each tap, light up one led, from right to left
101 // on the forth tap, turn them off from right to left
103 void dance_flsh_each(qk_tap_dance_state_t *state, void *user_data) {
105 ergodox_board_led_off();
106 ergodox_right_led_1_off();
107 ergodox_right_led_2_off();
108 ergodox_right_led_3_off();
111 switch (state->count) {
113 ergodox_right_led_1_on();
116 ergodox_right_led_2_on();
119 ergodox_right_led_3_on();
122 ergodox_right_led_1_off();
124 ergodox_right_led_2_off();
126 ergodox_right_led_3_off();
131 // on the fourth tap, set the keyboard on flash state
132 // and set the underglow to red, because red == bad
133 void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) {
134 if (state->count >= 4) {
137 rgblight_setrgb(0xff,0x00,0x00);
139 reset_tap_dance(state);
143 // Cycle through the times for the macro, starting at 0, for disabled.
144 // Max of six values, so don't exceed
145 void diablo_tapdance_master (qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
146 if (state->count >= 7) {
147 diablo_key_time[diablo_key] = diablo_times[0];
148 reset_tap_dance(state);
150 diablo_key_time[diablo_key] = diablo_times[state->count - 1];
155 // Would rather have one function for all of this, but no idea how to do that...
156 void diablo_tapdance1 (qk_tap_dance_state_t *state, void *user_data) {
157 diablo_tapdance_master (state, user_data, 0);
160 void diablo_tapdance2 (qk_tap_dance_state_t *state, void *user_data) {
161 diablo_tapdance_master (state, user_data, 1);
164 void diablo_tapdance3 (qk_tap_dance_state_t *state, void *user_data) {
165 diablo_tapdance_master (state, user_data, 2);
168 void diablo_tapdance4 (qk_tap_dance_state_t *state, void *user_data) {
169 diablo_tapdance_master (state, user_data, 3);
173 // if the flash state didnt happen, then turn off leds, left to right
174 void dance_flsh_reset(qk_tap_dance_state_t *state, void *user_data) {
176 ergodox_right_led_3_off();
178 ergodox_right_led_2_off();
180 ergodox_right_led_1_off();
185 //Tap Dance Definitions
186 qk_tap_dance_action_t tap_dance_actions[] = {
187 //Once for Blue, Twice for Green, Thrice for Red, and four to flash
188 [TD_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED (dance_flsh_each, dance_flsh_finished, dance_flsh_reset),
189 // tap once to disable, and more to enable timed micros
190 [TD_DIABLO_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
191 [TD_DIABLO_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
192 [TD_DIABLO_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
193 [TD_DIABLO_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
198 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
199 /* Keymap 0: Basic layer
202 * ,--------------------------------------------------. ,--------------------------------------------------.
203 * | = + | 1 ! | 2 @ | 3 # | 4 $ | 5 % | TG(4)| | TG(4)| 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ |
204 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
205 * | TAB | Q | W | E | R | T | TG(3)| |TG(3) | Y | U | I | O | P | \ | |
206 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
207 * | Bksp | A | S | D | F | G |------| |------| H | J | K | L | ; | ' " |
208 * |--------+------+------+------+------+------| TG(2)| | TG(2)|------+------+------+------+------+--------|
209 * | Shift | Z | X | C | V | B | | | | N | M | , < | . > | ? / | Shift |
210 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
211 * | `/SYM| ' " | LGUI | [ { | ] } | | LEFT | DOWN | UP |RIGHT | SYMB |
212 * `----------------------------------' `----------------------------------'
213 * ,--------------. ,--------------.
214 * |Alt/Ap| Win | | Alt |Ctl/Esc|
215 * ,------|------|-------| |------+-------+------.
216 * | | | Home | | PgUp | | |
217 * | Space| Bksp |-------| |------| DEL |Enter |
218 * | | | End | | PgDn | | |
219 * `---------------------' `---------------------'
222 KC_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS),
223 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(DIABLO),
224 KC_BSPACE, KC_A, KC_S, KC_D, KC_F, KC_G,
225 KC_LSHIFT, CTL_T(KC_Z),KC_X, KC_C, KC_V, KC_B, TG(OVERWATCH),
226 LT(SYMB,KC_GRAVE),KC_QUOTE, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
228 ALT_T(KC_APPLICATION), KC_LGUI,
230 KC_SPACE, KC_BSPACE, KC_END,
232 TG(SYMB), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
233 TG(DVORAK), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
234 KC_H, KC_J, KC_K, KC_L, KC_SCOLON, GUI_T(KC_QUOTE),
235 TG(COLEMAK), KC_N, KC_M, KC_COMMA, KC_DOT, CTL_T(KC_SLASH),KC_RSHIFT,
236 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1,
237 KC_LALT, CTL_T(KC_ESCAPE),
239 KC_PGDOWN, KC_DELETE, KC_ENTER
241 /* Keymap 1: Basic layer
243 * ,--------------------------------------------------. ,--------------------------------------------------.
244 * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
245 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
246 * | Del | Q | W | F | P | G | L1 | | L1 | J | L | U | Y | ; | \ |
247 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
248 * | BkSp | A | R | S | T | D |------| |------| H | N | E | I |O / L2| ' |
249 * |--------+------+------+------+------+------| OVER | | Meh |------+------+------+------+------+--------|
250 * | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift |
251 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
252 * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
253 * `----------------------------------' `----------------------------------'
254 * ,-------------. ,-------------.
255 * | App | LGui | | Alt |Ctrl/Esc|
256 * ,------|------|------| |------+--------+------.
257 * | | | Home | | PgUp | | |
258 * | Space|Backsp|------| |------| Tab |Enter |
259 * | |ace | End | | PgDn | | |
260 * `--------------------' `----------------------'
262 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
263 // Otherwise, it needs KC_*
266 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS),
267 KC_DELT, KC_Q, KC_W, KC_F, KC_P, KC_G, TG(DIABLO),
268 KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D,
269 KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(OVERWATCH),
270 LT(SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
271 ALT_T(KC_APP), KC_LGUI,
273 KC_SPC,KC_BSPC,KC_END,
275 KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
276 TG(DVORAK), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
277 KC_H, KC_N, KC_E, KC_I, LT(MOUS, KC_O), KC_QUOTE,
278 TG(COLEMAK), KC_K, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLASH),KC_RSHIFT,
279 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1,
280 KC_LALT, CTL_T(KC_ESC),
282 KC_PGDN,KC_TAB, KC_ENT
284 /* Keymap 2: Basic layer
286 * ,--------------------------------------------------. ,--------------------------------------------------.
287 * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | \ |
288 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
289 * | Del | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / |
290 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
291 * | BkSp | A | O | E | U | I |------| |------| D | H | T | N |S / L2| - |
292 * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
293 * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/Ctrl| RShift |
294 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
295 * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
296 * `----------------------------------' `----------------------------------'
297 * ,-------------. ,-------------.
298 * | App | LGui | | Alt |Ctrl/Esc|
299 * ,------|------|------| |------+--------+------.
300 * | | | Home | | PgUp | | |
301 * | Space|Backsp|------| |------| Tab |Enter |
302 * | |ace | End | | PgDn | | |
303 * `--------------------' `----------------------'
305 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
306 // Otherwise, it needs KC_*
309 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS),
310 KC_DELT, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(DIABLO),
311 KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I,
312 KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, TG(OVERWATCH),
313 LT(SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET, KC_RBRACKET,
314 ALT_T(KC_APP), KC_LGUI,
316 KC_SPC,KC_BSPC,KC_END,
318 KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
319 TG(DVORAK), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
320 KC_D, KC_H, KC_T, KC_N, LT(MOUS, KC_S), KC_MINS,
321 TG(COLEMAK), KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSHIFT,
322 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1,
323 KC_LALT, CTL_T(KC_ESC),
325 KC_PGDN,KC_TAB, KC_ENT
328 /* Keymap 3: Symbol Layer
330 * ,--------------------------------------------------. ,--------------------------------------------------.
331 * | ESC | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
332 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
333 * | VERSION| ! | @ | { | } | | | | | | + | 7 | 8 | 9 | * | F12 |
334 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
335 * | MAKE | # | $ | ( | ) | ` |------| |------| - | 4 | 5 | 6 | / | PrtSc |
336 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
337 * | RESET | % | ^ | [ | ] | ~ | | | | NUM | 1 | 2 | 3 | = | PAUSE |
338 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
339 * | LT0 | & | * | : | ; | | | 0 | NUM. | ENT | ENT |
340 * `----------------------------------' `----------------------------------'
341 * ,-------------. ,-------------.
342 * | RGBM | RED | | OFF | SOLID|
343 * ,------|------|------| |------+------+------.
344 * | | | GREEN| | | | |
345 * | RGB | RGB |------| |------| NUM0 | NUME |
346 * | DARK |BRITE | BLUE | | | | |
347 * `--------------------' `--------------------'
350 KC_ESCAPE,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
351 M_VERSION, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
352 M_MAKE, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE,
353 TD(TD_FLSH), KC_PERC, KC_CIRC, KC_LBRACKET,KC_RBRACKET,KC_TILD, KC_TRNS,
354 KC_NO, KC_AMPR, KC_ASTR, KC_COLN, KC_SCOLON,
357 KC_TRNS, KC_TRNS, KC_TRNS,
359 KC_QWERTY, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
360 KC_DVORAK, KC_KP_PLUS, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_ASTERISK, KC_F12,
361 KC_KP_MINUS, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_SLASH,KC_PSCREEN,
362 KC_COLEMAK, KC_NUMLOCK, KC_KP_1, KC_KP_2, KC_KP_3, KC_EQUAL, KC_PAUSE,
363 KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, KC_TRNS,
366 KC_KP_DOT, KC_KP_0, KC_KP_ENTER
369 /* Keymap 4: Customized Overwatch Layout
371 * ,--------------------------------------------------. ,--------------------------------------------------.
372 * | ESC | | | | | | | | | F9 | F10 | F11 | F12 | | |
373 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
374 * | F1 | K | Q | W | E | R | T | | | | | | | | |
375 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
376 * | TAB | G | A | S | D | F |------| |------| | | | | | |
377 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
378 * | LCTR | LSHFT| Z | X | C | V | | | | N | M | | | | |
379 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
380 * | J | U | I | Y | T | | | | | | |
381 * `----------------------------------' `----------------------------------'
382 * ,-------------. ,-------------.
384 * ,------|------|------| |------+------+------.
385 * | | | LGUI | | | | |
386 * | V | SPACE|------ |------| | Enter|
388 * `--------------------' `--------------------'
390 [OVERWATCH] = KEYMAP(
391 KC_ESCAPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
392 KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T,
393 KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F,
394 KC_LCTL, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_TRNS,
395 KC_G, KC_U, KC_I, KC_Y, KC_T,
398 KC_V, KC_SPACE, KC_H,
400 KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
401 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
402 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
403 KC_NO, KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO,
404 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
407 KC_PGDOWN, KC_DELETE, KC_ENTER
412 * ,--------------------------------------------------. ,--------------------------------------------------.
413 * | ESC | V | D | ALT | | | | | | | | | | | |
414 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
415 * | TAB | S | I | F | M | T | | | | | | | | | |
416 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
417 * | Q | 1 | 2 | 3 | 4 | G |------| |------| | | | | | |
418 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
419 * | NUMLOCK| NUM1 | NUM2 | NUM3 | NUM4 | Z | | | | | | | | | |
420 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
421 * | LCTL | MAC1 | MAC2 | MAC3 | MAC4 | | | | | | |
422 * `----------------------------------' `----------------------------------'
423 * ,-------------. ,-------------.
425 * ,------|------|------| |------+------+------.
427 * | SPACE| Q |------ |------| | |
428 * | SHIFT| ALT | 0MAC | | | | |
429 * `--------------------' `--------------------'
432 KC_ESCAPE, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_NO,
433 KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_TRNS,
434 KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G,
435 KC_LCTL, TD(TD_DIABLO_1), TD(TD_DIABLO_2), TD(TD_DIABLO_3), TD(TD_DIABLO_4), KC_Z, KC_NO,
436 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
439 SFT_T(KC_SPACE), ALT_T(KC_Q), KC_DIABLO_CLEAR,
442 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
443 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
444 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
445 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
446 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
452 /* Keymap 4: Media and mouse keys
454 * ,--------------------------------------------------. ,--------------------------------------------------.
455 * | | | | | | | | | | | | | | | |
456 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
457 * | | | MsUp | | | | | | | | | | | | |
458 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
459 * | |MsLeft|MsDown|MsRght| | |------| |------| | | Acc0 | Acc1 | Acc2 | |
460 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
461 * | | Acc0 | Acc1 | Acc2 | | | | | | Play | Stop | Mute |VolDn |VolUp | |
462 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
463 * | | | | | | | | | | | |
464 * `----------------------------------' `----------------------------------'
465 * ,-------------. ,-------------.
467 * ,------|------|------| |------+------+------.
468 * | | | MWUp | | | | |
469 * | Lclk | Rclk |------| |------| MBn4 | MBn4 |
470 * | | | MWDn | | Mclk | | |
471 * `--------------------' `--------------------'
474 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
475 KC_NO, KC_NO, KC_MS_UP, KC_NO, KC_NO, KC_NO, KC_TRNS,
476 KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT,KC_NO, KC_NO,
477 KC_NO, KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2,KC_NO, KC_NO, KC_TRNS,
478 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
481 KC_MS_BTN1,KC_MS_BTN2,KC_MS_WH_DOWN,
483 KC_TRNS,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
484 KC_TRNS,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
485 KC_NO,KC_NO,KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2,KC_NO,KC_NO,
486 KC_TRNS,KC_MEDIA_PLAY_PAUSE,KC_MEDIA_STOP,KC_AUDIO_MUTE,KC_AUDIO_VOL_DOWN,KC_AUDIO_VOL_UP,KC_NO,
487 KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
490 KC_MS_BTN3,KC_MS_BTN4,KC_MS_BTN5
495 const uint16_t PROGMEM fn_actions[] = {
496 [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),
497 // FN1 - Momentary Layer 1 (Symbols)
500 void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
505 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
509 if (record->event.pressed) {
510 // Output Keyboard Firmware info
511 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
515 if (record->event.pressed) {
516 // make ergodox-ez-drashna-custom-teensy
517 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);
523 void persistent_default_layer_set(uint16_t default_layer) {
524 eeconfig_update_default_layer(default_layer);
525 default_layer_set(default_layer);
529 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
531 // dynamically generate these.
533 if (record->event.pressed) {
539 if (record->event.pressed) {
540 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
545 if (record->event.pressed) {
552 if (record->event.pressed) {
553 #ifdef RGBLIGHT_ENABLE
556 rgblight_setrgb(0x00,0x00,0xff);
563 if (record->event.pressed) {
564 #ifdef RGBLIGHT_ENABLE
567 rgblight_setrgb(0x00,0x80,0x00);
574 if (record->event.pressed) {
575 #ifdef RGBLIGHT_ENABLE
578 rgblight_setrgb(0xff,0x00,0x00);
585 if (record->event.pressed) {
586 #ifdef RGBLIGHT_ENABLE
589 rgblight_setrgb(0x80,0x00,0x80);
596 if (record->event.pressed) {
597 #ifdef RGBLIGHT_ENABLE
600 rgblight_setrgb(0x00,0xff,0x90);
605 case KC_DIABLO_CLEAR: // reset all Diable timers, disabling them
606 if (record->event.pressed) {
609 for (dtime = 0; dtime < 4; dtime++) {
610 diablo_key_time[dtime] = diablo_times[0];
616 if (record->event.pressed) {
617 persistent_default_layer_set(1UL << QWERTY);
622 if (record->event.pressed) {
623 persistent_default_layer_set(1UL << COLEMAK);
628 if (record->event.pressed) {
629 persistent_default_layer_set(1UL << DVORAK);
639 // Sends the key press to system, but only if on the Diablo layer
640 void send_diablo_keystroke (uint8_t diablo_key) {
641 if (current_layer == DIABLO) {
642 switch (diablo_key) {
659 // Checks each of the 4 timers/keys to see if enough time has elapsed
660 // Runs the "send string" command if enough time has passed, and resets the timer.
661 void run_diablo_macro_check(void) {
664 for (dtime = 0; dtime < 4; dtime++) {
665 if (check_dtimer(dtime) && diablo_key_time[dtime]) {
666 diablo_timer[dtime] = timer_read();
667 send_diablo_keystroke(dtime);
673 void matrix_init_user(void) { // Runs boot tasks for keyboard
679 void matrix_scan_user(void) { // runs frequently to update info
680 uint8_t modifiders = get_mods();
681 uint8_t layer = biton32(layer_state);
682 bool l_dvorak = false;
683 bool l_colemak = false;
684 static bool has_layer_changed = true;
688 ergodox_board_led_off();
689 ergodox_right_led_1_off();
690 ergodox_right_led_2_off();
691 ergodox_right_led_3_off();
693 // Since we're not using the LEDs here for layer indication anymore,
694 // then lets use them for modifier indicators. Shame we don't have 4...
695 // Also, no "else", since we want to know each, independantly.
696 if ( modifiders & MODS_SHIFT_MASK) {
697 ergodox_right_led_1_on();
699 if ( modifiders & MODS_CTRL_MASK) {
700 ergodox_right_led_2_on();
702 if ( modifiders & MODS_ALT_MASK) {
703 ergodox_right_led_3_on();
707 if (layer != current_layer) {
708 has_layer_changed = true;
709 current_layer = layer;
711 // Check layer, and apply color if its changed since last check
712 if (has_layer_changed) {
713 uint8_t default_layer = 0;
714 default_layer = eeconfig_read_default_layer();
716 if (default_layer & (1UL << DVORAK)) {
719 else if (default_layer & (1UL << COLEMAK)) {
739 rgblight_set_magenta;
745 rgblight_sethsv (255,255,255);
749 rgblight_set_magenta;
760 has_layer_changed = false;
763 // Run Diablo 3 macro checking code.
764 run_diablo_macro_check();