Update to drashna files (#2587)

* Add Colemak Mod-DH vars

* Add Norman Layot vars

* Set Shift Indicator to include CAPS Lock as well

* Change MEH to GUI

* Add Enter to Macro layer

* Switch raise and lower layers to make more sense (to me)

* Replace unused quote on Ergodox

* Add One Shot defines

* Dim indicator LEDs

* Add short codes for KC_SECRET

* Fix typos

* Update OLKB code in userspace

* Add global userspace config.h

* add compile fix

* Automatically include  from userspace

* update readme

* Re-add QMK Scan loop

* Add EEPROM reset code to all keymaps

* Shorten fauxclick sound

* Use layouts instead of keymap, when possible

* Add OSM detection to ergodox

* Convert Viterbi to LAYOUT macro

* Clean up game macros

* Because I accidently removed the C6 AUDIO define from my viterbi... Whoops

* Minor formatting

* Fix Woodpad because it's still there

* Move Ergodox keymap into layouts folder

* Add build date to version macro

* Remove PREVENT_STUCK_MODIFIERS from config
cb2x1800
Drashna Jaelre 7 years ago committed by GitHub
parent a09a042b8f
commit 0c665696d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,27 +0,0 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include QMK_KEYBOARD_CONFIG_H
#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
#define RGBLIGHT_SLEEP
#endif // RGBLIGHT_ENABLE
#ifdef TAPPING_TERM
#undef TAPPING_TERM
#endif
#define TAPPING_TERM 175
#undef PERMISSIVE_HOLD
#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
#define ONESHOT_TAP_TOGGLE 2
#undef PRODUCT
#define PRODUCT DrashnaDox - Hacked ErgoDox EZ Shine
#endif

@ -19,7 +19,7 @@
#include QMK_KEYBOARD_CONFIG_H #include QMK_KEYBOARD_CONFIG_H
#ifdef TAP_DANCE_ENABLE #if (defined(TAP_DANCE_ENABLE) && !defined(TAPPING_TERM))
#define TAPPING_TERM 200 #define TAPPING_TERM 200
#endif // TAP_DANCE_ENABLE #endif // TAP_DANCE_ENABLE

@ -24,21 +24,9 @@
// Fillers to make layering more clear // Fillers to make layering more clear
#define _______ KC_TRNS #define _______ KC_TRNS
#define XXXXXXX KC_NO #define XXXXXXX KC_NO
#ifdef TAP_DANCE_ENABLE
#define KC_D3_1 TD(TD_D3_1)
#define KC_D3_2 TD(TD_D3_2)
#define KC_D3_3 TD(TD_D3_3)
#define KC_D3_4 TD(TD_D3_4)
#else
#define KC_D3_1 KC_1
#define KC_D3_2 KC_2
#define KC_D3_3 KC_3
#define KC_D3_4 KC_4
#endif
//define layer change stuff for underglow indicator
bool skip_leds = false;

@ -35,15 +35,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT // #define MASTER_RIGHT
#define EE_HANDS #define EE_HANDS
#ifdef TAPPING_TERM
#undef TAPPING_TERM
#endif
#define TAPPING_TERM 150
#undef PERMISSIVE_HOLD
#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
#define ONESHOT_TAP_TOGGLE 2
/* key combination for command */ /* key combination for command */
#ifdef IS_COMMAND #ifdef IS_COMMAND
@ -64,12 +55,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 #define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2 #define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1 #define RGBLIGHT_EFFECT_BREATHE_CENTER 1
#define RGBLIGHT_SLEEP
#endif // RGBLIGHT_ENABLE #endif // RGBLIGHT_ENABLE
#ifdef AUDIO_ENABLE #ifdef AUDIO_ENABLE
#define C6_AUDIO #define C6_AUDIO
#define STARTUP_SONG SONG(IMPERIAL_MARCH)
#define NO_MUSIC_MODE #define NO_MUSIC_MODE
#endif #endif
@ -79,4 +68,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#elif KEYBOARD_orthodox_rev3 #elif KEYBOARD_orthodox_rev3
#define PRODUCT Drashna Hacked Orthodox Rev.3 #define PRODUCT Drashna Hacked Orthodox Rev.3
#endif #endif
#endif #endif

@ -32,6 +32,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define _______ KC_TRNS #define _______ KC_TRNS
#define XXXXXXX KC_NO #define XXXXXXX KC_NO
#define MG_NKRO MAGIC_TOGGLE_NKRO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = KEYMAP_wrapper(\ [_QWERTY] = KEYMAP_wrapper(\
@ -63,21 +65,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
), ),
[_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, KC_F12, _______, KC_RCTL, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
_______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_HOME, KC_COMM, KC_DOT, KC_END, _______ \
),
[_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_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, KC_F12, _______, _______, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, _______, _______, 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, _______ \ _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_PGUP, KC_COMM, KC_DOT, KC_PGDN, _______ \
), ),
[_RAISE] = 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, KC_F12, _______, KC_RCTL, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
_______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_HOME, KC_COMM, KC_DOT, KC_END, _______ \
),
[_ADJUST] = KEYMAP(\ [_ADJUST] = KEYMAP(\
KC_MAKE,KC_RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ KC_MAKE,KC_RESET, EPRM, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
RGB_SMOD,RGB_HUI, KC_FXCL, AUD_ON, AUD_OFF, AG_NORM, _______, _______, _______, _______, AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, TG(_MODS), \ RGB_SMOD,RGB_HUI, KC_FXCL, AUD_ON, AUD_OFF, AG_NORM, _______, _______, _______, _______, AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, TG(_MODS), \
KC_RGB_T,RGB_HUD, MU_ON, MU_OFF, MU_TOG, MU_MOD, _______, _______, _______, _______, _______, _______, MAGIC_TOGGLE_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY \ KC_RGB_T,RGB_HUD, MU_ON, MU_OFF, MU_TOG, MU_MOD, _______, _______, _______, _______, _______, _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY \
) )

@ -31,31 +31,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 #define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2 #define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1 #define RGBLIGHT_EFFECT_BREATHE_CENTER 1
#define RGBLIGHT_SLEEP
#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 300 #define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 300
#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1 #define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1
#endif // RGBLIGHT_ENABLE #endif // RGBLIGHT_ENABLE
#define TAPPING_TOGGLE 1
#ifdef AUDIO_ENABLE
#define C6_AUDIO
#define STARTUP_SONG SONG(IMPERIAL_MARCH)
#define GOODBYE_SONG SONG(SONIC_RING)
#endif
#undef LOCKING_SUPPORT_ENABLE #undef LOCKING_SUPPORT_ENABLE
#undef LOCKING_RESYNC_ENABLE #undef LOCKING_RESYNC_ENABLE
#ifndef NO_DEBUG #ifndef NO_DEBUG
#define NO_DEBUG #define NO_DEBUG
#endif // NO_DEBUG #endif // !NO_DEBUG
/* disable print */
#ifndef NO_PRINT #ifndef NO_PRINT
#define NO_PRINT #define NO_PRINT
#endif // NO_PRINT #endif // !NO_PRINT
/* disable action features */ /* disable action features */
//#define NO_ACTION_LAYER //#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING //#define NO_ACTION_TAPPING
@ -67,8 +57,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT Drashnas Viterbi Macro Pad #define PRODUCT Drashnas Viterbi Macro Pad
#define USE_I2C #define USE_I2C
#ifdef AUDIO_ENABLE
#define C6_AUDIO
#define NO_MUSIC_MODE #define NO_MUSIC_MODE
#define half_KEYMAP( \ #endif
#define LAYOUT_ortho_5x7( \
L00, L01, L02, L03, L04, L05, L06, \ L00, L01, L02, L03, L04, L05, L06, \
L10, L11, L12, L13, L14, L15, L16, \ L10, L11, L12, L13, L14, L15, L16, \
L20, L21, L22, L23, L24, L25, L26, \ L20, L21, L22, L23, L24, L25, L26, \
@ -82,4 +77,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
L30, L31, L32, L33, L34, L35, L36, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ L30, L31, L32, L33, L34, L35, L36, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
L40, L41, L42, L43, L44, L45, L46, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \ L40, L41, L42, L43, L44, L45, L46, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \
) )
#endif #endif

@ -26,7 +26,7 @@ extern keymap_config_t keymap_config;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NUMLOCK] = half_KEYMAP( [_NUMLOCK] = LAYOUT_ortho_5x7(
LMACRO, DIABLO, GAMEPAD, KC_NLCK, KC_SLCK, KC_COLN, KC_PSLS, \ LMACRO, DIABLO, GAMEPAD, KC_NLCK, KC_SLCK, KC_COLN, KC_PSLS, \
MEDIA, KC_CALC, COVECUBE,KC_P7, KC_P8, KC_P9, KC_PAST, \ MEDIA, KC_CALC, COVECUBE,KC_P7, KC_P8, KC_P9, KC_PAST, \
KC_HOME, KC_DEL, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PMNS, \ KC_HOME, KC_DEL, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PMNS, \
@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_COLN, KC_PENT \ KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_COLN, KC_PENT \
), ),
[_DIABLO] = half_KEYMAP( [_DIABLO] = LAYOUT_ortho_5x7(
KC_ESC, DIABLO, KC_V, KC_D, XXXXXXX, XXXXXXX, KC_L, \ KC_ESC, DIABLO, KC_V, KC_D, XXXXXXX, XXXXXXX, KC_L, \
KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_J, \ KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_J, \
KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G, KC_F, \ KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G, KC_F, \
@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LALT, KC_F4, KC_F5, KC_F8, KC_F9, KC_F10, SFT_T(KC_SPACE) \ KC_LALT, KC_F4, KC_F5, KC_F8, KC_F9, KC_F10, SFT_T(KC_SPACE) \
), ),
[_GAMEPAD] = half_KEYMAP( // Game pad layout designed primarily for Overwatch [_GAMEPAD] = LAYOUT_ortho_5x7( // Game pad layout designed primarily for Overwatch
LMACRO, KC_ESC, GAMEPAD, KC_1, KC_2, KC_3, KC_4, \ LMACRO, KC_ESC, GAMEPAD, KC_1, KC_2, KC_3, KC_4, \
MEDIA, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, \ MEDIA, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, \
KC_Z, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, \ KC_Z, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, \
@ -50,15 +50,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_F1, KC_U, KC_I, KC_Y, KC_V, KC_SPC, KC_V \ KC_F1, KC_U, KC_I, KC_Y, KC_V, KC_SPC, KC_V \
), ),
[_MACROS] = half_KEYMAP( [_MACROS] = LAYOUT_ortho_5x7(
LMACRO, KC_OVERWATCH,GAMEPAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ LMACRO, KC_OVERWATCH,GAMEPAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
KC_C9, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ KC_C9, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
KC_SYMM, KC_TORB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ KC_SYMM, KC_TORB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
KC_GLHF, KC_GOODGAME, KC_GGEZ, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ KC_GLHF, KC_GOODGAME, KC_GGEZ, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
KC_SALT, KC_MORESALT, KC_SALTHARD, KC_JUSTGAME, KC_AIM, XXXXXXX, XXXXXXX \ KC_SALT, KC_MORESALT, KC_SALTHARD, KC_JUSTGAME, KC_AIM, XXXXXXX, KC_PENT \
), ),
[_COVECUBE] = half_KEYMAP( [_COVECUBE] = LAYOUT_ortho_5x7(
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, COVECUBE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ XXXXXXX, XXXXXXX, COVECUBE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
@ -66,9 +66,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
), ),
[_MEDIA] = half_KEYMAP( [_MEDIA] = LAYOUT_ortho_5x7(
KC_MAKE, KC_RESET,MU_TOG, AUD_ON, AUD_OFF, KC_FXCL, RGB_SAD, \ KC_MAKE, KC_RESET,MU_TOG, AUD_ON, AUD_OFF, KC_FXCL, RGB_SAD, \
MEDIA, XXXXXXX, KC_RGB_T,RGB_M_P, RGB_M_B, RGB_M_R, RGB_SAI, \ MEDIA, EPRM, KC_RGB_T,RGB_M_P, RGB_M_B, RGB_M_R, RGB_SAI, \
RGB_TOG, RGB_MOD, RGB_RMOD,RGB_M_SW,RGB_M_SN,RGB_M_K, RGB_HUD, \ RGB_TOG, RGB_MOD, RGB_RMOD,RGB_M_SW,RGB_M_SN,RGB_M_K, RGB_HUD, \
KC_MPLY, KC_MPRV, KC_MNXT, RGB_M_X, RGB_M_G, RGB_M_P, RGB_HUI, \ KC_MPLY, KC_MPRV, KC_MNXT, RGB_M_X, RGB_M_G, RGB_M_P, RGB_HUI, \
KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, RGB_VAD, RGB_VAI \ KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, RGB_VAD, RGB_VAI \

@ -9,3 +9,4 @@ AUDIO_ENABLE = yes
NKRO_ENABLE = yes NKRO_ENABLE = yes
CUSTOM_MATRIX = no CUSTOM_MATRIX = no
LAYOUTS = ortho_5x7

@ -0,0 +1,18 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include QMK_KEYBOARD_CONFIG_H
#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
#undef PRODUCT
#define PRODUCT DrashnaDox - Hacked ErgoDox EZ Shine
#endif

@ -31,8 +31,8 @@ bool skip_leds = false;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer /* Keymap 0: Basic layer
* *
* *
* ,--------------------------------------------------. ,--------------------------------------------------. * ,--------------------------------------------------. ,--------------------------------------------------.
* | = + | 1 ! | 2 @ | 3 # | 4 $ | 5 % | TG(4)| | TG(4)| 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ | * | = + | 1 ! | 2 @ | 3 # | 4 $ | 5 % | TG(4)| | TG(4)| 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
@ -63,7 +63,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_HOME, KC_PGUP, KC_HOME, KC_PGUP,
KC_SPACE,KC_BSPC, KC_END, KC_PGDN, KC_DEL, KC_ENTER KC_SPACE,KC_BSPC, KC_END, KC_PGDN, KC_DEL, KC_ENTER
), ),
/* Keymap 0: Basic layer /* Keymap 0: Basic layer
* *
@ -88,7 +88,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/ */
// If it accepts an argument (i.e, is a function), it doesn't need KC_. // If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_* // Otherwise, it needs KC_*
[_COLEMAK] = LAYOUT_ergodox_pretty_wrapper( [_COLEMAK] = LAYOUT_ergodox_pretty_wrapper(
// left hand // right hand // left hand // right hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
KC_TAB, _________________COLEMAK_L1________________, TG(_DIABLO), TG(_DIABLO), _________________COLEMAK_R1________________, KC_BSLS, KC_TAB, _________________COLEMAK_L1________________, TG(_DIABLO), TG(_DIABLO), _________________COLEMAK_R1________________, KC_BSLS,
@ -122,7 +122,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/ */
// If it accepts an argument (i.e, is a function), it doesn't need KC_. // If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_* // Otherwise, it needs KC_*
[_DVORAK] = LAYOUT_ergodox_pretty_wrapper( [_DVORAK] = LAYOUT_ergodox_pretty_wrapper(
// left hand // right hand // left hand // right hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
KC_TAB, _________________DVORAK_L1_________________, TG(_DIABLO), TG(_DIABLO), _________________DVORAK_R1_________________, KC_SLSH, KC_TAB, _________________DVORAK_L1_________________, TG(_DIABLO), TG(_DIABLO), _________________DVORAK_R1_________________, KC_SLSH,
@ -156,7 +156,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/ */
// If it accepts an argument (i.e, is a function), it doesn't need KC_. // If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_* // Otherwise, it needs KC_*
[_WORKMAN] = LAYOUT_ergodox_pretty_wrapper( [_WORKMAN] = LAYOUT_ergodox_pretty_wrapper(
// left hand // left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
KC_TAB, _________________WORKMAN_L1________________, TG(_DIABLO), TG(_DIABLO), _________________WORKMAN_R1________________, KC_BSLS, KC_TAB, _________________WORKMAN_L1________________, TG(_DIABLO), TG(_DIABLO), _________________WORKMAN_R1________________, KC_BSLS,
@ -297,7 +297,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
[_MOUS] = LAYOUT_ergodox_pretty( [_MOUS] = LAYOUT_ergodox_pretty(
KC_NO, KC_SECRET_1,KC_SECRET_2,KC_SECRET_3,KC_SECRET_4,KC_SECRET_5,KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
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_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_NO, KC_ACL0, KC_ACL1, KC_ACL2, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_ACL0, KC_ACL1, KC_ACL2, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO,
@ -334,6 +334,8 @@ void matrix_init_keymap(void) { // Runs boot tasks for keyboard
void matrix_scan_keymap(void) { // runs frequently to update info void matrix_scan_keymap(void) { // runs frequently to update info
uint8_t modifiders = get_mods(); uint8_t modifiders = get_mods();
uint8_t led_usb_state = host_keyboard_leds();
uint8_t one_shot = get_oneshot_mods();
if (!skip_leds) { if (!skip_leds) {
ergodox_board_led_off(); ergodox_board_led_off();
@ -343,15 +345,18 @@ void matrix_scan_keymap(void) { // runs frequently to update info
// Since we're not using the LEDs here for layer indication anymore, // 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... // then lets use them for modifier indicators. Shame we don't have 4...
// Also, no "else", since we want to know each, independantly. // Also, no "else", since we want to know each, independently.
if (modifiders & MODS_SHIFT_MASK) { if (modifiders & MODS_SHIFT_MASK || led_usb_state & (1<<USB_LED_CAPS_LOCK) || one_shot & MODS_SHIFT_MASK) {
ergodox_right_led_2_on(); ergodox_right_led_2_on();
ergodox_right_led_2_set( 10 );
} }
if (modifiders & MODS_CTRL_MASK) { if (modifiders & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) {
ergodox_right_led_1_on(); ergodox_right_led_1_on();
ergodox_right_led_1_set( 10 );
} }
if (modifiders & MODS_ALT_MASK) { if (modifiders & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) {
ergodox_right_led_3_on(); ergodox_right_led_3_on();
ergodox_right_led_3_set( 10 );
} }
} }

@ -0,0 +1,61 @@
#ifndef USERSPACE_CONFIG_H
#define USERSPACE_CONFIG_H
#ifdef AUDIO_ENABLE
#define STARTUP_SONG SONG(IMPERIAL_MARCH)
#define GOODBYE_SONG SONG(SONIC_RING)
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
SONG(COLEMAK_SOUND), \
SONG(DVORAK_SOUND), \
SONG(PLOVER_SOUND) \
}
#endif
#ifdef RGBLIGHT_ENABLE
#define RGBLIGHT_SLEEP
#endif // RGBLIGHT_ENABLE
#ifndef ONESHOT_TAP_TOGGLE
#define ONESHOT_TAP_TOGGLE 2
#endif // !ONESHOT_TAP_TOGGLE
#ifndef ONESHOT_TIMEOUT
#define ONESHOT_TIMEOUT 3000
#endif// !ONESHOT_TIMEOUT
#ifndef QMK_KEYS_PER_SCAN
#define QMK_KEYS_PER_SCAN 4
#endif // !QMK_KEYS_PER_SCAN
// this makes it possible to do rolling combos (zx) with keys that
// convert to other keys on hold (z becomes ctrl when you hold it,
// and when this option isn't enabled, z rapidly followed by x
// actually sends Ctrl-x. That's bad.)
#define IGNORE_MOD_TAP_INTERRUPT
#undef PERMISSIVE_HOLD
#undef PREVENT_STUCK_MODIFIERS
#ifndef TAPPING_TOGGLE
#define TAPPING_TOGGLE 1
#endif
#ifdef TAPPING_TERM
#undef TAPPING_TERM
#endif
#define TAPPING_TERM 150
// Disable action_get_macro and fn_actions, since we don't use these
// and it saves on space in the firmware.
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
#endif // !USERSPACE_CONFIG_H

@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "secrets.h" #include "secrets.h"
#else #else
// `PROGMEM const char secret[][x]` may work better, but it takes up more space in the firmware // `PROGMEM const char secret[][x]` may work better, but it takes up more space in the firmware
// And I'm not familar enough to know which is better or why... // And I'm not familiar enough to know which is better or why...
PROGMEM const char secret[][64] = { PROGMEM const char secret[][64] = {
"test1", "test1",
"test2", "test2",
@ -32,20 +32,13 @@ PROGMEM const char secret[][64] = {
}; };
#endif #endif
#ifdef AUDIO_ENABLE
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_SOUND);
float tone_hackstartup[][2] = SONG(ONE_UP_SOUND);
#endif
#ifdef FAUXCLICKY_ENABLE #ifdef FAUXCLICKY_ENABLE
float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_A6, 2); // (_D4, 0.25); float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_A6, 2); // (_D4, 0.25);
float fauxclicky_released_note[2] = MUSICAL_NOTE(_A6, 2); // (_C4, 0.125); float fauxclicky_released_note[2] = MUSICAL_NOTE(_A6, 2); // (_C4, 0.125);
#else #else
float fauxclicky_pressed[][2] = SONG(E__NOTE(_A6)); // change to your tastes float fauxclicky_pressed[][2] = SONG(S__NOTE(_A6)); // change to your tastes
float fauxclicky_released[][2] = SONG(E__NOTE(_A6)); // change to your tastes float fauxclicky_released[][2] = SONG(S__NOTE(_A6)); // change to your tastes
#endif #endif
bool faux_click_enabled = false; bool faux_click_enabled = false;
@ -191,7 +184,7 @@ void matrix_init_user(void) {
#endif #endif
matrix_init_keymap(); matrix_init_keymap();
} }
// No global matrix scan code, so just run keymap's matix // No global matrix scan code, so just run keymap's matrix
// scan function // scan function
void matrix_scan_user(void) { void matrix_scan_user(void) {
#ifdef TAP_DANCE_ENABLE // Run Diablo 3 macro checking code. #ifdef TAP_DANCE_ENABLE // Run Diablo 3 macro checking code.
@ -202,17 +195,20 @@ void matrix_scan_user(void) {
// This block is for all of the gaming macros, as they were all doing // This block is for all of the gaming macros, as they were all doing
// the same thing, but with differring text sent. // the same thing, but with differring text sent.
void send_game_macro(const char *str) { bool send_game_macro(const char *str, keyrecord_t *record, bool override) {
clear_keyboard(); if (!record->event.pressed || override) {
register_code(is_overwatch ? KC_BSPC : KC_ENTER); clear_keyboard();
unregister_code(is_overwatch ? KC_BSPC : KC_ENTER); register_code(is_overwatch ? KC_BSPC : KC_ENTER);
wait_ms(50); unregister_code(is_overwatch ? KC_BSPC : KC_ENTER);
send_string(str); wait_ms(50);
register_code(KC_ENTER); send_string(str);
unregister_code(KC_ENTER); register_code(KC_ENTER);
unregister_code(KC_ENTER);
}
if (override) wait_ms(3000);
return false;
} }
// Sent the default layer // Sent the default layer
void persistent_default_layer_set(uint16_t default_layer) { void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer); eeconfig_update_default_layer(default_layer);
@ -221,7 +217,7 @@ void persistent_default_layer_set(uint16_t default_layer) {
// Defines actions tor my global custom keycodes. Defined in drashna.h file // Defines actions tor my global custom keycodes. Defined in drashna.h file
// Then runs the _keymap's recod handier if not processed here // Then runs the _keymap's record handier if not processed here
bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// If console is enabled, it will print the matrix position and status of each key pressed // If console is enabled, it will print the matrix position and status of each key pressed
@ -230,7 +226,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#endif //CONSOLE_ENABLE #endif //CONSOLE_ENABLE
// Run custom faux click code, but only if faux clicky is enabled // Run custom faux click code, but only if faux clicky is enabled
#ifdef AUDIO_ENABLE #ifdef AUDIO_ENABLE
if ( (faux_click_enabled && keycode != KC_FXCL) || (!faux_click_enabled && keycode == KC_FXCL) ) { if ( (faux_click_enabled && keycode != KC_FXCL) || (!faux_click_enabled && keycode == KC_FXCL) ) {
if (record->event.pressed) { if (record->event.pressed) {
PLAY_SONG(fauxclicky_pressed); PLAY_SONG(fauxclicky_pressed);
@ -245,37 +241,25 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {
case KC_QWERTY: case KC_QWERTY:
if (record->event.pressed) { if (record->event.pressed) {
#ifdef AUDIO_ENABLE set_single_persistent_default_layer(_QWERTY);
PLAY_SONG(tone_qwerty);
#endif //AUDIO_ENABLE
persistent_default_layer_set(1UL << _QWERTY);
} }
return false; return false;
break; break;
case KC_COLEMAK: case KC_COLEMAK:
if (record->event.pressed) { if (record->event.pressed) {
#ifdef AUDIO_ENABLE set_single_persistent_default_layer(_COLEMAK);
PLAY_SONG(tone_colemak);
#endif //AUDIO_ENABLE
persistent_default_layer_set(1UL << _COLEMAK);
} }
return false; return false;
break; break;
case KC_DVORAK: case KC_DVORAK:
if (record->event.pressed) { if (record->event.pressed) {
#ifdef AUDIO_ENABLE set_single_persistent_default_layer(_DVORAK);
PLAY_SONG(tone_dvorak);
#endif //AUDIO_ENABLE
persistent_default_layer_set(1UL << _DVORAK);
} }
return false; return false;
break; break;
case KC_WORKMAN: case KC_WORKMAN:
if (record->event.pressed) { if (record->event.pressed) {
#ifdef AUDIO_ENABLE set_single_persistent_default_layer(_WORKMAN);
PLAY_SONG(tone_workman);
#endif //AUDIO_ENABLE
persistent_default_layer_set(1UL << _WORKMAN);
} }
return false; return false;
break; break;
@ -328,7 +312,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} }
return false; return false;
break; break;
case KC_RESET: // Custom RESET code that setr RGBLights to RED
case KC_RESET: // Custom RESET code that sets RGBLights to RED
if (!record->event.pressed) { if (!record->event.pressed) {
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
rgblight_enable(); rgblight_enable();
@ -339,6 +325,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} }
return false; return false;
break; break;
case EPRM: // Resets EEPROM case EPRM: // Resets EEPROM
if (record->event.pressed) { if (record->event.pressed) {
eeconfig_init(); eeconfig_init();
@ -347,11 +335,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
break; break;
case VRSN: // Prints firmware version case VRSN: // Prints firmware version
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE);
} }
return false; return false;
break; break;
case KC_SECRET_1 ... KC_SECRET_5: // Custom
case KC_SECRET_1 ... KC_SECRET_5: // Secrets! Externally defined strings, not stored in repo
if (!record->event.pressed) { if (!record->event.pressed) {
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED); clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
send_string_P(secret[keycode - KC_SECRET_1]); send_string_P(secret[keycode - KC_SECRET_1]);
@ -364,61 +354,42 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// Only enables for the viterbi, basically, // Only enables for the viterbi, basically,
// to save on firmware space, since it's limited. // to save on firmware space, since it's limited.
#if !(defined(KEYBOARD_orthodox_rev1) || defined(KEYBOARD_orthodox_rev3) || defined(KEYBOARD_ergodox_ez)) #if !(defined(KEYBOARD_orthodox_rev1) || defined(KEYBOARD_orthodox_rev3) || defined(KEYBOARD_ergodox_ez))
case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros
if (record->event.pressed) { is_overwatch = !is_overwatch; } if (record->event.pressed) { is_overwatch = !is_overwatch; }
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
is_overwatch ? rgblight_mode(17) : rgblight_mode(18); is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
#endif //RGBLIGHT_ENABLE #endif //RGBLIGHT_ENABLE
return false;
break;
case KC_SALT:
if (!record->event.pressed) { send_game_macro("Salt, salt, salt..."); }
return false; break; return false; break;
case KC_SALT:
return send_game_macro("Salt, salt, salt...", record, false);
case KC_MORESALT: case KC_MORESALT:
if (!record->event.pressed) { send_game_macro("Please sir, can I have some more salt?!"); } return send_game_macro("Please sir, can I have some more salt?!", record, false);
return false; break;
case KC_SALTHARD: case KC_SALTHARD:
if (!record->event.pressed) { send_game_macro("Your salt only makes me harder, and even more aggressive!"); } return send_game_macro("Your salt only makes me harder, and even more aggressive!", record, false);
return false; break;
case KC_GOODGAME: case KC_GOODGAME:
if (!record->event.pressed) { send_game_macro("Good game, everyone!"); } return send_game_macro("Good game, everyone!", record, false);
return false; break;
case KC_GLHF: case KC_GLHF:
if (!record->event.pressed) { send_game_macro("Good luck, have fun!!!"); } return send_game_macro("Good luck, have fun!!!", record, false);
return false; break;
case KC_SYMM: case KC_SYMM:
if (!record->event.pressed) { send_game_macro("Left click to win!"); } return send_game_macro("Left click to win!", record, false);
return false; break;
case KC_JUSTGAME: case KC_JUSTGAME:
if (!record->event.pressed) { send_game_macro("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."); } return send_game_macro("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.", record, false);
return false; break;
case KC_TORB: case KC_TORB:
if (!record->event.pressed) { send_game_macro("That was positively riveting!"); } return send_game_macro("That was positively riveting!", record, false);
return false; break;
case KC_AIM: case KC_AIM:
if (!record->event.pressed) { send_game_macro("That aim is absolutely amazing. It's almost like you're a machine!", record, true);
send_game_macro("That aim is absolutely amazing. It's almost like you're a machine!"); return send_game_macro("Wait! That aim is TOO good! You're clearly using an aim hack! CHEATER!", record, false);
wait_ms(3000);
send_game_macro("Wait! That aim is TOO good! You're clearly using an aim hack! CHEATER!");
}
return false; break;
case KC_C9: case KC_C9:
if (!record->event.pressed) { send_game_macro("OMG!!! C9!!!"); } return send_game_macro("OMG!!! C9!!!", record, false);
return false; break;
case KC_GGEZ: case KC_GGEZ:
if (!record->event.pressed) { send_game_macro("That was a fantastic game, though it was a bit easy. Try harder next time!"); } return send_game_macro("That was a fantastic game, though it was a bit easy. Try harder next time!", record, false);
return false; break;
#endif // !(defined(KEYBOARD_orthodox_rev1) || defined(KEYBOARD_orthodox_rev3) || defined(KEYBOARD_ergodox_ez)) #endif // !(defined(KEYBOARD_orthodox_rev1) || defined(KEYBOARD_orthodox_rev3) || defined(KEYBOARD_ergodox_ez))
#ifdef TAP_DANCE_ENABLE #ifdef TAP_DANCE_ENABLE
case KC_DIABLO_CLEAR: // reset all Diable timers, disabling them case KC_DIABLO_CLEAR: // reset all Diablo timers, disabling them
if (record->event.pressed) { if (record->event.pressed) {
uint8_t dtime; uint8_t dtime;
for (dtime = 0; dtime < 4; dtime++) { for (dtime = 0; dtime < 4; dtime++) {
diablo_key_time[dtime] = diablo_times[0]; diablo_key_time[dtime] = diablo_times[0];
} }
@ -437,14 +408,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) { if (record->event.pressed) {
rgb_layer_change = !rgb_layer_change; rgb_layer_change = !rgb_layer_change;
if (rgb_layer_change) { if (rgb_layer_change) {
layer_state_set(layer_state); // This is needed to immediately set the layer color (looks beetter) layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
} }
} }
#endif // RGBLIGHT_ENABLE #endif // RGBLIGHT_ENABLE
return false; break; return false; break;
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions
if (record->event.pressed) { //This disrables layer indication, as it's assumed that if you're changing this ... you want that disabled if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
rgb_layer_change = false; rgb_layer_change = false;
} }
return true; break; return true; break;
@ -534,7 +505,7 @@ uint32_t layer_state_set_user(uint32_t state) {
// Any custom LED code goes here. // Any custom LED code goes here.
// So far, I only have keyboard specific code, // So far, I only have keyboard specific code,
// So nothing goes here. // So nothing goes here.
void led_set_user(uint8_t usb_led) { void led_set_user(uint8_t usb_led) {
led_set_keymap(usb_led); led_set_keymap(usb_led);
} }

@ -17,10 +17,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef USERSPACE #ifndef USERSPACE
#define USERSPACE #define USERSPACE
#include "quantum.h" #include "quantum.h"
// Define layer names // Define layer names
#define _QWERTY 0 #define _QWERTY 0
#define _NUMLOCK 0 #define _NUMLOCK 0
#define _COLEMAK 1 #define _COLEMAK 1
@ -118,6 +117,12 @@ enum userspace_custom_keycodes {
NEW_SAFE_RANGE //use "NEWPLACEHOLDER for keymap specific codes NEW_SAFE_RANGE //use "NEWPLACEHOLDER for keymap specific codes
}; };
#define KC_SEC1 KC_SECRET_1
#define KC_SEC2 KC_SECRET_2
#define KC_SEC3 KC_SECRET_3
#define KC_SEC4 KC_SECRET_4
#define KC_SEC5 KC_SECRET_5
#ifdef TAP_DANCE_ENABLE #ifdef TAP_DANCE_ENABLE
enum { enum {
TD_D3_1 = 0, TD_D3_1 = 0,
@ -129,8 +134,8 @@ enum {
// Custom Keycodes for Diablo 3 layer // Custom Keycodes for Diablo 3 layer
// But since TD() doesn't work when tapdance is disabled // But since TD() doesn't work when tap dance is disabled
// We use custom codes here, so we can substituet the right stuff // We use custom codes here, so we can substitute the right stuff
#ifdef TAP_DANCE_ENABLE #ifdef TAP_DANCE_ENABLE
#define KC_D3_1 TD(TD_D3_1) #define KC_D3_1 TD(TD_D3_1)
#define KC_D3_2 TD(TD_D3_2) #define KC_D3_2 TD(TD_D3_2)
@ -146,26 +151,10 @@ enum {
// OSM keycodes, to keep things clean and easy to change // OSM keycodes, to keep things clean and easy to change
#define KC_MLSF OSM(MOD_LSFT) #define KC_MLSF OSM(MOD_LSFT)
#define KC_MRSF OSM(MOD_RSFT) #define KC_MRSF OSM(MOD_RSFT)
#define ONESHOT_TIMEOUT 3000
#define QMK_KEYS_PER_SCAN 8
#ifdef RGBLIGHT_ENABLE
#define RGBLIGHT_SLEEP
#endif // RGBLIGHT_ENABLE
// this makes it possible to do rolling combos (zx) with keys that
// convert to other keys on hold (z becomes ctrl when you hold it,
// and when this option isn't enabled, z rapidly followed by x
// actually sends Ctrl-x. That's bad.)
#define IGNORE_MOD_TAP_INTERRUPT
// Disable action_get_macro and fn_actions, since we don't use these // If we're still using the official Faux Clicky feature, substitute codes
// and it saves on space in the firmware.
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
// If we're still using the official Faux Clicky feature, substituet codes
// so that we don't have any unused/blank keys. // so that we don't have any unused/blank keys.
#ifdef FAUXCLICKY_ENABLE #ifdef FAUXCLICKY_ENABLE
#define AUD_ON FC_ON #define AUD_ON FC_ON
@ -177,23 +166,27 @@ enum {
// Since our quirky block definitions are basically a list of comma separated // Since our quirky block definitions are basically a list of comma separated
// arguments, we need a wrapper in order for these definitions to be // arguments, we need a wrapper in order for these definitions to be
// expanded before being used as arguments to the LAYOUT_xxx macro. // expanded before being used as arguments to the LAYOUT_xxx macro.
#if (!defined(LAYOUT) && defined(KEYMAP))
#define LAYOUT KEYMAP
#endif
#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__) #define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)
#define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__) #define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
#define KEYMAP_wrapper(...) KEYMAP(__VA_ARGS__) #define KEYMAP_wrapper(...) LAYOUT(__VA_ARGS__)
// Blocks for each of the four major keyboard layouts // Blocks for each of the four major keyboard layouts
// Organized so we can quickly adapt and modify all of them // Organized so we can quickly adapt and modify all of them
// at once, rather than for each keyboard, one at a time. // at once, rather than for each keyboard, one at a time.
// And this allows wor much cleaner blocks in the keymaps. // And this allows for much cleaner blocks in the keymaps.
// For instance Tap/Hold for Control on all of the layouts // For instance Tap/Hold for Control on all of the layouts
// NOTE: These are all the same length. If you do a search/replace // NOTE: These are all the same length. If you do a search/replace
// then you need to add/remove underscores to keep the // then you need to add/remove underscores to keep the
// lengths consistent. // lengths consistent.
#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T #define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G #define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
@ -212,6 +205,14 @@ enum {
#define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O #define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O
#define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH) #define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH)
#define ______________COLEMAK_MOD_DH_L1____________ KC_Q, KC_W, KC_F, KC_P, KC_B
#define ______________COLEMAK_MOD_DH_L2____________ KC_A, KC_R, KC_S, KC_T, KC_G
#define ______________COLEMAK_MOD_DH_L3____________ CTL_T(KC_Z), KC_X, KC_C, KC_D, KC_V
#define ______________COLEMAK_MOD_DH_R1____________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
#define ______________COLEMAK_MOD_DH_R2____________ KC_K, KC_N, KC_E, KC_I, KC_O
#define ______________COLEMAK_MOD_DH_R3____________ KC_M, KC_H, KC_COMM, KC_DOT, CTL_T(KC_SLASH)
#define _________________DVORAK_L1_________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y #define _________________DVORAK_L1_________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
#define _________________DVORAK_L2_________________ KC_A, KC_O, KC_E, KC_U, KC_I #define _________________DVORAK_L2_________________ KC_A, KC_O, KC_E, KC_U, KC_I
@ -231,12 +232,21 @@ enum {
#define _________________WORKMAN_R3________________ KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z) #define _________________WORKMAN_R3________________ KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z)
#define _________________NORMAN_L1_________________ KC_Q, KC_W, KC_D, KC_F, KC_K
#define _________________NORMAN_L2_________________ KC_A, KC_S, KC_E, KC_T, KC_G
#define _________________NORMAN_L3_________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B
#define _________________NORMAN_R1_________________ KC_J, KC_U, KC_R, KC_L, KC_SCLN
#define _________________NORMAN_R2_________________ KC_J, KC_N, KC_I, KC_O, KC_U
#define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH)
// Since we have 4 default layouts (QWERTY, DVORAK, COLEMAK and WORKMAN), // Since we have 4 default layouts (QWERTY, DVORAK, COLEMAK and WORKMAN),
// this allows us to quickly modify the bottom row for all of the layouts // this allows us to quickly modify the bottom row for all of the layouts
// so we don't have to alter it 4 times and hope that we haven't missed // so we don't have to alter it 4 times and hope that we haven't missed
// anything // anything
#define ___________ERGODOX_BOTTOM_LEFT_____________ KC_QUOT, KC_MEH, KC_LBRC, KC_RBRC #define ___________ERGODOX_BOTTOM_LEFT_____________ KC_MEH, KC_LGUI, KC_LBRC, KC_RBRC
#define ___________ERGODOX_BOTTOM_RIGHT____________ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT #define ___________ERGODOX_BOTTOM_RIGHT____________ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT

@ -3,6 +3,33 @@ Overview
This is my personal userspace file. Most of my code exists here, as it's heavily shared. This is my personal userspace file. Most of my code exists here, as it's heavily shared.
Userspace Config.h
------------------
By default, the userspace feature doesn't include a `config.h` file the way that that keyboards, revisions, keymaps and layouts handle them. This means that if you want global configurations via userspace, it's very difficult to implement.
The reason for using seperate files here is that the `drashna.h` file doesn't get called in such a way that will actually define QMK settings. Additionally, attempting to add it to the `config.h` files has issues. Namely, the `drashna.h` file requires the `quantum.h` file... but including this to the `config.h` attemps to redefines a bunch of settings and breaks the firmare. Removing the `quantum.h` include means that a number of data structures no longer get added, and the `SAFE_RANGE` value is no longer defined, as well. So we need both a `config.h` for global config, and we need a seperate h file for local settings.
However, the `rules.mk` file is included when building the firmware. So we can hijack that process to "manually" add a `config.h`. To do so, you would need to add the following to the `rules.mk` in your userspace:
```
ifneq ("$(wildcard users/$(KEYMAP)/config.h)","")
CONFIG_H += users/$(KEYMAP)/config.h
endif
```
You can replace `$(KEYMAP)` with your name, but it's not necessary. This checks for the existence of `/users/<name>/config.h`, and if it exists, includes it like every other `config.h` file, allowing you to make global `config.h` settings.
As for the `config.h` file, you want to make sure that it has an "ifdef" in it to make sure it's only used once. So you want something like this:
```
#ifndef USERSPACE_CONFIG_H
#define USERSPACE_CONFIG_H
// put stuff here
#endif
```
Custom userspace handlers Custom userspace handlers
------------------------- -------------------------

@ -1,3 +1,7 @@
SRC += drashna.c SRC += drashna.c
EXTRAFLAGS += -flto EXTRAFLAGS += -flto
ifneq ("$(wildcard users/$(KEYMAP)/config.h)","")
CONFIG_H += users/$(KEYMAP)/config.h
endif

Loading…
Cancel
Save