Omahub
← All plugins
S

Advanced Audio Control

by ssupt

Advanced PipeWire and WirePlumber audio mixer for Omarchy: devices, multi-output groups, Bluetooth codecs, safety policies, microphone privacy, audio scenes, persistent routing rules, graph and service diagnostics, channel tests, support reports, and guarded recovery

Security review

Potentially dangerous behavior detected · 13 findings

Deterministic scan — not a security guarantee

High
Risk level
High
Analyzed commit
98d2dc6
Scanned
2 days ago

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

Language-model assessment · ~deepseek/deepseek-v4-flash-latest — advisory only

Low
AI risk level
Low
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
98d2dc6
Reviewed
2 days ago

Independent review: low. The deterministic scan's high/medium findings come from GitHub Actions package installation, test-only systemd-run calls, and optional packaging/systemd units; none of these execute automatically during a normal plugin install or runtime. The plugin is a QML interface backed by a local Rust PipeWire service with no network dependencies, and the shell invocations found are user-initiated diagnostic helpers rather than install-time or background actions.

  • The high persistence flags refer to optional systemd unit files and integration-test use of systemd-run; these are not auto-installed or executed as part of normal plugin use, though a user who explicitly runs the helper script would create a user-level systemd service.
  • The runtime ships a native backend binary; the repository includes build/consistency checks via backend-release.json and build-release.py, but the binary itself was not in the provided sample and should match the reviewed source at publication.
  • Speaker-test and audio-recovery helpers run /bin/bash scripts, but they are only triggered by explicit user action in the diagnostics panel and recovery is confirmation-gated.
How this check works

This review combines the deterministic scan (the rule-based results above) with an independent look at the plugin's code by a language model. The model reads a trimmed sample of the repository's files, the manifest, and the README, then gives a plain-language risk level and a recommendation: install (no notable danger), review (look closer first), or avoid (clearly dangerous).

It runs on the same analyzed commit as the deterministic scan and is strictly advisory — it is not a security guarantee and never blocks a plugin by itself. A human moderator still reviews plugins before they are listed.

AI advisory only — automated analysis, not a security guarantee.

Install
$ omarchy plugin add https://github.com/ssupt/omarchy-audio-control --enable
Hardware #bar #quickshell #media

Advanced Audio Control for Omarchy

Advanced Audio Control brings persistent routing, saved setups, and device controls to Omarchy's audio panel.

Choose which output or microphone each application uses, play through several outputs together, and restore saved device settings. Keep Omarchy's familiar quick mixer for everyday volume changes, with an advanced window for profiles, Bluetooth modes, microphone testing, and diagnostics.

Useful when you regularly switch between speakers, headphones, USB audio devices, or different setups for music and calls.

What it adds to Omarchy

Compared with the stock audio panel in Omarchy 4.0.4:

Stock panel Advanced Audio Control adds
Output, microphone, and application volume; device selection A quick mixer plus persistent output and microphone choices for each application
Current device controls Saved scenes for defaults, volume, balance, ports, and profiles
One selected output Groups of two to eight outputs, each with its own volume control

For example:

  • Send music to the speakers while a call uses headphones: set each application's output to Always use its chosen device.
  • Save a Desk scene with USB speakers and a desk microphone, and a Headphones scene for private listening; restore either setup from the advanced window.
  • With Advanced Bluetooth Audio, let a headset reconnect without replacing your microphone: choose Manual or Output under Audio on connect for that device.

Screenshots

<table> <tr><th>Quick mixer</th><th>Advanced window</th></tr> <tr> <td valign="top"><a href="screenshot-mixer.png"><img src="screenshot-mixer.png" width="348" alt="Quick mixer with device, microphone and application volume controls"></a></td> <td valign="top"><a href="screenshot-advanced.png"><img src="screenshot-advanced.png" width="684" alt="Advanced window with device profiles, balance, microphone test and settings tabs"></a></td> </tr> </table>

Everyday controls

Action Control
Open mixer Left-click the audio icon or press Super+Ctrl+A
Change output volume Scroll over the audio icon
Mute microphone Middle-click the audio icon
Mute all audio Right-click the audio icon
See microphone users Hover over the audio icon
Open advanced window Select the mixer gear

For an application, Follow default output clears a saved destination; Always use keeps the chosen device across restarts. Recording applications can also stay pinned to a microphone. The advanced window also offers device aliases and favorites, stereo balance, supported Bluetooth modes, microphone activity and a five-second record-and-playback test, speaker identification, audio recovery, and diagnostics.

An output group can drift when its devices use separate clocks, especially with Bluetooth. Microphone tests start only when requested; clips stay in memory until discarded or until the advanced window closes.

Install

Requires Omarchy Quattro on x86_64 Linux, PipeWire and WirePlumber, with Omarchy's usual audio and desktop tools. Installation needs no Rust toolchain.

omarchy plugin add https://github.com/ssupt/omarchy-audio-control.git --enable

Update or remove it:

omarchy plugin update ssupt.audio-control
omarchy plugin remove ssupt.audio-control

Disabling or removing the plugin restores Omarchy's built-in audio widget. To add Setup > Audio to the menu, run:

~/.config/omarchy/plugins/ssupt.audio-control/scripts/audio-menu-entry install

Use the same helper with remove before removing the plugin.

Saved settings

Settings live under ~/.config/omarchy (or $XDG_CONFIG_HOME/omarchy). Existing files and supported schemas are preserved.

File What it remembers
audio-control.json Output boost and capture notifications
audio-preferences.json Preferred devices and Bluetooth profiles, shared with the Bluetooth companion
audio-rules.json Application rules, device preferences, and output groups
audio-scenes.json Saved scenes

Service architecture

The interface uses Quickshell/QML. A Rust service keeps saved choices and in-progress changes alive when a panel closes or reloads. It coordinates audio changes with PipeWire and WirePlumber, then reports whether each requested change was confirmed, rejected, or left uncertain. The service controls audio; PipeWire still carries and mixes the sound.

A controlled test against 0.8.1 measured over 99% less CPU with the advanced window open, using about 3 MiB more memory.

If your Omarchy configuration directory is a symlink, restart the audio service after retargeting it so file watches follow the new location.

Contributing

Edit qml/, backend/src/, and scripts/; runtime/ contains generated QML. Use Text.PlainText for labels; external names and saved text can contain markup. Builds require Rust/Cargo 1.85+, libclang, pkg-config, and PipeWire and libpulse headers. Node.js, Python, jq, and Qt/Quickshell run the tests.

./test/all
python3 packaging/build-release.py --output /tmp/omarchy-audio-release
python3 packaging/build-release.py --check /tmp/omarchy-audio-release
omarchy-plugin-validate /tmp/omarchy-audio-release

Use a fresh directory outside the live plugin for each candidate. Commit the matching binary, release metadata, manifest, and generated runtime when changing runtime sources. CI also runs native audio, lifecycle, and upgrade tests under test/integration/ with private audio devices and configuration.

For testing outside the shell, scripts/audio-rust-backend install and uninstall manage an optional systemd user service.

The Bluetooth companion calls default.compat with a node ID and name; the service verifies the live endpoint and reports the outcome. Both plugins share audio-preferences.json, while compatibility helpers support older companions. Coordinate releases when changing that shared contract.

MIT license, matching Omarchy's original audio widget. More plugins: omarchy-plugins.