A CLI and Omarchy control panel for Sennheiser Momentum 4 headphones. The panel shows the headset battery and firmware version, the Bluetooth codec and sample rate PipeWire is using, and controls:
- Noise control: transparency (off, adaptive or a custom level) and anti-wind
- Sound: sound mode (graphic EQ or Speech Clarity), bass boost, the equaliser's presets and band sliders, and the Bluetooth codec. Like Smart Control, the panel disables bass boost and the equaliser under Speech Clarity
- Behaviour: Smart Pause, on-head detection, auto-answer, Comfort Call, touch controls, auto power off, and whether apps that use the headset mic can move it to the mono call profile
- Omarchy Quattro, for the panel
bluetoothctl, frombluez-utilspactl, fromlibpulse, to show and switch the codecwpctl, fromwireplumber, for the call profile switch- A paired and connected Sennheiser Momentum 4
The headset protocol is reverse-engineered and features may vary with firmware. Settings the firmware rejects are hidden in the panel. Neither the CLI nor the panel implements firmware updates, factory resets, or undocumented commands.
Install momentum-bin or momentum-git from the AUR, or a package from the
releases.
momentum status
momentum set transparency 40
momentum set eq-preset harman
momentum set eq -3.5 -0.5 2.5 -0.5 -0.5
momentum set sound-mode speech
momentum set codec aac
momentum set call-profile-switch off
momentum --helpThe CLI finds the first connected Bluetooth device named MOMENTUM. Set
MOMENTUM_ADDRESS to pick one by address instead.
These are PipeWire settings on the PC, not headset ones. Picking a codec
switches the headset to its A2DP profile, which also leaves the call profile.
The call profile switch is WirePlumber's
bluetooth.autoswitch-to-headset-profile, saved with wpctl, so it applies to
every Bluetooth headset. With it off, music stays in high quality but calls
use another mic.
The headset has five bands, labelled 63 Hz, 250 Hz, 1 kHz, 4 kHz and 8 kHz in Smart Control. Gains are in dB, in tenths. The presets are Smart Control's eight, plus a Harman preset fitted from AutoEq's Momentum 4 corrections. The curve is stored on the headset, so it carries over to other devices.
Install the momentum CLI first. Review the plugin, then install it:
omarchy plugin add https://github.com/timmo001/omarchy-momentumctl.gitFor an unattended install from a repository you already trust:
omarchy plugin add \
https://github.com/timmo001/omarchy-momentumctl.git \
--enable --yesOpen the panel through its shell IPC target:
omarchy-shell shell toggle timmo.momentumctlBind that command to a desktop hotkey for direct access.
In the panel, Up and Down move between controls, Enter activates the selected one, and Left and Right change the selected choice, level, preset or band. Enter on a band's value resets it to 0 dB. Type to filter the controls, and press Escape to clear the filter or close the panel.
omarchy plugin update timmo.momentumctlomarchy plugin remove timmo.momentumctlmise run build # compile dist/momentum
mise run check # CLI tests, lint, types and formatting
mise run check:plugin # plugin manifest and QMLThe headset protocol is reverse-engineered by the community and is not an official Sennheiser API. This project builds on:
- omarchy-momentum4 by
Daniel Smith (MIT), whose
PROTOCOL.mddocuments the GAIA commands used here, and whosepresets.jsonsupplies Smart Control's EQ preset values. - momentum4-control by f3Y0 (MIT), the source of the protocol constants and the RFCOMM channel-probing approach.
- momentumctl by Galen Abell (MIT),
which the panel used before the
momentumCLI, and the source of the battery, on-head, auto-answer, Smart Pause and Comfort Call command IDs. - AutoEq by Jaakko Pasanen, with Momentum 4 measurements from RTINGS and oratory1990, for the Harman preset.
