Omahub
← All plugins
B

Idle ladder

by Brad

Fade the backlight before the idle lock, and suspend shortly after it on battery

Security review

No obvious issues detected

Deterministic scan — not a security guarantee

None
Risk level
None
Analyzed commit
b67b94d
Scanned
1 month ago

No potentially dangerous behavior detected in the analyzed commit.

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

Language-model assessment · ~deepseek/deepseek-v4-flash-latest — advisory only

Low
AI risk level
Low
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
b67b94d
Reviewed
1 month ago

The plugin is a straightforward idle-management service that fades the backlight and optionally suspends the machine, using brightnessctl and systemctl as documented. No obfuscation, network calls, persistence, or destructive behavior was found; the deterministic scan found no issues and the code matches its description.

  • The plugin executes system commands (brightnessctl, systemctl suspend, omarchy-system-lock) but only in response to idle timeouts and with user-configurable timings, which is the intended functionality.
  • The idle-dim script writes PID and state files to /tmp, which is a shared directory; on a multi-user system this could theoretically be tampered with, but on a typical single-user desktop this is not a practical risk.
How this check works

This review combines the deterministic scan (the rule-based results above) with an independent look at the plugin's code by a language model. The model reads a trimmed sample of the repository's files, the manifest, and the README, then gives a plain-language risk level and a recommendation: install (no notable danger), review (look closer first), or avoid (clearly dangerous).

It runs on the same analyzed commit as the deterministic scan and is strictly advisory — it is not a security guarantee and never blocks a plugin by itself. A human moderator still reviews plugins before they are listed.

AI advisory only — automated analysis, not a security guarantee.

Install
$ omarchy plugin add https://github.com/bnrobinson93/omarchy-idle-ladder --enable
System #quickshell #power-management

idle-ladder

An Omarchy shell plugin that adds the two rungs Omarchy's idle service does not have: the backlight fades as a warning before the idle lock, and the machine suspends a while after it.

Upstream's ladder is two rungs — screensaver and lock — and it treats a laptop on battery exactly like a desktop on mains. This plugin adds a rung at each end, and every timing can differ by power source.

  fade     lock - fadeLead      the backlight walks down; any activity restores it
  lock     idle.lock            upstream's, unless `lock` moves it earlier for this power source
  suspend  lock + suspendAfter  systemctl suspend

Install

omarchy plugin add https://github.com/bnrobinson93/omarchy-idle-ladder.git
omarchy plugin enable idle-ladder

Updates come from omarchy plugin update idle-ladder. The plugin is a service — it adds nothing to the bar.

It needs brightnessctl for the fade rung; Omarchy already installs it.

Configuration

Settings live on the plugin's own entry in ~/.config/omarchy/shell.json, the same place omarchy.clock takes its format from. Edits hot-reload with the rest of the shell config. Every key is optional.

{
  "plugins": [
    {
      "id": "idle-ladder",
      "ac": { "fadeLead": 5, "suspendAfter": false },
      "battery": { "fadeLead": 120, "lock": 300, "suspendAfter": 120 }
    }
  ]
}
Key Default (ac) Default (battery) What it does
fadeLead 5 120 Seconds before the lock that the backlight starts fading. The fade itself takes about three seconds whatever the lead is, then holds the backlight low until the lock or an activity restore.
lock upstream's upstream's Seconds of idle before the screen locks, for this power source only.
suspendAfter off 120 Seconds after the lock before the machine suspends.

Values are seconds. false or 0 switches a rung off; omitting a key leaves the default in place.

The lock key only moves the lock earlier

The lock rung belongs to Omarchy's own idle service, which reads a single idle.lock for both power sources. This plugin can beat that timer to it — locking sooner on battery, say — but it cannot delay a lock it does not own. A lock value at or past idle.lock is ignored, with a warning in the shell log. Set the later of your two lock times as idle.lock, and the earlier one here:

{
  "idle": { "screensaver": 300, "lock": 900 },
  "plugins": [
    { "id": "idle-ladder", "battery": { "lock": 300 } }
  ]
}

That locks after 15 minutes plugged in and after 5 minutes on battery.

Suspending on AC

Off by default, since a plugged-in machine usually has a reason to stay up. Turn it on the same way as anywhere else:

{ "id": "idle-ladder", "ac": { "suspendAfter": 600 } }

What it respects

  • stay-awake — Omarchy's stay-awake indicator disables upstream's whole idle cycle, and it stops the fade, the early lock, and the suspend here too.
  • suspend-off — the toggle that hides Suspend from the Omarchy menu also holds this plugin's suspend rung back.
  • Idle inhibitors — every rung is registered with respectInhibitors, so a video playing full screen keeps the ladder from starting.

Checking what it is doing

Each rung narrates itself into the shell log next to upstream's idle service:

journalctl --user -f | grep idle-ladder

At startup and on any config or power-source change it logs the whole ladder:

idle-ladder: fade at 780s, lock at 900s, suspend off (ac)
idle-ladder: fade at 180s, lock at 300s (ours), suspend at 420s (battery)

Editing plugin files in ~/.config/omarchy/plugins/idle-ladder/ needs omarchy restart shell to take effect — the shell logs a reload on save but keeps running the code it loaded at install time. Config edits in shell.json do hot-reload.

Remove

omarchy plugin remove idle-ladder

That disables the service, drops its entry from ~/.config/omarchy/shell.json, and deletes the plugin directory. Nothing is left behind elsewhere: the ladder keeps no state of its own, and the lock reverts to idle.lock for both power sources. Removing it during a fade is the one case worth knowing about: the fade has no teardown hook, so the backlight stays where it was left. idle-dim saves the old level with brightnessctl -s, so brightnessctl -r brings it back.

License and dependencies

MIT — see LICENSE.

Dependency Required Why
Omarchy 4 (Quattro) with Quickshell yes the shell that hosts the plugin
brightnessctl for the fade rung walks the backlight down and restores it; Omarchy already installs it
systemctl for the suspend rung systemctl suspend, from systemd

Nothing is vendored, nothing is compiled, and no network call is made.