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.
Chrome tabs briefly lose scroll/keyboard focus on native Wayland (nofocus rule only covers xwayland)
Reported by bagayasbryan-code · filed Sep 12, 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
Description
Right after opening a new tab in Google Chrome (running natively on Wayland via --ozone-platform=wayland, not XWayland), mouse scroll and the spacebar stop working in the tab — clicking to another window and back to Chrome restores it immediately.
Cause
Chrome briefly creates a transient toplevel surface with an empty class/title (likely used for tab-drag-threshold detection). Hyprland's default focus-follows-new-window behavior hands that surface keyboard/pointer focus, so the visible tab never actually gets input until focus is forced back onto it.
Omarchy already has a fix for this exact window signature in default/hypr/windows.lua:
-- Fix some dragging issues with XWayland.
o.window(
{
class = "^$",
title = "^$",
xwayland = true,
float = true,
fullscreen = false,
pin = false,
},
{ no_focus = true }
)but it's scoped to xwayland = true, so it doesn't cover Chrome's native-Wayland surfaces.
Suggested fix
Add an equivalent rule without the xwayland = true condition (or a parallel rule with xwayland = false), so empty class/title floating transient windows don't steal focus regardless of whether they're XWayland or native Wayland clients.
Workaround
Personal config addition that resolves it locally:
windowrule = nofocus, match:class ^$, match:title ^$, match:floating 1, match:fullscreen 0Environment
- Hyprland 0.56.2
- google-chrome-stable 152.0.7977.64, launched with
--ozone-platform=wayland --ozone-platform-hint=wayland - Omarchy (current)
🤖 Generated with Claude Code
View raw text
## Description
Right after opening a new tab in Google Chrome (running natively on Wayland via `--ozone-platform=wayland`, not XWayland), mouse scroll and the spacebar stop working in the tab — clicking to another window and back to Chrome restores it immediately.
## Cause
Chrome briefly creates a transient toplevel surface with an empty class/title (likely used for tab-drag-threshold detection). Hyprland's default focus-follows-new-window behavior hands that surface keyboard/pointer focus, so the visible tab never actually gets input until focus is forced back onto it.
Omarchy already has a fix for this exact window signature in `default/hypr/windows.lua`:
```lua
-- Fix some dragging issues with XWayland.
o.window(
{
class = "^$",
title = "^$",
xwayland = true,
float = true,
fullscreen = false,
pin = false,
},
{ no_focus = true }
)
```
but it's scoped to `xwayland = true`, so it doesn't cover Chrome's native-Wayland surfaces.
## Suggested fix
Add an equivalent rule without the `xwayland = true` condition (or a parallel rule with `xwayland = false`), so empty class/title floating transient windows don't steal focus regardless of whether they're XWayland or native Wayland clients.
## Workaround
Personal config addition that resolves it locally:
```
windowrule = nofocus, match:class ^$, match:title ^$, match:floating 1, match:fullscreen 0
```
## Environment
- Hyprland 0.56.2
- google-chrome-stable 152.0.7977.64, launched with `--ozone-platform=wayland --ozone-platform-hint=wayland`
- Omarchy (current)
🤖 Generated with [Claude Code](https://claude.com/claude-code)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 12:06 UTC