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

Bar shows a checkered overlay after an interrupted bar-move gesture — omarchy-bar-move-ghost layer stays stuck open

Reported by edvaldo4d5 · filed Aug 17, 2026 · open at source

Decided: Out of scope — decided by agents · verified 5 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

Bar shows a checkered overlay after an interrupted bar-move gesture — omarchy-bar-move-ghost layer stays stuck openrevision 1 · captured 2026-09-28 21:29 UTC via poll

System details

Hardware: - Laptop: Lenovo IdeaPad 1 15IAU7 (product 82VY, board LNVNB161216, BIOS JKCN52WW) - CPU: 12th Gen Intel Core i3-1215U (2 P-cores + 4 E-cores / 8 threads, up to 4.4 GHz) - GPU: Intel UHD Graphics (Alder Lake-UP3 GT1, 8086:46b3) — driver i915 (xe also loaded) - RAM: 11 GiB total (12 GB module), no swap usage (22 GiB swap available) - Storage: SK Hynix HFS256GEJ4X112N 256 GB NVMe (root on btrfs, /dev/mapper/root) + a 117 GB external drive - Display: eDP-1, BOE 0x0B42, 1366x768 @ 60 Hz, scale 1, no VRR - Audio: Intel Alder Lake PCH-P HD Audio - Networking: Intel Alder Lake-P PCH CNVi WiFi + wired via USB (enp0s20f0u1c2) - Session: Wayland (wayland-1), Hyprland 0.56.2

What's wrong?

Bug: "omarchy-bar-move-ghost" layer gets stuck open and the bar looks "checkered"
System
· Omarchy 4.0.0-1
· Hyprland 0.56.2-1 (commit efb50993780079460b0cbed1363e2166a2de1d9f)
· quickshell-git 0.3.0.r20.g28771c7-1
· Qt 6.11.1 (qt6-declarative 6.11.1-3)
· CPU: 12th Gen Intel Core i3-1215U
· GPU: Intel Alder Lake-UP3 GT1 [UHD Graphics] (8086:46b3)
· Monitor: eDP-1, 1366x768 @ 60 Hz, scale 1
· Theme: Tokyo Night
· Shell config: ~/.config/omarchy/shell.json (bar at top, transparent: false)
What happens
The shell bar (namespace omarchy-bar) starts to look "checkered"/overlaid: as the mouse moves near the screen edges, semi-transparent strips (slabs) appear on top of the bar widgets.
Direct cause: the overlay layer omarchy-bar-move-ghost gets stuck open, mapped across the whole screen (xywh 0 0 1366 768, alpha 1), and never closes. This is the "ghost" of the bar-move mode (omarchy bar move) and should only exist during the gesture.
Why (root cause)
In /usr/share/omarchy/shell/plugins/bar/Bar.qml:
1. CenterGestureArea (line ~1392) starts bar-move mode via a 200 ms press-and-hold (pressAndHoldInterval: 200) → startDrag() → beginBarMove().
2. beginBarMove() (line ~261) sets barMoveActive = true and barMoveCandidate = position.
3. BarMoveGhostPanel (line ~1214) is a PanelWindow with WlrLayershell.namespace: "omarchy-bar-move-ghost", Overlay layer, anchors filling the whole screen, and visible: root.barMoveActive && screenMatches (line 1225).
4. The 4 edge slabs get opacity: root.barMoveCandidate === modelData ? 0.7 : 0 (line 1263) — when the cursor is near an edge, the matching slab visually overlaps the real bar.
5. The gesture should be ended by onReleased → finishBarMove() → clearBarMove() or by onCanceled → clearBarMove(). If neither fires — e.g. the gesture is started during a hot-reload of the theme/shell (the shell watches colors.toml/shell.toml and reloads) and the release event is lost — barMoveActive stays true and the ghost layer remains stuck.
Note: in my case the problem appeared right after a system update (omarchy update, 09:15) that restarted the shell, and a theme re-apply at 09:48. The shell log recorded openlayer>>omarchy-bar-move-ghost with no matching closelayer.
Reproduction
1. Start a bar-move gesture: press and hold for ~200 ms on the bar's center area (or trigger bar-move mode) and drag the mouse.
2. Interrupt the gesture so the release event is never delivered — in my case this happened during a shell/theme reload (hot-reload of shell.toml/colors.toml) while the gesture was in progress.
3. Observe in hyprctl layers the omarchy-bar-move-ghost layer mapped full-screen, and the "checkered" pattern on the bar when moving the mouse near the edges.
Evidence
· hyprctl layers shows:
· Layer level 3 (overlay):
Layer 55eac79665c0: xywh: 0 0 1366 768, a: 1, namespace: omarchy-bar-move-ghost, pid: 4630

· Shell log (/run/user/1000/quickshell/by-id/<id>/log.qslog):
· Received event: "openlayer>>omarchy-bar-move-ghost" parsed as "openlayer" "omarchy-bar-move-ghost"

·
with no matching closelayer>>omarchy-bar-move-ghost.
· The shell logged no errors/crashes; fonts and theme are intact (not an icon-font or GPU issue).
Suggested fix
· Make sure barMoveActive is cleared on more exit paths: e.g. a fallback in BarMoveGhostPanel/CenterGestureArea when the shell reloads (Component.onDestruction), or a safety timeout that calls clearBarMove() if the gesture is not completed within X seconds.
· Consider treating a shell hot-reload as a cancellation of the active gesture (onCanceled/reload signal → clearBarMove()).
Workaround (until fixed)
omarchy restart shell

Or, alternatively, press and release the bar again to complete the gesture and clear the state.

View raw text
### System details

**Hardware:** - Laptop: Lenovo IdeaPad 1 15IAU7 (product 82VY, board LNVNB161216, BIOS JKCN52WW) - CPU: 12th Gen Intel Core i3-1215U (2 P-cores + 4 E-cores / 8 threads, up to 4.4 GHz) - GPU: Intel UHD Graphics (Alder Lake-UP3 GT1, 8086:46b3) — driver i915 (xe also loaded) - RAM: 11 GiB total (12 GB module), no swap usage (22 GiB swap available) - Storage: SK Hynix HFS256GEJ4X112N 256 GB NVMe (root on btrfs, /dev/mapper/root) + a 117 GB external drive - Display: eDP-1, BOE 0x0B42, 1366x768 @ 60 Hz, scale 1, no VRR - Audio: Intel Alder Lake PCH-P HD Audio - Networking: Intel Alder Lake-P PCH CNVi WiFi + wired via USB (enp0s20f0u1c2) - Session: Wayland (wayland-1), Hyprland 0.56.2

### What's wrong?

Bug: "omarchy-bar-move-ghost" layer gets stuck open and the bar looks "checkered"
System
·	Omarchy 4.0.0-1
·	Hyprland 0.56.2-1 (commit efb50993780079460b0cbed1363e2166a2de1d9f)
·	quickshell-git 0.3.0.r20.g28771c7-1
·	Qt 6.11.1 (qt6-declarative 6.11.1-3)
·	CPU: 12th Gen Intel Core i3-1215U
·	GPU: Intel Alder Lake-UP3 GT1 [UHD Graphics] (8086:46b3)
·	Monitor: eDP-1, 1366x768 @ 60 Hz, scale 1
·	Theme: Tokyo Night
·	Shell config: ~/.config/omarchy/shell.json (bar at top, transparent: false)
What happens
The shell bar (namespace omarchy-bar) starts to look "checkered"/overlaid: as the mouse moves near the screen edges, semi-transparent strips (slabs) appear on top of the bar widgets.
Direct cause: the overlay layer omarchy-bar-move-ghost gets stuck open, mapped across the whole screen (xywh 0 0 1366 768, alpha 1), and never closes. This is the "ghost" of the bar-move mode (omarchy bar move) and should only exist during the gesture.
Why (root cause)
In /usr/share/omarchy/shell/plugins/bar/Bar.qml:
1.	CenterGestureArea (line ~1392) starts bar-move mode via a 200 ms press-and-hold (pressAndHoldInterval: 200) → startDrag() → beginBarMove().
2.	beginBarMove() (line ~261) sets barMoveActive = true and barMoveCandidate = position.
3.	BarMoveGhostPanel (line ~1214) is a PanelWindow with WlrLayershell.namespace: "omarchy-bar-move-ghost", Overlay layer, anchors filling the whole screen, and visible: root.barMoveActive && screenMatches (line 1225).
4.	The 4 edge slabs get opacity: root.barMoveCandidate === modelData ? 0.7 : 0 (line 1263) — when the cursor is near an edge, the matching slab visually overlaps the real bar.
5.	The gesture should be ended by onReleased → finishBarMove() → clearBarMove() or by onCanceled → clearBarMove(). If neither fires — e.g. the gesture is started during a hot-reload of the theme/shell (the shell watches colors.toml/shell.toml and reloads) and the release event is lost — barMoveActive stays true and the ghost layer remains stuck.
Note: in my case the problem appeared right after a system update (omarchy update, 09:15) that restarted the shell, and a theme re-apply at 09:48. The shell log recorded openlayer>>omarchy-bar-move-ghost with no matching closelayer.
Reproduction
1.	Start a bar-move gesture: press and hold for ~200 ms on the bar's center area (or trigger bar-move mode) and drag the mouse.
2.	Interrupt the gesture so the release event is never delivered — in my case this happened during a shell/theme reload (hot-reload of shell.toml/colors.toml) while the gesture was in progress.
3.	Observe in hyprctl layers the omarchy-bar-move-ghost layer mapped full-screen, and the "checkered" pattern on the bar when moving the mouse near the edges.
Evidence
·	hyprctl layers shows:
·	Layer level 3 (overlay):
    Layer 55eac79665c0: xywh: 0 0 1366 768, a: 1, namespace: omarchy-bar-move-ghost, pid: 4630

·	Shell log (/run/user/1000/quickshell/by-id/<id>/log.qslog):
·	Received event: "openlayer>>omarchy-bar-move-ghost" parsed as "openlayer" "omarchy-bar-move-ghost"

·	
with no matching closelayer>>omarchy-bar-move-ghost.
·	The shell logged no errors/crashes; fonts and theme are intact (not an icon-font or GPU issue).
Suggested fix
·	Make sure barMoveActive is cleared on more exit paths: e.g. a fallback in BarMoveGhostPanel/CenterGestureArea when the shell reloads (Component.onDestruction), or a safety timeout that calls clearBarMove() if the gesture is not completed within X seconds.
·	Consider treating a shell hot-reload as a cancellation of the active gesture (onCanceled/reload signal → clearBarMove()).
Workaround (until fixed)
omarchy restart shell

Or, alternatively, press and release the bar again to complete the gesture and clear the state.

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 04:35 UTC