Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-5255GitHub issuePublicReceived

omarchy-audio-output-sink fails to resolve through EasyEffects DSP sink — volume keys change nothing audible

Reported by hermeticvm · filed Oct 8, 2026Closed upstream on 2026-10-08 by its own reporter hermeticvm. GitHub close reason: completed. Closed by its own reporter — not by itself evidence of a fix.

Received and recorded verbatim. Nothing has been checked yet.

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?
Not yet mapped to any requirement or component.
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?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.

Original report

omarchy-audio-output-sink fails to resolve through EasyEffects DSP sink — volume keys change nothing audiblerevision 1 · captured 2026-10-08 22:53 UTC via poll

Summary

omarchy-audio-output-sink fails to resolve through EasyEffects' virtual sink to the physical device, because EasyEffects feeds its output device through native PipeWire links, which never appear as PulseAudio sink-inputs. The resolver's only downstream detection (pactl list sink-inputs) finds nothing and falls back to the DSP sink itself (per its own fallback comment), so volume keys / audio panel change the DSP input volume: the OSD moves, loudness does not.

Environment

  • Omarchy 4.0.4-1, Arch, Hyprland
  • EasyEffects 8.2.9-1, PipeWire 1:1.6.8-1, WirePlumber 0.5.17-1
  • Hardware: HONOR MagicBook Art 14 2024 (Core Ultra 7 155H, Meteor Lake)
  • Default sink: easyeffects_sink → physical alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Speaker__sink

Steps to reproduce

  1. Install EasyEffects, enable any effect chain, let it own the output (default sink becomes easyeffects_sink).
  2. Play audio (e.g. a YouTube video).
  3. Press the volume keys (bound to omarchy-audio-output-volume raise|lower, which calls omarchy-audio-output-sink).

What happens

  • OSD shows a percentage that steps ±5.
  • pactl get-sink-volume easyeffects_sink changes; the physical speaker sink volume does not.
  • Loudness is unchanged — captured the Speaker monitor while toggling the DSP sink between 40% and 90%: RMS bit-identical, no observable signal change anywhere in the chain.

Root cause in omarchy-audio-output-sink: the downstream lookup only parses pactl list sink-inputs for a stream whose node.name starts with the virtual sink or whose application.name is "EasyEffects". During EasyEffects playback:

$ pactl list sink-inputs
Sink Input #6120
	Sink: 6004   # the playing app -> easyeffects_sink
	application.name = "Brave"

The app's stream into easyeffects_sink is the only sink-input. EasyEffects → physical device is connected via native PipeWire links (visible in pw-cli ls Link / pw-dump: easyeffects_sink (node 146) → EE chain nodes → alsa_output...HiFi__Speaker__sink (node 58)) — invisible to pactl list sink-inputs. So downstream stays empty and the script hits its fallback: "Nothing resolvable downstream — fall back to the sink itself."

What I expected

The resolver to find alsa_output...HiFi__Speaker__sink and the keys to move real loudness — the behavior its header documents ("Resolve through it to the physical sink it feeds").

Suggested fix

Resolve the downstream via the PipeWire graph instead of pulse sink-inputs: from the default sink's node, BFS pw-dump link objects (link.output.node → link.input.node) downstream until reaching a node named alsa_output.*. Links exist whenever audio flows through the chain. (For idle keypresses with links torn down, caching the last resolved physical sink — or falling back to the sole non-HDMI alsa_output.* — covers it.)

I implemented this as a user-side wrapper (~/.local/bin/omarchy-user-audio-volume + keybind overrides in ~/.config/hypr/bindings.lua) rather than patching /usr/share, per Omarchy policy. Measured: Speaker volume steps 70→75→70 with EE sink untouched, and toggling the Speaker gain scales the monitored output as expected. Happy to turn it into a PR against omarchy-audio-output-sink if the approach sounds right.

Diagnostics

omarchy-debug --no-sudo --print log: https://logs.omarchy.org/mszh9c (auto-expires in 24 h).
Repro is purely config-level (EasyEffects default output) — no special hardware steps needed.

View raw text
# Summary

`omarchy-audio-output-sink` fails to resolve through EasyEffects' virtual sink to the physical device, because EasyEffects feeds its output device through **native PipeWire links**, which never appear as PulseAudio sink-inputs. The resolver's only downstream detection (`pactl list sink-inputs`) finds nothing and falls back to the DSP sink itself (per its own fallback comment), so volume keys / audio panel change the DSP input volume: the OSD moves, loudness does not.

# Environment

- Omarchy 4.0.4-1, Arch, Hyprland
- EasyEffects 8.2.9-1, PipeWire 1:1.6.8-1, WirePlumber 0.5.17-1
- Hardware: HONOR MagicBook Art 14 2024 (Core Ultra 7 155H, Meteor Lake)
- Default sink: `easyeffects_sink` → physical `alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Speaker__sink`

# Steps to reproduce

1. Install EasyEffects, enable any effect chain, let it own the output (default sink becomes `easyeffects_sink`).
2. Play audio (e.g. a YouTube video).
3. Press the volume keys (bound to `omarchy-audio-output-volume raise|lower`, which calls `omarchy-audio-output-sink`).

# What happens

- OSD shows a percentage that steps ±5.
- `pactl get-sink-volume easyeffects_sink` changes; the physical speaker sink volume does not.
- Loudness is unchanged — captured the Speaker monitor while toggling the DSP sink between 40% and 90%: RMS bit-identical, no observable signal change anywhere in the chain.

Root cause in `omarchy-audio-output-sink`: the downstream lookup only parses `pactl list sink-inputs` for a stream whose `node.name` starts with the virtual sink or whose `application.name` is "EasyEffects". During EasyEffects playback:

```
$ pactl list sink-inputs
Sink Input #6120
	Sink: 6004   # the playing app -> easyeffects_sink
	application.name = "Brave"
```

The app's stream into `easyeffects_sink` is the only sink-input. EasyEffects → physical device is connected via native PipeWire links (visible in `pw-cli ls Link` / `pw-dump`: `easyeffects_sink` (node 146) → EE chain nodes → `alsa_output...HiFi__Speaker__sink` (node 58)) — invisible to `pactl list sink-inputs`. So `downstream` stays empty and the script hits its fallback: "Nothing resolvable downstream — fall back to the sink itself."

# What I expected

The resolver to find `alsa_output...HiFi__Speaker__sink` and the keys to move real loudness — the behavior its header documents ("Resolve through it to the physical sink it feeds").

# Suggested fix

Resolve the downstream via the PipeWire graph instead of pulse sink-inputs: from the default sink's node, BFS `pw-dump` link objects (`link.output.node` → `link.input.node`) downstream until reaching a node named `alsa_output.*`. Links exist whenever audio flows through the chain. (For idle keypresses with links torn down, caching the last resolved physical sink — or falling back to the sole non-HDMI `alsa_output.*` — covers it.)

I implemented this as a user-side wrapper (`~/.local/bin/omarchy-user-audio-volume` + keybind overrides in `~/.config/hypr/bindings.lua`) rather than patching /usr/share, per Omarchy policy. Measured: Speaker volume steps 70→75→70 with EE sink untouched, and toggling the Speaker gain scales the monitored output as expected. Happy to turn it into a PR against `omarchy-audio-output-sink` if the approach sounds right.

# Diagnostics

`omarchy-debug --no-sudo --print` log: https://logs.omarchy.org/mszh9c (auto-expires in 24 h).
Repro is purely config-level (EasyEffects default output) — no special hardware steps needed.

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.

No decision has been recorded yet.