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,153 @@
import Qt5Compat.GraphicalEffects
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell
import Quickshell.Hyprland
import Quickshell.Io
import Quickshell.Services.Pipewire
import Quickshell.Wayland
import qs.config
import qs.modules.functions
import qs.services
import qs.modules.interface.lockscreen
import qs.modules.components
PanelWindow {
id: powermenu
WlrLayershell.keyboardFocus: Compositor.require("hyprland") && Globals.visiblility.powermenu
function togglepowermenu() {
Globals.visiblility.powermenu = !Globals.visiblility.powermenu; // Simple toggle logic kept in a function as it might have more things to it later on.
}
WlrLayershell.namespace: "nucleus:powermenu"
WlrLayershell.layer: WlrLayer.Top
visible: Config.initialized && Globals.visiblility.powermenu
color: "transparent"
exclusiveZone: 0
implicitWidth: DisplayMetrics.scaledWidth(0.25)
implicitHeight: DisplayMetrics.scaledWidth(0.168)
HyprlandFocusGrab {
id: grab
active: Compositor.require("hyprland")
windows: [powermenu]
}
StyledRect {
id: container
color: Appearance.m3colors.m3background
radius: Metrics.radius("verylarge")
implicitWidth: powermenu.implicitWidth
anchors.fill: parent
FocusScope {
focus: true
anchors.fill: parent
Keys.onPressed: {
if (event.key === Qt.Key_Escape)
Globals.visiblility.powermenu = false;
}
Item {
id: content
anchors.margins: Metrics.radius(12)
anchors.topMargin: Metrics.radius(16)
anchors.leftMargin: Metrics.radius(18)
anchors.fill: parent
Grid {
columns: 3
rows: 3
rowSpacing: Metrics.spacing(10)
columnSpacing: Metrics.spacing(10)
anchors.fill: parent
PowerMenuButton {
buttonIcon: "power_settings_new"
onClicked: {
Quickshell.execDetached(["poweroff"]);
Globals.visiblility.powermenu = false;
}
}
PowerMenuButton {
buttonIcon: "logout"
onClicked: {
Quickshell.execDetached(["hyprctl", "dispatch", "exit"]);
Globals.visiblility.powermenu = false;
}
}
PowerMenuButton {
buttonIcon: "sleep"
onClicked: {
Quickshell.execDetached(["systemctl", "suspend"]);
Globals.visiblility.powermenu = false;
}
}
PowerMenuButton {
buttonIcon: "lock"
onClicked: {
Quickshell.execDetached(["nucleus", "ipc", "call", "lockscreen", "lock"]);
Globals.visiblility.powermenu = false;
}
}
PowerMenuButton {
buttonIcon: "restart_alt"
onClicked: {
Quickshell.execDetached(["reboot"]);
Globals.visiblility.powermenu = false;
}
}
PowerMenuButton {
buttonIcon: "light_off"
onClicked: {
Quickshell.execDetached(["systemctl", "hibernate"]);
Globals.visiblility.powermenu = false;
}
}
}
component Anim: NumberAnimation {
running: Config.runtime.appearance.animations.enabled
duration: Metrics.chronoDuration(400)
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.animation.curves.standard
}
}
}
}
IpcHandler {
function toggle() {
togglepowermenu();
}
target: "powermenu"
}
component PowerMenuButton: StyledButton {
property string buttonIcon
icon: buttonIcon
iconSize: Metrics.iconSize(50)
width: powermenu.implicitWidth / 3.4
height: powermenu.implicitHeight / 2.3
radius: beingHovered ? Metrics.radius("verylarge") * 2 : Metrics.radius("large")
}
}