mirror of
https://github.com/tomasriveral/nixos.git
synced 2026-08-12 10:30:44 +02:00
190 lines
5.6 KiB
QML
190 lines
5.6 KiB
QML
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 }
|
|
}
|
|
}
|
|
}
|
|
}
|