import QtQuick import Quickshell.Io import "." as M M.BarSection { id: root spacing: M.Theme.moduleSpacing tooltip: { const parts = [root.count + " notification" + (root.count !== 1 ? "s" : "")]; if (root.dnd) parts.push("Do not disturb"); if (root.inhibited) parts.push("Inhibited"); return parts.join("\n"); } property int count: 0 property bool dnd: false property bool inhibited: false Process { id: sub running: true command: ["swaync-client", "--subscribe-waybar"] stdout: SplitParser { splitMarker: "\n" onRead: line => { try { const d = JSON.parse(line); const cls = d.class ?? ""; root.count = d.count ?? 0; root.dnd = cls.includes("dnd"); root.inhibited = cls.includes("inhibited"); } catch (e) {} } } } M.BarIcon { icon: { if (root.inhibited) return root.count > 0 ? "\uDB80\uDC9B" : "\uDB82\uDE91"; if (root.dnd) return root.count > 0 ? "\uDB80\uDCA0" : "\uDB82\uDE93"; return root.count > 0 ? "\uDB84\uDD6B" : "\uDB80\uDC9C"; } color: root.count > 0 ? M.Theme.base0D : (root.dnd ? M.Theme.base04 : M.Theme.base0D) anchors.verticalCenter: parent.verticalCenter } M.BarLabel { label: root.count > 0 ? String(root.count) : "" color: M.Theme.base0D anchors.verticalCenter: parent.verticalCenter } TapHandler { acceptedButtons: Qt.LeftButton cursorShape: Qt.PointingHandCursor onTapped: { clicker.command = ["swaync-client", "--toggle-panel", "--skip-wait"]; clicker.running = true; } } TapHandler { acceptedButtons: Qt.RightButton cursorShape: Qt.PointingHandCursor onTapped: { clicker.command = ["swaync-client", "--toggle-dnd", "--skip-wait"]; clicker.running = true; } } Process { id: clicker } }