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-214GitHub issuePublicDecided· Out of scope

Idle screensaver/lock never triggers: Quickshell IdleMonitor never reports idle

Reported by baselope-2017 · filed Sep 22, 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 screensaver/lock never triggers: Quickshell IdleMonitor never reports idlerevision 1 · captured 2026-09-28 21:23 UTC via poll

Description

The idle-based screensaver/lock feature (idle.screensaver / idle.lock in ~/.config/omarchy/shell.json, powered by the omarchy.idle Quickshell plugin) never triggers. The plugin's IdleMonitor.isIdle stays false indefinitely no matter how long the system sits with zero input.

Steps to reproduce

  1. Set idle.screensaver to a short value (e.g. 180) in ~/.config/omarchy/shell.json.
  2. Let it hot-reload (or omarchy restart shell).
  3. Don't touch mouse/keyboard at all.
  4. Wait past the configured timeout.

Expected: omarchy-shell idle status eventually reports "idle": true and the screensaver/lock command runs.

Actual: idle stays false indefinitely. Verified across multiple independent runs (6+ minutes at a 180s/300s config with no state change ever logged).

What was ruled out

  • Config: omarchy-shell idle status correctly reflects the configured screensaver/lock seconds, so the value is read fine.
  • Stay-awake: plugin reports enabled:true, stayAwake:false throughout.
  • Hyprland idle-inhibitors: no window reports inhibitingIdle:true; only the bar/background layer-shell surfaces exist, no others.
  • systemd-inhibit: only unrelated sleep-mode delay inhibitors present (NetworkManager, UPower, Omarchy's own lock-before-suspend), nothing idle-mode.
  • `respectInhibitors: true` logic: setting it to false in the plugin made no difference.
  • Interfering app: fully stopped a background dictation daemon that injects synthetic key events via wtype on Wayland — no change.
  • Real input: cursor position was static across every test window.
  • A specific customization: reproduces identically on a plugin that is byte-for-byte identical to the stock omarchy.idle plugin's IdleMonitor/timer wiring (only cosmetic sound/dispatch-script lines differ, confirmed via diff).
  • The Wayland protocol itself: installed hypridle and pointed it at a 20-second ext_idle_notifier_v1 listener with no other changes — it fired correctly, exactly on time:
  [LOG] Idled: rule ...
  IDLE FIRED at 23:34:54   (20s after start, no input)

This isolates the bug specifically to Quickshell's IdleMonitor QML type (Quickshell.Wayland) — the compositor and the raw protocol work fine, but Quickshell's wrapper around it never reports idle for the omarchy-shell process.

System details

  • Omarchy: 4.0.1-1
  • Hyprland: 0.56.2
  • Quickshell: 0.3.1-1
  • Kernel: 7.1.9-arch1-2
  • GPU: NVIDIA GeForce GTX 750 Ti (proprietary nvidia driver)
  • CPU: Intel Core i7-4790K

Expected behavior

idle.screensaver / idle.lock should trigger the configured screensaver/lock command after that many seconds of no input, as documented.

View raw text
## Description
The idle-based screensaver/lock feature (`idle.screensaver` / `idle.lock` in `~/.config/omarchy/shell.json`, powered by the `omarchy.idle` Quickshell plugin) never triggers. The plugin's `IdleMonitor.isIdle` stays `false` indefinitely no matter how long the system sits with zero input.

## Steps to reproduce
1. Set `idle.screensaver` to a short value (e.g. `180`) in `~/.config/omarchy/shell.json`.
2. Let it hot-reload (or `omarchy restart shell`).
3. Don't touch mouse/keyboard at all.
4. Wait past the configured timeout.

**Expected:** `omarchy-shell idle status` eventually reports `"idle": true` and the screensaver/lock command runs.

**Actual:** `idle` stays `false` indefinitely. Verified across multiple independent runs (6+ minutes at a 180s/300s config with no state change ever logged).

## What was ruled out
- **Config**: `omarchy-shell idle status` correctly reflects the configured `screensaver`/`lock` seconds, so the value is read fine.
- **Stay-awake**: plugin reports `enabled:true`, `stayAwake:false` throughout.
- **Hyprland idle-inhibitors**: no window reports `inhibitingIdle:true`; only the bar/background layer-shell surfaces exist, no others.
- **systemd-inhibit**: only unrelated `sleep`-mode delay inhibitors present (NetworkManager, UPower, Omarchy's own lock-before-suspend), nothing idle-mode.
- **`respectInhibitors: true` logic**: setting it to `false` in the plugin made no difference.
- **Interfering app**: fully stopped a background dictation daemon that injects synthetic key events via `wtype` on Wayland — no change.
- **Real input**: cursor position was static across every test window.
- **A specific customization**: reproduces identically on a plugin that is byte-for-byte identical to the stock `omarchy.idle` plugin's `IdleMonitor`/timer wiring (only cosmetic sound/dispatch-script lines differ, confirmed via `diff`).
- **The Wayland protocol itself**: installed `hypridle` and pointed it at a 20-second `ext_idle_notifier_v1` listener with no other changes — it fired correctly, exactly on time:
  ```
  [LOG] Idled: rule ...
  IDLE FIRED at 23:34:54   (20s after start, no input)
  ```
  This isolates the bug specifically to Quickshell's `IdleMonitor` QML type (`Quickshell.Wayland`) — the compositor and the raw protocol work fine, but Quickshell's wrapper around it never reports idle for the `omarchy-shell` process.

## System details
- Omarchy: 4.0.1-1
- Hyprland: 0.56.2
- Quickshell: 0.3.1-1
- Kernel: 7.1.9-arch1-2
- GPU: NVIDIA GeForce GTX 750 Ti (proprietary `nvidia` driver)
- CPU: Intel Core i7-4790K

## Expected behavior
`idle.screensaver` / `idle.lock` should trigger the configured screensaver/lock command after that many seconds of no input, as documented.

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 02:28 UTC