aboutsummaryrefslogtreecommitdiff
path: root/users/drashna
diff options
context:
space:
mode:
authorDrashna Jaelre <drashna@live.com>2018-12-04 13:27:41 -0800
committerMechMerlin <30334081+mechmerlin@users.noreply.github.com>2018-12-04 13:27:41 -0800
commit6d0dc910d92bc381d3cce9ea712aa47ae40ddf15 (patch)
treea1490c040ca730cdf43fb7f52422391998590597 /users/drashna
parent106de349fb6410d0deb706ecb68ae1e78a4ef2db (diff)
downloadqmk_firmware-6d0dc910d92bc381d3cce9ea712aa47ae40ddf15.tar.gz
qmk_firmware-6d0dc910d92bc381d3cce9ea712aa47ae40ddf15.zip
Rework drashna userspace to be more modular (#4544)
* Break up files to make more readable * Add comments to ortho 4x12 layout rules.mk * Small tweaks * Update GitLab CI scripts * Make ortho boards smaller
Diffstat (limited to 'users/drashna')
-rw-r--r--users/drashna/.gitlab-ci.yml2
-rw-r--r--users/drashna/config.h4
-rw-r--r--users/drashna/drashna.c271
-rw-r--r--users/drashna/drashna.h301
-rw-r--r--users/drashna/process_records.c175
-rw-r--r--users/drashna/process_records.h101
-rw-r--r--users/drashna/rgb_stuff.h6
-rw-r--r--users/drashna/rules.mk3
-rw-r--r--users/drashna/tap_dances.c1
-rw-r--r--users/drashna/tap_dances.h12
-rw-r--r--users/drashna/wrappers.h170
11 files changed, 522 insertions, 524 deletions
diff --git a/users/drashna/.gitlab-ci.yml b/users/drashna/.gitlab-ci.yml
index 3c95ad850..bd693babc 100644
--- a/users/drashna/.gitlab-ci.yml
+++ b/users/drashna/.gitlab-ci.yml
@@ -13,7 +13,7 @@ qmk_firmware:
13 - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util diffutils gcc gcc-arm-none-eabi gcc-avr git libnewlib-arm-none-eabi unzip wget zip 13 - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util diffutils gcc gcc-arm-none-eabi gcc-avr git libnewlib-arm-none-eabi unzip wget zip
14 - avr-gcc --version 14 - avr-gcc --version
15 script: 15 script:
16 - make iris/rev2:drashna iris/rev2:drashna_old ergodox_ez:drashna viterbi/rev1:drashna orthodox/rev1:drashna orthodox/rev3:drashna crkbd:drashna planck/light:drashna 16 - make iris/rev2:drashna:production iris/rev2:drashna_old:production ergodox_ez:drashna ergodox_ez:drashna_glow viterbi/rev1:drashna:production orthodox/rev1:drashna:production orthodox/rev3:drashna:production crkbd:drashna:production planck/light:drashna:production
17 artifacts: 17 artifacts:
18 name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG" 18 name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
19 paths: 19 paths:
diff --git a/users/drashna/config.h b/users/drashna/config.h
index 06cae86ab..a33851230 100644
--- a/users/drashna/config.h
+++ b/users/drashna/config.h
@@ -3,7 +3,7 @@
3 3
4#ifdef AUDIO_ENABLE 4#ifdef AUDIO_ENABLE
5#define AUDIO_CLICKY 5#define AUDIO_CLICKY
6#define STARTUP_SONG SONG(E1M1_DOOM) 6#define STARTUP_SONG SONG(RICK_ROLL)
7#define GOODBYE_SONG SONG(SONIC_RING) 7#define GOODBYE_SONG SONG(SONIC_RING)
8#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ 8#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
9 SONG(COLEMAK_SOUND), \ 9 SONG(COLEMAK_SOUND), \
@@ -44,7 +44,7 @@
44// and when this option isn't enabled, z rapidly followed by x 44// and when this option isn't enabled, z rapidly followed by x
45// actually sends Ctrl-x. That's bad.) 45// actually sends Ctrl-x. That's bad.)
46#define IGNORE_MOD_TAP_INTERRUPT 46#define IGNORE_MOD_TAP_INTERRUPT
47#define PERMISSIVE_HOLD 47#undef PERMISSIVE_HOLD
48//#define TAPPING_FORCE_HOLD 48//#define TAPPING_FORCE_HOLD
49//#define RETRO_TAPPING 49//#define RETRO_TAPPING
50 50
diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c
index 8f10a530e..222824837 100644
--- a/users/drashna/drashna.c
+++ b/users/drashna/drashna.c
@@ -16,8 +16,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/ 16*/
17 17
18#include "drashna.h" 18#include "drashna.h"
19#include "tap_dances.h"
20#include "rgb_stuff.h"
21 19
22userspace_config_t userspace_config; 20userspace_config_t userspace_config;
23#if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)) 21#if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE))
@@ -27,9 +25,6 @@ userspace_config_t userspace_config;
27 #define DRASHNA_UNICODE_MODE 2 25 #define DRASHNA_UNICODE_MODE 2
28#endif 26#endif
29 27
30uint16_t copy_paste_timer;
31// Helper Functions
32
33 28
34// This block is for all of the gaming macros, as they were all doing 29// This block is for all of the gaming macros, as they were all doing
35// the same thing, but with differring text sent. 30// the same thing, but with differring text sent.
@@ -109,55 +104,9 @@ void bootmagic_lite(void) {
109__attribute__ ((weak)) 104__attribute__ ((weak))
110void matrix_init_keymap(void) {} 105void matrix_init_keymap(void) {}
111 106
112__attribute__ ((weak))
113void startup_keymap(void) {}
114
115__attribute__ ((weak))
116void shutdown_keymap(void) {}
117
118__attribute__ ((weak))
119void suspend_power_down_keymap(void) {}
120
121__attribute__ ((weak))
122void suspend_wakeup_init_keymap(void) {}
123
124__attribute__ ((weak))
125void matrix_scan_keymap(void) {}
126
127__attribute__ ((weak))
128bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
129 return true;
130}
131
132__attribute__ ((weak))
133bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
134 return true;
135}
136
137
138__attribute__ ((weak))
139uint32_t layer_state_set_keymap (uint32_t state) {
140 return state;
141}
142
143__attribute__ ((weak))
144uint32_t default_layer_state_set_keymap (uint32_t state) {
145 return state;
146}
147
148__attribute__ ((weak))
149void led_set_keymap(uint8_t usb_led) {}
150
151__attribute__ ((weak))
152void eeconfig_init_keymap(void) {}
153
154// Call user matrix init, set default RGB colors and then 107// Call user matrix init, set default RGB colors and then
155// call the keymap's init function 108// call the keymap's init function
156void matrix_init_user(void) { 109void matrix_init_user(void) {
157 #if !defined(BOOTMAGIC_LITE) && !defined(BOOTMAGIC_ENABLE)
158 bootmagic_lite();
159 #endif
160
161 userspace_config.raw = eeconfig_read_user(); 110 userspace_config.raw = eeconfig_read_user();
162 111
163 #ifdef BOOTLOADER_CATERINA 112 #ifdef BOOTLOADER_CATERINA
@@ -178,40 +127,42 @@ void matrix_init_user(void) {
178 #endif //RGBLIGHT_ENABLE 127 #endif //RGBLIGHT_ENABLE
179} 128}
180 129
181void startup_user (void) { 130
182 // #ifdef RGBLIGHT_ENABLE 131__attribute__ ((weak))
183 // matrix_init_rgb(); 132void shutdown_keymap(void) {}
184 // #endif //RGBLIGHT_ENABLE
185 startup_keymap();
186}
187 133
188void shutdown_user (void) { 134void shutdown_user (void) {
189#ifdef RGBLIGHT_ENABLE 135 #ifdef RGBLIGHT_ENABLE
190 rgblight_enable_noeeprom(); 136 rgblight_enable_noeeprom();
191 rgblight_mode_noeeprom(1); 137 rgblight_mode_noeeprom(1);
192 rgblight_setrgb_red(); 138 rgblight_setrgb_red();
193#endif // RGBLIGHT_ENABLE 139 #endif // RGBLIGHT_ENABLE
194#ifdef RGB_MATRIX_ENABLE 140 #ifdef RGB_MATRIX_ENABLE
195 rgb_led led; 141 uint16_t timer_start = timer_read();
196 for (int i = 0; i < DRIVER_LED_TOTAL; i++) { 142 rgb_matrix_set_color_all( 0xFF, 0x00, 0x00 );
197 led = g_rgb_leds[i]; 143 while(timer_elapsed(timer_start) < 250) { wait_ms(1); }
198 if (led.matrix_co.raw < 0xFF) { 144 #endif //RGB_MATRIX_ENABLE
199 rgb_matrix_set_color( i, 0xFF, 0x00, 0x00 );
200 }
201 }
202#endif //RGB_MATRIX_ENABLE
203 shutdown_keymap(); 145 shutdown_keymap();
204} 146}
205 147
148__attribute__ ((weak))
149void suspend_power_down_keymap(void) {}
150
206void suspend_power_down_user(void) { 151void suspend_power_down_user(void) {
207 suspend_power_down_keymap(); 152 suspend_power_down_keymap();
208} 153}
209 154
155__attribute__ ((weak))
156void suspend_wakeup_init_keymap(void) {}
157
210void suspend_wakeup_init_user(void) { 158void suspend_wakeup_init_user(void) {
211 suspend_wakeup_init_keymap(); 159 suspend_wakeup_init_keymap();
212} 160}
213 161
214 162
163__attribute__ ((weak))
164void matrix_scan_keymap(void) {}
165
215// No global matrix scan code, so just run keymap's matrix 166// No global matrix scan code, so just run keymap's matrix
216// scan function 167// scan function
217void matrix_scan_user(void) { 168void matrix_scan_user(void) {
@@ -233,172 +184,11 @@ void matrix_scan_user(void) {
233} 184}
234 185
235 186
236 187__attribute__ ((weak))
237 188uint32_t layer_state_set_keymap (uint32_t state) {
238// Defines actions tor my global custom keycodes. Defined in drashna.h file 189 return state;
239// Then runs the _keymap's record handier if not processed here
240bool process_record_user(uint16_t keycode, keyrecord_t *record) {
241
242 // If console is enabled, it will print the matrix position and status of each key pressed
243#ifdef KEYLOGGER_ENABLE
244 #if defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_iris_rev2)
245 xprintf("KL: col: %u, row: %u, pressed: %u\n", record->event.key.row, record->event.key.col, record->event.pressed);
246 #else
247 xprintf("KL: col: %u, row: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed);
248 #endif
249#endif //KEYLOGGER_ENABLE
250
251 switch (keycode) {
252 case KC_QWERTY:
253 if (record->event.pressed) {
254 set_single_persistent_default_layer(_QWERTY);
255 }
256 break;
257 case KC_COLEMAK:
258 if (record->event.pressed) {
259 set_single_persistent_default_layer(_COLEMAK);
260 }
261 break;
262 case KC_DVORAK:
263 if (record->event.pressed) {
264 set_single_persistent_default_layer(_DVORAK);
265 }
266 break;
267 case KC_WORKMAN:
268 if (record->event.pressed) {
269 set_single_persistent_default_layer(_WORKMAN);
270 }
271 break;
272
273
274 case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader
275 if (!record->event.pressed) {
276 uint8_t temp_mod = get_mods();
277 uint8_t temp_osm = get_oneshot_mods();
278 clear_mods(); clear_oneshot_mods();
279 send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), 10);
280 if (temp_mod & MODS_SHIFT_MASK || temp_osm & MODS_SHIFT_MASK) {
281 #if defined(__ARM__)
282 send_string_with_delay_P(PSTR(":dfu-util"), 10);
283 #elif defined(BOOTLOADER_DFU)
284 send_string_with_delay_P(PSTR(":dfu"), 10);
285 #elif defined(BOOTLOADER_HALFKAY)
286 send_string_with_delay_P(PSTR(":teensy"), 10);
287 #elif defined(BOOTLOADER_CATERINA)
288 send_string_with_delay_P(PSTR(":avrdude"), 10);
289 #endif // bootloader options
290 }
291 #if defined(KEYBOARD_viterbi)
292 send_string_with_delay_P(PSTR(":dfu"), 10);
293 #endif
294 if (temp_mod & MODS_CTRL_MASK || temp_osm & MODS_CTRL_MASK) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), 10); }
295 send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10);
296 set_mods(temp_mod);
297 }
298 break;
299
300 case VRSN: // Prints firmware version
301 if (record->event.pressed) {
302 send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), MACRO_TIMER);
303 }
304 break;
305
306// These are a serious of gaming macros.
307// Only enables for the viterbi, basically,
308// to save on firmware space, since it's limited.
309#ifdef MACROS_ENABLED
310 case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros
311 if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeconfig_update_user(userspace_config.raw); }
312#ifdef RGBLIGHT_ENABLE
313 userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18);
314#endif //RGBLIGHT_ENABLE
315 break;
316 case KC_SALT:
317 return send_game_macro("Salt, salt, salt...", record, false);
318 case KC_MORESALT:
319 return send_game_macro("Please sir, can I have some more salt?!", record, false);
320 case KC_SALTHARD:
321 return send_game_macro("Your salt only makes me harder, and even more aggressive!", record, false);
322 case KC_GOODGAME:
323 return send_game_macro("Good game, everyone!", record, false);
324 case KC_GLHF:
325 return send_game_macro("Good luck, have fun!!!", record, false);
326 case KC_SYMM:
327 return send_game_macro("Left click to win!", record, false);
328 case KC_JUSTGAME:
329 return send_game_macro("It may be a game, but if you don't want to actually try, please go play AI, so that people that actually want to take the game seriously and \"get good\" have a place to do so without trolls like you throwing games.", record, false);
330 case KC_TORB:
331 return send_game_macro("That was positively riveting!", record, false);
332 case KC_AIM:
333 send_game_macro("That aim is absolutely amazing. It's almost like you're a machine!", record, true);
334 return send_game_macro("Wait! That aim is TOO good! You're clearly using an aim hack! CHEATER!", record, false);
335 case KC_C9:
336 return send_game_macro("OMG!!! C9!!!", record, false);
337 case KC_GGEZ:
338 return send_game_macro("That was a fantastic game, though it was a bit easy. Try harder next time!", record, false);
339#endif // MACROS_ENABLED
340
341
342 case KC_DIABLO_CLEAR: // reset all Diablo timers, disabling them
343#ifdef TAP_DANCE_ENABLE
344 if (record->event.pressed) {
345 uint8_t dtime;
346 for (dtime = 0; dtime < 4; dtime++) {
347 diablo_key_time[dtime] = diablo_times[0];
348 }
349 }
350#endif // TAP_DANCE_ENABLE
351 break;
352
353
354 case KC_CCCV: // One key copy/paste
355 if(record->event.pressed){
356 copy_paste_timer = timer_read();
357 } else {
358 if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
359 register_code(KC_LCTL);
360 tap_code(KC_C);
361 unregister_code(KC_LCTL);
362 } else { // Tap, paste
363 register_code(KC_LCTL);
364 tap_code(KC_V);
365 unregister_code(KC_LCTL);
366 }
367 }
368 break;
369#ifdef UNICODE_ENABLE
370 case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻
371 if (record->event.pressed) {
372 send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B");
373 }
374 break;
375 case UC_TABL: // ┬─┬ノ( º _ ºノ)
376 if (record->event.pressed) {
377 send_unicode_hex_string("252C 2500 252C 30CE 0028 0020 00BA 0020 005F 0020 00BA 30CE 0029");
378 }
379 break;
380 case UC_SHRG: // ¯\_(ツ)_/¯
381 if (record->event.pressed) {
382 send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF");
383 }
384 break;
385 case UC_DISA: // ಠ_ಠ
386 if (record->event.pressed) {
387 send_unicode_hex_string("0CA0 005F 0CA0");
388 }
389 break;
390#endif
391 }
392 return process_record_keymap(keycode, record) &&
393#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
394 process_record_user_rgb(keycode, record) &&
395#endif // RGBLIGHT_ENABLE
396 process_record_secrets(keycode, record);
397} 190}
398 191
399
400
401// Runs state check and changes underglow color and animation
402// on layer change, no matter where the change was initiated 192// on layer change, no matter where the change was initiated
403// Then runs keymap's layer change check 193// Then runs keymap's layer change check
404uint32_t layer_state_set_user(uint32_t state) { 194uint32_t layer_state_set_user(uint32_t state) {
@@ -410,6 +200,12 @@ uint32_t layer_state_set_user(uint32_t state) {
410} 200}
411 201
412 202
203__attribute__ ((weak))
204uint32_t default_layer_state_set_keymap (uint32_t state) {
205 return state;
206}
207
208// Runs state check and changes underglow color and animation
413uint32_t default_layer_state_set_user(uint32_t state) { 209uint32_t default_layer_state_set_user(uint32_t state) {
414 state = default_layer_state_set_keymap(state); 210 state = default_layer_state_set_keymap(state);
415#ifdef RGBLIGHT_ENABLE 211#ifdef RGBLIGHT_ENABLE
@@ -418,6 +214,8 @@ uint32_t default_layer_state_set_user(uint32_t state) {
418 return state; 214 return state;
419} 215}
420 216
217__attribute__ ((weak))
218void led_set_keymap(uint8_t usb_led) {}
421 219
422// Any custom LED code goes here. 220// Any custom LED code goes here.
423// So far, I only have keyboard specific code, 221// So far, I only have keyboard specific code,
@@ -426,6 +224,9 @@ void led_set_user(uint8_t usb_led) {
426 led_set_keymap(usb_led); 224 led_set_keymap(usb_led);
427} 225}
428 226
227__attribute__ ((weak))
228void eeconfig_init_keymap(void) {}
229
429void eeconfig_init_user(void) { 230void eeconfig_init_user(void) {
430 userspace_config.raw = 0; 231 userspace_config.raw = 0;
431 userspace_config.rgb_layer_change = true; 232 userspace_config.rgb_layer_change = true;
diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h
index 06e726714..0a3d0f632 100644
--- a/users/drashna/drashna.h
+++ b/users/drashna/drashna.h
@@ -19,9 +19,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
19#include "quantum.h" 19#include "quantum.h"
20#include "version.h" 20#include "version.h"
21#include "eeprom.h" 21#include "eeprom.h"
22 22#include "wrappers.h"
23#ifdef RGB_MATRIX_ENABLE 23#include "process_records.h"
24#include "rgb_matrix.h" 24#ifdef TAP_DANCE_ENABLE
25 #include "tap_dances.h"
26#endif // TAP_DANCE_ENABLE
27#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
28 #include "rgb_stuff.h"
25#endif 29#endif
26 30
27 31
@@ -51,17 +55,19 @@ define modifiers here, since MOD_* doesn't seem to work for these
51#define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)) 55#define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
52 56
53 57
54/*
55RGB color codes are no longer located here anymore. Instead, you will want to
56head to https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h
57*/
58
59#ifdef RGBLIGHT_ENABLE
60void rgblight_sethsv_default_helper(uint8_t index);
61#endif // RGBLIGHT_ENABLE
62 58
63bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed); 59bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed);
64bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer); 60bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer);
61bool send_game_macro(const char *str, keyrecord_t *record, bool override);
62void matrix_init_keymap(void);
63void shutdown_keymap(void);
64void suspend_power_down_keymap(void);
65void suspend_wakeup_init_keymap(void);
66void matrix_scan_keymap(void);
67uint32_t layer_state_set_keymap (uint32_t state);
68uint32_t default_layer_state_set_keymap (uint32_t state);
69void led_set_keymap(uint8_t usb_led);
70void eeconfig_init_keymap(void);
65 71
66typedef union { 72typedef union {
67 uint32_t raw; 73 uint32_t raw;
@@ -75,110 +81,6 @@ typedef union {
75 81
76extern userspace_config_t userspace_config; 82extern userspace_config_t userspace_config;
77 83
78#if defined(KEYMAP_SAFE_RANGE)
79 #define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE
80#else
81 #define PLACEHOLDER_SAFE_RANGE SAFE_RANGE
82#endif
83
84enum userspace_custom_keycodes {
85 VRSN = PLACEHOLDER_SAFE_RANGE, // Prints QMK Firmware and board info
86 KC_QWERTY, // Sets default layer to QWERTY
87 KC_COLEMAK, // Sets default layer to COLEMAK
88 KC_DVORAK, // Sets default layer to DVORAK
89 KC_WORKMAN, // Sets default layer to WORKMAN
90 KC_DIABLO_CLEAR, // Clears all Diablo Timers
91 KC_OVERWATCH, // Toggles game macro input mode (so in OW, it defaults to game chat)
92 KC_SALT, // See drashna.c for details
93 KC_MORESALT,
94 KC_SALTHARD,
95 KC_GOODGAME,
96 KC_SYMM,
97 KC_JUSTGAME,
98 KC_GLHF,
99 KC_TORB,
100 KC_AIM,
101 KC_C9,
102 KC_GGEZ,
103 KC_MAKE, // Run keyboard's customized make command
104 KC_RGB_T, // Toggles RGB Layer Indication mode
105 KC_SECRET_1, // test1
106 KC_SECRET_2, // test2
107 KC_SECRET_3, // test3
108 KC_SECRET_4, // test4
109 KC_SECRET_5, // test5
110 KC_CCCV, // Hold to copy, tap to paste
111 KC_NUKE, // NUCLEAR LAUNCH DETECTED!!!
112 UC_FLIP, // (ಠ痊ಠ)┻━┻
113 UC_TABL, // ┬─┬ノ( º _ ºノ)
114 UC_SHRG, // ¯\_(ツ)_/¯
115 UC_DISA, // ಠ_ಠ
116 NEW_SAFE_RANGE //use "NEWPLACEHOLDER for keymap specific codes
117};
118
119
120#define LOWER MO(_LOWER)
121#define RAISE MO(_RAISE)
122#define ADJUST MO(_ADJUST)
123#define TG_MODS TG(_MODS)
124#define TG_GAME TG(_GAMEPAD)
125
126#define KC_SEC1 KC_SECRET_1
127#define KC_SEC2 KC_SECRET_2
128#define KC_SEC3 KC_SECRET_3
129#define KC_SEC4 KC_SECRET_4
130#define KC_SEC5 KC_SECRET_5
131
132#define QWERTY KC_QWERTY
133#define DVORAK KC_DVORAK
134#define COLEMAK KC_COLEMAK
135#define WORKMAN KC_WORKMAN
136
137#define KC_RESET RESET
138#define KC_RST KC_RESET
139
140#ifdef SWAP_HANDS_ENABLE
141#define KC_C1R3 SH_TT
142#else // SWAP_HANDS_ENABLE
143#define KC_C1R3 KC_BSPC
144#endif // SWAP_HANDS_ENABLE
145
146#define BK_LWER LT(_LOWER, KC_BSPC)
147#define SP_LWER LT(_LOWER, KC_SPC)
148#define DL_RAIS LT(_RAISE, KC_DEL)
149#define ET_RAIS LT(_RAISE, KC_ENTER)
150
151/* OSM keycodes, to keep things clean and easy to change */
152#define KC_MLSF OSM(MOD_LSFT)
153#define KC_MRSF OSM(MOD_RSFT)
154
155#define OS_LGUI OSM(MOD_LGUI)
156#define OS_RGUI OSM(MOD_RGUI)
157#define OS_LSFT OSM(MOD_LSFT)
158#define OS_RSFT OSM(MOD_RSFT)
159#define OS_LCTL OSM(MOD_LCTL)
160#define OS_RCTL OSM(MOD_RCTL)
161#define OS_LALT OSM(MOD_LALT)
162#define OS_RALT OSM(MOD_RALT)
163#define OS_MEH OSM(MOD_MEH)
164#define OS_HYPR OSM(MOD_HYPR)
165
166#define ALT_APP ALT_T(KC_APP)
167
168#define MG_NKRO MAGIC_TOGGLE_NKRO
169
170#define UC_IRNY UC(0x2E2E)
171#define UC_CLUE UC(0x203D)
172
173#ifdef TAP_DANCE_ENABLE
174enum {
175 TD_D3_1 = 0,
176 TD_D3_2,
177 TD_D3_3,
178 TD_D3_4
179};
180#endif // TAP_DANCE_ENABLE
181
182 84
183/* 85/*
184Custom Keycodes for Diablo 3 layer 86Custom Keycodes for Diablo 3 layer
@@ -196,172 +98,3 @@ We use custom codes here, so we can substitute the right stuff
196#define KC_D3_3 KC_3 98#define KC_D3_3 KC_3
197#define KC_D3_4 KC_4 99#define KC_D3_4 KC_4
198#endif // TAP_DANCE_ENABLE 100#endif // TAP_DANCE_ENABLE
199
200/*
201Since our quirky block definitions are basically a list of comma separated
202arguments, we need a wrapper in order for these definitions to be
203expanded before being used as arguments to the LAYOUT_xxx macro.
204*/
205#if (!defined(LAYOUT) && defined(KEYMAP))
206#define LAYOUT KEYMAP
207#endif
208
209#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)
210#define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
211#define KEYMAP_wrapper(...) LAYOUT(__VA_ARGS__)
212#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
213#define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
214
215/*
216Blocks for each of the four major keyboard layouts
217Organized so we can quickly adapt and modify all of them
218at once, rather than for each keyboard, one at a time.
219And this allows for much cleaner blocks in the keymaps.
220For instance Tap/Hold for Control on all of the layouts
221
222NOTE: These are all the same length. If you do a search/replace
223 then you need to add/remove underscores to keep the
224 lengths consistent.
225*/
226
227#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
228#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
229#define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
230
231#define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
232#define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
233#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH
234
235
236#define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G
237#define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D
238#define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B
239
240#define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
241#define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O
242#define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLASH
243
244#define ______________COLEMAK_MOD_DH_L1____________ KC_Q, KC_W, KC_F, KC_P, KC_B
245#define ______________COLEMAK_MOD_DH_L2____________ KC_A, KC_R, KC_S, KC_T, KC_G
246#define ______________COLEMAK_MOD_DH_L3____________ KC_Z, KC_X, KC_C, KC_D, KC_V
247
248#define ______________COLEMAK_MOD_DH_R1____________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
249#define ______________COLEMAK_MOD_DH_R2____________ KC_M, KC_N, KC_E, KC_I, KC_O
250#define ______________COLEMAK_MOD_DH_R3____________ KC_K, KC_H, KC_COMM, KC_DOT, KC_SLASH
251
252
253#define _________________DVORAK_L1_________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
254#define _________________DVORAK_L2_________________ KC_A, KC_O, KC_E, KC_U, KC_I
255#define _________________DVORAK_L3_________________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X
256
257#define _________________DVORAK_R1_________________ KC_F, KC_G, KC_C, KC_R, KC_L
258#define _________________DVORAK_R2_________________ KC_D, KC_H, KC_T, KC_N, KC_S
259#define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, KC_Z
260
261
262#define ________________DVORAK_AU_L1_______________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
263#define ________________DVORAK_AU_L2_______________ KC_O, KC_A, KC_E, KC_I, KC_U
264#define ________________DVORAK_AU_L3_______________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X
265
266#define ________________DVORAK_AU_R1_______________ KC_F, KC_G, KC_C, KC_R, KC_L
267#define ________________DVORAK_AU_R2_______________ KC_D, KC_H, KC_T, KC_N, KC_S
268#define ________________DVORAK_AU_R3_______________ KC_B, KC_M, KC_W, KC_V, KC_Z
269
270#define _________________WORKMAN_L1________________ KC_Q, KC_D, KC_R, KC_W, KC_B
271#define _________________WORKMAN_L2________________ KC_A, KC_S, KC_H, KC_T, KC_G
272#define _________________WORKMAN_L3________________ KC_Z, KC_X, KC_M, KC_C, KC_V
273
274#define _________________WORKMAN_R1________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN
275#define _________________WORKMAN_R2________________ KC_Y, KC_N, KC_E, KC_O, KC_I
276#define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLASH
277
278
279#define _________________NORMAN_L1_________________ KC_Q, KC_W, KC_D, KC_F, KC_K
280#define _________________NORMAN_L2_________________ KC_A, KC_S, KC_E, KC_T, KC_G
281#define _________________NORMAN_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
282
283#define _________________NORMAN_R1_________________ KC_J, KC_U, KC_R, KC_L, KC_SCLN
284#define _________________NORMAN_R2_________________ KC_Y, KC_N, KC_I, KC_O, KC_U
285#define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, KC_SLASH
286
287
288#define _________________MALTRON_L1________________ KC_Q, KC_P, KC_Y, KC_C, KC_B
289#define _________________MALTRON_L2________________ KC_A, KC_N, KC_I, KC_S, KC_F
290#define _________________MALTRON_L3________________ KC_SCLN, KC_SLSH, KC_J KC_G, KC_COMM
291
292#define _________________MALTRON_R1________________ KC_V, KC_M, KC_U, KC_Z, KC_L
293#define _________________MALTRON_R2________________ KC_D, KC_T, KC_D, KC_O, KC_R
294#define _________________MALTRON_R3________________ KC_DOT, KC_W, KC_K, KC_MINS, KC_X
295
296
297#define _________________EUCALYN_L1________________ KC_SLSH, KC_COMM, KC_DOT, KC_F, KC_Q
298#define _________________EUCALYN_L2________________ KC_A, KC_O, KC_E, KC_I, KC_U
299#define _________________EUCALYN_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_W
300
301#define _________________EUCALYN_R1________________ KC_M, KC_R, KC_D, KC_Y, KC_P
302#define _________________EUCALYN_R2________________ KC_G, KC_T, KC_K, KC_S, KC_N
303#define _________________EUCALYN_R3________________ KC_B, KC_H, KC_J, KC_L, KC_SCLN
304
305
306#define _____________CARPLAX_QFMLWY_L1_____________ KC_Q, KC_F, KC_M, KC_L, KC_W
307#define _____________CARPLAX_QFMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
308#define _____________CARPLAX_QFMLWY_L3_____________ KC_Z, KC_V, KC_G, KC_C, KC_X
309
310#define _____________CARPLAX_QFMLWY_R1_____________ KC_Y, KC_U, KC_O, KC_B, KC_J
311#define _____________CARPLAX_QFMLWY_R2_____________ KC_I, KC_A, KC_E, KC_H, KC_SCLN
312#define _____________CARPLAX_QFMLWY_R3_____________ KC_P, KC_K, KC_COMM, KC_DOT, KC_SLSH
313
314
315#define _____________CARPLAX_QGMLWB_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W
316#define _____________CARPLAX_QGMLWB_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
317#define _____________CARPLAX_QGMLWB_L3_____________ KC_Z, KC_X, KC_C, KC_F, KC_J
318
319#define _____________CARPLAX_QGMLWB_R1_____________ KC_B, KC_Y, KC_U, KC_V, KC_SCLN
320#define _____________CARPLAX_QGMLWB_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H
321#define _____________CARPLAX_QGMLWB_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH
322
323
324#define _____________CARPLAX_QGMLWY_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W
325#define _____________CARPLAX_QGMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
326#define _____________CARPLAX_QGMLWY_L3_____________ KC_Z, KC_X, KC_C, KC_V, KC_J
327
328#define _____________CARPLAX_QGMLWY_R1_____________ KC_Y, KC_F, KC_U, KC_B, KC_SCLN
329#define _____________CARPLAX_QGMLWY_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H
330#define _____________CARPLAX_QGMLWY_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH
331
332
333#define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5
334#define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0
335#define _________________FUNC_LEFT_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
336#define _________________FUNC_RIGHT________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
337
338#define ___________________BLANK___________________ _______, _______, _______, _______, _______
339
340
341#define _________________LOWER_L1__________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
342#define _________________LOWER_L2__________________ _________________FUNC_LEFT_________________
343#define _________________LOWER_L3__________________ _________________FUNC_RIGHT________________
344
345#define _________________LOWER_R1__________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
346#define _________________LOWER_R2__________________ _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR
347#define _________________LOWER_R3__________________ _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
348
349
350
351#define _________________RAISE_L1__________________ ________________NUMBER_LEFT________________
352#define _________________RAISE_L2__________________ ___________________BLANK___________________
353#define _________________RAISE_L3__________________ ___________________BLANK___________________
354
355#define _________________RAISE_R1__________________ ________________NUMBER_RIGHT_______________
356#define _________________RAISE_R2__________________ _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC
357#define _________________RAISE_R3__________________ _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
358
359
360
361#define _________________ADJUST_L1_________________ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
362#define _________________ADJUST_L2_________________ MU_TOG , CK_TOGG, AU_ON, AU_OFF, AG_NORM
363#define _________________ADJUST_L3_________________ RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T
364
365#define _________________ADJUST_R1_________________ KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5
366#define _________________ADJUST_R2_________________ AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN
367#define _________________ADJUST_R3_________________ MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT
diff --git a/users/drashna/process_records.c b/users/drashna/process_records.c
new file mode 100644
index 000000000..5e311e60e
--- /dev/null
+++ b/users/drashna/process_records.c
@@ -0,0 +1,175 @@
1#include "drashna.h"
2
3uint16_t copy_paste_timer;
4
5__attribute__ ((weak))
6bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
7 return true;
8}
9
10__attribute__ ((weak))
11bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
12 return true;
13}
14
15
16// Defines actions tor my global custom keycodes. Defined in drashna.h file
17// Then runs the _keymap's record handier if not processed here
18bool process_record_user(uint16_t keycode, keyrecord_t *record) {
19
20 // If console is enabled, it will print the matrix position and status of each key pressed
21#ifdef KEYLOGGER_ENABLE
22 #if defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_iris_rev2)
23 xprintf("KL: col: %u, row: %u, pressed: %u\n", record->event.key.row, record->event.key.col, record->event.pressed);
24 #else
25 xprintf("KL: col: %u, row: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed);
26 #endif
27#endif //KEYLOGGER_ENABLE
28
29 switch (keycode) {
30 case KC_QWERTY:
31 if (record->event.pressed) {
32 set_single_persistent_default_layer(_QWERTY);
33 }
34 break;
35 case KC_COLEMAK:
36 if (record->event.pressed) {
37 set_single_persistent_default_layer(_COLEMAK);
38 }
39 break;
40 case KC_DVORAK:
41 if (record->event.pressed) {
42 set_single_persistent_default_layer(_DVORAK);
43 }
44 break;
45 case KC_WORKMAN:
46 if (record->event.pressed) {
47 set_single_persistent_default_layer(_WORKMAN);
48 }
49 break;
50
51
52 case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader
53 if (!record->event.pressed) {
54 uint8_t temp_mod = get_mods();
55 uint8_t temp_osm = get_oneshot_mods();
56 clear_mods(); clear_oneshot_mods();
57 send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), 10);
58 if (temp_mod & MODS_SHIFT_MASK || temp_osm & MODS_SHIFT_MASK) {
59 #if defined(__ARM__)
60 send_string_with_delay_P(PSTR(":dfu-util"), 10);
61 #elif defined(BOOTLOADER_DFU)
62 send_string_with_delay_P(PSTR(":dfu"), 10);
63 #elif defined(BOOTLOADER_HALFKAY)
64 send_string_with_delay_P(PSTR(":teensy"), 10);
65 #elif defined(BOOTLOADER_CATERINA)
66 send_string_with_delay_P(PSTR(":avrdude"), 10);
67 #endif // bootloader options
68 }
69 #if defined(KEYBOARD_viterbi)
70 send_string_with_delay_P(PSTR(":dfu"), 10);
71 #endif
72 if (temp_mod & MODS_CTRL_MASK || temp_osm & MODS_CTRL_MASK) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), 10); }
73 send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10);
74 set_mods(temp_mod);
75 }
76 break;
77
78 case VRSN: // Prints firmware version
79 if (record->event.pressed) {
80 send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), MACRO_TIMER);
81 }
82 break;
83
84// These are a serious of gaming macros.
85// Only enables for the viterbi, basically,
86// to save on firmware space, since it's limited.
87#ifdef MACROS_ENABLED
88 case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros
89 if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeconfig_update_user(userspace_config.raw); }
90#ifdef RGBLIGHT_ENABLE
91 userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18);
92#endif //RGBLIGHT_ENABLE
93 break;
94 case KC_SALT:
95 return send_game_macro("Salt, salt, salt...", record, false);
96 case KC_MORESALT:
97 return send_game_macro("Please sir, can I have some more salt?!", record, false);
98 case KC_SALTHARD:
99 return send_game_macro("Your salt only makes me harder, and even more aggressive!", record, false);
100 case KC_GOODGAME:
101 return send_game_macro("Good game, everyone!", record, false);
102 case KC_GLHF:
103 return send_game_macro("Good luck, have fun!!!", record, false);
104 case KC_SYMM:
105 return send_game_macro("Left click to win!", record, false);
106 case KC_JUSTGAME:
107 return send_game_macro("It may be a game, but if you don't want to actually try, please go play AI, so that people that actually want to take the game seriously and \"get good\" have a place to do so without trolls like you throwing games.", record, false);
108 case KC_TORB:
109 return send_game_macro("That was positively riveting!", record, false);
110 case KC_AIM:
111 send_game_macro("That aim is absolutely amazing. It's almost like you're a machine!", record, true);
112 return send_game_macro("Wait! That aim is TOO good! You're clearly using an aim hack! CHEATER!", record, false);
113 case KC_C9:
114 return send_game_macro("OMG!!! C9!!!", record, false);
115 case KC_GGEZ:
116 return send_game_macro("That was a fantastic game, though it was a bit easy. Try harder next time!", record, false);
117#endif // MACROS_ENABLED
118
119
120 case KC_DIABLO_CLEAR: // reset all Diablo timers, disabling them
121#ifdef TAP_DANCE_ENABLE
122 if (record->event.pressed) {
123 uint8_t dtime;
124 for (dtime = 0; dtime < 4; dtime++) {
125 diablo_key_time[dtime] = diablo_times[0];
126 }
127 }
128#endif // TAP_DANCE_ENABLE
129 break;
130
131
132 case KC_CCCV: // One key copy/paste
133 if(record->event.pressed){
134 copy_paste_timer = timer_read();
135 } else {
136 if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
137 register_code(KC_LCTL);
138 tap_code(KC_C);
139 unregister_code(KC_LCTL);
140 } else { // Tap, paste
141 register_code(KC_LCTL);
142 tap_code(KC_V);
143 unregister_code(KC_LCTL);
144 }
145 }
146 break;
147#ifdef UNICODE_ENABLE
148 case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻
149 if (record->event.pressed) {
150 send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B");
151 }
152 break;
153 case UC_TABL: // ┬─┬ノ( º _ ºノ)
154 if (record->event.pressed) {
155 send_unicode_hex_string("252C 2500 252C 30CE 0028 0020 00BA 0020 005F 0020 00BA 30CE 0029");
156 }
157 break;
158 case UC_SHRG: // ¯\_(ツ)_/¯
159 if (record->event.pressed) {
160 send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF");
161 }
162 break;
163 case UC_DISA: // ಠ_ಠ
164 if (record->event.pressed) {
165 send_unicode_hex_string("0CA0 005F 0CA0");
166 }
167 break;
168#endif
169 }
170 return process_record_keymap(keycode, record) &&
171#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
172 process_record_user_rgb(keycode, record) &&
173#endif // RGBLIGHT_ENABLE
174 process_record_secrets(keycode, record);
175}
diff --git a/users/drashna/process_records.h b/users/drashna/process_records.h
new file mode 100644
index 000000000..620997add
--- /dev/null
+++ b/users/drashna/process_records.h
@@ -0,0 +1,101 @@
1#pragma once
2#include "drashna.h"
3
4#if defined(KEYMAP_SAFE_RANGE)
5 #define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE
6#else
7 #define PLACEHOLDER_SAFE_RANGE SAFE_RANGE
8#endif
9
10enum userspace_custom_keycodes {
11 VRSN = PLACEHOLDER_SAFE_RANGE, // Prints QMK Firmware and board info
12 KC_QWERTY, // Sets default layer to QWERTY
13 KC_COLEMAK, // Sets default layer to COLEMAK
14 KC_DVORAK, // Sets default layer to DVORAK
15 KC_WORKMAN, // Sets default layer to WORKMAN
16 KC_DIABLO_CLEAR, // Clears all Diablo Timers
17 KC_OVERWATCH, // Toggles game macro input mode (so in OW, it defaults to game chat)
18 KC_SALT, // See drashna.c for details
19 KC_MORESALT,
20 KC_SALTHARD,
21 KC_GOODGAME,
22 KC_SYMM,
23 KC_JUSTGAME,
24 KC_GLHF,
25 KC_TORB,
26 KC_AIM,
27 KC_C9,
28 KC_GGEZ,
29 KC_MAKE, // Run keyboard's customized make command
30 KC_RGB_T, // Toggles RGB Layer Indication mode
31 KC_SECRET_1, // test1
32 KC_SECRET_2, // test2
33 KC_SECRET_3, // test3
34 KC_SECRET_4, // test4
35 KC_SECRET_5, // test5
36 KC_CCCV, // Hold to copy, tap to paste
37 KC_NUKE, // NUCLEAR LAUNCH DETECTED!!!
38 UC_FLIP, // (ಠ痊ಠ)┻━┻
39 UC_TABL, // ┬─┬ノ( º _ ºノ)
40 UC_SHRG, // ¯\_(ツ)_/¯
41 UC_DISA, // ಠ_ಠ
42 NEW_SAFE_RANGE //use "NEWPLACEHOLDER for keymap specific codes
43};
44
45bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
46bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
47
48
49
50#define LOWER MO(_LOWER)
51#define RAISE MO(_RAISE)
52#define ADJUST MO(_ADJUST)
53#define TG_MODS TG(_MODS)
54#define TG_GAME TG(_GAMEPAD)
55
56#define KC_SEC1 KC_SECRET_1
57#define KC_SEC2 KC_SECRET_2
58#define KC_SEC3 KC_SECRET_3
59#define KC_SEC4 KC_SECRET_4
60#define KC_SEC5 KC_SECRET_5
61
62#define QWERTY KC_QWERTY
63#define DVORAK KC_DVORAK
64#define COLEMAK KC_COLEMAK
65#define WORKMAN KC_WORKMAN
66
67#define KC_RESET RESET
68#define KC_RST KC_RESET
69
70#ifdef SWAP_HANDS_ENABLE
71#define KC_C1R3 SH_TT
72#else // SWAP_HANDS_ENABLE
73#define KC_C1R3 KC_BSPC
74#endif // SWAP_HANDS_ENABLE
75
76#define BK_LWER LT(_LOWER, KC_BSPC)
77#define SP_LWER LT(_LOWER, KC_SPC)
78#define DL_RAIS LT(_RAISE, KC_DEL)
79#define ET_RAIS LT(_RAISE, KC_ENTER)
80
81/* OSM keycodes, to keep things clean and easy to change */
82#define KC_MLSF OSM(MOD_LSFT)
83#define KC_MRSF OSM(MOD_RSFT)
84
85#define OS_LGUI OSM(MOD_LGUI)
86#define OS_RGUI OSM(MOD_RGUI)
87#define OS_LSFT OSM(MOD_LSFT)
88#define OS_RSFT OSM(MOD_RSFT)
89#define OS_LCTL OSM(MOD_LCTL)
90#define OS_RCTL OSM(MOD_RCTL)
91#define OS_LALT OSM(MOD_LALT)
92#define OS_RALT OSM(MOD_RALT)
93#define OS_MEH OSM(MOD_MEH)
94#define OS_HYPR OSM(MOD_HYPR)
95
96#define ALT_APP ALT_T(KC_APP)
97
98#define MG_NKRO MAGIC_TOGGLE_NKRO
99
100#define UC_IRNY UC(0x2E2E)
101#define UC_CLUE UC(0x203D)
diff --git a/users/drashna/rgb_stuff.h b/users/drashna/rgb_stuff.h
index 3db068a31..065bda9f9 100644
--- a/users/drashna/rgb_stuff.h
+++ b/users/drashna/rgb_stuff.h
@@ -1,4 +1,8 @@
1#pragma once
1#include "quantum.h" 2#include "quantum.h"
3#ifdef RGB_MATRIX_ENABLE
4 #include "rgb_matrix.h"
5#endif
2 6
3typedef struct { 7typedef struct {
4 bool enabled; 8 bool enabled;
@@ -13,3 +17,5 @@ void matrix_init_rgb(void);
13void matrix_scan_rgb(void); 17void matrix_scan_rgb(void);
14uint32_t layer_state_set_rgb(uint32_t state); 18uint32_t layer_state_set_rgb(uint32_t state);
15uint32_t default_layer_state_set_rgb(uint32_t state); 19uint32_t default_layer_state_set_rgb(uint32_t state);
20void rgblight_sethsv_default_helper(uint8_t index);
21void rgb_matrix_set_color_all( uint8_t red, uint8_t green, uint8_t blue );
diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk
index 49b1ddae9..5f243b007 100644
--- a/users/drashna/rules.mk
+++ b/users/drashna/rules.mk
@@ -1,4 +1,5 @@
1SRC += drashna.c 1SRC += drashna.c \
2 process_records.c
2 3
3ifneq ("$(wildcard $(USER_PATH)/secrets.c)","") 4ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
4 SRC += secrets.c 5 SRC += secrets.c
diff --git a/users/drashna/tap_dances.c b/users/drashna/tap_dances.c
index 346675853..cbb3cf54e 100644
--- a/users/drashna/tap_dances.c
+++ b/users/drashna/tap_dances.c
@@ -1,4 +1,3 @@
1#include "drashna.h"
2#include "tap_dances.h" 1#include "tap_dances.h"
3 2
4 3
diff --git a/users/drashna/tap_dances.h b/users/drashna/tap_dances.h
index 8935753f6..41d2bacb7 100644
--- a/users/drashna/tap_dances.h
+++ b/users/drashna/tap_dances.h
@@ -1,3 +1,6 @@
1#pragma once
2#include "drashna.h"
3
1//define diablo macro timer variables 4//define diablo macro timer variables
2extern uint16_t diablo_timer[4]; 5extern uint16_t diablo_timer[4];
3extern uint8_t diablo_times[]; 6extern uint8_t diablo_times[];
@@ -5,3 +8,12 @@ extern uint8_t diablo_key_time[4];
5 8
6 9
7void run_diablo_macro_check(void); 10void run_diablo_macro_check(void);
11
12#ifdef TAP_DANCE_ENABLE
13enum {
14 TD_D3_1 = 0,
15 TD_D3_2,
16 TD_D3_3,
17 TD_D3_4
18};
19#endif // TAP_DANCE_ENABLE
diff --git a/users/drashna/wrappers.h b/users/drashna/wrappers.h
new file mode 100644
index 000000000..b45359f67
--- /dev/null
+++ b/users/drashna/wrappers.h
@@ -0,0 +1,170 @@
1#pragma once
2#include "drashna.h"
3/*
4Since our quirky block definitions are basically a list of comma separated
5arguments, we need a wrapper in order for these definitions to be
6expanded before being used as arguments to the LAYOUT_xxx macro.
7*/
8#if (!defined(LAYOUT) && defined(KEYMAP))
9#define LAYOUT KEYMAP
10#endif
11
12#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)
13#define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
14#define KEYMAP_wrapper(...) LAYOUT(__VA_ARGS__)
15#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
16#define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
17
18/*
19Blocks for each of the four major keyboard layouts
20Organized so we can quickly adapt and modify all of them
21at once, rather than for each keyboard, one at a time.
22And this allows for much cleaner blocks in the keymaps.
23For instance Tap/Hold for Control on all of the layouts
24
25NOTE: These are all the same length. If you do a search/replace
26 then you need to add/remove underscores to keep the
27 lengths consistent.
28*/
29
30#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
31#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
32#define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
33
34#define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
35#define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
36#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH
37
38
39#define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G
40#define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D
41#define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B
42
43#define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
44#define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O
45#define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLASH
46
47#define ______________COLEMAK_MOD_DH_L1____________ KC_Q, KC_W, KC_F, KC_P, KC_B
48#define ______________COLEMAK_MOD_DH_L2____________ KC_A, KC_R, KC_S, KC_T, KC_G
49#define ______________COLEMAK_MOD_DH_L3____________ KC_Z, KC_X, KC_C, KC_D, KC_V
50
51#define ______________COLEMAK_MOD_DH_R1____________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
52#define ______________COLEMAK_MOD_DH_R2____________ KC_M, KC_N, KC_E, KC_I, KC_O
53#define ______________COLEMAK_MOD_DH_R3____________ KC_K, KC_H, KC_COMM, KC_DOT, KC_SLASH
54
55
56#define _________________DVORAK_L1_________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
57#define _________________DVORAK_L2_________________ KC_A, KC_O, KC_E, KC_U, KC_I
58#define _________________DVORAK_L3_________________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X
59
60#define _________________DVORAK_R1_________________ KC_F, KC_G, KC_C, KC_R, KC_L
61#define _________________DVORAK_R2_________________ KC_D, KC_H, KC_T, KC_N, KC_S
62#define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, KC_Z
63
64
65#define ________________DVORAK_AU_L1_______________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
66#define ________________DVORAK_AU_L2_______________ KC_O, KC_A, KC_E, KC_I, KC_U
67#define ________________DVORAK_AU_L3_______________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X
68
69#define ________________DVORAK_AU_R1_______________ KC_F, KC_G, KC_C, KC_R, KC_L
70#define ________________DVORAK_AU_R2_______________ KC_D, KC_H, KC_T, KC_N, KC_S
71#define ________________DVORAK_AU_R3_______________ KC_B, KC_M, KC_W, KC_V, KC_Z
72
73#define _________________WORKMAN_L1________________ KC_Q, KC_D, KC_R, KC_W, KC_B
74#define _________________WORKMAN_L2________________ KC_A, KC_S, KC_H, KC_T, KC_G
75#define _________________WORKMAN_L3________________ KC_Z, KC_X, KC_M, KC_C, KC_V
76
77#define _________________WORKMAN_R1________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN
78#define _________________WORKMAN_R2________________ KC_Y, KC_N, KC_E, KC_O, KC_I
79#define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLASH
80
81
82#define _________________NORMAN_L1_________________ KC_Q, KC_W, KC_D, KC_F, KC_K
83#define _________________NORMAN_L2_________________ KC_A, KC_S, KC_E, KC_T, KC_G
84#define _________________NORMAN_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
85
86#define _________________NORMAN_R1_________________ KC_J, KC_U, KC_R, KC_L, KC_SCLN
87#define _________________NORMAN_R2_________________ KC_Y, KC_N, KC_I, KC_O, KC_U
88#define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, KC_SLASH
89
90
91#define _________________MALTRON_L1________________ KC_Q, KC_P, KC_Y, KC_C, KC_B
92#define _________________MALTRON_L2________________ KC_A, KC_N, KC_I, KC_S, KC_F
93#define _________________MALTRON_L3________________ KC_SCLN, KC_SLSH, KC_J KC_G, KC_COMM
94
95#define _________________MALTRON_R1________________ KC_V, KC_M, KC_U, KC_Z, KC_L
96#define _________________MALTRON_R2________________ KC_D, KC_T, KC_D, KC_O, KC_R
97#define _________________MALTRON_R3________________ KC_DOT, KC_W, KC_K, KC_MINS, KC_X
98
99
100#define _________________EUCALYN_L1________________ KC_SLSH, KC_COMM, KC_DOT, KC_F, KC_Q
101#define _________________EUCALYN_L2________________ KC_A, KC_O, KC_E, KC_I, KC_U
102#define _________________EUCALYN_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_W
103
104#define _________________EUCALYN_R1________________ KC_M, KC_R, KC_D, KC_Y, KC_P
105#define _________________EUCALYN_R2________________ KC_G, KC_T, KC_K, KC_S, KC_N
106#define _________________EUCALYN_R3________________ KC_B, KC_H, KC_J, KC_L, KC_SCLN
107
108
109#define _____________CARPLAX_QFMLWY_L1_____________ KC_Q, KC_F, KC_M, KC_L, KC_W
110#define _____________CARPLAX_QFMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
111#define _____________CARPLAX_QFMLWY_L3_____________ KC_Z, KC_V, KC_G, KC_C, KC_X
112
113#define _____________CARPLAX_QFMLWY_R1_____________ KC_Y, KC_U, KC_O, KC_B, KC_J
114#define _____________CARPLAX_QFMLWY_R2_____________ KC_I, KC_A, KC_E, KC_H, KC_SCLN
115#define _____________CARPLAX_QFMLWY_R3_____________ KC_P, KC_K, KC_COMM, KC_DOT, KC_SLSH
116
117
118#define _____________CARPLAX_QGMLWB_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W
119#define _____________CARPLAX_QGMLWB_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
120#define _____________CARPLAX_QGMLWB_L3_____________ KC_Z, KC_X, KC_C, KC_F, KC_J
121
122#define _____________CARPLAX_QGMLWB_R1_____________ KC_B, KC_Y, KC_U, KC_V, KC_SCLN
123#define _____________CARPLAX_QGMLWB_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H
124#define _____________CARPLAX_QGMLWB_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH
125
126
127#define _____________CARPLAX_QGMLWY_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W
128#define _____________CARPLAX_QGMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
129#define _____________CARPLAX_QGMLWY_L3_____________ KC_Z, KC_X, KC_C, KC_V, KC_J
130
131#define _____________CARPLAX_QGMLWY_R1_____________ KC_Y, KC_F, KC_U, KC_B, KC_SCLN
132#define _____________CARPLAX_QGMLWY_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H
133#define _____________CARPLAX_QGMLWY_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH
134
135
136#define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5
137#define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0
138#define _________________FUNC_LEFT_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
139#define _________________FUNC_RIGHT________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
140
141#define ___________________BLANK___________________ _______, _______, _______, _______, _______
142
143
144#define _________________LOWER_L1__________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
145#define _________________LOWER_L2__________________ _________________FUNC_LEFT_________________
146#define _________________LOWER_L3__________________ _________________FUNC_RIGHT________________
147
148#define _________________LOWER_R1__________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
149#define _________________LOWER_R2__________________ _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR
150#define _________________LOWER_R3__________________ _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
151
152
153
154#define _________________RAISE_L1__________________ ________________NUMBER_LEFT________________
155#define _________________RAISE_L2__________________ ___________________BLANK___________________
156#define _________________RAISE_L3__________________ ___________________BLANK___________________
157
158#define _________________RAISE_R1__________________ ________________NUMBER_RIGHT_______________
159#define _________________RAISE_R2__________________ _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC
160#define _________________RAISE_R3__________________ _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
161
162
163
164#define _________________ADJUST_L1_________________ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
165#define _________________ADJUST_L2_________________ MU_TOG , CK_TOGG, AU_ON, AU_OFF, AG_NORM
166#define _________________ADJUST_L3_________________ RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T
167
168#define _________________ADJUST_R1_________________ KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5
169#define _________________ADJUST_R2_________________ AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN
170#define _________________ADJUST_R3_________________ MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT