83 lines
3.0 KiB
Plaintext
83 lines
3.0 KiB
Plaintext
|
|
(defpoll netinfo
|
|
:interval "5s"
|
|
:initial '{"wifi":{"ssid":"","ip":"","freq":0,"band":"","gen":"","signal":0},"ethernet":{"state":"down","ip":"","speed":"","interface":""}}'
|
|
"scripts/net/netinfo")
|
|
|
|
(deflisten bt-devices
|
|
:initial "[]"
|
|
"scripts/net/bt-devices")
|
|
|
|
; --- Shared row widget ---
|
|
|
|
(defwidget netinfo-row [label value]
|
|
(box :orientation "h" :space-evenly false :class "netinfo-row"
|
|
(label :class "netinfo-label" :halign "start" :text label)
|
|
(label :class "netinfo-value" :halign "end" :hexpand true :text value)))
|
|
|
|
; --- WiFi ---
|
|
|
|
(defwidget wifi-net-section []
|
|
(box :orientation "v" :space-evenly false :class "sys-section"
|
|
(section-header :title "WiFi" :accent "wifi-accent")
|
|
(box :orientation "v" :space-evenly false
|
|
:visible {net.wifi.connected}
|
|
(netinfo-row :label "SSID" :value {netinfo.wifi.ssid})
|
|
(netinfo-row :label "IP" :value {netinfo.wifi.ip})
|
|
(netinfo-row :label "Signal" :value "${net.wifi.icon} ${netinfo.wifi.signal} dBm")
|
|
(netinfo-row :label "Freq" :value "${netinfo.wifi.freq} MHz · ${netinfo.wifi.band} · ${netinfo.wifi.gen}"))
|
|
(label :class "netinfo-dim" :halign "start"
|
|
:visible {!net.wifi.connected}
|
|
:text "Not connected")))
|
|
|
|
; --- Ethernet ---
|
|
|
|
(defwidget ethernet-net-section []
|
|
(box :orientation "v" :space-evenly false :class "sys-section"
|
|
(section-header :title "Ethernet" :accent "eth-accent")
|
|
(box :orientation "v" :space-evenly false
|
|
:visible {net.ethernet.connected}
|
|
(netinfo-row :label "Interface" :value {netinfo.ethernet.interface})
|
|
(netinfo-row :label "IP" :value {netinfo.ethernet.ip})
|
|
(netinfo-row :label "Speed" :value {netinfo.ethernet.speed}))
|
|
(label :class "netinfo-dim" :halign "start"
|
|
:visible {!net.ethernet.connected}
|
|
:text "No carrier")))
|
|
|
|
; --- Bluetooth ---
|
|
|
|
(defwidget bt-device-row [device]
|
|
(box :orientation "h" :space-evenly false :class "bt-device-row" :valign "center"
|
|
(label :class "bt-device-name" :hexpand true :halign "start" :text {device.name})
|
|
(button
|
|
:class "bt-device-btn ${device.connected ? 'bt-btn-on' : 'bt-btn-off'}"
|
|
:onclick "scripts/net/bt-toggle ${device.mac}"
|
|
:tooltip {device.connected ? "Disconnect" : "Connect"}
|
|
(label :text {device.connected ? "" : ""}))))
|
|
|
|
(defwidget bluetooth-net-section []
|
|
(box :orientation "v" :space-evenly false :class "sys-section"
|
|
(section-header :title "Bluetooth" :accent "blt-accent")
|
|
(box :orientation "v" :space-evenly false
|
|
(for device in {bt-devices}
|
|
(bt-device-row :device {device})))))
|
|
|
|
; --- Root ---
|
|
|
|
(defwidget net-win []
|
|
(box :class "sys-win" :space-evenly false :orientation "v"
|
|
(wifi-net-section)
|
|
(box :class "section-sep")
|
|
(ethernet-net-section)
|
|
(box :class "section-sep")
|
|
(bluetooth-net-section)))
|
|
|
|
(defwindow net
|
|
:monitor 0
|
|
:stacking "overlay"
|
|
:geometry (geometry
|
|
:x "0%" :y "0%"
|
|
:anchor "bottom right"
|
|
:width "300px" :height "0px")
|
|
(window (net-win)))
|