diff --git a/home/dot_config/quickshell/bar/Backlight.qml b/home/dot_config/quickshell/bar/Backlight.qml index 761769d..d222ef9 100644 --- a/home/dot_config/quickshell/bar/Backlight.qml +++ b/home/dot_config/quickshell/bar/Backlight.qml @@ -1,42 +1,16 @@ import QtQuick -import Quickshell -import Quickshell.Io Block { id: root - property int percentage: -1 + required property var service - visible: percentage >= 0 + visible: service.brightness >= 0 blockColor: "#2980b9" interactive: true - text: "\uf185 " + percentage + "%" + text: "\uf185 " + service.brightness + "%" onWheel: wheel => { const change = wheel.angleDelta.y > 0 ? "+5%" : "5%-"; - Quickshell.execDetached(["brightnessctl", "set", change]); - refreshTimer.restart(); - } - - Process { - id: brightnessQuery - command: ["brightnessctl", "-m"] - running: true - - stdout: StdioCollector { - onStreamFinished: { - const fields = text.trim().split(","); - root.percentage = fields.length >= 4 - ? parseInt(fields[3].replace("%", "")) - : -1; - } - } - } - - Timer { - id: refreshTimer - interval: 500 - repeat: true - running: true - onTriggered: brightnessQuery.running = true + service.setBrightness(change); } } diff --git a/home/dot_config/quickshell/bar/Bar.qml b/home/dot_config/quickshell/bar/Bar.qml index 968793d..66bd5f1 100644 --- a/home/dot_config/quickshell/bar/Bar.qml +++ b/home/dot_config/quickshell/bar/Bar.qml @@ -12,6 +12,7 @@ PanelWindow { property var sink: Pipewire.defaultAudioSink property var source: Pipewire.defaultAudioSource property var battery: UPower.displayDevice + property var hardware anchors { top: true @@ -150,8 +151,8 @@ PanelWindow { } } - Network {} - Backlight {} + Network { service: bar.hardware } + Backlight { service: bar.hardware } Block { property int percentage: Math.round(bar.battery.percentage * 100) diff --git a/home/dot_config/quickshell/bar/HardwareService.qml b/home/dot_config/quickshell/bar/HardwareService.qml new file mode 100644 index 0000000..aa2479d --- /dev/null +++ b/home/dot_config/quickshell/bar/HardwareService.qml @@ -0,0 +1,79 @@ +import QtQuick +import Quickshell +import Quickshell.Io + +Scope { + id: root + + property string connection: "Disconnected" + property int brightness: -1 + + function setBrightness(change) { + Quickshell.execDetached(["brightnessctl", "set", change]); + brightnessRefresh.restart(); + } + + Process { + id: networkQuery + command: ["nmcli", "-t", "-f", "TYPE,NAME", "connection", "show", "--active"] + running: true + + stdout: StdioCollector { + onStreamFinished: { + const lines = text.trim().split("\n"); + for (let line of lines) { + const separator = line.indexOf(":"); + const type = line.slice(0, separator); + if (type === "802-11-wireless" || type === "wifi") { + root.connection = line.slice(separator + 1); + return; + } + } + for (let line of lines) { + const separator = line.indexOf(":"); + const type = line.slice(0, separator); + if (type === "802-3-ethernet" || type === "ethernet") { + root.connection = line.slice(separator + 1); + return; + } + } + root.connection = "Disconnected"; + } + } + } + + Timer { + interval: 5000 + repeat: true + running: true + onTriggered: networkQuery.running = true + } + + Process { + id: brightnessQuery + command: ["brightnessctl", "-m"] + running: true + + stdout: StdioCollector { + onStreamFinished: { + const fields = text.trim().split(","); + root.brightness = fields.length >= 4 + ? parseInt(fields[3].replace("%", "")) + : -1; + } + } + } + + Timer { + interval: 2000 + repeat: true + running: true + onTriggered: brightnessQuery.running = true + } + + Timer { + id: brightnessRefresh + interval: 250 + onTriggered: brightnessQuery.running = true + } +} diff --git a/home/dot_config/quickshell/bar/Network.qml b/home/dot_config/quickshell/bar/Network.qml index f638445..ff66be8 100644 --- a/home/dot_config/quickshell/bar/Network.qml +++ b/home/dot_config/quickshell/bar/Network.qml @@ -1,51 +1,14 @@ import QtQuick import Quickshell -import Quickshell.Io Block { id: root - property string connection: "Disconnected" - property bool connected: connection !== "Disconnected" + required property var service + property bool connected: service.connection !== "Disconnected" blockColor: connected ? "#2980b9" : "#e91e63" interactive: true - text: connected ? "\uf1eb " + connection : "Disconnected !" + text: connected ? "\uf1eb " + service.connection : "Disconnected !" onClicked: Quickshell.execDetached(["nm-connection-editor"]) - - Process { - id: networkQuery - command: ["nmcli", "-t", "-f", "TYPE,NAME", "connection", "show", "--active"] - running: true - - stdout: StdioCollector { - onStreamFinished: { - const lines = text.trim().split("\n"); - for (let line of lines) { - const separator = line.indexOf(":"); - const type = line.slice(0, separator); - if (type === "802-11-wireless" || type === "wifi") { - root.connection = line.slice(separator + 1); - return; - } - } - for (let line of lines) { - const separator = line.indexOf(":"); - const type = line.slice(0, separator); - if (type === "802-3-ethernet" || type === "ethernet") { - root.connection = line.slice(separator + 1); - return; - } - } - root.connection = "Disconnected"; - } - } - } - - Timer { - interval: 5000 - repeat: true - running: true - onTriggered: networkQuery.running = true - } } diff --git a/home/dot_config/quickshell/bar/shell.qml b/home/dot_config/quickshell/bar/shell.qml index 3a4b49f..3f3a580 100644 --- a/home/dot_config/quickshell/bar/shell.qml +++ b/home/dot_config/quickshell/bar/shell.qml @@ -1,12 +1,17 @@ import Quickshell ShellRoot { + HardwareService { + id: hardwareService + } + Variants { model: Quickshell.screens Bar { required property var modelData screen: modelData + hardware: hardwareService } } }