Skip to content

Reactive per-column underglow effect ("step in water") #35

Description

@rdlu

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:

  1. 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.
  2. 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.
  3. 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

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions