quickshell and hyprland additions

This commit is contained in:
2026-03-15 13:56:00 +02:00
parent c9c27d1554
commit 1ad06b82a6
509 changed files with 68371 additions and 19 deletions

View File

@@ -0,0 +1,110 @@
import Qt5Compat.GraphicalEffects
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell
import Quickshell.Io
import qs.modules.functions
import qs.modules.interface.notifications
import qs.services
import qs.config
import qs.modules.components
StyledRect {
id: root
Layout.fillWidth: true
radius: Metrics.radius("normal")
color: Appearance.colors.colLayer1
property bool dndActive: Config.runtime.notifications.doNotDisturb
function toggleDnd() {
Config.updateKey("notifications.doNotDisturb", !dndActive);
}
StyledButton {
id: clearButton
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.bottomMargin: Metrics.margin(10)
anchors.rightMargin: Metrics.margin(10)
icon: "clear_all"
text: "Clear"
implicitHeight: 40
implicitWidth: 100
secondary: true
onClicked: {
for (let i = 0; i < NotifServer.history.length; i++) {
let n = NotifServer.history[i];
if (n?.notification) n.notification.dismiss();
}
}
}
StyledButton {
id: silentButton
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.bottomMargin: Metrics.margin(10)
anchors.rightMargin: clearButton.implicitWidth + Metrics.margin(15)
text: "Silent"
icon: "do_not_disturb_on"
implicitHeight: 40
implicitWidth: 100
secondary: true
checkable: true
checked: Config.runtime.notifications.doNotDisturb
onClicked: {
toggleDnd()
}
}
StyledText {
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.bottomMargin: Metrics.margin(15)
anchors.leftMargin: Metrics.margin(15)
text: NotifServer.history.length + " Notifications"
}
StyledText {
anchors.centerIn: parent
text: "No notifications"
visible: NotifServer.history.length < 1
font.pixelSize: Metrics.fontSize("huge")
}
ListView {
id: notifList
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: clearButton.top
anchors.margins: Metrics.margin(10)
clip: true
spacing: Metrics.spacing(8)
boundsBehavior: Flickable.StopAtBounds
ScrollBar.vertical: ScrollBar { }
model: Config.runtime.notifications.enabled
? NotifServer.history
: []
delegate: NotificationChild {
width: notifList.width
title: model.summary
body: model.body
image: model.image || model.appIcon
rawNotif: model
buttons: model.actions.map((action) => ({
"label": action.text,
"onClick": () => action.invoke()
}))
}
}
}