Add keybind to change RGB effect

This commit is contained in:
2026-03-15 21:17:06 -07:00
parent c15c7a0fcd
commit 025d33b739
3 changed files with 68 additions and 4 deletions

View File

@@ -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;