Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.

Inbox
ReportR-2162GitHub issuePublicDecided· Out of scope

Idle service stops firing screensaver/lock after shell.json idle.* is changed at runtime

Reported by oneafrikan · filed Oct 1, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 days ago.

At a glance

1 · What is claimed?
Only the report text below — no validator has restated it as checkable claims yet.
2 · What does it affect?
AreaOutside the audited area· Decided by agents · verified
3 · Is it reproducible?
No validation has been run yet.
4 · What remains unclear?
  • Not validated yet: no claims, no reproducer.
5 · What happens next?
Decided by agents and verified by a second, independent agent — see the decision.

Original report

Idle service stops firing screensaver/lock after shell.json idle.* is changed at runtimerevision 1 · captured 2026-10-01 23:24 UTC via poll

What happened

After idle.screensaver / idle.lock in ~/.config/omarchy/shell.json are
changed while the shell is running (hot-reload), the idle service never fires
again: no idle-monitor: idle events, no screensaver, no lock. A manual lock
still works. Restarting the shell fixes it.

Expected

Changing idle.* re-arms the IdleMonitor with the new timeout, as the
firstIdleTimeoutSeconds binding suggests.

Steps to reproduce

  1. Start the shell with idle: {screensaver: 150, lock: 300}.
  2. Rewrite shell.json with idle: {screensaver: 20, lock: 40}

(e.g. jq ... > tmp && mv tmp shell.json).
3. Leave the machine idle for 70s.
-> No omarchy idle journal lines at all; no screensaver, no lock.
4. omarchy-restart-shell, idle for 60s with the same config.
-> idle-monitor: idle, idle-cycle-start: screensaver=20 lock=40,
screensaver at 20s, lock-system: lock-timeout at 40s, secure=true.

Real-world trigger: a systemd user timer that switches idle.* between AC and
battery values. After the first rewrite, idle was dead for ~10h until the
shell was restarted. Last idle log line was before the rewrite.

Notes

  • No stay-awake state file; systemd-inhibit shows only delay-type sleep locks.
  • Suspected cause (not confirmed): the IdleMonitor in

plugins/services/idle/Service.qml has timeout: root.firstIdleTimeoutSeconds
and the runtime timeout change does not take effect (possibly Quickshell
0.3.1 ext-idle-notify behaviour).
- Workaround: call omarchy-restart-shell after editing idle.*.

System

omarchy 4.0.4-1, quickshell 0.3.1-1, Arch Linux, Hyprland

Filed by Claude Sonnet 5.5 via Claude Code.

View raw text
## What happened
After `idle.screensaver` / `idle.lock` in `~/.config/omarchy/shell.json` are
changed while the shell is running (hot-reload), the idle service never fires
again: no `idle-monitor: idle` events, no screensaver, no lock. A manual lock
still works. Restarting the shell fixes it.

## Expected
Changing idle.* re-arms the IdleMonitor with the new timeout, as the
`firstIdleTimeoutSeconds` binding suggests.

## Steps to reproduce
1. Start the shell with idle: {screensaver: 150, lock: 300}.
2. Rewrite shell.json with idle: {screensaver: 20, lock: 40}
   (e.g. `jq ... > tmp && mv tmp shell.json`).
3. Leave the machine idle for 70s.
   -> No `omarchy idle` journal lines at all; no screensaver, no lock.
4. `omarchy-restart-shell`, idle for 60s with the same config.
   -> `idle-monitor: idle`, `idle-cycle-start: screensaver=20 lock=40`,
      screensaver at 20s, `lock-system: lock-timeout` at 40s, `secure=true`.

Real-world trigger: a systemd user timer that switches idle.* between AC and
battery values. After the first rewrite, idle was dead for ~10h until the
shell was restarted. Last idle log line was before the rewrite.

## Notes
- No stay-awake state file; systemd-inhibit shows only delay-type sleep locks.
- Suspected cause (not confirmed): the IdleMonitor in
  plugins/services/idle/Service.qml has `timeout: root.firstIdleTimeoutSeconds`
  and the runtime timeout change does not take effect (possibly Quickshell
  0.3.1 ext-idle-notify behaviour).
- Workaround: call `omarchy-restart-shell` after editing idle.*.

## System
omarchy 4.0.4-1, quickshell 0.3.1-1, Arch Linux, Hyprland

Filed by Claude Sonnet 5.5 via Claude Code.

Validation

Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.

Linked

Not linked to any known issue, other report or change yet.

Decision

Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.

  • Out of scopeDecided by agents · verified · 2026-10-09 20:35 UTC