From e4bbe057f2620ee24c3a78cb758cdfa7c4bd7abf Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Wed, 29 Aug 2018 10:42:15 -0700 Subject: Yet another update to drashna keymaps and userspace (#3787) * Make tap function inline * Use better makefile keyboard detection * Remove Copy-Paste macro * Add F11/F12 to Iris * Minor tweaks to userspace config * Set audio clicky randomness to 1.5 * Set NO_DEBUG to only be set if console is not enabled * Move NO_MUSIC_MODE to userspace config.h * Reduce Ergodox Debounce * Add Planck Light config * Use OSM for ortho 4x12 * Music Mode changes for planck light * Cleanup do to shutdown user and other fixes in Master * Add and use 'shutdown_user' fzunction * Remove global NO_MUSIC_MODE define * Add NO_MUSIC_MODE to individual keymaps * Change layer colors * Remove NO_PRINT and NO_DEBUG from userspace config.h Since these are automatically disabled if the console isn't enabled. * Remove backlight code if backlight isn't enabled * Remove Twinkle from Ergodox * Disable RGB twinkling and enable PSM * Clean up RGB matrix code * Clean up planck light indicators * Clean up tap code * Rules cleanup for ortho 4x12 * Fix up userspace template * Revert "Clean up tap code" This reverts commit 09f64d6d67aa021c3b5ac86a9a739a5ca2b9c1ec. * Organize includes * userspace cleanup * Fix modifier spelling error * Fix userspace rules * Disable Permissive Hold again * Minor clean up * Fix Tap stuff * Viterbi Updates for file size --- users/drashna/config.h | 16 +++----- users/drashna/drashna.c | 75 ++++++++++++++---------------------- users/drashna/drashna.h | 22 +++++++---- users/drashna/rgb_stuff.c | 6 +-- users/drashna/rgb_stuff.h | 1 - users/drashna/template.c | 97 +++++++++++++++++++++++++++++++++-------------- users/drashna/template.h | 4 +- 7 files changed, 124 insertions(+), 97 deletions(-) (limited to 'users/drashna') diff --git a/users/drashna/config.h b/users/drashna/config.h index 87050fbcc7..dd6875ceb1 100644 --- a/users/drashna/config.h +++ b/users/drashna/config.h @@ -11,8 +11,10 @@ SONG(OVERWATCH_THEME) \ } -#define AUDIO_CLICKY_FREQ_RANDOMNESS 1.0f - +#define AUDIO_CLICKY_FREQ_RANDOMNESS 1.5f +// #ifdef RGBLIGHT_ENABLE +// #define NO_MUSIC_MODE +// #endif //RGBLIGHT_ENABLE #endif #ifdef RGBLIGHT_ENABLE @@ -40,8 +42,8 @@ // 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 +#undef PERMISSIVE_HOLD +#define PREVENT_STUCK_MODIFIERS // #define TAPPING_FORCE_HOLD //#define RETRO_TAPPING @@ -59,12 +61,6 @@ // Disable action_get_macro and fn_actions, since we don't use these // and it saves on space in the firmware. -#ifndef NO_DEBUG -#define NO_DEBUG -#endif // !NO_DEBUG -#if !defined(NO_PRINT) && !defined(CONSOLE_ENABLE) -#define NO_PRINT -#endif // !NO_PRINT #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index f72902f0b0..20df2f4de6 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -16,16 +16,9 @@ along with this program. If not, see . */ #include "drashna.h" -#include "version.h" -#include "eeprom.h" #include "tap_dances.h" #include "rgb_stuff.h" - -float tone_copy[][2] = SONG(SCROLL_LOCK_ON_SOUND); -float tone_paste[][2] = SONG(SCROLL_LOCK_OFF_SOUND); - -static uint16_t copy_paste_timer; userspace_config_t userspace_config; // Helper Functions @@ -35,8 +28,14 @@ userspace_config_t userspace_config; // the same thing, but with differring text sent. bool send_game_macro(const char *str, keyrecord_t *record, bool override) { if (!record->event.pressed || override) { + uint16_t keycode; + if (userspace_config.is_overwatch) { + keycode = KC_BSPC; + } else { + keycode = KC_ENTER; + } clear_keyboard(); - tap(userspace_config.is_overwatch ? KC_BSPC : KC_ENTER); + tap(keycode); wait_ms(50); send_string_with_delay(str, MACRO_TIMER); wait_ms(50); @@ -46,8 +45,6 @@ bool send_game_macro(const char *str, keyrecord_t *record, bool override) { return false; } -void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); }; - bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed) { static uint16_t this_timer; if(pressed) { @@ -93,6 +90,9 @@ void matrix_init_keymap(void) {} __attribute__ ((weak)) void startup_keymap(void) {} +__attribute__ ((weak)) +void shutdown_keymap(void) {} + __attribute__ ((weak)) void suspend_power_down_keymap(void) {} @@ -127,6 +127,7 @@ __attribute__ ((weak)) void led_set_keymap(uint8_t usb_led) {} + // Call user matrix init, set default RGB colors and then // call the keymap's init function void matrix_init_user(void) { @@ -158,6 +159,24 @@ void startup_user (void) { startup_keymap(); } +void shutdown_user (void) { +#ifdef RGBLIGHT_ENABLE + rgblight_enable_noeeprom(); + rgblight_mode_noeeprom(1); + rgblight_setrgb_red(); +#endif // RGBLIGHT_ENABLE +#ifdef RGB_MATRIX_ENABLE + rgb_led led; + for (int i = 0; i < DRIVER_LED_TOTAL; i++) { + led = g_rgb_leds[i]; + if (led.matrix_co.raw < 0xFF) { + rgb_matrix_set_color( i, 0xFF, 0x00, 0x00 ); + } + } +#endif //RGB_MATRIX_ENABLE + shutdown_keymap(); +} + void suspend_power_down_user(void) { suspend_power_down_keymap(); @@ -246,20 +265,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; break; - - case KC_RESET: // Custom RESET code that sets RGBLights to RED - if (!record->event.pressed) { -#ifdef RGBLIGHT_ENABLE - rgblight_enable_noeeprom(); - rgblight_mode_noeeprom(1); - rgblight_setrgb_red(); -#endif // RGBLIGHT_ENABLE - reset_keyboard(); - } - return false; - break; - - case EPRM: // Resets EEPROM if (record->event.pressed) { eeconfig_init(); @@ -333,28 +338,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; break; - case KC_CCCV: // One key copy/paste - if(record->event.pressed){ - copy_paste_timer = timer_read(); - } else { - if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy - register_code(KC_LCTL); - tap(KC_C); - unregister_code(KC_LCTL); -#ifdef AUDIO_ENABLE - PLAY_SONG(tone_copy); -#endif - } else { // Tap, paste - register_code(KC_LCTL); - tap(KC_V); - unregister_code(KC_LCTL); -#ifdef AUDIO_ENABLE - PLAY_SONG(tone_paste); -#endif - } - } - return false; - break; case CLICKY_TOGGLE: #ifdef AUDIO_CLICKY userspace_config.clicky_enable = clicky_enable; diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h index 3efef57046..dd0d1c0d7e 100644 --- a/users/drashna/drashna.h +++ b/users/drashna/drashna.h @@ -15,11 +15,13 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef USERSPACE -#define USERSPACE +#pragma once #include "quantum.h" - - +#include "version.h" +#include "eeprom.h" +#ifdef RGB_MATRIX_ENABLE +#include "rgb_matrix.h" +#endif // Define layer names enum userspace_layers { _QWERTY = 0, @@ -53,7 +55,7 @@ extern bool clicky_enable; void rgblight_sethsv_default_helper(uint8_t index); #endif // RGBLIGHT_ENABLE -void tap(uint16_t keycode); +inline void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); }; bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed); bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer); @@ -90,7 +92,6 @@ enum userspace_custom_keycodes { KC_C9, KC_GGEZ, KC_MAKE, // Run keyboard's customized make command - KC_RESET, // Resets keyboard, with red underglow KC_RGB_T, // Toggles RGB Layer Indication mode KC_SECRET_1, // test1 KC_SECRET_2, // test2 @@ -123,6 +124,7 @@ enum userspace_custom_keycodes { #define COLEMAK KC_COLEMAK #define WORKMAN KC_WORKMAN +#define KC_RESET RESET #define KC_RST KC_RESET #ifdef SWAP_HANDS_ENABLE @@ -131,6 +133,11 @@ enum userspace_custom_keycodes { #define KC_C1R3 KC_BSPC #endif // SWAP_HANDS_ENABLE +#define BK_LWER LT(_LOWER, KC_BSPC) +#define SP_LWER LT(_LOWER, KC_SPC) +#define DL_RAIS LT(_RAISE, KC_DEL) +#define ET_RAIS LT(_RAISE, KC_ENTER) + // OSM keycodes, to keep things clean and easy to change #define KC_MLSF OSM(MOD_LSFT) #define KC_MRSF OSM(MOD_RSFT) @@ -325,7 +332,7 @@ enum { #define _________________ADJUST_L1_________________ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG -#define _________________ADJUST_L2_________________ _______, CK_TOGG, AU_ON, AU_OFF, AG_NORM +#define _________________ADJUST_L2_________________ MU_TOG , CK_TOGG, AU_ON, AU_OFF, AG_NORM #define _________________ADJUST_L3_________________ RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T #define _________________ADJUST_R1_________________ KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5 @@ -350,4 +357,3 @@ enum { LT(_LOWER, KC_SPACE),KC_BSPC, KC_END, KC_PGDN, KC_DEL, LT(_RAISE, KC_ENTER) -#endif // !USERSPACE diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c index f2a9a47a90..03c55b1323 100644 --- a/users/drashna/rgb_stuff.c +++ b/users/drashna/rgb_stuff.c @@ -267,7 +267,7 @@ void matrix_init_rgb(void) { case _COLEMAK: rgblight_sethsv_noeeprom_magenta(); break; case _DVORAK: - rgblight_sethsv_noeeprom_green(); break; + rgblight_sethsv_noeeprom_springgreen(); break; case _WORKMAN: rgblight_sethsv_noeeprom_goldenrod(); break; default: @@ -313,7 +313,7 @@ uint32_t layer_state_set_rgb(uint32_t state) { rgblight_mode_noeeprom(5); break; case _LOWER: - rgblight_sethsv_noeeprom_orange(); + rgblight_sethsv_noeeprom_green(); rgblight_mode_noeeprom(5); break; case _ADJUST: @@ -325,7 +325,7 @@ uint32_t layer_state_set_rgb(uint32_t state) { case _COLEMAK: rgblight_sethsv_noeeprom_magenta(); break; case _DVORAK: - rgblight_sethsv_noeeprom_green(); break; + rgblight_sethsv_noeeprom_springgreen(); break; case _WORKMAN: rgblight_sethsv_noeeprom_goldenrod(); break; default: diff --git a/users/drashna/rgb_stuff.h b/users/drashna/rgb_stuff.h index 6426ea266f..50c75c8c3c 100644 --- a/users/drashna/rgb_stuff.h +++ b/users/drashna/rgb_stuff.h @@ -13,4 +13,3 @@ void matrix_init_rgb(void); void matrix_scan_rgb(void); uint32_t layer_state_set_rgb(uint32_t state); - diff --git a/users/drashna/template.c b/users/drashna/template.c index 20dbb96d7f..e6b50c961b 100644 --- a/users/drashna/template.c +++ b/users/drashna/template.c @@ -1,7 +1,5 @@ -#include "drashna.h" -#include "quantum.h" -#include "action.h" -#include "version.h" +#include "template.h" + // Add reconfigurable functions here, for keymap customization // This allows for a global, userspace functions, and continued @@ -10,25 +8,15 @@ __attribute__ ((weak)) void matrix_init_keymap(void) {} -__attribute__ ((weak)) -void matrix_scan_keymap(void) {} - -__attribute__ ((weak)) -bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { - return true; -} -__attribute__ ((weak)) -uint32_t layer_state_set_keymap (uint32_t state) { - return state; -} -__attribute__ ((weak)) -void led_set_keymap(uint8_t usb_led) {} - // Call user matrix init, then call the keymap's init function void matrix_init_user(void) { matrix_init_keymap(); } + +__attribute__ ((weak)) +void matrix_scan_keymap(void) {} + // No global matrix scan code, so just run keymap's matix // scan function void matrix_scan_user(void) { @@ -36,11 +24,16 @@ void matrix_scan_user(void) { } +__attribute__ ((weak)) +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + return true; +} + // Defines actions tor my global custom keycodes. Defined in drashna.h file // Then runs the _keymap's recod handier if not processed here, // And use "NEWPLACEHOLDER" for new safe range bool process_record_user(uint16_t keycode, keyrecord_t *record) { - + switch (keycode) { case KC_MAKE: if (!record->event.pressed) { @@ -56,12 +49,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case KC_RESET: - if (!record->event.pressed) { - reset_keyboard(); - } - return false; - break; + case EPRM: if (record->event.pressed) { eeconfig_init(); @@ -78,13 +66,66 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return process_record_keymap(keycode, record); } -// Runs state check and changes underglow color and animation -// on layer change, no matter where the change was initiated -// Then runs keymap's layer change check + +__attribute__ ((weak)) +uint32_t layer_state_set_keymap (uint32_t state) { + return state; +} + uint32_t layer_state_set_user (uint32_t state) { return layer_state_set_keymap (state); } + + +__attribute__ ((weak)) +void led_set_keymap(uint8_t usb_led) {} + void led_set_user(uint8_t usb_led) { led_set_keymap(usb_led); } + + + +__attribute__ ((weak)) +void suspend_power_down_keymap(void) {} + +void suspend_power_down_user(void) +{ + suspend_power_down_keymap(); +} + + + +__attribute__ ((weak)) +void suspend_wakeup_init_keymap(void) {} + +void suspend_wakeup_init_user(void) +{ + suspend_wakeup_init_keymap(); + #ifdef KEYBOARD_ergodox_ez + wait_ms(10); + #endif +} + + + +__attribute__ ((weak)) +void startup_keymap(void) {} + +void startup_user (void) { + #ifdef RGBLIGHT_ENABLE + matrix_init_rgb(); + #endif //RGBLIGHT_ENABLE + startup_keymap(); +} + + + +__attribute__ ((weak)) +void shutdown_keymap(void) {} + +void shutdown_user (void) { + shutdown_keymap(); +} + diff --git a/users/drashna/template.h b/users/drashna/template.h index d1251462b2..5b3a93de5f 100644 --- a/users/drashna/template.h +++ b/users/drashna/template.h @@ -2,8 +2,10 @@ #define USERSPACE #include "quantum.h" +#include "version.h" +#include "eeprom.h" -// Define layer names +// Define layer names #define BASE 0 enum custom_keycodes { -- cgit v1.2.3 From 743449472e58651ec8111e6f70811103fb0a28bd Mon Sep 17 00:00:00 2001 From: Joe Wasson Date: Mon, 17 Sep 2018 10:48:02 -0700 Subject: Make `PREVENT_STUCK_MODIFIERS` the default (#3107) * Remove chording as it is not documented, not used, and needs work. * Make Leader Key an optional feature. * Switch from `PREVENT_STUCK_MODIFIERS` to `STRICT_LAYER_RELEASE` * Remove `#define PREVENT_STUCK_MODIFIERS` from keymaps. --- users/drashna/config.h | 5 ----- 1 file changed, 5 deletions(-) (limited to 'users/drashna') diff --git a/users/drashna/config.h b/users/drashna/config.h index dd6875ceb1..92efcc5c74 100644 --- a/users/drashna/config.h +++ b/users/drashna/config.h @@ -43,7 +43,6 @@ // actually sends Ctrl-x. That's bad.) #define IGNORE_MOD_TAP_INTERRUPT #undef PERMISSIVE_HOLD -#define PREVENT_STUCK_MODIFIERS // #define TAPPING_FORCE_HOLD //#define RETRO_TAPPING @@ -64,8 +63,4 @@ #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION -#define DISABLE_LEADER - #define MACRO_TIMER 5 - - -- cgit v1.2.3 From e72e4b6920299176a322a2862f930b7ee5f73dff Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Tue, 8 May 2018 18:46:29 -0700 Subject: Store Clicky status in EEPROM --- users/drashna/drashna.c | 28 ++++++++++++++++++++-------- users/drashna/drashna.h | 3 +-- 2 files changed, 21 insertions(+), 10 deletions(-) (limited to 'users/drashna') diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index 20df2f4de6..7bb272a267 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -133,9 +133,6 @@ void led_set_keymap(uint8_t usb_led) {} void matrix_init_user(void) { userspace_config.raw = eeprom_read_byte(EECONFIG_USERSPACE); -#ifdef AUDIO_CLICKY - clicky_enable = userspace_config.clicky_enable; -#endif #ifdef BOOTLOADER_CATERINA DDRD &= ~(1<<5); @@ -145,7 +142,6 @@ void matrix_init_user(void) { PORTB &= ~(1<<0); #endif - #if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)) set_unicode_input_mode(UC_WINC); #endif //UNICODE_ENABLE @@ -338,11 +334,27 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; break; - case CLICKY_TOGGLE: -#ifdef AUDIO_CLICKY - userspace_config.clicky_enable = clicky_enable; - eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); + case KC_CCCV: // One key copy/paste + if(record->event.pressed){ + copy_paste_timer = timer_read(); + } else { + if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy + register_code(KC_LCTL); + tap(KC_C); + unregister_code(KC_LCTL); +#ifdef AUDIO_ENABLE + PLAY_SONG(tone_copy); +#endif + } else { // Tap, paste + register_code(KC_LCTL); + tap(KC_V); + unregister_code(KC_LCTL); +#ifdef AUDIO_ENABLE + PLAY_SONG(tone_paste); #endif + } + } + return false; break; #ifdef UNICODE_ENABLE case UC_FLIP: // (╯°□°)╯ ︵ ┻━┻ diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h index dd0d1c0d7e..de8c3ba947 100644 --- a/users/drashna/drashna.h +++ b/users/drashna/drashna.h @@ -49,7 +49,7 @@ enum userspace_layers { // RGB color codes are no longer located here anymore. Instead, you will want to // head to https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h -extern bool clicky_enable; +extern bool rgb_layer_change; #ifdef RGBLIGHT_ENABLE void rgblight_sethsv_default_helper(uint8_t index); @@ -64,7 +64,6 @@ bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t thi typedef union { uint8_t raw; struct { - bool clicky_enable :1; bool rgb_layer_change :1; bool is_overwatch :1; bool nuke_switch :1; -- cgit v1.2.3 From 4318797d198b58bb807b3e436c7d8924d8b4a6fe Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 27 Aug 2018 09:16:54 -0700 Subject: Add user level to default_layer_state_set --- users/drashna/drashna.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'users/drashna') diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index 7bb272a267..9489fb4567 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -403,8 +403,8 @@ uint32_t layer_state_set_user(uint32_t state) { } -uint32_t default_layer_state_set_kb(uint32_t state) { - return default_layer_state_set_keymap (state); +uint32_t default_layer_state_set_user(uint32_t state) { + return default_layer_state_set_keymap(state); } -- cgit v1.2.3 From 1512a6bfd48fb75619a1f77394d41bdca7ea28b1 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 1 Oct 2018 18:00:14 -0700 Subject: Keymap: Update to drashna keymaps and userspace (#3992) * Enabled unicode support and send_unicode function * Unicode cleanup * More unicode tweaking * Update EEPROM stuff * Account for keyboard macros * Switch Equal to Plus on Ergodox * more tweaks * Minor Unicode tweaks * Correct matrix printing for keylogger * Fix unicode functions * Fix unicode mode set since it actually uses EEPROM * Re-add DISABLE_LEADER * Ergodox is easier to hit the tapping term, fix that * Fix stupid type on unicode mode check * Preliminary CRKBD/HeliDox support * Fixes to Helidox * Cleanup userspace from old merge stuff * Remove CCCV sounds * Make Mode NOEEPROM Again --- users/drashna/config.h | 10 +++++- users/drashna/drashna.c | 75 ++++++++++++++++++++--------------------- users/drashna/drashna.h | 28 +++++++++++---- users/drashna/drashna_unicode.h | 71 -------------------------------------- users/drashna/rgb_stuff.c | 5 +-- users/drashna/rules.mk | 7 ++-- users/drashna/send_unicode.c | 58 +++++++++++++++++++++++++++++++ users/drashna/send_unicode.h | 71 ++++++++++++++++++++++++++++++++++++++ 8 files changed, 204 insertions(+), 121 deletions(-) delete mode 100644 users/drashna/drashna_unicode.h create mode 100644 users/drashna/send_unicode.c create mode 100644 users/drashna/send_unicode.h (limited to 'users/drashna') diff --git a/users/drashna/config.h b/users/drashna/config.h index 92efcc5c74..3ddec93b13 100644 --- a/users/drashna/config.h +++ b/users/drashna/config.h @@ -55,7 +55,11 @@ #ifdef TAPPING_TERM #undef TAPPING_TERM #endif // TAPPING_TERM -#define TAPPING_TERM 175 +#ifdef KEYBOARD_ergodox_ez + #define TAPPING_TERM 185 +#else + #define TAPPING_TERM 175 +#endif // Disable action_get_macro and fn_actions, since we don't use these @@ -63,4 +67,8 @@ #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION +#define DISABLE_LEADER + #define MACRO_TIMER 5 + + diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index 9489fb4567..aad9fab611 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -21,6 +21,7 @@ along with this program. If not, see . userspace_config_t userspace_config; +uint16_t copy_paste_timer; // Helper Functions @@ -131,7 +132,7 @@ void led_set_keymap(uint8_t usb_led) {} // Call user matrix init, set default RGB colors and then // call the keymap's init function void matrix_init_user(void) { - userspace_config.raw = eeprom_read_byte(EECONFIG_USERSPACE); + userspace_config.raw = eeprom_read_dword(EECONFIG_USERSPACE); #ifdef BOOTLOADER_CATERINA @@ -143,7 +144,9 @@ void matrix_init_user(void) { #endif #if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)) - set_unicode_input_mode(UC_WINC); + if (eeprom_read_byte(EECONFIG_UNICODEMODE) != UC_WIN) { + set_unicode_input_mode(UC_WIN); + } #endif //UNICODE_ENABLE matrix_init_keymap(); } @@ -173,17 +176,12 @@ void shutdown_user (void) { shutdown_keymap(); } -void suspend_power_down_user(void) -{ +void suspend_power_down_user(void) { suspend_power_down_keymap(); } -void suspend_wakeup_init_user(void) -{ +void suspend_wakeup_init_user(void) { suspend_wakeup_init_keymap(); - #ifdef KEYBOARD_ergodox_ez - wait_ms(10); - #endif } @@ -216,7 +214,11 @@ 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 #ifdef KEYLOGGER_ENABLE - xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed); + #if defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_iris_rev2) + xprintf("KL: col: %u, row: %u, pressed: %u\n", record->event.key.row, record->event.key.col, record->event.pressed); + #else + xprintf("KL: col: %u, row: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed); + #endif #endif //KEYLOGGER_ENABLE switch (keycode) { @@ -249,7 +251,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader if (!record->event.pressed) { send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP -#if (defined(BOOTLOADER_DFU) || defined(BOOTLOADER_LUFA_DFU) || defined(BOOTLOADER_QMK_DFU)) +#if defined(__ARM__) + ":dfu-util" +#elif defined(BOOTLOADER_DFU) ":dfu" #elif defined(BOOTLOADER_HALFKAY) ":teensy" @@ -291,7 +295,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { // to save on firmware space, since it's limited. #ifdef MACROS_ENABLED case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros - if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); } + if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeprom_update_dword(EECONFIG_USERSPACE, userspace_config.raw); } #ifdef RGBLIGHT_ENABLE userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18); #endif //RGBLIGHT_ENABLE @@ -342,45 +346,40 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { register_code(KC_LCTL); tap(KC_C); unregister_code(KC_LCTL); -#ifdef AUDIO_ENABLE - PLAY_SONG(tone_copy); -#endif } else { // Tap, paste register_code(KC_LCTL); tap(KC_V); unregister_code(KC_LCTL); -#ifdef AUDIO_ENABLE - PLAY_SONG(tone_paste); -#endif } } return false; break; #ifdef UNICODE_ENABLE - case UC_FLIP: // (╯°□°)╯ ︵ ┻━┻ + case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻ if (record->event.pressed) { - register_code(KC_RSFT); - tap(KC_9); - unregister_code(KC_RSFT); - process_unicode((0x256F | QK_UNICODE), record); // Arm - process_unicode((0x00B0 | QK_UNICODE), record); // Eye - process_unicode((0x25A1 | QK_UNICODE), record); // Mouth - process_unicode((0x00B0 | QK_UNICODE), record); // Eye - register_code(KC_RSFT); - tap(KC_0); - unregister_code(KC_RSFT); - process_unicode((0x256F | QK_UNICODE), record); // Arm - tap(KC_SPC); - process_unicode((0x0361 | QK_UNICODE), record); // Flippy - tap(KC_SPC); - process_unicode((0x253B | QK_UNICODE), record); // Table - process_unicode((0x2501 | QK_UNICODE), record); // Table - process_unicode((0x253B | QK_UNICODE), record); // Table + send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B"); } return false; break; -#endif // UNICODE_ENABLE - + case UC_TABL: // ┬─┬ノ( º _ ºノ) + if (record->event.pressed) { + send_unicode_hex_string("252C 2500 252C 30CE 0028 0020 00BA 0020 005F 0020 00BA 30CE 0029"); + } + return false; + break; + case UC_SHRG: // ¯\_(ツ)_/¯ + if (record->event.pressed) { + send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF"); + } + return false; + break; + case UC_DISA: // ಠ_ಠ + if (record->event.pressed) { + send_unicode_hex_string("0CA0 005F 0CA0"); + } + return false; + break; +#endif } return process_record_keymap(keycode, record) && #ifdef RGBLIGHT_ENABLE diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h index de8c3ba947..49e3fc870b 100644 --- a/users/drashna/drashna.h +++ b/users/drashna/drashna.h @@ -19,9 +19,13 @@ along with this program. If not, see . #include "quantum.h" #include "version.h" #include "eeprom.h" +#include "send_unicode.h" + #ifdef RGB_MATRIX_ENABLE #include "rgb_matrix.h" #endif + + // Define layer names enum userspace_layers { _QWERTY = 0, @@ -59,19 +63,26 @@ inline void tap(uint16_t keycode){ register_code(keycode); unregister_code(keyco bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed); bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer); -#define EECONFIG_USERSPACE (uint8_t *)19 +#define EECONFIG_USERSPACE (uint32_t *)19 typedef union { - uint8_t raw; + uint32_t raw; struct { bool rgb_layer_change :1; bool is_overwatch :1; bool nuke_switch :1; + uint8_t unicode_mod :4; }; } userspace_config_t; +#if defined(KEYMAP_SAFE_RANGE) + #define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE +#else + #define PLACEHOLDER_SAFE_RANGE SAFE_RANGE +#endif + enum userspace_custom_keycodes { - EPRM = SAFE_RANGE, // Resets EEPROM do defaults (as in eeconfig_init) + EPRM = PLACEHOLDER_SAFE_RANGE, // Resets EEPROM do defaults (as in eeconfig_init) VRSN, // Prints QMK Firmware and board info KC_QWERTY, // Sets default layer to QWERTY KC_COLEMAK, // Sets default layer to COLEMAK @@ -99,13 +110,14 @@ enum userspace_custom_keycodes { KC_SECRET_5, // test5 KC_CCCV, // Hold to copy, tap to paste KC_NUKE, // NUCLEAR LAUNCH DETECTED!!! - -#ifdef UNICODE_ENABLE - UC_FLIP, // Table flip (not working?) -#endif //UNICODE_ENABLE + UC_FLIP, // (ಠ痊ಠ)┻━┻ + UC_TABL, // ┬─┬ノ( º _ ºノ) + UC_SHRG, // ¯\_(ツ)_/¯ + UC_DISA, // ಠ_ಠ NEW_SAFE_RANGE //use "NEWPLACEHOLDER for keymap specific codes }; + #define LOWER MO(_LOWER) #define RAISE MO(_RAISE) #define ADJUST MO(_ADJUST) @@ -153,6 +165,8 @@ enum userspace_custom_keycodes { #define MG_NKRO MAGIC_TOGGLE_NKRO +#define UC_IRNY UC(0x2E2E) +#define UC_CLUE UC(0x203D) #ifdef TAP_DANCE_ENABLE enum { diff --git a/users/drashna/drashna_unicode.h b/users/drashna/drashna_unicode.h deleted file mode 100644 index 3d1bc03f9b..0000000000 --- a/users/drashna/drashna_unicode.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef UNICODE_USERSPACE_H -#define UNICODE_USERSPACE_H - - - -/* use X(n) to call the */ - -enum unicode_name { - THINK, // thinking face 🤔 - GRIN, // grinning face 😊 - SMRK, // smirk 😏 - WEARY, // good shit 😩 - UNAMU, // unamused 😒 - - SNEK, // snke 🐍 - PENGUIN, // 🐧 - DRAGON, // 🐉 - MONKEY, // 🐒 - CHICK, // 🐥 - BOAR, // 🐗 - - OKOK, // 👌 - EFFU, // 🖕 - INUP, // 👆 - THUP, // 👍 - THDN, // 👎 - - BBB, // dat B 🅱 - POO, // poop 💩 - HUNDR, // 100 💯 - EGGPL, // EGGPLANT 🍆 - WATER, // wet 💦 - TUMBLER, // 🥃 - - LIT, // fire 🔥 - BANG, // ‽ - IRONY, // ⸮ - DEGREE // ° -}; - - -const uint32_t PROGMEM unicode_map[] = { - [THINK] = 0x1F914, - [GRIN] = 0x1F600, - [BBB] = 0x1F171, - [POO] = 0x1F4A9, - [HUNDR] = 0x1F4AF, - [SMRK] = 0x1F60F, - [WEARY] = 0x1F629, - [EGGPL] = 0x1F346, - [WATER] = 0x1F4A6, - [LIT] = 0x1F525, - [UNAMU] = 0x1F612, - [SNEK] = 0x1F40D, - [PENGUIN] = 0x1F427, - [BOAR] = 0x1F417, - [MONKEY] = 0x1F412, - [CHICK] = 0x1F425, - [DRAGON] = 0x1F409, - [OKOK] = 0x1F44C, - [EFFU] = 0x1F595, - [INUP] = 0x1F446, - [THDN] = 0x1F44E, - [THUP] = 0x1F44D, - [TUMBLER] = 0x1F943, - [BANG] = 0x0203D, - [IRONY] = 0x02E2E, - [DEGREE] = 0x000B0 - }; - - #endif diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c index 03c55b1323..4a1a8de692 100644 --- a/users/drashna/rgb_stuff.c +++ b/users/drashna/rgb_stuff.c @@ -230,7 +230,7 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { userspace_config.rgb_layer_change ^= 1; xprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change); - eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); + eeprom_update_dword(EECONFIG_USERSPACE, userspace_config.raw); if (userspace_config.rgb_layer_change) { layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better) } @@ -243,7 +243,7 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { if (userspace_config.rgb_layer_change) { userspace_config.rgb_layer_change = false; xprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change); - eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); + eeprom_update_dword(EECONFIG_USERSPACE, userspace_config.raw); } } return true; break; @@ -273,6 +273,7 @@ void matrix_init_rgb(void) { default: rgblight_sethsv_noeeprom_cyan(); break; } + rgblight_mode_noeeprom(1); } } diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk index e299f24a1e..3d6213eff2 100644 --- a/users/drashna/rules.mk +++ b/users/drashna/rules.mk @@ -1,4 +1,3 @@ - SRC += drashna.c ifneq ("$(wildcard $(USER_PATH)/secrets.c)","") @@ -9,7 +8,7 @@ ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) SRC += tap_dances.c endif -EXTRAFLAGS += -flto +EXTRAFLAGS += -flto ifeq ($(strip $(NO_SECRETS)), yes) OPT_DEFS += -DNO_SECRETS @@ -37,3 +36,7 @@ ifdef CONSOLE_ENABLE OPT_DEFS += -DKEYLOGGER_ENABLE endif endif + +ifeq ($(strip $(UNICODE_ENABLE)), yes) + SRC += send_unicode.c +endif diff --git a/users/drashna/send_unicode.c b/users/drashna/send_unicode.c new file mode 100644 index 0000000000..cacfe1dc85 --- /dev/null +++ b/users/drashna/send_unicode.c @@ -0,0 +1,58 @@ +// Written by konstantin: vomindoraan +#include "send_unicode.h" +#include +#include + +__attribute__((weak)) +void send_unicode_hex_string(const char* str) { + if (!str) { return; } // Safety net + + while (*str) { + // Find the next code point (token) in the string + for (; *str == ' '; str++); + size_t n = strcspn(str, " "); // Length of the current token + char code_point[n+1]; + strncpy(code_point, str, n); + code_point[n] = '\0'; // Make sure it's null-terminated + + // Normalize the code point: make all hex digits lowercase + for (char *p = code_point; *p; p++) { + *p = tolower((unsigned char)*p); + } + + // Send the code point as a Unicode input string + unicode_input_start(); + send_string(code_point); + unicode_input_finish(); + + str += n; // Move to the first ' ' (or '\0') after the current token + } +} + +// (ノಠ痊ಠ)ノ彡┻━┻ +// send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B"); + +//Old code +// (╯°□°)╯ ︵ ┻━┻ + #if 0 + register_code(KC_RSFT); + tap(KC_9); + unregister_code(KC_RSFT); + process_unicode((0x256F | QK_UNICODE), record); // Arm + process_unicode((0x00B0 | QK_UNICODE), record); // Eye + process_unicode((0x25A1 | QK_UNICODE), record); // Mouth + process_unicode((0x00B0 | QK_UNICODE), record); // Eye + register_code(KC_RSFT); + tap(KC_0); + unregister_code(KC_RSFT); + process_unicode((0x256F | QK_UNICODE), record); // Arm + tap(KC_SPC); + process_unicode((0x0361 | QK_UNICODE), record); // Flippy + tap(KC_SPC); + process_unicode((0x253B | QK_UNICODE), record); // Table + process_unicode((0x2501 | QK_UNICODE), record); // Table + process_unicode((0x253B | QK_UNICODE), record); // Table + #endif + + +// If you need a good converter: https://r12a.github.io/app-conversion/ diff --git a/users/drashna/send_unicode.h b/users/drashna/send_unicode.h new file mode 100644 index 0000000000..818b6e571b --- /dev/null +++ b/users/drashna/send_unicode.h @@ -0,0 +1,71 @@ +#pragma once + +#include "quantum.h" + +void send_unicode_hex_string(const char* str); + +/* use X(n) to call the */ +#ifdef UNICODEMAP_ENABLE +enum unicode_name { + THINK, // thinking face 🤔 + GRIN, // grinning face 😊 + SMRK, // smirk 😏 + WEARY, // good shit 😩 + UNAMU, // unamused 😒 + + SNEK, // snke 🐍 + PENGUIN, // 🐧 + DRAGON, // 🐉 + MONKEY, // 🐒 + CHICK, // 🐥 + BOAR, // 🐗 + + OKOK, // 👌 + EFFU, // 🖕 + INUP, // 👆 + THUP, // 👍 + THDN, // 👎 + + BBB, // dat B 🅱 + POO, // poop 💩 + HUNDR, // 100 💯 + EGGPL, // EGGPLANT 🍆 + WATER, // wet 💦 + TUMBLER, // 🥃 + + LIT, // fire 🔥 + BANG, // ‽ + IRONY, // ⸮ + DEGREE // ° +}; + + +const uint32_t PROGMEM unicode_map[] = { + [THINK] = 0x1F914, + [GRIN] = 0x1F600, + [BBB] = 0x1F171, + [POO] = 0x1F4A9, + [HUNDR] = 0x1F4AF, + [SMRK] = 0x1F60F, + [WEARY] = 0x1F629, + [EGGPL] = 0x1F346, + [WATER] = 0x1F4A6, + [LIT] = 0x1F525, + [UNAMU] = 0x1F612, + [SNEK] = 0x1F40D, + [PENGUIN] = 0x1F427, + [BOAR] = 0x1F417, + [MONKEY] = 0x1F412, + [CHICK] = 0x1F425, + [DRAGON] = 0x1F409, + [OKOK] = 0x1F44C, + [EFFU] = 0x1F595, + [INUP] = 0x1F446, + [THDN] = 0x1F44E, + [THUP] = 0x1F44D, + [TUMBLER] = 0x1F943, + [BANG] = 0x0203D, + [IRONY] = 0x02E2E, + [DEGREE] = 0x000B0 + }; +#endif // UNICODEMAP_ENABLE -- cgit v1.2.3 From 31d12662bde435e6636347ee842108b1cb3d8d48 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Mon, 15 Oct 2018 12:34:49 -0700 Subject: Update to drashna keymaps and userspace - RGB edition (#4143) * Fix up userspace after feature merges * Add new macros for keyboard layouts * Keep new layouts in keymap for easy reference * Cleanup layouts * Fix CRKBD wrappers * Fix up comments * Fix spacing in orthodox base layer * ergodox related cleanup * Make KC_MAKE only flash when holding shift * Add option to fast compile boards * Clean up rgb modes to save space * Re-enable Swap Hands on my Iris --- users/drashna/config.h | 6 ++- users/drashna/drashna.c | 35 ++++++++----- users/drashna/drashna.h | 120 ++++++++++++++++++++------------------------- users/drashna/rgb_stuff.c | 20 ++++---- users/drashna/rules.mk | 3 -- users/drashna/tap_dances.c | 10 ++-- 6 files changed, 94 insertions(+), 100 deletions(-) (limited to 'users/drashna') diff --git a/users/drashna/config.h b/users/drashna/config.h index 3ddec93b13..4545b34ef6 100644 --- a/users/drashna/config.h +++ b/users/drashna/config.h @@ -19,10 +19,12 @@ #ifdef RGBLIGHT_ENABLE #define RGBLIGHT_SLEEP +#undef RGBLIGHT_ANIMATIONS +#define RGBLIGHT_EFFECT_BREATHING +#define RGBLIGHT_EFFECT_SNAKE +#define RGBLIGHT_EFFECT_KNIGHT #endif // RGBLIGHT_ENABLE - - #ifndef ONESHOT_TAP_TOGGLE #define ONESHOT_TAP_TOGGLE 2 #endif // !ONESHOT_TAP_TOGGLE diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index aad9fab611..5b6620cf33 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -36,11 +36,11 @@ bool send_game_macro(const char *str, keyrecord_t *record, bool override) { keycode = KC_ENTER; } clear_keyboard(); - tap(keycode); + tap_code(keycode); wait_ms(50); send_string_with_delay(str, MACRO_TIMER); wait_ms(50); - tap(KC_ENTER); + tap_code(KC_ENTER); } if (override) wait_ms(3000); return false; @@ -127,13 +127,13 @@ uint32_t default_layer_state_set_keymap (uint32_t state) { __attribute__ ((weak)) void led_set_keymap(uint8_t usb_led) {} - +__attribute__ ((weak)) +void eeconfig_init_keymap(void) {} // Call user matrix init, set default RGB colors and then // call the keymap's init function void matrix_init_user(void) { - userspace_config.raw = eeprom_read_dword(EECONFIG_USERSPACE); - + userspace_config.raw = eeconfig_read_user(); #ifdef BOOTLOADER_CATERINA DDRD &= ~(1<<5); @@ -250,7 +250,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader if (!record->event.pressed) { - send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP + uint8_t temp_mod = get_mods(); + clear_mods(); + send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), 10); + if (temp_mod & MODS_SHIFT_MASK) { + send_string_with_delay_P(PSTR( #if defined(__ARM__) ":dfu-util" #elif defined(BOOTLOADER_DFU) @@ -260,7 +264,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #elif defined(BOOTLOADER_CATERINA) ":avrdude" #endif // bootloader options - SS_TAP(X_ENTER)), 10); + ), 10); + } + if (temp_mod & MODS_CTRL_MASK) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), 10); } + send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10); + set_mods(temp_mod); } return false; break; @@ -268,8 +276,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case EPRM: // Resets EEPROM if (record->event.pressed) { eeconfig_init(); - default_layer_set(1UL<event.pressed) { userspace_config.is_overwatch ^= 1; eeprom_update_dword(EECONFIG_USERSPACE, userspace_config.raw); } + if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeconfig_update_user(userspace_config.raw); } #ifdef RGBLIGHT_ENABLE userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18); #endif //RGBLIGHT_ENABLE @@ -344,11 +350,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy register_code(KC_LCTL); - tap(KC_C); + tap_code(KC_C); unregister_code(KC_LCTL); } else { // Tap, paste register_code(KC_LCTL); - tap(KC_V); + tap_code(KC_V); unregister_code(KC_LCTL); } } @@ -413,3 +419,8 @@ uint32_t default_layer_state_set_user(uint32_t state) { void led_set_user(uint8_t usb_led) { led_set_keymap(usb_led); } + +void eeconfig_init_user(void) { + userspace_config.raw = 0; + eeconfig_update_user(userspace_config.raw); +} diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h index 49e3fc870b..7e69a9f8d9 100644 --- a/users/drashna/drashna.h +++ b/users/drashna/drashna.h @@ -19,14 +19,13 @@ along with this program. If not, see . #include "quantum.h" #include "version.h" #include "eeprom.h" -#include "send_unicode.h" #ifdef RGB_MATRIX_ENABLE #include "rgb_matrix.h" #endif -// Define layer names +/* Define layer names */ enum userspace_layers { _QWERTY = 0, _NUMLOCK = 0, @@ -43,28 +42,27 @@ enum userspace_layers { _ADJUST, }; -//define modifiers +/* +define modifiers here, since MOD_* doesn't seem to work for these + */ #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 MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)) -// RGB color codes are no longer located here anymore. Instead, you will want to -// head to https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h - -extern bool rgb_layer_change; +/* +RGB color codes are no longer located here anymore. Instead, you will want to +head to https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h +*/ #ifdef RGBLIGHT_ENABLE void rgblight_sethsv_default_helper(uint8_t index); #endif // RGBLIGHT_ENABLE -inline void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); }; bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed); bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer); -#define EECONFIG_USERSPACE (uint32_t *)19 - typedef union { uint32_t raw; struct { @@ -149,7 +147,7 @@ enum userspace_custom_keycodes { #define DL_RAIS LT(_RAISE, KC_DEL) #define ET_RAIS LT(_RAISE, KC_ENTER) -// 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_MRSF OSM(MOD_RSFT) @@ -178,9 +176,11 @@ enum { #endif // TAP_DANCE_ENABLE -// Custom Keycodes for Diablo 3 layer -// But since TD() doesn't work when tap dance is disabled -// We use custom codes here, so we can substitute the right stuff +/* +Custom Keycodes for Diablo 3 layer +But since TD() doesn't work when tap dance is disabled +We use custom codes here, so we can substitute the right stuff +*/ #ifdef TAP_DANCE_ENABLE #define KC_D3_1 TD(TD_D3_1) #define KC_D3_2 TD(TD_D3_2) @@ -193,11 +193,11 @@ enum { #define KC_D3_4 KC_4 #endif // TAP_DANCE_ENABLE - - -// Since our quirky block definitions are basically a list of comma separated -// arguments, we need a wrapper in order for these definitions to be -// expanded before being used as arguments to the LAYOUT_xxx macro. +/* +Since our quirky block definitions are basically a list of comma separated +arguments, we need a wrapper in order for these definitions to be +expanded before being used as arguments to the LAYOUT_xxx macro. +*/ #if (!defined(LAYOUT) && defined(KEYMAP)) #define LAYOUT KEYMAP #endif @@ -208,112 +208,114 @@ enum { #define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) #define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__) -// Blocks for each of the four major keyboard layouts -// Organized so we can quickly adapt and modify all of them -// at once, rather than for each keyboard, one at a time. -// And this allows for much cleaner blocks in the keymaps. -// For instance Tap/Hold for Control on all of the layouts - -// NOTE: These are all the same length. If you do a search/replace -// then you need to add/remove underscores to keep the -// lengths consistent. +/* +Blocks for each of the four major keyboard layouts +Organized so we can quickly adapt and modify all of them +at once, rather than for each keyboard, one at a time. +And this allows for much cleaner blocks in the keymaps. +For instance Tap/Hold for Control on all of the layouts + +NOTE: These are all the same length. If you do a search/replace + then you need to add/remove underscores to keep the + lengths consistent. +*/ #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_L3_________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B +#define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B #define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P #define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN -#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH) +#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH #define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G #define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D -#define _________________COLEMAK_L3________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B +#define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B #define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN #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, 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_L3____________ 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_M, KC_N, KC_E, KC_I, KC_O -#define ______________COLEMAK_MOD_DH_R3____________ KC_K, KC_H, KC_COMM, KC_DOT, CTL_T(KC_SLASH) +#define ______________COLEMAK_MOD_DH_R3____________ KC_K, KC_H, KC_COMM, KC_DOT, KC_SLASH #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_L3_________________ CTL_T(KC_SCLN),KC_Q, KC_J, KC_K, KC_X +#define _________________DVORAK_L3_________________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X #define _________________DVORAK_R1_________________ KC_F, KC_G, KC_C, KC_R, KC_L #define _________________DVORAK_R2_________________ KC_D, KC_H, KC_T, KC_N, KC_S -#define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z) +#define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, KC_Z #define _________________WORKMAN_L1________________ KC_Q, KC_D, KC_R, KC_W, KC_B #define _________________WORKMAN_L2________________ KC_A, KC_S, KC_H, KC_T, KC_G -#define _________________WORKMAN_L3________________ CTL_T(KC_Z), KC_X, KC_M, KC_C, KC_V +#define _________________WORKMAN_L3________________ KC_Z, KC_X, KC_M, KC_C, KC_V #define _________________WORKMAN_R1________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN #define _________________WORKMAN_R2________________ KC_Y, KC_N, KC_E, KC_O, KC_I -#define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, CTL_T(KC_SLASH) +#define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLASH #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_L3_________________ 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_Y, KC_N, KC_I, KC_O, KC_U -#define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH) +#define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, KC_SLASH #define _________________MALTRON_L1________________ KC_Q, KC_P, KC_Y, KC_C, KC_B #define _________________MALTRON_L2________________ KC_A, KC_N, KC_I, KC_S, KC_F -#define _________________MALTRON_L3________________ CTL_T(KC_SCLN), KC_SLSH, KC_J KC_G, KC_COMM +#define _________________MALTRON_L3________________ KC_SCLN, KC_SLSH, KC_J KC_G, KC_COMM #define _________________MALTRON_R1________________ KC_V, KC_M, KC_U, KC_Z, KC_L #define _________________MALTRON_R2________________ KC_D, KC_T, KC_D, KC_O, KC_R -#define _________________MALTRON_R3________________ KC_DOT, KC_W, KC_K, KC_MINS, CTL_T(KC_x) +#define _________________MALTRON_R3________________ KC_DOT, KC_W, KC_K, KC_MINS, KC_X #define _________________EUCALYN_L1________________ KC_SLSH, KC_COMM, KC_DOT, KC_F, KC_Q #define _________________EUCALYN_L2________________ KC_A, KC_O, KC_E, KC_I, KC_U -#define _________________EUCALYN_L3________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_W +#define _________________EUCALYN_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_W #define _________________EUCALYN_R1________________ KC_M, KC_R, KC_D, KC_Y, KC_P #define _________________EUCALYN_R2________________ KC_G, KC_T, KC_K, KC_S, KC_N -#define _________________EUCALYN_R3________________ KC_B, KC_H, KC_J, KC_L, CTL_T(KC_SCLN) +#define _________________EUCALYN_R3________________ KC_B, KC_H, KC_J, KC_L, KC_SCLN #define _____________CARPLAX_QFMLWY_L1_____________ KC_Q, KC_F, KC_M, KC_L, KC_W #define _____________CARPLAX_QFMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R -#define _____________CARPLAX_QFMLWY_L3_____________ CTL_T(KC_Z), KC_V, KC_G, KC_C, KC_X +#define _____________CARPLAX_QFMLWY_L3_____________ KC_Z, KC_V, KC_G, KC_C, KC_X #define _____________CARPLAX_QFMLWY_R1_____________ KC_Y, KC_U, KC_O, KC_B, KC_J #define _____________CARPLAX_QFMLWY_R2_____________ KC_I, KC_A, KC_E, KC_H, KC_SCLN -#define _____________CARPLAX_QFMLWY_R3_____________ KC_P, KC_K, KC_COMM, KC_DOT, CTL_T(KC_SLSH) +#define _____________CARPLAX_QFMLWY_R3_____________ KC_P, KC_K, KC_COMM, KC_DOT, KC_SLSH #define _____________CARPLAX_QGMLWB_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W #define _____________CARPLAX_QGMLWB_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R -#define _____________CARPLAX_QGMLWB_L3_____________ CTL_T(KC_Z), KC_X, KC_C, KC_F, KC_J +#define _____________CARPLAX_QGMLWB_L3_____________ KC_Z, KC_X, KC_C, KC_F, KC_J #define _____________CARPLAX_QGMLWB_R1_____________ KC_B, KC_Y, KC_U, KC_V, KC_SCLN #define _____________CARPLAX_QGMLWB_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H -#define _____________CARPLAX_QGMLWB_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, CTL_T(KC_SLSH) +#define _____________CARPLAX_QGMLWB_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH #define _____________CARPLAX_QGMLWY_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W #define _____________CARPLAX_QGMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R -#define _____________CARPLAX_QGMLWY_L3_____________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_J +#define _____________CARPLAX_QGMLWY_L3_____________ KC_Z, KC_X, KC_C, KC_V, KC_J #define _____________CARPLAX_QGMLWY_R1_____________ KC_Y, KC_F, KC_U, KC_B, KC_SCLN #define _____________CARPLAX_QGMLWY_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H -#define _____________CARPLAX_QGMLWY_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, CTL_T(KC_SLSH) +#define _____________CARPLAX_QGMLWY_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH #define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5 @@ -352,21 +354,3 @@ enum { #define _________________ADJUST_R2_________________ AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN #define _________________ADJUST_R3_________________ MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT - -// 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 -// so we don't have to alter it 4 times and hope that we haven't missed -// anything -#define ___________ERGODOX_BOTTOM_LEFT_____________ OSM(MOD_MEH), OSM(MOD_LGUI), KC_LBRC, KC_RBRC -#define ___________ERGODOX_BOTTOM_RIGHT____________ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT - - -#define ___________ORTHODOX_THUMP_TOP_____________ ALT_APP, OS_LGUI, KC_LALT, OS_RGUI -#define ___________________ORTHODOX_THUMB_BOTTOM____________________ LOWER, KC_SPACE,KC_BSPC, KC_DEL, KC_ENT, RAISE - - -#define __________________ERGODOX_THUMB_CLUSTER_____________________ ALT_T(KC_APP), OSM(MOD_LGUI), OSM(MOD_RGUI), CTL_T(KC_ESCAPE), \ - KC_HOME, KC_PGUP, \ - LT(_LOWER, KC_SPACE),KC_BSPC, KC_END, KC_PGDN, KC_DEL, LT(_RAISE, KC_ENTER) - - diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c index 4a1a8de692..dc6075320e 100644 --- a/users/drashna/rgb_stuff.c +++ b/users/drashna/rgb_stuff.c @@ -230,7 +230,7 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { userspace_config.rgb_layer_change ^= 1; xprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change); - eeprom_update_dword(EECONFIG_USERSPACE, userspace_config.raw); + eeconfig_update_user(userspace_config.raw); if (userspace_config.rgb_layer_change) { layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better) } @@ -243,7 +243,7 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { if (userspace_config.rgb_layer_change) { userspace_config.rgb_layer_change = false; xprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change); - eeprom_update_dword(EECONFIG_USERSPACE, userspace_config.raw); + eeconfig_update_user(userspace_config.raw); } } return true; break; @@ -295,31 +295,31 @@ uint32_t layer_state_set_rgb(uint32_t state) { switch (biton32(state)) { case _MACROS: rgblight_sethsv_noeeprom_orange(); - userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18); + userspace_config.is_overwatch ? rgblight_effect_snake(RGBLIGHT_MODE_SNAKE + 2) : rgblight_effect_snake(RGBLIGHT_MODE_SNAKE + 3); break; case _MEDIA: rgblight_sethsv_noeeprom_chartreuse(); - rgblight_mode_noeeprom(22); + rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 1); break; case _GAMEPAD: rgblight_sethsv_noeeprom_orange(); - rgblight_mode_noeeprom(17); + rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 2); break; case _DIABLO: rgblight_sethsv_noeeprom_red(); - rgblight_mode_noeeprom(5); + rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); break; case _RAISE: rgblight_sethsv_noeeprom_yellow(); - rgblight_mode_noeeprom(5); + rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); break; case _LOWER: rgblight_sethsv_noeeprom_green(); - rgblight_mode_noeeprom(5); + rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); break; case _ADJUST: rgblight_sethsv_noeeprom_red(); - rgblight_mode_noeeprom(23); + rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2); break; default: // for any other layers, or the default layer switch (biton32(default_layer_state)) { @@ -332,7 +332,7 @@ uint32_t layer_state_set_rgb(uint32_t state) { default: rgblight_sethsv_noeeprom_cyan(); break; } - biton32(state) == _MODS ? rgblight_mode_noeeprom(2) : rgblight_mode_noeeprom(1); // if _MODS layer is on, then breath to denote it + biton32(state) == _MODS ? rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING) : rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); // if _MODS layer is on, then breath to denote it break; } // layer_state_set_indicator(); // Runs every scan, so need to call this here .... since I can't get it working "right" anyhow diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk index 3d6213eff2..964c96c522 100644 --- a/users/drashna/rules.mk +++ b/users/drashna/rules.mk @@ -37,6 +37,3 @@ ifdef CONSOLE_ENABLE endif endif -ifeq ($(strip $(UNICODE_ENABLE)), yes) - SRC += send_unicode.c -endif diff --git a/users/drashna/tap_dances.c b/users/drashna/tap_dances.c index c9e4b1d0ff..3466758530 100644 --- a/users/drashna/tap_dances.c +++ b/users/drashna/tap_dances.c @@ -38,16 +38,16 @@ qk_tap_dance_action_t tap_dance_actions[] = { // 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) { + if (IS_LAYER_ON(_DIABLO)) { switch (diablo_key) { case 0: - tap(KC_1); break; + tap_code(KC_1); break; case 1: - tap(KC_2); break; + tap_code(KC_2); break; case 2: - tap(KC_3); break; + tap_code(KC_3); break; case 3: - tap(KC_4); break; + tap_code(KC_4); break; } } } -- cgit v1.2.3 From 4ffcacd92086870eb7a3102d54178a7af64edb0c Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sat, 27 Oct 2018 11:53:50 -0700 Subject: Add Bootmagic Lite to QMK (#4215) * Preliminary additon of bootmagic lite functionality * Cleanup code * Clean up bootmagic code * Add documentation and clean up code * Make 'lite' an option for BOOTMAGIC_ENABLE * Update Templates with note about Bootmagic Lite option * Detect Debounce variable * Make sure debounce is a non-zero number * Capitalize Bootmagic * Capitalize bootmagic * Update wording * Re-add EEPROM reset, by popular demand And add eeprom-less version to drashna userspace for his sanity * Fix spacing * Set BOOTMAGIC_ENABLE to use full/lite/off And default yes to "full" for compatibility * Add Bootmagic lite info to templates * Remove text from makefiles * Cleanup of makefile * mention yes in bootmagic docs * Wordsmitthing the docs * Fix white spaces * Readd default bootmagic setting, because it's necessary --- users/drashna/drashna.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'users/drashna') diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index 5b6620cf33..7c280e2ddd 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -424,3 +424,19 @@ void eeconfig_init_user(void) { userspace_config.raw = 0; eeconfig_update_user(userspace_config.raw); } + +void bootmagic_lite(void) { + matrix_scan(); + #if defined(DEBOUNCING_DELAY) && DEBOUNCING_DELAY > 0 + wait_ms(DEBOUNCING_DELAY * 2); + #elif defined(DEBOUNCE) && DEBOUNCE > 0 + wait_ms(DEBOUNCE * 2); + #else + wait_ms(30); + #endif + matrix_scan(); + + if (matrix_get_row(BOOTMAGIC_LITE_ROW) & (1 << BOOTMAGIC_LITE_COLUMN)) { + bootloader_jump(); + } +} -- cgit v1.2.3 From 3d15038dd40721a992606705cdac5c5e381f5bba Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Tue, 16 Oct 2018 07:30:12 -0700 Subject: Make RGB init write to eeprom once --- users/drashna/rgb_stuff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'users/drashna') diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c index dc6075320e..9ad94c0c3d 100644 --- a/users/drashna/rgb_stuff.c +++ b/users/drashna/rgb_stuff.c @@ -273,7 +273,7 @@ void matrix_init_rgb(void) { default: rgblight_sethsv_noeeprom_cyan(); break; } - rgblight_mode_noeeprom(1); + rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT); } } -- cgit v1.2.3 From 2776b9ee90d84b8a6c97e3e9395a8a87f499c5a9 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Tue, 16 Oct 2018 08:22:37 -0700 Subject: Update readme for userspace --- users/drashna/readme.md | 97 ++++++++++++++++--------------------------------- 1 file changed, 31 insertions(+), 66 deletions(-) (limited to 'users/drashna') diff --git a/users/drashna/readme.md b/users/drashna/readme.md index 179960322a..ffc60060f4 100644 --- a/users/drashna/readme.md +++ b/users/drashna/readme.md @@ -1,11 +1,8 @@ -Overview -======== +# 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. - -Custom userspace handlers -------------------------- +## Custom userspace handlers Specifically QMK works by using customized handlers for everything. This allows for multiple levels of customization. @@ -15,29 +12,26 @@ The same goes for `matrix_init`, `layer_state_set`, `led_set`, and a few other f All (most) `_user` functions are handled here instead. To allow keyboard specific configuration, I've created `_keymap` functions that can be called by the keymap.c files instead. -This allows for keyboard specific configuration while maintaining the ability to customize the board. - -My [Ergodox EZ Keymap](https://github.com/qmk/qmk_firmware/blob/master/keyboards/ergodox_ez/keymaps/drashna/keymap.