Omahub
← All plugins
R

Nothing Audio

by r-witz

Nothing earbuds and headphones in the Omarchy bar: battery, noise control, codec selection, and low-latency mode.

Security review

No obvious issues detected

Deterministic scan — not a security guarantee

None
Risk level
None
Analyzed commit
589e838
Scanned
1 week ago

No potentially dangerous behavior detected in the analyzed commit.

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

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

None
AI risk level
None
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
589e838
Reviewed
1 week ago

The plugin is a QML bar widget plus a short-lived Python helper that talks to Nothing earbuds over Bluetooth RFCOMM. The code is readable, uses subprocess with argument lists rather than shell, and performs no install-time or hidden destructive actions. The deterministic scan found no issues, and I found no dangerous behavior in the sampled files.

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/r-witz/omarchy-nothing-ear --enable
Hardware #bar #quickshell #media

Nothing Audio for Omarchy

An Omarchy bar widget for Nothing earbuds and headphones: battery, noise control, audio codec, and low latency mode. Tested on Nothing Ear and Nothing Headphone (1). It speaks the Nothing X protocol over Bluetooth RFCOMM through a small Python helper, so there is no daemon and no dependencies beyond bluetoothctl and pactl.

<p align="center"> <img src="docs/screenshot.png" width="420" alt="The Nothing Audio panel: per-earbud and case battery, noise-control chips with Adaptive selected, codec chips with LDAC selected, and a low-latency toggle"> </p>

Features

  • Left, right, and case battery for earbuds, one headset battery for Headphone (1), with a charging pulse on the meter
  • Noise control: Off, Transparency, Adaptive, Low, Medium, High
  • Low latency mode on devices that expose it
  • Audio codec, limited to what your laptop can actually negotiate
  • Falls back to the single Bluetooth percentage if the Nothing control channel is busy

The case only reports while it is open. Once it closes, the last reading stays on screen, dimmed, for 6 hours.

Install

omarchy plugin add https://github.com/r-witz/omarchy-nothing-ear --enable
omarchy bar move io.github.r-witz.nothing-ear

Pair the device through the normal Bluetooth panel first. The helper picks the first connected device whose name contains Nothing, Ear, or CMF.

Settings

Key Default What it does
hideWhenDisconnected true Hide the icon while the device is away. An error keeps it visible.
deviceAddress "" Pin a Bluetooth address, for when several matching devices are paired.
helperPath "" Use a different nothing-earctl.py. Empty uses the bundled one.

Controls

Left click opens the panel, right click cycles noise control.

Key Action
j k ↓ ↑ Move between groups
h l ← → Move between options
Enter Space Activate
o t a Off, Transparency, Adaptive
Shift+L m Shift+H Low, Medium, High ANC
g Toggle low latency
c Cycle codec
r Refresh
Esc Close

Plain h and l walk the chips, so the ANC levels take the shifted letters.

The panel is also scriptable: omarchy-shell nothing-ear toggle|refresh|noise|codec|status.

Codecs

Codec options come from PipeWire's real A2DP card profiles, so a codec your laptop cannot negotiate never appears. Switching one may briefly interrupt audio while PipeWire renegotiates the stream.

The device reports a vendor codec mode of its own. The plugin reads it for diagnostics but never writes it, because the firmware can acknowledge a value without applying it. The host side is what actually changes the stream.

Helper

nothing-earctl.py is the only part that touches the hardware, and it only runs for the length of one call:

./nothing-earctl.py status
./nothing-earctl.py set-anc transparency
./nothing-earctl.py set-latency on
./nothing-earctl.py set-codec ldac

Each call prints one line of JSON. status always prints a full snapshot and exits 0; the connected and protocol fields say which state the device is in.

Remove

omarchy plugin remove io.github.r-witz.nothing-ear
rm -rf "${XDG_STATE_HOME:-$HOME/.local/state}/nothing-ear"

License

MIT. Nothing, Nothing Ear, and Nothing X are trademarks of Nothing Technology Limited. This project is unofficial.