feat(hyprland): float+center Bluetooth + printer config dialogs
All checks were successful
Check / eval (push) Successful in 3m8s

Conservative first cut of the floating-window audit (item 41): float and
center the two shipped, unambiguous config dialogs — blueman
(manager/adapters) and system-config-printer — alongside the mixer. Uses
(?i) class regexes tolerant of the XWayland `.…-wrapped` form, consistent
with the existing (?i) usage in this file.

Deliberately conservative: network is dmenu/nmtui (no GUI editor), and the
polkit prompt + GTK file portals are deferred because their window class
can't be verified headlessly — a guessed class is a dead rule. Those wait
for a hardware `hyprctl clients` read (queued).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-07 22:39:43 +01:00
parent 28a28e05d3
commit a8391c381d
4 changed files with 55 additions and 17 deletions

View File

@@ -438,16 +438,26 @@ in
background_color = rgb c.base;
};
# Window rules. This is the config's first float rule; item 41 will
# broaden the set (dialogs, portals, …) once that audit lands. For
# now: the audio mixer opened by right-clicking the Waybar volume
# module (item 35) floats + centers instead of tiling. Matches
# pwvucontrol (the template's mixer) and pavucontrol if swapped in.
# Normal-priority list like `bind`/`exec-once` below, so a downstream
# `windowrule = [...]` concatenates rather than replaces.
# 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
# `.…-wrapped` binary-name form.
#
# Conservative set on purpose (item 41): only windows the distro
# actually ships, each an unambiguous dialog. Deliberately NOT
# floated yet — needs on-hardware class verification: the polkit auth
# 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.
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)$"
# 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)?)$"
];
# Rendered from ./keybinds.nix (the cheatsheet reads the same list),