382 lines
12 KiB
Common Lisp
382 lines
12 KiB
Common Lisp
;; -*-lisp-*-
|
|
(deflisten network--data
|
|
`~/.config/eww/scripts/network.py`)
|
|
|
|
(defvar nebula-armstrong-alignment "-3px")
|
|
|
|
(defvar network--show-details false)
|
|
|
|
(defwidget network--interface
|
|
[device]
|
|
(box :orientation "v"
|
|
:halign "center"
|
|
:space-evenly false
|
|
:spacing 0
|
|
(label :class "offline"
|
|
:visible {!device.online}
|
|
:text "offline")
|
|
(label :visible {device.online}
|
|
:class "special"
|
|
:text "${device.addresses[0].address}/${device.addresses[0].prefixlen}")))
|
|
|
|
(defwidget network-big--online
|
|
[]
|
|
(box :orientation "h"
|
|
:halign "start"
|
|
:valign "center"
|
|
:space-evenly false
|
|
:spacing 10
|
|
(label :class "medium green nebula"
|
|
:visible {network--data.online}
|
|
:text "online")
|
|
(label :class "medium offline nebula"
|
|
:visible {network--data.offline}
|
|
:text "offline")
|
|
(label :class "medium highlight nebula"
|
|
:visible {network--data.configuring}
|
|
:text "configuring")))
|
|
|
|
(defwidget network-big--lan
|
|
[device]
|
|
(label :visible {network--data
|
|
[device]
|
|
.online}
|
|
:class ""
|
|
:text "${network--data.interfaces[device].addresses[0].address}/${network--data.interfaces[device].addresses[0].prefixlen}"))
|
|
|
|
(defwidget network--wlan
|
|
[device]
|
|
(box :orientation "h"
|
|
:halign "start"
|
|
:space-evenly false
|
|
:spacing 0
|
|
(label :class "highlight"
|
|
:visible {!device.online}
|
|
:text "offline")
|
|
(label :class "special"
|
|
:visible {device.online}
|
|
:text {network--data.wifi.ssid})))
|
|
|
|
(defwidget network--lan
|
|
[device]
|
|
(box :orientation "h"
|
|
:halign "start"
|
|
:space-evenly false
|
|
:spacing 0
|
|
(label :class "highlight"
|
|
:visible {!device.online}
|
|
:text "offline")
|
|
(label :visible {device.online}
|
|
:class {network--data.last_update.unix < clock--data.unix - 30 ? "highlight" : "special"}
|
|
:text "${device.addresses[0].address}/${device.addresses[0].prefixlen}")))
|
|
|
|
(defwidget network--secure
|
|
[]
|
|
(box :orientation "h"
|
|
:halign "start"
|
|
:space-evenly false
|
|
:spacing 0
|
|
(label :class "highlight"
|
|
:text "- insecure"
|
|
:visible {!
|
|
network--data.secure })
|
|
(label :class "green"
|
|
:text "- secured via ${network--data.secure_msg}"
|
|
:visible {network--data.secure})))
|
|
|
|
(defwidget vpn-network
|
|
[]
|
|
(box :orientation "v"
|
|
:halign "start"
|
|
:space-evenly false
|
|
:spacing 0
|
|
:visible {network--data
|
|
!=
|
|
''}
|
|
(label :class "highlight"
|
|
:text "offline"
|
|
:visible {!
|
|
network--data.interfaces.ezrinet.online })
|
|
(label :class "green"
|
|
:text "connected"
|
|
:visible {network--data.interfaces.ezrinet.online})
|
|
"personal network"))
|
|
|
|
(defwidget network
|
|
[]
|
|
(button :onclick "eww update network--show-details=${!network--show-details}"
|
|
(box :orientation "v"
|
|
:halign "start"
|
|
:space-evenly false
|
|
:spacing 0
|
|
:visible {network--data != ''}
|
|
(box :orientation "h"
|
|
:halign "center"
|
|
:space-evenly false
|
|
:spacing 10
|
|
(network--lan :device {network--data.default_interface}
|
|
:visible {!network--data.wifi.default}))
|
|
"communications")))
|
|
|
|
(defwidget wifi []
|
|
(box :orientation "v"
|
|
:halign "start"
|
|
:space-evenly false
|
|
:spacing 0
|
|
:visible {network--data != ''}
|
|
(box :orientation "h"
|
|
:halign "center"
|
|
:space-evenly false
|
|
:spacing 10
|
|
(label :class "offline"
|
|
:text "offline"
|
|
:visible {!network--data.wifi.connected})
|
|
(label :class "special"
|
|
:text {network--data.wifi.ssid}
|
|
:visible {network--data.wifi.connected}))
|
|
"wireless"))
|
|
|
|
(defwidget network--public-ip
|
|
[]
|
|
(centerbox :orientation "h"
|
|
:halign "start"
|
|
:width 200
|
|
(box :halign "start"
|
|
"public ip:")
|
|
""
|
|
(box :halign "end"
|
|
:spacing 0
|
|
:space-evenly false
|
|
(label :class "highlight"
|
|
:text "offline"
|
|
:visible {!network--data.online})
|
|
(label :class "highlight"
|
|
:text "no response"
|
|
:visible {network--data.online && !network--data.have_public_ip})
|
|
(label :class "special"
|
|
:text {network--data.public_ip.ip}
|
|
:visible {network--data.online && network--data.have_public_ip}))))
|
|
|
|
(defwidget network--default-route
|
|
[]
|
|
(centerbox :orientation "h"
|
|
:halign "start"
|
|
:width 200
|
|
(box :halign "start"
|
|
"route on:")
|
|
""
|
|
(box :halign "end"
|
|
:spacing 0
|
|
:space-evenly false
|
|
(label :class "highlight"
|
|
:text "offline"
|
|
:visible {!network--data.online})
|
|
(label :class "highlight"
|
|
:text "no route"
|
|
:visible {network--data.online && !network--data.have_default_route})
|
|
(label :class "special"
|
|
:text {network--data.default_route}
|
|
:visible {network--data.online && network--data.have_default_route}))))
|
|
|
|
(defwidget network--gateway
|
|
[]
|
|
(centerbox :orientation "h"
|
|
:halign "start"
|
|
:width 200
|
|
(box :halign "start"
|
|
"gateway:")
|
|
""
|
|
(box :halign "end"
|
|
:spacing 0
|
|
:space-evenly false
|
|
(label :class "highlight"
|
|
:text "no response"
|
|
:visible {!network--data.have_gateway})
|
|
(label :class "special"
|
|
:text {network--data.gateway}
|
|
:visible {network--data.have_gateway}))))
|
|
|
|
(defwidget network--status-summary
|
|
[]
|
|
(centerbox :orientation "h"
|
|
:halign "start"
|
|
:width 200
|
|
(box :halign "start"
|
|
"status:")
|
|
""
|
|
(box :halign "end"
|
|
:spacing 0
|
|
:space-evenly false
|
|
(label :class "highlight"
|
|
:text "offline"
|
|
:visible {!network--data.online})
|
|
(label :class "special"
|
|
:text "online"
|
|
:visible {network--data.online && !network--data.secure})
|
|
(label :class "green"
|
|
:text {network--data.secure_msg == "usu" ? "vpn online" : "secure"}
|
|
:visible {network--data.online && network--data.secure}))))
|
|
|
|
|
|
(defwidget network-detail
|
|
[]
|
|
(box :orientation "v"
|
|
:halign "start"
|
|
:space-evenly false
|
|
:spacing 0
|
|
(network--status-summary)
|
|
(network--public-ip)
|
|
(network--default-route)
|
|
(network--gateway)
|
|
(centerbox :orientation "h"
|
|
:halign "start"
|
|
:width 200
|
|
(box :halign "start"
|
|
"last update:")
|
|
""
|
|
(box :halign "end"
|
|
:spacing 0
|
|
:space-evenly false
|
|
(label :class {network--data.last_update.unix < clock--data.unix - 30 ? "highlight" : "special"}
|
|
:text "${network--data.last_update.month}-${network--data.last_update.day} ${network--data.last_update.hour}:${network--data.last_update.minute}:${network--data.last_update.second}")))
|
|
))
|
|
|
|
(defwidget network-sidebar-details []
|
|
(box :orientation "v"
|
|
:halign "start"
|
|
:class "module"
|
|
:space-evenly false
|
|
:spacing 5
|
|
:width 200
|
|
(box :orientation "h"
|
|
:halign "center"
|
|
:class "nebula"
|
|
:spacing 10
|
|
:space-evenly false
|
|
(label :class "medium special"
|
|
:text "Comms"))
|
|
(box :orientation "h"
|
|
:halign "center"
|
|
:class "nebula"
|
|
:spacing 10
|
|
:space-evenly false
|
|
(label :class "nebula green"
|
|
:text "Online"
|
|
:visible {network--data.online})
|
|
(label :class "nebula highlight"
|
|
:text "Offline"
|
|
:visible {!network--data.online}))
|
|
(centerbox :orientation "h"
|
|
:halign "start"
|
|
:spacing 10
|
|
:width 200
|
|
:space-evenly false
|
|
(transform :translate-y {network--data.have_default_route ? nebula-armstrong-alignment : "0px"}
|
|
(box :halign "start"
|
|
:valign "start"
|
|
:class "nebula"
|
|
"Route On:"))
|
|
""
|
|
(box :halign "end"
|
|
(label :text "No Route"
|
|
:class "nebula highlight"
|
|
:visible {!network--data.have_default_route})
|
|
(label :text "${network--data.default_route}"
|
|
:class "special"
|
|
:visible {network--data.have_default_route})))
|
|
(centerbox :orientation "h"
|
|
:halign "start"
|
|
:spacing 10
|
|
:width 200
|
|
:space-evenly false
|
|
(transform :translate-y {network--data.online ? nebula-armstrong-alignment : "0px"}
|
|
(box :halign "start"
|
|
:valign "start"
|
|
:class "nebula"
|
|
"Address:"))
|
|
""
|
|
(box :halign "end"
|
|
:valign "end"
|
|
:orientation "v"
|
|
(label :text "${network--data.default_interface.addresses[0].address}"
|
|
:class "special"
|
|
:visible {network--data.online})
|
|
(label :text "offline"
|
|
:class "nebula highlight"
|
|
:visible {!network--data.online})
|
|
(label :text "/${network--data.default_interface.addresses[0].prefixlen}"
|
|
:halign "end"
|
|
:class "special"
|
|
:visible {network--data.online})))
|
|
(centerbox :orientation "h"
|
|
:halign "start"
|
|
:spacing 10
|
|
:width 200
|
|
:space-evenly false
|
|
(transform :translate-y {network--data.have_public_ip ? nebula-armstrong-alignment : "0px"}
|
|
(box :halign "start"
|
|
:class "nebula"
|
|
"Public IP:"))
|
|
""
|
|
(box :halign "end"
|
|
(label :text "Offline"
|
|
:class "nebula highlight"
|
|
:visible {!network--data.have_public_ip})
|
|
(label :text {network--data.public_ip.ip}
|
|
:class "special"
|
|
:visible {network--data.have_public_ip})))
|
|
(centerbox :orientation "h"
|
|
:halign "start"
|
|
:spacing 10
|
|
:width 200
|
|
:space-evenly false
|
|
(transform :translate-y {network--data.have_gateway ? nebula-armstrong-alignment : "0px"}
|
|
(box :halign "start"
|
|
:class "nebula"
|
|
"Gateway:"))
|
|
""
|
|
(box :halign "end"
|
|
(label :text "Error"
|
|
:class "highlight nebula"
|
|
:visible {!network--data.have_gateway})
|
|
(label :text {network--data.gateway}
|
|
:class "special"
|
|
:visible {network--data.have_gateway})))
|
|
(centerbox :orientation "h"
|
|
:halign "start"
|
|
:spacing 10
|
|
:width 200
|
|
:space-evenly false
|
|
(transform :translate-y {network--data.wifi.connected ? nebula-armstrong-alignment : "0px"}
|
|
(box :halign "start"
|
|
:class "nebula"
|
|
"Wireless:"))
|
|
""
|
|
(box :halign "end"
|
|
(label :text "offline"
|
|
:class "offline nebula"
|
|
:visible {!network--data.wifi.connected})
|
|
(label :text {network--data.wifi.ssid}
|
|
:class "special"
|
|
:visible {network--data.wifi.connected})))
|
|
(centerbox :orientation "h"
|
|
:halign "start"
|
|
:class "nebula"
|
|
:spacing 10
|
|
:width 200
|
|
:space-evenly false
|
|
(box :halign "start"
|
|
"VPN:")
|
|
""
|
|
(box :halign "end"
|
|
(label :text "Offline"
|
|
:class "highlight"
|
|
:visible {!network--data.interfaces.ezrinet.online})
|
|
(label :text "Online"
|
|
:class "green"
|
|
:visible {network--data.interfaces.ezrinet.online})))
|
|
|
|
))
|
|
|
|
|