Updated keymaps (#1853)

* Add woodpad

* Cleanup

* Remove misc layouts for woodpad

* Move woodpad to handwired

* Updated RGB Underglow info

* Cleanup macros

* Fix odd merge issue

* Tweaked RGB lighting stuff

* Start to merge orthodox/ergodox keymaps (persistant layers)

* Add forced NKRO

* Added Colemak and Dvorak layers to default orthodox keymap

* Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow

* Updated macros and added workman keymaps

* Fixed RGB lighting for Workman layout

* Add leader keys

* Remove force NKRO

* Add Viterbi one handed layout and minor tweaks to others
stm32l476
drashna 7 years ago committed by Jack Humbert
parent 22564d8ee7
commit f3534f999f

@ -14,10 +14,5 @@
#endif // RGBLIGHT_ENABLE #endif // RGBLIGHT_ENABLE
#define FORCE_NKRO #define FORCE_NKRO
#ifdef FORCE_NKRO
#define NKRO_EPSIZE 32
#endif
#define PERMISSIVE_HOLD
#endif #endif

@ -28,22 +28,23 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define QWERTY 0 #define QWERTY 0
#define COLEMAK 1 #define COLEMAK 1
#define DVORAK 2 #define DVORAK 2
#define SYMB 3 #define WORKMAN 3
#define OVERWATCH 4 #define SYMB 8
#define DIABLO 5 #define OVERWATCH 9
#define MOUS 6 #define DIABLO 10
#define MOUS 12
//Leader Key stuff
#ifdef LEADER_TIMEOUT
#undef LEADER_TIMEOUT
#endif
#define LEADER_TIMEOUT 1500
//define modifiers //define modifiers
#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) #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_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
#define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT)) #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 //define layer change stuff for underglow indicator
bool skip_leds = false; bool skip_leds = false;
@ -54,6 +55,7 @@ bool skip_leds = false;
#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF); #define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF); #define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
#define rgblight_set_urine rgblight_sethsv (0x3C, 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 //This is both for underglow, and Diablo 3 macros
static uint8_t current_layer = 0; static uint8_t current_layer = 0;
@ -82,7 +84,9 @@ enum custom_keycodes {
KC_DIABLO_CLEAR, KC_DIABLO_CLEAR,
KC_QWERTY, KC_QWERTY,
KC_COLEMAK, KC_COLEMAK,
KC_DVORAK KC_DVORAK,
KC_WORKMAN,
KC_MAKEQMK
}; };
#ifdef TAP_DANCE_ENABLE #ifdef TAP_DANCE_ENABLE
@ -222,23 +226,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS), 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_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_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), 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, 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_HOME,
KC_SPACE, KC_BSPACE, KC_END, KC_SPACE, KC_BSPACE, KC_END,
TG(SYMB), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, TG(MOUS), 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, 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), 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_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1,
KC_LALT, CTL_T(KC_ESCAPE), KC_LALT, CTL_T(KC_ESCAPE),
KC_PGUP, KC_PGUP,
KC_PGDOWN, KC_DELETE, KC_ENTER KC_PGDOWN, KC_DELETE, KC_ENTER
), ),
/* Keymap 1: Basic layer /* Keymap 0: Basic layer
* *
* ,--------------------------------------------------. ,--------------------------------------------------. * ,--------------------------------------------------. ,--------------------------------------------------.
* | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | * | = | 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( [COLEMAK] = KEYMAP(
// left hand // left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS), 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_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, 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_HOME,
KC_SPC,KC_BSPC,KC_END, KC_SPC,KC_BSPC,KC_END,
// right hand // right hand
KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(MOUS), 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, TG(DIABLO), 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, KC_H, KC_N, KC_E, KC_I, KC_O, GUI_T(KC_QUOTE),
TG(COLEMAK), KC_K, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLASH),KC_RSHIFT, 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_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1,
KC_LALT, CTL_T(KC_ESC), KC_LALT, CTL_T(KC_ESC),
KC_PGUP, 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 | \ | * | = | 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( [DVORAK] = KEYMAP(
// left hand // left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS), 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_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, 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
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_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_HOME,
KC_SPC,KC_BSPC,KC_END, KC_SPC,KC_BSPC,KC_END,
// right hand // right hand
KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, TG(MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
TG(DVORAK), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, TG(DIABLO), KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSLS,
KC_D, KC_H, KC_T, KC_N, LT(MOUS, KC_S), KC_MINS, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOTE,
TG(COLEMAK), KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSHIFT, 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_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_FN1,
KC_LALT, CTL_T(KC_ESC), KC_LALT, CTL_T(KC_ESC),
KC_PGUP, KC_PGUP,
KC_PGDN,KC_TAB, KC_ENT KC_PGDN,KC_DELETE, KC_ENT
), ),
/* Keymap 3: Symbol Layer /* Keymap 3: Symbol Layer
@ -347,10 +394,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
[SYMB] = KEYMAP( [SYMB] = KEYMAP(
KC_ESCAPE,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_ESCAPE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_WORKMAN,
M_VERSION, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, VRSN, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_DVORAK,
M_MAKE, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE, 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_TRNS, 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_NO, KC_AMPR, KC_ASTR, KC_COLN, KC_SCOLON,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
@ -358,7 +405,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_QWERTY, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 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_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_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_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, KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, KC_TRNS,
RGB_TOG, RGB_SLD, RGB_TOG, RGB_SLD,
@ -397,10 +444,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LGUI, KC_LGUI,
KC_V, KC_SPACE, KC_H, KC_V, KC_SPACE, KC_H,
KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, 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, 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, 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_NO, KC_NO, KC_NO,
KC_NO, KC_NO,
@ -439,14 +486,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
SFT_T(KC_SPACE), ALT_T(KC_Q), KC_DIABLO_CLEAR, 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_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_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_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 /* Keymap 4: Media and mouse keys
@ -458,33 +506,33 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | |MsLeft|MsDown|MsRght| | |------| |------| | | Acc0 | Acc1 | Acc2 | | * | |MsLeft|MsDown|MsRght| | |------| |------| | | Acc0 | Acc1 | Acc2 | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | Acc0 | Acc1 | Acc2 | | | | | | Play | Stop | Mute |VolDn |VolUp | | * | | Acc0 | Acc1 | Acc2 | | | | | | | Mute |VolDn |VolUp | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | | | | * | | | | | | | Play | Stop | | | |
* `----------------------------------' `----------------------------------' * `----------------------------------' `----------------------------------'
* ,-------------. ,-------------. * ,-------------. ,-------------.
* | | | | | | * | | | | | |
* ,------|------|------| |------+------+------. * ,------|------|------| |------+------+------.
* | | | MWUp | | | | | * | | | MWUp | | | | |
* | Lclk | Rclk |------| |------| MBn4 | MBn4 | * | Lclk | Rclk |------| |------| MBn4 | MBn5 |
* | | | MWDn | | Mclk | | | * | | | MWDn | | Mclk | | |
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
[MOUS] = KEYMAP( [MOUS] = KEYMAP(
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_TRNS,
KC_NO, KC_NO, KC_MS_UP, 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_LEFT, KC_MS_DOWN, KC_MS_RIGHT,KC_NO, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_NO,
KC_NO, KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2,KC_NO, KC_NO, KC_TRNS, 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_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_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_NO,
KC_NO, KC_NO,
KC_MS_BTN3,KC_MS_BTN4,KC_MS_BTN5 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) { void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer); eeconfig_update_default_layer(default_layer);
@ -630,6 +661,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} }
return false; return false;
break; 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,16 +717,13 @@ void matrix_init_user(void) { // Runs boot tasks for keyboard
}; };
LEADER_EXTERNS();
void matrix_scan_user(void) { // runs frequently to update info void matrix_scan_user(void) { // runs frequently to update info
uint8_t modifiders = get_mods(); uint8_t modifiders = get_mods();
uint8_t layer = biton32(layer_state); 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) { if (!skip_leds) {
ergodox_board_led_off(); ergodox_board_led_off();
ergodox_right_led_1_off(); ergodox_right_led_1_off();
@ -694,10 +734,10 @@ void matrix_scan_user(void) { // runs frequently to update info
// then lets use them for modifier indicators. Shame we don't have 4... // then lets use them for modifier indicators. Shame we don't have 4...
// Also, no "else", since we want to know each, independantly. // Also, no "else", since we want to know each, independantly.
if ( modifiders & MODS_SHIFT_MASK) { if ( modifiders & MODS_SHIFT_MASK) {
ergodox_right_led_1_on(); ergodox_right_led_2_on();
} }
if ( modifiders & MODS_CTRL_MASK) { if ( modifiders & MODS_CTRL_MASK) {
ergodox_right_led_2_on(); ergodox_right_led_1_on();
} }
if ( modifiders & MODS_ALT_MASK) { 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; uint8_t default_layer = 0;
default_layer = eeconfig_read_default_layer(); 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) { switch (layer) {
case SYMB: case SYMB:
rgblight_set_blue; rgblight_set_blue;
@ -734,22 +768,21 @@ void matrix_scan_user(void) { // runs frequently to update info
break; break;
case MOUS: case MOUS:
rgblight_set_urine; rgblight_set_urine;
break; rgblight_mode(1);
case COLEMAK:
rgblight_set_magenta;
break;
case DVORAK:
rgblight_set_green;
break; break;
case 7: case 7:
rgblight_sethsv (255,255,255); rgblight_sethsv (255,255,255);
rgblight_mode(1);
break; break;
default: default:
if (l_colemak) { if (default_layer & (1UL << COLEMAK)) {
rgblight_set_green;
}
else if (default_layer & (1UL << DVORAK)) {
rgblight_set_magenta; rgblight_set_magenta;
} }
else if (l_dvorak) { else if (default_layer & (1UL << WORKMAN)) {
rgblight_set_green; rgblight_set_purple;
} }
else { else {
rgblight_set_teal; rgblight_set_teal;
@ -762,5 +795,26 @@ void matrix_scan_user(void) { // runs frequently to update info
// Run Diablo 3 macro checking code. // Run Diablo 3 macro checking code.
run_diablo_macro_check(); 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
}; };

@ -3,8 +3,8 @@ SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
COMMAND_ENABLE = no # Commands for debug and configuration COMMAND_ENABLE = no # Commands for debug and configuration
RGBLIGHT_ENABLE = yes RGBLIGHT_ENABLE = yes
MIDI_ENABLE = no MIDI_ENABLE = no
CONSOLE_ENABLE = yes CONSOLE_ENABLE = no
LEADER_KEYS = no
ifndef QUANTUM_DIR ifndef QUANTUM_DIR
include ../../../../Makefile include ../../../../Makefile
endif endif

@ -23,6 +23,7 @@
#define TAPPING_TERM 200 #define TAPPING_TERM 200
#endif // TAP_DANCE_ENABLE #endif // TAP_DANCE_ENABLE
#define CATERINA_BOOTLOADER
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE

@ -162,7 +162,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_SALT, KC_MORESALT, KC_SALTHARD, KC_GLHF \ KC_SALT, KC_MORESALT, KC_SALTHARD, KC_GLHF \
), ),
[_MEDIA] = KEYMAP( /* Base */ [_MEDIA] = KEYMAP( /* Base */
_______, KC_MUTE, KC_VOLD, KC_VOLU,\ RESET, KC_MUTE, KC_VOLD, KC_VOLU,\
_______, _______, RGB_HUI, RGB_HUD, \ _______, _______, RGB_HUI, RGB_HUD, \
KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, \ KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, \
RGB_TOG, RGB_MOD, RGB_SAI, RGB_VAI, \ RGB_TOG, RGB_MOD, RGB_SAI, RGB_VAI, \

@ -52,11 +52,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1 #define RGBLIGHT_EFFECT_BREATHE_CENTER 1
#endif // RGBLIGHT_ENABLE #endif // RGBLIGHT_ENABLE
#define FORCE_NKRO
#ifdef FORCE_NKRO
#define NKRO_EPSIZE 32
#endif
#define PERMISSIVE_HOLD
#endif #endif

@ -32,14 +32,16 @@ extern keymap_config_t keymap_config;
#define _QWERTY 0 #define _QWERTY 0
#define _COLEMAK 1 #define _COLEMAK 1
#define _DVORAK 2 #define _DVORAK 2
#define _LOWER 3 #define _WORKMAN 3
#define _RAISE 4 #define _LOWER 8
#define _RAISE 9
#define _ADJUST 16 #define _ADJUST 16
enum custom_keycodes { enum custom_keycodes {
QWERTY = SAFE_RANGE, QWERTY = SAFE_RANGE,
COLEMAK, COLEMAK,
DVORAK, DVORAK,
WORKMAN,
LOWER, LOWER,
RAISE, RAISE,
ADJUST, ADJUST,
@ -58,6 +60,7 @@ enum custom_keycodes {
#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF); #define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF); #define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
#define rgblight_set_urine rgblight_sethsv (0x3C, 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 //This is both for underglow, and Diablo 3 macros
bool has_layer_changed = true; bool has_layer_changed = true;
@ -99,20 +102,25 @@ qk_tap_dance_action_t tap_dance_actions[] = {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = KEYMAP( \ [_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_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_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 \ 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(\ [_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_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_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 \ 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(\ [_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_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_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 \ 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 \
), ),
@ -130,8 +138,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ADJUST] = KEYMAP( \ [_ADJUST] = KEYMAP( \
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, XXXXXXX, _______, _______, XXXXXXX, _______, AG_SWAP, QWERTY , COLEMAK, DVORAK, _______, _______, \ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, XXXXXXX, _______, _______, XXXXXXX, _______, AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MAGIC_TOGGLE_NKRO, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
) )
@ -173,7 +181,16 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef AUDIO_ENABLE #ifdef AUDIO_ENABLE
PLAY_SONG(tone_dvorak); PLAY_SONG(tone_dvorak);
#endif #endif
persistent_default_layer_set(1UL<<_DVORAK); 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; return false;
break; break;
@ -225,20 +242,17 @@ void matrix_scan_user(void) { // runs frequently to update info
uint8_t default_layer = 0; uint8_t default_layer = 0;
default_layer = eeconfig_read_default_layer(); 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) { switch (layer) {
case _QWERTY: case _QWERTY:
if (l_colemak) { if (default_layer & (1UL << _COLEMAK)) {
rgblight_set_magenta; rgblight_set_magenta;
} }
else if (l_dvorak) { else if (default_layer & (1UL << _DVORAK)) {
rgblight_set_green; rgblight_set_green;
} }
else if (default_layer & (1UL << _WORKMAN)) {
rgblight_set_purple;
}
else { else {
rgblight_set_teal; rgblight_set_teal;
} }

@ -1,2 +1,9 @@
CONSOLE_ENABLE = yes CONSOLE_ENABLE = no
TAP_DANCE_ENABLE = yes TAP_DANCE_ENABLE = yes
RGBLIGHT_ENABLE = no
MOUSEKEY_ENABLE = no
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

@ -0,0 +1,41 @@
/*
Copyright 2017 Danny Nguyen <danny@hexwire.com>
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 <http://www.gnu.org/licenses/>.
*/
#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

@ -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
};

@ -0,0 +1,8 @@
CONSOLE_ENABLE = no
TAP_DANCE_ENABLE = yes
RGBLIGHT_ENABLE = yes
MOUSEKEY_ENABLE = no
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
Loading…
Cancel
Save