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.
[hyprland] `omarchy-hyprland-window-pop` state desync on already-floating windows
Reported by on370 · filed Aug 31, 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
2012 MBP i7 4 GB RAM
What's wrong?
Metadata
- Date: 2026-08-31
- Component:
hyprland(/usr/share/omarchy/bin/omarchy-hyprland-window-pop,SUPER + O) - Severity: Medium
- Reproducibility: Deterministic (100% reproducible on any app with
+floating-windowtag) - Status: Checked & locally verified (Fix ready)
- Upstream Issue / PR: Ready for upstream submission
System Environment
- Distribution: Omarchy Quattro
- Version: 4.0.2 (
/usr/share/omarchy/version) - Desktop / Compositor: Hyprland
- Affected Applications: All windows pre-configured as floating (
Bitwarden,1Password,About,org.omarchy.about,Tensaku, dialogs)
Problem Description
The keybinding SUPER + O invokes /usr/share/omarchy/bin/omarchy-hyprland-window-pop to "pop out" a tiled window into a larger, centered, and pinned (sticky across all workspaces) floating window.
However, when SUPER + O is used on a window that is already floating by default (such as Bitwarden or 1Password), the script's logic desynchronizes:
1. 1st press: Window turns into a tiled (fullscreen-sized) window instead of popping out.
2. 2nd press: Window turns into a medium-sized floating window (1300x900) but becomes pinned across all virtual workspaces, obscuring applications on every other workspace.
3. The toggle behavior is inverted and requires multiple presses to cycle out of the corrupted state.
Steps to Reproduce
- Open Bitwarden (or any pre-configured floating app) on an empty workspace.
- Initial state:
floating = true,pinned = false, size =875x600.
- Press
SUPER + O(1st time).
- Observe: Bitwarden expands to fill the workspace as a tiled window. It is NOT pinned because Hyprland ignores pin requests on tiled windows.
- Switch to another workspace — Bitwarden stays on its original workspace.
- Press
SUPER + O(2nd time).
- Observe: Bitwarden becomes floating at 1300x900.
- Switch to other virtual workspaces.
- Bug: Bitwarden is now pinned and follows the user across ALL workspaces, sitting on top of other running applications.
Technical Context & Root Cause Analysis
Code in /usr/share/omarchy/bin/omarchy-hyprland-window-pop:
active=$(hyprctl activewindow -j)
pinned=$(echo "$active" | jq ".pinned")
addr=$(echo "$active" | jq -r ".address")
window="address:$addr"
if [[ $pinned == "true" ]]; then
hypr_dispatch "hl.dsp.window.pin({ window = \"$window\" })" pin "$window"
hypr_dispatch "hl.dsp.window.float({ window = \"$window\", action = \"toggle\" })" togglefloating "$window"
hypr_dispatch "hl.dsp.window.tag({ window = \"$window\", tag = \"-pop\" })" tagwindow -pop "$window"
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"
# ...
hypr_dispatch "hl.dsp.window.pin({ window = \"$window\" })" pin "$window"
hypr_dispatch "hl.dsp.window.alter_zorder({ window = \"$window\", mode = \"top\" })" alterzorder top "$window"
hypr_dispatch "hl.dsp.window.tag({ window = \"$window\", tag = \"+pop\" })" tagwindow +pop "$window"
fiWhy the logic breaks:
- Flawed Assumption: The script assumes that if
pinned == false, the window MUST be a tiled window, so it unconditionally callstogglefloating. - First invocation on a floating window:
- Because
pinned == false, it enters theelifbranch. togglefloatingtoggles the already-floating window into a tiled window!- It then attempts
pin "$window". However, in Hyprland, thepindispatcher is only valid for floating windows. Hyprland rejects pinning the tiled window, leavingpinned: false.
- Second invocation:
- Since
pinnedis STILLfalse, it enters theelifbranch AGAIN. togglefloatingtoggles the tiled window back to floating.resizesets size to 1300x900.pin "$window"now succeeds because the window is floating.- Result: The window is now floating and pinned across all virtual workspaces.
Proposed & Verified Fix
Track pop-out state via the pop tag or pinned status, strip Hyprland's active tag asterisks (*), and check whether the application is marked with the floating-window tag:
#!/bin/bash
# omarchy:summary=Toggle to pop-out a tile to stay fixed on a display basis.
# omarchy:args=[width height x y]
width=${1:-1300}
height=${2:-900}
x=${3:-}
y=${4:-}
active=$(hyprctl activewindow -j)
addr=$(echo "$active" | jq -r ".address // empty")
[[ -n $addr ]] || exit 0
window="address:$addr"
pinned=$(echo "$active" | jq -r ".pinned")
floating=$(echo "$active" | jq -r ".floating")
tags_clean=$(echo "$active" | jq -r ".tags[]?" 2>/dev/null | tr -d '*' || true)
is_popped=false
if echo "$tags_clean" | grep -qx "pop" || [[ $pinned == "true" ]]; then
is_popped=true
fi
is_default_floating=false
if echo "$tags_clean" | grep -qx "floating-window"; then
is_default_floating=true
fi
hypr_dispatch() {
local lua="$1"
shift
hyprctl dispatch "$lua" >/dev/null 2>&1 || hyprctl dispatch "$@" >/dev/null
}
if [[ $is_popped == "true" ]]; then
# --- UNPOP ---
if [[ $pinned == "true" ]]; then
hypr_dispatch "hl.dsp.window.pin({ window = \"$window\" })" pin "$window"
fi
hypr_dispatch "hl.dsp.window.tag({ window = \"$window\", tag = \"-pop\" })" tagwindow -pop "$window"
if [[ $is_default_floating == "true" ]]; then
# Default floating app: restore default size (875x600) and ensure floating
if [[ $floating != "true" ]]; then
hypr_dispatch "hl.dsp.window.float({ window = \"$window\", action = \"toggle\" })" togglefloating "$window"
fi
hypr_dispatch "hl.dsp.window.resize({ window = \"$window\", x = 875, y = 600 })" resizeactive exact 875 600 "$window"
hypr_dispatch "hl.dsp.window.center({ window = \"$window\" })" centerwindow "$window"
else
# Tiled app: return to tiled
if [[ $floating == "true" ]]; then
hypr_dispatch "hl.dsp.window.float({ window = \"$window\", action = \"toggle\" })" togglefloating "$window"
fi
fi
else
# --- POP OUT ---
if [[ $floating != "true" ]]; then
hypr_dispatch "hl.dsp.window.float({ window = \"$window\", action = \"toggle\" })" togglefloating "$window"
fi
hypr_dispatch "hl.dsp.window.resize({ window = \"$window\", x = $width, y = $height })" resizeactive exact "$width" "$height" "$window"
if [[ -n $x && -n $y ]]; then
hypr_dispatch "hl.dsp.window.move({ window = \"$window\", x = $x, y = $y })" moveactive "$x" "$y" "$window"
else
hypr_dispatch "hl.dsp.window.center({ window = \"$window\" })" centerwindow "$window"
fi
hypr_dispatch "hl.dsp.window.pin({ window = \"$window\" })" pin "$window"
hypr_dispatch "hl.dsp.window.alter_zorder({ window = \"$window\", mode = \"top\" })" alterzorder top "$window"
hypr_dispatch "hl.dsp.window.tag({ window = \"$window\", tag = \"+pop\" })" tagwindow +pop "$window"
fiView raw text
### System details
2012 MBP i7 4 GB RAM
### What's wrong?
## Metadata
* **Date:** 2026-08-31
* **Component:** `hyprland` (`/usr/share/omarchy/bin/omarchy-hyprland-window-pop`, `SUPER + O`)
* **Severity:** Medium
* **Reproducibility:** Deterministic (100% reproducible on any app with `+floating-window` tag)
* **Status:** Checked & locally verified (Fix ready)
* **Upstream Issue / PR:** Ready for upstream submission
---
## System Environment
* **Distribution:** Omarchy Quattro
* **Version:** 4.0.2 (`/usr/share/omarchy/version`)
* **Desktop / Compositor:** Hyprland
* **Affected Applications:** All windows pre-configured as floating (`Bitwarden`, `1Password`, `About`, `org.omarchy.about`, `Tensaku`, dialogs)
---
## Problem Description
The keybinding `SUPER + O` invokes `/usr/share/omarchy/bin/omarchy-hyprland-window-pop` to "pop out" a tiled window into a larger, centered, and pinned (sticky across all workspaces) floating window.
However, when `SUPER + O` is used on a window that is **already floating by default** (such as Bitwarden or 1Password), the script's logic desynchronizes:
1. **1st press:** Window turns into a tiled (fullscreen-sized) window instead of popping out.
2. **2nd press:** Window turns into a medium-sized floating window (1300x900) but becomes **pinned across all virtual workspaces**, obscuring applications on every other workspace.
3. The toggle behavior is inverted and requires multiple presses to cycle out of the corrupted state.
---
## Steps to Reproduce
1. Open Bitwarden (or any pre-configured floating app) on an empty workspace.
- Initial state: `floating = true`, `pinned = false`, size = `875x600`.
2. Press `SUPER + O` (1st time).
- Observe: Bitwarden expands to fill the workspace as a tiled window. It is NOT pinned because Hyprland ignores pin requests on tiled windows.
3. Switch to another workspace — Bitwarden stays on its original workspace.
4. Press `SUPER + O` (2nd time).
- Observe: Bitwarden becomes floating at 1300x900.
5. Switch to other virtual workspaces.
- **Bug:** Bitwarden is now pinned and follows the user across ALL workspaces, sitting on top of other running applications.
---
## Technical Context & Root Cause Analysis
### Code in `/usr/share/omarchy/bin/omarchy-hyprland-window-pop`:
```bash
active=$(hyprctl activewindow -j)
pinned=$(echo "$active" | jq ".pinned")
addr=$(echo "$active" | jq -r ".address")
window="address:$addr"
if [[ $pinned == "true" ]]; then
hypr_dispatch "hl.dsp.window.pin({ window = \"$window\" })" pin "$window"
hypr_dispatch "hl.dsp.window.float({ window = \"$window\", action = \"toggle\" })" togglefloating "$window"
hypr_dispatch "hl.dsp.window.tag({ window = \"$window\", tag = \"-pop\" })" tagwindow -pop "$window"
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"
# ...
hypr_dispatch "hl.dsp.window.pin({ window = \"$window\" })" pin "$window"
hypr_dispatch "hl.dsp.window.alter_zorder({ window = \"$window\", mode = \"top\" })" alterzorder top "$window"
hypr_dispatch "hl.dsp.window.tag({ window = \"$window\", tag = \"+pop\" })" tagwindow +pop "$window"
fi
```
### Why the logic breaks:
1. **Flawed Assumption:** The script assumes that if `pinned == false`, the window MUST be a tiled window, so it unconditionally calls `togglefloating`.
2. **First invocation on a floating window:**
- Because `pinned == false`, it enters the `elif` branch.
- `togglefloating` toggles the already-floating window into a **tiled** window!
- It then attempts `pin "$window"`. However, in Hyprland, the `pin` dispatcher is **only valid for floating windows**. Hyprland rejects pinning the tiled window, leaving `pinned: false`.
3. **Second invocation:**
- Since `pinned` is STILL `false`, it enters the `elif` branch AGAIN.
- `togglefloating` toggles the tiled window back to **floating**.
- `resize` sets size to 1300x900.
- `pin "$window"` now **succeeds** because the window is floating.
- Result: The window is now floating and pinned across all virtual workspaces.
---
## Proposed & Verified Fix
Track pop-out state via the `pop` tag or `pinned` status, strip Hyprland's active tag asterisks (`*`), and check whether the application is marked with the `floating-window` tag:
```bash
#!/bin/bash
# omarchy:summary=Toggle to pop-out a tile to stay fixed on a display basis.
# omarchy:args=[width height x y]
width=${1:-1300}
height=${2:-900}
x=${3:-}
y=${4:-}
active=$(hyprctl activewindow -j)
addr=$(echo "$active" | jq -r ".address // empty")
[[ -n $addr ]] || exit 0
window="address:$addr"
pinned=$(echo "$active" | jq -r ".pinned")
floating=$(echo "$active" | jq -r ".floating")
tags_clean=$(echo "$active" | jq -r ".tags[]?" 2>/dev/null | tr -d '*' || true)
is_popped=false
if echo "$tags_clean" | grep -qx "pop" || [[ $pinned == "true" ]]; then
is_popped=true
fi
is_default_floating=false
if echo "$tags_clean" | grep -qx "floating-window"; then
is_default_floating=true
fi
hypr_dispatch() {
local lua="$1"
shift
hyprctl dispatch "$lua" >/dev/null 2>&1 || hyprctl dispatch "$@" >/dev/null
}
if [[ $is_popped == "true" ]]; then
# --- UNPOP ---
if [[ $pinned == "true" ]]; then
hypr_dispatch "hl.dsp.window.pin({ window = \"$window\" })" pin "$window"
fi
hypr_dispatch "hl.dsp.window.tag({ window = \"$window\", tag = \"-pop\" })" tagwindow -pop "$window"
if [[ $is_default_floating == "true" ]]; then
# Default floating app: restore default size (875x600) and ensure floating
if [[ $floating != "true" ]]; then
hypr_dispatch "hl.dsp.window.float({ window = \"$window\", action = \"toggle\" })" togglefloating "$window"
fi
hypr_dispatch "hl.dsp.window.resize({ window = \"$window\", x = 875, y = 600 })" resizeactive exact 875 600 "$window"
hypr_dispatch "hl.dsp.window.center({ window = \"$window\" })" centerwindow "$window"
else
# Tiled app: return to tiled
if [[ $floating == "true" ]]; then
hypr_dispatch "hl.dsp.window.float({ window = \"$window\", action = \"toggle\" })" togglefloating "$window"
fi
fi
else
# --- POP OUT ---
if [[ $floating != "true" ]]; then
hypr_dispatch "hl.dsp.window.float({ window = \"$window\", action = \"toggle\" })" togglefloating "$window"
fi
hypr_dispatch "hl.dsp.window.resize({ window = \"$window\", x = $width, y = $height })" resizeactive exact "$width" "$height" "$window"
if [[ -n $x && -n $y ]]; then
hypr_dispatch "hl.dsp.window.move({ window = \"$window\", x = $x, y = $y })" moveactive "$x" "$y" "$window"
else
hypr_dispatch "hl.dsp.window.center({ window = \"$window\" })" centerwindow "$window"
fi
hypr_dispatch "hl.dsp.window.pin({ window = \"$window\" })" pin "$window"
hypr_dispatch "hl.dsp.window.alter_zorder({ window = \"$window\", mode = \"top\" })" alterzorder top "$window"
hypr_dispatch "hl.dsp.window.tag({ window = \"$window\", tag = \"+pop\" })" tagwindow +pop "$window"
fi
```
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 10:19 UTC