mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 13:22:31 +01:00 
			
		
		
		
	[User] Update personal userspace and keymaps, add reactive underglow (#6410)
* Update MODERN_DOLCH_RED color * Remove unused RAL_LAL tap dance * Disable Space Cadet on all boards * Rework SEND_STRING_CLEAN into CLEAN_MODS, fix DST_P_R/DST_N_A * Disable unnecessary underglow animations * Rearrange feature flags in rules.mk files * Change custom colors from structs to defines * Add some explicit initializers * Add MODERN_DOLCH_CYAN color * Add IS_LAYER_ON_STATE()/IS_LAYER_OFF_STATE() macros * Add led_set_keymap() template function * Change underglow color based on Caps/Fn state * Preserve val when changing underglow colors * Only trigger Fn light for Fn layer * Refactor fn_light() and caps_light() slightly * Add comments to fn_light() and caps_light()
This commit is contained in:
		
							parent
							
								
									f204ed67f2
								
							
						
					
					
						commit
						36d3902504
					
				| @ -1,4 +1,3 @@ | |||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #define LAYER_FN | #define LAYER_FN | ||||||
| #define SEND_STRING_CLEAN |  | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ enum layers_keymap { | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| void eeconfig_init_keymap(void) { | void eeconfig_init_keymap(void) { | ||||||
|     rgblight_sethsv(MODERN_DOLCH_RED.h, MODERN_DOLCH_RED.s, MODERN_DOLCH_RED.v); |     rgblight_sethsv(MODERN_DOLCH_RED); | ||||||
|     rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL); |     rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -31,6 +31,46 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static bool skip_caps = false; | ||||||
|  | 
 | ||||||
|  | static void fn_light(uint32_t state) { | ||||||
|  |     if (IS_LAYER_ON_STATE(state, L_FN)) { | ||||||
|  |         rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); | ||||||
|  |         rgblight_sethsv_noeeprom(modern_dolch_red.h, modern_dolch_red.s, rgblight_get_val()); | ||||||
|  |         skip_caps = true; | ||||||
|  |     } else { | ||||||
|  |         rgblight_config_t saved = { .raw = eeconfig_read_rgblight() }; | ||||||
|  |         rgblight_sethsv_noeeprom(saved.hue, saved.sat, saved.val); | ||||||
|  |         rgblight_mode_noeeprom(saved.mode); | ||||||
|  |     } | ||||||
|  |     // caps_light will be called automatically after this
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void caps_light(uint8_t usb_led) { | ||||||
|  |     if (skip_caps) { | ||||||
|  |         skip_caps = false; | ||||||
|  |         return;  // Skip calls triggered by the Fn layer turning on
 | ||||||
|  |     } | ||||||
|  |     if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) { | ||||||
|  |         rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); | ||||||
|  |         rgblight_sethsv_noeeprom(modern_dolch_cyan.h, modern_dolch_cyan.s, rgblight_get_val()); | ||||||
|  |     } else { | ||||||
|  |         fn_light(layer_state);  // Caps is off, check if Fn light should be on
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | uint32_t layer_state_set_keymap(uint32_t state) { | ||||||
|  |     static uint32_t prev_state = L_BASE; | ||||||
|  |     if (IS_LAYER_ON_STATE(state, L_FN) != IS_LAYER_ON_STATE(prev_state, L_FN)) { | ||||||
|  |         fn_light(state);  // Fn state changed since last time
 | ||||||
|  |     } | ||||||
|  |     return prev_state = state; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void led_set_keymap(uint8_t usb_led) { | ||||||
|  |     caps_light(usb_led); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||||
|     /* Base layer
 |     /* Base layer
 | ||||||
|      * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ |      * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ | ||||||
|  | |||||||
| @ -1,11 +1,11 @@ | |||||||
|  | BACKLIGHT_ENABLE   = no | ||||||
| BOOTMAGIC_ENABLE   = no | BOOTMAGIC_ENABLE   = no | ||||||
| COMMAND_ENABLE     = yes | COMMAND_ENABLE     = yes | ||||||
| CONSOLE_ENABLE    = no | CONSOLE_ENABLE     = yes | ||||||
| EXTRAKEY_ENABLE    = yes | EXTRAKEY_ENABLE    = yes | ||||||
| MOUSEKEY_ENABLE    = yes | MOUSEKEY_ENABLE    = yes | ||||||
| NKRO_ENABLE        = yes | NKRO_ENABLE        = yes | ||||||
|  | RGBLIGHT_ENABLE    = yes | ||||||
|  | SPACE_CADET_ENABLE = no | ||||||
| TAP_DANCE_ENABLE   = yes | TAP_DANCE_ENABLE   = yes | ||||||
| UNICODEMAP_ENABLE  = no | UNICODEMAP_ENABLE  = no | ||||||
| 
 |  | ||||||
| BACKLIGHT_ENABLE = yes |  | ||||||
| RGBLIGHT_ENABLE  = yes |  | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| #include QMK_KEYBOARD_H | #include QMK_KEYBOARD_H | ||||||
| #include "konstantin.h" | #include "konstantin.h" | ||||||
| 
 | 
 | ||||||
| static const HSV *colors[] = { &GODSPEED_BLUE, &GODSPEED_YELLOW }; | static const HSV *colors[] = { &godspeed_blue, &godspeed_yellow }; | ||||||
| static const size_t cnum = sizeof colors / sizeof *colors; | static const size_t cnum = sizeof colors / sizeof *colors; | ||||||
| static size_t cidx = 0; | static size_t cidx = 0; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,10 +1,11 @@ | |||||||
|  | BACKLIGHT_ENABLE   = no | ||||||
| BOOTMAGIC_ENABLE   = no | BOOTMAGIC_ENABLE   = no | ||||||
| COMMAND_ENABLE     = yes | COMMAND_ENABLE     = yes | ||||||
| CONSOLE_ENABLE     = no | CONSOLE_ENABLE     = no | ||||||
| EXTRAKEY_ENABLE    = yes | EXTRAKEY_ENABLE    = yes | ||||||
| MOUSEKEY_ENABLE    = yes | MOUSEKEY_ENABLE    = yes | ||||||
| NKRO_ENABLE        = yes | NKRO_ENABLE        = yes | ||||||
|  | RGBLIGHT_ENABLE    = yes | ||||||
|  | SPACE_CADET_ENABLE = no | ||||||
| TAP_DANCE_ENABLE   = yes | TAP_DANCE_ENABLE   = yes | ||||||
| UNICODEMAP_ENABLE  = yes | UNICODEMAP_ENABLE  = yes | ||||||
| 
 |  | ||||||
| BACKLIGHT_ENABLE = no |  | ||||||
|  | |||||||
| @ -1,8 +1,10 @@ | |||||||
|  | BACKLIGHT_ENABLE   = no | ||||||
| BOOTMAGIC_ENABLE   = no | BOOTMAGIC_ENABLE   = no | ||||||
| COMMAND_ENABLE     = yes | COMMAND_ENABLE     = yes | ||||||
| CONSOLE_ENABLE     = yes | CONSOLE_ENABLE     = yes | ||||||
| EXTRAKEY_ENABLE    = yes | EXTRAKEY_ENABLE    = yes | ||||||
| MOUSEKEY_ENABLE    = yes | MOUSEKEY_ENABLE    = yes | ||||||
| NKRO_ENABLE        = yes | NKRO_ENABLE        = yes | ||||||
|  | SPACE_CADET_ENABLE = no | ||||||
| TAP_DANCE_ENABLE   = yes | TAP_DANCE_ENABLE   = yes | ||||||
| UNICODEMAP_ENABLE  = yes | UNICODEMAP_ENABLE  = yes | ||||||
|  | |||||||
| @ -1,11 +1,11 @@ | |||||||
|  | BACKLIGHT_ENABLE   = no | ||||||
| BOOTMAGIC_ENABLE   = no | BOOTMAGIC_ENABLE   = no | ||||||
| COMMAND_ENABLE     = yes | COMMAND_ENABLE     = yes | ||||||
| CONSOLE_ENABLE     = yes | CONSOLE_ENABLE     = yes | ||||||
| EXTRAKEY_ENABLE    = yes | EXTRAKEY_ENABLE    = yes | ||||||
| MOUSEKEY_ENABLE    = yes | MOUSEKEY_ENABLE    = yes | ||||||
| NKRO_ENABLE        = yes | NKRO_ENABLE        = yes | ||||||
|  | SPACE_CADET_ENABLE = no | ||||||
| TAP_DANCE_ENABLE   = yes | TAP_DANCE_ENABLE   = yes | ||||||
| UNICODEMAP_ENABLE  = yes | UNICODEMAP_ENABLE  = yes | ||||||
| 
 |  | ||||||
| BACKLIGHT_ENABLE  = no |  | ||||||
| VISUALIZER_ENABLE  = no | VISUALIZER_ENABLE  = no | ||||||
|  | |||||||
| @ -13,6 +13,12 @@ | |||||||
| #define NO_ACTION_MACRO | #define NO_ACTION_MACRO | ||||||
| #define NO_ACTION_ONESHOT | #define NO_ACTION_ONESHOT | ||||||
| 
 | 
 | ||||||
|  | #undef  RGBLIGHT_ANIMATIONS | ||||||
|  | #define RGBLIGHT_EFFECT_BREATHING | ||||||
|  | #define RGBLIGHT_EFFECT_RAINBOW_MOOD | ||||||
|  | #define RGBLIGHT_EFFECT_RAINBOW_SWIRL | ||||||
|  | #define RGBLIGHT_EFFECT_SNAKE | ||||||
|  | 
 | ||||||
| #define PERMISSIVE_HOLD | #define PERMISSIVE_HOLD | ||||||
| #define TAPPING_TERM        200 | #define TAPPING_TERM        200 | ||||||
| #define TAPPING_TOGGLE      2 | #define TAPPING_TOGGLE      2 | ||||||
|  | |||||||
| @ -32,26 +32,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     switch (keycode) { |     switch (keycode) { | ||||||
|     case CLEAR: |         uint16_t kc; | ||||||
|         if (record->event.pressed) { |  | ||||||
|             SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE)); |  | ||||||
|         } |  | ||||||
|         return false; |  | ||||||
| 
 |  | ||||||
|     case DST_P_R: |  | ||||||
|         (record->event.pressed ? register_code16 : unregister_code16)( |  | ||||||
|             (get_mods() & DST_MOD_MASK) ? DST_REM : DST_PRV |  | ||||||
|         ); |  | ||||||
|         return false; |  | ||||||
| 
 |  | ||||||
|     case DST_N_A: |  | ||||||
|         (record->event.pressed ? register_code16 : unregister_code16)( |  | ||||||
|             (get_mods() & DST_MOD_MASK) ? DST_ADD : DST_NXT |  | ||||||
|         ); |  | ||||||
|         return false; |  | ||||||
| 
 |  | ||||||
| #ifdef LAYER_FN | #ifdef LAYER_FN | ||||||
|         static bool fn_lock; |         static bool fn_lock = false; | ||||||
| 
 | 
 | ||||||
|     case FN_FNLK: |     case FN_FNLK: | ||||||
|         if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) { |         if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) { | ||||||
| @ -77,6 +60,28 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||||||
|         } |         } | ||||||
|         return true; |         return true; | ||||||
| 
 | 
 | ||||||
|  |     case CLEAR: | ||||||
|  |         if (record->event.pressed) { | ||||||
|  |             CLEAN_MODS( | ||||||
|  |                 SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE)); | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  |         return false; | ||||||
|  | 
 | ||||||
|  |     case DST_P_R: | ||||||
|  |         kc = (get_mods() & DST_MOD_MASK) ? DST_REM : DST_PRV; | ||||||
|  |         CLEAN_MODS( | ||||||
|  |             (record->event.pressed ? register_code16 : unregister_code16)(kc); | ||||||
|  |         ) | ||||||
|  |         return false; | ||||||
|  | 
 | ||||||
|  |     case DST_N_A: | ||||||
|  |         kc = (get_mods() & DST_MOD_MASK) ? DST_ADD : DST_NXT; | ||||||
|  |         CLEAN_MODS( | ||||||
|  |             (record->event.pressed ? register_code16 : unregister_code16)(kc); | ||||||
|  |         ) | ||||||
|  |         return false; | ||||||
|  | 
 | ||||||
|     default: |     default: | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
| @ -91,7 +96,7 @@ uint32_t layer_state_set_user(uint32_t state) { | |||||||
|     state = layer_state_set_keymap(state); |     state = layer_state_set_keymap(state); | ||||||
| 
 | 
 | ||||||
| #ifdef LAYER_NUMPAD | #ifdef LAYER_NUMPAD | ||||||
|     bool numpad = state & 1UL<<L_NUMPAD; |     bool numpad = IS_LAYER_ON_STATE(state, L_NUMPAD); | ||||||
|     bool num_lock = IS_HOST_LED_ON(USB_LED_NUM_LOCK); |     bool num_lock = IS_HOST_LED_ON(USB_LED_NUM_LOCK); | ||||||
|     if (numpad != num_lock) { |     if (numpad != num_lock) { | ||||||
|         tap_code(KC_NLCK);  // Toggle Num Lock to match Numpad layer state
 |         tap_code(KC_NLCK);  // Toggle Num Lock to match Numpad layer state
 | ||||||
| @ -100,3 +105,10 @@ uint32_t layer_state_set_user(uint32_t state) { | |||||||
| 
 | 
 | ||||||
|     return state; |     return state; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | __attribute__((weak)) | ||||||
|  | void led_set_keymap(uint8_t usb_led) {} | ||||||
|  | 
 | ||||||
|  | void led_set_user(uint8_t usb_led) { | ||||||
|  |     led_set_keymap(usb_led); | ||||||
|  | } | ||||||
|  | |||||||
| @ -47,15 +47,16 @@ | |||||||
| 
 | 
 | ||||||
| #define LCT_CPS LCTL_T(KC_CAPS) | #define LCT_CPS LCTL_T(KC_CAPS) | ||||||
| 
 | 
 | ||||||
| #ifdef SEND_STRING_CLEAN | #define IS_LAYER_ON_STATE(state, layer)  ( (state) & (1UL << (layer))) | ||||||
|     #undef  SEND_STRING | #define IS_LAYER_OFF_STATE(state, layer) (~(state) & (1UL << (layer))) | ||||||
|     #define SEND_STRING(string) {         \ | 
 | ||||||
|             uint8_t ss_mods = get_mods(); \ | // Clear mods, perform action, restore mods
 | ||||||
|  | #define CLEAN_MODS(action) {       \ | ||||||
|  |         uint8_t mods = get_mods(); \ | ||||||
|         clear_mods();              \ |         clear_mods();              \ | ||||||
|             send_string_P(PSTR(string));  \ |         action;                    \ | ||||||
|             set_mods(ss_mods);            \ |         set_mods(mods);            \ | ||||||
|     } |     } | ||||||
| #endif |  | ||||||
| 
 | 
 | ||||||
| enum keycodes_user { | enum keycodes_user { | ||||||
|     CLEAR = SAFE_RANGE, |     CLEAR = SAFE_RANGE, | ||||||
| @ -83,3 +84,4 @@ void keyboard_post_init_keymap(void); | |||||||
| 
 | 
 | ||||||
| bool     process_record_keymap(uint16_t keycode, keyrecord_t *record); | bool     process_record_keymap(uint16_t keycode, keyrecord_t *record); | ||||||
| uint32_t layer_state_set_keymap(uint32_t state); | uint32_t layer_state_set_keymap(uint32_t state); | ||||||
|  | void     led_set_keymap(uint8_t usb_led); | ||||||
|  | |||||||
| @ -20,6 +20,7 @@ const uint8_t PROGMEM RGBLED_SNAKE_INTERVALS[] = { 20, 50, 100 }; | |||||||
| const uint8_t PROGMEM RGBLED_KNIGHT_INTERVALS[] = { 20, 50, 100 }; | const uint8_t PROGMEM RGBLED_KNIGHT_INTERVALS[] = { 20, 50, 100 }; | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| const HSV GODSPEED_BLUE    = { .h = 198, .s = 68,  .v = 255 }; | const HSV godspeed_blue     = { GODSPEED_BLUE }; | ||||||
| const HSV GODSPEED_YELLOW  = { .h = 27,  .s = 153, .v = 255 }; | const HSV godspeed_yellow   = { GODSPEED_YELLOW }; | ||||||
| const HSV MODERN_DOLCH_RED = { .h = 252, .s = 255, .v = 144 }; | const HSV modern_dolch_cyan = { MODERN_DOLCH_CYAN }; | ||||||
|  | const HSV modern_dolch_red  = { MODERN_DOLCH_RED }; | ||||||
|  | |||||||
| @ -2,6 +2,12 @@ | |||||||
| 
 | 
 | ||||||
| #include "quantum.h" | #include "quantum.h" | ||||||
| 
 | 
 | ||||||
| extern const HSV GODSPEED_BLUE; | #define GODSPEED_BLUE     198, 68,  255 | ||||||
| extern const HSV GODSPEED_YELLOW; | #define GODSPEED_YELLOW   27,  153, 255 | ||||||
| extern const HSV MODERN_DOLCH_RED; | #define MODERN_DOLCH_CYAN 110, 255, 108 | ||||||
|  | #define MODERN_DOLCH_RED  251, 255, 108 | ||||||
|  | 
 | ||||||
|  | extern const HSV godspeed_blue; | ||||||
|  | extern const HSV godspeed_yellow; | ||||||
|  | extern const HSV modern_dolch_cyan; | ||||||
|  | extern const HSV modern_dolch_red; | ||||||
|  | |||||||
| @ -107,12 +107,12 @@ void td_layer_mod_reset(qk_tap_dance_state_t *state, void *user_data) { | |||||||
| qk_tap_dance_action_t tap_dance_actions[] = { | qk_tap_dance_action_t tap_dance_actions[] = { | ||||||
|     [TD_DST_A_R] = ACTION_TAP_DANCE_DOUBLE(DST_ADD, DST_REM), |     [TD_DST_A_R] = ACTION_TAP_DANCE_DOUBLE(DST_ADD, DST_REM), | ||||||
| 
 | 
 | ||||||
|     [TD_RAL_LAL] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RALT, KC_LALT), |  | ||||||
|     [TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RALT, KC_RGUI), |     [TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RALT, KC_RGUI), | ||||||
|     [TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RCTL, KC_RSFT), |     [TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RCTL, KC_RSFT), | ||||||
|     [TD_RSF_RCT] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RSFT, KC_RCTL), |     [TD_RSF_RCT] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RSFT, KC_RCTL), | ||||||
| 
 | 
 | ||||||
|     [TD_LSFT_FN] = ACTION_TAP_DANCE_MOD_LAYER(KC_LSFT, L_FN), |     [TD_LSFT_FN] = ACTION_TAP_DANCE_MOD_LAYER(KC_LSFT, L_FN), | ||||||
|     [TD_RCTL_FN] = ACTION_TAP_DANCE_MOD_LAYER(KC_RCTL, L_FN), |     [TD_RCTL_FN] = ACTION_TAP_DANCE_MOD_LAYER(KC_RCTL, L_FN), | ||||||
|  | 
 | ||||||
|     [TD_FN_RCTL] = ACTION_TAP_DANCE_LAYER_MOD(L_FN, KC_RCTL), |     [TD_FN_RCTL] = ACTION_TAP_DANCE_LAYER_MOD(L_FN, KC_RCTL), | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -4,24 +4,24 @@ | |||||||
| 
 | 
 | ||||||
| #define DST_A_R TD(TD_DST_A_R) | #define DST_A_R TD(TD_DST_A_R) | ||||||
| 
 | 
 | ||||||
| #define RAL_LAL TD(TD_RAL_LAL) |  | ||||||
| #define RAL_RGU TD(TD_RAL_RGU) | #define RAL_RGU TD(TD_RAL_RGU) | ||||||
| #define RCT_RSF TD(TD_RCT_RSF) | #define RCT_RSF TD(TD_RCT_RSF) | ||||||
| #define RSF_RCT TD(TD_RSF_RCT) | #define RSF_RCT TD(TD_RSF_RCT) | ||||||
| 
 | 
 | ||||||
| #define LSFT_FN TD(TD_LSFT_FN) | #define LSFT_FN TD(TD_LSFT_FN) | ||||||
| #define RCTL_FN TD(TD_RCTL_FN) | #define RCTL_FN TD(TD_RCTL_FN) | ||||||
|  | 
 | ||||||
| #define FN_RCTL TD(TD_FN_RCTL) | #define FN_RCTL TD(TD_FN_RCTL) | ||||||
| 
 | 
 | ||||||
| enum tap_dance { | enum tap_dance { | ||||||
|     TD_DST_A_R, |     TD_DST_A_R, | ||||||
| 
 | 
 | ||||||
|     TD_RAL_LAL, |  | ||||||
|     TD_RAL_RGU, |     TD_RAL_RGU, | ||||||
|     TD_RCT_RSF, |     TD_RCT_RSF, | ||||||
|     TD_RSF_RCT, |     TD_RSF_RCT, | ||||||
| 
 | 
 | ||||||
|     TD_LSFT_FN, |     TD_LSFT_FN, | ||||||
|     TD_RCTL_FN, |     TD_RCTL_FN, | ||||||
|  | 
 | ||||||
|     TD_FN_RCTL, |     TD_FN_RCTL, | ||||||
| }; | }; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Konstantin Đorđević
						Konstantin Đorđević