Compare commits

..

3 commits

Author SHA1 Message Date
Benjamin Palko
3d3381ea15 power menu!!! 2025-08-18 23:41:59 -04:00
Benjamin Palko
7a1bed7d89 update theme with content colors 2025-08-18 22:46:07 -04:00
Benjamin Palko
b75f8bc1d2 move bar to Shell module 2025-08-12 22:33:44 -04:00
8 changed files with 240 additions and 74 deletions

View file

@ -16,16 +16,24 @@ Singleton {
id: palette
property color primary: "#1fb854"
property color primarycontent: "#000000"
property color secondary: "#1eb88e"
property color secondarycontent: "#000c07"
property color accent: "#1fb8ab"
property color accentcontent: "#010c0b"
property color neutral: "#19362d"
property color neutralcontent: "#cdd3d1"
property color base100: "#1b1717"
property color base200: "#161212"
property color base300: "#110d0d"
property color basecontent: "#cac9c9"
property color info: "#00b5ff"
property color infocontent: "#000000"
property color success: "#00a96e"
property color successcontent: "#000000"
property color warning: "#ffbe00"
property color warningcontent: "#000000"
property color error: "#ff5861"
property color errorcontent: "#000000"
}
}

20
modules/Shell.qml Normal file
View file

@ -0,0 +1,20 @@
import "bar"
import "powermenu"
import Quickshell
import Quickshell.Wayland
import Quickshell.Hyprland
import QtQuick
import QtQuick.Effects
Variants {
model: Quickshell.screens
Scope {
id: scope
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

@ -8,107 +8,105 @@ import "components/hyprland"
import "components/notifications"
import "components/tray"
Scope {
PanelWindow {
id: parentWindow
PanelWindow {
id: parentWindow
anchors.top: true
anchors.left: true
anchors.right: true
anchors.top: true
anchors.left: true
anchors.right: true
implicitHeight: Dimensions.bar.height
color: 'transparent'
implicitHeight: Dimensions.bar.height
color: 'transparent'
Item {
Item {
anchors.fill: parent
anchors.leftMargin: Dimensions.bar.horizontalMargins
anchors.rightMargin: Dimensions.bar.horizontalMargins
anchors.topMargin: Dimensions.bar.verticalMargins
anchors.bottomMargin: Dimensions.bar.verticalMargins
Rectangle {
id: background
anchors.fill: parent
anchors.leftMargin: Dimensions.bar.horizontalMargins
anchors.rightMargin: Dimensions.bar.horizontalMargins
anchors.topMargin: Dimensions.bar.verticalMargins
anchors.bottomMargin: Dimensions.bar.verticalMargins
color: Theme.palette.base300
radius: Dimensions.radius
Rectangle {
id: background
anchors.fill: parent
color: Theme.palette.base300
radius: Dimensions.radius
border {
color: Theme.palette.base100
width: Dimensions.bar.border
pixelAligned: true
}
}
border {
color: Theme.palette.base100
width: Dimensions.bar.border
pixelAligned: true
}
RowLayout {
id: leftbar
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: Dimensions.bar.horizontalPadding
anchors.topMargin: Dimensions.bar.verticalPadding
anchors.bottomMargin: Dimensions.bar.verticalPadding
spacing: Dimensions.bar.spacing
SystemLogo {
implicitSize: 22
}
RowLayout {
id: leftbar
Workspaces {}
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
Tray {}
}
anchors.leftMargin: Dimensions.bar.horizontalPadding
anchors.topMargin: Dimensions.bar.verticalPadding
anchors.bottomMargin: Dimensions.bar.verticalPadding
RowLayout {
id: centerbar
spacing: Dimensions.bar.spacing
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
SystemLogo {
implicitSize: 22
}
anchors.topMargin: Dimensions.bar.verticalPadding
anchors.bottomMargin: Dimensions.bar.verticalPadding
Workspaces {}
spacing: Dimensions.bar.spacing
Tray {}
}
Mpris {}
}
RowLayout {
id: centerbar
RowLayout {
id: rightbar
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
anchors.topMargin: Dimensions.bar.verticalPadding
anchors.bottomMargin: Dimensions.bar.verticalPadding
anchors.rightMargin: Dimensions.bar.horizontalPadding
anchors.topMargin: Dimensions.bar.verticalPadding
anchors.bottomMargin: Dimensions.bar.verticalPadding
spacing: Dimensions.bar.spacing
spacing: Dimensions.bar.spacing
Mpris {}
}
Pywal {}
RowLayout {
id: rightbar
Pipewire {}
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
Caffeine {}
anchors.rightMargin: Dimensions.bar.horizontalPadding
anchors.topMargin: Dimensions.bar.verticalPadding
anchors.bottomMargin: Dimensions.bar.verticalPadding
Network {}
spacing: Dimensions.bar.spacing
Bluetooth {}
Pywal {}
Storage {}
Pipewire {}
Memory {}
Caffeine {}
Cpu {}
Network {}
Gpu {}
Bluetooth {}
Clock {}
Storage {}
Memory {}
Cpu {}
Gpu {}
Clock {}
Notifications {}
}
Notifications {}
}
}
}

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,12 +2,11 @@
import Quickshell
import "modules"
import "modules/bar"
ShellRoot {
ReloadPopup {}
Bar {}
Shell {}
Shortcuts {}
}

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
}
}
}