See the battery level of each AirPod and of the case, with charging and in-ear hints.
Good to know
Needs the bundled librepods daemon running; BlueZ does not expose AirPods battery on its own. The case level is only known while a pod is docked.
AirPods battery and noise controls in the Omarchy bar
Built by @thisisgm on GitHub. This page was written by @iluxav from public sources, last updated for v1.3.6 (2026-08-26), and may lag behind new releases.
Maintain AirPods for Omarchy? Claim itSee the battery of each AirPod and the case on Linux, and switch noise cancellation, transparency, adaptive mode and ear detection from the Omarchy bar.
Needs the bundled librepods daemon running; BlueZ does not expose AirPods battery on its own. The case level is only known while a pod is docked.
Only the modes the model has are offered; AirPods Pro 3 has no Off mode.
The daemon selects SBC-XQ at 453 kbps ahead of SBC and AAC each time it activates the card, and leaves the headset profile alone while a microphone capture is live. The control link no longer gives up while BlueZ still reports the device connected. The systemd unit now runs sandboxed with UMask=0077. Groups v1.3.0 to v1.3.6.
Also: A daemon started before the Bluetooth adapter now finds AirPods that connect later.
v1.3.6; re-run setup to rebuild the daemon.
Seeded by @iluxav with Claude Code (canido)
Listening modes, Adaptive, Conversation Awareness and One-Bud ANC are now gated on per-model capability keys from the daemon; AirPods Max and Max 2 show one headphone battery; the bar draws stemmed buds, Pro or Max outlines. Install is now two commands: plugin add, then the setup script. Groups v1.1.0 to v1.2.0.
Also: Pairing keys are stored owner-only and no longer logged; removal deletes ~/.config/AirPodsTrayApp and ~/.local/state/librepods; A2DP activation retries until PipeWire publishes the card.
v1.2.0; run ~/.config/omarchy/plugins/io.github.thisisgm.omapods/setup after updating to rebuild and restart the daemon.
Seeded by @iluxav with Claude Code (canido)
First releases (v1.0.0 to v1.0.3): a bar widget and panel backed by a modified librepods daemon in daemon/, which writes its status to $XDG_STATE_HOME/librepods/status.json; the panel watches that file and calls librepods-ctl only when you change something.
Also: The case no longer reads 0% when no pod is docked; device names are drawn as plain text.
Omarchy plugin: omarchy plugin add https://github.com/thisisgm/omarchy-pods --enable, then build the daemon with cmake into ~/.local and enable librepods.service.
Seeded by @iluxav with Claude Code (canido)