Skip to content

Repository files navigation

SteamLED

A Decky Loader plugin that drives the Steam Machine's front light bar.

Valve exposes the bar as 17 standard Linux multicolor LED class devices, so this writes RGB values straight to sysfs — no reverse engineering, no daemon, no dependencies.

Features

The plugin adds a single Display control with three options.

Animated

Any of eight motions combined with any color set.

Motions: Scroll Right, Scroll Left, Outward Pulse, Inward Pulse, Bounce, Crossfade, Breathe, Scanner.

Colors: eleven presets (Aurora, Candy, Deep Sea, Ember, Forest, Miami, Orchid, Sunset, Toxic, Ultraviolet), a generated Rainbow with adjustable hue spread, or Custom with 2–6 colors of your own.

Speed and blend are adjustable, plus per-motion controls where they apply — tail length for Scanner, minimum brightness for Breathe.

Static

A fixed picture on the bar: a solid color, any color preset held still, or one of 27 flags — including a HAL 9000 eye at the end of the list.

Now Playing

A toggle. When on, launching one of 21 supported games takes over the bar with that game's colors, and quitting restores whatever you had. Anything else leaves your display alone.

Supported: Balatro, Blue Prince, Clair Obscur: Expedition 33, Counter-Strike 2, Cyberpunk 2077, Deadlock, Elden Ring, Forza Horizon 6, GTA V, Half-Life, Half-Life 2, Hollow Knight, Hollow Knight: Silksong, Neon White, Portal, Portal 2, Red Dead Redemption, Red Dead Redemption 2, Stardew Valley, Subnautica, Team Fortress 2.

Install

Download SteamLED.zip from Releases, then either use Decky's Settings → Developer → Install Plugin from URL, or:

sudo unzip SteamLED.zip -d ~/homebrew/plugins/
sudo systemctl restart plugin_loader

Building it yourself

Needs Node 18+ and pnpm 9. SteamOS has a read-only root filesystem, so install Node with nvm rather than pacman — it lives in ~/.nvm and survives system updates.

./install-local.sh   # nvm + Node + build + install into Decky
./package.sh         # build a distributable out/SteamLED.zip

install-local.sh handles the whole toolchain on the Steam Machine itself. Both scripts run the backend tests before building.

Running without Decky

The engine lives in py_modules/ and works standalone:

sudo python3 run.py --list
sudo python3 run.py animated --preset miami --motion scroll_left
sudo python3 run.py static --mode flag --flag us

Ctrl-C restores whatever the bar was showing.

Notes

  • Brightness belongs to Steam. The plugin never writes the master brightness attribute, so the native light bar brightness slider keeps working.
  • The bar is handed back cleanly. Its state is snapshotted on start and restored on stop, so disabling the plugin returns control to Steam.
  • Idle costs nothing. Redundant writes are skipped, and static displays repaint only when something changes.
  • It resumes on boot, waiting for the LED devices if they aren't registered yet.

Testing

test_engine.py fakes the whole sysfs tree in a temp directory, so the backend can be tested on any Linux machine without Steam Machine hardware:

python3 test_engine.py

Adding your own

Flags, game palettes and color presets are plain data — one dict entry each in flags.py, games.py and scroll.py, and they appear in the UI automatically. Effects declare their own parameters, so adding a motion needs no frontend changes.

License

BSD-3-Clause.

About

A decky plugin that allows for lots of customization options for your Steam Machine LEDs

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages