aboutsummaryrefslogtreecommitdiff
path: root/keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c')
-rw-r--r--keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c867
1 files changed, 867 insertions, 0 deletions
diff --git a/keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c b/keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c
new file mode 100644
index 000000000..ed7aede1f
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c
@@ -0,0 +1,867 @@
1#include QMK_KEYBOARD_H
2#include "debug.h"
3#include "action_layer.h"
4#include "version.h"
5
6
7#include "keymap_german.h"
8
9#include "keymap_nordic.h"
10
11// Define layer names
12#define BASE 0
13#define COLEMAK 1
14#define DVORAK 2
15#define SYMB 3
16#define OVERWATCH 4
17#define DIABLO 5
18#define MOUS 6
19
20//define modifiers
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))
24
25//define macro keycodes
26#define M_VERSION M(0)
27#define M_SYMM M(1)
28#define M_SALT M(2)
29#define M_HARD M(3)
30#define M_MAKE M(4)
31#define M_COVECUBE M(5)
32#define M_MORESALT M(6)
33#define M_DOOMFIST M(7)
34
35
36//define layer change stuff for underglow indicator
37bool skip_leds = false;
38bool has_layer_changed = false;
39static uint8_t current_layer;
40
41static uint16_t key_timer;
42//define diablo macro timer variables
43static uint16_t diablo_timer[4];
44static uint8_t diablo_times[] = {0, 1, 3, 5, 10, 30};
45static uint8_t diablo_key_time[4];
46
47bool 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;
50};
51
52bool checktime(void){
53 return (timer_elapsed(key_timer) < 150) ? true : false;
54};
55
56
57enum custom_keycodes {
58 PLACEHOLDER = SAFE_RANGE, // can always be here
59 EPRM,
60 VRSN,
61 RGB_SLD,
62 RGB_0000FF,
63 RGB_008000,
64 RGB_FF0000,
65 RGB_800080,
66 RGB_00FF90,
67 KC_DIABLO_CLEAR
68};
69
70#ifdef TAP_DANCE_ENABLE
71enum {
72 SFT_CAP = 0,
73 TD_DIABLO_J,
74 TD_CLN,
75 TD_EGG,
76 TD_FLSH,
77 TD_DIABLO_1,
78 TD_DIABLO_2,
79 TD_DIABLO_3,
80 TD_DIABLO_4
81};
82
83
84
85void 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);
89 } else {
90 register_code (KC_SCLN);
91 }
92}
93
94void 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);
98 } else {
99 unregister_code (KC_SCLN);
100 }
101}
102
103void 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);
107 }
108}
109
110// on each tap, light up one led, from right to left
111// on the forth tap, turn them off from right to left
112void dance_flsh_each(qk_tap_dance_state_t *state, void *user_data) {
113 if (!skip_leds) {
114 ergodox_board_led_off();
115 ergodox_right_led_1_off();
116 ergodox_right_led_2_off();
117 ergodox_right_led_3_off();
118 skip_leds = true;
119 }
120 switch (state->count) {
121 case 1:
122 ergodox_right_led_3_on();
123 break;
124 case 2:
125 ergodox_right_led_2_on();
126 break;
127 case 3:
128 ergodox_right_led_1_on();
129 break;
130 case 4:
131 ergodox_right_led_3_off();
132 _delay_ms(50);
133 ergodox_right_led_2_off();
134 _delay_ms(50);
135 ergodox_right_led_1_off();
136
137 }
138}
139
140// on the fourth tap, set the keyboard on flash state
141void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) {
142 if (state->count >= 4) {
143#ifdef LAYER_UNDERGLOW_LIGHTING
144 rgblight_enable();
145 rgblight_mode(1);
146 rgblight_setrgb(0xff,0x00,0x00);
147#endif
148 reset_keyboard();
149 reset_tap_dance(state);
150 }
151}
152
153void 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);
157 } else {
158 diablo_key_time[diablo_key] = diablo_times[state->count - 1];
159 }
160}
161
162void diablo_tapdance1 (qk_tap_dance_state_t *state, void *user_data) {
163 diablo_tapdance_master (state, user_data, 0);
164}
165
166void diablo_tapdance2 (qk_tap_dance_state_t *state, void *user_data) {
167 diablo_tapdance_master (state, user_data, 1);
168}
169
170void diablo_tapdance3 (qk_tap_dance_state_t *state, void *user_data) {
171 diablo_tapdance_master (state, user_data, 2);
172}
173
174void diablo_tapdance4 (qk_tap_dance_state_t *state, void *user_data) {
175 diablo_tapdance_master (state, user_data, 3);
176}
177
178
179// if the flash state didnt happen, then turn off leds, left to right
180void dance_flsh_reset(qk_tap_dance_state_t *state, void *user_data) {
181 _delay_ms(200);
182 ergodox_right_led_1_off();
183 _delay_ms(200);
184 ergodox_right_led_2_off();
185 _delay_ms(200);
186 ergodox_right_led_3_off();
187 _delay_ms(500);
188 skip_leds = false;
189}
190
191//Tap Dance Definitions
192qk_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),
195 // Special Z
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),
203
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),
208
209};
210#endif
211
212const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
213/* Keymap 0: Basic layer
214 *
215 *
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 * `---------------------' `---------------------'
234 */
235 [BASE] = KEYMAP(
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,
241
242 ALT_T(KC_APPLICATION), KC_LGUI,
243 KC_HOME,
244 KC_SPACE, KC_BSPACE, KC_END,
245
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),
252 KC_PGUP,
253 KC_PGDOWN, KC_DELETE, KC_ENTER
254 ),
255/* Keymap 1: Basic layer
256 *
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 * `--------------------' `----------------------'
275 */
276// If it accepts an argument (i.e, is a function), it doesn't need KC_.
277// Otherwise, it needs KC_*
278[COLEMAK] = KEYMAP(
279 // left hand
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,
286 KC_HOME,
287 KC_SPC,KC_BSPC,KC_END,
288 // right hand
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),
295 KC_PGUP,
296 KC_PGDN,KC_TAB, KC_ENT
297 ),
298/* Keymap 2: Basic layer
299 *
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 * `--------------------' `----------------------'
318 */
319// If it accepts an argument (i.e, is a function), it doesn't need KC_.
320// Otherwise, it needs KC_*
321[DVORAK] = KEYMAP(
322 // left hand
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,
329 KC_HOME,
330 KC_SPC,KC_BSPC,KC_END,
331 // right hand
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),
338 KC_PGUP,
339 KC_PGDN,KC_TAB, KC_ENT
340 ),
341
342 /* Keymap 3: Symbol Layer
343*
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* `--------------------' `--------------------'
362*/
363 [SYMB] = KEYMAP(
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,
369 RGB_MOD, RGB_0000FF,
370 RGB_008000,
371 RGB_VAD, RGB_VAI, RGB_FF0000,
372
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,
378 RGB_TOG, RGB_SLD,
379 RGB_HUI,
380 RGB_HUD, KC_KP_DOT, KC_KP_0
381 ),
382
383/* Keymap 4: Customized Overwatch Layout
384 *
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 * ,-------------. ,-------------.
397 * | O | P | | | |
398 * ,------|------|------| |------+------+------.
399 * | | | LGUI | | | | |
400 * | V | SPACE|------ |------| | Enter|
401 * | | | H | | | | |
402 * `--------------------' `--------------------'
403 */
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,
410 KC_O, KC_P,
411 KC_LGUI,
412 KC_V, KC_SPACE, KC_H,
413
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,
419 KC_NO, KC_NO,
420 KC_NO,
421 KC_NO, KC_NO, KC_ENTER
422 ),
423
424/* Keymap 3:
425 *
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 * ,-------------. ,-------------.
438 * | L | J | | | |
439 * ,------|------|------| |------+------+------.
440 * | | | G | | | | |
441 * | SPACE| Q |------ |------| | |
442 * | SHIFT| ALT | 0MAC | | | | |
443 * `--------------------' `--------------------'
444 */
445 [DIABLO] = KEYMAP(
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),
451 KC_L, KC_J,
452 KC_F,
453 SFT_T(KC_SPACE), ALT_T(KC_Q), KC_DIABLO_CLEAR,
454
455
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,
461 KC_NO, KC_NO,
462 KC_NO,
463 KC_NO, KC_NO, KC_NO
464 ),
465
466/* Keymap 4: Media and mouse keys
467 *
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 * ,-------------. ,-------------.
480 * | | | | | |
481 * ,------|------|------| |------+------+------.
482 * | | | MWUp | | | | |
483 * | Lclk | Rclk |------| |------| MBn4 | MBn4 |
484 * | | | MWDn | | Mclk | | |
485 * `--------------------' `--------------------'
486 */
487 [MOUS] = KEYMAP(
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,
493 KC_NO,KC_NO,
494 KC_MS_WH_UP,
495 KC_MS_BTN1,KC_MS_BTN2,KC_MS_WH_DOWN,
496
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,
502 KC_NO,KC_NO,
503 KC_NO,
504 KC_MS_BTN3,KC_MS_BTN4,KC_MS_BTN5
505 ),
506
507};
508
509const 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),
516};
517
518void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
519{
520
521}
522
523const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
524{
525 switch(id) {
526 case 0:
527 if (record->event.pressed) {
528 // Output Keyboard Firmware info
529 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
530 return false;
531 }
532 case 1:
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 );
536 }
537 case 2:
538 if (record->event.pressed) {
539 //salt salt salt
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 );
541 }
542 case 3:
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 );
546 }
547 case 4:
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 );
551 }
552 case 5:
553 if (record->event.pressed) {
554 //super secret hash
555 SEND_STRING("supersecrethash");
556 return MACRO_NONE;
557 }
558 case 6:
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 );
562 }
563 break;
564 case 7:
565 if (record->event.pressed) {
566 // DoomFisted
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 );
571 }
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 );
576 } else {
577 return checktime() ? MACRO(U(LSFT),D(RALT),T(7),U(RALT),END): MACRO(U(LSFT),END);
578 }; break;
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 );
583 } else {
584 return checktime() ? MACRO(U(RSFT),D(RALT),T(0),U(RALT),END): MACRO(U(RSFT),END);
585 }; break;
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);
591 }; break;
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 );
596 } else {
597 return checktime() ? MACRO(U(RCTL),D(RALT),T(9),U(RALT),END):MACRO(U(RCTL),END);
598 }; break;
599 }
600 return MACRO_NONE;
601};
602
603
604bool process_record_user(uint16_t keycode, keyrecord_t *record) {
605 switch (keycode) {
606 // dynamically generate these.
607 case EPRM:
608 if (record->event.pressed) {
609 eeconfig_init();
610 }
611 return false;
612 break;
613 case VRSN:
614 if (record->event.pressed) {
615 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
616 }
617 return false;
618 break;
619 case RGB_SLD:
620 if (record->event.pressed) {
621 rgblight_mode(1);
622 }
623 return false;
624 break;
625
626 case RGB_0000FF:
627 if (record->event.pressed) {
628 #ifdef RGBLIGHT_ENABLE
629 rgblight_enable();
630 rgblight_mode(1);
631 rgblight_setrgb(0x00,0x00,0xff);
632 #endif
633 }
634 return false;
635 break;
636
637 case RGB_008000:
638 if (record->event.pressed) {
639 #ifdef RGBLIGHT_ENABLE
640 rgblight_enable();
641 rgblight_mode(1);
642 rgblight_setrgb(0x00,0x80,0x00);
643 #endif
644 }
645 return false;
646 break;
647
648 case RGB_FF0000:
649 if (record->event.pressed) {
650 #ifdef RGBLIGHT_ENABLE
651 rgblight_enable();
652 rgblight_mode(1);
653 rgblight_setrgb(0xff,0x00,0x00);
654 #endif
655 }
656 return false;
657 break;
658
659 case RGB_800080:
660 if (record->event.pressed) {
661 #ifdef RGBLIGHT_ENABLE
662 rgblight_enable();
663 rgblight_mode(1);
664 rgblight_setrgb(0x80,0x00,0x80);
665 #endif
666 }
667 return false;
668 break;
669
670 case RGB_00FF90:
671 if (record->event.pressed) {
672 #ifdef RGBLIGHT_ENABLE
673 rgblight_enable();
674 rgblight_mode(1);
675 rgblight_setrgb(0x00,0xff,0x90);
676 #endif
677 }
678 return false;
679 break;
680 case KC_DIABLO_CLEAR:
681 if (record->event.pressed) {
682 uint8_t dtime;
683
684 for (dtime = 0; dtime < 4; dtime++) {
685 diablo_key_time[dtime] = diablo_times[0];
686 }
687 }
688 return false;
689 break;
690
691 }
692 return true;
693}
694
695void send_diablo_keystroke (uint8_t diablo_key) {
696 if (current_layer == DIABLO) {
697 switch (diablo_key) {
698 case 0:
699 SEND_STRING("1");
700 break;
701 case 1:
702 SEND_STRING("2");
703 break;
704 case 2:
705 SEND_STRING("3");
706 break;
707 case 3:
708 SEND_STRING("4");
709 break;
710 }
711 }
712}
713
714void run_diablo_macro_check(void) {
715 uint8_t dtime;
716
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);
721 }
722 }
723
724}
725
726void matrix_init_user(void) { // Runs boot tasks for keyboard
727 wait_ms(500);
728 ergodox_board_led_on();
729 wait_ms(200);
730 ergodox_right_led_1_on();
731 wait_ms(200);
732 ergodox_right_led_2_on();
733 wait_ms(200);
734 ergodox_right_led_3_on();
735 wait_ms(200);
736 ergodox_board_led_off();
737 wait_ms(200);
738 ergodox_right_led_1_off();
739 wait_ms(200);
740 ergodox_right_led_2_off();
741 wait_ms(200);
742 ergodox_right_led_3_off();
743
744
745#ifdef LAYER_UNDERGLOW_LIGHTING
746 rgblight_enable();
747 rgblight_sethsv(195,255,255);
748#endif
749 has_layer_changed = false;
750
751
752
753};
754
755
756
757void matrix_scan_user(void) { // runs frequently to update info
758 uint8_t modifiders = get_mods();
759 uint8_t layer = biton32(layer_state);
760
761 if (!skip_leds) {
762 ergodox_board_led_off();
763 ergodox_right_led_1_off();
764 ergodox_right_led_2_off();
765 ergodox_right_led_3_off();
766
767 if ( modifiders & MODS_SHIFT_MASK) {
768 ergodox_right_led_1_on();
769 }
770 if ( modifiders & MODS_CTRL_MASK) {
771 ergodox_right_led_2_on();
772 }
773 if ( modifiders & MODS_ALT_MASK) {
774 ergodox_right_led_3_on();
775 }
776
777 }
778
779 switch (layer) {
780 case SYMB:
781 #ifdef LAYER_UNDERGLOW_LIGHTING
782 if (has_layer_changed) {
783 rgblight_sethsv (240,255,255);
784 }
785 #else
786 ergodox_right_led_3_on();
787 #endif
788 break;
789 case OVERWATCH:
790 #ifdef LAYER_UNDERGLOW_LIGHTING
791 if (has_layer_changed) {
792 rgblight_sethsv (30,255,255);
793 }
794 #else
795 ergodox_right_led_2_on();
796 #endif
797 break;
798 case DIABLO:
799 #ifdef LAYER_UNDERGLOW_LIGHTING
800 if (has_layer_changed) {
801 rgblight_sethsv (0,255,255);
802 }
803 #else
804 ergodox_right_led_1_on();
805 #endif
806 break;
807 case MOUS:
808 #ifdef LAYER_UNDERGLOW_LIGHTING
809 if (has_layer_changed) {
810 rgblight_sethsv (60,255,255);
811 }
812 #else
813 ergodox_right_led_3_on();
814 ergodox_right_led_2_on();
815 #endif
816 break;
817 case COLEMAK:
818 #ifdef LAYER_UNDERGLOW_LIGHTING
819 if (has_layer_changed) {
820 rgblight_sethsv (300,255,255);
821 }
822 #else
823 ergodox_right_led_1_on();
824 ergodox_right_led_3_on();
825 #endif
826 break;
827 case DVORAK:
828 #ifdef LAYER_UNDERGLOW_LIGHTING
829 if (has_layer_changed) {
830 rgblight_sethsv (120,255,255);
831 }
832 #else
833 ergodox_right_led_2_on();
834 ergodox_right_led_1_on();
835 #endif
836 break;
837 case 7:
838 #ifdef LAYER_UNDERGLOW_LIGHTING
839 if (has_layer_changed) {
840 rgblight_sethsv (255,255,255);
841 }
842 #else
843 ergodox_right_led_1_on();
844 ergodox_right_led_2_on();
845 ergodox_right_led_3_on();
846 #endif
847 break;
848 default:
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);
853 }
854 #endif
855 break;
856 }
857
858 if (current_layer == layer) {
859 has_layer_changed = false;
860 } else {
861 has_layer_changed = true;
862 current_layer = layer;
863 }
864 run_diablo_macro_check();
865};
866
867