qmk

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.z3bra.org/qmk.git
Log | Files | Refs | Submodules | LICENSE

commit 3e861c2fd5e82a1c5fde6f41cc9fb920c4deb22d
parent f113f1927fb6e4fd108b003863d4cce967292a9c
Author: drashna <drashna@live.com>
Date:   Mon,  6 Nov 2017 10:32:48 -0800

Update and move around drashna keymaps (#1976)

* Add woodpad

* Cleanup

* Remove misc layouts for woodpad

* Move woodpad to handwired

* Updated RGB Underglow info

* Cleanup macros

* Tweaked RGB lighting stuff

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

* Add woodpad

* Add forced NKRO

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

* Updated macros and added workman keymaps

* Fixed RGB lighting for Workman layout

* Add leader keys

* Remove force NKRO

* Add Viterbi one handed layout and minor tweaks to others

* Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts

* Made "make" keystroke universal

* Clean up and updates of drashna keymaps

* Add workman layer to planck

* Update to keymaps

* Fix makefile toggle code in ez keymap
Finish adding RGB code to orthodox

* Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function

* Remove unnecessary planck layout

* Fixed Workman song

* update make command and added lit reset

* Fixed formatting to fall in line with official standards

* Minor tweaks

* Removed Leader Keys from Ergodox EZ Keymap
Added KC_RESET that resets board and sets underglow to red

* Tweak reset code

* Cleanup

* Remove misc layouts for woodpad

* Move woodpad to handwired

* Updated RGB Underglow info

* Cleanup macros

* Tweaked RGB lighting stuff

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

* Add forced NKRO

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

* Updated macros and added workman keymaps

* Fixed RGB lighting for Workman layout

* Add leader keys

* Remove force NKRO

* Add Viterbi one handed layout and minor tweaks to others

* Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts

* Made "make" keystroke universal

* Clean up and updates of drashna keymaps

* Add workman layer to planck

* Update to keymaps

* Fix makefile toggle code in ez keymap
Finish adding RGB code to orthodox

* Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function

* Remove unnecessary planck layout

* Fixed Workman song

* update make command and added lit reset

* Fixed formatting to fall in line with official standards

* Minor tweaks

* Removed Leader Keys from Ergodox EZ Keymap
Added KC_RESET that resets board and sets underglow to red

* Tweak reset code

* Fix rebasing issues

* remove head files

* Fix "macro" issue

* Rename ez keymaps for userspace

* Revert "Rename ez keymaps for userspace"

This reverts commit c25425911852e41711a5f0273b5741adb16e5bd4.

* Renamed Ergodox EZ layouts so that all of my personal layouts are on the same name, in prep for using userspaces

* Fix ergodox code

* Remove "drashna-ez" keymap as it's no longer needed

Diffstat:
keyboards/ergodox_ez/keymaps/drashna-custom/config.h | 17-----------------
keyboards/ergodox_ez/keymaps/drashna-custom/keymap.c | 832-------------------------------------------------------------------------------
keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk | 13-------------
keyboards/ergodox_ez/keymaps/drashna/config.h | 21++++++++++++++-------
keyboards/ergodox_ez/keymaps/drashna/keymap.c | 884+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
keyboards/ergodox_ez/keymaps/drashna/readme.md | 10----------
keyboards/ergodox_ez/keymaps/drashna/rules.mk | 10++++++++--
keyboards/handwired/woodpad/keymaps/drashna/keymap.c | 483+++++++++++++++++++++++++++++++++++++++++--------------------------------------
keyboards/orthodox/keymaps/drashna/keymap.c | 310++++++++++++++++++++++++++++++++++++++++++-------------------------------------
keyboards/orthodox/keymaps/drashna/rules.mk | 2+-
keyboards/viterbi/keymaps/drashna/keymap.c | 467+++++++++++++++++++++++++++++++++++++++++--------------------------------------
11 files changed, 1429 insertions(+), 1620 deletions(-)

diff --git a/keyboards/ergodox_ez/keymaps/drashna-custom/config.h b/keyboards/ergodox_ez/keymaps/drashna-custom/config.h @@ -1,16 +0,0 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H -#include "../../config.h" - - -#define TAPPING_TERM 200 - -#ifdef RGBLIGHT_ENABLE -#undef RGBLIGHT_SAT_STEP -#define RGBLIGHT_SAT_STEP 12 -#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 7 -#define RGBLIGHT_EFFECT_SNAKE_LENGTH 7 -#define RGBLIGHT_EFFECT_BREATHE_CENTER 1 -#endif // RGBLIGHT_ENABLE - -#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 @@ -1,832 +0,0 @@ -/* -This is the keymap for the keyboard -Copyright 2012 Jun Wako <wakojun@gmail.com> -Copyright 2015 Jack Humbert -Copyright 2017 Art Ortenburger -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/>. -*/ -#include QMK_KEYBOARD_H -#include "debug.h" -#include "action_layer.h" -#include "version.h" - - -#include "keymap_german.h" - -#include "keymap_nordic.h" - -// Define layer names -#define QWERTY 0 -#define COLEMAK 1 -#define DVORAK 2 -#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 layer change stuff for underglow indicator -bool skip_leds = false; - -#ifdef RGBLIGHT_ENABLE -#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_yellow rgblight_sethsv (0x3C, 0xFF, 0xFF); -#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF); -#endif - -//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 custom_keycodes { - 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_WORKMAN, - KC_MAKEQMK -}; - -#ifdef TAP_DANCE_ENABLE -enum { - TD_FLSH = 0, - TD_DIABLO_1, - TD_DIABLO_2, - TD_DIABLO_3, - TD_DIABLO_4 -}; - - - - -// on each tap, light up one led, from right to left -// 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(); - 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(); - - } -} - -// 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) { -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); - rgblight_mode(1); - rgblight_setrgb(0xff,0x00,0x00); -#endif - reset_tap_dance(state); - reset_keyboard(); - } -} - -// 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); -} - - -// 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; -} - -//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), - // 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] = { -/* Keymap 0: Basic layer - * - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | = + | 1 ! | 2 @ | 3 # | 4 $ | 5 % | TG(4)| | TG(4)| 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | TAB | Q | W | E | R | T | TG(3)| |TG(3) | Y | U | I | O | P | \ | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Bksp | A | S | D | F | G |------| |------| H | J | K | L | ; | ' " | - * |--------+------+------+------+------+------| TG(2)| | TG(2)|------+------+------+------+------+--------| - * | Shift | Z | X | C | V | B | | | | N | M | , < | . > | ? / | Shift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | `/SYM| ' " | LGUI | [ { | ] } | | LEFT | DOWN | UP |RIGHT | SYMB | - * `----------------------------------' `----------------------------------' - * ,--------------. ,--------------. - * |Alt/Ap| Win | | Alt |Ctl/Esc| - * ,------|------|-------| |------+-------+------. - * | | | Home | | PgUp | | | - * | Space| Bksp |-------| |------| DEL |Enter | - * | | | End | | PgDn | | | - * `---------------------' `---------------------' - */ - [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, 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, - KC_HOME, - 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(OVERWATCH), KC_N, KC_M, KC_COMMA, KC_DOT, RCTL_T(KC_SLASH),KC_RSHIFT, - KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(SYMB), - KC_LEAD, 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 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | 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_* -[COLEMAK] = KEYMAP( - // left hand - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS), - 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, 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_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_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, TT(SYMB), - 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 | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | BkSp | A | O | E | U | I |------| |------| D | H | T | N |S / L2| - | - * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/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_* -[DVORAK] = KEYMAP( - // left hand - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS), - 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, 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_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, TT(SYMB), - 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_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, TT(SYMB), - KC_LALT, CTL_T(KC_ESC), - KC_PGUP, - KC_PGDN,KC_DELETE, KC_ENT - ), - - /* Keymap 3: Symbol Layer -* -* ,--------------------------------------------------. ,--------------------------------------------------. -* | ESC | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | -* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -* | VERSION| ! | @ | { | } | | | | | | + | 7 | 8 | 9 | * | F12 | -* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -* | MAKE | # | $ | ( | ) | ` |------| |------| - | 4 | 5 | 6 | / | PrtSc | -* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -* | RESET | % | ^ | [ | ] | ~ | | | | NUM | 1 | 2 | 3 | = | PAUSE | -* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' -* | LT0 | & | * | : | ; | | | 0 | NUM. | ENT | ENT | -* `----------------------------------' `----------------------------------' -* ,-------------. ,-------------. -* | RGBM | RED | | OFF | SOLID| -* ,------|------|------| |------+------+------. -* | | | GREEN| | | | | -* | RGB | RGB |------| |------| NUM0 | NUME | -* | DARK |BRITE | BLUE | | | | | -* `--------------------' `--------------------' -*/ - [SYMB] = KEYMAP( - 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_TRNS, 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 - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ESC | | | | | | | | | F9 | F10 | F11 | F12 | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | F1 | K | Q | W | E | R | T | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | TAB | G | A | S | D | F |------| |------| | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | LCTR | LSHFT| Z | X | C | V | | | | N | M | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | J | U | I | Y | T | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | O | P | | | | - * ,------|------|------| |------+------+------. - * | | | LGUI | | | | | - * | V | SPACE|------ |------| | Enter| - * | | | H | | | | | - * `--------------------' `--------------------' - */ - [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_O, KC_P, - KC_LGUI, - KC_V, KC_SPACE, KC_H, - - 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_PGDOWN, KC_DELETE, KC_ENTER - ), - -/* Keymap 3: - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ESC | V | D | ALT | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | TAB | S | I | F | M | T | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | Q | 1 | 2 | 3 | 4 | G |------| |------| | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | NUMLOCK| NUM1 | NUM2 | NUM3 | NUM4 | Z | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | LCTL | MAC1 | MAC2 | MAC3 | MAC4 | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | L | J | | | | - * ,------|------|------| |------+------+------. - * | | | G | | | | | - * | SPACE| Q |------ |------| | | - * | SHIFT| ALT | 0MAC | | | | | - * `--------------------' `--------------------' - */ - [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_L, KC_J, - KC_F, - SFT_T(KC_SPACE), ALT_T(KC_Q), KC_DIABLO_CLEAR, - - - - 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 - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | MsUp | | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | |MsLeft|MsDown|MsRght| | |------| |------| | | Acc0 | Acc1 | Acc2 | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | Acc0 | Acc1 | Acc2 | | | | | | | Mute |VolDn |VolUp | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | Play | Stop | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | MWUp | | | | | - * | 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_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_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 - ), - -}; - - -void persistent_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { -#ifdef CONSOLE_ENABLE - xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed); -#endif - 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) { -#ifdef RGBLIGHT_ENABLE - rgblight_mode(1); -#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_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_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; - - for (dtime = 0; dtime < 4; dtime++) { - diablo_key_time[dtime] = diablo_times[0]; - } - } - return false; - break; - case KC_QWERTY: - if (record->event.pressed) { - persistent_default_layer_set(1UL << QWERTY); - } - return false; - break; - case KC_COLEMAK: - if (record->event.pressed) { - persistent_default_layer_set(1UL << COLEMAK); - } - return false; - break; - case KC_DVORAK: - if (record->event.pressed) { - persistent_default_layer_set(1UL << DVORAK); - } - 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 " QMK_KEYBOARD ":" QMK_KEYMAP ":teensy"SS_TAP(X_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 (biton32(layer_state) == 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_init_user(void) { // Runs boot tasks for keyboard -#ifdef RGBLIGHT_ENABLE - uint8_t default_layer = eeconfig_read_default_layer(); - - rgblight_enable(); - 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; - } -#endif -}; - -LEADER_EXTERNS(); - -void matrix_scan_user(void) { // runs frequently to update info - uint8_t modifiders = get_mods(); - - 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. - if ( modifiders & MODS_SHIFT_MASK) { - ergodox_right_led_2_on(); - } - if ( modifiders & MODS_CTRL_MASK) { - ergodox_right_led_1_on(); - } - if ( modifiders & MODS_ALT_MASK) { - ergodox_right_led_3_on(); - } - - } - - // Run Diablo 3 macro checking code. -#ifdef TAP_DANCE_ENABLE - run_diablo_macro_check(); -#endif - LEADER_DICTIONARY() { - leading = false; - leader_end(); - SEQ_ONE_KEY(KC_C) { - SEND_STRING("Covecube"); - } - SEQ_ONE_KEY(KC_D) { - SEND_STRING("StableBit CloudDrive"); - } - SEQ_ONE_KEY(KC_L) { - register_code(KC_LGUI); - register_code(KC_L); - unregister_code(KC_L); - unregister_code(KC_LGUI); - } - SEQ_TWO_KEYS(KC_S, KC_D) { - SEND_STRING("StableBit DrivePool"); - } - SEQ_TWO_KEYS(KC_S, KC_C) { - SEND_STRING("StableBit Scanner"); - } - SEQ_TWO_KEYS(KC_S, KC_T) { - SEND_STRING("StableBit Troubleshooter"); - } - } -}; - -uint32_t layer_state_set_kb(uint32_t state) { -#ifdef RGBLIGHT_ENABLE - uint8_t default_layer = eeconfig_read_default_layer(); - - switch (biton32(state)) { - case SYMB: - rgblight_set_blue; - rgblight_mode(2); - break; - case OVERWATCH: - rgblight_set_orange; - rgblight_mode(17); - break; - case DIABLO: - rgblight_set_red; - rgblight_mode(5); - break; - case MOUS: - rgblight_set_yellow; - rgblight_mode(1); - break; - default: - if (default_layer & (1UL << COLEMAK)) { - rgblight_set_green; - } - else if (default_layer & (1UL << DVORAK)) { - rgblight_set_magenta; - } - else if (default_layer & (1UL << WORKMAN)) { - rgblight_set_purple; - } - else { - rgblight_set_teal; - } - rgblight_mode(1); - break; - } -#endif - return state; -} diff --git a/keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk b/keyboards/ergodox_ez/keymaps/drashna-custom/rules.mk @@ -1,13 +0,0 @@ -TAP_DANCE_ENABLE = yes -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -COMMAND_ENABLE = yes # Commands for debug and configuration -RGBLIGHT_ENABLE = yes -MIDI_ENABLE = no -CONSOLE_ENABLE = no -LEADER_KEYS = no - -EXTRAFLAGS = -flto - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/ergodox_ez/keymaps/drashna/config.h b/keyboards/ergodox_ez/keymaps/drashna/config.h @@ -1,11 +1,19 @@ - +#ifndef CONFIG_USER_H +#define CONFIG_USER_H #include "../../config.h" +#define TAPPING_TERM 200 + +#ifdef RGBLIGHT_ENABLE +#undef RGBLIGHT_SAT_STEP +#define RGBLIGHT_SAT_STEP 12 +#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 7 +#define RGBLIGHT_EFFECT_SNAKE_LENGTH 7 +#define RGBLIGHT_EFFECT_BREATHE_CENTER 1 +#endif // RGBLIGHT_ENABLE -// make this easy to toggle behavior, so that it can be more easily toggled -#define LAYER_UNDERGLOW_LIGHTING +#undef DEBOUNCE +#define DEBOUNCE 5 -#ifdef LAYER_UNDERGLOW_LIGHTING -#undef RGBLIGHT_ANIMATIONS -#endif- \ No newline at end of file +#endif diff --git a/keyboards/ergodox_ez/keymaps/drashna/keymap.c b/keyboards/ergodox_ez/keymaps/drashna/keymap.c @@ -1,3 +1,19 @@ +/* +This is the keymap for the keyboard +Copyright 2012 Jun Wako <wakojun@gmail.com> +Copyright 2015 Jack Humbert +Copyright 2017 Art Ortenburger +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/>. +*/ #include QMK_KEYBOARD_H #include "debug.h" #include "action_layer.h" @@ -8,187 +24,791 @@ #include "keymap_nordic.h" -#define VERSION M(0) - - // Define layer names -#define BASE 0 -#define SYMB 1 -#define MOUS 2 - -#ifdef LAYER_UNDERGLOW_LIGHTING -#define rgblight_set_teal rgblight_setrgb(0x00, 0xFF, 0xFF) -#define rgblight_set_red rgblight_setrgb(0xFF, 0x00, 0x00) -#define rgblight_set_blue rgblight_setrgb(0x00, 0xFF, 0x00); -#define rgblight_set_green rgblight_setrgb(0x00, 0x00, 0xFF); -#define rgblight_set_yellow rgblight_setrgb(0xFF, 0xFF, 0x00); +#define QWERTY 0 +#define COLEMAK 1 +#define DVORAK 2 +#define WORKMAN 3 +#define SYMB 8 +#define OVERWATCH 9 +#define DIABLO 10 +#define MOUS 12 +//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)) -#endif + +//define layer change stuff for underglow indicator +bool skip_leds = false; + +#ifdef RGBLIGHT_ENABLE +#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_yellow rgblight_sethsv (0x3C, 0xFF, 0xFF); +#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF); +#endif + +//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 custom_keycodes { PLACEHOLDER = SAFE_RANGE, // can always be here EPRM, VRSN, -#ifndef LAYER_UNDERGLOW_LIGHTING RGB_SLD, -#endif + RGB_0000FF, + RGB_008000, + RGB_FF0000, + RGB_800080, + RGB_00FF90, + KC_DIABLO_CLEAR, + KC_QWERTY, + KC_COLEMAK, + KC_DVORAK, + KC_WORKMAN, + KC_MAKEQMK, + KC_RESET }; -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +#ifdef TAP_DANCE_ENABLE +enum { + TD_FLSH = 0, + TD_DIABLO_1, + TD_DIABLO_2, + TD_DIABLO_3, + TD_DIABLO_4 +}; + + + - [0] = KEYMAP(KC_EQUAL,KC_1,KC_2,KC_3,KC_4,KC_5,KC_LEFT,KC_DELETE,KC_Q,KC_W,KC_E,KC_R,KC_T,TG(1),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,ALL_T(KC_NO),LT(1,KC_GRAVE),KC_QUOTE,LALT(KC_LSHIFT),KC_LEFT,KC_RIGHT,ALT_T(KC_APPLICATION),KC_LGUI,KC_HOME,KC_SPACE,KC_BSPACE,KC_END,KC_RIGHT,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINUS,TG(1),KC_Y,KC_U,KC_I,KC_O,KC_P,KC_BSLASH,KC_H,KC_J,KC_K,KC_L,LT(2,KC_SCOLON),GUI_T(KC_QUOTE),MEH_T(KC_NO),KC_N,KC_M,KC_COMMA,KC_DOT,CTL_T(KC_SLASH),KC_RSHIFT,KC_UP,KC_DOWN,KC_LBRACKET,KC_RBRACKET,MO(1),KC_LALT,CTL_T(KC_ESCAPE),KC_PGUP,KC_PGDOWN,KC_TAB,KC_ENTER), +// on each tap, light up one led, from right to left +// on the forth tap, turn them off from right to left -#ifdef LAYER_UNDERGLOW_LIGHTING - [1] = KEYMAP(KC_ESCAPE,KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_TRANSPARENT,VERSION,KC_EXLM,KC_AT,KC_LCBR,KC_RCBR,KC_PIPE,KC_TRANSPARENT,VRSN,KC_HASH,KC_DLR,KC_LPRN,KC_RPRN,KC_GRAVE,RESET,KC_PERC,KC_CIRC,KC_LBRACKET,KC_RBRACKET,KC_TILD,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,RGB_VAD,RGB_VAI,KC_TRANSPARENT,KC_TRANSPARENT,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_TRANSPARENT,KC_UP,KC_7,KC_8,KC_9,KC_ASTR,KC_F12,KC_DOWN,KC_4,KC_5,KC_6,KC_PLUS,KC_TRANSPARENT,KC_TRANSPARENT,KC_AMPR,KC_1,KC_2,KC_3,KC_BSLASH,KC_TRANSPARENT,KC_TRANSPARENT,KC_DOT,KC_0,KC_EQUAL,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT), -#else - [1] = KEYMAP(KC_ESCAPE,KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_TRANSPARENT,VERSION,KC_EXLM,KC_AT,KC_LCBR,KC_RCBR,KC_PIPE,KC_TRANSPARENT,VRSN,KC_HASH,KC_DLR,KC_LPRN,KC_RPRN,KC_GRAVE,RESET,KC_PERC,KC_CIRC,KC_LBRACKET,KC_RBRACKET,KC_TILD,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,RGB_MOD,KC_TRANSPARENT,KC_TRANSPARENT,RGB_VAD,RGB_VAI,KC_TRANSPARENT,KC_TRANSPARENT,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_TRANSPARENT,KC_UP,KC_7,KC_8,KC_9,KC_ASTR,KC_F12,KC_DOWN,KC_4,KC_5,KC_6,KC_PLUS,KC_TRANSPARENT,KC_TRANSPARENT,KC_AMPR,KC_1,KC_2,KC_3,KC_BSLASH,KC_TRANSPARENT,KC_TRANSPARENT,KC_DOT,KC_0,KC_EQUAL,KC_TRANSPARENT,RGB_TOG,RGB_SLD,KC_TRANSPARENT,KC_TRANSPARENT,RGB_HUD,RGB_HUI), +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(); + 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(); + + } +} + +// 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) { +#ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode(1); + rgblight_setrgb(0xff, 0x00, 0x00); #endif + reset_tap_dance(state); + reset_keyboard(); + } +} + +// 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]; + } +} - [2] = KEYMAP(KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MS_UP,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MS_LEFT,KC_MS_DOWN,KC_MS_RIGHT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MS_BTN1,KC_MS_BTN2,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MEDIA_PLAY_PAUSE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MEDIA_PREV_TRACK,KC_MEDIA_NEXT_TRACK,KC_TRANSPARENT,KC_TRANSPARENT,KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_AUDIO_MUTE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_WWW_BACK), -}; +// 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); +} + + +// 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; +} + +//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), + // 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), -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_TAP_TOGGLE(1) }; +#endif + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = + | 1 ! | 2 @ | 3 # | 4 $ | 5 % | TG(4)| | TG(4)| 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TAB | Q | W | E | R | T | TG(3)| |TG(3) | Y | U | I | O | P | \ | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Bksp | A | S | D | F | G |------| |------| H | J | K | L | ; | ' " | + * |--------+------+------+------+------+------| TG(2)| | TG(2)|------+------+------+------+------+--------| + * | Shift | Z | X | C | V | B | | | | N | M | , < | . > | ? / | Shift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | `/SYM| ' " | LGUI | [ { | ] } | | LEFT | DOWN | UP |RIGHT | SYMB | + * `----------------------------------' `----------------------------------' + * ,--------------. ,--------------. + * |Alt/Ap| Win | | Alt |Ctl/Esc| + * ,------|------|-------| |------+-------+------. + * | | | Home | | PgUp | | | + * | Space| Bksp |-------| |------| DEL |Enter | + * | | | End | | PgDn | | | + * `---------------------' `---------------------' + */ + [QWERTY] = LAYOUT_ergodox( + 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, + KC_HOME, + 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(OVERWATCH), KC_N, KC_M, KC_COMMA, KC_DOT, RCTL_T(KC_SLASH),KC_RSHIFT, + KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(SYMB), + KC_RGUI, 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 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | 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_* +[COLEMAK] = LAYOUT_ergodox( + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS), + 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, 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_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_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, TT(SYMB), + 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 | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | O | E | U | I |------| |------| D | H | T | N |S / L2| - | + * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| + * | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/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_* +[DVORAK] = LAYOUT_ergodox( + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(MOUS), + 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, 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_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, TT(SYMB), + 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] = LAYOUT_ergodox( + // 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, TT(SYMB), + KC_LALT, CTL_T(KC_ESC), + KC_PGUP, + KC_PGDN,KC_DELETE, KC_ENT + ), + + /* Keymap 3: Symbol Layer +* +* ,--------------------------------------------------. ,--------------------------------------------------. +* | ESC | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | +* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +* | VERSION| ! | @ | { | } | | | | | | + | 7 | 8 | 9 | * | F12 | +* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +* | MAKE | # | $ | ( | ) | ` |------| |------| - | 4 | 5 | 6 | / | PrtSc | +* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +* | RESET | % | ^ | [ | ] | ~ | | | | NUM | 1 | 2 | 3 | = | PAUSE | +* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' +* | LT0 | & | * | : | ; | | | 0 | NUM. | ENT | ENT | +* `----------------------------------' `----------------------------------' +* ,-------------. ,-------------. +* | RGBM | RED | | OFF | SOLID| +* ,------|------|------| |------+------+------. +* | | | GREEN| | | | | +* | RGB | RGB |------| |------| NUM0 | NUME | +* | DARK |BRITE | BLUE | | | | | +* `--------------------' `--------------------' +*/ + [SYMB] = LAYOUT_ergodox( + 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, + KC_RESET, KC_PERC, KC_CIRC, KC_LBRACKET,KC_RBRACKET,KC_TILD, KC_COLEMAK, + KC_TRNS, 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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ESC | | | | | | | | | F9 | F10 | F11 | F12 | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | F1 | K | Q | W | E | R | T | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | TAB | G | A | S | D | F |------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LCTR | LSHFT| Z | X | C | V | | | | N | M | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | J | U | I | Y | T | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | O | P | | | | + * ,------|------|------| |------+------+------. + * | | | LGUI | | | | | + * | V | SPACE|------ |------| | Enter| + * | | | H | | | | | + * `--------------------' `--------------------' + */ + [OVERWATCH] = LAYOUT_ergodox( + 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_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_PGDOWN, KC_DELETE, KC_ENTER + ), + +/* Keymap 3: + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ESC | V | D | ALT | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TAB | S | I | F | M | T | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | Q | 1 | 2 | 3 | 4 | G |------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | NUMLOCK| NUM1 | NUM2 | NUM3 | NUM4 | Z | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | LCTL | MAC1 | MAC2 | MAC3 | MAC4 | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | L | J | | | | + * ,------|------|------| |------+------+------. + * | | | G | | | | | + * | SPACE| Q |------ |------| | | + * | SHIFT| ALT | 0MAC | | | | | + * `--------------------' `--------------------' + */ + [DIABLO] = LAYOUT_ergodox( + 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_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 + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | MsUp | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | |MsLeft|MsDown|MsRght| | |------| |------| | | Acc0 | Acc1 | Acc2 | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | Acc0 | Acc1 | Acc2 | | | | | | | Mute |VolDn |VolUp | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | Play | Stop | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | MWUp | | | | | + * | Lclk | Rclk |------| |------| MBn4 | MBn5 | + * | | | MWDn | | Mclk | | | + * `--------------------' `--------------------' + */ + [MOUS] = LAYOUT_ergodox( + 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_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 + ), -// leaving this in place for compatibilty with old keymaps cloned and re-compiled. -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case 0: - if (record->event.pressed) { - SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); - } - break; - } - return MACRO_NONE; }; + +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + + bool process_record_user(uint16_t keycode, keyrecord_t *record) { +#ifdef CONSOLE_ENABLE + xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed); +#endif switch (keycode) { // dynamically generate these. - case EPRM: - if (record->event.pressed) { - eeconfig_init(); + 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) { +#ifdef RGBLIGHT_ENABLE + rgblight_mode(1); +#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_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_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; + + for (dtime = 0; dtime < 4; dtime++) { + diablo_key_time[dtime] = diablo_times[0]; } - return false; + } + return false; + break; + case KC_QWERTY: + if (record->event.pressed) { + persistent_default_layer_set(1UL << QWERTY); + } + return false; + break; + case KC_COLEMAK: + if (record->event.pressed) { + persistent_default_layer_set(1UL << COLEMAK); + } + return false; + break; + case KC_DVORAK: + if (record->event.pressed) { + persistent_default_layer_set(1UL << DVORAK); + } + 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 " QMK_KEYBOARD ":" QMK_KEYMAP ":teensy"SS_TAP(X_ENTER)); + } + return false; + break; + case KC_RESET: + if (!record->event.pressed) { +#ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode(1); + rgblight_setrgb(0xff, 0x00, 0x00); +#endif + reset_keyboard(); + } + 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 (biton32(layer_state) == DIABLO) { + switch (diablo_key) { + case 0: + SEND_STRING("1"); break; - case VRSN: - if (record->event.pressed) { - SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); - } - return false; + case 1: + SEND_STRING("2"); break; -#ifndef LAYER_UNDERGLOW_LIGHTING - case RGB_SLD: - if (record->event.pressed) { - rgblight_mode(1); - } - return false; + case 2: + SEND_STRING("3"); break; -#endif - + case 3: + SEND_STRING("4"); + break; + } } - return true; } -void matrix_init_user(void) { -#ifdef LAYER_UNDERGLOW_LIGHTING +// 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_init_user(void) { // Runs boot tasks for keyboard +#ifdef RGBLIGHT_ENABLE + uint8_t default_layer = eeconfig_read_default_layer(); + rgblight_enable(); - rgblight_set_teal; - rgblight_mode(1); + 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; + } #endif +}; -} -void matrix_scan_user(void) { +void matrix_scan_user(void) { // runs frequently to update info + uint8_t modifiders = get_mods(); + if (!skip_leds) { ergodox_board_led_off(); ergodox_right_led_1_off(); ergodox_right_led_2_off(); ergodox_right_led_3_off(); - -#ifdef LAYER_UNDERGLOW_LIGHTING - uint8_t modifiders = get_mods(); - - if ( modifiders & MODS_SHIFT_MASK) { - ergodox_right_led_1_on(); - } - if ( modifiders & MODS_CTRL_MASK) { - ergodox_right_led_2_on(); - } - if ( modifiders & MODS_ALT_MASK) { - ergodox_right_led_3_on(); - } -#else - uint8_t layer = biton32(layer_state); - switch (layer) { - 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_on(); - ergodox_right_led_2_on(); - break; - case 5: - ergodox_right_led_1_on(); - ergodox_right_led_3_on(); - break; - case 6: - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); - break; - case 7: - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); - break; - default: - break; - } -#endif + + // 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_2_on(); + } + if (modifiders & MODS_CTRL_MASK) { + ergodox_right_led_1_on(); + } + if (modifiders & MODS_ALT_MASK) { + ergodox_right_led_3_on(); + } + + } + + // Run Diablo 3 macro checking code. +#ifdef TAP_DANCE_ENABLE + run_diablo_macro_check(); +#endif }; uint32_t layer_state_set_kb(uint32_t state) { -#ifdef LAYER_UNDERGLOW_LIGHTING - switch (biton32(state)) { - case 1: - rgblight_set_red; - break; - case 2: - rgblight_set_blue; - break; - case 3: +#ifdef RGBLIGHT_ENABLE + uint8_t default_layer = eeconfig_read_default_layer(); + + switch (biton32(state)) { + case SYMB: + rgblight_set_blue; + rgblight_mode(2); + break; + case OVERWATCH: + rgblight_set_orange; + rgblight_mode(17); + break; + case DIABLO: + rgblight_set_red; + rgblight_mode(5); + break; + case MOUS: + rgblight_set_yellow; + rgblight_mode(1); + break; + default: + if (default_layer & (1UL << COLEMAK)) { + rgblight_set_magenta; + } + else if (default_layer & (1UL << DVORAK)) { rgblight_set_green; - break; - case 4: - rgblight_set_yellow; - break; - case 5: - rgblight_setrgb(0xFF, 0xFF, 0x00); - break; - case 6: - rgblight_setrgb(0xFF, 0xFF, 0x00); - break; - case 7: - rgblight_setrgb(0xFF, 0xFF, 0xFF); - break; - default: + } + else if (default_layer & (1UL << WORKMAN)) { + rgblight_set_purple; + } + else { rgblight_set_teal; - break; } + rgblight_mode(1); + break; + } #endif - return state; + return state; } diff --git a/keyboards/ergodox_ez/keymaps/drashna/readme.md b/keyboards/ergodox_ez/keymaps/drashna/readme.md @@ -1,9 +0,0 @@ -# Drashna's ErgoDox EZ Underglow Mod - -This is based on the default Ergodox EZ keymap. - -This modifieds the keymay so that it uses the underglow to indicate which layer you're on, rather than the top LEDs. - -Default colors are "teal" for base layer, "red" for Symbols, and "green" for mouse/media. Blue would be the next layer, if you had more. - -Additionally, the top LEDs are Shift/Control/Alt indicators instead (in that order). - \ No newline at end of file diff --git a/keyboards/ergodox_ez/keymaps/drashna/rules.mk b/keyboards/ergodox_ez/keymaps/drashna/rules.mk @@ -1,5 +1,11 @@ -RGBLIGHT_ENABLE = yes -RGBLIGHT_ANIMATION = no +TAP_DANCE_ENABLE = yes +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +COMMAND_ENABLE = yes # Commands for debug and configuration +RGBLIGHT_ENABLE = yes +MIDI_ENABLE = no +CONSOLE_ENABLE = no + +EXTRAFLAGS = -flto ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/handwired/woodpad/keymaps/drashna/keymap.c b/keyboards/handwired/woodpad/keymaps/drashna/keymap.c @@ -15,10 +15,10 @@ */ #include "woodpad.h" -// 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. + // 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 _NUMLOCK 0 #define _NAV 1 #define _DIABLO 2 @@ -54,76 +54,77 @@ 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; + // 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; }; #endif enum custom_keycodes { - PLACEHOLDER = SAFE_RANGE, // can always be here - KC_DIABLO_CLEAR, - KC_OVERWATCH, - KC_SALT, - KC_MORESALT, - KC_SALTHARD, - KC_GOODGAME, - KC_SYMM, - KC_DOOMFIST, - KC_JUSTGAME, - KC_GLHF, - KC_TORB, - KC_MAKE + PLACEHOLDER = SAFE_RANGE, // can always be here + KC_DIABLO_CLEAR, + KC_OVERWATCH, + KC_SALT, + KC_MORESALT, + KC_SALTHARD, + KC_GOODGAME, + KC_SYMM, + KC_DOOMFIST, + KC_JUSTGAME, + KC_GLHF, + KC_TORB, + KC_MAKE, + KC_RESET }; #ifdef TAP_DANCE_ENABLE enum { - TD_DIABLO_1 = 0, - TD_DIABLO_2, - TD_DIABLO_3, - TD_DIABLO_4 + 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]; - } + 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); + 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); + 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); + 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); + 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), + // 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 @@ -170,7 +171,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_SALT, KC_MORESALT, KC_SALTHARD, KC_GLHF \ ), [_MEDIA] = KEYMAP( /* Base */ - RESET, KC_MUTE, KC_VOLD, KC_VOLU,\ + KC_RESET, KC_MUTE, KC_VOLD, KC_VOLU,\ KC_MAKE, _______, RGB_HUI, RGB_HUD, \ KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, \ RGB_TOG, RGB_MOD, RGB_SAI, RGB_VAI, \ @@ -181,150 +182,162 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { void numlock_led_on(void) { - PORTF |= (1<<7); + PORTF |= (1 << 7); } void numlock_led_off(void) { - PORTF &= ~(1<<7); + PORTF &= ~(1 << 7); } 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) { + 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; + 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_OVERWATCH: - if (record->event.pressed) { - is_overwatch = !is_overwatch; - } + case KC_OVERWATCH: + if (record->event.pressed) { + is_overwatch = !is_overwatch; + } #ifdef RGBLIGHT_ENABLE - is_overwatch ? rgblight_mode(17) : rgblight_mode(18); + is_overwatch ? rgblight_mode(17) : rgblight_mode(18); #endif - 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; - case KC_MAKE: - if (!record->event.pressed) { - SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP SS_TAP(X_ENTER)); - } - return false; - break; + 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; + case KC_MAKE: + if (!record->event.pressed) { + SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP SS_TAP(X_ENTER)); + } + return false; + break; + case KC_RESET: + if (!record->event.pressed) { +#ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode(1); + rgblight_setrgb(0xff, 0x00, 0x00); +#endif + reset_keyboard(); + } + return false; + break; } @@ -334,96 +347,96 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { // Sends the key press to system, but only if on the Diablo layer void send_diablo_keystroke(uint8_t diablo_key) { - if (biton32(layer_state) == _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; - } + if (biton32(layer_state) == _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; + 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); - } + 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_init_user(void) { - // set Numlock LED to output and low - DDRF |= (1<<7); - PORTF &= ~(1<<7); + // set Numlock LED to output and low + DDRF |= (1 << 7); + PORTF &= ~(1 << 7); #ifdef RGBLIGHT_ENABLE - rgblight_enable(); - rgblight_set_teal; - rgblight_mode(1); + rgblight_enable(); + rgblight_set_teal; + rgblight_mode(1); #endif - if (!(host_keyboard_leds() & (1 << USB_LED_NUM_LOCK)) ){ - register_code(KC_NUMLOCK); - unregister_code(KC_NUMLOCK); - } + if (!(host_keyboard_leds() & (1 << USB_LED_NUM_LOCK))) { + register_code(KC_NUMLOCK); + unregister_code(KC_NUMLOCK); + } } void matrix_scan_user(void) { - numlock_led_off(); - if (is_overwatch && biton32(layer_state) == _MACROS) { - numlock_led_on(); - } + numlock_led_off(); + if (is_overwatch && biton32(layer_state) == _MACROS) { + numlock_led_on(); + } - // Run Diablo 3 macro checking code. + // Run Diablo 3 macro checking code. #ifdef TAP_DANCE_ENABLE - run_diablo_macro_check(); + run_diablo_macro_check(); #endif } uint32_t layer_state_set_kb(uint32_t state) { #ifdef RGBLIGHT_ENABLE -// Check layer, and apply color if its changed since last check - switch (biton32(state)) { - case _NAV: - rgblight_set_blue; - rgblight_mode(1); - break; - case _MACROS: - rgblight_set_orange; - is_overwatch ? rgblight_mode(17) : rgblight_mode(18); - break; - case _DIABLO: - rgblight_set_red; - rgblight_mode(5); - break; - case _MEDIA: - rgblight_set_green; - rgblight_mode(22); - break; - default: - rgblight_set_teal; - rgblight_mode(1); - break; - } + // Check layer, and apply color if its changed since last check + switch (biton32(state)) { + case _NAV: + rgblight_set_blue; + rgblight_mode(1); + break; + case _MACROS: + rgblight_set_orange; + is_overwatch ? rgblight_mode(17) : rgblight_mode(18); + break; + case _DIABLO: + rgblight_set_red; + rgblight_mode(5); + break; + case _MEDIA: + rgblight_set_green; + rgblight_mode(22); + break; + default: + rgblight_set_teal; + rgblight_mode(1); + break; + } #endif - return state; + return state; } void led_set_user(uint8_t usb_led) { - + } diff --git a/keyboards/orthodox/keymaps/drashna/keymap.c b/keyboards/orthodox/keymaps/drashna/keymap.c @@ -45,7 +45,8 @@ enum custom_keycodes { LOWER, RAISE, ADJUST, - KC_MAKE + KC_MAKE, + KC_RESET }; // Fillers to make layering more clear @@ -66,7 +67,7 @@ enum custom_keycodes { #ifdef TAP_DANCE_ENABLE enum { - TD_FLSH = 0, + TD_FLSH = 0, }; @@ -76,38 +77,38 @@ enum { // 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) { #ifdef RGBLIGHT_ENABLE - rgblight_mode(1); - rgblight_setrgb(0xff, 0x00, 0x00); + rgblight_mode(1); + rgblight_setrgb(0xff, 0x00, 0x00); #endif - reset_tap_dance(state); - reset_keyboard(); - } + reset_tap_dance(state); + reset_keyboard(); + } } //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(NULL, dance_flsh_finished, NULL), + //Once for Blue, Twice for Green, Thrice for Red, and four to flash + [TD_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_flsh_finished, NULL), }; #endif const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QWERTY] = KEYMAP( \ +[_QWERTY] = KEYMAP(\ 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_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 \ + 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(\ @@ -121,20 +122,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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( \ +[_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_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, _______ \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, XXXXXXX, KC_F12, _______, XXXXXXX, KC_RCTL, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + TD(TD_FLSH),KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_HOME, KC_COMM, KC_DOT, KC_END, _______ \ ), -[_RAISE] = KEYMAP( \ +[_RAISE] = KEYMAP(\ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ - KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, XXXXXXX, KC_F12, _______, XXXXXXX, _______, KC_F11, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ - _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, _______, _______, KC_F12, KC_PGUP, KC_COMM, KC_DOT, KC_PGDN, _______ \ + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, XXXXXXX, KC_F12, _______, XXXXXXX, _______, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_PGUP, KC_COMM, KC_DOT, KC_PGDN, _______ \ ), -[_ADJUST] = KEYMAP( \ - KC_MAKE, RESET, TD(TD_FLSH), _______, _______, _______, _______, _______, _______, _______, _______, _______, \ +[_ADJUST] = KEYMAP(\ + KC_MAKE, KC_RESET, TD(TD_FLSH), _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, XXXXXXX, _______, _______, XXXXXXX, _______, AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MAGIC_TOGGLE_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY \ ) @@ -146,7 +147,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { float tone_qwerty[][2] = SONG(QWERTY_SOUND); float tone_dvorak[][2] = SONG(DVORAK_SOUND); float tone_colemak[][2] = SONG(COLEMAK_SOUND); -float tone_workman[][2] = SONG(PLOVER_SONG); +float tone_workman[][2] = SONG(PLOVER_SOUND); #endif void persistent_default_layer_set(uint16_t default_layer) { @@ -156,102 +157,123 @@ void persistent_default_layer_set(uint16_t default_layer) { bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case COLEMAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_colemak); - #endif - persistent_default_layer_set(1UL<<_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_dvorak); - #endif - persistent_default_layer_set(1UL << _DVORAK); - } - return false; - break; - case WORKMAN: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_workman); - #endif - persistent_default_layer_set(1UL << _WORKMAN); - } - return false; - break; - case LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case RAISE: - if (record->event.pressed) { - layer_on(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - case KC_MAKE: - if (!record->event.pressed) { + case QWERTY: + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + PLAY_SONG(tone_qwerty); +#endif + persistent_default_layer_set(1UL << _QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + PLAY_SONG(tone_colemak); +#endif + persistent_default_layer_set(1UL << _COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + PLAY_SONG(tone_dvorak); +#endif + persistent_default_layer_set(1UL << _DVORAK); + } + return false; + break; + case WORKMAN: + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + PLAY_SONG(tone_workman); +#endif + persistent_default_layer_set(1UL << _WORKMAN); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + if (record->event.pressed) { + layer_on(_ADJUST); + } + else { + layer_off(_ADJUST); + } + return false; + break; + case KC_MAKE: + if (!record->event.pressed) { #ifdef RGBLIGHT_ENABLE - SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP SS_TAP(X_ENTER)); + SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP " RGBLIGHT_ENABLE=yes AUDIO_ENABLE=yes" SS_TAP(X_ENTER)); #else - SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP " RGBLIGHT_ENABLE=no"SS_TAP(X_ENTER)); + SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP " RGBLIGHT_ENABLE=no AUDIO_ENABLE=yes"SS_TAP(X_ENTER)); #endif - } - return false; - break; - + } + return false; + break; + case KC_RESET: + if (!record->event.pressed) { +#ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode(1); + rgblight_setrgb(0xff, 0x00, 0x00); +#endif + reset_keyboard(); + } + return false; + break; } return true; } void matrix_init_user(void) { // Runs boot tasks for keyboard #ifdef RGBLIGHT_ENABLE - uint8_t default_layer = eeconfig_read_default_layer(); + uint8_t default_layer = eeconfig_read_default_layer(); + + rgblight_enable(); - rgblight_enable(); + if (true) { if (default_layer & (1UL << _COLEMAK)) { - rgblight_set_magenta; -} + rgblight_set_magenta; + } else if (default_layer & (1UL << _DVORAK)) { - rgblight_set_green; + rgblight_set_green; } else if (default_layer & (1UL << _WORKMAN)) { - rgblight_set_purple; + rgblight_set_purple; } else { - rgblight_set_teal; + rgblight_set_teal; } + } + else + { + rgblight_set_red; + rgblight_mode(5); + } #endif }; @@ -262,48 +284,48 @@ void matrix_scan_user(void) { // runs frequently to update info uint32_t layer_state_set_kb(uint32_t state) { // runs on layer switch #ifdef RGBLIGHT_ENABLE - uint8_t default_layer = eeconfig_read_default_layer(); - - switch (biton32(state)) { - case _COLEMAK: - rgblight_set_magenta; - rgblight_mode(1); - break; - case _DVORAK: - rgblight_set_green; - rgblight_mode(1); - break; - case _RAISE: - rgblight_set_yellow; - rgblight_mode(5); - break; - case _LOWER: - rgblight_set_orange; - rgblight_mode(5); - break; - case _ADJUST: - rgblight_set_red; - rgblight_mode(23); - break; - case 6: - rgblight_set_blue; - break; - 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; + uint8_t default_layer = eeconfig_read_default_layer(); + + switch (biton32(state)) { + case _COLEMAK: + rgblight_set_magenta; + rgblight_mode(1); + break; + case _DVORAK: + rgblight_set_green; + rgblight_mode(1); + break; + case _RAISE: + rgblight_set_yellow; + rgblight_mode(5); + break; + case _LOWER: + rgblight_set_orange; + rgblight_mode(5); + break; + case _ADJUST: + rgblight_set_red; + rgblight_mode(23); + break; + case 6: + rgblight_set_blue; + break; + 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; + } #endif - return state; + return state; } diff --git a/keyboards/orthodox/keymaps/drashna/rules.mk b/keyboards/orthodox/keymaps/drashna/rules.mk @@ -1,5 +1,5 @@ CONSOLE_ENABLE = no -TAP_DANCE_ENABLE = no +TAP_DANCE_ENABLE = yes RGBLIGHT_ENABLE = yes AUDIO_ENABLE = no MOUSEKEY_ENABLE = no diff --git a/keyboards/viterbi/keymaps/drashna/keymap.c b/keyboards/viterbi/keymaps/drashna/keymap.c @@ -11,32 +11,33 @@ extern keymap_config_t keymap_config; #define _NUMNAV 0 #define _DIABLO 1 #define _GAMEPAD 2 -#define _MACROS 3 +#define _GMACRO 3 #define _MEDIA 4 #define _COVECUBE 5 enum custom_keycodes { - KC_DIABLO_CLEAR = SAFE_RANGE, - KC_P00, - KC_MAKE, - KC_OVERWATCH, - KC_SALT, - KC_MORESALT, - KC_SALTHARD, - KC_GOODGAME, - KC_SYMM, - KC_DOOMFIST, - KC_JUSTGAME, - KC_GLHF, - KC_TORB, - KC_AIM + KC_DIABLO_CLEAR = SAFE_RANGE, + KC_P00, + KC_MAKE, + KC_RESET, + KC_OVERWATCH, + KC_SALT, + KC_MORESALT, + KC_SALTHARD, + KC_GOODGAME, + KC_SYMM, + KC_DOOMFIST, + KC_JUSTGAME, + KC_GLHF, + KC_TORB, + KC_AIM }; // Fillers to make layering more clear #define _______ KC_TRNS #define XXXXXXX KC_NO -#define MACROS TG(_MACROS) +#define GMACRO TG(_GMACRO) #define DIABLO TG(_DIABLO) #define GAMEPAD TG(_GAMEPAD) #define MEDIA TG(_MEDIA) @@ -65,58 +66,58 @@ 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; + // 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 + 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]; - } + 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); + 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); + 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); + 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); + 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), + // 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 @@ -125,7 +126,7 @@ qk_tap_dance_action_t tap_dance_actions[] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_NUMNAV] = KEYMAP( - MACROS, DIABLO, GAMEPAD, KC_NLCK, KC_SLCK, KC_COLN, KC_PSLS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + GMACRO, DIABLO, GAMEPAD, KC_NLCK, KC_SLCK, KC_COLN, KC_PSLS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ MEDIA, KC_CALC, COVECUBE,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, \ @@ -139,17 +140,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, (TD_DIABLO_1), TD(TD_DIABLO_2), TD(TD_DIABLO_3), TD(TD_DIABLO_4), KC_Z, KC_DIABLO_CLEAR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ KC_LALT, KC_F4, KC_F5, KC_F8, KC_F9, KC_F10, SFT_T(KC_SPACE), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ ), - + [_GAMEPAD] = KEYMAP( // Game pad layout designed primarily for Overwatch - MACROS, KC_ESC, GAMEPAD, KC_1, KC_2, KC_3, KC_4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + GMACRO, KC_ESC, GAMEPAD, KC_1, KC_2, KC_3, KC_4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ MEDIA, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ KC_Z, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ KC_Y, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ KC_F1, KC_U, KC_I, KC_Y, KC_V, KC_SPC, KC_V, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ ), - [_MACROS] = KEYMAP( - MACROS, XXXXXXX, GAMEPAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + [_GMACRO] = KEYMAP( + GMACRO, XXXXXXX, GAMEPAD, 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, \ KC_SYMM, KC_TORB, KC_DOOMFIST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ KC_GLHF, KC_GOODGAME, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ @@ -165,7 +166,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), [_MEDIA] = KEYMAP( - RESET, KC_MAKE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + KC_RESET,KC_MAKE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ MEDIA, XXXXXXX, RGB_SAI, RGB_VAI, RGB_M_P, RGB_M_B, RGB_M_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ RGB_TOG, RGB_MOD, RGB_SAD, RGB_VAD, RGB_M_SW,RGB_M_SN,RGB_M_K, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, RGB_M_K, RGB_M_X, RGB_M_G, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ @@ -178,179 +179,191 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { bool process_record_user(uint16_t keycode, keyrecord_t *record) { - uint16_t kc; - if (is_overwatch) { - kc = KC_BSPC; + uint16_t kc; + if (is_overwatch) { + kc = KC_BSPC; + } + else { + kc = KC_ENTER; + } + // Once a delay command is added to "SEND_STRING", + // replace these with X_BSPC and X_ENTER instead. + // and add "SS_TAP(kc) SS_DELAY(50)" to all of the + // SEND_STRING commands, to compress things. + 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]; + } } - else { - kc = KC_ENTER; + 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); } - // Once a delay command is added to "SEND_STRING", - // replace these with X_BSPC and X_ENTER instead. - // and add "SS_TAP(kc) SS_DELAY(50)" to all of the - // SEND_STRING commands, to compress things. - 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; + return false; + break; + case KC_MAKE: + if (!record->event.pressed) { + SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP SS_TAP(X_ENTER)); + } + return false; + break; + case KC_RESET: + if (!record->event.pressed) { +#ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode(1); + rgblight_setrgb(0xff, 0x00, 0x00); #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_MAKE: - if (!record->event.pressed) { - SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP SS_TAP(X_ENTER)); - } - return false; - break; - case KC_OVERWATCH: // reset all Diable timers, disabling them - if (record->event.pressed) { - is_overwatch = !is_overwatch; - } + reset_keyboard(); + } + return false; + break; + + case KC_OVERWATCH: // reset all Diable timers, disabling them + if (record->event.pressed) { + is_overwatch = !is_overwatch; + } #ifdef RGBLIGHT_ENABLE - is_overwatch ? rgblight_mode(17) : rgblight_mode(18); + is_overwatch ? rgblight_mode(17) : rgblight_mode(18); #endif - return false; - break; - case KC_SALT: - if (!record->event.pressed) { - register_code(kc); - unregister_code(kc); - _delay_ms(50); - SEND_STRING("Salt, salt, salt..." SS_TAP(X_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?!" SS_TAP(X_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!" SS_TAP(X_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!" SS_TAP(X_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!!!" SS_TAP(X_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!" SS_TAP(X_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." SS_TAP(X_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! SS_TAP(X_ENTER)"); - } - return false; - break; - case KC_AIM: - - if (!record->event.pressed) { - register_code(kc); - unregister_code(kc); - _delay_ms(50); - SEND_STRING("That aim is absolutely amazing. It's almost like you're a machine!" SS_TAP(X_ENTER)); - _delay_ms(50); - SEND_STRING("Wait! That aim is TOO good! You're clearly using an aim hack! CHEATER!" SS_TAP(X_ENTER)); - } - return false; - break; + return false; + break; + case KC_SALT: + if (!record->event.pressed) { + register_code(kc); + unregister_code(kc); + _delay_ms(50); + SEND_STRING("Salt, salt, salt..." SS_TAP(X_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?!" SS_TAP(X_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!" SS_TAP(X_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!" SS_TAP(X_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!!!" SS_TAP(X_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!" SS_TAP(X_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." SS_TAP(X_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! SS_TAP(X_ENTER)"); + } + return false; + break; + case KC_AIM: + + if (!record->event.pressed) { + register_code(kc); + unregister_code(kc); + _delay_ms(50); + SEND_STRING("That aim is absolutely amazing. It's almost like you're a machine!" SS_TAP(X_ENTER)); + _delay_ms(50); + SEND_STRING("Wait! That aim is TOO good! You're clearly using an aim hack! CHEATER!" SS_TAP(X_ENTER)); + } + return false; + break; - } - return true; + } + 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 (biton32(layer_state) == _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; - } + if (biton32(layer_state) == _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; + 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); - } + for (dtime = 0; dtime < 4; dtime++) { + if (check_dtimer(dtime) && diablo_key_time[dtime]) { + diablo_timer[dtime] = timer_read(); + send_diablo_keystroke(dtime); } + } } #endif @@ -358,9 +371,9 @@ void run_diablo_macro_check(void) { void matrix_init_user(void) { // Runs boot tasks for keyboard #ifdef RGBLIGHT_ENABLE - rgblight_enable(); - rgblight_set_teal; - rgblight_mode(1); + rgblight_enable(); + rgblight_set_teal; + rgblight_mode(1); #endif }; @@ -368,39 +381,39 @@ void matrix_init_user(void) { // Runs boot tasks for keyboard void matrix_scan_user(void) { // runs frequently to update info #ifdef TAP_DANCE_ENABLE // Run Diablo 3 macro checking code. - run_diablo_macro_check(); + run_diablo_macro_check(); #endif }; uint32_t layer_state_set_kb(uint32_t state) { #ifdef RGBLIGHT_ENABLE - rgblight_enable(); - switch (biton32(state)) { - case _NUMNAV: - rgblight_set_teal; - rgblight_mode(2); - break; - case _MACROS: - rgblight_set_orange; - is_overwatch ? rgblight_mode(17) : rgblight_mode(18); - break; - case _DIABLO: - rgblight_set_red; - rgblight_mode(5); - break; - case _GAMEPAD: - rgblight_set_yellow; - rgblight_mode(1); - break; - case _MEDIA: - rgblight_set_blue; - rgblight_mode(1); - break; - case _COVECUBE: - rgblight_set_green; - rgblight_mode(2); - } + rgblight_enable(); + switch (biton32(state)) { + case _NUMNAV: + rgblight_set_teal; + rgblight_mode(2); + break; + case _GMACRO: + rgblight_set_orange; + is_overwatch ? rgblight_mode(17) : rgblight_mode(18); + break; + case _DIABLO: + rgblight_set_red; + rgblight_mode(5); + break; + case _GAMEPAD: + rgblight_set_yellow; + rgblight_mode(1); + break; + case _MEDIA: + rgblight_set_blue; + rgblight_mode(1); + break; + case _COVECUBE: + rgblight_set_green; + rgblight_mode(2); + } #endif - return state; + return state; }