DaVinci-Resolve-Omarchy/omarchy-upstream-fixes
28allday c186dbbceb Add upstream fix handoffs for Omarchy window-rule bugs
Two Resolve problems on Omarchy 4.x turned out to be bugs in Omarchy's own
Hyprland rules rather than in this installer, so document them as
ready-to-raise upstream patches:

  001 the status bar covers Resolve's menu bar
  002 Resolve's dialogs trap the pointer until Resolve is killed

Each file is self-contained: symptom, root cause with captured command
output, the exact patch in Omarchy's house style, verification performed,
how to re-verify, and reviewer caveats. Both fixes are verified end-to-end
on Hyprland 0.56.1 / Omarchy 4.0.0.r1440.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-29 16:56:41 +01:00
..
001-resolve-bar-overlap.md Add upstream fix handoffs for Omarchy window-rule bugs 2026-07-29 16:56:41 +01:00
002-resolve-dialog-focus-trap.md Add upstream fix handoffs for Omarchy window-rule bugs 2026-07-29 16:56:41 +01:00
README.md Add upstream fix handoffs for Omarchy window-rule bugs 2026-07-29 16:56:41 +01:00

Upstream fixes for Omarchy

Fixes found while getting DaVinci Resolve working on Omarchy that belong upstream in omarchy rather than in this installer script.

Each file here is a self-contained handoff: one numbered Markdown file per fix, containing everything needed to raise the PR with no other context — symptom, root cause with evidence, the exact patch, verification already performed, how to re-verify, and reviewer caveats. Hand one file to a person or an AI and they can open the PR from it alone.

# Fix Target file Status
001 Resolve's main window is covered by the bar default/hypr/apps/davinci-resolve.lua ready to raise
002 Resolve's dialogs trap the pointer default/hypr/apps/davinci-resolve.lua ready to raise

Raising 001 and 002 — read first

Both fixes append to the same file, default/hypr/apps/davinci-resolve.lua, and both diffs are anchored on the same context (@@ -6,3 @@, the end of the original 8-line file). Whichever lands first will make the other's patch fail to apply. They are otherwise independent — different properties, order between them doesn't matter.

Raise them as two PRs, 001 first. Do not combine them.

Combining is tempting — same file, both small — and it does sidestep the patch conflict. That's the weakest consideration: rebasing 002 after 001 lands means appending two rules to the end of a file, with no semantic conflict.

The reason to keep them apart is that they carry very different risk:

001 (bar overlap) 002 (focus trap)
Nature purely additive — a new rule for a window that had none narrows a rule a maintainer added deliberately
Verified end-to-end, including negative cases end-to-end — cold-start A/B, plus hands-on main-window and popup checks
If wrong fails safe — rule stops matching, old behaviour returns popups vanish on mouse-out: worse than the bug being fixed
Likely review uncontroversial may attract debate (mouse_refocus, blocklist fragility)

002 touches stay_focused, which exists for a documented reason, and carries an open design question for a maintainer (see its §7). Coupling them makes the clean, low-risk fix wait on the more debatable one for no benefit.

Both are now fully verified, so 002 no longer needs holding — raise them in close succession, 001 first.

If a maintainer explicitly asks for them together, use the combined end state below as the target — one PR, two commits.

Combined end state (both fixes applied)

-- DaVinci Resolve window focus handling. Kept fully opaque: the default
-- translucency distorts colour-critical grading work.
o.window(".*[Rr]esolve.*", {
  float = true,
  stay_focused = true,
  tag = "-default-opacity",
  opacity = "1 1",
})

-- Resolve's floating main window ignores the bar's reserved zone, so the bar
-- covers its menu bar; fullscreen renders above top-layer surfaces. Scoped by
-- title so the splash and Project Manager keep their natural size.
o.window({ class = ".*[Rr]esolve.*", title = "^DaVinci Resolve - .+$" }, { fullscreen = true })

-- stay_focused above stops Resolve's transient popups closing on mouse-out
-- (hyprwm/Hyprland#12235), but pinning the windows they open over makes two
-- windows fight for focus and traps the pointer. Unpin the parents only.
o.window({ class = ".*[Rr]esolve.*", title = "^(DaVinci Resolve - .+|Project Manager)$" }, { stay_focused = false })

State the testing accurately

Both fixes are verified end-to-end; each file's §5 lists exactly what was measured and what was checked by hand. Two things are worth carrying into the PR bodies rather than quietly dropping:

  • 002's parent list is a blocklist that may need extending (its §7).
  • 002 has an open design question — whether input:mouse_refocus makes the whole stay_focused rule obsolete on Hyprland 0.56.1. Not tested, because it is a global setting and that is a maintainer's call.

Conventions

  • Filename: NNN-short-slug.md, numbered in the order found.
  • Status: ready to raiseraised (#PR)merged / rejected. Update the table above when it changes.
  • Evidence over assertion. Every claim about behaviour should be backed by command output pasted into the file (hyprctl, grim pixel samples, logs), so a reviewer can judge it without reproducing the setup.
  • State what was actually tested, including the environment (Hyprland and Omarchy versions, GPU, resolution/scale). If something was reasoned about but not run, say so explicitly.
  • Record rejected alternatives and why, in the caveats section — it saves the reviewer re-proposing them.

Relationship to the installer

Until a fix lands upstream, Omarchy_resolve_v2.sh applies its own local equivalent so the installer works today. Those local workarounds are marked in the script with a comment pointing back to the fix number here. Once a fix is merged upstream the local workaround becomes redundant — harmless, but it can then be dropped.