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

@@ -75,6 +75,15 @@ Slices:
| Signal | `Signal_status_icon_1` (generated, not a real theme name) | yes | **pixmap** — slice 3 | | Signal | `Signal_status_icon_1` (generated, not a real theme name) | yes | **pixmap** — slice 3 |
| ZapZap | *(empty)* | yes | **pixmap** — slice 3; check its own tray-style setting first | | ZapZap | *(empty)* | yes | **pixmap** — slice 3; check its own tray-style setting first |
| EasyEffects 8 | `com.github.wwmm.easyeffects` (prior T14s finding) | — | **name-based**; NB `--gapplication-service` alone registers no SNI | | EasyEffects 8 | `com.github.wwmm.easyeffects` (prior T14s finding) | — | **name-based**; NB `--gapplication-service` alone registers no SNI |
**Bernardo's visual verdict (T14s, 2026-07-11):** Telegram and ZapZap
already read fine on the bar — out of scope. The offenders are
**EasyEffects** (slice 2: name-based override) and **Signal**
(slice 3: pixmap; check for an app-side tray option, else document).
Related fix shipped same day: easyeffects.service now *waits for a
registered tray host* before starting (the old After=waybar.service
ordering was inert — waybar is supervisor-run, not a unit), so the
icon no longer vanishes on unlucky boot order.
2. **Override layer:** an HM-managed shadow icon dir that wins the XDG 2. **Override layer:** an HM-managed shadow icon dir that wins the XDG
lookup for the session icon theme (e.g. `xdg.dataFile lookup for the session icon theme (e.g. `xdg.dataFile
"icons/<theme-iconset>/…"` shadowing the store copy, or a "icons/<theme-iconset>/…"` shadowing the store copy, or a

View File

@@ -41,14 +41,29 @@
# Microphone noise cancellation (rnnoise) and audio EQ. # Microphone noise cancellation (rnnoise) and audio EQ.
# Tray icon is built into EasyEffects 8 (Qt StatusNotifierItem); the # Tray icon is built into EasyEffects 8 (Qt StatusNotifierItem); the
# daemon must start after a tray host (Waybar) or the icon is missing # daemon must start after a tray HOST is live or the icon is missing
# for the whole session (wwmm/easyeffects#4636). # 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; services.easyeffects.enable = true;
systemd.user.services.easyeffects = { systemd.user.services.easyeffects = {
Unit = { Unit = {
After = [ "graphical-session.target" "tray.target" "waybar.service" ]; After = [ "graphical-session.target" "tray.target" ];
Wants = [ "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 # Wifi from the bar: nm-applet lives in waybar's tray (SNI flag via