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-4888GitHub issuePublicReceived

Hermes Desktop HUD still tiles on Hyprland despite default/hypr/apps/hermes.lua float rule

Reported by kvnloo · filed Sep 4, 2026Closed upstream on 2026-09-04 by its own reporter kvnloo. GitHub close reason: completed. Closed by its own reporter — not by itself evidence of a fix.

Received and recorded verbatim. Nothing has been checked yet.

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?
Not yet mapped to any requirement or component.
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?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.

Original report

Hermes Desktop HUD still tiles on Hyprland despite default/hypr/apps/hermes.lua float rulerevision 1 · captured 2026-10-04 12:10 UTC via poll

System details

Arch Linux (Omarchy 4.0.2-1), Kernel 7.1.9-arch1-2 x86_64, Hyprland 0.55+ (Lua config), Hermes Desktop (Electron, class Hermes, title Hermes HUD)

What's wrong?

Summary

Toggling Hermes Desktop HUD mode (Ctrl+Shift+H / Quick Entry) on Omarchy still lands the window in the tiling grid instead of as a compact floating overlay — even though Omarchy already ships an explicit float rule for it.

Expected

HUD maps as a floating, borderless, pinned Spotlight-style overlay (centered, no tile borders, no stretched transparent canvas).

Actual

Hyprland tiles the frameless/transparent Electron window into a half-screen partition (e.g. ~736×936), draws an active border, and leaves dark overlay artifacts over the wallpaper.

What Omarchy already does

default/hypr/apps/hermes.lua on quattro:

-- Hermes Desktop's frameless HUD manages its own geometry.
o.window({ class = "^Hermes$", title = "^Hermes HUD$" }, {
  tag = "-default-opacity",
  float = true,
  border_size = 0,
  opacity = "1 1",
})

So this is not a missing-app-profile bug. The default rule either does not match the live window props on map, or loses a race to Hyprland’s initial tile pass for Electron BrowserWindows created with frame: false / transparent: true.

Reproduction

  1. Fresh Omarchy + Hermes Desktop under Hyprland.
  2. Enter HUD mode (Ctrl+Shift+H or titlebar HUD control).
  3. Observe: tiled partition + border instead of float overlay.

Related upstream (Hermes)

Filed and investigated on the app side:

App-side promotion helps, but Omarchy is the right place to harden the compositor-owned rule so HUD-class overlays do not depend on a timing race.

Suggested Omarchy-side directions

(Any one may be enough; listing options for maintainers.)

  1. Match webcam-overlay pattern in default/hypr/apps/webcam-overlay.lua: add pin = true (and if needed no_dim = true) so the HUD stays a true overlay after map/focus cycles.
  2. Verify live match with hyprctl clients at the moment the HUD maps — confirm class / title / Wayland initialClass really are Hermes / Hermes HUD. If Electron exposes a different app_id, broaden the rule (or match initialTitle / initialClass).
  3. Broader class-only float as a temporary safety net if title is unstable during the first map frame:
   o.window({ class = "^Hermes$" }, { float = true, border_size = 0, tag = "-default-opacity", opacity = "1 1" })

(May over-float the main Hermes window — prefer title match once props are confirmed.)
4. Document that users on current Omarchy should either pull Hermes with #103116 or keep a personal override under ~/.config/hypr/ until the default rule is hardened.

Notes

  • Not a support ask for installing Hermes — this is a validated interaction between Omarchy’s shipped Hyprland app profile and a frameless Electron HUD on Hyprland 0.55+.
  • Happy to attach omarchy-debug / hyprctl clients dumps from a local Omarchy box if useful.
View raw text
### System details

Arch Linux (Omarchy 4.0.2-1), Kernel 7.1.9-arch1-2 x86_64, Hyprland 0.55+ (Lua config), Hermes Desktop (Electron, class `Hermes`, title `Hermes HUD`)

### What's wrong?

## Summary

Toggling **Hermes Desktop HUD mode** (`Ctrl+Shift+H` / Quick Entry) on Omarchy still lands the window in the **tiling grid** instead of as a compact floating overlay — even though Omarchy already ships an explicit float rule for it.

## Expected

HUD maps as a floating, borderless, pinned Spotlight-style overlay (centered, no tile borders, no stretched transparent canvas).

## Actual

Hyprland tiles the frameless/transparent Electron window into a half-screen partition (e.g. ~736×936), draws an active border, and leaves dark overlay artifacts over the wallpaper.

## What Omarchy already does

`default/hypr/apps/hermes.lua` on `quattro`:

```lua
-- Hermes Desktop's frameless HUD manages its own geometry.
o.window({ class = "^Hermes$", title = "^Hermes HUD$" }, {
  tag = "-default-opacity",
  float = true,
  border_size = 0,
  opacity = "1 1",
})
```

So this is not a missing-app-profile bug. The default rule either **does not match** the live window props on map, or **loses a race** to Hyprland’s initial tile pass for Electron `BrowserWindow`s created with `frame: false` / `transparent: true`.

## Reproduction

1. Fresh Omarchy + Hermes Desktop under Hyprland.
2. Enter HUD mode (`Ctrl+Shift+H` or titlebar HUD control).
3. Observe: tiled partition + border instead of float overlay.

## Related upstream (Hermes)

Filed and investigated on the app side:

- https://github.com/NousResearch/hermes-agent/issues/103091  
- Hermes previously added socket promotion (`promoteHudOnHyprland`, PR #94038).  
- Follow-up PR https://github.com/NousResearch/hermes-agent/pull/103116 widens the `j/clients` retry budget and re-promotes on repeat `hide()`/`show()` because `onRevealed` only fires once per window lifecycle.

App-side promotion helps, but Omarchy is the right place to harden the **compositor-owned** rule so HUD-class overlays do not depend on a timing race.

## Suggested Omarchy-side directions

(Any one may be enough; listing options for maintainers.)

1. **Match webcam-overlay pattern** in `default/hypr/apps/webcam-overlay.lua`: add `pin = true` (and if needed `no_dim = true`) so the HUD stays a true overlay after map/focus cycles.
2. **Verify live match** with `hyprctl clients` at the moment the HUD maps — confirm `class` / `title` / Wayland `initialClass` really are `Hermes` / `Hermes HUD`. If Electron exposes a different `app_id`, broaden the rule (or match `initialTitle` / `initialClass`).
3. **Broader class-only float** as a temporary safety net if title is unstable during the first map frame:
   ```lua
   o.window({ class = "^Hermes$" }, { float = true, border_size = 0, tag = "-default-opacity", opacity = "1 1" })
   ```
   (May over-float the main Hermes window — prefer title match once props are confirmed.)
4. **Document** that users on current Omarchy should either pull Hermes with #103116 or keep a personal override under `~/.config/hypr/` until the default rule is hardened.

## Notes

- Not a support ask for installing Hermes — this is a validated interaction between Omarchy’s shipped Hyprland app profile and a frameless Electron HUD on Hyprland 0.55+.
- Happy to attach `omarchy-debug` / `hyprctl clients` dumps from a local Omarchy box if useful.

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.

No decision has been recorded yet.