Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
SOF ThinkPad: no headphone autoswitch, stale HDMI default, MPRIS pause on jack, mute LED dark
Reported by JeffFlag · filed Sep 9, 2026 · open at source
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- AreaOutside the audited area· Decided by agents · verified
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
System details
ThinkPad X1 Carbon Gen 9 (20XWCTO1WW), Intel i7-1165G7, Iris Xe (i915), Intel SOF HDA DSP / Realtek ALC287 (sof-hda-dsp), Omarchy 4.0.3-1, Hyprland 0.56.2, PipeWire 1.6.8 + WirePlumber, kernel 7.2.3-arch1-3
What's wrong?
Stock Omarchy audio handling on Intel SOF laptops is not a single policy the way GNOME/Ubuntu is. Four reproducible bugs showed up together on this X1 Carbon Gen 9. They share one cause: Speaker and Headphones are exclusive UCM card profiles, the bar lists sinks of the active profile only, HDMI jack detect does not clear after unplug, and mute/LED/MPRIS are not wired together.
1. 3.5mm earphones plugged — no headphone device, no sound
amixer reports Headphone Jack: on and the Headphones port is available, but the active profile stays:
HiFi (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker)
The speaker-icon menu only lists Speaker + HDMI. Headphones is a different card profile, so there is no sink to select.
pactl list cards # Active Profile: … Speaker
pactl list sinks short # Speaker + HDMI*, no HeadphonesExpected: plug earphones → output switches to headphones (GNOME does this).
2. Unplug monitor + jack → output stuck on HDMI (“LG UltraWide”)
DRM shows eDP-1 connected and HDMI-A-1 / DP-* disconnected, but ALSA HDMI/DP,pcm=3 Jack stays on. PipeWire still marks HDMI1 available. With the Headphones profile active and the analog jack out, HDMI is the only “available” sink, so the default stays on a speakerless LG/AOC.
Expected: unplug the display → analog speakers; do not keep a stale HDMI sink as default.
3. Switching Speaker ↔ Headphones pauses Chromium and cliamp
Those two profiles are exclusive: switching destroys the previous sink. WirePlumber default linking.pause-playback = true then MPRIS-pauses players linked to the removed sink (org.mpris.MediaPlayer2.chromium.*, org.mpris.MediaPlayer2.cliamp).
Repro: play YouTube + cliamp on speakers, plug earphones → both pause and need resume. Unplug often continues (asymmetric).
Expected: jack plug/unplug does not pause media.
4. F1 mutes audio, ThinkPad mute LED stays dark
XF86AudioMute → omarchy-audio-output-volume mute-toggle mutes the PipeWire default sink. The lamp is platform::mute (thinkpad_acpi) with trigger [audio-mute], which follows ALSA Master, not PipeWire software mute. Mic-mute already has omarchy-brightness-keyboard-mute writing platform::micmute via brightnessctl. Speaker mute has no equivalent.
Expected: F1 mute lights platform::mute; unmute turns it off (same as Ubuntu on this hardware).
Stock gaps (why this is an Omarchy issue, not only kernel)
omarchy-audio-sink-availability/ the audio plugin list sinks, not analog jack / card profiles, so Headphones can never appear while Speaker is active.- No jack-driven profile switch (WirePlumber does not do it for these SOF HiFi profiles when HDMI is also “available”).
- HDMI availability is taken from the sticky ALSA jack, not DRM
connected. linking.pause-playbackis left on, so exclusive-profile switches pause MPRIS clients.- Output mute LED is not driven; mic mute LED is.
Suggested direction
- Treat analog jack as policy: Headphones if
Headphone Jackis on, else Speaker. Switch the SOF card profile; do not wait for a Headphones sink to exist in the Speaker profile. - Ignore HDMI as default unless DRM reports the connector
connected(do not trust ALSA HDMI jack on SOF). - Keep a stable default sink (or disable
linking.pause-playback) so apps do not see the physical node vanish. - Drive
platform::mutefrom PipeWire mute the same wayomarchy-brightness-keyboard-mutedrivesplatform::micmute.
A local workaround on this machine (user config only, not a PR yet): virtual sink omarchy.analog + systemd user router + HDMI nodes disabled + linking.pause-playback=false + brightnessctl --device=platform::mute. Happy to turn that into a PR if this is in scope.
Diagnostics
omarchy-debug --no-sudo --print: https://logs.omarchy.org/T2ubeA (expires 24h)- Card:
alsa_card.pci-0000_00_1f.3-platform-skl_hda_dsp_generic - Profiles:
HiFi (… Headphones …)priority 10300 vsHiFi (… Speaker)10200, bothavailable: yeswhen HDMI1 is stale-on. - No screenshot of the broken speaker menu: currently mitigated locally so the stock failure is not on screen.
Related: #5334 (jack hotplug on a different codec) is HDA powersave; this ThinkPad jack does report correctly — the missing piece is Omarchy/WirePlumber policy.
View raw text
### System details ThinkPad X1 Carbon Gen 9 (`20XWCTO1WW`), Intel i7-1165G7, Iris Xe (`i915`), Intel SOF HDA DSP / Realtek ALC287 (`sof-hda-dsp`), Omarchy 4.0.3-1, Hyprland 0.56.2, PipeWire 1.6.8 + WirePlumber, kernel 7.2.3-arch1-3 ### What's wrong? Stock Omarchy audio handling on Intel SOF laptops is not a single policy the way GNOME/Ubuntu is. Four reproducible bugs showed up together on this X1 Carbon Gen 9. They share one cause: **Speaker and Headphones are exclusive UCM card profiles**, the bar lists **sinks of the active profile only**, HDMI jack detect **does not clear** after unplug, and mute/LED/MPRIS are not wired together. #### 1. 3.5mm earphones plugged — no headphone device, no sound `amixer` reports `Headphone Jack: on` and the Headphones port is `available`, but the active profile stays: `HiFi (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker)` The speaker-icon menu only lists Speaker + HDMI. Headphones is a **different card profile**, so there is no sink to select. ``` pactl list cards # Active Profile: … Speaker pactl list sinks short # Speaker + HDMI*, no Headphones ``` Expected: plug earphones → output switches to headphones (GNOME does this). #### 2. Unplug monitor + jack → output stuck on HDMI (“LG UltraWide”) DRM shows `eDP-1` connected and `HDMI-A-1` / `DP-*` disconnected, but ALSA `HDMI/DP,pcm=3 Jack` stays **on**. PipeWire still marks HDMI1 `available`. With the Headphones profile active and the analog jack out, HDMI is the only “available” sink, so the default stays on a speakerless LG/AOC. Expected: unplug the display → analog speakers; do not keep a stale HDMI sink as default. #### 3. Switching Speaker ↔ Headphones pauses Chromium and cliamp Those two profiles are exclusive: switching **destroys** the previous sink. WirePlumber default `linking.pause-playback = true` then MPRIS-pauses players linked to the removed sink (`org.mpris.MediaPlayer2.chromium.*`, `org.mpris.MediaPlayer2.cliamp`). Repro: play YouTube + cliamp on speakers, plug earphones → both **pause** and need resume. Unplug often continues (asymmetric). Expected: jack plug/unplug does not pause media. #### 4. F1 mutes audio, ThinkPad mute LED stays dark `XF86AudioMute` → `omarchy-audio-output-volume mute-toggle` mutes the PipeWire default sink. The lamp is `platform::mute` (thinkpad_acpi) with trigger `[audio-mute]`, which follows **ALSA Master**, not PipeWire software mute. Mic-mute already has `omarchy-brightness-keyboard-mute` writing `platform::micmute` via `brightnessctl`. Speaker mute has no equivalent. Expected: F1 mute lights `platform::mute`; unmute turns it off (same as Ubuntu on this hardware). ### Stock gaps (why this is an Omarchy issue, not only kernel) - `omarchy-audio-sink-availability` / the audio plugin list **sinks**, not analog jack / card profiles, so Headphones can never appear while Speaker is active. - No jack-driven profile switch (WirePlumber does not do it for these SOF HiFi profiles when HDMI is also “available”). - HDMI availability is taken from the sticky ALSA jack, not DRM `connected`. - `linking.pause-playback` is left on, so exclusive-profile switches pause MPRIS clients. - Output mute LED is not driven; mic mute LED is. ### Suggested direction 1. Treat analog jack as policy: Headphones if `Headphone Jack` is on, else Speaker. Switch the SOF card profile; do not wait for a Headphones sink to exist in the Speaker profile. 2. Ignore HDMI as default unless DRM reports the connector `connected` (do not trust ALSA HDMI jack on SOF). 3. Keep a stable default sink (or disable `linking.pause-playback`) so apps do not see the physical node vanish. 4. Drive `platform::mute` from PipeWire mute the same way `omarchy-brightness-keyboard-mute` drives `platform::micmute`. A local workaround on this machine (user config only, not a PR yet): virtual sink `omarchy.analog` + systemd user router + HDMI nodes disabled + `linking.pause-playback=false` + `brightnessctl --device=platform::mute`. Happy to turn that into a PR if this is in scope. ### Diagnostics - `omarchy-debug --no-sudo --print`: https://logs.omarchy.org/T2ubeA (expires 24h) - Card: `alsa_card.pci-0000_00_1f.3-platform-skl_hda_dsp_generic` - Profiles: `HiFi (… Headphones …)` priority 10300 vs `HiFi (… Speaker)` 10200, both `available: yes` when HDMI1 is stale-on. - No screenshot of the broken speaker menu: currently mitigated locally so the stock failure is not on screen. Related: #5334 (jack hotplug on a different codec) is HDA powersave; this ThinkPad jack **does** report correctly — the missing piece is Omarchy/WirePlumber **policy**.
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
- Out of scopeDecided by agents · verified · 2026-10-09 11:21 UTC