aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/ergodox/ez/keymaps/drashna-custom/Makefile10
-rw-r--r--keyboards/ergodox/ez/keymaps/drashna-custom/config.h8
-rw-r--r--keyboards/ergodox/ez/keymaps/drashna-custom/keymap.c669
3 files changed, 687 insertions, 0 deletions
diff --git a/keyboards/ergodox/ez/keymaps/drashna-custom/Makefile b/keyboards/ergodox/ez/keymaps/drashna-custom/Makefile
new file mode 100644
index 000000000..ba71b33eb
--- /dev/null
+++ b/keyboards/ergodox/ez/keymaps/drashna-custom/Makefile
@@ -0,0 +1,10 @@
1TAP_DANCE_ENABLE = yes
2LAYER_UNDERGLOW_LIGHTING = yes
3SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
4COMMAND_ENABLE = no # Commands for debug and configuration
5RGBLIGHT_ENABLE = yes
6MIDI_ENABLE = no
7
8ifndef QUANTUM_DIR
9 include ../../../../Makefile
10endif
diff --git a/keyboards/ergodox/ez/keymaps/drashna-custom/config.h b/keyboards/ergodox/ez/keymaps/drashna-custom/config.h
new file mode 100644
index 000000000..1578b1a8e
--- /dev/null
+++ b/keyboards/ergodox/ez/keymaps/drashna-custom/config.h
@@ -0,0 +1,8 @@
1
2#include "../../config.h"
3
4
5#define TAPPING_TERM 200
6
7
8#define LAYER_UNDERGLOW_LIGHTING
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..07da654c9
--- /dev/null
+++ b/keyboards/ergodox/ez/keymaps/drashna-custom/keymap.c
@@ -0,0 +1,669 @@
1#include "ergodox.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 SYMB 1
14#define OVERWATCH 2
15#define DIABLO 3
16#define MOUS 4
17
18#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
19#define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
20#define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
21
22
23#define M_VERSION M(0)
24#define M_SYMM M(1)
25#define M_SALT M(2)
26#define M_HARD M(3)
27#define M_MAKE M(4)
28#define M_COVECUBE M(5)
29#define M_MORESALT M(6)
30#define M_DOOMFIST M(7)
31
32
33
34bool skip_leds = false;
35bool has_layer_changed = false;
36static uint8_t current_layer;
37
38static uint16_t key_timer;
39static uint16_t diablo_timer[4];
40static uint8_t diablo_times[] = {0, 1, 3, 5, 10};
41static uint8_t diablo_key_time[4];
42
43bool check_dtimer(uint8_t dtimer) {
44 // has the correct number of seconds elapsed (as defined by diablo_times)
45 return (timer_elapsed(diablo_timer[dtimer]) < ( diablo_key_time[dtimer] * 1000 ) ) ? false : true;
46};
47
48bool checktime(void){
49 return (timer_elapsed(key_timer) < 150) ? true : false;
50};
51
52
53enum custom_keycodes {
54 PLACEHOLDER = SAFE_RANGE, // can always be here
55 EPRM,
56 VRSN,
57 RGB_SLD,
58 RGB_0000FF,
59 RGB_008000,
60 RGB_FF0000,
61 RGB_800080,
62 RGB_00FF90,
63 KC_DIABLO_CLEAR
64};
65
66#ifdef TAP_DANCE_ENABLE
67enum {
68 TD_ESC_CAPS = 0,
69 TD_SPACE,
70 TD_DIABLO_J,
71 TD_CLN,
72 TD_EGG,
73 TD_FLSH,
74 TD_DIABLO_1,
75 TD_DIABLO_2,
76 TD_DIABLO_3,
77 TD_DIABLO_4
78};
79
80
81
82void dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) {
83 if (state->count == 1) {
84 register_code (KC_RSFT);
85 register_code (KC_SCLN);
86 } else {
87 register_code (KC_SCLN);
88 }
89}
90
91void dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) {
92 if (state->count == 1) {
93 unregister_code (KC_RSFT);
94 unregister_code (KC_SCLN);
95 } else {
96 unregister_code (KC_SCLN);
97 }
98}
99
100void dance_egg (qk_tap_dance_state_t *state, void *user_data) {
101 if (state->count >= 10) {
102 SEND_STRING ("Safety dance!");
103 reset_tap_dance (state);
104 }
105}
106
107// on each tap, light up one led, from right to left
108// on the forth tap, turn them off from right to left
109void dance_flsh_each(qk_tap_dance_state_t *state, void *user_data) {
110 if (!skip_leds) {
111 ergodox_board_led_off();
112 ergodox_right_led_1_off();
113 ergodox_right_led_2_off();
114 ergodox_right_led_3_off();
115 skip_leds = true;
116 }
117 switch (state->count) {
118 case 1:
119 ergodox_right_led_3_on();
120 break;
121 case 2:
122 ergodox_right_led_2_on();
123 break;
124 case 3:
125 ergodox_right_led_1_on();
126 break;
127 case 4:
128 ergodox_right_led_3_off();
129 _delay_ms(50);
130 ergodox_right_led_2_off();
131 _delay_ms(50);
132 ergodox_right_led_1_off();
133
134 }
135}
136
137// on the fourth tap, set the keyboard on flash state
138void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) {
139 if (state->count >= 4) {
140#ifdef LAYER_UNDERGLOW_LIGHTING
141 rgblight_enable();
142 rgblight_mode(1);
143 rgblight_setrgb(0xff,0x00,0x00);
144#endif
145 reset_keyboard();
146 reset_tap_dance(state);
147 }
148}
149
150void diablo_tapdance_master (qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
151 if (state->count >= 6) {
152 diablo_key_time[diablo_key] = diablo_times[0];
153 reset_tap_dance(state);
154 } else {
155 diablo_key_time[diablo_key] = diablo_times[state->count - 1];
156 }
157}
158
159void diablo_tapdance1 (qk_tap_dance_state_t *state, void *user_data) {
160 diablo_tapdance_master (state, user_data, 0);
161}
162
163void diablo_tapdance2 (qk_tap_dance_state_t *state, void *user_data) {
164 diablo_tapdance_master (state, user_data, 1);
165}
166
167void diablo_tapdance3 (qk_tap_dance_state_t *state, void *user_data) {
168 diablo_tapdance_master (state, user_data, 2);
169}
170
171void diablo_tapdance4 (qk_tap_dance_state_t *state, void *user_data) {
172 diablo_tapdance_master (state, user_data, 3);
173}
174
175
176// if the flash state didnt happen, then turn off leds, left to right
177void dance_flsh_reset(qk_tap_dance_state_t *state, void *user_data) {
178 _delay_ms(200);
179 ergodox_right_led_1_off();
180 _delay_ms(200);
181 ergodox_right_led_2_off();
182 _delay_ms(200);
183 ergodox_right_led_3_off();
184 _delay_ms(500);
185 skip_leds = false;
186}
187
188//Tap Dance Definitions
189qk_tap_dance_action_t tap_dance_actions[] = {
190 //Tap once for Esc, twice for Caps Lock
191 [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS),
192 //Tap one for Space, and twice for Enter
193 [TD_SPACE] = ACTION_TAP_DANCE_DOUBLE(KC_SPACE, KC_ENTER),
194 // Special Z
195 [TD_DIABLO_J] = ACTION_TAP_DANCE_DOUBLE(KC_J, S(KC_J)),
196 // Once for colin, twice for semi-colin
197 [TD_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cln_finished, dance_cln_reset),
198 // Tap until you get a surprise
199 [TD_EGG] = ACTION_TAP_DANCE_FN (dance_egg),
200 //Once for Blue, Twice for Green, Thrice for Red, and four to flash
201 [TD_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED (dance_flsh_each, dance_flsh_finished, dance_flsh_reset),
202
203 [TD_DIABLO_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
204 [TD_DIABLO_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
205 [TD_DIABLO_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
206 [TD_DIABLO_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
207
208};
209#endif
210
211const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
212 [BASE] = KEYMAP(
213 KC_EQUAL,KC_1,KC_2,KC_3,KC_4,KC_5,TG(MOUS),
214 KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,TG(DIABLO),
215 KC_BSPACE,KC_A,KC_S,KC_D,KC_F,KC_G,
216 KC_LSHIFT,CTL_T(KC_Z),KC_X,KC_C,KC_V,KC_B,TG(OVERWATCH),
217 LT(SYMB,KC_GRAVE),KC_QUOTE,KC_LGUI,KC_LEFT,KC_RIGHT,
218 ALT_T(KC_APPLICATION),KC_LGUI,
219 KC_HOME,
220 KC_SPACE,KC_BSPACE,KC_LBRACKET,
221
222 TG(MOUS),KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINUS,
223 TG(DIABLO),KC_Y,KC_U,KC_I,KC_O,KC_P,KC_BSLASH,
224 KC_H,KC_J,KC_K,KC_L,KC_SCOLON,GUI_T(KC_QUOTE),
225 TG(OVERWATCH),KC_N,KC_M,KC_COMMA,KC_DOT,CTL_T(KC_SLASH),KC_RSHIFT,
226 KC_PGDOWN,KC_PGUP,KC_DOWN,KC_UP,MO(SYMB),
227 KC_LALT,CTL_T(KC_ESCAPE),
228 KC_END,
229 KC_RBRACKET,KC_DELETE,KC_ENTER
230 ),
231
232 [SYMB] = KEYMAP(
233 TD(TD_ESC_CAPS),KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_TRANSPARENT,
234 M_VERSION,KC_EXLM,KC_AT,KC_LCBR,KC_RCBR,KC_PIPE,KC_TRANSPARENT,
235 M_MAKE,KC_HASH,KC_DLR,KC_LPRN,KC_RPRN,KC_GRAVE,
236 TD(TD_FLSH),KC_PERC,KC_CIRC,KC_LBRACKET,KC_RBRACKET,KC_TILD,M_COVECUBE,
237 KC_NO,KC_AMPR,KC_ASTR,KC_COLN,KC_SCOLON,
238 RGB_MOD,RGB_0000FF,
239 RGB_008000,
240 RGB_VAD,RGB_VAI,RGB_FF0000,
241
242 KC_TRANSPARENT,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,
243 KC_TRANSPARENT,KC_KP_PLUS,KC_KP_7,KC_KP_8,KC_KP_9,KC_KP_ASTERISK,KC_F12,
244 KC_KP_MINUS,KC_KP_4,KC_KP_5,KC_KP_6,KC_KP_SLASH,KC_PSCREEN,
245 KC_TRANSPARENT,KC_NUMLOCK,KC_KP_1,KC_KP_2,KC_KP_3,KC_EQUAL,KC_PAUSE,
246 KC_KP_0,KC_KP_0,KC_KP_DOT,KC_KP_ENTER,KC_KP_ENTER,
247 RGB_TOG,RGB_SLD,
248 RGB_HUI,
249 RGB_HUD,KC_KP_DOT,KC_KP_0
250 ),
251
252 [OVERWATCH] = KEYMAP(
253 KC_ESCAPE,KC_1,KC_2,KC_3,KC_4,M_MORESALT,M_SYMM,
254 KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_BSPACE,
255 KC_LCTL,KC_A,KC_S,KC_D,KC_F,KC_G,
256 KC_LSHIFT,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_TRANSPARENT,
257 KC_LCTL,M_SALT,KC_LGUI,KC_Y,KC_LALT,
258 KC_ESCAPE,KC_LGUI,
259 M_DOOMFIST,
260 KC_SPACE,KC_V,KC_H,
261
262 M_HARD,KC_F9,KC_F10,KC_F11,KC_F12,KC_NO,KC_NO,
263 KC_TRANSPARENT,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
264 KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
265 KC_TRANSPARENT,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
266 KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
267 KC_NO,KC_NO,
268 KC_NO,
269 KC_NO,KC_NO,KC_NO
270 ),
271
272 [DIABLO] = KEYMAP(
273 KC_ESCAPE,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_TRANSPARENT,
274 KC_TAB,KC_S,KC_I,KC_F,KC_M,KC_T,KC_TRANSPARENT,
275 KC_Q,KC_1,KC_2,KC_3,KC_4,KC_G,
276 KC_NUMLOCK,KC_KP_1,KC_KP_2,KC_KP_3,KC_KP_4,KC_Z,TO(BASE),
277 KC_LCTL,TD(TD_DIABLO_1),TD(TD_DIABLO_2),TD(TD_DIABLO_3),TD(TD_DIABLO_4),
278 KC_L,LSFT(KC_J),
279 KC_F,
280 SFT_T(KC_SPACE),ALT_T(KC_Q),KC_DIABLO_CLEAR,
281
282
283 KC_TRANSPARENT,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
284 KC_TRANSPARENT,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
285 KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
286 KC_TRANSPARENT,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
287 KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
288 KC_NO,KC_NO,
289 KC_NO,
290 KC_NO,KC_NO,KC_NO
291 ),
292
293 [MOUS] = KEYMAP(
294 KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_TRANSPARENT,
295 KC_NO,KC_NO,KC_MS_UP,KC_NO,KC_NO,KC_NO,KC_TRANSPARENT,
296 KC_NO,KC_MS_LEFT,KC_MS_DOWN,KC_MS_RIGHT,KC_NO,KC_NO,
297 KC_NO,KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2,KC_NO,KC_NO,KC_TRANSPARENT,
298 KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
299 KC_NO,KC_NO,
300 KC_MS_WH_UP,
301 KC_MS_BTN1,KC_MS_BTN2,KC_MS_WH_DOWN,
302
303 KC_TRANSPARENT,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
304 KC_TRANSPARENT,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
305 KC_NO,KC_NO,KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2,KC_NO,KC_NO,
306 KC_TRANSPARENT,KC_MEDIA_PLAY_PAUSE,KC_MEDIA_STOP,KC_AUDIO_MUTE,KC_AUDIO_VOL_DOWN,KC_AUDIO_VOL_UP,KC_NO,
307 KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
308 KC_NO,KC_NO,
309 KC_NO,
310 KC_MS_BTN3,KC_MS_BTN4,KC_MS_BTN5
311 ),
312
313};
314
315const uint16_t PROGMEM fn_actions[] = {
316 [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
317};
318
319void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
320{
321
322}
323
324const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
325{
326 switch(id) {
327 case 0:
328 if (record->event.pressed) {
329 // Output Keyboard Firmware info
330 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
331 return false;
332 }
333 case 1:
334 if (record->event.pressed) {
335 // Symmentra "Left Click to win" salt
336 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 );
337 }
338 case 2:
339 if (record->event.pressed) {
340 //salt salt salt
341 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 );
342 }
343 case 3:
344 if (record->event.pressed) {
345 // your saltiness makes me hard
346 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 );
347 }
348 case 4:
349 if (record->event.pressed) {
350 // make ergodox-ez-drashna-custom-teensy
351 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 );
352 }
353 case 5:
354 if (record->event.pressed) {
355 //super secret hash
356 SEND_STRING("supersecrethash");
357 return MACRO_NONE;
358 }
359 case 6:
360 if (record->event.pressed) {
361 // Please sir, can I have some more salt
362 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 );
363 }
364 break;
365 case 7:
366 if (record->event.pressed) {
367 // DoomFisted
368 // Hey, look at me. I'm Doomfist, and I'm overpowered!
369 // All I do is spam punches all day! I'm DPS, tank and
370 // defense, rolled into one! All I need is team healing to be complete!
371 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 );
372 }
373 case 8: //MAC1 - Hold for rshift and } on tap
374 if (record->event.pressed) {
375 key_timer = timer_read();
376 return MACRO(D(LSFT), END );
377 } else {
378 return checktime() ? MACRO(U(LSFT),D(RALT),T(7),U(RALT),END): MACRO(U(LSFT),END);
379 }; break;
380 case 9: //MAC1 - Hold for rshift and } on tap
381 if (record->event.pressed) {
382 key_timer = timer_read();
383 return MACRO(D(RSFT), END );
384 } else {
385 return checktime() ? MACRO(U(RSFT),D(RALT),T(0),U(RALT),END): MACRO(U(RSFT),END);
386 }; break;
387 case 10: //MAC2 - Hold for lctrl and [ on tap
388 if (record->event.pressed) {
389 key_timer = timer_read();
390 return MACRO(D(LCTL), END );
391 } else {return checktime() ? MACRO(U(LCTL),D(RALT),T(8),U(RALT),END):MACRO(U(LCTL),END);
392 }; break;
393 case 11: //MAC3 - Hold for rctrl and ] on tap
394 if (record->event.pressed) {
395 key_timer = timer_read();
396 return MACRO(D(RCTL), END );
397 } else {
398 return checktime() ? MACRO(U(RCTL),D(RALT),T(9),U(RALT),END):MACRO(U(RCTL),END);
399 }; break;
400 }
401 return MACRO_NONE;
402};
403
404
405bool process_record_user(uint16_t keycode, keyrecord_t *record) {
406 switch (keycode) {
407 // dynamically generate these.
408 case EPRM:
409 if (record->event.pressed) {
410 eeconfig_init();
411 }
412 return false;
413 break;
414 case VRSN:
415 if (record->event.pressed) {
416 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
417 }
418 return false;
419 break;
420 case RGB_SLD:
421 if (record->event.pressed) {
422 rgblight_mode(1);
423 }
424 return false;
425 break;
426
427 case RGB_0000FF:
428 if (record->event.pressed) {
429 #ifdef RGBLIGHT_ENABLE
430 rgblight_enable();
431 rgblight_mode(1);
432 rgblight_setrgb(0x00,0x00,0xff);
433 #endif
434 }
435 return false;
436 break;
437
438 case RGB_008000:
439 if (record->event.pressed) {
440 #ifdef RGBLIGHT_ENABLE
441 rgblight_enable();
442 rgblight_mode(1);
443 rgblight_setrgb(0x00,0x80,0x00);
444 #endif
445 }
446 return false;
447 break;
448
449 case RGB_FF0000:
450 if (record->event.pressed) {
451 #ifdef RGBLIGHT_ENABLE
452 rgblight_enable();
453 rgblight_mode(1);
454 rgblight_setrgb(0xff,0x00,0x00);
455 #endif
456 }
457 return false;
458 break;
459
460 case RGB_800080:
461 if (record->event.pressed) {
462 #ifdef RGBLIGHT_ENABLE
463 rgblight_enable();
464 rgblight_mode(1);
465 rgblight_setrgb(0x80,0x00,0x80);
466 #endif
467 }
468 return false;
469 break;
470
471 case RGB_00FF90:
472 if (record->event.pressed) {
473 #ifdef RGBLIGHT_ENABLE
474 rgblight_enable();
475 rgblight_mode(1);
476 rgblight_setrgb(0x00,0xff,0x90);
477 #endif
478 }
479 return false;
480 break;
481 case KC_DIABLO_CLEAR:
482 if (record->event.pressed) {
483 uint8_t dtime;
484
485 for (dtime = 0; dtime < 4; dtime++) {
486 diablo_key_time[dtime] = diablo_times[0];
487 }
488 }
489 return false;
490 break;
491
492 }
493 return true;
494}
495
496void send_diablo_keystroke (uint8_t diablo_key) {
497 if (current_layer == DIABLO) {
498 switch (diablo_key) {
499 case 0:
500 SEND_STRING("1");
501 break;
502 case 1:
503 SEND_STRING("2");
504 break;
505 case 2:
506 SEND_STRING("3");
507 break;
508 case 3:
509 SEND_STRING("4");
510 break;
511 }
512 }
513}
514
515void run_diablo_macro_check(void) {
516 uint8_t dtime;
517
518 for (dtime = 0; dtime < 4; dtime++) {
519 if (check_dtimer(dtime) && diablo_key_time[dtime]) {
520 diablo_timer[dtime] = timer_read();
521 send_diablo_keystroke(dtime);
522 }
523 }
524
525}
526
527void matrix_init_user(void) { // Runs boot tasks for keyboard
528 wait_ms(500);
529 ergodox_board_led_on();
530 wait_ms(200);
531 ergodox_right_led_1_on();
532 wait_ms(200);
533 ergodox_right_led_2_on();
534 wait_ms(200);
535 ergodox_right_led_3_on();
536 wait_ms(200);
537 ergodox_board_led_off();
538 wait_ms(200);
539 ergodox_right_led_1_off();
540 wait_ms(200);
541 ergodox_right_led_2_off();
542 wait_ms(200);
543 ergodox_right_led_3_off();
544
545
546#ifdef LAYER_UNDERGLOW_LIGHTING
547 rgblight_enable();
548 rgblight_sethsv(195,255,255);
549 rgblight_mode(5);
550#endif
551 has_layer_changed = false;
552
553
554
555};
556
557
558
559void matrix_scan_user(void) { // runs frequently to update info
560 uint8_t modifiders = get_mods();
561 uint8_t layer = biton32(layer_state);
562
563 if (!skip_leds) {
564 ergodox_board_led_off();
565 ergodox_right_led_1_off();
566 ergodox_right_led_2_off();
567 ergodox_right_led_3_off();
568
569 if ( modifiders & MODS_SHIFT_MASK) {
570 ergodox_right_led_1_on();
571 }
572 if ( modifiders & MODS_CTRL_MASK) {
573 ergodox_right_led_2_on();
574 }
575 if ( modifiders & MODS_ALT_MASK) {
576 ergodox_right_led_3_on();
577 }
578
579 }
580
581 switch (layer) {
582 case SYMB:
583 #ifdef LAYER_UNDERGLOW_LIGHTING
584 if (has_layer_changed) {
585 rgblight_sethsv (240,255,255);
586 }
587 #else
588 ergodox_right_led_3_on();
589 #endif
590 break;
591 case OVERWATCH:
592 #ifdef LAYER_UNDERGLOW_LIGHTING
593 if (has_layer_changed) {
594 rgblight_sethsv (30,255,255);
595 }
596 #else
597 ergodox_right_led_2_on();
598 #endif
599 break;
600 case DIABLO:
601 #ifdef LAYER_UNDERGLOW_LIGHTING
602 if (has_layer_changed) {
603 rgblight_sethsv (0,255,255);
604 }
605 #else
606 ergodox_right_led_1_on();
607 #endif
608 break;
609 case MOUS:
610 #ifdef LAYER_UNDERGLOW_LIGHTING
611 if (has_layer_changed) {
612 rgblight_sethsv (60,255,255);
613 }
614 #else
615 ergodox_right_led_3_on();
616 ergodox_right_led_2_on();
617 #endif
618 break;
619 case 5:
620 #ifdef LAYER_UNDERGLOW_LIGHTING
621 if (has_layer_changed) {
622 rgblight_sethsv (255,255,255);
623 }
624 #else
625 ergodox_right_led_1_on();
626 ergodox_right_led_3_on();
627 #endif
628 break;
629 case 6:
630 #ifdef LAYER_UNDERGLOW_LIGHTING
631 if (has_layer_changed) {
632 rgblight_sethsv (255,255,255);
633 }
634 #else
635 ergodox_right_led_2_on();
636 ergodox_right_led_1_on();
637 #endif
638 break;
639 case 7:
640 #ifdef LAYER_UNDERGLOW_LIGHTING
641 if (has_layer_changed) {
642 rgblight_sethsv (255,255,255);
643 }
644 #else
645 ergodox_right_led_1_on();
646 ergodox_right_led_2_on();
647 ergodox_right_led_3_on();
648 #endif
649 break;
650 default:
651 // Do not add anything here, as this will be ran EVERY check, and can cause a significant slowdown
652 #ifdef LAYER_UNDERGLOW_LIGHTING
653 if (has_layer_changed) {
654 rgblight_sethsv (195,255,255);
655 }
656 #endif
657 break;
658 }
659
660 if (current_layer == layer) {
661 has_layer_changed = false;
662 } else {
663 has_layer_changed = true;
664 current_layer = layer;
665 }
666 run_diablo_macro_check();
667};
668
669