feat(waybar): right-click volume opens a floating pwvucontrol mixer
All checks were successful
Check / eval (push) Successful in 2m55s

Right-clicking the Waybar volume module now opens pwvucontrol (per-app
mixer); left-click still mutes. Adds:

- on-click-right in waybar.nix + all four whole-swap jsoncs (parity)
- hyprland.nix: the config's first windowrule block — float + center the
  mixer (pwvucontrol, with pavucontrol as a fallback class); normal-
  priority list so a downstream windowrule concatenates
- pwvucontrol in the template home.packages

pwvucontrol is PipeWire-native + GTK4/libadwaita, so it themes via the
portal color-scheme like Amberol. app-id verified from the built package.
This settles the windowrule pattern/placement; item 41 is now just
broadening the float set. Right-click→float→center is a V3 session check.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-07 22:31:00 +01:00
parent 239c3c4551
commit 28a28e05d3
10 changed files with 53 additions and 24 deletions

View File

@@ -257,32 +257,16 @@ summer-day/summer-night) — all deliberately set `scrollbar { width:0 }`
today, each needs a per-theme handle width/colour. Payoff is V3-only
(rendering), so it wants a themed session, not a headless edit.
### 35. Right-click volume → audio control app
(Raised by Bernardo, 2026-07-07 — item 5.) Right-click the Waybar
`pulseaudio` module to open a mixer in a floating window. Wire
`on-click-right` in `waybar.nix` AND the whole-swap jsoncs (parity rule);
add a Hyprland `windowrulev2 = float` for the mixer. Ship the mixer in
the template's `home.packages`.
_Scoped 2026-07-07 (held for item 41):_ the on-click-right wiring is
trivial, but the float rule needs the windowrule infrastructure that
**does not exist yet** — there are currently **zero** `windowrule`s in
the whole config, and item 41 is where that set gets designed list-first
(Bernardo's call). So this is gated on 41, not independently shippable
without inverting his 41→35 plan. **Mixer recommendation:** `pwvucontrol`
(PipeWire-native, GTK4/libadwaita → themes via the portal color-scheme
like Amberol; the distro is already wpctl/PipeWire). app-id for the float
rule: `com.saivert.pwvucontrol`. (`pavucontrol` is the GTK3 fallback.)
### 41. Floating-window audit
(Raised by Bernardo, 2026-07-07 — item 11.) Decide which windows should
open floating by default (config dialogs, mixer, file-chooser portals,
calculators, etc.) and add the `windowrulev2 = float` rules in
`hyprland.nix`. Enables items 35/36b. Produce the list first, then the
rules.
_Note 2026-07-07:_ this establishes the **first** windowrule block in the
config (none exist today) — so it also owns the decision of where the
rules live and their format. Once the pattern's set, 35's mixer float and
36b fall out of it.
open floating by default (config dialogs, file-chooser portals,
calculators, etc.) and add the `windowrule` float rules in
`hyprland.nix`. Enables item 36b. Produce the list first, then the rules.
_Note 2026-07-07:_ the **first** `windowrule` block now exists (added by
item 35 — the mixer floats + centers), so the pattern + placement are
set. 41 is now purely "broaden the set" — audit the template app suite,
pick the dialog/utility classes, append rules. Still list-first
(Bernardo's taste on what should float), so it wants his review.

View File

@@ -236,6 +236,11 @@ QA machine), the **T14s** (webcam case).
unchanged (the bar still reserves its space). Accepted trade-off
of `layer: bottom`: a floating window dragged over the top strip
can now overlap the bar — confirm that's the only regression.
- [ ] **Right-click volume → floating mixer** (iteration #62, item 35) —
after `home-update` + relogin: right-click the Waybar volume module
opens pwvucontrol as a floating, centered window (not tiled);
left-click still mutes. Verify across a whole-swap theme too
(summer/boreal/executive-slate) since the jsoncs got the same wiring.
- [ ] **Window focus on arrows** (iteration #61) — after `home-update` +
relogin: SUPER+←/→/↑/↓ move focus between tiled windows; SUPER+H/J/K/L
no longer move focus; SUPER+? cheatsheet shows the arrow glyphs.

View File

@@ -17,6 +17,25 @@ Template:
---
## 2026-07-07 — Right-click volume → floating mixer (iteration #62, item 35)
- **Task:** BACKLOG item 35 — right-click the Waybar volume module to
open a mixer in a floating window. (Bernardo re-launched /loop after I'd
flagged it as gated on 41 — read as "handle it," so I did 35 fully and
re-scoped 41 to just broadening the float set.)
- **Chose pwvucontrol** (PipeWire-native, GTK4/libadwaita → themes via the
portal like Amberol; distro is already wpctl/PipeWire). Verified app-id
`com.saivert.pwvucontrol` from the built package.
- **Changes:** (1) `waybar.nix` pulseaudio `on-click-right = "pwvucontrol"`
+ parity into all four whole-swap jsoncs (summer-day/night, boreal,
executive-slate). (2) `hyprland.nix` — the config's **first** `windowrule`
block: `float` + `center` for the mixer classes (pwvucontrol + pavucontrol
fallback), normal-priority list so downstream concatenates. (3)
`pwvucontrol` added to the template `home.packages`.
- **Verified:** V0 green; `nix eval` of the homeConfiguration confirms the
windowrule regex renders with correct single-backslash escaping
(`class:^(com\.saivert\.pwvucontrol|…)$`). The right-click→float→center
interaction is a V3 session check (queued). Item 41 now = broaden the set.
## 2026-07-07 — Window focus: vim keys → arrows (iteration #61, direct request)
- **Task:** Bernardo — switch window navigation from vim-style
SUPER+H/J/K/L to SUPER+arrow keys.

View File

@@ -438,6 +438,18 @@ 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.
windowrule = [
"float, class:^(com\\.saivert\\.pwvucontrol|org\\.pulseaudio\\.pavucontrol|pavucontrol)$"
"center, class:^(com\\.saivert\\.pwvucontrol|org\\.pulseaudio\\.pavucontrol|pavucontrol)$"
];
# Rendered from ./keybinds.nix (the cheatsheet reads the same list),
# plus the generated per-workspace binds. Like exec-once above this
# stays a normal-priority list, so a downstream `bind = [...]`

View File

@@ -172,6 +172,10 @@ let
format-muted = "󰝟";
format-icons.default = [ "󰕿" "󰖀" "󰕾" ];
on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
# Right-click → the full mixer (per-app volumes) in a floating window
# (item 35). pwvucontrol ships in the template suite; the Hyprland
# windowrule floats it. Keep in sync with the whole-swap jsoncs.
on-click-right = "pwvucontrol";
};
# Idle inhibitor (caffeine): click 󰾪 → 󰅶 to hold the screen awake —

View File

@@ -81,6 +81,7 @@
inkscape # vector graphics
mpv # media player
amberol # music player (local library; streaming → spotify below)
pwvucontrol # PipeWire volume mixer (right-click the Waybar volume)
# ── More apps — uncomment to add ─────────────────────────────────
# Web browsers

View File

@@ -116,6 +116,7 @@
]
},
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
"on-click-right": "pwvucontrol",
"tooltip-format": "{desc} | {volume}%"
},
"battery": {

View File

@@ -104,6 +104,7 @@
]
},
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
"on-click-right": "pwvucontrol",
"tooltip-format": "{desc} | {volume}%"
},
"custom/powerprofile": {

View File

@@ -51,6 +51,7 @@
"default": ["", "", ""]
},
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
"on-click-right": "pwvucontrol",
"tooltip-format": "Playing at {volume}%"
},

View File

@@ -52,6 +52,7 @@
"default": ["", "", ""]
},
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
"on-click-right": "pwvucontrol",
"tooltip-format": "{desc} | {volume}%"
},