import { createBinding, createComputed } from "ags"; import { Gtk } from "ags/gtk4"; import { createPoll } from "ags/time"; import AstalBattery from "gi://AstalBattery"; import AstalNetwork from "gi://AstalNetwork"; export const SystemInfo = () => { const cpu = PollCMD("cat /sys/class/thermal/thermal_zone*/temp"); const gpu = PollCMD("supergfxctl -g"); const profile = PollCMD("asusctl profile -p"); const tailscale = PollCMD("tailscale ping homelab"); const battery = AstalBattery.get_default(); const percentage = createBinding(battery, "percentage"); const charging = createBinding(battery, "charging"); const state = createBinding(battery, "state"); const energyRate = createBinding(battery, "energyRate"); const chargingIcon = createComputed( [percentage, charging, state], (percentage, charging, state) => { const batFull = state === AstalBattery.State.FULLY_CHARGED; const p = percentage * 100; if (batFull) return "fa-battery-full-symbolic"; if (charging) return "fa-battery-charging-symbolic"; if (p < 30) return "fa-battery-low-symbolic"; return p < 70 ? "fa-battery-medium-symbolic" : "fa-battery-full-symbolic"; }, ); const network = AstalNetwork.get_default(); const connnectivity = createBinding(network, "connectivity"); const getNetworkText = ( conn: AstalNetwork.Connectivity, net: AstalNetwork.Network, ) => { // no connection if (conn == 1) return "No connection"; // wired if (net.primary == 1) return "Wired"; // wifi const wifi = net.wifi; switch (wifi.internet) { case 0: return wifi.ssid; case 1: return "Connecting"; case 2: return "Disconnected"; } return "NA"; }; return ( <> ); }; const PollCMD = (cmd: string, ms: number = 5000) => { return createPoll("", ms, ["bash", "-c", cmd]); };