From bb595d78ee63198f3e8d7fede62f88c54f4a77b5 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Mon, 19 Oct 2026 10:12:33 +0200 Subject: notifications: quiet mode silences notification sounds too Quiet muted only the Claude and opencode hooks, which play their own sounds and check the flag themselves. With notification sounds it now means no sound at all while the balloons still show, so the balloon player reads status.quiet the way Notify reads status.dnd, without instantiating Status. A per-app quiet list was left out: the mute list already covers an app that should make no sound. Co-Authored-By: Claude Opus 5.5 --- notifications/Balloons.qml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'notifications/Balloons.qml') diff --git a/notifications/Balloons.qml b/notifications/Balloons.qml index abeb13a..8574f9d 100644 --- a/notifications/Balloons.qml +++ b/notifications/Balloons.qml @@ -46,6 +46,19 @@ Scope { // silent. seen is rebuilt from the queue each time, so it never grows. property var seen: ({}) property bool primed: false + // Quiet mutes every sound and leaves the balloons, as it does for the + // Claude and opencode hooks. Read from the status registry's file, like + // Notify's dnd, so this shell never instantiates Status and its writes. + property bool quiet: false + FileView { + id: quietFile + path: (Quickshell.env("XDG_RUNTIME_DIR") || "/tmp") + "/status.quiet" + watchChanges: true + printErrors: false + onFileChanged: reload() + onLoaded: root.quiet = quietFile.text().trim() === "1" + onLoadFailed: root.quiet = false + } Connections { target: Notify function onQueueChanged() { @@ -61,7 +74,7 @@ Scope { } root.seen = next; root.primed = true; - if (file !== "") { + if (file !== "" && !root.quiet) { // ponytail: one player, a new sound cuts the last; a queue of // sounds if bursts ever need every one heard. player.command = ["pw-play", file]; -- cgit v1.2.3