diff --git a/keymaps/custom/config.h b/keymaps/custom/config.h new file mode 100644 index 0000000..57d6092 --- /dev/null +++ b/keymaps/custom/config.h @@ -0,0 +1,42 @@ +#pragma once + +// Enable framebuffer effects (typing heatmap, digital rain) +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS + +// Standard effects (no additional defines needed) +#define ENABLE_RGB_MATRIX_ALPHAS_MODS +#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +#define ENABLE_RGB_MATRIX_BREATHING +#define ENABLE_RGB_MATRIX_BAND_SAT +#define ENABLE_RGB_MATRIX_BAND_VAL +#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +#define ENABLE_RGB_MATRIX_DUAL_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_BEACON +#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +#define ENABLE_RGB_MATRIX_HUE_BREATHING +#define ENABLE_RGB_MATRIX_HUE_PENDULUM +#define ENABLE_RGB_MATRIX_HUE_WAVE +#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +#define ENABLE_RGB_MATRIX_PIXEL_FLOW +#define ENABLE_RGB_MATRIX_PIXEL_RAIN + +// Framebuffer effects (require RGB_MATRIX_FRAMEBUFFER_EFFECTS) +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP +#define ENABLE_RGB_MATRIX_DIGITAL_RAIN + +// Reactive effects (require RGB_MATRIX_KEYPRESSES, already enabled in board config) +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +#define ENABLE_RGB_MATRIX_SOLID_SPLASH +#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH diff --git a/keymaps/custom/keymap.c b/keymaps/custom/keymap.c index 9554828..ecd04cc 100644 --- a/keymaps/custom/keymap.c +++ b/keymaps/custom/keymap.c @@ -3,8 +3,13 @@ #include "dynamic_keymap.h" #include "os_mode.h" +// System76 per-layer RGB state (defined in system76_ec.c, declared in launch_3.c) +extern rgb_config_t layer_rgb[]; +void system76_ec_rgb_eeprom(bool write); + enum custom_keycodes { CK_OSMODE = SAFE_RANGE, // cycle OS mode + CK_RGBMOD, // cycle RGB animation }; typedef struct { @@ -100,8 +105,8 @@ ________________________________________________________________________________ | PRINT | | | | | | | | | | | | | || | | SCREEN | MUTE | VOL DN | VOL UP | | | | | | | | | | OS MODE || | |________|________|________|________|________|________|________|________|________|________|________|________|________|____________||________| -| | PLAY/ | | | | | | | | | LED | LED | LED | || | -| | PAUSE | PREV | NEXT | | | | | | | TOGGLE | DOWN | UP | || | +| | PLAY/ | | | | | | | | | LED | LED | LED | LED || | +| | PAUSE | PREV | NEXT | | | | | | | TOGGLE | DOWN | UP | MODE || | |________|________|________|________|________|________|________|________|________|________|________|________|________|____________||________| | | | | | | | | | | | | | | || | | | | | | | | | | | | | | | || | @@ -119,7 +124,7 @@ ________________________________________________________________________________ [1] = LAYOUT( KC_PSCR, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, CK_OSMODE, KC_NO, - KC_NO, KC_MPLY, KC_MPRV, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_TOG, RGB_VAD, RGB_VAI, KC_NO, KC_NO, + KC_NO, KC_MPLY, KC_MPRV, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_TOG, RGB_VAD, RGB_VAI, CK_RGBMOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, @@ -172,6 +177,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; } + // Cycle RGB animation (FN+Backspace) + // Must update layer_rgb for all layers because system76_ec_rgb_layer() + // resets rgb_matrix_config from layer_rgb on every layer change. + if (keycode == CK_RGBMOD) { + if (record->event.pressed) { + uint8_t mode = layer_rgb[0].mode + 1; + if (mode >= RGB_MATRIX_EFFECT_MAX) mode = 1; + layer_rgb[0].mode = mode; + rgb_matrix_mode_noeeprom(mode); + system76_ec_rgb_eeprom(true); + } + return false; + } + // No rewrites in none mode if (os_mode == OS_MODE_NONE) return true; diff --git a/keymaps/custom/os_detect.c b/keymaps/custom/os_detect.c index 47fd859..071026a 100644 --- a/keymaps/custom/os_detect.c +++ b/keymaps/custom/os_detect.c @@ -4,6 +4,9 @@ #include "os_mode.h" +// System76 per-layer RGB state (no header available) +void system76_ec_rgb_layer(layer_state_t layer_state); + os_mode_t os_mode = OS_MODE_NONE; bool os_mode_manual = false; static bool os_detected = false; @@ -45,6 +48,6 @@ void matrix_scan_user(void) { // Restore default RGB animation after 500ms indicator flash if (flash_start && timer_elapsed32(flash_start) > 500) { flash_start = 0; - rgb_matrix_reload_from_eeprom(); + system76_ec_rgb_layer(layer_state); } }