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.
omarchy-hyprland-window-pop resizes unconditionally after a float toggle, rewriting the dwindle split when run on an already-floating window
Reported by vltic · filed Aug 22, 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
System details
Omarchy 4.0.0-1 (Quattro), Hyprland 0.56.2, Xwayland 24.1.13, Linux 7.1.8-arch1-3
AMD Ryzen 7 9800X3D, NVIDIA RTX 4070 Ti (AD104)
Single monitor, HDMI-A-1 [email protected], scale = 1, layout dwindle
What's wrong?
omarchy-hyprland-window-pop (bound to SUPER + O, "Pop window out (float & pin)")
toggles floating but resizes unconditionally. When it runs on a window that was
already floating, the toggle tiles the window, and the follow-up 1300x900 resize is
then applied to a tiled window — where an absolute pixel resize rewrites the dwindle
split ratio instead of setting a size. The result is a mangled workspace layout.
This is reachable from stock defaults, because Omarchy itself ships Steam as a
floating window (default/hypr/apps/steam.lua:1):
o.window("steam", { float = true, idle_inhibit = "fullscreen" })So on a default install, the first SUPER + O pressed on Steam does not pop it
out — it tiles it and distorts the layout. Subsequent presses behave correctly,
because by then the window is tiled, which is why this looks like a once-per-boot
glitch.
Steps to reproduce
- Default Omarchy 4.0.0 install,
dwindle, single monitor. - Open a terminal so the workspace has one tiled window.
- Launch Steam. It opens floating at 1100x700, per the packaged rule above.
- Focus the Steam window and press
SUPER + Oonce.
Expected
Either pop the window out to floating 1300x900 (the documented intent —omarchy:summary=Toggle to pop-out a tile to stay fixed on a display basis),
or tile it at the layout's normal share. Not a rewritten split ratio.
Actual
Steam becomes tiled at 3782x2110 — 74% of the display width — and the
neighbouring terminal is crushed to 1300px wide. The 1300 intended as the
popped window's width leaks into the split boundary instead.
Measured with hyprctl clients -j immediately before and after a single press:
before: steam floating=True size=[1100, 700] at=[2010, 743]
after: steam floating=False size=[3782, 2110] at=[1326, 38]
foot floating=False size=[1300, 2110]Cause
In omarchy-hyprland-window-pop, the elif branch assumes the toggle floats the
window, but never checks:
elif [[ -n $addr ]]; then
hypr_dispatch "hl.dsp.window.float({ window = \"$window\", action = \"toggle\" })" togglefloating "$window"
hypr_dispatch "hl.dsp.window.resize({ window = \"$window\", x = $width, y = $height })" resizeactive exact "$width" "$height" "$window"The pinned == "true" branch handles un-popping, but a window that is floating and
not pinned — Steam's launch state — falls through to elif and gets the pop
treatment applied backwards.
Suggested fix
hyprctl activewindow -j already exposes floating, so the state is available
without an extra query. Gate the pop path on the window actually having been tiled:
floating=$(echo "$active" | jq ".floating")
...
elif [[ $floating == "true" ]]; then
# Already floating and not popped: just tile it, no resize/center/pin.
hypr_dispatch "hl.dsp.window.float({ window = \"$window\", action = \"toggle\" })" togglefloating "$window"
elif [[ -n $addr ]]; then
# existing pop-out path, unchangedAlternatively, gate on the pop tag rather than pinned, so the script's own
notion of "is this window popped" stops depending on pin state.
Notes
Same script as #7160 (pop-out loses centering across monitors) and #5268 (pop-out
draws over the screensaver), but a distinct bug.
View raw text
### System details Omarchy 4.0.0-1 (Quattro), Hyprland 0.56.2, Xwayland 24.1.13, Linux 7.1.8-arch1-3 AMD Ryzen 7 9800X3D, NVIDIA RTX 4070 Ti (AD104) Single monitor, HDMI-A-1 `[email protected]`, `scale = 1`, layout `dwindle` ### What's wrong? `omarchy-hyprland-window-pop` (bound to `SUPER + O`, "Pop window out (float & pin)") toggles floating but resizes **unconditionally**. When it runs on a window that was already floating, the toggle *tiles* the window, and the follow-up 1300x900 resize is then applied to a tiled window — where an absolute pixel resize rewrites the dwindle split ratio instead of setting a size. The result is a mangled workspace layout. This is reachable from stock defaults, because Omarchy itself ships Steam as a floating window (`default/hypr/apps/steam.lua:1`): ```lua o.window("steam", { float = true, idle_inhibit = "fullscreen" }) ``` So on a default install, the *first* `SUPER + O` pressed on Steam does not pop it out — it tiles it and distorts the layout. Subsequent presses behave correctly, because by then the window is tiled, which is why this looks like a once-per-boot glitch. ### Steps to reproduce 1. Default Omarchy 4.0.0 install, `dwindle`, single monitor. 2. Open a terminal so the workspace has one tiled window. 3. Launch Steam. It opens floating at 1100x700, per the packaged rule above. 4. Focus the Steam window and press `SUPER + O` **once**. ### Expected Either pop the window out to floating 1300x900 (the documented intent — `omarchy:summary=Toggle to pop-out a tile to stay fixed on a display basis`), or tile it at the layout's normal share. Not a rewritten split ratio. ### Actual Steam becomes tiled at **3782x2110 — 74% of the display width** — and the neighbouring terminal is crushed to **1300px** wide. The 1300 intended as the popped window's width leaks into the split boundary instead. Measured with `hyprctl clients -j` immediately before and after a single press: ``` before: steam floating=True size=[1100, 700] at=[2010, 743] after: steam floating=False size=[3782, 2110] at=[1326, 38] foot floating=False size=[1300, 2110] ``` ### Cause In `omarchy-hyprland-window-pop`, the `elif` branch assumes the toggle floats the window, but never checks: ```bash elif [[ -n $addr ]]; then hypr_dispatch "hl.dsp.window.float({ window = \"$window\", action = \"toggle\" })" togglefloating "$window" hypr_dispatch "hl.dsp.window.resize({ window = \"$window\", x = $width, y = $height })" resizeactive exact "$width" "$height" "$window" ``` The `pinned == "true"` branch handles un-popping, but a window that is floating and *not* pinned — Steam's launch state — falls through to `elif` and gets the pop treatment applied backwards. ### Suggested fix `hyprctl activewindow -j` already exposes `floating`, so the state is available without an extra query. Gate the pop path on the window actually having been tiled: ```bash floating=$(echo "$active" | jq ".floating") ... elif [[ $floating == "true" ]]; then # Already floating and not popped: just tile it, no resize/center/pin. hypr_dispatch "hl.dsp.window.float({ window = \"$window\", action = \"toggle\" })" togglefloating "$window" elif [[ -n $addr ]]; then # existing pop-out path, unchanged ``` Alternatively, gate on the `pop` tag rather than `pinned`, so the script's own notion of "is this window popped" stops depending on pin state. ### Notes Same script as #7160 (pop-out loses centering across monitors) and #5268 (pop-out draws over the screensaver), but a distinct bug.
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 08:20 UTC