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-2129GitHub issuePublicFixed

Unplugging a monitor destroys overlay surfaces until the shell restarts

Reported by shawnyeager · filed Sep 30, 2026 · open at source · 3 revisions

Decided: Duplicate — decided by agents · verified 3 days ago.

This defect is tracked under R-2159. This report describes the same defect, so it is folded under it in the inbox.

Earliest report of this defect: R-2129 (filed Sep 30, 2026).

Decided by agents · verified· Oct 9, 2026

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?
Not yet mapped to any requirement or component.
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

Unplugging a monitor destroys overlay surfaces until the shell restartsrevision 3 · captured 2026-09-30 20:49 UTC via poll

System details

Omarchy 4.0.0.r6691.g8b4eae6-1, Hyprland 0.56.2, Quickshell 0.3.1. Two outputs: the laptop panel and one external monitor.

What's wrong?

Unplugging the external monitor kills every overlay built on OverlayWindow: the menu, the volume display, the clipboard, the emoji picker, the image picker, and reminders. The shell process keeps running, and omarchy menu summon still returns ok, but hyprctl layers has no omarchy-menu or omarchy-osd surface on either output. The bar and the background come back.

After those surfaces are mapped again on the remaining screen, the first open once focus is on the other monitor paints behind the windows. The next press, already on that monitor, paints on the overlay layer. That is the same window as #13562.

This started with #13419. OverlayWindow keeps one layer surface for the life of the shell. When that surface's output goes away, Hyprland closes it. Quickshell handles zwlr_layer_surface_v1.closed by calling QWindow::close(), and because a layer shell window deletes its backing window when it becomes invisible, the overlay stays unmapped. The constant visible: true binding is not evaluated again. Per-screen windows are unaffected: their Variants rebuild them when Quickshell.screens changes. Showing the surface in the same step that moves it onto another monitor recreates it full size on the bottom layer.

What I recorded

Removing the external output logged:

monitorremoved>>DP-1
closelayer>>omarchy-background
closelayer>>omarchy-menu
closelayer>>omarchy-osd
closelayer>>omarchy-bar
openlayer>>omarchy-bar
openlayer>>omarchy-background

The external output was added back after that. openlayer>>omarchy-bar happened again. openlayer>>omarchy-menu and openlayer>>omarchy-osd did not. With both outputs connected again, layers are:

  • laptop panel: omarchy-background, omarchy-bar, and the parked 1x1 clipboard, emoji, image-selector, and reminder surfaces
  • external output: omarchy-background, omarchy-bar
  • neither output: omarchy-menu, omarchy-osd

A later unplug of the external output, with every overlay parked on it, closed the menu, OSD, clipboard, emojis, image selector, and reminders together. Only the bar and background reopened.

Expected

Unplugging a monitor, then plugging it back in, leaves every overlay mapped. The first open on the focused output is on the overlay layer, in front of the windows.

Workaround

omarchy restart shell creates the surfaces again. The next unplug of the output an overlay last opened on kills them again.

Fix

#13903 maps a closed overlay again after its output disappears, and moves the parked surface to the focused monitor before it is shown. That covers this report and #13562.

View raw text
### System details

Omarchy 4.0.0.r6691.g8b4eae6-1, Hyprland 0.56.2, Quickshell 0.3.1. Two outputs: the laptop panel and one external monitor.

### What's wrong?

Unplugging the external monitor kills every overlay built on `OverlayWindow`: the menu, the volume display, the clipboard, the emoji picker, the image picker, and reminders. The shell process keeps running, and `omarchy menu summon` still returns ok, but `hyprctl layers` has no `omarchy-menu` or `omarchy-osd` surface on either output. The bar and the background come back.

After those surfaces are mapped again on the remaining screen, the first open once focus is on the other monitor paints behind the windows. The next press, already on that monitor, paints on the overlay layer. That is the same window as #13562.

This started with #13419. `OverlayWindow` keeps one layer surface for the life of the shell. When that surface's output goes away, Hyprland closes it. Quickshell handles `zwlr_layer_surface_v1.closed` by calling `QWindow::close()`, and because a layer shell window deletes its backing window when it becomes invisible, the overlay stays unmapped. The constant `visible: true` binding is not evaluated again. Per-screen windows are unaffected: their `Variants` rebuild them when `Quickshell.screens` changes. Showing the surface in the same step that moves it onto another monitor recreates it full size on the bottom layer.

### What I recorded

Removing the external output logged:

```
monitorremoved>>DP-1
closelayer>>omarchy-background
closelayer>>omarchy-menu
closelayer>>omarchy-osd
closelayer>>omarchy-bar
openlayer>>omarchy-bar
openlayer>>omarchy-background
```

The external output was added back after that. `openlayer>>omarchy-bar` happened again. `openlayer>>omarchy-menu` and `openlayer>>omarchy-osd` did not. With both outputs connected again, layers are:

- laptop panel: `omarchy-background`, `omarchy-bar`, and the parked 1x1 clipboard, emoji, image-selector, and reminder surfaces
- external output: `omarchy-background`, `omarchy-bar`
- neither output: `omarchy-menu`, `omarchy-osd`

A later unplug of the external output, with every overlay parked on it, closed the menu, OSD, clipboard, emojis, image selector, and reminders together. Only the bar and background reopened.

### Expected

Unplugging a monitor, then plugging it back in, leaves every overlay mapped. The first open on the focused output is on the overlay layer, in front of the windows.

### Workaround

`omarchy restart shell` creates the surfaces again. The next unplug of the output an overlay last opened on kills them again.

### Fix

#13903 maps a closed overlay again after its output disappears, and moves the parked surface to the focused monitor before it is shown. That covers this report and #13562.

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

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.

  • DuplicateR-2159Decided by agents · verified · 2026-10-09 09:12 UTC