Files
nixos/other/quickshell/bar/Bar.qml
T

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