pragma Singleton pragma ComponentBehavior: Bound import Quickshell import Quickshell.Io import QtQuick /** * Simple polled network state service. */ Singleton { id: root property bool wifi: true property bool ethernet: false property int updateInterval: 1000 property string networkName: "" property int networkStrength property string materialSymbol: ethernet ? "lan" : (Network.networkName.length > 0 && Network.networkName != "lo") ? ( Network.networkStrength > 80 ? "signal_wifi_4_bar" : Network.networkStrength > 60 ? "network_wifi_3_bar" : Network.networkStrength > 40 ? "network_wifi_2_bar" : Network.networkStrength > 20 ? "network_wifi_1_bar" : "signal_wifi_0_bar" ) : "signal_wifi_off" function update() { updateConnectionType.startCheck(); updateNetworkName.running = true; updateNetworkStrength.running = true; } Timer { interval: 10 running: true repeat: true onTriggered: { root.update(); interval = root.updateInterval; } } Process { id: updateConnectionType property string buffer command: ["sh", "-c", "nmcli -t -f NAME,TYPE,DEVICE c show --active"] running: true function startCheck() { buffer = ""; updateConnectionType.running = true; } stdout: SplitParser { onRead: data => { updateConnectionType.buffer += data + "\n"; } } onExited: (exitCode, exitStatus) => { const lines = updateConnectionType.buffer.trim().split('\n'); let hasEthernet = false; let hasWifi = false; lines.forEach(line => { if (line.includes("ethernet")) hasEthernet = true; else if (line.includes("wireless")) hasWifi = true; }); root.ethernet = hasEthernet; root.wifi = hasWifi; } } Process { id: updateNetworkName command: ["sh", "-c", "nmcli -t -f NAME c show --active | head -1"] running: true stdout: SplitParser { onRead: data => { root.networkName = data; } } } Process { id: updateNetworkStrength running: true command: ["sh", "-c", "nmcli -f IN-USE,SIGNAL,SSID device wifi | awk '/^\*/{if (NR!=1) {print $2}}'"] stdout: SplitParser { onRead: data => { root.networkStrength = parseInt(data); } } } }