mirror of
https://github.com/belsabbagh/dotfiles.git
synced 2026-04-11 09:36:46 +00:00
quickshell and hyprland additions
This commit is contained in:
@@ -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")
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user