fix(home): easyeffects waits for a live tray host, not waybar.service
Some checks failed
Check / eval (push) Failing after 4m10s

The tray-race guard (wwmm/easyeffects#4636) ordered the unit
After=waybar.service — inert here: Nomarchy's waybar runs from the
nomarchy-waybar supervisor (Hyprland exec-once), never as a systemd
unit, so the icon vanished whenever easyeffects won the boot race
(seen on TuringMachine 2026-07-11). Gate ExecStartPre on the SNI
watcher's IsStatusNotifierHostRegistered with a 30s timeout, non-fatal
so audio processing still starts on tray-less setups.

Also: #89 inventory narrowed by Bernardo's visual verdict — Telegram/
ZapZap fine; offenders are EasyEffects (slice 2) and Signal (slice 3).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-11 19:28:55 +01:00
parent dbc7741f58
commit 6967d8973c
2 changed files with 27 additions and 3 deletions

View File

@@ -41,14 +41,29 @@
# Microphone noise cancellation (rnnoise) and audio EQ.
# Tray icon is built into EasyEffects 8 (Qt StatusNotifierItem); the
# daemon must start after a tray host (Waybar) or the icon is missing
# for the whole session (wwmm/easyeffects#4636).
# daemon must start after a tray HOST is live or the icon is missing
# for the whole session (wwmm/easyeffects#4636). After=waybar.service
# was inert — Nomarchy's waybar runs from the nomarchy-waybar
# supervisor (Hyprland exec-once), not a systemd unit, so the race was
# a boot-order coin flip (lost on TuringMachine 2026-07-11). Gate on
# the watcher's IsStatusNotifierHostRegistered instead; the `-` prefix
# lets EasyEffects still start after the timeout on tray-less setups —
# audio processing must not hinge on an icon.
services.easyeffects.enable = true;
systemd.user.services.easyeffects = {
Unit = {
After = [ "graphical-session.target" "tray.target" "waybar.service" ];
After = [ "graphical-session.target" "tray.target" ];
Wants = [ "tray.target" ];
};
Service.ExecStartPre = "-${pkgs.writeShellScript "wait-for-tray-host" ''
timeout 30 ${pkgs.bash}/bin/sh -c '
until ${pkgs.systemd}/bin/busctl --user get-property \
org.kde.StatusNotifierWatcher /StatusNotifierWatcher \
org.kde.StatusNotifierWatcher IsStatusNotifierHostRegistered \
2>/dev/null | ${pkgs.gnugrep}/bin/grep -q true; do
sleep 0.5
done'
''}";
};
# Wifi from the bar: nm-applet lives in waybar's tray (SNI flag via