power menu!!!

This commit is contained in:
Benjamin Palko 2025-08-18 23:41:59 -04:00
parent 7a1bed7d89
commit 3d3381ea15
5 changed files with 144 additions and 1 deletions

View file

@ -1,4 +1,5 @@
import "bar"
import "powermenu"
import Quickshell
import Quickshell.Wayland
import Quickshell.Hyprland
@ -14,5 +15,6 @@ Variants {
required property ShellScreen modelData
Bar {}
PowerMenu {}
}
}

View file

@ -1,3 +1,4 @@
import qs.services
import qs.widgets
import Quickshell
@ -11,4 +12,10 @@ Scope {
console.log("Launcher shortcut pressed");
}
}
LuxShortcut {
name: 'power-menu'
description: 'Open the Power Menu'
onPressed: Visibility.powermenu = !Visibility.powermenu
}
}

View file

@ -0,0 +1,127 @@
pragma ComponentBehavior: Bound
import qs.config
import qs.services
import qs.widgets
import Quickshell.Hyprland
import Quickshell.Io
import Quickshell.Wayland
import Quickshell.Widgets
import QtQuick
import QtQuick.Layouts
StyledWindow {
id: root
name: "powermenu"
visible: Visibility.powermenu
implicitWidth: rect.width
implicitHeight: rect.height
WlrLayershell.layer: WlrLayer.Top
WlrLayershell.keyboardFocus: root.visible ? WlrKeyboardFocus.OnDemand : WlrKeyboardFocus.None
Process {
id: process
}
WrapperRectangle {
id: rect
color: Theme.palette.base300
margin: 14
radius: 8
HyprlandFocusGrab {
active: Visibility.powermenu
windows: [root]
onCleared: {
Visibility.powermenu = false;
}
}
StyledListView {
id: list
Layout.fillWidth: true
focus: Visibility.powermenu
Keys.onEscapePressed: event => {
event.accepted = true;
root.visible = false;
}
Keys.onEnterPressed: event => {
event.accepted = true;
console.log(list.currentItem.command);
}
Keys.onUpPressed: event => {
event.accepted = true;
list.decrementCurrentIndex();
}
Keys.onDownPressed: event => {
event.accepted = true;
list.incrementCurrentIndex();
}
model: [
{
text: "󰍃 Logout",
command: "hyprctl dispatch exit"
},
{
text: "󰜉 Reboot",
command: "systemctl reboot"
},
{
text: " Shutdown",
command: "systemctl poweroff"
}
]
spacing: 8
implicitWidth: 220
implicitHeight: 185
highlightMoveDuration: 1000
highlightResizeDuration: 0
highlight: Rectangle {
radius: 8
color: Theme.palette.primary
}
onCurrentItemChanged: {
process.command = ["sh", "-c", list.currentItem.modelData.command];
}
delegate: StyledText {
id: button
required property var modelData
required property int index
anchors.left: parent.left
anchors.right: parent.right
MouseArea {
hoverEnabled: true
anchors.fill: button
onEntered: {
console.log("blyat");
list.currentIndex = button.index;
}
onClicked: {
console.log(process.command);
process.running = true;
// process.startDetached();
}
}
padding: 16
color: list.currentIndex == index ? Theme.palette.primarycontent : Theme.palette.basecontent
text: modelData.text
font.pixelSize: 18
font.bold: true
}
}
}
}

View file

@ -4,6 +4,7 @@ import qs.widgets
import Quickshell
Singleton {
property bool powermenu
property StyledPopupWindow activePopup
function togglePopup(popup: StyledPopupWindow) {

View file

@ -2,6 +2,12 @@ import qs.config
import QtQuick
Text {
color: Theme.palette.basecontent
font.family: Theme.fontFamily
color: Theme.palette.basecontent
Behavior on color {
ColorAnimation {
duration: 200
easing.type: Easing.InOutQuad
}
}
}