nova-shell/modules/Notifications.qml
2026-04-11 00:22:09 +02:00

69 lines
1.8 KiB
QML

import QtQuick
import Quickshell.Io
import "." as M
Row {
id: root
spacing: 4
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) {}
}
}
}
Text {
text: {
if (root.inhibited)
return root.count > 0 ? "󰂛" : "󰪑";
if (root.dnd)
return root.count > 0 ? "󰂠" : "󰪓";
return root.count > 0 ? "󱅫" : "󰂜";
}
color: M.Theme.base05
font.pixelSize: M.Theme.fontSize + 2
font.family: M.Theme.fontFamily
anchors.verticalCenter: parent.verticalCenter
}
Text {
text: root.count > 0 ? String(root.count) : ""
color: M.Theme.base05
font.pixelSize: M.Theme.fontSize
font.family: M.Theme.fontFamily
anchors.verticalCenter: parent.verticalCenter
}
TapHandler {
acceptedButtons: Qt.LeftButton
onTapped: {
clicker.command = ["swaync-client", "--toggle-panel", "--skip-wait"];
clicker.running = true;
}
}
TapHandler {
acceptedButtons: Qt.RightButton
onTapped: {
clicker.command = ["swaync-client", "--toggle-dnd", "--skip-wait"];
clicker.running = true;
}
}
Process {
id: clicker
}
}