.sb-tabbar now reserves 64px on the right, the same way .sb-header already
does for the title: the ✕ is a Gtk.Overlay child, so it claims no layout
space and the tab row grew straight under it once the row got wide enough
(the "General Settings" pill was overlapping the button's circle).
Also documents, next to `config vicinae` in hyprdrive's updater.conf, that
the cosmonaut.toml this deploys to ~/.config/vicinae/ is inert — vicinae only
reads named themes from ~/.local/share/vicinae/themes/, and silently falls
back to its default grey theme when the file isn't there. That is exactly
what happened on this machine: the theme was added after hyprdrive.sh last
ran, so the launcher had been rendering the stock grey palette.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The per-channel volume meters are now vertical faders (Gtk.Scale, inverted so
loud is up) instead of horizontal sliders, and the live peak indicator moved
out of its own bar above the card into the meter itself: a narrow violet
column Cairo-drawn inside the trough, so one glance reads both "what the
volume is set to" (the fill) and "what is actually reaching the mix" (the
column inside it).
- ui/peakbar.py is a DrawingArea rather than a Gtk.LevelBar: it has to grow
bottom-to-top over the same span as the scale's highlight, minus the
half-slider inset, and it sits in a Gtk.Overlay with can_target=False so
the scale underneath still gets every click and drag.
- ui/meter.py draws the value as its own label and drops the 100% mark;
either one would push the trough off-centre under the overlaid column.
The channel label is always appended (empty for mono) so a lone meter and
a split L/R pair keep the same trough height inside the card's stack.
- ui/card_base.py fans one peak monitor out to every meter of the card —
parec reports one mixed level per target, not a per-channel one.
- The trough's empty portion is transparent now (an idle meter and a silent
monitor both read as "nothing here"), and supersonic-booster's fill gets
the suite's emitted-magenta glow. Both stylesheets re-assert the
transparent background at class specificity: the CyberQueer theme's
`* { background-color: #1a1a1a }` was otherwise painting a dark stripe
straight through the fill where the peak column sits.
hyprlua's audio-panel is regenerated via regen-audio-panel.sh; its plain
stylesheet stays flat and glow-free by design, with @accent as the fill.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Layer-shell surfaces can only anchor to a screen edge with a margin, not to
another process's widget, so this can't truly follow the invoking volume
button — but every bar variant in this repo (station-bar, eww/eww-touch/
eww-nobattery) keeps its volume control in the top-right zone, so anchoring
there approximates "under the control that opened it" well enough. Also
shrunk the panel (900px -> 460px, smaller cards/meters/tab height) so it
reads as a compact popover instead of a full-width mixer.
hyprlua's audio-panel is regenerated via regen-audio-panel.sh; its
hand-maintained plain theme seed (audio-panel-theme/style.css) got the same
sizing tweaks by hand since the regen script doesn't touch it.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TkkH9eiCBfpWysUXAD9bDG
A new layer-shell mixer panel with four tabs (Applications / Input Devices /
Output Devices / General Settings): per-app and per-device volume meters with
an independent left/right toggle, mute, live parec-based amplitude bars (so a
silent stream is visually distinct from a quiet one), output-device routing,
card profile switching (pro-audio vs stereo duplex etc.), and default-device
pickers. Backed by pactl -f json + pactl subscribe over pipewire-pulse
(verified against this box's real pactl; wpctl was dropped for lacking
per-channel volume and profile verbs).
hyprdrive gets the hologram-styled original (supersonic-booster); hyprlua's
plain-themed audio-panel is generated by a new
desktopenvs/hyprlua/scripts/regen-audio-panel.sh, extending the existing
regen-beacon.sh derivation pattern rather than hand-duplicating the app.
Wired into both DEs: Super+Shift+S keybind, autostart, config-updater,
apply-theme.sh, and the respective bars (station-bar's volume badge now opens
the panel; eww/eww-touch/eww-nobattery's volume slider does too, replacing
the old pavucontrol launch).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TkkH9eiCBfpWysUXAD9bDG