fix(hyprland): migrate window rules to Hyprland 0.53+ syntax
Some checks failed
Check / eval (push) Has been cancelled
Some checks failed
Check / eval (push) Has been cancelled
The default desktop showed a red Hyprland config-error banner on every boot, occluding the Waybar. Root cause: Hyprland 0.53 rewrote window rules — the `windowrulev2` keyword is a hard error and the old rule-first order (`float, class:^…$`) no longer parses, so the float rules were not applying either. Confirmed against the Hyprland 0.55.4 source (`handleWindowrule`): each comma field is now `<keyword> <value>`, so effects carry a value and matchers take a `match:` prefix. Migrated the 7-rule block to `float 1, match:class ^…$` form. Verified: V0 nix flake check --no-build; built the generated hyprland.conf; V2 theme-shot re-render — banner gone, themed Waybar renders. Journal + MEMORY gotcha added. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -459,7 +459,14 @@ in
|
||||
# Window rules — float + center small config/utility dialogs that
|
||||
# tile awkwardly. Normal-priority list like `bind`/`exec-once` below,
|
||||
# so a downstream `windowrule = [...]` concatenates rather than
|
||||
# replaces. Class regexes use `(?i)` and tolerate the XWayland
|
||||
# replaces. Syntax is the post-0.53 rule rewrite (hyprlang legacy
|
||||
# parser, `handleWindowrule`): each comma field is `<keyword>
|
||||
# <value>`, so effects carry a value (`float 1`, `center 1`, `size
|
||||
# W H`) and matchers take a `match:` prefix (`match:class ^…$`).
|
||||
# The old rule-first form (`float, class:^…$`) and the
|
||||
# `windowrulev2` key are both hard errors now (red config-error
|
||||
# banner on every session start — seen in the capture harness).
|
||||
# Class regexes use `(?i)` and tolerate the XWayland
|
||||
# `.…-wrapped` binary-name form.
|
||||
#
|
||||
# Conservative set on purpose (item 41): only windows the distro
|
||||
@@ -468,21 +475,21 @@ in
|
||||
# prompt (hyprpolkitagent exposes no discoverable class) and GTK
|
||||
# file-chooser portals. A dead rule is harmless, but guessing a class
|
||||
# is worse than leaving it for a verified pass.
|
||||
windowrulev2 = [
|
||||
windowrule = [
|
||||
# Audio mixer (item 35): right-click the Waybar volume module.
|
||||
"float, class:^(com\\.saivert\\.pwvucontrol|org\\.pulseaudio\\.pavucontrol|pavucontrol)$"
|
||||
"center, class:^(com\\.saivert\\.pwvucontrol|org\\.pulseaudio\\.pavucontrol|pavucontrol)$"
|
||||
"float 1, match:class ^(com\\.saivert\\.pwvucontrol|org\\.pulseaudio\\.pavucontrol|pavucontrol)$"
|
||||
"center 1, match:class ^(com\\.saivert\\.pwvucontrol|org\\.pulseaudio\\.pavucontrol|pavucontrol)$"
|
||||
|
||||
# Bluetooth manager (blueman) + CUPS printer admin.
|
||||
"float, class:(?i)^(\\.?blueman-(manager|adapters)(-wrapped)?|\\.?system-config-printer(-wrapped)?)$"
|
||||
"center, class:(?i)^(\\.?blueman-(manager|adapters)(-wrapped)?|\\.?system-config-printer(-wrapped)?)$"
|
||||
"float 1, match:class (?i)^(\\.?blueman-(manager|adapters)(-wrapped)?|\\.?system-config-printer(-wrapped)?)$"
|
||||
"center 1, match:class (?i)^(\\.?blueman-(manager|adapters)(-wrapped)?|\\.?system-config-printer(-wrapped)?)$"
|
||||
|
||||
# Calendar popup (item 42): the Waybar clock's on-click runs
|
||||
# nomarchy-calendar → calcurse in a ghostty window tagged with a
|
||||
# distinct --class, so it floats centered instead of tiling.
|
||||
"float, class:^(com\\.nomarchy\\.calendar)$"
|
||||
"size 60% 65%, class:^(com\\.nomarchy\\.calendar)$"
|
||||
"center, class:^(com\\.nomarchy\\.calendar)$"
|
||||
"float 1, match:class ^(com\\.nomarchy\\.calendar)$"
|
||||
"size 60% 65%, match:class ^(com\\.nomarchy\\.calendar)$"
|
||||
"center 1, match:class ^(com\\.nomarchy\\.calendar)$"
|
||||
];
|
||||
|
||||
# Rendered from ./keybinds.nix (the cheatsheet reads the same list),
|
||||
|
||||
Reference in New Issue
Block a user