- Debounce stop transitions by 1 s (host update tick): a stop/start pair
from switching casts collapses into no transition, so the async
`dnd-set off` can no longer race the `dnd-status` query and drop
ownership mid-share. Also stops DND flapping.
- Add onExit: if the plugin owns DND when disabled/reloaded, turn it off
via a detached runAsync (survives VM teardown).
- Gate detection on NIRI_SOCKET + commandExists("niri") instead of an
unconditional retry loop: on other compositors (or niri installed but
not running) the service now spawns nothing. If NIRI_SOCKET is set but
the binary is missing from PATH, warn once.
- Make the stream retry loop self-terminating (parent gone or niri
socket removed): hard host exits skip process-group cleanup and were
leaking orphaned loops that respawned `niri msg` every 3 s across
sessions (observed 11 such orphans over 4 days).
- Bump version to 1.1.0.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The previous implementation has a bug when terminating noctalia's runStream function. Somehow, it doesn't want to spawn again after sometimes. This commit change the implementation to use a temporary file and read the command's output from there
Headless service that follows niri msg -j event-stream and enables
notification Do Not Disturb via the host IPC (notification-dnd-set)
while at least one screencast is active, restoring it afterwards.
Side effects: spawns a persistent shell retry loop around
`niri msg -j event-stream`, runs `niri msg -j casts` /
`niri msg version` and `noctalia msg notification-dnd-*` on demand.
No network access, no filesystem writes.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>