Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA 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.
Screensaver clears the workspace's fullscreen window and never restores it
Reported by djhume · filed Sep 8, 2026 · open at source
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
What happens
If a window is fullscreen (SUPER+F) or maximized (SUPER+ALT+F) when the
screensaver starts, dismissing the screensaver drops you back to the tiled
layout. The window is never returned to fullscreen.
Why
The screensaver is an ordinary window, anddefault/hypr/apps/system.lua:35 gives it a fullscreen rule:
-- Fullscreen screensaver.
o.window("org.omarchy.screensaver", { fullscreen = true })Hyprland allows exactly one fullscreen window per workspace, so mapping the
screensaver silently clears whatever was fullscreen there, and nothing puts it
back when the screensaver closes. omarchy-launch-screensaver opens one window
per monitor, so on a multi-monitor setup every screen's workspace is affected.
Steps to reproduce
- Focus any window and press
SUPER+F. - Run
omarchy-launch-screensaver force(or just idle past
idle.screensaver).
3. Press a key to dismiss the screensaver.
4. The window is tiled again.
Observed
hyprctl clients fullscreen / fullscreenClient for the affected window,
before the screensaver, while it is up, and after dismissing it:
| Mode | before | screensaver up | after |
|---|---|---|---|
SUPER+F fullscreen | 2,2 | 0,0 | 0,0 |
SUPER+ALT+F maximized | 1,1 | 0,0 | 0,0 |
SUPER+CTRL+F tiled fullscreen | 0,2 | 0,2 | 0,2 |
Tiled fullscreen is unaffected, since it sets no internal fullscreen state.
The window rule alone is enough to trigger it — no need for the real
screensaver:
foot --app-id=org.omarchy.screensaver -e sleep 60Expected
The fullscreen (or maximized) window is fullscreen again once the screensaver
closes.
Notes towards a fix
Three things I ruled out while narrowing this down, in case they save someone
time:
misc:exit_window_retains_fullscreen = trueover-applies. It makes the next
window fullscreen every time the screensaver closes, including when nothing
was fullscreen to begin with.
- Replacing the rule with a floating, monitor-sized window does preserve the
state — a window created over a fullscreen one is rendered above it — but a
non-fullscreen window no longer hides the bar, so the clock and tray end up
drawn on top of the screensaver.
- A listener that reacts to the screensaver's openwindow event is too late:
the window is already back to fullscreen: 0 by the time the event is
emitted. The state has to be recorded before the screensaver is launched —
in omarchy-launch-screensaver, or in the idle service around
launchScreensaver() and the screensaver-dismissed path.
System
- Omarchy 4.0.2-1
- Hyprland 0.56.2
- Kernel 7.1.9-arch1-2, Arch
- Dell XPS 14 9440, Intel Core Ultra 7 155H
- Intel Meteor Lake-P (i915) + NVIDIA RTX 4050 Mobile (nvidia 610.57.04)
- Reproduced single-monitor on eDP-1
The hardware shouldn't matter here — this is compositor window-state logic, not
anything driver-specific.
Diagnosed with Claude Code, which also worked out the three non-fixes above.
View raw text
## What happens
If a window is fullscreen (`SUPER+F`) or maximized (`SUPER+ALT+F`) when the
screensaver starts, dismissing the screensaver drops you back to the tiled
layout. The window is never returned to fullscreen.
## Why
The screensaver is an ordinary window, and
`default/hypr/apps/system.lua:35` gives it a fullscreen rule:
```lua
-- Fullscreen screensaver.
o.window("org.omarchy.screensaver", { fullscreen = true })
```
Hyprland allows exactly one fullscreen window per workspace, so mapping the
screensaver silently clears whatever was fullscreen there, and nothing puts it
back when the screensaver closes. `omarchy-launch-screensaver` opens one window
per monitor, so on a multi-monitor setup every screen's workspace is affected.
## Steps to reproduce
1. Focus any window and press `SUPER+F`.
2. Run `omarchy-launch-screensaver force` (or just idle past
`idle.screensaver`).
3. Press a key to dismiss the screensaver.
4. The window is tiled again.
## Observed
`hyprctl clients` `fullscreen` / `fullscreenClient` for the affected window,
before the screensaver, while it is up, and after dismissing it:
| Mode | before | screensaver up | after |
|---|---|---|---|
| `SUPER+F` fullscreen | `2,2` | `0,0` | `0,0` |
| `SUPER+ALT+F` maximized | `1,1` | `0,0` | `0,0` |
| `SUPER+CTRL+F` tiled fullscreen | `0,2` | `0,2` | `0,2` |
Tiled fullscreen is unaffected, since it sets no internal fullscreen state.
The window rule alone is enough to trigger it — no need for the real
screensaver:
```bash
foot --app-id=org.omarchy.screensaver -e sleep 60
```
## Expected
The fullscreen (or maximized) window is fullscreen again once the screensaver
closes.
## Notes towards a fix
Three things I ruled out while narrowing this down, in case they save someone
time:
- `misc:exit_window_retains_fullscreen = true` over-applies. It makes the next
window fullscreen every time the screensaver closes, including when nothing
was fullscreen to begin with.
- Replacing the rule with a floating, monitor-sized window does preserve the
state — a window created over a fullscreen one is rendered above it — but a
non-fullscreen window no longer hides the bar, so the clock and tray end up
drawn on top of the screensaver.
- A listener that reacts to the screensaver's `openwindow` event is too late:
the window is already back to `fullscreen: 0` by the time the event is
emitted. The state has to be recorded *before* the screensaver is launched —
in `omarchy-launch-screensaver`, or in the idle service around
`launchScreensaver()` and the `screensaver-dismissed` path.
## System
- Omarchy 4.0.2-1
- Hyprland 0.56.2
- Kernel 7.1.9-arch1-2, Arch
- Dell XPS 14 9440, Intel Core Ultra 7 155H
- Intel Meteor Lake-P (i915) + NVIDIA RTX 4050 Mobile (nvidia 610.57.04)
- Reproduced single-monitor on eDP-1
The hardware shouldn't matter here — this is compositor window-state logic, not
anything driver-specific.
---
Diagnosed with Claude Code, which also worked out the three non-fixes above.
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 11:09 UTC