Goal
A keystroke-reactive underglow effect — the "step in water" idea: pressing a key brightens (or ripples) the column it's in, then decays back to the base mood. This was deferred out of #33 / v2.7.0 (which shipped per-layer colours, moods, brightness, and persistence) because it needs capabilities the current module doesn't use.
Why it's a separate, harder piece of work
The Eyelash Sofle underglow is 7 addressable WS2812 pixels per half = 6 finger columns + 1 thumb (confirmed: bumping chain-length revealed no extra LEDs, and the swirl effect changes colour per column). So column-granularity reactive lighting is physically possible — but:
- No per-pixel API. ZMK's
&rgb_ug underglow only sets whole-strip effect/colour. A reactive effect must drive &led_strip directly: a render loop + per-column energy array + decay + a key-position → column map.
- Split. Each half drives its own strip, and the peripheral doesn't trivially see its own key events the way the central does. The central likely has to sync a small (~7-byte) per-column energy array to the peripheral each tick (or the peripheral runs its own local reactive layer for its own keys). Needs a transport decision.
- Coexistence with the current module. The reactive layer would be the BASE "effects" mood (or a 4th mood), and must hand back to solid/animation moods and per-layer colours cleanly. The diff-cache and
&rgb_ug path in zmk-rgb-layer assume whole-strip writes, so this is a parallel rendering path, not an extension of the current one.
In short: this is a small custom RGB-matrix engine, not a config tweak.
Acceptance sketch
- Typing visibly energises the typed key's column; idle columns sit at the base mood brightness.
- Works on both halves (each lights its own typed columns).
- Selectable as a base mood; other moods + per-layer colours still work; brightness still respected.
References
Goal
A keystroke-reactive underglow effect — the "step in water" idea: pressing a key brightens (or ripples) the column it's in, then decays back to the base mood. This was deferred out of #33 / v2.7.0 (which shipped per-layer colours, moods, brightness, and persistence) because it needs capabilities the current module doesn't use.
Why it's a separate, harder piece of work
The Eyelash Sofle underglow is 7 addressable WS2812 pixels per half = 6 finger columns + 1 thumb (confirmed: bumping
chain-lengthrevealed no extra LEDs, and the swirl effect changes colour per column). So column-granularity reactive lighting is physically possible — but:&rgb_ugunderglow only sets whole-strip effect/colour. A reactive effect must drive&led_stripdirectly: a render loop + per-column energy array + decay + a key-position → column map.&rgb_ugpath inzmk-rgb-layerassume whole-strip writes, so this is a parallel rendering path, not an extension of the current one.In short: this is a small custom RGB-matrix engine, not a config tweak.
Acceptance sketch
References
zmk-rgb-layermodule and the agent reference notes.