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

Bar widget popups leave a stale ghost frame on screen after closing

Reported by ricardomillerjr · filed Sep 9, 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

Bar widget popups leave a stale ghost frame on screen after closingrevision 1 · captured 2026-09-28 21:23 UTC via poll

What happened

A bar plugin's popup (e.g. the weather widget) opens, then closes, but a
frozen/ghost frame of the popup content stays rendered on screen. The
underlying bar continues to update normally (the clock ticks forward in
the same screenshot region) while the popup rectangle itself stays stuck
showing stale content until the display is forcibly redrawn.

This has now happened twice with two different bar widgets:
1. The clock plugin's popup (reported to have hit the same issue previously).
2. The weather plugin's popup (screenshots attached).

Steps to reproduce

  1. Open a bar widget popup (weather widget, clicked from the bar).
  2. Close/dismiss the popup.
  3. The popup's last rendered frame remains visible on screen as a static

ghost image, even though hyprctl layers shows no corresponding live
layer surface for it — confirming it isn't a live element, just a stale
rendered frame that never got cleared/damaged.

Expected behavior

The popup's screen region should be redrawn/cleared as soon as it closes.

Workaround found

omarchy restart shell (which fully kills and relaunches the Quickshell
process) does NOT clear the ghost frame, ruling out shell/plugin state.

Forcing Hyprland to fully redraw by toggling DPMS does clear it:

hyprctl dispatch 'hl.dsp.dpms("off")'
sleep 1
hyprctl dispatch 'hl.dsp.dpms("on")'

This points to a compositor damage-tracking/redraw issue rather than
anything in the Omarchy shell/plugin config itself.

System details

  • Omarchy version: 4.0.3-1
  • Hyprland: 0.56.2 (v0.56.2, commit efb50993780079460b0cbed1363e2166a2de1d9f)
  • Quickshell: 0.3.1 (Arch Linux package)
  • Kernel: 7.2.3-arch1-3
  • GPU: NVIDIA GeForce GTX 1070 Ti (GP104), driver: nvidia (proprietary)
  • Multi-monitor setup (3 monitors: HDMI-A-1 rotated/portrait, DP-1, DP-2)

Given the NVIDIA proprietary driver + multi-monitor + rotated-display setup,
this may be an NVIDIA/Hyprland damage-tracking interaction rather than an
Omarchy-specific bug, but filing here since it manifests through the
Omarchy shell's bar widgets.

Captures

Two screenshots attached showing the weather popup ghost frame, taken 4
minutes apart — note the bar's clock has advanced from 3:28 PM to 3:32 PM
while the popup content underneath is unchanged/frozen.

View raw text
## What happened

A bar plugin's popup (e.g. the weather widget) opens, then closes, but a
frozen/ghost frame of the popup content stays rendered on screen. The
underlying bar continues to update normally (the clock ticks forward in
the same screenshot region) while the popup rectangle itself stays stuck
showing stale content until the display is forcibly redrawn.

This has now happened twice with two different bar widgets:
1. The clock plugin's popup (reported to have hit the same issue previously).
2. The weather plugin's popup (screenshots attached).

## Steps to reproduce

1. Open a bar widget popup (weather widget, clicked from the bar).
2. Close/dismiss the popup.
3. The popup's last rendered frame remains visible on screen as a static
   ghost image, even though `hyprctl layers` shows no corresponding live
   layer surface for it — confirming it isn't a live element, just a stale
   rendered frame that never got cleared/damaged.

## Expected behavior

The popup's screen region should be redrawn/cleared as soon as it closes.

## Workaround found

`omarchy restart shell` (which fully kills and relaunches the Quickshell
process) does NOT clear the ghost frame, ruling out shell/plugin state.

Forcing Hyprland to fully redraw by toggling DPMS does clear it:

```bash
hyprctl dispatch 'hl.dsp.dpms("off")'
sleep 1
hyprctl dispatch 'hl.dsp.dpms("on")'
```

This points to a compositor damage-tracking/redraw issue rather than
anything in the Omarchy shell/plugin config itself.

## System details

- Omarchy version: 4.0.3-1
- Hyprland: 0.56.2 (v0.56.2, commit efb50993780079460b0cbed1363e2166a2de1d9f)
- Quickshell: 0.3.1 (Arch Linux package)
- Kernel: 7.2.3-arch1-3
- GPU: NVIDIA GeForce GTX 1070 Ti (GP104), driver: nvidia (proprietary)
- Multi-monitor setup (3 monitors: HDMI-A-1 rotated/portrait, DP-1, DP-2)

Given the NVIDIA proprietary driver + multi-monitor + rotated-display setup,
this may be an NVIDIA/Hyprland damage-tracking interaction rather than an
Omarchy-specific bug, but filing here since it manifests through the
Omarchy shell's bar widgets.

## Captures

Two screenshots attached showing the weather popup ghost frame, taken 4
minutes apart — note the bar's clock has advanced from 3:28 PM to 3:32 PM
while the popup content underneath is unchanged/frozen.

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