aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/ergodox_ez/keymaps/drashna-custom/config.h2
-rw-r--r--keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c186
-rw-r--r--keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk7
-rw-r--r--keyboards/ergodox_ez/keymaps/drashna/keymap.c87
-rw-r--r--keyboards/handwired/woodpad/config.h1
-rw-r--r--keyboards/handwired/woodpad/keymaps/drashna/config.h2
-rw-r--r--keyboards/handwired/woodpad/keymaps/drashna/keymap.c131
-rw-r--r--keyboards/handwired/woodpad/keymaps/drashna/rules.mk4
-rw-r--r--keyboards/orthodox/keymaps/drashna/config.h11
-rw-r--r--keyboards/orthodox/keymaps/drashna/keymap.c236
-rw-r--r--keyboards/orthodox/keymaps/drashna/rules.mk9
-rw-r--r--keyboards/viterbi/keymaps/drashna/config.h4
-rw-r--r--keyboards/viterbi/keymaps/drashna/keymap.c265
-rw-r--r--keyboards/viterbi/keymaps/drashna/rules.mk3
14 files changed, 490 insertions, 458 deletions
diff --git a/keyboards/ergodox_ez/keymaps/drashna-custom/config.h b/keyboards/ergodox_ez/keymaps/drashna-custom/config.h
index 5fef1e0d8..c1ebf174a 100644
--- a/keyboards/ergodox_ez/keymaps/drashna-custom/config.h
+++ b/keyboards/ergodox_ez/keymaps/drashna-custom/config.h
@@ -13,6 +13,4 @@
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#define FORCE_NKRO
17
18#endif \ No newline at end of file 16#endif \ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c b/keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c
index 5440c3346..bdc4eed48 100644
--- a/keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c
@@ -48,17 +48,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
48//define layer change stuff for underglow indicator 48//define layer change stuff for underglow indicator
49bool skip_leds = false; 49bool skip_leds = false;
50 50
51#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF); 51#ifdef RGBLIGHT_ENABLE
52#define rgblight_set_red rgblight_sethsv(0x00, 0xFF, 0xFF); 52#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF);
53#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF); 53#define rgblight_set_red rgblight_sethsv (0x00, 0xFF, 0xFF);
54#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF); 54#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF);
55#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF); 55#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF);
56#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF); 56#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
57#define rgblight_set_urine rgblight_sethsv (0x3C, 0xFF, 0xFF); 57#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
58#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF); 58#define rgblight_set_yellow rgblight_sethsv (0x3C, 0xFF, 0xFF);
59//This is both for underglow, and Diablo 3 macros 59#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF);
60 60#endif
61static uint8_t current_layer = 0;
62 61
63//define diablo macro timer variables 62//define diablo macro timer variables
64static uint16_t diablo_timer[4]; 63static uint16_t diablo_timer[4];
@@ -136,11 +135,13 @@ void dance_flsh_each(qk_tap_dance_state_t *state, void *user_data) {
136// and set the underglow to red, because red == bad 135// and set the underglow to red, because red == bad
137void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) { 136void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) {
138 if (state->count >= 4) { 137 if (state->count >= 4) {
138#ifdef RGBLIGHT_ENABLE
139 rgblight_enable(); 139 rgblight_enable();
140 rgblight_mode(1); 140 rgblight_mode(1);
141 rgblight_setrgb(0xff,0x00,0x00); 141 rgblight_setrgb(0xff,0x00,0x00);
142 reset_keyboard(); 142#endif
143 reset_tap_dance(state); 143 reset_tap_dance(state);
144 reset_keyboard();
144 } 145 }
145} 146}
146 147
@@ -229,7 +230,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
229 KC_LSHIFT, LCTL_T(KC_Z),KC_X, KC_C, KC_V, KC_B, TG(OVERWATCH), 230 KC_LSHIFT, LCTL_T(KC_Z),KC_X, KC_C, KC_V, KC_B, TG(OVERWATCH),
230 LT(SYMB,KC_GRAVE),KC_QUOTE, KC_LGUI, KC_LBRACKET,KC_RBRACKET, 231 LT(SYMB,KC_GRAVE),KC_QUOTE, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
231 232
232 ALT_T(KC_APPLICATION), KC_LEAD, 233 ALT_T(KC_APPLICATION), KC_LGUI,
233 KC_HOME, 234 KC_HOME,
234 KC_SPACE, KC_BSPACE, KC_END, 235 KC_SPACE, KC_BSPACE, KC_END,
235 236
@@ -237,8 +238,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
237 TG(DIABLO), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH, 238 TG(DIABLO), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
238 KC_H, KC_J, KC_K, KC_L, KC_SCOLON, GUI_T(KC_QUOTE), 239 KC_H, KC_J, KC_K, KC_L, KC_SCOLON, GUI_T(KC_QUOTE),
239 TG(OVERWATCH), KC_N, KC_M, KC_COMMA, KC_DOT, RCTL_T(KC_SLASH),KC_RSHIFT, 240 TG(OVERWATCH), KC_N, KC_M, KC_COMMA, KC_DOT, RCTL_T(KC_SLASH),KC_RSHIFT,
240 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1, 241 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(SYMB),
241 KC_LALT, CTL_T(KC_ESCAPE), 242 KC_LEAD, CTL_T(KC_ESCAPE),
242 KC_PGUP, 243 KC_PGUP,
243 KC_PGDOWN, KC_DELETE, KC_ENTER 244 KC_PGDOWN, KC_DELETE, KC_ENTER
244 ), 245 ),
@@ -280,7 +281,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
280 TG(DIABLO), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, 281 TG(DIABLO), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
281 KC_H, KC_N, KC_E, KC_I, KC_O, GUI_T(KC_QUOTE), 282 KC_H, KC_N, KC_E, KC_I, KC_O, GUI_T(KC_QUOTE),
282 TG(OVERWATCH),KC_K, KC_M, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), KC_RSHIFT, 283 TG(OVERWATCH),KC_K, KC_M, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), KC_RSHIFT,
283 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1, 284 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(SYMB),
284 KC_LALT, CTL_T(KC_ESC), 285 KC_LALT, CTL_T(KC_ESC),
285 KC_PGUP, 286 KC_PGUP,
286 KC_PGDN,KC_DELETE, KC_ENT 287 KC_PGDN,KC_DELETE, KC_ENT
@@ -323,7 +324,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
323 TG(DIABLO), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, 324 TG(DIABLO), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
324 KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, 325 KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
325 TG(OVERWATCH),KC_B, KC_M, KC_W, KC_V, RCTL_T(KC_Z), KC_RSHIFT, 326 TG(OVERWATCH),KC_B, KC_M, KC_W, KC_V, RCTL_T(KC_Z), KC_RSHIFT,
326 KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, KC_FN1, 327 KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, TT(SYMB),
327 KC_LALT, CTL_T(KC_ESC), 328 KC_LALT, CTL_T(KC_ESC),
328 KC_PGUP, 329 KC_PGUP,
329 KC_PGDN,KC_DELETE, KC_ENT 330 KC_PGDN,KC_DELETE, KC_ENT
@@ -366,7 +367,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
366 TG(DIABLO), KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSLS, 367 TG(DIABLO), KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSLS,
367 KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOTE, 368 KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOTE,
368 TG(OVERWATCH),KC_K, KC_L, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), KC_RSHIFT, 369 TG(OVERWATCH),KC_K, KC_L, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), KC_RSHIFT,
369 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1, 370 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(SYMB),
370 KC_LALT, CTL_T(KC_ESC), 371 KC_LALT, CTL_T(KC_ESC),
371 KC_PGUP, 372 KC_PGUP,
372 KC_PGDN,KC_DELETE, KC_ENT 373 KC_PGDN,KC_DELETE, KC_ENT
@@ -398,7 +399,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
398 VRSN, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_DVORAK, 399 VRSN, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_DVORAK,
399 KC_MAKEQMK, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE, 400 KC_MAKEQMK, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE,
400 TD(TD_FLSH), KC_PERC, KC_CIRC, KC_LBRACKET,KC_RBRACKET,KC_TILD, KC_COLEMAK, 401 TD(TD_FLSH), KC_PERC, KC_CIRC, KC_LBRACKET,KC_RBRACKET,KC_TILD, KC_COLEMAK,
401 KC_NO, KC_AMPR, KC_ASTR, KC_COLN, KC_SCOLON, 402 KC_TRNS, KC_AMPR, KC_ASTR, KC_COLN, KC_SCOLON,
402 KC_TRNS, KC_TRNS, 403 KC_TRNS, KC_TRNS,
403 KC_TRNS, 404 KC_TRNS,
404 KC_TRNS, KC_TRNS, KC_TRNS, 405 KC_TRNS, KC_TRNS, KC_TRNS,
@@ -540,16 +541,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
540 541
541}; 542};
542 543
543const uint16_t PROGMEM fn_actions[] = {
544 [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),
545 // FN1 - Momentary Layer 1 (Symbols)
546};
547
548void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
549{
550
551}
552
553 544
554void persistent_default_layer_set(uint16_t default_layer) { 545void persistent_default_layer_set(uint16_t default_layer) {
555 eeconfig_update_default_layer(default_layer); 546 eeconfig_update_default_layer(default_layer);
@@ -558,6 +549,9 @@ void persistent_default_layer_set(uint16_t default_layer) {
558 549
559 550
560bool process_record_user(uint16_t keycode, keyrecord_t *record) { 551bool process_record_user(uint16_t keycode, keyrecord_t *record) {
552#ifdef CONSOLE_ENABLE
553 xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed);
554#endif
561 switch (keycode) { 555 switch (keycode) {
562 // dynamically generate these. 556 // dynamically generate these.
563 case EPRM: 557 case EPRM:
@@ -574,7 +568,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
574 break; 568 break;
575 case RGB_SLD: 569 case RGB_SLD:
576 if (record->event.pressed) { 570 if (record->event.pressed) {
571#ifdef RGBLIGHT_ENABLE
577 rgblight_mode(1); 572 rgblight_mode(1);
573#endif
578 } 574 }
579 return false; 575 return false;
580 break; 576 break;
@@ -668,8 +664,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
668 return false; 664 return false;
669 break; 665 break;
670 case KC_MAKEQMK: 666 case KC_MAKEQMK:
671 if (record->event.pressed) { 667 if (!record->event.pressed) {
672 SEND_STRING("make ergodox_ez:drashna-custom:teensy"SS_TAP(X_ENTER)); 668 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP ":teensy"SS_TAP(X_ENTER));
673 } 669 }
674 return false; 670 return false;
675 break; 671 break;
@@ -678,10 +674,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
678 return true; 674 return true;
679} 675}
680 676
677#ifdef TAP_DANCE_ENABLE
681 678
682// Sends the key press to system, but only if on the Diablo layer 679// Sends the key press to system, but only if on the Diablo layer
683void send_diablo_keystroke (uint8_t diablo_key) { 680void send_diablo_keystroke (uint8_t diablo_key) {
684 if (current_layer == DIABLO) { 681 if (biton32(layer_state) == DIABLO) {
685 switch (diablo_key) { 682 switch (diablo_key) {
686 case 0: 683 case 0:
687 SEND_STRING("1"); 684 SEND_STRING("1");
@@ -713,16 +710,33 @@ void run_diablo_macro_check(void) {
713 710
714} 711}
715 712
713#endif
714
715
716void matrix_init_user(void) { // Runs boot tasks for keyboard 716void matrix_init_user(void) { // Runs boot tasks for keyboard
717#ifdef RGBLIGHT_ENABLE
718 uint8_t default_layer = eeconfig_read_default_layer();
717 719
720 rgblight_enable();
721 if (default_layer & (1UL << COLEMAK)) {
722 rgblight_set_magenta;
723 }
724 else if (default_layer & (1UL << DVORAK)) {
725 rgblight_set_green;
726 }
727 else if (default_layer & (1UL << WORKMAN)) {
728 rgblight_set_purple;
729 }
730 else {
731 rgblight_set_teal;
732 }
733#endif
718}; 734};
719 735
720LEADER_EXTERNS(); 736LEADER_EXTERNS();
721 737
722void matrix_scan_user(void) { // runs frequently to update info 738void matrix_scan_user(void) { // runs frequently to update info
723 uint8_t modifiders = get_mods(); 739 uint8_t modifiders = get_mods();
724 uint8_t layer = biton32(layer_state);
725 static bool has_layer_changed = true;
726 740
727 if (!skip_leds) { 741 if (!skip_leds) {
728 ergodox_board_led_off(); 742 ergodox_board_led_off();
@@ -744,70 +758,29 @@ void matrix_scan_user(void) { // runs frequently to update info
744 } 758 }
745 759
746 } 760 }
747 if (layer != current_layer) {
748 has_layer_changed = true;
749 current_layer = layer;
750 }
751 // Check layer, and apply color if its changed since last check
752 if (has_layer_changed) {
753 uint8_t default_layer = 0;
754 default_layer = eeconfig_read_default_layer();
755
756 switch (layer) {
757 case SYMB:
758 rgblight_set_blue;
759 rgblight_mode(2);
760 break;
761 case OVERWATCH:
762 rgblight_set_orange;
763 rgblight_mode(17);
764 break;
765 case DIABLO:
766 rgblight_set_red;
767 rgblight_mode(5);
768 break;
769 case MOUS:
770 rgblight_set_urine;
771 rgblight_mode(1);
772 break;
773 case 7:
774 rgblight_sethsv (255,255,255);
775 rgblight_mode(1);
776 break;
777 default:
778 if (default_layer & (1UL << COLEMAK)) {
779 rgblight_set_green;
780 }
781 else if (default_layer & (1UL << DVORAK)) {
782 rgblight_set_magenta;
783 }
784 else if (default_layer & (1UL << WORKMAN)) {
785 rgblight_set_purple;
786 }
787 else {
788 rgblight_set_teal;
789 }
790 rgblight_mode(1);
791 break;
792 }
793 has_layer_changed = false;
794 }
795 761
796 // Run Diablo 3 macro checking code. 762 // Run Diablo 3 macro checking code.
763#ifdef TAP_DANCE_ENABLE
797 run_diablo_macro_check(); 764 run_diablo_macro_check();
798#ifdef LEADER_KEYS 765#endif
799 LEADER_DICTIONARY() { 766 LEADER_DICTIONARY() {
800 leading = false; 767 leading = false;
801 leader_end(); 768 leader_end();
802 SEQ_ONE_KEY(KC_C) { 769 SEQ_ONE_KEY(KC_C) {
803 SEND_STRING("Covecube"); 770 SEND_STRING("Covecube");
804 } 771 }
772 SEQ_ONE_KEY(KC_D) {
773 SEND_STRING("StableBit CloudDrive");
774 }
775 SEQ_ONE_KEY(KC_L) {
776 register_code(KC_LGUI);
777 register_code(KC_L);
778 unregister_code(KC_L);
779 unregister_code(KC_LGUI);
780 }
805 SEQ_TWO_KEYS(KC_S, KC_D) { 781 SEQ_TWO_KEYS(KC_S, KC_D) {
806 SEND_STRING("StableBit DrivePool"); 782 SEND_STRING("StableBit DrivePool");
807 } 783 }
808 SEQ_TWO_KEYS(KC_C, KC_D) {
809 SEND_STRING("StableBit CloudDrive");
810 }
811 SEQ_TWO_KEYS(KC_S, KC_C) { 784 SEQ_TWO_KEYS(KC_S, KC_C) {
812 SEND_STRING("StableBit Scanner"); 785 SEND_STRING("StableBit Scanner");
813 } 786 }
@@ -815,6 +788,45 @@ void matrix_scan_user(void) { // runs frequently to update info
815 SEND_STRING("StableBit Troubleshooter"); 788 SEND_STRING("StableBit Troubleshooter");
816 } 789 }
817 } 790 }
818#endif
819}; 791};
820 792
793uint32_t layer_state_set_kb(uint32_t state) {
794#ifdef RGBLIGHT_ENABLE
795 uint8_t default_layer = eeconfig_read_default_layer();
796
797 switch (biton32(state)) {
798 case SYMB:
799 rgblight_set_blue;
800 rgblight_mode(2);
801 break;
802 case OVERWATCH:
803 rgblight_set_orange;
804 rgblight_mode(17);
805 break;
806 case DIABLO:
807 rgblight_set_red;
808 rgblight_mode(5);
809 break;
810 case MOUS:
811 rgblight_set_yellow;
812 rgblight_mode(1);
813 break;
814 default:
815 if (default_layer & (1UL << COLEMAK)) {
816 rgblight_set_green;
817 }
818 else if (default_layer & (1UL << DVORAK)) {
819 rgblight_set_magenta;
820 }
821 else if (default_layer & (1UL << WORKMAN)) {
822 rgblight_set_purple;
823 }
824 else {
825 rgblight_set_teal;
826 }
827 rgblight_mode(1);
828 break;
829 }
830#endif
831 return state;
832}
diff --git a/keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk b/keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk
index 5ab769c68..0fa7cd227 100644
--- a/keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk
+++ b/keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk
@@ -1,10 +1,13 @@
1TAP_DANCE_ENABLE = yes 1TAP_DANCE_ENABLE = yes
2SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend 2SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
3COMMAND_ENABLE = no # Commands for debug and configuration 3COMMAND_ENABLE = yes # Commands for debug and configuration
4RGBLIGHT_ENABLE = yes 4RGBLIGHT_ENABLE = yes
5MIDI_ENABLE = no 5MIDI_ENABLE = no
6CONSOLE_ENABLE = no 6CONSOLE_ENABLE = no
7LEADER_KEYS = no 7LEADER_KEYS = no
8
9EXTRAFLAGS = -flto
10
8ifndef QUANTUM_DIR 11ifndef QUANTUM_DIR
9 include ../../../../Makefile 12 include ../../../../Makefile
10endif 13endif
diff --git a/keyboards/ergodox_ez/keymaps/drashna/keymap.c b/keyboards/ergodox_ez/keymaps/drashna/keymap.c
index cef0e9c39..97ede9431 100644
--- a/keyboards/ergodox_ez/keymaps/drashna/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/drashna/keymap.c
@@ -17,8 +17,6 @@
17#define MOUS 2 17#define MOUS 2
18 18
19#ifdef LAYER_UNDERGLOW_LIGHTING 19#ifdef LAYER_UNDERGLOW_LIGHTING
20bool has_layer_changed = true;
21
22#define rgblight_set_teal rgblight_setrgb(0x00, 0xFF, 0xFF) 20#define rgblight_set_teal rgblight_setrgb(0x00, 0xFF, 0xFF)
23#define rgblight_set_red rgblight_setrgb(0xFF, 0x00, 0x00) 21#define rgblight_set_red rgblight_setrgb(0xFF, 0x00, 0x00)
24#define rgblight_set_blue rgblight_setrgb(0x00, 0xFF, 0x00); 22#define rgblight_set_blue rgblight_setrgb(0x00, 0xFF, 0x00);
@@ -100,20 +98,23 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
100 return true; 98 return true;
101} 99}
102 100
101void matrix_init_user(void) {
102#ifdef LAYER_UNDERGLOW_LIGHTING
103 rgblight_enable();
104 rgblight_set_teal;
105 rgblight_mode(1);
106#endif
103 107
104 108}
105 109
106void matrix_scan_user(void) { 110void matrix_scan_user(void) {
107 111
108 uint8_t new_layer = biton32(layer_state);
109
110 ergodox_board_led_off(); 112 ergodox_board_led_off();
111 ergodox_right_led_1_off(); 113 ergodox_right_led_1_off();
112 ergodox_right_led_2_off(); 114 ergodox_right_led_2_off();
113 ergodox_right_led_3_off(); 115 ergodox_right_led_3_off();
114 116
115#ifdef LAYER_UNDERGLOW_LIGHTING 117#ifdef LAYER_UNDERGLOW_LIGHTING
116 static uint8_t old_layer = 0;
117 uint8_t modifiders = get_mods(); 118 uint8_t modifiders = get_mods();
118 119
119 if ( modifiders & MODS_SHIFT_MASK) { 120 if ( modifiders & MODS_SHIFT_MASK) {
@@ -124,44 +125,10 @@ void matrix_scan_user(void) {
124 } 125 }
125 if ( modifiders & MODS_ALT_MASK) { 126 if ( modifiders & MODS_ALT_MASK) {
126 ergodox_right_led_3_on(); 127 ergodox_right_led_3_on();
127 } 128 }
128 129#else
129 if (old_layer != new_layer) { 130 uint8_t layer = biton32(layer_state);
130 has_layer_changed = true; 131 switch (layer) {
131 old_layer = new_layer;
132 }
133 if (has_layer_changed) {
134 switch (new_layer) {
135 case 1:
136 rgblight_set_red;
137 break;
138 case 2:
139 rgblight_set_blue;
140 break;
141 case 3:
142 rgblight_set_green;
143 break;
144 case 4:
145 rgblight_set_yellow;
146 break;
147 case 5:
148 rgblight_setrgb(0xFF, 0xFF, 0x00);
149 break;
150 case 6:
151 rgblight_setrgb(0xFF, 0xFF, 0x00);
152 break;
153 case 7:
154 rgblight_setrgb(0xFF, 0xFF, 0xFF);
155 break;
156 default:
157 rgblight_set_teal;
158 break;
159 }
160 has_layer_changed = false;
161 }
162
163#else
164 switch (new_layer) {
165 case 1: 132 case 1:
166 ergodox_right_led_1_on(); 133 ergodox_right_led_1_on();
167 break; 134 break;
@@ -193,3 +160,35 @@ void matrix_scan_user(void) {
193 } 160 }
194#endif 161#endif
195}; 162};
163
164uint32_t layer_state_set_kb(uint32_t state) {
165#ifdef LAYER_UNDERGLOW_LIGHTING
166 switch (biton32(state)) {
167 case 1:
168 rgblight_set_red;
169 break;
170 case 2:
171 rgblight_set_blue;
172 break;
173 case 3:
174 rgblight_set_green;
175 break;
176 case 4:
177 rgblight_set_yellow;
178 break;
179 case 5:
180 rgblight_setrgb(0xFF, 0xFF, 0x00);
181 break;
182 case 6:
183 rgblight_setrgb(0xFF, 0xFF, 0x00);
184 break;
185 case 7:
186 rgblight_setrgb(0xFF, 0xFF, 0xFF);
187 break;
188 default:
189 rgblight_set_teal;
190 break;
191 }
192#endif
193 return state;
194}
diff --git a/keyboards/handwired/woodpad/config.h b/keyboards/handwired/woodpad/config.h
index 2c8a8bef7..39a466850 100644
--- a/keyboards/handwired/woodpad/config.h
+++ b/keyboards/handwired/woodpad/config.h
@@ -53,6 +53,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
53// #define BACKLIGHT_BREATHING 53// #define BACKLIGHT_BREATHING
54// #define BACKLIGHT_LEVELS 3 54// #define BACKLIGHT_LEVELS 3
55 55
56#define CATERINA_BOOTLOADER
56 57
57/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ 58/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
58#define DEBOUNCING_DELAY 5 59#define DEBOUNCING_DELAY 5
diff --git a/keyboards/handwired/woodpad/keymaps/drashna/config.h b/keyboards/handwired/woodpad/keymaps/drashna/config.h
index 2b151606d..be1e4df59 100644
--- a/keyboards/handwired/woodpad/keymaps/drashna/config.h
+++ b/keyboards/handwired/woodpad/keymaps/drashna/config.h
@@ -23,7 +23,7 @@
23#define TAPPING_TERM 200 23#define TAPPING_TERM 200
24#endif // TAP_DANCE_ENABLE 24#endif // TAP_DANCE_ENABLE
25 25
26#define CATERINA_BOOTLOADER 26
27 27
28 28
29#ifdef RGBLIGHT_ENABLE 29#ifdef RGBLIGHT_ENABLE
diff --git a/keyboards/handwired/woodpad/keymaps/drashna/keymap.c b/keyboards/handwired/woodpad/keymaps/drashna/keymap.c
index f6476ef66..4a2893e4a 100644
--- a/keyboards/handwired/woodpad/keymaps/drashna/keymap.c
+++ b/keyboards/handwired/woodpad/keymaps/drashna/keymap.c
@@ -29,15 +29,22 @@
29#define _______ KC_TRNS 29#define _______ KC_TRNS
30#define XXXXXXX KC_NO 30#define XXXXXXX KC_NO
31 31
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
32 42
33//define layer change stuff for underglow indicator 43//define layer change stuff for underglow indicator
34bool skip_leds = false; 44bool skip_leds = false;
35 45
36bool is_overwatch = false; 46bool is_overwatch = false;
37 47
38//This is both for underglow, and Diablo 3 macros
39bool has_layer_changed = false;
40static uint8_t current_layer;
41 48
42#ifdef TAP_DANCE_ENABLE 49#ifdef TAP_DANCE_ENABLE
43//define diablo macro timer variables 50//define diablo macro timer variables
@@ -65,7 +72,8 @@ enum custom_keycodes {
65 KC_DOOMFIST, 72 KC_DOOMFIST,
66 KC_JUSTGAME, 73 KC_JUSTGAME,
67 KC_GLHF, 74 KC_GLHF,
68 KC_TORB 75 KC_TORB,
76 KC_MAKE
69}; 77};
70 78
71#ifdef TAP_DANCE_ENABLE 79#ifdef TAP_DANCE_ENABLE
@@ -163,7 +171,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
163), 171),
164[_MEDIA] = KEYMAP( /* Base */ 172[_MEDIA] = KEYMAP( /* Base */
165 RESET, KC_MUTE, KC_VOLD, KC_VOLU,\ 173 RESET, KC_MUTE, KC_VOLD, KC_VOLU,\
166 _______, _______, RGB_HUI, RGB_HUD, \ 174 KC_MAKE, _______, RGB_HUI, RGB_HUD, \
167 KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, \ 175 KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, \
168 RGB_TOG, RGB_MOD, RGB_SAI, RGB_VAI, \ 176 RGB_TOG, RGB_MOD, RGB_SAI, RGB_VAI, \
169 _______, _______, RGB_SAD, RGB_VAD \ 177 _______, _______, RGB_SAD, RGB_VAD \
@@ -171,22 +179,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
171 179
172}; 180};
173 181
174const uint16_t PROGMEM fn_actions[] = {
175
176};
177 182
178const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
179{
180 switch (id) {
181 case 0:
182 if (record->event.pressed) {
183 // Output Keyboard Firmware info
184 SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP );
185 return false;
186 }
187 }
188 return MACRO_NONE;
189};
190void numlock_led_on(void) { 183void numlock_led_on(void) {
191 PORTF |= (1<<7); 184 PORTF |= (1<<7);
192} 185}
@@ -216,11 +209,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
216 return false; 209 return false;
217 break; 210 break;
218#endif 211#endif
219 case KC_OVERWATCH: // reset all Diable timers, disabling them 212 case KC_OVERWATCH:
220 if (record->event.pressed) { 213 if (record->event.pressed) {
221 is_overwatch = !is_overwatch; 214 is_overwatch = !is_overwatch;
222 has_layer_changed = true;
223 } 215 }
216#ifdef RGBLIGHT_ENABLE
217 is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
218#endif
224 return false; 219 return false;
225 break; 220 break;
226 case KC_SALT: 221 case KC_SALT:
@@ -324,6 +319,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
324 } 319 }
325 return false; 320 return false;
326 break; 321 break;
322 case KC_MAKE:
323 if (!record->event.pressed) {
324 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP SS_TAP(X_ENTER));
325 }
326 return false;
327 break;
328
327 329
328 } 330 }
329 return true; 331 return true;
@@ -332,7 +334,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
332 334
333// Sends the key press to system, but only if on the Diablo layer 335// Sends the key press to system, but only if on the Diablo layer
334void send_diablo_keystroke(uint8_t diablo_key) { 336void send_diablo_keystroke(uint8_t diablo_key) {
335 if (current_layer == _DIABLO) { 337 if (biton32(layer_state) == _DIABLO) {
336 switch (diablo_key) { 338 switch (diablo_key) {
337 case 0: 339 case 0:
338 SEND_STRING("1"); 340 SEND_STRING("1");
@@ -365,10 +367,16 @@ void run_diablo_macro_check(void) {
365} 367}
366#endif 368#endif
367void matrix_init_user(void) { 369void matrix_init_user(void) {
368 has_layer_changed = true;
369 // set Numlock LED to output and low 370 // set Numlock LED to output and low
370 DDRF |= (1<<7); 371 DDRF |= (1<<7);
371 PORTF &= ~(1<<7); 372 PORTF &= ~(1<<7);
373
374#ifdef RGBLIGHT_ENABLE
375 rgblight_enable();
376 rgblight_set_teal;
377 rgblight_mode(1);
378#endif
379
372 if (!(host_keyboard_leds() & (1 << USB_LED_NUM_LOCK)) ){ 380 if (!(host_keyboard_leds() & (1 << USB_LED_NUM_LOCK)) ){
373 register_code(KC_NUMLOCK); 381 register_code(KC_NUMLOCK);
374 unregister_code(KC_NUMLOCK); 382 unregister_code(KC_NUMLOCK);
@@ -376,69 +384,46 @@ void matrix_init_user(void) {
376} 384}
377 385
378void matrix_scan_user(void) { 386void matrix_scan_user(void) {
379 uint8_t layer = biton32(layer_state);
380#ifdef RGBLIGHT_ENABLE
381
382 numlock_led_off(); 387 numlock_led_off();
383 // Check layer, and apply color if its changed since last check 388 if (is_overwatch && biton32(layer_state) == _MACROS) {
384 switch (layer) { 389 numlock_led_on();
390 }
391
392 // Run Diablo 3 macro checking code.
393#ifdef TAP_DANCE_ENABLE
394 run_diablo_macro_check();
395#endif
396}
397
398uint32_t layer_state_set_kb(uint32_t state) {
399#ifdef RGBLIGHT_ENABLE
400// Check layer, and apply color if its changed since last check
401 switch (biton32(state)) {
385 case _NAV: 402 case _NAV:
386 if (has_layer_changed) { 403 rgblight_set_blue;
387 rgblight_sethsv(240, 255, 255); 404 rgblight_mode(1);
388 rgblight_mode(1);
389 }
390 break; 405 break;
391 case _MACROS: 406 case _MACROS:
392 if (has_layer_changed) { 407 rgblight_set_orange;
393 rgblight_sethsv(30, 255, 255); 408 is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
394 if (is_overwatch) {
395 rgblight_mode(17);
396 } else {
397 rgblight_mode(18);
398 }
399 }
400 if (is_overwatch) {
401 numlock_led_on();
402 }
403 break; 409 break;
404 case _DIABLO: 410 case _DIABLO:
405 if (has_layer_changed) { 411 rgblight_set_red;
406 rgblight_sethsv(0, 255, 255); 412 rgblight_mode(5);
407 rgblight_mode(5);
408 }
409 break; 413 break;
410 case _MEDIA: 414 case _MEDIA:
411 if (has_layer_changed) { 415 rgblight_set_green;
412 rgblight_sethsv(120, 255, 255); 416 rgblight_mode(22);
413 rgblight_mode(22);
414 }
415 break; 417 break;
416 default: 418 default:
417 if (has_layer_changed) { 419 rgblight_set_teal;
418 rgblight_sethsv(195, 255, 255); 420 rgblight_mode(1);
419 rgblight_mode(1);
420 }
421 break; 421 break;
422 } 422 }
423 423
424 #endif
425 // Update layer status at the end, so this sets the default color
426 // rather than relying on the init, which was unreliably...
427 // Probably due to a timing issue, but this requires no additional code
428 if (current_layer == layer) {
429 has_layer_changed = false;
430 }
431 else {
432 has_layer_changed = true;
433 current_layer = layer;
434 }
435 // Run Diablo 3 macro checking code.
436#ifdef TAP_DANCE_ENABLE
437 run_diablo_macro_check();
438#endif 424#endif
425 return state;
439} 426}
440
441
442void led_set_user(uint8_t usb_led) { 427void led_set_user(uint8_t usb_led) {
443 428
444} 429}
diff --git a/keyboards/handwired/woodpad/keymaps/drashna/rules.mk b/keyboards/handwired/woodpad/keymaps/drashna/rules.mk
index 0aeb409a8..b6c5ed3bd 100644
--- a/keyboards/handwired/woodpad/keymaps/drashna/rules.mk
+++ b/keyboards/handwired/woodpad/keymaps/drashna/rules.mk
@@ -1,10 +1,12 @@
1TAP_DANCE_ENABLE = yes 1TAP_DANCE_ENABLE = yes
2SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend 2SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
3COMMAND_ENABLE = no # Commands for debug and configuration 3COMMAND_ENABLE = yes # Commands for debug and configuration
4RGBLIGHT_ENABLE = yes 4RGBLIGHT_ENABLE = yes
5MIDI_ENABLE = no 5MIDI_ENABLE = no
6CONSOLE_ENABLE = no 6CONSOLE_ENABLE = no
7 7
8EXTRAFLAGS = -flto
9
8ifndef QUANTUM_DIR 10ifndef QUANTUM_DIR
9 include ../../../../Makefile 11 include ../../../../Makefile
10endif 12endif
diff --git a/keyboards/orthodox/keymaps/drashna/config.h b/keyboards/orthodox/keymaps/drashna/config.h
index d79fd302e..fc483b08e 100644
--- a/keyboards/orthodox/keymaps/drashna/config.h
+++ b/keyboards/orthodox/keymaps/drashna/config.h
@@ -40,9 +40,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
40#endif 40#endif
41 41
42 42
43/* key combination for command */
44#ifdef IS_COMMAND
45#undef IS_COMMAND
46#endif
47#define IS_COMMAND() ( \
48 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_LALT)) \
49)
50
51
43#ifdef RGBLIGHT_ENABLE 52#ifdef RGBLIGHT_ENABLE
44#define RGB_DI_PIN D3 53#define RGB_DI_PIN D3
45#define RGBLED_NUM 12 // Number of LEDs 54#define RGBLED_NUM 16 // Number of LEDs
46#define RGBLIGHT_ANIMATIONS 55#define RGBLIGHT_ANIMATIONS
47#define RGBLIGHT_HUE_STEP 12 56#define RGBLIGHT_HUE_STEP 12
48#define RGBLIGHT_SAT_STEP 12 57#define RGBLIGHT_SAT_STEP 12
diff --git a/keyboards/orthodox/keymaps/drashna/keymap.c b/keyboards/orthodox/keymaps/drashna/keymap.c
index a15fa6f75..de7d4e108 100644
--- a/keyboards/orthodox/keymaps/drashna/keymap.c
+++ b/keyboards/orthodox/keymaps/drashna/keymap.c
@@ -45,6 +45,7 @@ enum custom_keycodes {
45 LOWER, 45 LOWER,
46 RAISE, 46 RAISE,
47 ADJUST, 47 ADJUST,
48 KC_MAKE
48}; 49};
49 50
50// Fillers to make layering more clear 51// Fillers to make layering more clear
@@ -52,21 +53,17 @@ enum custom_keycodes {
52#define XXXXXXX KC_NO 53#define XXXXXXX KC_NO
53 54
54#ifdef RGBLIGHT_ENABLE 55#ifdef RGBLIGHT_ENABLE
55//define layer change stuff for underglow indicator 56#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF);
56#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF); 57#define rgblight_set_red rgblight_sethsv (0x00, 0xFF, 0xFF);
57#define rgblight_set_red rgblight_sethsv(0x00, 0xFF, 0xFF); 58#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF);
58#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF); 59#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF);
59#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF); 60#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
60#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF); 61#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
61#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF); 62#define rgblight_set_yellow rgblight_sethsv (0x3C, 0xFF, 0xFF);
62#define rgblight_set_urine rgblight_sethsv (0x3C, 0xFF, 0xFF); 63#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF);
63#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF);
64
65//This is both for underglow, and Diablo 3 macros
66bool has_layer_changed = true;
67static uint8_t current_layer = 10;
68#endif 64#endif
69 65
66
70#ifdef TAP_DANCE_ENABLE 67#ifdef TAP_DANCE_ENABLE
71enum { 68enum {
72 TD_FLSH = 0, 69 TD_FLSH = 0,
@@ -84,8 +81,8 @@ void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) {
84 rgblight_mode(1); 81 rgblight_mode(1);
85 rgblight_setrgb(0xff, 0x00, 0x00); 82 rgblight_setrgb(0xff, 0x00, 0x00);
86#endif 83#endif
87 reset_keyboard();
88 reset_tap_dance(state); 84 reset_tap_dance(state);
85 reset_keyboard();
89 } 86 }
90} 87}
91 88
@@ -137,9 +134,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
137), 134),
138 135
139[_ADJUST] = KEYMAP( \ 136[_ADJUST] = KEYMAP( \
140 _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ 137 KC_MAKE, RESET, TD(TD_FLSH), _______, _______, _______, _______, _______, _______, _______, _______, _______, \
141 _______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, XXXXXXX, _______, _______, XXXXXXX, _______, AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN, _______, \ 138 _______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, XXXXXXX, _______, _______, XXXXXXX, _______, AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN, _______, \
142 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MAGIC_TOGGLE_NKRO, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ 139 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MAGIC_TOGGLE_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY \
143) 140)
144 141
145 142
@@ -149,6 +146,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
149float tone_qwerty[][2] = SONG(QWERTY_SOUND); 146float tone_qwerty[][2] = SONG(QWERTY_SOUND);
150float tone_dvorak[][2] = SONG(DVORAK_SOUND); 147float tone_dvorak[][2] = SONG(DVORAK_SOUND);
151float tone_colemak[][2] = SONG(COLEMAK_SOUND); 148float tone_colemak[][2] = SONG(COLEMAK_SOUND);
149float tone_workman[][2] = SONG(PLOVER_SONG);
152#endif 150#endif
153 151
154void persistent_default_layer_set(uint16_t default_layer) { 152void persistent_default_layer_set(uint16_t default_layer) {
@@ -159,23 +157,23 @@ void persistent_default_layer_set(uint16_t default_layer) {
159bool process_record_user(uint16_t keycode, keyrecord_t *record) { 157bool process_record_user(uint16_t keycode, keyrecord_t *record) {
160 switch (keycode) { 158 switch (keycode) {
161 case QWERTY: 159 case QWERTY:
162 if (record->event.pressed) { 160 if (record->event.pressed) {
163 #ifdef AUDIO_ENABLE 161 #ifdef AUDIO_ENABLE
164 PLAY_SONG(tone_qwerty); 162 PLAY_SONG(tone_qwerty);
165 #endif 163 #endif
166 persistent_default_layer_set(1UL<<_QWERTY); 164 persistent_default_layer_set(1UL<<_QWERTY);
167 } 165 }
168 return false; 166 return false;
169 break; 167 break;
170 case COLEMAK: 168 case COLEMAK:
171 if (record->event.pressed) { 169 if (record->event.pressed) {
172 #ifdef AUDIO_ENABLE 170 #ifdef AUDIO_ENABLE
173 PLAY_SONG(tone_colemak); 171 PLAY_SONG(tone_colemak);
174 #endif 172 #endif
175 persistent_default_layer_set(1UL<<_COLEMAK); 173 persistent_default_layer_set(1UL<<_COLEMAK);
176 } 174 }
177 return false; 175 return false;
178 break; 176 break;
179 case DVORAK: 177 case DVORAK:
180 if (record->event.pressed) { 178 if (record->event.pressed) {
181 #ifdef AUDIO_ENABLE 179 #ifdef AUDIO_ENABLE
@@ -188,102 +186,124 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
188 case WORKMAN: 186 case WORKMAN:
189 if (record->event.pressed) { 187 if (record->event.pressed) {
190 #ifdef AUDIO_ENABLE 188 #ifdef AUDIO_ENABLE
191 PLAY_SONG(tone_dvorak); 189 PLAY_SONG(tone_workman);
192 #endif 190 #endif
193 persistent_default_layer_set(1UL << _WORKMAN); 191 persistent_default_layer_set(1UL << _WORKMAN);
194 } 192 }
195 return false; 193 return false;
196 break; 194 break;
197 case LOWER: 195 case LOWER:
198 if (record->event.pressed) { 196 if (record->event.pressed) {
199 layer_on(_LOWER); 197 layer_on(_LOWER);
200 update_tri_layer(_LOWER, _RAISE, _ADJUST); 198 update_tri_layer(_LOWER, _RAISE, _ADJUST);
201 } else { 199 } else {
202 layer_off(_LOWER); 200 layer_off(_LOWER);
203 update_tri_layer(_LOWER, _RAISE, _ADJUST); 201 update_tri_layer(_LOWER, _RAISE, _ADJUST);
204 } 202 }
205 return false; 203 return false;
206 break; 204 break;
207 case RAISE: 205 case RAISE:
208 if (record->event.pressed) { 206 if (record->event.pressed) {
209 layer_on(_RAISE); 207 layer_on(_RAISE);
210 update_tri_layer(_LOWER, _RAISE, _ADJUST); 208 update_tri_layer(_LOWER, _RAISE, _ADJUST);
211 } else { 209 } else {
212 layer_off(_RAISE); 210 layer_off(_RAISE);
213 update_tri_layer(_LOWER, _RAISE, _ADJUST); 211 update_tri_layer(_LOWER, _RAISE, _ADJUST);
214 } 212 }
215 return false; 213 return false;
216 break; 214 break;
217 case ADJUST: 215 case ADJUST:
218 if (record->event.pressed) { 216 if (record->event.pressed) {
219 layer_on(_ADJUST); 217 layer_on(_ADJUST);
220 } else { 218 } else {
221 layer_off(_ADJUST); 219 layer_off(_ADJUST);
222 } 220 }
223 return false; 221 return false;
224 break; 222 break;
223 case KC_MAKE:
224 if (!record->event.pressed) {
225#ifdef RGBLIGHT_ENABLE
226 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP SS_TAP(X_ENTER));
227#else
228 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP " RGBLIGHT_ENABLE=no"SS_TAP(X_ENTER));
229#endif
230 }
231 return false;
232 break;
233
225 } 234 }
226 return true; 235 return true;
227} 236}
228#ifdef RGBLIGHT_ENABLE
229 237
238void matrix_init_user(void) { // Runs boot tasks for keyboard
239#ifdef RGBLIGHT_ENABLE
240 uint8_t default_layer = eeconfig_read_default_layer();
230 241
242 rgblight_enable();
243 if (default_layer & (1UL << _COLEMAK)) {
244 rgblight_set_magenta;
245}
246 else if (default_layer & (1UL << _DVORAK)) {
247 rgblight_set_green;
248 }
249 else if (default_layer & (1UL << _WORKMAN)) {
250 rgblight_set_purple;
251 }
252 else {
253 rgblight_set_teal;
254 }
255#endif
231 256
257};
232 258
233void matrix_scan_user(void) { // runs frequently to update info 259void matrix_scan_user(void) { // runs frequently to update info
234 uint8_t layer = biton32(layer_state);
235 260
236 if (layer != current_layer) { 261};
237 has_layer_changed = true; 262
238 current_layer = layer; 263uint32_t layer_state_set_kb(uint32_t state) { // runs on layer switch
239 } 264#ifdef RGBLIGHT_ENABLE
240 // Check layer, and apply color if its changed since last check 265 uint8_t default_layer = eeconfig_read_default_layer();
241 if (has_layer_changed) { 266
242 uint8_t default_layer = 0; 267 switch (biton32(state)) {
243 default_layer = eeconfig_read_default_layer(); 268 case _COLEMAK:
244 269 rgblight_set_magenta;
245 switch (layer) { 270 rgblight_mode(1);
246 case _QWERTY: 271 break;
247 if (default_layer & (1UL << _COLEMAK)) { 272 case _DVORAK:
248 rgblight_set_magenta; 273 rgblight_set_green;
249 } 274 rgblight_mode(1);
250 else if (default_layer & (1UL << _DVORAK)) { 275 break;
251 rgblight_set_green; 276 case _RAISE:
252 } 277 rgblight_set_yellow;
253 else if (default_layer & (1UL << _WORKMAN)) { 278 rgblight_mode(5);
254 rgblight_set_purple; 279 break;
255 } 280 case _LOWER:
256 else { 281 rgblight_set_orange;
257 rgblight_set_teal; 282 rgblight_mode(5);
258 } 283 break;
259 rgblight_mode(1); 284 case _ADJUST:
260 break; 285 rgblight_set_red;
261 case _COLEMAK: 286 rgblight_mode(23);
262 rgblight_set_magenta; 287 break;
263 rgblight_mode(1); 288 case 6:
264 break; 289 rgblight_set_blue;
265 case _DVORAK: 290 break;
266 rgblight_set_green; 291 case _QWERTY:
267 rgblight_mode(1); 292 if (default_layer & (1UL << _COLEMAK)) {
268 break; 293 rgblight_set_magenta;
269 case _RAISE: 294 }
270 rgblight_set_blue; 295 else if (default_layer & (1UL << _DVORAK)) {
271 rgblight_mode(2); 296 rgblight_set_green;
272 break;
273 case _LOWER:
274 rgblight_set_orange;
275 rgblight_mode(3);
276 break;
277 case _ADJUST:
278 rgblight_set_red;
279 rgblight_mode(17);
280 break;
281 case 6:
282 rgblight_set_urine;
283 break;
284 } 297 }
285 has_layer_changed = false; 298 else if (default_layer & (1UL << _WORKMAN)) {
299 rgblight_set_purple;
300 }
301 else {
302 rgblight_set_teal;
303 }
304 rgblight_mode(1);
305 break;
286 } 306 }
287 307#endif
288 }; 308 return state;
289#endif \ No newline at end of file 309}
diff --git a/keyboards/orthodox/keymaps/drashna/rules.mk b/keyboards/orthodox/keymaps/drashna/rules.mk
index 4980c0315..bb4aad689 100644
--- a/keyboards/orthodox/keymaps/drashna/rules.mk
+++ b/keyboards/orthodox/keymaps/drashna/rules.mk
@@ -1,8 +1,11 @@
1CONSOLE_ENABLE = no 1CONSOLE_ENABLE = no
2TAP_DANCE_ENABLE = yes 2TAP_DANCE_ENABLE = no
3RGBLIGHT_ENABLE = no 3RGBLIGHT_ENABLE = yes
4AUDIO_ENABLE = no
4MOUSEKEY_ENABLE = no 5MOUSEKEY_ENABLE = no
5 6NKRO_ENABLE = yes
7FAUXCLICKY_ENABLE = no
8EXTRAFLAGS = -flto
6 9
7ifndef QUANTUM_DIR 10ifndef QUANTUM_DIR
8 include ../../../../Makefile 11 include ../../../../Makefile
diff --git a/keyboards/viterbi/keymaps/drashna/config.h b/keyboards/viterbi/keymaps/drashna/config.h
index dabff8f96..13c17b7ba 100644
--- a/keyboards/viterbi/keymaps/drashna/config.h
+++ b/keyboards/viterbi/keymaps/drashna/config.h
@@ -37,5 +37,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
37#define RGBLIGHT_HUE_STEP 8 37#define RGBLIGHT_HUE_STEP 8
38#define RGBLIGHT_SAT_STEP 8 38#define RGBLIGHT_SAT_STEP 8
39#define RGBLIGHT_VAL_STEP 8 39#define RGBLIGHT_VAL_STEP 8
40#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
41#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
42#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
43
40 44
41#endif 45#endif
diff --git a/keyboards/viterbi/keymaps/drashna/keymap.c b/keyboards/viterbi/keymaps/drashna/keymap.c
index e227b472f..acddcb741 100644
--- a/keyboards/viterbi/keymaps/drashna/keymap.c
+++ b/keyboards/viterbi/keymaps/drashna/keymap.c
@@ -10,14 +10,16 @@ extern keymap_config_t keymap_config;
10// entirely and just use numbers. 10// entirely and just use numbers.
11#define _NUMNAV 0 11#define _NUMNAV 0
12#define _DIABLO 1 12#define _DIABLO 1
13#define _MACROS 2 13#define _GAMEPAD 2
14#define _GAMEPAD 3 14#define _MACROS 3
15#define _MEDIA 4 15#define _MEDIA 4
16#define _COVECUBE 5
16 17
17 18
18enum custom_keycodes { 19enum custom_keycodes {
19 KC_DIABLO_CLEAR = SAFE_RANGE, 20 KC_DIABLO_CLEAR = SAFE_RANGE,
20 KC_P00, 21 KC_P00,
22 KC_MAKE,
21 KC_OVERWATCH, 23 KC_OVERWATCH,
22 KC_SALT, 24 KC_SALT,
23 KC_MORESALT, 25 KC_MORESALT,
@@ -27,33 +29,33 @@ enum custom_keycodes {
27 KC_DOOMFIST, 29 KC_DOOMFIST,
28 KC_JUSTGAME, 30 KC_JUSTGAME,
29 KC_GLHF, 31 KC_GLHF,
30 KC_TORB 32 KC_TORB,
33 KC_AIM
31}; 34};
32 35
33// Fillers to make layering more clear 36// Fillers to make layering more clear
34#define _______ KC_TRNS 37#define _______ KC_TRNS
35#define XXXXXXX KC_NO 38#define XXXXXXX KC_NO
36#define MACROS TG(_MACROS) 39#define MACROS TG(_MACROS)
37#define DIABLO TG(_DIABLO) 40#define DIABLO TG(_DIABLO)
38#define GAMEPAD TG(_GAMEPAD) 41#define GAMEPAD TG(_GAMEPAD)
39#define MEDIA TG(_MEDIA) 42#define MEDIA TG(_MEDIA)
43#define COVECUBE TG(_COVECUBE)
40 44
41 45
42bool is_overwatch = false; 46bool is_overwatch = false;
43 47
44//This is both for underglow, and Diablo 3 macros
45static uint8_t current_layer = 0;
46bool has_layer_changed = true;
47 48
48 49#ifdef RGBLIGHT_ENABLE
49#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF); 50#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF);
50#define rgblight_set_red rgblight_sethsv(0x00, 0xFF, 0xFF); 51#define rgblight_set_red rgblight_sethsv (0x00, 0xFF, 0xFF);
51#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF); 52#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF);
52#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF); 53#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF);
53#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF); 54#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
54#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF); 55#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
55#define rgblight_set_urine rgblight_sethsv (0x3C, 0xFF, 0xFF); 56#define rgblight_set_yellow rgblight_sethsv (0x3C, 0xFF, 0xFF);
56#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF); 57#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF);
58#endif
57 59
58#ifdef TAP_DANCE_ENABLE 60#ifdef TAP_DANCE_ENABLE
59//define diablo macro timer variables 61//define diablo macro timer variables
@@ -122,77 +124,71 @@ qk_tap_dance_action_t tap_dance_actions[] = {
122 124
123const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 125const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
124 126
125/* QWERTY
126 * ,------------------------------------------------. ,------------------------------------------------.
127 * | Ins | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | Del |
128 * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
129 * | - | Tab | Q | W | E | R | T | | Y | U | I | O | P | [ | ] |
130 * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
131 * | = | Esc | A | S | D | F | G | | H | J | K | L | ; | " |Enter |
132 * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
133 * | Pg Up| Shift| Z | X | C | V | B | | N | M | , | . | / | Home | End |
134 * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
135 * | Pg Dn|Adjust| Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up | Right| \ |
136 * `------------------------------------------------' `------------------------------------------------'
137 */
138 [_NUMNAV] = KEYMAP( 127 [_NUMNAV] = KEYMAP(
139 MACROS, DIABLO, GAMEPAD, KC_NLCK, KC_SCLK, KC_PTSC, KC_PSLS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 128 MACROS, DIABLO, GAMEPAD, KC_NLCK, KC_SLCK, KC_COLN, KC_PSLS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
140 MEDIA, XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_PAST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 129 MEDIA, KC_CALC, COVECUBE,KC_P7, KC_P8, KC_P9, KC_PAST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
141 KC_HOME, KC_DEL, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PMNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 130 KC_HOME, KC_DEL, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PMNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
142 KC_END, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3, KC_PPLS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 131 KC_END, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3, KC_PPLS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
143 KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_P00, KC_PDOT, KC_PENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ 132 KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_P00, KC_PDOT, KC_PENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
144 ), 133 ),
145 134
146/* Lower
147 * ,------------------------------------------------. ,------------------------------------------------.
148 * | | ~ | F1 | F3 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
149 * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
150 * | _ | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | { | } |
151 * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
152 * | + | | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
153 * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
154 * | | | F7 | F8 | F9 | F10 | F11 | | F12 | | | | | | |
155 * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
156 * | | | | | | | | | | | Next | Vol- | Vol+ | Play | |
157 * `------------------------------------------------' `------------------------------------------------'
158 */
159 [_DIABLO] = KEYMAP( 135 [_DIABLO] = KEYMAP(
160 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 136 KC_ESC, DIABLO, KC_V, KC_D, XXXXXXX, XXXXXXX, KC_L, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
161 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 137 KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_J, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
162 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 138 KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G, KC_F, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
163 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 139 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, \
164 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ 140 KC_LALT, KC_F4, KC_F5, KC_F8, KC_F9, KC_F10, SFT_T(KC_SPACE), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
165 ), 141 ),
166
167 142
143 [_GAMEPAD] = KEYMAP( // Game pad layout designed primarily for Overwatch
144 MACROS, KC_ESC, GAMEPAD, KC_1, KC_2, KC_3, KC_4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
145 MEDIA, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
146 KC_Z, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
147 KC_Y, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
148 KC_F1, KC_U, KC_I, KC_Y, KC_V, KC_SPC, KC_V, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
149 ),
150
168 [_MACROS] = KEYMAP( 151 [_MACROS] = KEYMAP(
169 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 152 MACROS, XXXXXXX, GAMEPAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
170 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 153 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
171 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 154 KC_SYMM, KC_TORB, KC_DOOMFIST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
172 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 155 KC_GLHF, KC_GOODGAME, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
173 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ 156 KC_SALT, KC_MORESALT, KC_SALTHARD, KC_JUSTGAME, KC_AIM, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
157 ),
158
159 [_COVECUBE] = KEYMAP(
160 COVECUBE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
161 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
162 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
163 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
164 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
174 ), 165 ),
175 166
176 [_MEDIA] = KEYMAP( 167 [_MEDIA] = KEYMAP(
177 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 168 RESET, KC_MAKE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
178 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 169 MEDIA, XXXXXXX, RGB_SAI, RGB_VAI, RGB_M_P, RGB_M_B, RGB_M_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
179 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 170 RGB_TOG, RGB_MOD, RGB_SAD, RGB_VAD, RGB_M_SW,RGB_M_SN,RGB_M_K, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
180 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 171 KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, RGB_M_K, RGB_M_X, RGB_M_G, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
181 _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ 172 KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
182 ) 173 )
183 174
175
184}; 176};
185 177
186 178
187 179
188bool process_record_user(uint16_t keycode, keyrecord_t *record) { 180bool process_record_user(uint16_t keycode, keyrecord_t *record) {
189 uint16_t kc; 181 uint16_t kc;
190 if (is_overwatch) { 182 if (is_overwatch) {
191 kc = KC_BSPC; 183 kc = KC_BSPC;
192 } 184 }
193 else { 185 else {
194 kc = KC_ENTER; 186 kc = KC_ENTER;
195 } 187 }
188 // Once a delay command is added to "SEND_STRING",
189 // replace these with X_BSPC and X_ENTER instead.
190 // and add "SS_TAP(kc) SS_DELAY(50)" to all of the
191 // SEND_STRING commands, to compress things.
196 switch (keycode) { 192 switch (keycode) {
197#ifdef TAP_DANCE_ENABLE 193#ifdef TAP_DANCE_ENABLE
198 case KC_DIABLO_CLEAR: // reset all Diable timers, disabling them 194 case KC_DIABLO_CLEAR: // reset all Diable timers, disabling them
@@ -215,11 +211,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
215 } 211 }
216 return false; 212 return false;
217 break; 213 break;
214 case KC_MAKE:
215 if (!record->event.pressed) {
216 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP SS_TAP(X_ENTER));
217 }
218 return false;
219 break;
218 case KC_OVERWATCH: // reset all Diable timers, disabling them 220 case KC_OVERWATCH: // reset all Diable timers, disabling them
219 if (record->event.pressed) { 221 if (record->event.pressed) {
220 is_overwatch = !is_overwatch; 222 is_overwatch = !is_overwatch;
221 has_layer_changed = true;
222 } 223 }
224#ifdef RGBLIGHT_ENABLE
225 is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
226#endif
223 return false; 227 return false;
224 break; 228 break;
225 case KC_SALT: 229 case KC_SALT:
@@ -227,9 +231,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
227 register_code(kc); 231 register_code(kc);
228 unregister_code(kc); 232 unregister_code(kc);
229 _delay_ms(50); 233 _delay_ms(50);
230 SEND_STRING("Salt, salt, salt..."); 234 SEND_STRING("Salt, salt, salt..." SS_TAP(X_ENTER));
231 register_code(KC_ENTER);
232 unregister_code(KC_ENTER);
233 } 235 }
234 return false; 236 return false;
235 break; 237 break;
@@ -238,9 +240,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
238 register_code(kc); 240 register_code(kc);
239 unregister_code(kc); 241 unregister_code(kc);
240 _delay_ms(50); 242 _delay_ms(50);
241 SEND_STRING("Please sir, can I have some more salt?!"); 243 SEND_STRING("Please sir, can I have some more salt?!" SS_TAP(X_ENTER));
242 register_code(KC_ENTER);
243 unregister_code(KC_ENTER);
244 } 244 }
245 return false; 245 return false;
246 break; 246 break;
@@ -249,9 +249,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
249 register_code(kc); 249 register_code(kc);
250 unregister_code(kc); 250 unregister_code(kc);
251 _delay_ms(50); 251 _delay_ms(50);
252 SEND_STRING("Your salt only makes my penis that much harder, and even more aggressive!"); 252 SEND_STRING("Your salt only makes my penis that much harder, and even more aggressive!" SS_TAP(X_ENTER));
253 register_code(KC_ENTER);
254 unregister_code(KC_ENTER);
255 } 253 }
256 return false; 254 return false;
257 break; 255 break;
@@ -260,9 +258,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
260 register_code(kc); 258 register_code(kc);
261 unregister_code(kc); 259 unregister_code(kc);
262 _delay_ms(50); 260 _delay_ms(50);
263 SEND_STRING("Good game, everyone!"); 261 SEND_STRING("Good game, everyone!" SS_TAP(X_ENTER));
264 register_code(KC_ENTER);
265 unregister_code(KC_ENTER);
266 } 262 }
267 return false; 263 return false;
268 break; 264 break;
@@ -271,9 +267,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
271 register_code(kc); 267 register_code(kc);
272 unregister_code(kc); 268 unregister_code(kc);
273 _delay_ms(50); 269 _delay_ms(50);
274 SEND_STRING("Good luck, have fun!!!"); 270 SEND_STRING("Good luck, have fun!!!" SS_TAP(X_ENTER));
275 register_code(KC_ENTER);
276 unregister_code(KC_ENTER);
277 } 271 }
278 return false; 272 return false;
279 break; 273 break;
@@ -282,48 +276,44 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
282 register_code(kc); 276 register_code(kc);
283 unregister_code(kc); 277 unregister_code(kc);
284 _delay_ms(50); 278 _delay_ms(50);
285 SEND_STRING("Left click to win!"); 279 SEND_STRING("Left click to win!" SS_TAP(X_ENTER));
286 register_code(KC_ENTER);
287 unregister_code(KC_ENTER);
288 } 280 }
289 return false; 281 return false;
290 break; 282 break;
291 case KC_DOOMFIST: 283 case KC_JUSTGAME:
284
292 if (!record->event.pressed) { 285 if (!record->event.pressed) {
293 register_code(kc); 286 register_code(kc);
294 unregister_code(kc); 287 unregister_code(kc);
295 _delay_ms(50); 288 _delay_ms(50);
296 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!"); 289 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));
297 register_code(KC_ENTER);
298 unregister_code(KC_ENTER);
299 } 290 }
300 return false; 291 return false;
301 break; 292 break;
302 case KC_JUSTGAME: 293 case KC_TORB:
303 294
304 if (!record->event.pressed) { 295 if (!record->event.pressed) {
305 register_code(kc); 296 register_code(kc);
306 unregister_code(kc); 297 unregister_code(kc);
307 _delay_ms(50); 298 _delay_ms(50);
308 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."); 299 SEND_STRING("That was positively riveting! SS_TAP(X_ENTER)");
309 register_code(KC_ENTER);
310 unregister_code(KC_ENTER);
311 } 300 }
312 return false; 301 return false;
313 break; 302 break;
314 case KC_TORB: 303 case KC_AIM:
315 304
316 if (!record->event.pressed) { 305 if (!record->event.pressed) {
317 register_code(kc); 306 register_code(kc);
318 unregister_code(kc); 307 unregister_code(kc);
319 _delay_ms(50); 308 _delay_ms(50);
320 SEND_STRING("That was positively riveting!"); 309 SEND_STRING("That aim is absolutely amazing. It's almost like you're a machine!" SS_TAP(X_ENTER));
321 register_code(KC_ENTER); 310 _delay_ms(50);
322 unregister_code(KC_ENTER); 311 SEND_STRING("Wait! That aim is TOO good! You're clearly using an aim hack! CHEATER!" SS_TAP(X_ENTER));
323 } 312 }
324 return false; 313 return false;
325 break; 314 break;
326 315
316
327 } 317 }
328 return true; 318 return true;
329} 319}
@@ -332,7 +322,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
332 322
333// Sends the key press to system, but only if on the Diablo layer 323// Sends the key press to system, but only if on the Diablo layer
334void send_diablo_keystroke(uint8_t diablo_key) { 324void send_diablo_keystroke(uint8_t diablo_key) {
335 if (current_layer == _DIABLO) { 325 if (biton32(layer_state) == _DIABLO) {
336 switch (diablo_key) { 326 switch (diablo_key) {
337 case 0: 327 case 0:
338 SEND_STRING("1"); 328 SEND_STRING("1");
@@ -366,48 +356,51 @@ void run_diablo_macro_check(void) {
366#endif 356#endif
367 357
368 358
369void matrix_scan_user(void) { // runs frequently to update info 359void matrix_init_user(void) { // Runs boot tasks for keyboard
370 uint8_t layer = biton32(layer_state); 360#ifdef RGBLIGHT_ENABLE
371 361 rgblight_enable();
372 if (layer != current_layer) { 362 rgblight_set_teal;
373 has_layer_changed = true; 363 rgblight_mode(1);
374 current_layer = layer; 364#endif
375 } 365};
376 // Check layer, and apply color if its changed since last check
377 if (has_layer_changed) {
378 366
379 switch (layer) {
380 case _NUMNAV:
381 rgblight_set_teal;
382 rgblight_mode(2);
383 break;
384 case _MACROS:
385 rgblight_set_orange;
386 if (is_overwatch) {
387 rgblight_mode(17);
388 }
389 else {
390 rgblight_mode(18);
391 }
392 break;
393 case _DIABLO:
394 rgblight_set_red;
395 rgblight_mode(5);
396 break;
397 case _GAMEPAD:
398 rgblight_set_urine;
399 rgblight_mode(1);
400 break;
401 case _MEDIA:
402 rgblight_set_blue;
403 rgblight_mode(1);
404 break;
405 }
406 has_layer_changed = false;
407 }
408 367
368void matrix_scan_user(void) { // runs frequently to update info
409#ifdef TAP_DANCE_ENABLE 369#ifdef TAP_DANCE_ENABLE
410 // Run Diablo 3 macro checking code. 370 // Run Diablo 3 macro checking code.
411 run_diablo_macro_check(); 371 run_diablo_macro_check();
412#endif 372#endif
413}; \ No newline at end of file 373};
374
375
376uint32_t layer_state_set_kb(uint32_t state) {
377#ifdef RGBLIGHT_ENABLE
378 rgblight_enable();
379 switch (biton32(state)) {
380 case _NUMNAV:
381 rgblight_set_teal;
382 rgblight_mode(2);
383 break;
384 case _MACROS:
385 rgblight_set_orange;
386 is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
387 break;
388 case _DIABLO:
389 rgblight_set_red;
390 rgblight_mode(5);
391 break;
392 case _GAMEPAD:
393 rgblight_set_yellow;
394 rgblight_mode(1);
395 break;
396 case _MEDIA:
397 rgblight_set_blue;
398 rgblight_mode(1);
399 break;
400 case _COVECUBE:
401 rgblight_set_green;
402 rgblight_mode(2);
403 }
404#endif
405 return state;
406}
diff --git a/keyboards/viterbi/keymaps/drashna/rules.mk b/keyboards/viterbi/keymaps/drashna/rules.mk
index f1bb92837..dd5747f1d 100644
--- a/keyboards/viterbi/keymaps/drashna/rules.mk
+++ b/keyboards/viterbi/keymaps/drashna/rules.mk
@@ -2,6 +2,9 @@ CONSOLE_ENABLE = no
2TAP_DANCE_ENABLE = yes 2TAP_DANCE_ENABLE = yes
3RGBLIGHT_ENABLE = yes 3RGBLIGHT_ENABLE = yes
4MOUSEKEY_ENABLE = no 4MOUSEKEY_ENABLE = no
5NKRO_ENABLE = yes
6
7EXTRAFLAGS = -flto
5 8
6ifndef QUANTUM_DIR 9ifndef QUANTUM_DIR
7 include ../../../../Makefile 10 include ../../../../Makefile