import i3bar_base import std/os import std/osproc 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.title = "WiFi : " 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) let args = @["nmtui-connect"] let output = outputJSON(data, args) echo output case output: of "nmtui-connect": discard execCmd("alacritty -e nmtui-connect") last_qual = quality if stoploop: break 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): get_wifi_info() else: echo "No WLAN" if isMainModule: main()