Smart status lighting for the official Steam Machine
Make your Steam Machine's 17-pixel light bar useful and a little more expressive. Choose a persistent display, then let playtime warnings and short Steam moments take the stage before your display returns.
Try the interactive SignalBar preview before installing
Carry the current game's colours onto the light bar. Choose Library Hero, Header, or Capsule artwork and select the best row automatically or manually. The choice is remembered separately for every game.
Local custom artwork is preferred, including SteamGridDB replacements and images assigned to non-Steam shortcuts. In Artwork mode, the quick Decky panel shows the active game image directly above its exact 17-colour sample.
Use the bar for CPU, GPU, or both. Mixed mode gives each signal eight LEDs, with the centre LED off. Length shows load and colour shows temperature. Responsive, Balanced, and Smooth profiles control how quickly the meter reacts.
Performance can be limited to game sessions or kept active on the Steam home screen. Three ready-made temperature palettes are included, and a native Decky colour picker lets you choose custom Cool, Middle, and Hot colours.
CPU/GPU sensors are sampled every 0.5 seconds in every display mode. Opening Performance settings immediately shows fresh readings without first selecting Performance as the active display. Missing or expired readings are not retained as if they were live.
See the time you have left. An active Steam Families limit automatically takes priority when a game starts, or you can start a personal timer. The bar empties from right to left, turns amber below 15 minutes, and turns red below five. During the final eight seconds, three short white flashes repeat until zero.
See controller charge at a glance. On Home or in games, an optional gauge shows one controller or splits the bar into two mirrored gauges with a dark centre and white charge tips. Connection and low-battery alerts appear briefly when Steam reports a change.
Charging can play a short cue or a continuous blue-and-white animation that stops at 100%. Choose the animation styles, colours, brightness and where each signal appears. The GIF shows the two-controller gauge and continuous charging.
Battery and charging data depend on the controller. Unknown levels are never invented; see the controller test notes.
Choose a city to give the light bar a living weather scene on Home, in games, or everywhere. Eighteen selectable loops cover clear skies, rain, cloud, partly cloudy day and night, snow, and storms. Snow takes hold is the default snow scene; all animations can be previewed without network access. Cloud has four choices, including the new Cross & gather (the fresh-install default) and the longer Slow convergence. Existing Cloud selections are kept.
An optional, experimental weather icon and temperature can also appear beside the SteamOS clock. Choose °C or °F for the top-bar number. This works independently of the LED weather scene and has been confirmed on one Steam Machine; Steam UI updates could change its placement. No temperature colours are mapped to LEDs.
Select a city before enabling live weather. If you enter a country, use its full name (for example France), not a two-letter code. SignalBar fetches current conditions from Open-Meteo about every 15 minutes, without an API key or automatic location detection. Weather and the permanent controller gauge are mutually exclusive; the controller gauge remains the fresh-install default.
Light events briefly replace the current display, play their animation, then restore the live Artwork or Performance state. They can work outside a game. Each category has its own switch, animation selector, and nearby live preview.
Return beacon is the fresh-install choice. The GIF below shows Wide echo, another selectable notification style.
An icy shutter closes, followed by two flashes with expanding echoes.
Constellation round trip is the fresh-install choice. The GIF below shows it.
Two red traces mark recording start and stop. While recording, the centre LED stays pure red over Artwork or Performance. Its two neighbours are black by default to keep the marker distinct through the physical diffuser. The marker never modifies a playtime countdown or another event animation.
SignalBar follows a strict order:
- Disabled returns complete control to Steam.
- A new native LED write interrupts SignalBar and is never overwritten by a stale frame.
- The final five minutes of a countdown are protected from light events.
- Short light events and manual previews temporarily replace non-critical displays.
- Low-battery alerts can interrupt other short events; connection and charging alerts do not interrupt an active Steam light event.
- Steam Families and personal countdowns replace the selected base display.
- The optional controller gauge or Weather replaces the base display in its selected context; otherwise Artwork or Performance provides it.
- Install Decky Loader and enable Developer Mode.
- Download
SignalBar-v0.6.1.zipfrom the v0.6.1 release. Do not extract it. - Open Decky Settings > Developer > Install Plugin from ZIP.
- Select the downloaded archive.
- Restart Decky Loader if SignalBar does not appear immediately.
Extract the archive into ~/homebrew/plugins/ so the result is a
~/homebrew/plugins/SignalBar/ directory, then restart plugin_loader.
SignalBar requests Decky's root flag only because the Steam Machine exposes its
light bar through root-owned valve-leds sysfs files.
- Open SignalBar in Decky's quick-access menu.
- Choose Artwork, Performance, or Disabled.
- Open Detailed settings for Artwork, Performance, Playtime, Light events, Controllers, Weather, and Advanced options.
- Use Preview to compare animations before changing your live settings.
Live Light events are enabled on a fresh installation. Controller alerts have their own switch and work independently of Light events. Saved settings from older versions are kept.
- Library Hero, Header, or vertical Capsule
- Automatic, centre, lower, or manual sample row
- Red line over the image showing the selected manual row
- Saved source and position for each game
- Local SteamGridDB and non-Steam custom artwork support
Steam's Library Logo is not sampled because it is a transparent foreground layer rather than a complete image.
- CPU, GPU, or mixed CPU + GPU
- Both meters left to right, or mirrored toward the centre
- Responsive, Balanced, or Smooth filtering
- Optional always-on display outside games
- Three built-in temperature palettes
- Custom Cool, Middle, and Hot colours through Decky's colour picker
- Live CPU/GPU load and temperature in the quick panel
Cool temperature and Hot temperature are thresholds. The selected colour
palette is blended continuously between them.
- Automatic Steam Families remaining-time signal
- Personal timer from five to 240 minutes
- Five starting colours
- Timer-duration scale or fixed one, two, three, or four-hour full bar
- Final eight-second alert
Steam Families only appears while a game is running. Closing or switching games clears the old parental countdown immediately.
- Permanent battery gauge: Off, On Home, or Everywhere
- Brief alert contexts: Off, On Home, In game, or Home + in game
- Connection and low-battery alerts can each be disabled; charging has its own Off / Brief / Continuous on Home / Continuous everywhere choice
- Adjustable low-battery threshold from 5% to 30%
- Three selectable styles for each signal, including the two-controller view
- Local preview buttons work without a connected controller or live alerts
The gauge takes the place of Artwork or Performance where selected; it does not combine their colours. A Steam Families countdown still wins. Unknown or coarse battery data is not displayed as an exact percentage.
- Location selected manually by city or postal code; no automatic geolocation
- On Home, In game, or Everywhere, with eighteen selectable 17-LED animations
- Independent optional SteamOS top-bar icon and °C/°F temperature
- Weather brightness and faint-pixel cutoff for the physical diffuser
- Weather previews work without a city or network connection
The physical diffuser can make a lit LED bleed into a neighbouring dark space. Extra dark LEDs compensates by lighting fewer physical pixels than the logical preview. It affects Countdown and Performance, never Artwork. The default is two.
The official Steam Machine's physical LED order is reversed by default while the Decky preview remains left to right.
Open Advanced / debug > Show debug details and choose Export configuration
JSON. SignalBar writes a readable snapshot of global settings, saved per-game
profiles, and the current game's resolved choices to
/home/deck/Documents/SignalBar-configuration.json on a standard SteamOS setup.
The panel always shows the exact path used. Exporting again replaces only that
file, and controller device IDs are never included.
In the same Debug section, Import configuration JSON opens a file picker and asks for confirmation before replacing saved global settings and per-game profiles. Unsupported or invalid files leave the existing configuration untouched. Reset to defaults asks for confirmation, clears per-game profiles, and restores the shipped defaults. Neither action deletes the exported JSON or the artwork cache; both stop a running personal timer.
- No telemetry or cloud account login. Weather city search requests and live Open-Meteo requests occur only when you use the optional Weather feature.
- No SteamOS read-only filesystem modification
- Local read-only discovery of Steam and custom-grid artwork
- Serialized and rate-limited hardware writes
- Redundant-frame suppression to reduce unnecessary LED writes
- A userspace guard that yields when Steam or another process changes the bar
SignalBar only restores a previous frame when the hardware still matches its own last verified write.
- Designed for the official Steam Machine 17-pixel
valve-ledslight bar - Requires Decky Loader on SteamOS
- CPU and GPU sensors depend on paths exposed by the hardware and SteamOS build
- Steam notifications and recording use private SteamClient callbacks that may change between Steam builds
- Achievement animations follow Steam's achievement notification
- Screenshot animations follow a newly written screenshot file
- Controller battery reporting relies on the private SteamInputManager service and varies by controller. There is no verified compatibility list for every controller and connection type yet.
- No Internet artwork fallback, audio visualizer, FPS, network, storage, Moonlight, or Sunshine provider yet
npm install
npm test
npm run build
npm run packageThe installable archive is written to out/SignalBar-v0.6.1.zip.
See ARCHITECTURE.md for provider, arbitration, guard, and hardware-rendering details. Release history is available in CHANGELOG.md.
Use Decky's plugin settings to uninstall SignalBar. Settings remain in Decky's normal plugin settings directory and can be removed separately if desired.
SignalBar is released under the BSD 3-Clause License.