Luigit
repositories / dotfiles

dotfiles

bugabingas dorkfiles

owned by admin

quickshell/nuguland/.system/specs/NL-SPEC-5F4166AF-audio-popup/index.md

Raw
Rendered preview

id: NL-SPEC-5F4166AF type: spec title: Audio popup

Audio popup

Behavior

  • The popup presents lowercase output and input sections backed by current PipeWire devices.
  • Each device row shows a speaker or microphone state glyph, device name, volume slider, and percentage from 0% through 150%.
  • Muted rows show a muted glyph and reduced emphasis.
  • Default devices use selected card border and fill without an exposed accent sliver.
  • Clicking or dragging a slider changes volume; middle click toggles mute.
  • Selecting a device name makes it the default output or input.
  • Empty sections remain valid.
  • The bar privacy indicator reports microphone and camera activity with a lowercase label.

Constraints

  • PipeWire remains the authoritative audio boundary.
  • Volume is clamped to 0 through 1.5.
  • Missing names use a stable fallback; missing default devices produce no selected row.
  • Existing audio, privacy, routing, and self-test IPC remains available.
  • State retains consumed sinks, sources, streams, default IDs, privacy, and action results.
  • State excludes backend narration and unused shader descriptions.
  • Existing stream routing remains available, but no new routing UI is required.

Acceptance

  • Pure tests cover volume boundaries, percentages, name precedence, mute and role state, privacy combinations, row shaping, glyphs, and ID lookup.
  • Runtime self-test passes.
  • Live checks confirm privacy, volume routes, sliders, mute, and default selection.
  • The popup uses shared controls and contains no audio card accent sliver.
---
id: NL-SPEC-5F4166AF
type: spec
title: Audio popup
---

# Audio popup

## Behavior

- The popup presents lowercase `output` and `input` sections backed by current PipeWire devices.
- Each device row shows a speaker or microphone state glyph, device name, volume slider, and percentage from 0% through 150%.
- Muted rows show a muted glyph and reduced emphasis.
- Default devices use selected card border and fill without an exposed accent sliver.
- Clicking or dragging a slider changes volume; middle click toggles mute.
- Selecting a device name makes it the default output or input.
- Empty sections remain valid.
- The bar privacy indicator reports microphone and camera activity with a lowercase label.

## Constraints

- PipeWire remains the authoritative audio boundary.
- Volume is clamped to 0 through 1.5.
- Missing names use a stable fallback; missing default devices produce no selected row.
- Existing audio, privacy, routing, and self-test IPC remains available.
- State retains consumed sinks, sources, streams, default IDs, privacy, and action results.
- State excludes backend narration and unused shader descriptions.
- Existing stream routing remains available, but no new routing UI is required.

## Acceptance

- Pure tests cover volume boundaries, percentages, name precedence, mute and role state, privacy combinations, row shaping, glyphs, and ID lookup.
- Runtime self-test passes.
- Live checks confirm privacy, volume routes, sliders, mute, and default selection.
- The popup uses shared controls and contains no audio card accent sliver.