mirror of
https://github.com/tomasriveral/nixos.git
synced 2026-08-12 02:28:37 +02:00
209 lines
6.3 KiB
QML
209 lines
6.3 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
|
|
property int temp: 0
|
|
property int fan: 0
|
|
property int down: 0
|
|
property int up: 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 = parseInt(data.cpu)
|
|
sysinfo.mem = parseInt(data.mem)
|
|
sysinfo.disk = parseInt(data.disk)
|
|
sysinfo.power = parseFloat(data.power)
|
|
sysinfo.temp = parseInt(data.temp)
|
|
sysinfo.fan = parseInt(data.fan)
|
|
sysinfo.down = parseInt(data.down)
|
|
sysinfo.up = parseInt(data.up)
|
|
|
|
} catch(e) {}
|
|
}
|
|
}
|
|
}
|
|
|
|
Column {
|
|
spacing: 2
|
|
|
|
Text {
|
|
text: "CPU " + sysinfo.cpu + "% | MEM " + sysinfo.mem + "% | PWR " + sysinfo.power.toFixed(1) + "W | UP " + sysinfo.up
|
|
font.pixelSize: 18
|
|
color: Theme.Colors.barColor8
|
|
}
|
|
|
|
Text {
|
|
text: "TMP " + sysinfo.temp + "°C | DSK " + sysinfo.disk + "% | FAN " + sysinfo.fan + " | DOWN " + sysinfo.down
|
|
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 }
|
|
}
|
|
}
|
|
}
|
|
}
|