import QtQuick import QtQuick.Effects import Quickshell import QtQuick.Layouts import Quickshell.Wayland import Quickshell.Io import "mpris" as Mpris import "systray" as SysTray import "../theme" as Theme import ".." PanelWindow { id: root property var modelData readonly property var tooltip: tooltip readonly property real tooltipYOffset: root.height + 2 Tooltip { id: tooltip bar: root } function boundedY(targetY: real, height: real): real { return Math.max(bar.anchors.topMargin + height, Math.min(bar.height + bar.anchors.topMargin - height, targetY)); } function boundedX(targetX: real, width: real): real { return Math.max(bar.anchors.leftMargin + width, Math.min(bar.width + bar.anchors.leftMargin - width, targetX)); } WlrLayershell.namespace: "shell:bar" anchors { top: true; left: true; right: true } exclusiveZone: 48 implicitHeight: 72 color: Theme.Colors.barColor1 mask: barRegion Region { id: barRegion width: bar.width height: bar.height } Item { id: bar anchors { top: parent.top; left: parent.left; right: parent.right } implicitHeight: 48 // ---------------- LEFT MODULE ---------------- Rectangle { id: leftModule anchors { top: parent.top; bottom: parent.bottom; left: parent.left } color: Theme.Colors.barColor2 implicitWidth: left.childrenRect.width + 14 implicitHeight: left.childrenRect.height + 8 Rectangle { z: -1 anchors.fill: parent color: Theme.Colors.barColor3 anchors.margins: -4 } Image { width: 16 * 6 height: 4 * 6 anchors.top: parent.bottom anchors.left: parent.left source: "../assets/bar-decor.png" smooth: false } RowLayout { id: left anchors { top: parent.top; bottom: parent.bottom; left: parent.left; leftMargin: 7; rightMargin: 7 } spacing: 12 Workspaces { bar: root } SysTray.SysTray { bar: root } } } // ---------------- SYSINFO MODULE ---------------- Rectangle { id: leftCenterModule anchors { top: parent.top; bottom: parent.bottom; left: leftModule.right; leftMargin: 30 } color: Theme.Colors.barColor6 implicitWidth: sysinfo.childrenRect.width + 16 implicitHeight: sysinfo.childrenRect.height + 8 Rectangle { z: -1 anchors.fill: parent color: Theme.Colors.barColor7 anchors.margins: -4 } Image { width: 16 * 6 height: 4 * 6 anchors.top: parent.bottom anchors.left: parent.left source: "../assets/bar-decor.png" smooth: false } RowLayout { id: sysinfo spacing: 10 property int cpu: 0 property int mem: 0 property int disk: 0 property real power: 0 Timer { interval: 2000 running: true repeat: true onTriggered: sysProcess.running = true } Process { id: sysProcess command: ["QS-sysinfo"] stdout: SplitParser { onRead: function(line) { try { var data = JSON.parse(line) sysinfo.cpu = data.cpu sysinfo.mem = data.mem sysinfo.disk = data.disk sysinfo.power = data.power } catch(e) {} } } } Text { id: infoText text: "CPU " + sysinfo.cpu + "% MEM " + sysinfo.mem + "% DSK " + sysinfo.disk + "% PWR " + sysinfo.power + "W" font.pixelSize: 18 color: Theme.Colors.barColor8 } } } // ---------------- RIGHT MODULE ---------------- Rectangle { id: rightCenterModule anchors { top: parent.top; bottom: parent.bottom; right: parent.right } color: Theme.Colors.barColor4 implicitWidth: right.childrenRect.width + 14 implicitHeight: right.childrenRect.height + 8 Rectangle { z: -1 anchors.fill: parent color: Theme.Colors.barColor5 anchors.margins: -4 } Image { width: 16 * 6 height: 4 * 6 anchors.top: parent.bottom anchors.right: parent.right source: "../assets/bar-decor.png" smooth: false mirror: true } RowLayout { id: right anchors { top: parent.top; bottom: parent.bottom; right: parent.right; leftMargin: 7; rightMargin: 7 } spacing: 12 Time {} Volume { bar: root } Mpris.Players { window: root; bar: root } Power { id: power; bar: root } } } } }