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

[hyprland] `omarchy-hyprland-window-pop` state desync on already-floating windows

Reported by on370 · filed Aug 31, 2026 · open at source

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

[hyprland] `omarchy-hyprland-window-pop` state desync on already-floating windowsrevision 1 · captured 2026-09-28 21:24 UTC via poll

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.
  1. 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.
  1. Switch to another workspace — Bitwarden stays on its original workspace.
  2. Press SUPER + O (2nd time).
  • Observe: Bitwarden becomes floating at 1300x900.
  1. 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"
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.
  1. 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:

#!/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
View 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