import i3bar_base import std/os import std/osproc import std/threadpool import strutils const wlan_nic: string ="wlan0" # /sys/class/net/wlp2s0/operstate up or down if connected proc get_essid(): string = let essid = execCmdEx("iwgetid -r") return strip(essid.output) proc get_signal_quality(): string = let wl = readFile("/proc/net/wireless") let ln = splitLines(wl)[2] let links = split(ln," ") var qual = strip(links[1]) qual = replace(qual,".","") return "[" & qual & "]" proc get_wifi(): (string, string) = let essid = get_essid() if essid == "": return ("disconnected", "") let quality = get_signal_quality() return (essid, quality) proc getObject(conn: string): i3barData = var data = newi3barData() data.full_text = conn data.border = purple return data proc get_wifi_info() = var last_qual = "" while true: let (essid, quality) = get_wifi() if quality != last_qual: let data = getObject(quality & " " & essid) outputJSON(data) last_qual = quality sleep(1000) proc await_click_info() = while true: let input = parseInput() if input.button == 1: discard execCmd("alacritty -e nmtui-connect") proc main() = if dirExists("/sys/class/net/" & wlan_nic): spawn get_wifi_info() spawn await_click_info() sync() else: echo "No WLAN" main()