diff --git a/keyboards/ergodox_ez/keymaps/drashna-custom/config.h b/keyboards/ergodox_ez/keymaps/drashna-custom/config.h
index f4775eeac..5fef1e0d8 100644
--- a/keyboards/ergodox_ez/keymaps/drashna-custom/config.h
+++ b/keyboards/ergodox_ez/keymaps/drashna-custom/config.h
@@ -14,10 +14,5 @@
#endif // RGBLIGHT_ENABLE
#define FORCE_NKRO
-#ifdef FORCE_NKRO
-#define NKRO_EPSIZE 32
-#endif
-
-#define PERMISSIVE_HOLD
#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 5f0504beb..5440c3346 100644
--- a/keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c
@@ -28,21 +28,22 @@ along with this program. If not, see .
#define QWERTY 0
#define COLEMAK 1
#define DVORAK 2
-#define SYMB 3
-#define OVERWATCH 4
-#define DIABLO 5
-#define MOUS 6
-
+#define WORKMAN 3
+#define SYMB 8
+#define OVERWATCH 9
+#define DIABLO 10
+#define MOUS 12
+//Leader Key stuff
+#ifdef LEADER_TIMEOUT
+#undef LEADER_TIMEOUT
+#endif
+#define LEADER_TIMEOUT 1500
//define modifiers
#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
#define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
#define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
-
-//define macro keycodes
-#define M_VERSION M(0)
-#define M_MAKE M(1)
//define layer change stuff for underglow indicator
bool skip_leds = false;
@@ -54,6 +55,7 @@ bool skip_leds = false;
#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
#define rgblight_set_urine rgblight_sethsv (0x3C, 0xFF, 0xFF);
+#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF);
//This is both for underglow, and Diablo 3 macros
static uint8_t current_layer = 0;
@@ -70,28 +72,30 @@ bool check_dtimer(uint8_t dtimer) {
enum custom_keycodes {
- PLACEHOLDER = SAFE_RANGE, // can always be here
- EPRM,
- VRSN,
- RGB_SLD,
- RGB_0000FF,
- RGB_008000,
- RGB_FF0000,
- RGB_800080,
- RGB_00FF90,
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ EPRM,
+ VRSN,
+ RGB_SLD,
+ RGB_0000FF,
+ RGB_008000,
+ RGB_FF0000,
+ RGB_800080,
+ RGB_00FF90,
KC_DIABLO_CLEAR,
KC_QWERTY,
KC_COLEMAK,
- KC_DVORAK
+ KC_DVORAK,
+ KC_WORKMAN,
+ KC_MAKEQMK
};
#ifdef TAP_DANCE_ENABLE
enum {
- TD_FLSH = 0,
- TD_DIABLO_1,
- TD_DIABLO_2,
- TD_DIABLO_3,
- TD_DIABLO_4
+ TD_FLSH = 0,
+ TD_DIABLO_1,
+ TD_DIABLO_2,
+ TD_DIABLO_3,
+ TD_DIABLO_4
};
@@ -101,43 +105,43 @@ enum {
// on the forth tap, turn them off from right to left
void dance_flsh_each(qk_tap_dance_state_t *state, void *user_data) {
- if (!skip_leds) {
- ergodox_board_led_off();
- ergodox_right_led_1_off();
- ergodox_right_led_2_off();
- ergodox_right_led_3_off();
- skip_leds = true;
- }
- switch (state->count) {
- case 1:
- ergodox_right_led_1_on();
+ if (!skip_leds) {
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ skip_leds = true;
+ }
+ switch (state->count) {
+ case 1:
+ ergodox_right_led_1_on();
break;
case 2:
- ergodox_right_led_2_on();
- break;
- case 3:
- ergodox_right_led_3_on();
- break;
- case 4:
- ergodox_right_led_1_off();
- _delay_ms(50);
- ergodox_right_led_2_off();
- _delay_ms(50);
- ergodox_right_led_3_off();
+ ergodox_right_led_2_on();
+ break;
+ case 3:
+ ergodox_right_led_3_on();
+ break;
+ case 4:
+ ergodox_right_led_1_off();
+ _delay_ms(50);
+ ergodox_right_led_2_off();
+ _delay_ms(50);
+ ergodox_right_led_3_off();
- }
+ }
}
// on the fourth tap, set the keyboard on flash state
// and set the underglow to red, because red == bad
void dance_flsh_finished(qk_tap_dance_state_t *state, void *user_data) {
- if (state->count >= 4) {
+ if (state->count >= 4) {
rgblight_enable();
rgblight_mode(1);
rgblight_setrgb(0xff,0x00,0x00);
- reset_keyboard();
- reset_tap_dance(state);
- }
+ reset_keyboard();
+ reset_tap_dance(state);
+ }
}
// Cycle through the times for the macro, starting at 0, for disabled.
@@ -172,20 +176,20 @@ void diablo_tapdance4 (qk_tap_dance_state_t *state, void *user_data) {
// if the flash state didnt happen, then turn off leds, left to right
void dance_flsh_reset(qk_tap_dance_state_t *state, void *user_data) {
- _delay_ms(200);
- ergodox_right_led_3_off();
- _delay_ms(200);
- ergodox_right_led_2_off();
- _delay_ms(200);
- ergodox_right_led_1_off();
- _delay_ms(500);
- skip_leds = false;
+ _delay_ms(200);
+ ergodox_right_led_3_off();
+ _delay_ms(200);
+ ergodox_right_led_2_off();
+ _delay_ms(200);
+ ergodox_right_led_1_off();
+ _delay_ms(500);
+ skip_leds = false;
}
//Tap Dance Definitions
qk_tap_dance_action_t tap_dance_actions[] = {
- //Once for Blue, Twice for Green, Thrice for Red, and four to flash
- [TD_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED (dance_flsh_each, dance_flsh_finished, dance_flsh_reset),
+ //Once for Blue, Twice for Green, Thrice for Red, and four to flash
+ [TD_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED (dance_flsh_each, dance_flsh_finished, dance_flsh_reset),
// tap once to disable, and more to enable timed micros
[TD_DIABLO_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
[TD_DIABLO_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
@@ -219,26 +223,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `---------------------' `---------------------'
*/
[QWERTY] = KEYMAP(
- KC_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS),
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(DIABLO),
- KC_BSPACE, KC_A, KC_S, KC_D, KC_F, KC_G,
- KC_LSHIFT, CTL_T(KC_Z),KC_X, KC_C, KC_V, KC_B, TG(OVERWATCH),
- LT(SYMB,KC_GRAVE),KC_QUOTE, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
+ KC_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS),
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(DIABLO),
+ KC_BSPACE, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSHIFT, LCTL_T(KC_Z),KC_X, KC_C, KC_V, KC_B, TG(OVERWATCH),
+ LT(SYMB,KC_GRAVE),KC_QUOTE, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
- ALT_T(KC_APPLICATION), KC_LGUI,
+ ALT_T(KC_APPLICATION), KC_LEAD,
KC_HOME,
- KC_SPACE, KC_BSPACE, KC_END,
-
- TG(SYMB), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
- TG(DVORAK), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
+ KC_SPACE, KC_BSPACE, KC_END,
+
+ TG(MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
+ TG(DIABLO), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
KC_H, KC_J, KC_K, KC_L, KC_SCOLON, GUI_T(KC_QUOTE),
- TG(COLEMAK), KC_N, KC_M, KC_COMMA, KC_DOT, CTL_T(KC_SLASH),KC_RSHIFT,
+ TG(OVERWATCH), KC_N, KC_M, KC_COMMA, KC_DOT, RCTL_T(KC_SLASH),KC_RSHIFT,
KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1,
- KC_LALT, CTL_T(KC_ESCAPE),
- KC_PGUP,
- KC_PGDOWN, KC_DELETE, KC_ENTER
- ),
-/* Keymap 1: Basic layer
+ KC_LALT, CTL_T(KC_ESCAPE),
+ KC_PGUP,
+ KC_PGDOWN, KC_DELETE, KC_ENTER
+ ),
+/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
@@ -264,24 +268,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[COLEMAK] = KEYMAP(
// left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS),
- KC_DELT, KC_Q, KC_W, KC_F, KC_P, KC_G, TG(DIABLO),
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, TG(DIABLO),
KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D,
- KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(OVERWATCH),
+ KC_LSFT, LCTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(OVERWATCH),
LT(SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
- ALT_T(KC_APP), KC_LGUI,
+ ALT_T(KC_APP), KC_LEAD,
KC_HOME,
KC_SPC,KC_BSPC,KC_END,
// right hand
- KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
- TG(DVORAK), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
- KC_H, KC_N, KC_E, KC_I, LT(MOUS, KC_O), KC_QUOTE,
- TG(COLEMAK), KC_K, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLASH),KC_RSHIFT,
- KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1,
+ TG(MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(DIABLO), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
+ KC_H, KC_N, KC_E, KC_I, KC_O, GUI_T(KC_QUOTE),
+ TG(OVERWATCH),KC_K, KC_M, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), KC_RSHIFT,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1,
KC_LALT, CTL_T(KC_ESC),
KC_PGUP,
- KC_PGDN,KC_TAB, KC_ENT
+ KC_PGDN,KC_DELETE, KC_ENT
),
-/* Keymap 2: Basic layer
+/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | \ |
@@ -307,22 +311,65 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[DVORAK] = KEYMAP(
// left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS),
- KC_DELT, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(DIABLO),
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(DIABLO),
KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I,
- KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, TG(OVERWATCH),
+ KC_LSFT, LCTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, TG(OVERWATCH),
LT(SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET, KC_RBRACKET,
- ALT_T(KC_APP), KC_LGUI,
+ ALT_T(KC_APP), KC_LEAD,
KC_HOME,
KC_SPC,KC_BSPC,KC_END,
// right hand
- KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
- TG(DVORAK), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
- KC_D, KC_H, KC_T, KC_N, LT(MOUS, KC_S), KC_MINS,
- TG(COLEMAK), KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSHIFT,
- KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1,
+ TG(MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
+ TG(DIABLO), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
+ KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
+ TG(OVERWATCH),KC_B, KC_M, KC_W, KC_V, RCTL_T(KC_Z), KC_RSHIFT,
+ KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, KC_FN1,
KC_LALT, CTL_T(KC_ESC),
KC_PGUP,
- KC_PGDN,KC_TAB, KC_ENT
+ KC_PGDN,KC_DELETE, KC_ENT
+ ),
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Del | Q | W | F | P | G | L1 | | L1 | J | L | U | Y | ; | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | BkSp | A | R | S | T | D |------| |------| H | N | E | I |O / L2| ' |
+ * |--------+------+------+------+------+------| OVER | | Meh |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | App | LGui | | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|Backsp|------| |------| Tab |Enter |
+ * | |ace | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[WORKMAN] = KEYMAP(
+ // left hand
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS),
+ KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, TG(DIABLO),
+ KC_BSPC, KC_A, KC_S, KC_H, KC_T, KC_G,
+ KC_LSFT, LCTL_T(KC_Z), KC_X, KC_M, KC_C, KC_V, TG(OVERWATCH),
+ LT(SYMB,KC_GRV),KC_QUOT, KC_LGUI, KC_LBRACKET,KC_RBRACKET,
+ ALT_T(KC_APP), KC_LEAD,
+ KC_HOME,
+ KC_SPC,KC_BSPC,KC_END,
+ // right hand
+ TG(MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(DIABLO), KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSLS,
+ KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOTE,
+ TG(OVERWATCH),KC_K, KC_L, KC_COMM,KC_DOT, RCTL_T(KC_SLASH), KC_RSHIFT,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1,
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN,KC_DELETE, KC_ENT
),
/* Keymap 3: Symbol Layer
@@ -347,24 +394,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `--------------------' `--------------------'
*/
[SYMB] = KEYMAP(
- KC_ESCAPE,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
- M_VERSION, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
- M_MAKE, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE,
- TD(TD_FLSH), KC_PERC, KC_CIRC, KC_LBRACKET,KC_RBRACKET,KC_TILD, KC_TRNS,
- KC_NO, KC_AMPR, KC_ASTR, KC_COLN, KC_SCOLON,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS,
-
- KC_QWERTY, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- KC_DVORAK, KC_KP_PLUS, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_ASTERISK, KC_F12,
- KC_KP_MINUS, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_SLASH,KC_PSCREEN,
- KC_COLEMAK, KC_NUMLOCK, KC_KP_1, KC_KP_2, KC_KP_3, KC_EQUAL, KC_PAUSE,
- KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, KC_TRNS,
- RGB_TOG, RGB_SLD,
- KC_NO,
- KC_KP_DOT, KC_KP_0, KC_KP_ENTER
- ),
+ KC_ESCAPE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_WORKMAN,
+ VRSN, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_DVORAK,
+ KC_MAKEQMK, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE,
+ TD(TD_FLSH), KC_PERC, KC_CIRC, KC_LBRACKET,KC_RBRACKET,KC_TILD, KC_COLEMAK,
+ KC_NO, KC_AMPR, KC_ASTR, KC_COLN, KC_SCOLON,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_QWERTY, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_DVORAK, KC_KP_PLUS, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_ASTERISK, KC_F12,
+ KC_KP_MINUS,KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_SLASH, KC_PSCREEN,
+ KC_COLEMAK, KC_NUMLOCK, KC_KP_1, KC_KP_2, KC_KP_3, KC_EQUAL, KC_PAUSE,
+ KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, KC_TRNS,
+ RGB_TOG, RGB_SLD,
+ KC_NO,
+ KC_KP_DOT, KC_KP_0, KC_KP_ENTER
+ ),
/* Keymap 4: Customized Overwatch Layout
*
@@ -388,24 +435,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `--------------------' `--------------------'
*/
[OVERWATCH] = KEYMAP(
- KC_ESCAPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T,
- KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F,
- KC_LCTL, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_TRNS,
- KC_G, KC_U, KC_I, KC_Y, KC_T,
+ KC_ESCAPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T,
+ KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F,
+ KC_LCTL, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_TRNS,
+ KC_G, KC_U, KC_I, KC_Y, KC_T,
KC_O, KC_P,
KC_LGUI,
KC_V, KC_SPACE, KC_H,
-
- KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO,
+
+ KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ TG(OVERWATCH), KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO,
- KC_NO,
+ KC_NO, KC_NO,
+ KC_NO,
KC_PGDOWN, KC_DELETE, KC_ENTER
- ),
+ ),
/* Keymap 3:
*
@@ -429,25 +476,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `--------------------' `--------------------'
*/
[DIABLO] = KEYMAP(
- KC_ESCAPE, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_NO,
- KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_TRNS,
- KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G,
- KC_LCTL, TD(TD_DIABLO_1), TD(TD_DIABLO_2), TD(TD_DIABLO_3), TD(TD_DIABLO_4), KC_Z, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_ESCAPE, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_NO,
+ KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_TRNS,
+ KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G,
+ KC_LCTL, TD(TD_DIABLO_1), TD(TD_DIABLO_2), TD(TD_DIABLO_3), TD(TD_DIABLO_4), KC_Z, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_L, KC_J,
KC_F,
SFT_T(KC_SPACE), ALT_T(KC_Q), KC_DIABLO_CLEAR,
-
-
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO,
- KC_NO,
- KC_NO, KC_NO, KC_NO
- ),
+
+
+
+ KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO,
+ KC_NO,
+ KC_PGDOWN, KC_DELETE, KC_ENTER
+ ),
/* Keymap 4: Media and mouse keys
*
@@ -458,37 +506,37 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | |MsLeft|MsDown|MsRght| | |------| |------| | | Acc0 | Acc1 | Acc2 | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | Acc0 | Acc1 | Acc2 | | | | | | Play | Stop | Mute |VolDn |VolUp | |
+ * | | Acc0 | Acc1 | Acc2 | | | | | | | Mute |VolDn |VolUp | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
- * | | | | | | | | | | | |
+ * | | | | | | | Play | Stop | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | MWUp | | | | |
- * | Lclk | Rclk |------| |------| MBn4 | MBn4 |
+ * | Lclk | Rclk |------| |------| MBn4 | MBn5 |
* | | | MWDn | | Mclk | | |
* `--------------------' `--------------------'
*/
[MOUS] = KEYMAP(
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
- KC_NO, KC_NO, KC_MS_UP, KC_NO, KC_NO, KC_NO, KC_TRNS,
- KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT,KC_NO, KC_NO,
- KC_NO, KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2,KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_NO,
+ KC_NO, KC_ACL0, KC_ACL1, KC_ACL2, KC_NO, KC_NO, KC_TRNS,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO,KC_NO,
- KC_MS_WH_UP,
- KC_MS_BTN1,KC_MS_BTN2,KC_MS_WH_DOWN,
-
- KC_TRNS,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
- KC_TRNS,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
- KC_NO,KC_NO,KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2,KC_NO,KC_NO,
- KC_TRNS,KC_MEDIA_PLAY_PAUSE,KC_MEDIA_STOP,KC_AUDIO_MUTE,KC_AUDIO_VOL_DOWN,KC_AUDIO_VOL_UP,KC_NO,
- KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,
- KC_NO,KC_NO,
- KC_NO,
- KC_MS_BTN3,KC_MS_BTN4,KC_MS_BTN5
- ),
+ KC_NO, KC_NO,
+ KC_WH_U,
+ KC_BTN1, KC_BTN2, KC_WH_D,
+
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_ACL0, KC_ACL1, KC_ACL2, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO,KC_NO,
+ KC_NO,
+ KC_MS_BTN3,KC_MS_BTN4,KC_MS_BTN5
+ ),
};
@@ -502,23 +550,6 @@ void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
}
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- switch(id) {
- case 0:
- if (record->event.pressed) {
- // Output Keyboard Firmware info
- SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
- return false;
- }
- case 1:
- if (record->event.pressed) {
- // make ergodox-ez-drashna-custom-teensy
- return MACRO(I(5), T(M), T(A), T(K), T(E), T(SPACE), T(E), T(R), T(G), T(O), T(D), T(O), T(X), D(LSFT), T(MINUS), U(LSFT), T(E), T(Z), T(MINUS), T(D), T(R), T(A), T(S), T(H), T(N), T(A), T(MINUS), T(C), T(U), T(S), T(T), T(O), T(M), T(MINUS), T(T), T(E), T(E), T(N), T(S), T(Y), T(ENTER), END);
- }
- }
- return MACRO_NONE;
-};
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
@@ -527,81 +558,81 @@ void persistent_default_layer_set(uint16_t default_layer) {
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- // dynamically generate these.
- case EPRM:
- if (record->event.pressed) {
+ switch (keycode) {
+ // dynamically generate these.
+ case EPRM:
+ if (record->event.pressed) {
eeconfig_init();
- }
- return false;
- break;
- case VRSN:
- if (record->event.pressed) {
- SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
- }
- return false;
- break;
- case RGB_SLD:
- if (record->event.pressed) {
- rgblight_mode(1);
- }
- return false;
- break;
+ }
+ return false;
+ break;
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case RGB_SLD:
+ if (record->event.pressed) {
+ rgblight_mode(1);
+ }
+ return false;
+ break;
- case RGB_0000FF:
- if (record->event.pressed) {
- #ifdef RGBLIGHT_ENABLE
- rgblight_enable();
- rgblight_mode(1);
- rgblight_setrgb(0x00,0x00,0xff);
- #endif
- }
- return false;
- break;
+ case RGB_0000FF:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_setrgb(0x00,0x00,0xff);
+ #endif
+ }
+ return false;
+ break;
- case RGB_008000:
- if (record->event.pressed) {
- #ifdef RGBLIGHT_ENABLE
- rgblight_enable();
- rgblight_mode(1);
- rgblight_setrgb(0x00,0x80,0x00);
- #endif
- }
- return false;
- break;
+ case RGB_008000:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_setrgb(0x00,0x80,0x00);
+ #endif
+ }
+ return false;
+ break;
- case RGB_FF0000:
- if (record->event.pressed) {
- #ifdef RGBLIGHT_ENABLE
- rgblight_enable();
- rgblight_mode(1);
- rgblight_setrgb(0xff,0x00,0x00);
- #endif
- }
- return false;
- break;
+ case RGB_FF0000:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_setrgb(0xff,0x00,0x00);
+ #endif
+ }
+ return false;
+ break;
- case RGB_800080:
- if (record->event.pressed) {
- #ifdef RGBLIGHT_ENABLE
- rgblight_enable();
- rgblight_mode(1);
- rgblight_setrgb(0x80,0x00,0x80);
- #endif
- }
- return false;
- break;
+ case RGB_800080:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_setrgb(0x80,0x00,0x80);
+ #endif
+ }
+ return false;
+ break;
- case RGB_00FF90:
- if (record->event.pressed) {
- #ifdef RGBLIGHT_ENABLE
- rgblight_enable();
- rgblight_mode(1);
- rgblight_setrgb(0x00,0xff,0x90);
- #endif
- }
- return false;
- break;
+ case RGB_00FF90:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_setrgb(0x00,0xff,0x90);
+ #endif
+ }
+ return false;
+ break;
case KC_DIABLO_CLEAR: // reset all Diable timers, disabling them
if (record->event.pressed) {
uint8_t dtime;
@@ -630,9 +661,21 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
break;
+ case KC_WORKMAN:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL << WORKMAN);
+ }
+ return false;
+ break;
+ case KC_MAKEQMK:
+ if (record->event.pressed) {
+ SEND_STRING("make ergodox_ez:drashna-custom:teensy"SS_TAP(X_ENTER));
+ }
+ return false;
+ break;
- }
- return true;
+ }
+ return true;
}
@@ -674,33 +717,30 @@ void matrix_init_user(void) { // Runs boot tasks for keyboard
};
-
+LEADER_EXTERNS();
void matrix_scan_user(void) { // runs frequently to update info
uint8_t modifiders = get_mods();
uint8_t layer = biton32(layer_state);
- bool l_dvorak = false;
- bool l_colemak = false;
- static bool has_layer_changed = true;
+ static bool has_layer_changed = true;
-
- if (!skip_leds) {
- ergodox_board_led_off();
- ergodox_right_led_1_off();
- ergodox_right_led_2_off();
- ergodox_right_led_3_off();
+ if (!skip_leds) {
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
- // Since we're not using the LEDs here for layer indication anymore,
- // then lets use them for modifier indicators. Shame we don't have 4...
- // Also, no "else", since we want to know each, independantly.
+ // Since we're not using the LEDs here for layer indication anymore,
+ // then lets use them for modifier indicators. Shame we don't have 4...
+ // Also, no "else", since we want to know each, independantly.
if ( modifiders & MODS_SHIFT_MASK) {
- ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
}
if ( modifiders & MODS_CTRL_MASK) {
- ergodox_right_led_2_on();
+ ergodox_right_led_1_on();
}
if ( modifiders & MODS_ALT_MASK) {
- ergodox_right_led_3_on();
+ ergodox_right_led_3_on();
}
}
@@ -713,12 +753,6 @@ void matrix_scan_user(void) { // runs frequently to update info
uint8_t default_layer = 0;
default_layer = eeconfig_read_default_layer();
- if (default_layer & (1UL << DVORAK)) {
- l_dvorak = true;
- }
- else if (default_layer & (1UL << COLEMAK)) {
- l_colemak = true;
- }
switch (layer) {
case SYMB:
rgblight_set_blue;
@@ -734,22 +768,21 @@ void matrix_scan_user(void) { // runs frequently to update info
break;
case MOUS:
rgblight_set_urine;
- break;
- case COLEMAK:
- rgblight_set_magenta;
- break;
- case DVORAK:
- rgblight_set_green;
+ rgblight_mode(1);
break;
case 7:
rgblight_sethsv (255,255,255);
+ rgblight_mode(1);
break;
default:
- if (l_colemak) {
+ if (default_layer & (1UL << COLEMAK)) {
+ rgblight_set_green;
+ }
+ else if (default_layer & (1UL << DVORAK)) {
rgblight_set_magenta;
}
- else if (l_dvorak) {
- rgblight_set_green;
+ else if (default_layer & (1UL << WORKMAN)) {
+ rgblight_set_purple;
}
else {
rgblight_set_teal;
@@ -760,7 +793,28 @@ void matrix_scan_user(void) { // runs frequently to update info
has_layer_changed = false;
}
- // Run Diablo 3 macro checking code.
+ // Run Diablo 3 macro checking code.
run_diablo_macro_check();
+#ifdef LEADER_KEYS
+ LEADER_DICTIONARY() {
+ leading = false;
+ leader_end();
+ SEQ_ONE_KEY(KC_C) {
+ SEND_STRING("Covecube");
+ }
+ SEQ_TWO_KEYS(KC_S, KC_D) {
+ SEND_STRING("StableBit DrivePool");
+ }
+ SEQ_TWO_KEYS(KC_C, KC_D) {
+ SEND_STRING("StableBit CloudDrive");
+ }
+ SEQ_TWO_KEYS(KC_S, KC_C) {
+ SEND_STRING("StableBit Scanner");
+ }
+ SEQ_TWO_KEYS(KC_S, KC_T) {
+ SEND_STRING("StableBit Troubleshooter");
+ }
+ }
+#endif
};
diff --git a/keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk b/keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk
index 6c78b556b..5ab769c68 100644
--- a/keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk
+++ b/keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk
@@ -3,8 +3,8 @@ SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
COMMAND_ENABLE = no # Commands for debug and configuration
RGBLIGHT_ENABLE = yes
MIDI_ENABLE = no
-CONSOLE_ENABLE = yes
-
+CONSOLE_ENABLE = no
+LEADER_KEYS = no
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
diff --git a/keyboards/handwired/woodpad/keymaps/drashna/config.h b/keyboards/handwired/woodpad/keymaps/drashna/config.h
index e25a10d0b..2b151606d 100644
--- a/keyboards/handwired/woodpad/keymaps/drashna/config.h
+++ b/keyboards/handwired/woodpad/keymaps/drashna/config.h
@@ -23,6 +23,7 @@
#define TAPPING_TERM 200
#endif // TAP_DANCE_ENABLE
+#define CATERINA_BOOTLOADER
#ifdef RGBLIGHT_ENABLE
diff --git a/keyboards/handwired/woodpad/keymaps/drashna/keymap.c b/keyboards/handwired/woodpad/keymaps/drashna/keymap.c
index f30f3623d..f6476ef66 100644
--- a/keyboards/handwired/woodpad/keymaps/drashna/keymap.c
+++ b/keyboards/handwired/woodpad/keymaps/drashna/keymap.c
@@ -162,7 +162,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_SALT, KC_MORESALT, KC_SALTHARD, KC_GLHF \
),
[_MEDIA] = KEYMAP( /* Base */
- _______, KC_MUTE, KC_VOLD, KC_VOLU,\
+ RESET, KC_MUTE, KC_VOLD, KC_VOLU,\
_______, _______, RGB_HUI, RGB_HUD, \
KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, \
RGB_TOG, RGB_MOD, RGB_SAI, RGB_VAI, \
diff --git a/keyboards/orthodox/keymaps/drashna/config.h b/keyboards/orthodox/keymaps/drashna/config.h
index bcd14a22d..497f7c80d 100644
--- a/keyboards/orthodox/keymaps/drashna/config.h
+++ b/keyboards/orthodox/keymaps/drashna/config.h
@@ -52,11 +52,5 @@ along with this program. If not, see .
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
#endif // RGBLIGHT_ENABLE
-#define FORCE_NKRO
-#ifdef FORCE_NKRO
-#define NKRO_EPSIZE 32
-#endif
-
-#define PERMISSIVE_HOLD
#endif
\ No newline at end of file
diff --git a/keyboards/orthodox/keymaps/drashna/keymap.c b/keyboards/orthodox/keymaps/drashna/keymap.c
index f76126527..a15fa6f75 100644
--- a/keyboards/orthodox/keymaps/drashna/keymap.c
+++ b/keyboards/orthodox/keymaps/drashna/keymap.c
@@ -32,14 +32,16 @@ extern keymap_config_t keymap_config;
#define _QWERTY 0
#define _COLEMAK 1
#define _DVORAK 2
-#define _LOWER 3
-#define _RAISE 4
+#define _WORKMAN 3
+#define _LOWER 8
+#define _RAISE 9
#define _ADJUST 16
enum custom_keycodes {
QWERTY = SAFE_RANGE,
COLEMAK,
DVORAK,
+ WORKMAN,
LOWER,
RAISE,
ADJUST,
@@ -58,6 +60,7 @@ enum custom_keycodes {
#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
#define rgblight_set_urine rgblight_sethsv (0x3C, 0xFF, 0xFF);
+#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF);
//This is both for underglow, and Diablo 3 macros
bool has_layer_changed = true;
@@ -99,25 +102,30 @@ qk_tap_dance_action_t tap_dance_actions[] = {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = KEYMAP( \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
- KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_UP, XXXXXXX, KC_DOWN, KC_LEFT, XXXXXXX, KC_RIGHT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_UP, XXXXXXX, KC_DOWN, KC_LEFT, XXXXXXX, KC_RIGHT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, LOWER, KC_SPACE, KC_BSPC, KC_DEL, KC_ENT, RAISE, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH), KC_LGUI \
),
[_COLEMAK] = KEYMAP(\
- KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
- KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_UP, XXXXXXX, KC_DOWN, KC_LEFT, XXXXXXX, KC_RIGHT, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_UP, XXXXXXX, KC_DOWN, KC_LEFT, XXXXXXX, KC_RIGHT, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, LOWER, KC_SPACE, KC_BSPC, KC_DEL, KC_ENT, RAISE, KC_K, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH), KC_LGUI \
),
[_DVORAK] = KEYMAP(\
- KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
- KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_UP, XXXXXXX, KC_DOWN, KC_LEFT, XXXXXXX, KC_RIGHT, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \
- KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, LOWER, KC_SPACE, KC_BSPC, KC_DEL, KC_ENT, RAISE, KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_LGUI \
+ KC_ESC, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
+ KC_TAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_UP, XXXXXXX, KC_DOWN, KC_LEFT, XXXXXXX, KC_RIGHT, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \
+ KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, LOWER, KC_SPACE, KC_BSPC, KC_DEL, KC_ENT, RAISE, KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_LGUI \
+),
+[_WORKMAN] = KEYMAP(\
+ KC_ESC, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
+ KC_TAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_UP, XXXXXXX, KC_DOWN, KC_LEFT, XXXXXXX, KC_RIGHT, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \
+ KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, LOWER, KC_SPACE, KC_BSPC, KC_DEL, KC_ENT, RAISE, KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_LGUI \
),
[_LOWER] = KEYMAP( \
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, XXXXXXX, KC_F12, _______, XXXXXXX, KC_RCTL, KC_F11, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
TD(TD_FLSH),KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, _______, _______, KC_F12, KC_HOME, KC_COMM, KC_DOT, KC_END, _______ \
),
@@ -130,8 +138,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ADJUST] = KEYMAP( \
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
- _______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, XXXXXXX, _______, _______, XXXXXXX, _______, AG_SWAP, QWERTY , COLEMAK, DVORAK, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, XXXXXXX, _______, _______, XXXXXXX, _______, AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MAGIC_TOGGLE_NKRO, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
)
@@ -169,14 +177,23 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return false;
break;
case DVORAK:
- if (record->event.pressed) {
+ if (record->event.pressed) {
#ifdef AUDIO_ENABLE
- PLAY_SONG(tone_dvorak);
+ PLAY_SONG(tone_dvorak);
#endif
- persistent_default_layer_set(1UL<<_DVORAK);
- }
- return false;
- break;
+ persistent_default_layer_set(1UL << _DVORAK);
+ }
+ return false;
+ break;
+ case WORKMAN:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ persistent_default_layer_set(1UL << _WORKMAN);
+ }
+ return false;
+ break;
case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
@@ -225,48 +242,45 @@ void matrix_scan_user(void) { // runs frequently to update info
uint8_t default_layer = 0;
default_layer = eeconfig_read_default_layer();
- if (default_layer & (1UL << _DVORAK)) {
- l_dvorak = true;
- }
- else if (default_layer & (1UL << _COLEMAK)) {
- l_colemak = true;
- }
switch (layer) {
- case _QWERTY:
- if (l_colemak) {
+ case _QWERTY:
+ if (default_layer & (1UL << _COLEMAK)) {
+ rgblight_set_magenta;
+ }
+ else if (default_layer & (1UL << _DVORAK)) {
+ rgblight_set_green;
+ }
+ else if (default_layer & (1UL << _WORKMAN)) {
+ rgblight_set_purple;
+ }
+ else {
+ rgblight_set_teal;
+ }
+ rgblight_mode(1);
+ break;
+ case _COLEMAK:
rgblight_set_magenta;
- }
- else if (l_dvorak) {
+ rgblight_mode(1);
+ break;
+ case _DVORAK:
rgblight_set_green;
- }
- else {
- rgblight_set_teal;
- }
- rgblight_mode(1);
- break;
- case _COLEMAK:
- rgblight_set_magenta;
- rgblight_mode(1);
- break;
- case _DVORAK:
- rgblight_set_green;
- rgblight_mode(1);
- break;
- case _RAISE:
- rgblight_set_blue;
- rgblight_mode(2);
- break;
- case _LOWER:
- rgblight_set_orange;
- rgblight_mode(3);
- break;
- case _ADJUST:
- rgblight_set_red;
- rgblight_mode(17);
- break;
- case 6:
- rgblight_set_urine;
- break;
+ rgblight_mode(1);
+ break;
+ case _RAISE:
+ rgblight_set_blue;
+ rgblight_mode(2);
+ break;
+ case _LOWER:
+ rgblight_set_orange;
+ rgblight_mode(3);
+ break;
+ case _ADJUST:
+ rgblight_set_red;
+ rgblight_mode(17);
+ break;
+ case 6:
+ rgblight_set_urine;
+ break;
}
has_layer_changed = false;
}
diff --git a/keyboards/orthodox/keymaps/drashna/rules.mk b/keyboards/orthodox/keymaps/drashna/rules.mk
index 2090afe9a..4980c0315 100644
--- a/keyboards/orthodox/keymaps/drashna/rules.mk
+++ b/keyboards/orthodox/keymaps/drashna/rules.mk
@@ -1,2 +1,9 @@
-CONSOLE_ENABLE = yes
-TAP_DANCE_ENABLE = yes
\ No newline at end of file
+CONSOLE_ENABLE = no
+TAP_DANCE_ENABLE = yes
+RGBLIGHT_ENABLE = no
+MOUSEKEY_ENABLE = no
+
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/viterbi/keymaps/drashna/config.h b/keyboards/viterbi/keymaps/drashna/config.h
new file mode 100644
index 000000000..6d409cd2e
--- /dev/null
+++ b/keyboards/viterbi/keymaps/drashna/config.h
@@ -0,0 +1,41 @@
+/*
+Copyright 2017 Danny Nguyen
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define _MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+#endif
diff --git a/keyboards/viterbi/keymaps/drashna/keymap.c b/keyboards/viterbi/keymaps/drashna/keymap.c
new file mode 100644
index 000000000..e227b472f
--- /dev/null
+++ b/keyboards/viterbi/keymaps/drashna/keymap.c
@@ -0,0 +1,413 @@
+#include "viterbi.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _NUMNAV 0
+#define _DIABLO 1
+#define _MACROS 2
+#define _GAMEPAD 3
+#define _MEDIA 4
+
+
+enum custom_keycodes {
+ KC_DIABLO_CLEAR = SAFE_RANGE,
+ KC_P00,
+ KC_OVERWATCH,
+ KC_SALT,
+ KC_MORESALT,
+ KC_SALTHARD,
+ KC_GOODGAME,
+ KC_SYMM,
+ KC_DOOMFIST,
+ KC_JUSTGAME,
+ KC_GLHF,
+ KC_TORB
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#define MACROS TG(_MACROS)
+#define DIABLO TG(_DIABLO)
+#define GAMEPAD TG(_GAMEPAD)
+#define MEDIA TG(_MEDIA)
+
+
+bool is_overwatch = false;
+
+//This is both for underglow, and Diablo 3 macros
+static uint8_t current_layer = 0;
+bool has_layer_changed = true;
+
+
+#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF);
+#define rgblight_set_red rgblight_sethsv(0x00, 0xFF, 0xFF);
+#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF);
+#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF);
+#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
+#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
+#define rgblight_set_urine rgblight_sethsv (0x3C, 0xFF, 0xFF);
+#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF);
+
+#ifdef TAP_DANCE_ENABLE
+//define diablo macro timer variables
+static uint16_t diablo_timer[4];
+static uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 };
+static uint8_t diablo_key_time[4];
+
+
+bool check_dtimer(uint8_t dtimer) {
+ // has the correct number of seconds elapsed (as defined by diablo_times)
+ return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true;
+};
+
+
+enum {
+ TD_DIABLO_1 = 0,
+ TD_DIABLO_2,
+ TD_DIABLO_3,
+ TD_DIABLO_4
+};
+
+
+// Cycle through the times for the macro, starting at 0, for disabled.
+// Max of six values, so don't exceed
+void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
+ if (state->count >= 7) {
+ diablo_key_time[diablo_key] = diablo_times[0];
+ reset_tap_dance(state);
+ }
+ else {
+ diablo_key_time[diablo_key] = diablo_times[state->count - 1];
+ }
+}
+
+
+// Would rather have one function for all of this, but no idea how to do that...
+void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) {
+ diablo_tapdance_master(state, user_data, 0);
+}
+
+void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) {
+ diablo_tapdance_master(state, user_data, 1);
+}
+
+void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) {
+ diablo_tapdance_master(state, user_data, 2);
+}
+
+void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) {
+ diablo_tapdance_master(state, user_data, 3);
+}
+
+
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ // tap once to disable, and more to enable timed micros
+ [TD_DIABLO_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
+ [TD_DIABLO_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
+ [TD_DIABLO_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
+ [TD_DIABLO_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
+
+};
+#endif
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | Ins | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | Del |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | - | Tab | Q | W | E | R | T | | Y | U | I | O | P | [ | ] |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | = | Esc | A | S | D | F | G | | H | J | K | L | ; | " |Enter |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Pg Up| Shift| Z | X | C | V | B | | N | M | , | . | / | Home | End |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Pg Dn|Adjust| Ctrl | Alt | GUI |Lower |Space | |Space |Raise | Left | Down | Up | Right| \ |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+ [_NUMNAV] = KEYMAP(
+ MACROS, DIABLO, GAMEPAD, KC_NLCK, KC_SCLK, KC_PTSC, KC_PSLS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ MEDIA, XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_PAST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ KC_HOME, KC_DEL, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PMNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ KC_END, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3, KC_PPLS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_P00, KC_PDOT, KC_PENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
+ ),
+
+/* Lower
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | | ~ | F1 | F3 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | _ | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | { | } |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | + | | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | F7 | F8 | F9 | F10 | F11 | | F12 | | | | | | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | Next | Vol- | Vol+ | Play | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+ [_DIABLO] = KEYMAP(
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
+ ),
+
+
+ [_MACROS] = KEYMAP(
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
+ ),
+
+ [_MEDIA] = KEYMAP(
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
+ )
+
+};
+
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t kc;
+ if (is_overwatch) {
+ kc = KC_BSPC;
+ }
+ else {
+ kc = KC_ENTER;
+ }
+ switch (keycode) {
+#ifdef TAP_DANCE_ENABLE
+ case KC_DIABLO_CLEAR: // reset all Diable timers, disabling them
+ if (record->event.pressed) {
+ uint8_t dtime;
+
+ for (dtime = 0; dtime < 4; dtime++) {
+ diablo_key_time[dtime] = diablo_times[0];
+ }
+ }
+ return false;
+ break;
+#endif
+ case KC_P00:
+ if (!record->event.pressed) {
+ register_code(KC_P0);
+ unregister_code(KC_P0);
+ register_code(KC_P0);
+ unregister_code(KC_P0);
+ }
+ return false;
+ break;
+ case KC_OVERWATCH: // reset all Diable timers, disabling them
+ if (record->event.pressed) {
+ is_overwatch = !is_overwatch;
+ has_layer_changed = true;
+ }
+ return false;
+ break;
+ case KC_SALT:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("Salt, salt, salt...");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_MORESALT:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("Please sir, can I have some more salt?!");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_SALTHARD:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("Your salt only makes my penis that much harder, and even more aggressive!");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_GOODGAME:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("Good game, everyone!");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_GLHF:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("Good luck, have fun!!!");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_SYMM:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("Left click to win!");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_DOOMFIST:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ 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!");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_JUSTGAME:
+
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ 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.");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_TORB:
+
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("That was positively riveting!");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+
+ }
+ return true;
+}
+
+#ifdef TAP_DANCE_ENABLE
+
+// Sends the key press to system, but only if on the Diablo layer
+void send_diablo_keystroke(uint8_t diablo_key) {
+ if (current_layer == _DIABLO) {
+ switch (diablo_key) {
+ case 0:
+ SEND_STRING("1");
+ break;
+ case 1:
+ SEND_STRING("2");
+ break;
+ case 2:
+ SEND_STRING("3");
+ break;
+ case 3:
+ SEND_STRING("4");
+ break;
+ }
+ }
+}
+
+// Checks each of the 4 timers/keys to see if enough time has elapsed
+// Runs the "send string" command if enough time has passed, and resets the timer.
+void run_diablo_macro_check(void) {
+ uint8_t dtime;
+
+ for (dtime = 0; dtime < 4; dtime++) {
+ if (check_dtimer(dtime) && diablo_key_time[dtime]) {
+ diablo_timer[dtime] = timer_read();
+ send_diablo_keystroke(dtime);
+ }
+ }
+
+}
+#endif
+
+
+void matrix_scan_user(void) { // runs frequently to update info
+ uint8_t layer = biton32(layer_state);
+
+ if (layer != current_layer) {
+ has_layer_changed = true;
+ current_layer = layer;
+ }
+ // Check layer, and apply color if its changed since last check
+ if (has_layer_changed) {
+
+ switch (layer) {
+ case _NUMNAV:
+ rgblight_set_teal;
+ rgblight_mode(2);
+ break;
+ case _MACROS:
+ rgblight_set_orange;
+ if (is_overwatch) {
+ rgblight_mode(17);
+ }
+ else {
+ rgblight_mode(18);
+ }
+ break;
+ case _DIABLO:
+ rgblight_set_red;
+ rgblight_mode(5);
+ break;
+ case _GAMEPAD:
+ rgblight_set_urine;
+ rgblight_mode(1);
+ break;
+ case _MEDIA:
+ rgblight_set_blue;
+ rgblight_mode(1);
+ break;
+ }
+ has_layer_changed = false;
+ }
+
+#ifdef TAP_DANCE_ENABLE
+ // Run Diablo 3 macro checking code.
+ run_diablo_macro_check();
+#endif
+};
\ No newline at end of file
diff --git a/keyboards/viterbi/keymaps/drashna/rules.mk b/keyboards/viterbi/keymaps/drashna/rules.mk
new file mode 100644
index 000000000..f1bb92837
--- /dev/null
+++ b/keyboards/viterbi/keymaps/drashna/rules.mk
@@ -0,0 +1,8 @@
+CONSOLE_ENABLE = no
+TAP_DANCE_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+MOUSEKEY_ENABLE = no
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif