aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrashna <drashna@live.com>2017-11-06 21:11:08 -0800
committerJack Humbert <jack.humb@gmail.com>2017-11-07 00:11:08 -0500
commit363aa8aa2eeedaded6fe9fd35ba5c02329d83959 (patch)
tree189433181f4ee93c3bfbb194c090b7530e0e83cd
parentef2961798cddb43dbcbac9d72ca9d84d71ad565e (diff)
downloadqmk_firmware-363aa8aa2eeedaded6fe9fd35ba5c02329d83959.tar.gz
qmk_firmware-363aa8aa2eeedaded6fe9fd35ba5c02329d83959.zip
Migrated most code from keymaps to userspace (#1980)
* Add woodpad * Cleanup * Remove misc layouts for woodpad * Move woodpad to handwired * Updated RGB Underglow info * Cleanup macros * Tweaked RGB lighting stuff * Start to merge orthodox/ergodox keymaps (persistant layers) * Add woodpad * Add forced NKRO * Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow * Updated macros and added workman keymaps * Fixed RGB lighting for Workman layout * Add leader keys * Remove force NKRO * Add Viterbi one handed layout and minor tweaks to others * Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts * Made "make" keystroke universal * Clean up and updates of drashna keymaps * Add workman layer to planck * Update to keymaps * Fix makefile toggle code in ez keymap Finish adding RGB code to orthodox * Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function * Remove unnecessary planck layout * Fixed Workman song * update make command and added lit reset * Fixed formatting to fall in line with official standards * Minor tweaks * Removed Leader Keys from Ergodox EZ Keymap Added KC_RESET that resets board and sets underglow to red * Tweak reset code * Cleanup * Remove misc layouts for woodpad * Move woodpad to handwired * Updated RGB Underglow info * Cleanup macros * Tweaked RGB lighting stuff * Start to merge orthodox/ergodox keymaps (persistant layers) * Add forced NKRO * Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow * Updated macros and added workman keymaps * Fixed RGB lighting for Workman layout * Add leader keys * Remove force NKRO * Add Viterbi one handed layout and minor tweaks to others * Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts * Made "make" keystroke universal * Clean up and updates of drashna keymaps * Add workman layer to planck * Update to keymaps * Fix makefile toggle code in ez keymap Finish adding RGB code to orthodox * Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function * Remove unnecessary planck layout * Fixed Workman song * update make command and added lit reset * Fixed formatting to fall in line with official standards * Minor tweaks * Removed Leader Keys from Ergodox EZ Keymap Added KC_RESET that resets board and sets underglow to red * Tweak reset code * Fix rebasing issues * remove head files * Fix "macro" issue * Rename ez keymaps for userspace * Revert "Rename ez keymaps for userspace" This reverts commit c25425911852e41711a5f0273b5741adb16e5bd4. * Renamed Ergodox EZ layouts so that all of my personal layouts are on the same name, in prep for using userspaces * Fix ergodox code * Remove "drashna-ez" keymap as it's no longer needed * Migrate majority of code to Userspace
-rw-r--r--keyboards/ergodox_ez/keymaps/drashna/config.h2
-rw-r--r--keyboards/ergodox_ez/keymaps/drashna/keymap.c342
-rw-r--r--keyboards/handwired/woodpad/keymaps/drashna/keymap.c214
-rw-r--r--keyboards/orthodox/keymaps/drashna/keymap.c216
-rw-r--r--keyboards/viterbi/keymaps/drashna/keymap.c237
-rw-r--r--users/drashna/drashna.c379
-rw-r--r--users/drashna/drashna.h73
-rw-r--r--users/drashna/readme.md14
-rw-r--r--users/drashna/rules.mk2
9 files changed, 541 insertions, 938 deletions
diff --git a/keyboards/ergodox_ez/keymaps/drashna/config.h b/keyboards/ergodox_ez/keymaps/drashna/config.h
index 8f3924e5a..62becc768 100644
--- a/keyboards/ergodox_ez/keymaps/drashna/config.h
+++ b/keyboards/ergodox_ez/keymaps/drashna/config.h
@@ -13,7 +13,5 @@
13#define RGBLIGHT_EFFECT_BREATHE_CENTER 1 13#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
14#endif // RGBLIGHT_ENABLE 14#endif // RGBLIGHT_ENABLE
15 15
16#undef DEBOUNCE
17#define DEBOUNCE 5
18 16
19#endif 17#endif
diff --git a/keyboards/ergodox_ez/keymaps/drashna/keymap.c b/keyboards/ergodox_ez/keymaps/drashna/keymap.c
index f37b54bf2..651703c1e 100644
--- a/keyboards/ergodox_ez/keymaps/drashna/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/drashna/keymap.c
@@ -18,41 +18,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
18#include "debug.h" 18#include "debug.h"
19#include "action_layer.h" 19#include "action_layer.h"
20#include "version.h" 20#include "version.h"
21 21#include "drashna.h"
22 22
23#include "keymap_german.h" 23#include "keymap_german.h"
24 24
25#include "keymap_nordic.h" 25#include "keymap_nordic.h"
26 26
27// Define layer names
28#define QWERTY 0
29#define COLEMAK 1
30#define DVORAK 2
31#define WORKMAN 3
32#define SYMB 8
33#define OVERWATCH 9
34#define DIABLO 10
35#define MOUS 12
36 27
37 28
38//define modifiers
39#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
40#define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
41#define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
42 29
43//define layer change stuff for underglow indicator 30//define layer change stuff for underglow indicator
44bool skip_leds = false; 31bool skip_leds = false;
45 32
46#ifdef RGBLIGHT_ENABLE 33
47#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF); 34#ifdef TAP_DANCE_ENABLE
48#define rgblight_set_red rgblight_sethsv (0x00, 0xFF, 0xFF);
49#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF);
50#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF);
51#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
52#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
53#define rgblight_set_yellow rgblight_sethsv (0x3C, 0xFF, 0xFF);
54#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF);
55#endif
56 35
57//define diablo macro timer variables 36//define diablo macro timer variables
58static uint16_t diablo_timer[4]; 37static uint16_t diablo_timer[4];
@@ -64,27 +43,6 @@ bool check_dtimer(uint8_t dtimer) {
64 return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true; 43 return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true;
65}; 44};
66 45
67
68enum custom_keycodes {
69 PLACEHOLDER = SAFE_RANGE, // can always be here
70 EPRM,
71 VRSN,
72 RGB_SLD,
73 RGB_0000FF,
74 RGB_008000,
75 RGB_FF0000,
76 RGB_800080,
77 RGB_00FF90,
78 KC_DIABLO_CLEAR,
79 KC_QWERTY,
80 KC_COLEMAK,
81 KC_DVORAK,
82 KC_WORKMAN,
83 KC_MAKEQMK,
84 KC_RESET
85};
86
87#ifdef TAP_DANCE_ENABLE
88enum { 46enum {
89 TD_FLSH = 0, 47 TD_FLSH = 0,
90 TD_DIABLO_1, 48 TD_DIABLO_1,
@@ -93,9 +51,6 @@ enum {
93 TD_DIABLO_4 51 TD_DIABLO_4
94}; 52};
95 53
96
97
98
99// on each tap, light up one led, from right to left 54// on each tap, light up one led, from right to left
100// on the forth tap, turn them off from right to left 55// on the forth tap, turn them off from right to left
101 56
@@ -220,22 +175,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
220 * | | | End | | PgDn | | | 175 * | | | End | | PgDn | | |
221 * `---------------------' `---------------------' 176 * `---------------------' `---------------------'
222 */ 177 */
223 [QWERTY] = LAYOUT_ergodox( 178 [_QWERTY] = LAYOUT_ergodox(
224 KC_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS), 179 KC_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_MOUS),
225 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(DIABLO), 180 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(_DIABLO),
226 KC_BSPACE, KC_A, KC_S, KC_D, KC_F, KC_G, 181 KC_BSPACE, KC_A, KC_S, KC_D, KC_F, KC_G,
227 KC_LSHIFT, LCTL_T(KC_Z),KC_X, KC_C, KC_V, KC_B, TG(OVERWATCH), 182 KC_LSHIFT, LCTL_T(KC_Z),KC_X, KC_C, KC_V, KC_B, TG(_OVERWATCH),
228 LT(SYMB,KC_GRAVE),KC_QUOTE, KC_LGUI, KC_LBRACKET,KC_RBRACKET, 183 LT(_SYMB,KC_GRAVE),KC_QUOTE, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
229 184
230 ALT_T(KC_APPLICATION), KC_LGUI, 185 ALT_T(KC_APPLICATION), KC_LGUI,
231 KC_HOME, 186 KC_HOME,
232 KC_SPACE, KC_BSPACE, KC_END, 187 KC_SPACE, KC_BSPACE, KC_END,
233 188
234 TG(MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, 189 TG(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
235 TG(DIABLO), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH, 190 TG(_DIABLO), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
236 KC_H, KC_J, KC_K, KC_L, KC_SCOLON, GUI_T(KC_QUOTE), 191 KC_H, KC_J, KC_K, KC_L, KC_SCOLON, GUI_T(KC_QUOTE),
237 TG(OVERWATCH), KC_N, KC_M, KC_COMMA, KC_DOT, RCTL_T(KC_SLASH),KC_RSHIFT, 192 TG(_OVERWATCH), KC_N, KC_M, KC_COMMA, KC_DOT, RCTL_T(KC_SLASH),KC_RSHIFT,
238 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(SYMB), 193 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(_SYMB),
239 KC_RGUI, CTL_T(KC_ESCAPE), 194 KC_RGUI, CTL_T(KC_ESCAPE),
240 KC_PGUP, 195 KC_PGUP,
241 KC_PGDOWN, KC_DELETE, KC_ENTER 196 KC_PGDOWN, KC_DELETE, KC_ENTER
@@ -263,22 +218,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
263 */ 218 */
264// If it accepts an argument (i.e, is a function), it doesn't need KC_. 219// If it accepts an argument (i.e, is a function), it doesn't need KC_.
265// Otherwise, it needs KC_* 220// Otherwise, it needs KC_*
266[COLEMAK] = LAYOUT_ergodox( 221[_COLEMAK] = LAYOUT_ergodox(
267 // left hand 222 // left hand
268 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS), 223 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_MOUS),
269 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, TG(DIABLO), 224 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, TG(_DIABLO),
270 KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, 225 KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D,
271 KC_LSFT, LCTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(OVERWATCH), 226 KC_LSFT, LCTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(_OVERWATCH),
272 LT(SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET,KC_RBRACKET, 227 LT(_SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
273 ALT_T(KC_APP), KC_LEAD, 228 ALT_T(KC_APP), KC_LEAD,
274 KC_HOME, 229 KC_HOME,
275 KC_SPC,KC_BSPC,KC_END, 230 KC_SPC,KC_BSPC,KC_END,
276 // right hand 231 // right hand
277 TG(MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, 232 TG(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
278 TG(DIABLO), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, 233 TG(_DIABLO), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
279 KC_H, KC_N, KC_E, KC_I, KC_O, GUI_T(KC_QUOTE), 234 KC_H, KC_N, KC_E, KC_I, KC_O, GUI_T(KC_QUOTE),
280 TG(OVERWATCH),KC_K, KC_M, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), KC_RSHIFT, 235 TG(_OVERWATCH),KC_K, KC_M, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), KC_RSHIFT,
281 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(SYMB), 236 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(_SYMB),
282 KC_LALT, CTL_T(KC_ESC), 237 KC_LALT, CTL_T(KC_ESC),
283 KC_PGUP, 238 KC_PGUP,
284 KC_PGDN,KC_DELETE, KC_ENT 239 KC_PGDN,KC_DELETE, KC_ENT
@@ -306,22 +261,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
306 */ 261 */
307// If it accepts an argument (i.e, is a function), it doesn't need KC_. 262// If it accepts an argument (i.e, is a function), it doesn't need KC_.
308// Otherwise, it needs KC_* 263// Otherwise, it needs KC_*
309[DVORAK] = LAYOUT_ergodox( 264[_DVORAK] = LAYOUT_ergodox(
310 // left hand 265 // left hand
311 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS), 266 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_MOUS),
312 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(DIABLO), 267 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(_DIABLO),
313 KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I, 268 KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I,
314 KC_LSFT, LCTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, TG(OVERWATCH), 269 KC_LSFT, LCTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, TG(_OVERWATCH),
315 LT(SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET, KC_RBRACKET, 270 LT(_SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET, KC_RBRACKET,
316 ALT_T(KC_APP), KC_LEAD, 271 ALT_T(KC_APP), KC_LEAD,
317 KC_HOME, 272 KC_HOME,
318 KC_SPC,KC_BSPC,KC_END, 273 KC_SPC,KC_BSPC,KC_END,
319 // right hand 274 // right hand
320 TG(MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, 275 TG(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
321 TG(DIABLO), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, 276 TG(_DIABLO), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
322 KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, 277 KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
323 TG(OVERWATCH),KC_B, KC_M, KC_W, KC_V, RCTL_T(KC_Z), KC_RSHIFT, 278 TG(_OVERWATCH),KC_B, KC_M, KC_W, KC_V, RCTL_T(KC_Z), KC_RSHIFT,
324 KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, TT(SYMB), 279 KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, TT(_SYMB),
325 KC_LALT, CTL_T(KC_ESC), 280 KC_LALT, CTL_T(KC_ESC),
326 KC_PGUP, 281 KC_PGUP,
327 KC_PGDN,KC_DELETE, KC_ENT 282 KC_PGDN,KC_DELETE, KC_ENT
@@ -349,22 +304,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
349 */ 304 */
350// If it accepts an argument (i.e, is a function), it doesn't need KC_. 305// If it accepts an argument (i.e, is a function), it doesn't need KC_.
351// Otherwise, it needs KC_* 306// Otherwise, it needs KC_*
352[WORKMAN] = LAYOUT_ergodox( 307[_WORKMAN] = LAYOUT_ergodox(
353 // left hand 308 // left hand
354 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS), 309 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(_MOUS),
355 KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, TG(DIABLO), 310 KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, TG(_DIABLO),
356 KC_BSPC, KC_A, KC_S, KC_H, KC_T, KC_G, 311 KC_BSPC, KC_A, KC_S, KC_H, KC_T, KC_G,
357 KC_LSFT, LCTL_T(KC_Z), KC_X, KC_M, KC_C, KC_V, TG(OVERWATCH), 312 KC_LSFT, LCTL_T(KC_Z), KC_X, KC_M, KC_C, KC_V, TG(_OVERWATCH),
358 LT(SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET,KC_RBRACKET, 313 LT(_SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
359 ALT_T(KC_APP), KC_LEAD, 314 ALT_T(KC_APP), KC_LEAD,
360 KC_HOME, 315 KC_HOME,
361 KC_SPC,KC_BSPC,KC_END, 316 KC_SPC,KC_BSPC,KC_END,
362 // right hand 317 // right hand
363 TG(MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, 318 TG(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
364 TG(DIABLO), KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSLS, 319 TG(_DIABLO), KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSLS,
365 KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOTE, 320 KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOTE,
366 TG(OVERWATCH),KC_K, KC_L, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), KC_RSHIFT, 321 TG(_OVERWATCH),KC_K, KC_L, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), KC_RSHIFT,
367 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(SYMB), 322 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(_SYMB),
368 KC_LALT, CTL_T(KC_ESC), 323 KC_LALT, CTL_T(KC_ESC),
369 KC_PGUP, 324 KC_PGUP,
370 KC_PGDN,KC_DELETE, KC_ENT 325 KC_PGDN,KC_DELETE, KC_ENT
@@ -391,10 +346,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
391* | DARK |BRITE | BLUE | | | | | 346* | DARK |BRITE | BLUE | | | | |
392* `--------------------' `--------------------' 347* `--------------------' `--------------------'
393*/ 348*/
394 [SYMB] = LAYOUT_ergodox( 349 [_SYMB] = LAYOUT_ergodox(
395 KC_ESCAPE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_WORKMAN, 350 KC_ESCAPE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_WORKMAN,
396 VRSN, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_DVORAK, 351 VRSN, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_DVORAK,
397 KC_MAKEQMK, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE, 352 KC_MAKE, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE,
398 KC_RESET, KC_PERC, KC_CIRC, KC_LBRACKET,KC_RBRACKET,KC_TILD, KC_COLEMAK, 353 KC_RESET, KC_PERC, KC_CIRC, KC_LBRACKET,KC_RBRACKET,KC_TILD, KC_COLEMAK,
399 KC_TRNS, KC_AMPR, KC_ASTR, KC_COLN, KC_SCOLON, 354 KC_TRNS, KC_AMPR, KC_ASTR, KC_COLN, KC_SCOLON,
400 KC_TRNS, KC_TRNS, 355 KC_TRNS, KC_TRNS,
@@ -406,8 +361,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
406 KC_KP_MINUS,KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_SLASH, KC_PSCREEN, 361 KC_KP_MINUS,KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_SLASH, KC_PSCREEN,
407 KC_COLEMAK, KC_NUMLOCK, KC_KP_1, KC_KP_2, KC_KP_3, KC_EQUAL, KC_PAUSE, 362 KC_COLEMAK, KC_NUMLOCK, KC_KP_1, KC_KP_2, KC_KP_3, KC_EQUAL, KC_PAUSE,
408 KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, KC_TRNS, 363 KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, KC_TRNS,
409 RGB_TOG, RGB_SLD, 364 KC_TRNS, KC_TRNS,
410 KC_NO, 365 KC_TRNS,
411 KC_KP_DOT, KC_KP_0, KC_KP_ENTER 366 KC_KP_DOT, KC_KP_0, KC_KP_ENTER
412 ), 367 ),
413 368
@@ -432,7 +387,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
432 * | | | H | | | | | 387 * | | | H | | | | |
433 * `--------------------' `--------------------' 388 * `--------------------' `--------------------'
434 */ 389 */
435 [OVERWATCH] = LAYOUT_ergodox( 390 [_OVERWATCH] = LAYOUT_ergodox(
436 KC_ESCAPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 391 KC_ESCAPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
437 KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T, 392 KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T,
438 KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F, 393 KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F,
@@ -445,7 +400,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
445 KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, 400 KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
446 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 401 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
447 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 402 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
448 TG(OVERWATCH), KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO, 403 TG(_OVERWATCH), KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO,
449 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 404 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
450 KC_NO, KC_NO, 405 KC_NO, KC_NO,
451 KC_NO, 406 KC_NO,
@@ -473,7 +428,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
473 * | SHIFT| ALT | 0MAC | | | | | 428 * | SHIFT| ALT | 0MAC | | | | |
474 * `--------------------' `--------------------' 429 * `--------------------' `--------------------'
475 */ 430 */
476 [DIABLO] = LAYOUT_ergodox( 431 [_DIABLO] = LAYOUT_ergodox(
477 KC_ESCAPE, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_NO, 432 KC_ESCAPE, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_NO,
478 KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_TRNS, 433 KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_TRNS,
479 KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G, 434 KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G,
@@ -516,7 +471,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
516 * | | | MWDn | | Mclk | | | 471 * | | | MWDn | | Mclk | | |
517 * `--------------------' `--------------------' 472 * `--------------------' `--------------------'
518 */ 473 */
519 [MOUS] = LAYOUT_ergodox( 474 [_MOUS] = LAYOUT_ergodox(
520 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, 475 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
521 KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO, KC_NO, KC_TRNS, 476 KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO, KC_NO, KC_TRNS,
522 KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_NO, 477 KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_NO,
@@ -539,146 +494,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
539}; 494};
540 495
541 496
542void persistent_default_layer_set(uint16_t default_layer) {
543 eeconfig_update_default_layer(default_layer);
544 default_layer_set(default_layer);
545}
546
547
548bool process_record_user(uint16_t keycode, keyrecord_t *record) {
549#ifdef CONSOLE_ENABLE
550 xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed);
551#endif
552 switch (keycode) {
553 // dynamically generate these.
554 case EPRM:
555 if (record->event.pressed) {
556 eeconfig_init();
557 }
558 return false;
559 break;
560 case VRSN:
561 if (record->event.pressed) {
562 SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
563 }
564 return false;
565 break;
566 case RGB_SLD:
567 if (record->event.pressed) {
568#ifdef RGBLIGHT_ENABLE
569 rgblight_mode(1);
570#endif
571 }
572 return false;
573 break;
574
575 case RGB_0000FF:
576 if (record->event.pressed) {
577#ifdef RGBLIGHT_ENABLE
578 rgblight_enable();
579 rgblight_mode(1);
580 rgblight_setrgb(0x00, 0x00, 0xff);
581#endif
582 }
583 return false;
584 break;
585
586 case RGB_008000:
587 if (record->event.pressed) {
588#ifdef RGBLIGHT_ENABLE
589 rgblight_enable();
590 rgblight_mode(1);
591 rgblight_setrgb(0x00, 0x80, 0x00);
592#endif
593 }
594 return false;
595 break;
596
597 case RGB_FF0000:
598 if (record->event.pressed) {
599#ifdef RGBLIGHT_ENABLE
600 rgblight_enable();
601 rgblight_mode(1);
602 rgblight_setrgb(0xff, 0x00, 0x00);
603#endif
604 }
605 return false;
606 break;
607
608 case RGB_800080:
609 if (record->event.pressed) {
610#ifdef RGBLIGHT_ENABLE
611 rgblight_enable();
612 rgblight_mode(1);
613 rgblight_setrgb(0x80, 0x00, 0x80);
614#endif
615 }
616 return false;
617 break;
618
619 case RGB_00FF90:
620 if (record->event.pressed) {
621#ifdef RGBLIGHT_ENABLE
622 rgblight_enable();
623 rgblight_mode(1);
624 rgblight_setrgb(0x00, 0xff, 0x90);
625#endif
626 }
627 return false;
628 break;
629 case KC_DIABLO_CLEAR: // reset all Diable timers, disabling them
630 if (record->event.pressed) {
631 uint8_t dtime;
632
633 for (dtime = 0; dtime < 4; dtime++) {
634 diablo_key_time[dtime] = diablo_times[0];
635 }
636 }
637 return false;
638 break;
639 case KC_QWERTY:
640 if (record->event.pressed) {
641 persistent_default_layer_set(1UL << QWERTY);
642 }
643 return false;
644 break;
645 case KC_COLEMAK:
646 if (record->event.pressed) {
647 persistent_default_layer_set(1UL << COLEMAK);
648 }
649 return false;
650 break;
651 case KC_DVORAK:
652 if (record->event.pressed) {
653 persistent_default_layer_set(1UL << DVORAK);
654 }
655 return false;
656 break;
657 case KC_WORKMAN:
658 if (record->event.pressed) {
659 persistent_default_layer_set(1UL << WORKMAN);
660 }
661 return false;
662 break;
663 case KC_MAKEQMK:
664 if (!record->event.pressed) {
665 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP ":teensy"SS_TAP(X_ENTER));
666 }
667 return false;
668 break;
669 case KC_RESET:
670 if (!record->event.pressed) {
671#ifdef RGBLIGHT_ENABLE
672 rgblight_enable();
673 rgblight_mode(1);
674 rgblight_setrgb(0xff, 0x00, 0x00);
675#endif
676 reset_keyboard();
677 }
678 return false;
679 break;
680 497
681 } 498bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
682 return true; 499 return true;
683} 500}
684 501
@@ -686,7 +503,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
686 503
687// Sends the key press to system, but only if on the Diablo layer 504// Sends the key press to system, but only if on the Diablo layer
688void send_diablo_keystroke(uint8_t diablo_key) { 505void send_diablo_keystroke(uint8_t diablo_key) {
689 if (biton32(layer_state) == DIABLO) { 506 if (biton32(layer_state) == _DIABLO) {
690 switch (diablo_key) { 507 switch (diablo_key) {
691 case 0: 508 case 0:
692 SEND_STRING("1"); 509 SEND_STRING("1");
@@ -721,28 +538,11 @@ void run_diablo_macro_check(void) {
721#endif 538#endif
722 539
723 540
724void matrix_init_user(void) { // Runs boot tasks for keyboard 541void matrix_init_keymap(void) { // Runs boot tasks for keyboard
725#ifdef RGBLIGHT_ENABLE
726 uint8_t default_layer = eeconfig_read_default_layer();
727
728 rgblight_enable();
729 if (default_layer & (1UL << COLEMAK)) {
730 rgblight_set_magenta;
731 }
732 else if (default_layer & (1UL << DVORAK)) {
733 rgblight_set_green;
734 }
735 else if (default_layer & (1UL << WORKMAN)) {
736 rgblight_set_purple;
737 }
738 else {
739 rgblight_set_teal;
740 }
741#endif
742}; 542};
743 543
744 544
745void matrix_scan_user(void) { // runs frequently to update info 545void matrix_scan_keymap(void) { // runs frequently to update info
746 uint8_t modifiders = get_mods(); 546 uint8_t modifiders = get_mods();
747 547
748 if (!skip_leds) { 548 if (!skip_leds) {
@@ -772,43 +572,3 @@ void matrix_scan_user(void) { // runs frequently to update info
772#endif 572#endif
773}; 573};
774 574
775uint32_t layer_state_set_kb(uint32_t state) {
776#ifdef RGBLIGHT_ENABLE
777 uint8_t default_layer = eeconfig_read_default_layer();
778
779 switch (biton32(state)) {
780 case SYMB:
781 rgblight_set_blue;
782 rgblight_mode(2);
783 break;
784 case OVERWATCH:
785 rgblight_set_orange;
786 rgblight_mode(17);
787 break;
788 case DIABLO:
789 rgblight_set_red;
790 rgblight_mode(5);
791 break;
792 case MOUS:
793 rgblight_set_yellow;
794 rgblight_mode(1);
795 break;
796 default:
797 if (default_layer & (1UL << COLEMAK)) {
798 rgblight_set_magenta;
799 }
800 else if (default_layer & (1UL << DVORAK)) {
801 rgblight_set_green;
802 }
803 else if (default_layer & (1UL << WORKMAN)) {
804 rgblight_set_purple;
805 }
806 else {
807 rgblight_set_teal;
808 }
809 rgblight_mode(1);
810 break;
811 }
812#endif
813 return state;
814}
diff --git a/keyboards/handwired/woodpad/keymaps/drashna/keymap.c b/keyboards/handwired/woodpad/keymaps/drashna/keymap.c
index 725d1f724..6ec7f52fd 100644
--- a/keyboards/handwired/woodpad/keymaps/drashna/keymap.c
+++ b/keyboards/handwired/woodpad/keymaps/drashna/keymap.c
@@ -14,37 +14,21 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */ 15 */
16#include "woodpad.h" 16#include "woodpad.h"
17#include "drashna.h"
17 18
18 // Each layer gets a name for readability, which is then used in the keymap matrix below. 19 // Each layer gets a name for readability, which is then used in the keymap matrix below.
19 // The underscores don't mean anything - you can have a layer called STUFF or any other name. 20 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
20 // Layer names don't all need to be of the same length, obviously, and you can also skip them 21 // Layer names don't all need to be of the same length, obviously, and you can also skip them
21 // entirely and just use numbers. 22 // entirely and just use numbers.
22#define _NUMLOCK 0
23#define _NAV 1
24#define _DIABLO 2
25#define _MACROS 3
26#define _MEDIA 4
27 23
28// Fillers to make layering more clear 24// Fillers to make layering more clear
29#define _______ KC_TRNS 25#define _______ KC_TRNS
30#define XXXXXXX KC_NO 26#define XXXXXXX KC_NO
31 27
32#ifdef RGBLIGHT_ENABLE
33#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF);
34#define rgblight_set_red rgblight_sethsv (0x00, 0xFF, 0xFF);
35#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF);
36#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF);
37#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
38#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
39#define rgblight_set_yellow rgblight_sethsv (0x3C, 0xFF, 0xFF);
40#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF);
41#endif
42 28
43//define layer change stuff for underglow indicator 29//define layer change stuff for underglow indicator
44bool skip_leds = false; 30bool skip_leds = false;
45 31
46bool is_overwatch = false;
47
48 32
49#ifdef TAP_DANCE_ENABLE 33#ifdef TAP_DANCE_ENABLE
50//define diablo macro timer variables 34//define diablo macro timer variables
@@ -60,22 +44,6 @@ bool check_dtimer(uint8_t dtimer) {
60#endif 44#endif
61 45
62 46
63enum custom_keycodes {
64 PLACEHOLDER = SAFE_RANGE, // can always be here
65 KC_DIABLO_CLEAR,
66 KC_OVERWATCH,
67 KC_SALT,
68 KC_MORESALT,
69 KC_SALTHARD,
70 KC_GOODGAME,
71 KC_SYMM,
72 KC_DOOMFIST,
73 KC_JUSTGAME,
74 KC_GLHF,
75 KC_TORB,
76 KC_MAKE,
77 KC_RESET
78};
79 47
80#ifdef TAP_DANCE_ENABLE 48#ifdef TAP_DANCE_ENABLE
81enum { 49enum {
@@ -190,14 +158,7 @@ void numlock_led_off(void) {
190} 158}
191 159
192 160
193bool process_record_user(uint16_t keycode, keyrecord_t *record) { 161bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
194 uint16_t kc;
195 if (is_overwatch) {
196 kc = KC_BSPC;
197 }
198 else {
199 kc = KC_ENTER;
200 }
201 switch (keycode) { 162 switch (keycode) {
202#ifdef TAP_DANCE_ENABLE 163#ifdef TAP_DANCE_ENABLE
203 case KC_DIABLO_CLEAR: // reset all Diable timers, disabling them 164 case KC_DIABLO_CLEAR: // reset all Diable timers, disabling them
@@ -211,138 +172,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
211 return false; 172 return false;
212 break; 173 break;
213#endif 174#endif
214 case KC_OVERWATCH:
215 if (record->event.pressed) {
216 is_overwatch = !is_overwatch;
217 }
218#ifdef RGBLIGHT_ENABLE
219 is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
220#endif
221 return false;
222 break;
223 case KC_SALT:
224 if (!record->event.pressed) {
225 register_code(kc);
226 unregister_code(kc);
227 _delay_ms(50);
228 SEND_STRING("Salt, salt, salt...");
229 register_code(KC_ENTER);
230 unregister_code(KC_ENTER);
231 }
232 return false;
233 break;
234 case KC_MORESALT:
235 if (!record->event.pressed) {
236 register_code(kc);
237 unregister_code(kc);
238 _delay_ms(50);
239 SEND_STRING("Please sir, can I have some more salt?!");
240 register_code(KC_ENTER);
241 unregister_code(KC_ENTER);
242 }
243 return false;
244 break;
245 case KC_SALTHARD:
246 if (!record->event.pressed) {
247 register_code(kc);
248 unregister_code(kc);
249 _delay_ms(50);
250 SEND_STRING("Your salt only makes my penis that much harder, and even more aggressive!");
251 register_code(KC_ENTER);
252 unregister_code(KC_ENTER);
253 }
254 return false;
255 break;
256 case KC_GOODGAME:
257 if (!record->event.pressed) {
258 register_code(kc);
259 unregister_code(kc);
260 _delay_ms(50);
261 SEND_STRING("Good game, everyone!");
262 register_code(KC_ENTER);
263 unregister_code(KC_ENTER);
264 }
265 return false;
266 break;
267 case KC_GLHF:
268 if (!record->event.pressed) {
269 register_code(kc);
270 unregister_code(kc);
271 _delay_ms(50);
272 SEND_STRING("Good luck, have fun!!!");
273 register_code(KC_ENTER);
274 unregister_code(KC_ENTER);
275 }
276 return false;
277 break;
278 case KC_SYMM:
279 if (!record->event.pressed) {
280 register_code(kc);
281 unregister_code(kc);
282 _delay_ms(50);
283 SEND_STRING("Left click to win!");
284 register_code(KC_ENTER);
285 unregister_code(KC_ENTER);
286 }
287 return false;
288 break;
289 case KC_DOOMFIST:
290 if (!record->event.pressed) {
291 register_code(kc);
292 unregister_code(kc);
293 _delay_ms(50);
294 SEND_STRING("Hey, look at me. I'm Doomfist, and I'm overpowered! All I do is spam punches all day! I'm DPS, tank and defense, rolled into one! All I need is team healing to be complete!");
295 register_code(KC_ENTER);
296 unregister_code(KC_ENTER);
297 }
298 return false;
299 break;
300 case KC_JUSTGAME:
301
302 if (!record->event.pressed) {
303 register_code(kc);
304 unregister_code(kc);
305 _delay_ms(50);
306 SEND_STRING("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.");
307 register_code(KC_ENTER);
308 unregister_code(KC_ENTER);
309 }
310 return false;
311 break;
312 case KC_TORB:
313
314 if (!record->event.pressed) {
315 register_code(kc);
316 unregister_code(kc);
317 _delay_ms(50);
318 SEND_STRING("That was positively riveting!");
319 register_code(KC_ENTER);
320 unregister_code(KC_ENTER);
321 }
322 return false;
323 break;
324 case KC_MAKE:
325 if (!record->event.pressed) {
326 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP SS_TAP(X_ENTER));
327 }
328 return false;
329 break;
330 case KC_RESET:
331 if (!record->event.pressed) {
332#ifdef RGBLIGHT_ENABLE
333 rgblight_enable();
334 rgblight_mode(1);
335 rgblight_setrgb(0xff, 0x00, 0x00);
336#endif
337 reset_keyboard();
338 }
339 return false;
340 break;
341
342
343 } 175 }
344 return true; 176 return true;
345} 177}
178
346#ifdef TAP_DANCE_ENABLE 179#ifdef TAP_DANCE_ENABLE
347 180
348// Sends the key press to system, but only if on the Diablo layer 181// Sends the key press to system, but only if on the Diablo layer
@@ -379,16 +212,11 @@ void run_diablo_macro_check(void) {
379 212
380} 213}
381#endif 214#endif
382void matrix_init_user(void) { 215void matrix_init_keymap(void) {
383 // set Numlock LED to output and low 216 // set Numlock LED to output and low
384 DDRF |= (1 << 7); 217 DDRF |= (1 << 7);
385 PORTF &= ~(1 << 7); 218 PORTF &= ~(1 << 7);
386 219
387#ifdef RGBLIGHT_ENABLE
388 rgblight_enable();
389 rgblight_set_teal;
390 rgblight_mode(1);
391#endif
392 220
393 if (!(host_keyboard_leds() & (1 << USB_LED_NUM_LOCK))) { 221 if (!(host_keyboard_leds() & (1 << USB_LED_NUM_LOCK))) {
394 register_code(KC_NUMLOCK); 222 register_code(KC_NUMLOCK);
@@ -396,7 +224,7 @@ void matrix_init_user(void) {
396 } 224 }
397} 225}
398 226
399void matrix_scan_user(void) { 227void matrix_scan_keymap(void) {
400 numlock_led_off(); 228 numlock_led_off();
401 if (is_overwatch && biton32(layer_state) == _MACROS) { 229 if (is_overwatch && biton32(layer_state) == _MACROS) {
402 numlock_led_on(); 230 numlock_led_on();
@@ -408,35 +236,3 @@ void matrix_scan_user(void) {
408#endif 236#endif
409} 237}
410 238
411uint32_t layer_state_set_kb(uint32_t state) {
412#ifdef RGBLIGHT_ENABLE
413 // Check layer, and apply color if its changed since last check
414 switch (biton32(state)) {
415 case _NAV:
416 rgblight_set_blue;
417 rgblight_mode(1);
418 break;
419 case _MACROS:
420 rgblight_set_orange;
421 is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
422 break;
423 case _DIABLO:
424 rgblight_set_red;
425 rgblight_mode(5);
426 break;
427 case _MEDIA:
428 rgblight_set_green;
429 rgblight_mode(22);
430 break;
431 default:
432 rgblight_set_teal;
433 rgblight_mode(1);
434 break;
435 }
436
437#endif
438 return state;
439}
440void led_set_user(uint8_t usb_led) {
441
442}
diff --git a/keyboards/orthodox/keymaps/drashna/keymap.c b/keyboards/orthodox/keymaps/drashna/keymap.c
index 3ad0af71b..b6618f151 100644
--- a/keyboards/orthodox/keymaps/drashna/keymap.c
+++ b/keyboards/orthodox/keymaps/drashna/keymap.c
@@ -22,6 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
22#include "orthodox.h" 22#include "orthodox.h"
23#include "action_layer.h" 23#include "action_layer.h"
24#include "eeconfig.h" 24#include "eeconfig.h"
25#include "drashna.h"
25 26
26extern keymap_config_t keymap_config; 27extern keymap_config_t keymap_config;
27 28
@@ -29,41 +30,11 @@ extern keymap_config_t keymap_config;
29// The underscores don't mean anything - you can have a layer called STUFF or any other name. 30// The underscores don't mean anything - you can have a layer called STUFF or any other name.
30// Layer names don't all need to be of the same length, obviously, and you can also skip them 31// Layer names don't all need to be of the same length, obviously, and you can also skip them
31// entirely and just use numbers. 32// entirely and just use numbers.
32#define _QWERTY 0
33#define _COLEMAK 1
34#define _DVORAK 2
35#define _WORKMAN 3
36#define _LOWER 8
37#define _RAISE 9
38#define _ADJUST 16
39
40enum custom_keycodes {
41 QWERTY = SAFE_RANGE,
42 COLEMAK,
43 DVORAK,
44 WORKMAN,
45 LOWER,
46 RAISE,
47 ADJUST,
48 KC_MAKE,
49 KC_RESET
50};
51 33
52// Fillers to make layering more clear 34// Fillers to make layering more clear
53#define _______ KC_TRNS 35#define _______ KC_TRNS
54#define XXXXXXX KC_NO 36#define XXXXXXX KC_NO
55 37
56#ifdef RGBLIGHT_ENABLE
57#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF);
58#define rgblight_set_red rgblight_sethsv (0x00, 0xFF, 0xFF);
59#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF);
60#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF);
61#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
62#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
63#define rgblight_set_yellow rgblight_sethsv (0x3C, 0xFF, 0xFF);
64#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF);
65#endif
66
67 38
68#ifdef TAP_DANCE_ENABLE 39#ifdef TAP_DANCE_ENABLE
69enum { 40enum {
@@ -136,196 +107,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
136 107
137[_ADJUST] = KEYMAP(\ 108[_ADJUST] = KEYMAP(\
138 KC_MAKE, KC_RESET, TD(TD_FLSH), _______, _______, _______, _______, _______, _______, _______, _______, _______, \ 109 KC_MAKE, KC_RESET, TD(TD_FLSH), _______, _______, _______, _______, _______, _______, _______, _______, _______, \
139 _______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, XXXXXXX, _______, _______, XXXXXXX, _______, AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN, _______, \ 110 _______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, XXXXXXX, _______, _______, XXXXXXX, _______, AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, _______, \
140 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MAGIC_TOGGLE_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY \ 111 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MAGIC_TOGGLE_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY \
141) 112)
142 113
143 114
144}; 115};
145 116
146#ifdef AUDIO_ENABLE
147float tone_qwerty[][2] = SONG(QWERTY_SOUND);
148float tone_dvorak[][2] = SONG(DVORAK_SOUND);
149float tone_colemak[][2] = SONG(COLEMAK_SOUND);
150float tone_workman[][2] = SONG(PLOVER_SOUND);
151#endif
152
153void persistent_default_layer_set(uint16_t default_layer) {
154 eeconfig_update_default_layer(default_layer);
155 default_layer_set(default_layer);
156}
157 117
158bool process_record_user(uint16_t keycode, keyrecord_t *record) { 118bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
159 switch (keycode) {
160 case QWERTY:
161 if (record->event.pressed) {
162#ifdef AUDIO_ENABLE
163 PLAY_SONG(tone_qwerty);
164#endif
165 persistent_default_layer_set(1UL << _QWERTY);
166 }
167 return false;
168 break;
169 case COLEMAK:
170 if (record->event.pressed) {
171#ifdef AUDIO_ENABLE
172 PLAY_SONG(tone_colemak);
173#endif
174 persistent_default_layer_set(1UL << _COLEMAK);
175 }
176 return false;
177 break;
178 case DVORAK:
179 if (record->event.pressed) {
180#ifdef AUDIO_ENABLE
181 PLAY_SONG(tone_dvorak);
182#endif
183 persistent_default_layer_set(1UL << _DVORAK);
184 }
185 return false;
186 break;
187 case WORKMAN:
188 if (record->event.pressed) {
189#ifdef AUDIO_ENABLE
190 PLAY_SONG(tone_workman);
191#endif
192 persistent_default_layer_set(1UL << _WORKMAN);
193 }
194 return false;
195 break;
196 case LOWER:
197 if (record->event.pressed) {
198 layer_on(_LOWER);
199 update_tri_layer(_LOWER, _RAISE, _ADJUST);
200 }
201 else {
202 layer_off(_LOWER);
203 update_tri_layer(_LOWER, _RAISE, _ADJUST);
204 }
205 return false;
206 break;
207 case RAISE:
208 if (record->event.pressed) {
209 layer_on(_RAISE);
210 update_tri_layer(_LOWER, _RAISE, _ADJUST);
211 }
212 else {
213 layer_off(_RAISE);
214 update_tri_layer(_LOWER, _RAISE, _ADJUST);
215 }
216 return false;
217 break;
218 case ADJUST:
219 if (record->event.pressed) {
220 layer_on(_ADJUST);
221 }
222 else {
223 layer_off(_ADJUST);
224 }
225 return false;
226 break;
227 case KC_MAKE:
228 if (!record->event.pressed) {
229#ifdef RGBLIGHT_ENABLE
230 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP " RGBLIGHT_ENABLE=yes AUDIO_ENABLE=yes" SS_TAP(X_ENTER));
231#else
232 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP " RGBLIGHT_ENABLE=no AUDIO_ENABLE=yes"SS_TAP(X_ENTER));
233#endif
234 }
235 return false;
236 break;
237 case KC_RESET:
238 if (!record->event.pressed) {
239#ifdef RGBLIGHT_ENABLE
240 rgblight_enable();
241 rgblight_mode(1);
242 rgblight_setrgb(0xff, 0x00, 0x00);
243#endif
244 reset_keyboard();
245 }
246 return false;
247 break;
248 }
249 return true; 119 return true;
250} 120}
251 121
252void matrix_init_user(void) { // Runs boot tasks for keyboard
253#ifdef RGBLIGHT_ENABLE
254 uint8_t default_layer = eeconfig_read_default_layer();
255
256 rgblight_enable();
257
258 if (true) {
259 if (default_layer & (1UL << _COLEMAK)) {
260 rgblight_set_magenta;
261 }
262 else if (default_layer & (1UL << _DVORAK)) {
263 rgblight_set_green;
264 }
265 else if (default_layer & (1UL << _WORKMAN)) {
266 rgblight_set_purple;
267 }
268 else {
269 rgblight_set_teal;
270 }
271 }
272 else
273 {
274 rgblight_set_red;
275 rgblight_mode(5);
276 }
277#endif
278
279};
280
281void matrix_scan_user(void) { // runs frequently to update info
282
283};
284
285uint32_t layer_state_set_kb(uint32_t state) { // runs on layer switch
286#ifdef RGBLIGHT_ENABLE
287 uint8_t default_layer = eeconfig_read_default_layer();
288
289 switch (biton32(state)) {
290 case _COLEMAK:
291 rgblight_set_magenta;
292 rgblight_mode(1);
293 break;
294 case _DVORAK:
295 rgblight_set_green;
296 rgblight_mode(1);
297 break;
298 case _RAISE:
299 rgblight_set_yellow;
300 rgblight_mode(5);
301 break;
302 case _LOWER:
303 rgblight_set_orange;
304 rgblight_mode(5);
305 break;
306 case _ADJUST:
307 rgblight_set_red;
308 rgblight_mode(23);
309 break;
310 case 6:
311 rgblight_set_blue;
312 break;
313 case _QWERTY:
314 if (default_layer & (1UL << _COLEMAK)) {
315 rgblight_set_magenta;
316 }
317 else if (default_layer & (1UL << _DVORAK)) {
318 rgblight_set_green;
319 }
320 else if (default_layer & (1UL << _WORKMAN)) {
321 rgblight_set_purple;
322 }
323 else {
324 rgblight_set_teal;
325 }
326 rgblight_mode(1);
327 break;
328 }
329#endif
330 return state;
331}
diff --git a/keyboards/viterbi/keymaps/drashna/keymap.c b/keyboards/viterbi/keymaps/drashna/keymap.c
index 0722746ff..b33f05027 100644
--- a/keyboards/viterbi/keymaps/drashna/keymap.c
+++ b/keyboards/viterbi/keymaps/drashna/keymap.c
@@ -1,6 +1,7 @@
1#include "viterbi.h" 1#include "viterbi.h"
2#include "action_layer.h" 2#include "action_layer.h"
3#include "eeconfig.h" 3#include "eeconfig.h"
4#include "drashna.h"
4 5
5extern keymap_config_t keymap_config; 6extern keymap_config_t keymap_config;
6 7
@@ -8,56 +9,21 @@ extern keymap_config_t keymap_config;
8// The underscores don't mean anything - you can have a layer called STUFF or any other name. 9// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them 10// Layer names don't all need to be of the same length, obviously, and you can also skip them
10// entirely and just use numbers. 11// entirely and just use numbers.
11#define _NUMNAV 0 12
12#define _DIABLO 1
13#define _GAMEPAD 2
14#define _GMACRO 3
15#define _MEDIA 4
16#define _COVECUBE 5
17
18
19enum custom_keycodes {
20 KC_DIABLO_CLEAR = SAFE_RANGE,
21 KC_P00,
22 KC_MAKE,
23 KC_RESET,
24 KC_OVERWATCH,
25 KC_SALT,
26 KC_MORESALT,
27 KC_SALTHARD,
28 KC_GOODGAME,
29 KC_SYMM,
30 KC_DOOMFIST,
31 KC_JUSTGAME,
32 KC_GLHF,
33 KC_TORB,
34 KC_AIM
35};
36 13
37// Fillers to make layering more clear 14// Fillers to make layering more clear
38#define _______ KC_TRNS 15#define _______ KC_TRNS
39#define XXXXXXX KC_NO 16#define XXXXXXX KC_NO
40#define GMACRO TG(_GMACRO) 17
18#define LMACRO TG(_MACROS)
41#define DIABLO TG(_DIABLO) 19#define DIABLO TG(_DIABLO)
42#define GAMEPAD TG(_GAMEPAD) 20#define GAMEPAD TG(_OVERWATCH)
43#define MEDIA TG(_MEDIA) 21#define MEDIA TG(_MEDIA)
44#define COVECUBE TG(_COVECUBE) 22#define COVECUBE TG(_COVECUBE)
45 23
46 24
47bool is_overwatch = false;
48 25
49 26
50#ifdef RGBLIGHT_ENABLE
51#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF);
52#define rgblight_set_red rgblight_sethsv (0x00, 0xFF, 0xFF);
53#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF);
54#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF);
55#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
56#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
57#define rgblight_set_yellow rgblight_sethsv (0x3C, 0xFF, 0xFF);
58#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF);
59#endif
60
61#ifdef TAP_DANCE_ENABLE 27#ifdef TAP_DANCE_ENABLE
62//define diablo macro timer variables 28//define diablo macro timer variables
63static uint16_t diablo_timer[4]; 29static uint16_t diablo_timer[4];
@@ -125,8 +91,8 @@ qk_tap_dance_action_t tap_dance_actions[] = {
125 91
126const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 92const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
127 93
128 [_NUMNAV] = KEYMAP( 94 [_NUMLOCK] = KEYMAP(
129 GMACRO, DIABLO, GAMEPAD, KC_NLCK, KC_SLCK, KC_COLN, KC_PSLS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 95 LMACRO, DIABLO, GAMEPAD, KC_NLCK, KC_SLCK, KC_COLN, KC_PSLS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
130 MEDIA, KC_CALC, COVECUBE,KC_P7, KC_P8, KC_P9, KC_PAST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 96 MEDIA, KC_CALC, COVECUBE,KC_P7, KC_P8, KC_P9, KC_PAST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
131 KC_HOME, KC_DEL, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PMNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 97 KC_HOME, KC_DEL, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PMNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
132 KC_END, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3, KC_PPLS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 98 KC_END, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3, KC_PPLS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
@@ -137,20 +103,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
137 KC_ESC, DIABLO, KC_V, KC_D, XXXXXXX, XXXXXXX, KC_L, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 103 KC_ESC, DIABLO, KC_V, KC_D, XXXXXXX, XXXXXXX, KC_L, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
138 KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_J, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 104 KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_J, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
139 KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G, KC_F, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 105 KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G, KC_F, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
140 KC_LCTL, (TD_DIABLO_1), TD(TD_DIABLO_2), TD(TD_DIABLO_3), TD(TD_DIABLO_4), KC_Z, KC_DIABLO_CLEAR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 106 KC_LCTL, TD(TD_DIABLO_1), TD(TD_DIABLO_2), TD(TD_DIABLO_3), TD(TD_DIABLO_4), KC_Z, KC_DIABLO_CLEAR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
141 KC_LALT, KC_F4, KC_F5, KC_F8, KC_F9, KC_F10, SFT_T(KC_SPACE), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ 107 KC_LALT, KC_F4, KC_F5, KC_F8, KC_F9, KC_F10, SFT_T(KC_SPACE), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
142 ), 108 ),
143 109
144 [_GAMEPAD] = KEYMAP( // Game pad layout designed primarily for Overwatch 110 [_OVERWATCH] = KEYMAP( // Game pad layout designed primarily for Overwatch
145 GMACRO, KC_ESC, GAMEPAD, KC_1, KC_2, KC_3, KC_4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 111 LMACRO, KC_ESC, GAMEPAD, KC_1, KC_2, KC_3, KC_4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
146 MEDIA, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 112 MEDIA, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
147 KC_Z, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 113 KC_Z, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
148 KC_Y, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 114 KC_Y, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
149 KC_F1, KC_U, KC_I, KC_Y, KC_V, KC_SPC, KC_V, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ 115 KC_F1, KC_U, KC_I, KC_Y, KC_V, KC_SPC, KC_V, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
150 ), 116 ),
151 117
152 [_GMACRO] = KEYMAP( 118 [_MACROS] = KEYMAP(
153 GMACRO, XXXXXXX, GAMEPAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 119 LMACRO, XXXXXXX, GAMEPAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
154 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 120 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
155 KC_SYMM, KC_TORB, KC_DOOMFIST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 121 KC_SYMM, KC_TORB, KC_DOOMFIST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
156 KC_GLHF, KC_GOODGAME, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 122 KC_GLHF, KC_GOODGAME, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
@@ -178,18 +144,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
178 144
179 145
180 146
181bool process_record_user(uint16_t keycode, keyrecord_t *record) { 147bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
182 uint16_t kc;
183 if (is_overwatch) {
184 kc = KC_BSPC;
185 }
186 else {
187 kc = KC_ENTER;
188 }
189 // Once a delay command is added to "SEND_STRING",
190 // replace these with X_BSPC and X_ENTER instead.
191 // and add "SS_TAP(kc) SS_DELAY(50)" to all of the
192 // SEND_STRING commands, to compress things.
193 switch (keycode) { 148 switch (keycode) {
194#ifdef TAP_DANCE_ENABLE 149#ifdef TAP_DANCE_ENABLE
195 case KC_DIABLO_CLEAR: // reset all Diable timers, disabling them 150 case KC_DIABLO_CLEAR: // reset all Diable timers, disabling them
@@ -203,130 +158,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
203 return false; 158 return false;
204 break; 159 break;
205#endif 160#endif
206 case KC_P00:
207 if (!record->event.pressed) {
208 register_code(KC_P0);
209 unregister_code(KC_P0);
210 register_code(KC_P0);
211 unregister_code(KC_P0);
212 }
213 return false;
214 break;
215 case KC_MAKE:
216 if (!record->event.pressed) {
217 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP SS_TAP(X_ENTER));
218 }
219 return false;
220 break;
221 case KC_RESET:
222 if (!record->event.pressed) {
223#ifdef RGBLIGHT_ENABLE
224 rgblight_enable();
225 rgblight_mode(1);
226 rgblight_setrgb(0xff, 0x00, 0x00);
227#endif
228 reset_keyboard();
229 }
230 return false;
231 break;
232
233 case KC_OVERWATCH: // reset all Diable timers, disabling them
234 if (record->event.pressed) {
235 is_overwatch = !is_overwatch;
236 }
237#ifdef RGBLIGHT_ENABLE
238 is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
239#endif
240 return false;
241 break;
242 case KC_SALT:
243 if (!record->event.pressed) {
244 register_code(kc);
245 unregister_code(kc);
246 _delay_ms(50);
247 SEND_STRING("Salt, salt, salt..." SS_TAP(X_ENTER));
248 }
249 return false;
250 break;
251 case KC_MORESALT:
252 if (!record->event.pressed) {
253 register_code(kc);
254 unregister_code(kc);
255 _delay_ms(50);
256 SEND_STRING("Please sir, can I have some more salt?!" SS_TAP(X_ENTER));
257 }
258 return false;
259 break;
260 case KC_SALTHARD:
261 if (!record->event.pressed) {
262 register_code(kc);
263 unregister_code(kc);
264 _delay_ms(50);
265 SEND_STRING("Your salt only makes my penis that much harder, and even more aggressive!" SS_TAP(X_ENTER));
266 }
267 return false;
268 break;
269 case KC_GOODGAME:
270 if (!record->event.pressed) {
271 register_code(kc);
272 unregister_code(kc);
273 _delay_ms(50);
274 SEND_STRING("Good game, everyone!" SS_TAP(X_ENTER));
275 }
276 return false;
277 break;
278 case KC_GLHF:
279 if (!record->event.pressed) {
280 register_code(kc);
281 unregister_code(kc);
282 _delay_ms(50);
283 SEND_STRING("Good luck, have fun!!!" SS_TAP(X_ENTER));
284 }
285 return false;
286 break;
287 case KC_SYMM:
288 if (!record->event.pressed) {
289 register_code(kc);
290 unregister_code(kc);
291 _delay_ms(50);
292 SEND_STRING("Left click to win!" SS_TAP(X_ENTER));
293 }
294 return false;
295 break;
296 case KC_JUSTGAME:
297
298 if (!record->event.pressed) {
299 register_code(kc);
300 unregister_code(kc);
301 _delay_ms(50);
302 SEND_STRING("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." SS_TAP(X_ENTER));
303 }
304 return false;
305 break;
306 case KC_TORB:
307
308 if (!record->event.pressed) {
309 register_code(kc);
310 unregister_code(kc);
311 _delay_ms(50);
312 SEND_STRING("That was positively riveting! SS_TAP(X_ENTER)");
313 }
314 return false;
315 break;
316 case KC_AIM:
317
318 if (!record->event.pressed) {
319 register_code(kc);
320 unregister_code(kc);
321 _delay_ms(50);
322 SEND_STRING("That aim is absolutely amazing. It's almost like you're a machine!" SS_TAP(X_ENTER));
323 _delay_ms(50);
324 SEND_STRING("Wait! That aim is TOO good! You're clearly using an aim hack! CHEATER!" SS_TAP(X_ENTER));
325 }
326 return false;
327 break;
328
329
330 } 161 }
331 return true; 162 return true;
332} 163}
@@ -369,51 +200,11 @@ void run_diablo_macro_check(void) {
369#endif 200#endif
370 201
371 202
372void matrix_init_user(void) { // Runs boot tasks for keyboard
373#ifdef RGBLIGHT_ENABLE
374 rgblight_enable();
375 rgblight_set_teal;
376 rgblight_mode(1);
377#endif
378};
379 203
380 204void matrix_scan_keymap(void) { // runs frequently to update info
381void matrix_scan_user(void) { // runs frequently to update info
382#ifdef TAP_DANCE_ENABLE 205#ifdef TAP_DANCE_ENABLE
383 // Run Diablo 3 macro checking code. 206 // Run Diablo 3 macro checking code.
384 run_diablo_macro_check(); 207 run_diablo_macro_check();
385#endif 208#endif
386}; 209};
387 210
388
389uint32_t layer_state_set_kb(uint32_t state) {
390#ifdef RGBLIGHT_ENABLE
391 rgblight_enable();
392 switch (biton32(state)) {
393 case _NUMNAV:
394 rgblight_set_teal;
395 rgblight_mode(2);
396 break;
397 case _GMACRO:
398 rgblight_set_orange;
399 is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
400 break;
401 case _DIABLO:
402 rgblight_set_red;
403 rgblight_mode(5);
404 break;
405 case _GAMEPAD:
406 rgblight_set_yellow;
407 rgblight_mode(1);
408 break;
409 case _MEDIA:
410 rgblight_set_blue;
411 rgblight_mode(1);
412 break;
413 case _COVECUBE:
414 rgblight_set_green;
415 rgblight_mode(2);
416 }
417#endif
418 return state;
419}
diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c
new file mode 100644
index 000000000..47565ff9c
--- /dev/null
+++ b/users/drashna/drashna.c
@@ -0,0 +1,379 @@
1#include "drashna.h"
2#include "quantum.h"
3#include "action.h"
4#include "version.h"
5
6__attribute__ ((weak))
7void matrix_init_keymap(void) {}
8
9__attribute__ ((weak))
10void matrix_scan_keymap(void) {}
11
12__attribute__ ((weak))
13bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
14 return true;
15}
16
17
18void matrix_init_user(void) {
19#ifdef RGBLIGHT_ENABLE
20 uint8_t default_layer = eeconfig_read_default_layer();
21
22 rgblight_enable();
23
24 if (true) {
25 if (default_layer & (1UL << _COLEMAK)) {
26 rgblight_set_magenta;
27 }
28 else if (default_layer & (1UL << _DVORAK)) {
29 rgblight_set_green;
30 }
31 else if (default_layer & (1UL << _WORKMAN)) {
32 rgblight_set_purple;
33 }
34 else {
35 rgblight_set_teal;
36 }
37 }
38 else
39 {
40 rgblight_set_red;
41 rgblight_mode(5);
42 }
43#endif
44 matrix_init_keymap();
45}
46
47void matrix_scan_user(void) {
48 matrix_scan_keymap();
49}
50
51#ifdef AUDIO_ENABLE
52float tone_qwerty[][2] = SONG(QWERTY_SOUND);
53float tone_dvorak[][2] = SONG(DVORAK_SOUND);
54float tone_colemak[][2] = SONG(COLEMAK_SOUND);
55float tone_workman[][2] = SONG(PLOVER_SOUND);
56#endif
57
58
59void persistent_default_layer_set(uint16_t default_layer) {
60 eeconfig_update_default_layer(default_layer);
61 default_layer_set(default_layer);
62}
63
64
65bool process_record_user(uint16_t keycode, keyrecord_t *record) {
66
67 uint16_t kc;
68 if (is_overwatch) {
69 kc = KC_BSPC;
70 }
71 else {
72 kc = KC_ENTER;
73 }
74#ifdef CONSOLE_ENABLE
75 xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed);
76#endif
77
78 switch (keycode) {
79 case KC_QWERTY:
80 if (record->event.pressed) {
81#ifdef AUDIO_ENABLE
82 PLAY_SONG(tone_qwerty);
83#endif
84 persistent_default_layer_set(1UL << _QWERTY);
85 }
86 return false;
87 break;
88 case KC_COLEMAK:
89 if (record->event.pressed) {
90#ifdef AUDIO_ENABLE
91 PLAY_SONG(tone_colemak);
92#endif
93 persistent_default_layer_set(1UL << _COLEMAK);
94 }
95 return false;
96 break;
97 case KC_DVORAK:
98 if (record->event.pressed) {
99#ifdef AUDIO_ENABLE
100 PLAY_SONG(tone_dvorak);
101#endif
102 persistent_default_layer_set(1UL << _DVORAK);
103 }
104 return false;
105 break;
106 case KC_WORKMAN:
107 if (record->event.pressed) {
108#ifdef AUDIO_ENABLE
109 PLAY_SONG(tone_workman);
110#endif
111 persistent_default_layer_set(1UL << _WORKMAN);
112 }
113 return false;
114 break;
115 case LOWER:
116 if (record->event.pressed) {
117 layer_on(_LOWER);
118 update_tri_layer(_LOWER, _RAISE, _ADJUST);
119 }
120 else {
121 layer_off(_LOWER);
122 update_tri_layer(_LOWER, _RAISE, _ADJUST);
123 }
124 return false;
125 break;
126 case RAISE:
127 if (record->event.pressed) {
128 layer_on(_RAISE);
129 update_tri_layer(_LOWER, _RAISE, _ADJUST);
130 }
131 else {
132 layer_off(_RAISE);
133 update_tri_layer(_LOWER, _RAISE, _ADJUST);
134 }
135 return false;
136 break;
137 case ADJUST:
138 if (record->event.pressed) {
139 layer_on(_ADJUST);
140 }
141 else {
142 layer_off(_ADJUST);
143 }
144 return false;
145 break;
146 case KC_OVERWATCH:
147 if (record->event.pressed) {
148 is_overwatch = !is_overwatch;
149 }
150#ifdef RGBLIGHT_ENABLE
151 is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
152#endif
153 return false;
154 break;
155 case KC_SALT:
156 if (!record->event.pressed) {
157 register_code(kc);
158 unregister_code(kc);
159 _delay_ms(50);
160 SEND_STRING("Salt, salt, salt...");
161 register_code(KC_ENTER);
162 unregister_code(KC_ENTER);
163 }
164 return false;
165 break;
166 case KC_MORESALT:
167 if (!record->event.pressed) {
168 register_code(kc);
169 unregister_code(kc);
170 _delay_ms(50);
171 SEND_STRING("Please sir, can I have some more salt?!");
172 register_code(KC_ENTER);
173 unregister_code(KC_ENTER);
174 }
175 return false;
176 break;
177 case KC_SALTHARD:
178 if (!record->event.pressed) {
179 register_code(kc);
180 unregister_code(kc);
181 _delay_ms(50);
182 SEND_STRING("Your salt only makes my penis that much harder, and even more aggressive!");
183 register_code(KC_ENTER);
184 unregister_code(KC_ENTER);
185 }
186 return false;
187 break;
188 case KC_GOODGAME:
189 if (!record->event.pressed) {
190 register_code(kc);
191 unregister_code(kc);
192 _delay_ms(50);
193 SEND_STRING("Good game, everyone!");
194 register_code(KC_ENTER);
195 unregister_code(KC_ENTER);
196 }
197 return false;
198 break;
199 case KC_GLHF:
200 if (!record->event.pressed) {
201 register_code(kc);
202 unregister_code(kc);
203 _delay_ms(50);
204 SEND_STRING("Good luck, have fun!!!");
205 register_code(KC_ENTER);
206 unregister_code(KC_ENTER);
207 }
208 return false;
209 break;
210 case KC_SYMM:
211 if (!record->event.pressed) {
212 register_code(kc);
213 unregister_code(kc);
214 _delay_ms(50);
215 SEND_STRING("Left click to win!");
216 register_code(KC_ENTER);
217 unregister_code(KC_ENTER);
218 }
219 return false;
220 break;
221 case KC_DOOMFIST:
222 if (!record->event.pressed) {
223 register_code(kc);
224 unregister_code(kc);
225 _delay_ms(50);
226 SEND_STRING("Hey, look at me. I'm Doomfist, and I'm overpowered! All I do is spam punches all day! I'm DPS, tank and defense, rolled into one! All I need is team healing to be complete!");
227 register_code(KC_ENTER);
228 unregister_code(KC_ENTER);
229 }
230 return false;
231 break;
232 case KC_JUSTGAME:
233 if (!record->event.pressed) {
234 register_code(kc);
235 unregister_code(kc);
236 _delay_ms(50);
237 SEND_STRING("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.");
238 register_code(KC_ENTER);
239 unregister_code(KC_ENTER);
240 }
241 return false;
242 break;
243 case KC_TORB:
244 if (!record->event.pressed) {
245 register_code(kc);
246 unregister_code(kc);
247 _delay_ms(50);
248 SEND_STRING("That was positively riveting!");
249 register_code(KC_ENTER);
250 unregister_code(KC_ENTER);
251 }
252 return false;
253 break;
254 case KC_AIM:
255 if (!record->event.pressed) {
256 register_code(kc);
257 unregister_code(kc);
258 _delay_ms(50);
259 SEND_STRING("That aim is absolutely amazing. It's almost like you're a machine!" SS_TAP(X_ENTER));
260 _delay_ms(50);
261 SEND_STRING("Wait! That aim is TOO good! You're clearly using an aim hack! CHEATER!" SS_TAP(X_ENTER));
262 }
263 return false;
264 break;
265 case KC_MAKE:
266 if (!record->event.pressed) {
267#ifdef RGBLIGHT_ENABLE
268 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP " RGBLIGHT_ENABLE=yes" SS_TAP(X_ENTER));
269#else
270 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP " RGBLIGHT_ENABLE=no"SS_TAP(X_ENTER));
271#endif
272 }
273 return false;
274 break;
275 case KC_RESET:
276 if (!record->event.pressed) {
277#ifdef RGBLIGHT_ENABLE
278 rgblight_enable();
279 rgblight_mode(1);
280 rgblight_setrgb(0xff, 0x00, 0x00);
281#endif
282 reset_keyboard();
283 }
284 return false;
285 break;
286 case EPRM:
287 if (record->event.pressed) {
288 eeconfig_init();
289 }
290 return false;
291 break;
292 case VRSN:
293 if (record->event.pressed) {
294 SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
295 }
296 return false;
297 break;
298 case KC_P00:
299 if (!record->event.pressed) {
300 register_code(KC_P0);
301 unregister_code(KC_P0);
302 register_code(KC_P0);
303 unregister_code(KC_P0);
304 }
305 return false;
306 break;
307 }
308 return process_record_keymap(keycode, record);
309}
310
311
312uint32_t layer_state_set_kb(uint32_t state) {
313#ifdef RGBLIGHT_ENABLE
314 uint8_t default_layer = eeconfig_read_default_layer();
315
316 switch (biton32(state)) {
317 case _NAV:
318 rgblight_set_blue;
319 rgblight_mode(1);
320 break;
321 case _SYMB:
322 rgblight_set_blue;
323 rgblight_mode(2);
324 break;
325 case _MOUS:
326 rgblight_set_yellow;
327 rgblight_mode(1);
328 break;
329 case _MACROS:
330 rgblight_set_orange;
331 is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
332 rgblight_mode(18);
333 break;
334 case _MEDIA:
335 rgblight_set_green;
336 rgblight_mode(22);
337 break;
338 case _OVERWATCH:
339 rgblight_set_orange;
340 rgblight_mode(17);
341 break;
342 case _DIABLO:
343 rgblight_set_red;
344 rgblight_mode(5);
345 break;
346 case _RAISE:
347 rgblight_set_yellow;
348 rgblight_mode(5);
349 break;
350 case _LOWER:
351 rgblight_set_orange;
352 rgblight_mode(5);
353 break;
354 case _ADJUST:
355 rgblight_set_red;
356 rgblight_mode(23);
357 break;
358 case _COVECUBE:
359 rgblight_set_green;
360 rgblight_mode(2);
361 default:
362 if (default_layer & (1UL << _COLEMAK)) {
363 rgblight_set_magenta;
364 }
365 else if (default_layer & (1UL << _DVORAK)) {
366 rgblight_set_green;
367 }
368 else if (default_layer & (1UL << _WORKMAN)) {
369 rgblight_set_purple;
370 }
371 else {
372 rgblight_set_teal;
373 }
374 rgblight_mode(1);
375 break;
376 }
377#endif
378 return state;
379}
diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h
new file mode 100644
index 000000000..0e7b25d2d
--- /dev/null
+++ b/users/drashna/drashna.h
@@ -0,0 +1,73 @@
1#ifndef USERSPACE
2#define USERSPACE
3
4#include "quantum.h"
5
6// Define layer names
7#define _QWERTY 0
8#define _NUMLOCK 0
9#define _COLEMAK 1
10#define _DVORAK 2
11#define _WORKMAN 3
12#define _NAV 5
13#define _COVECUBE 6
14#define _SYMB 8
15#define _OVERWATCH 9
16#define _DIABLO 10
17#define _MOUS 11
18#define _MACROS 12
19#define _MEDIA 13
20#define _LOWER 14
21#define _RAISE 15
22#define _ADJUST 16
23
24
25//define modifiers
26#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
27#define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
28#define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
29
30#ifdef RGBLIGHT_ENABLE
31#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF);
32#define rgblight_set_red rgblight_sethsv (0x00, 0xFF, 0xFF);
33#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF);
34#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF);
35#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
36#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
37#define rgblight_set_yellow rgblight_sethsv (0x3C, 0xFF, 0xFF);
38#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF);
39#endif
40
41__attribute__ ((weak))
42bool is_overwatch = false;
43
44enum custom_keycodes {
45 PLACEHOLDER = SAFE_RANGE, // can always be here
46 EPRM,
47 VRSN,
48 KC_QWERTY,
49 KC_COLEMAK,
50 KC_DVORAK,
51 KC_WORKMAN,
52 LOWER,
53 RAISE,
54 ADJUST,
55 KC_DIABLO_CLEAR,
56 KC_OVERWATCH,
57 KC_SALT,
58 KC_MORESALT,
59 KC_SALTHARD,
60 KC_GOODGAME,
61 KC_SYMM,
62 KC_DOOMFIST,
63 KC_JUSTGAME,
64 KC_GLHF,
65 KC_TORB,
66 KC_AIM,
67 KC_MAKE,
68 KC_RESET,
69 KC_P00,
70 NEWPLACEHOLDER
71};
72
73#endif
diff --git a/users/drashna/readme.md b/users/drashna/readme.md
new file mode 100644
index 000000000..0d553f08e
--- /dev/null
+++ b/users/drashna/readme.md
@@ -0,0 +1,14 @@
1Copyright 2017 Christopher Courtney <drashna@live.com> @drashna
2
3This program is free software: you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation, either version 2 of the License, or
6(at your option) any later version.
7
8This program is distributed in the hope that it will be useful,
9but WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11GNU General Public License for more details.
12
13You should have received a copy of the GNU General Public License
14along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk
new file mode 100644
index 000000000..0150bb608
--- /dev/null
+++ b/users/drashna/rules.mk
@@ -0,0 +1,2 @@
1
2SRC += drashna.c