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

Screensaver clears the workspace's fullscreen window and never restores it

Reported by djhume · filed Sep 8, 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

Screensaver clears the workspace's fullscreen window and never restores itrevision 1 · captured 2026-09-28 21:23 UTC via poll

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:

-- 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:

Modebeforescreensaver upafter
SUPER+F fullscreen2,20,00,0
SUPER+ALT+F maximized1,10,00,0
SUPER+CTRL+F tiled fullscreen0,20,20,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 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.

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