loads of changes - will now give options in dmenu entries to change configs etc, volume, brights....
This commit is contained in:
parent
31f2b20d03
commit
89b73b613c
17 changed files with 318 additions and 142 deletions
|
@ -1,4 +1,4 @@
|
|||
import std/[os,osproc]
|
||||
import std/[os,osproc,strutils]
|
||||
import std/json
|
||||
import std/rdstdin
|
||||
import marshal
|
||||
|
@ -7,6 +7,7 @@ type
|
|||
i3BarData* = object
|
||||
title*: string
|
||||
full_text*: string
|
||||
html_text*: string
|
||||
short_text*: string
|
||||
color*: string
|
||||
border*: string
|
||||
|
@ -41,7 +42,8 @@ const secondary* = red
|
|||
const alert* = "#bd2c40"
|
||||
var loop* = true
|
||||
var stoploop* = false
|
||||
var dmenu* = false
|
||||
var dmenu = false
|
||||
var rofi = false
|
||||
|
||||
proc newi3BarData*(): i3BarData =
|
||||
return i3BarData(
|
||||
|
@ -74,20 +76,43 @@ proc getArguments*(): seq[string] =
|
|||
let args = commandLineParams()
|
||||
return args
|
||||
|
||||
proc outputJSON*(data: i3barData) =
|
||||
echo $$data
|
||||
|
||||
proc runDMenu*(data: i3BarData) =
|
||||
var cmd = "echo " & $data.full_text & " | dmenu "
|
||||
proc runDMenu*(data: i3BarData, opts: varargs[string]): string =
|
||||
var cmd = "echo -e \"" & $data.full_text & "\n"
|
||||
for opt in opts:
|
||||
cmd = cmd & opt & "\n"
|
||||
cmd = cmd & "\" | dmenu"
|
||||
#cmd = cmd & " -l 2 "
|
||||
cmd = cmd & " -p \"" & $data.title & "\""
|
||||
cmd = cmd & " -nb \"" & $data.background & "\""
|
||||
cmd = cmd & " -nf \"" & $data.color & "\""
|
||||
cmd = cmd & " -sb \"" & $data.border & "\""
|
||||
cmd = cmd & " -sf \"" & $data.color & "\""
|
||||
#echo "Dmenu :", cmd
|
||||
let output = execCmdEx(cmd)
|
||||
let option:string = strip(output[0])
|
||||
discard execCmd("i3-msg mode \"default\"")
|
||||
return option
|
||||
|
||||
proc runRofi*(data: i3BarData) =
|
||||
var cmd = "rofi"
|
||||
cmd = cmd & " -e \"" & $data.full_text & "\""
|
||||
#echo "Rofi : ", cmd
|
||||
discard execCmd(cmd)
|
||||
discard execCmd("i3-msg mode \"default\"")
|
||||
|
||||
proc outputJSON*(data: i3barData, args: seq[string]): string {.discardable.} =
|
||||
var output = ""
|
||||
if dmenu:
|
||||
output = runDMenu(data, args)
|
||||
elif rofi:
|
||||
runRofi(data)
|
||||
else:
|
||||
var j_data = data
|
||||
if j_data.html_text != "":
|
||||
j_data.full_text = j_data.html_text
|
||||
echo $$j_data
|
||||
return output
|
||||
|
||||
let args = getArguments()
|
||||
for arg in args:
|
||||
if arg == "noloop":
|
||||
|
@ -95,5 +120,8 @@ for arg in args:
|
|||
if arg == "dmenu":
|
||||
stoploop = true
|
||||
dmenu = true
|
||||
if arg == "rofi":
|
||||
stoploop = true
|
||||
rofi = true
|
||||
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ proc get_charge(): int =
|
|||
charge = parseInt(chg)
|
||||
return charge
|
||||
|
||||
proc get_design(charge: int, state: bool): (string, string, string, string) =
|
||||
proc get_design(charge: int, state: bool): (string, string, string, string, string) =
|
||||
var icon = " "
|
||||
var icon_colour = lightgreen
|
||||
var col = foreground
|
||||
|
@ -60,13 +60,16 @@ proc get_design(charge: int, state: bool): (string, string, string, string) =
|
|||
else:
|
||||
icon = "x "
|
||||
|
||||
let main_text = icon & " " & $charge & "%"
|
||||
let text = "<span foreground=\"" & icon_colour & "\">" & icon & "</span>" & $charge & "%"
|
||||
return (text, col, bg, border)
|
||||
return (text,main_text, col, bg, border)
|
||||
|
||||
proc get_output(charge: int, state: bool): i3barData =
|
||||
let (text,col,bg_col,bord_col) = get_design(charge, state)
|
||||
let (text,main_text,col,bg_col,bord_col) = get_design(charge, state)
|
||||
let data = i3barData(
|
||||
full_text: text,
|
||||
title: "Battery : ",
|
||||
full_text: main_text,
|
||||
html_text: text,
|
||||
color: col,
|
||||
border: bord_col,
|
||||
background: bg_col
|
||||
|
@ -85,6 +88,8 @@ proc get_battery_info() =
|
|||
outputJSON(data)
|
||||
last_charge = charge
|
||||
last_state = state
|
||||
if stoploop:
|
||||
break
|
||||
sleep(1000)
|
||||
|
||||
proc main() =
|
||||
|
|
|
@ -3,7 +3,6 @@ import strutils
|
|||
import std/osproc
|
||||
import std/math
|
||||
import i3bar_base
|
||||
import std/threadpool
|
||||
|
||||
proc getLimit(): int
|
||||
|
||||
|
@ -31,7 +30,7 @@ proc getDesign(pcnt: float): string =
|
|||
let text = icon & " " & $percent & "%"
|
||||
return text
|
||||
|
||||
proc get_brightness(run_once: bool = false) =
|
||||
proc get_brightness*(run_once: bool = false) =
|
||||
var last_pcnt: float = 0
|
||||
while true:
|
||||
let current = parseInt(strip(readFile("/sys/class/backlight/intel_backlight/actual_brightness")))
|
||||
|
@ -39,32 +38,28 @@ proc get_brightness(run_once: bool = false) =
|
|||
if pcnt != last_pcnt:
|
||||
let text = getDesign(pcnt)
|
||||
var data = newi3BarData()
|
||||
data.title = "Brightness : "
|
||||
data.full_text = text
|
||||
data.border = yellow
|
||||
outputJSON(data)
|
||||
let args = @["up", "down"]
|
||||
let option = outputJSON(data,args)
|
||||
case option:
|
||||
of "up":
|
||||
discard execCmd("xbacklight -inc 5")
|
||||
get_brightness(true)
|
||||
of "down":
|
||||
discard execCmd("xbacklight -dec 5")
|
||||
get_brightness(true)
|
||||
|
||||
if run_once:
|
||||
break
|
||||
if stoploop:
|
||||
break
|
||||
last_pcnt = pcnt
|
||||
sleep(1000)
|
||||
|
||||
proc await_click_info() =
|
||||
while true:
|
||||
let input = parseInput()
|
||||
case input.button:
|
||||
of 1,4:
|
||||
let state = execCmd("xbacklight -inc 5")
|
||||
get_brightness(true)
|
||||
of 3,5:
|
||||
let state = execCmd("xbacklight -dec 5")
|
||||
get_brightness(true)
|
||||
else:
|
||||
let no = false
|
||||
|
||||
clearInput(2)
|
||||
|
||||
proc main() =
|
||||
spawn get_brightness()
|
||||
spawn await_click_info()
|
||||
sync()
|
||||
get_brightness()
|
||||
|
||||
if isMainModule:
|
||||
main()
|
||||
|
|
27
i3bar_brightness_threads.nim
Normal file
27
i3bar_brightness_threads.nim
Normal file
|
@ -0,0 +1,27 @@
|
|||
import i3bar_base
|
||||
import i3bar_brightness
|
||||
import std/threadpool
|
||||
import std/osproc
|
||||
|
||||
proc await_click_info() =
|
||||
while true:
|
||||
let input = parseInput()
|
||||
case input.button:
|
||||
of 1,4:
|
||||
let state = execCmd("xbacklight -inc 5")
|
||||
get_brightness(true)
|
||||
of 3,5:
|
||||
let state = execCmd("xbacklight -dec 5")
|
||||
get_brightness(true)
|
||||
else:
|
||||
let no = false
|
||||
|
||||
clearInput(2)
|
||||
|
||||
proc main() =
|
||||
spawn get_brightness()
|
||||
spawn await_click_info()
|
||||
sync()
|
||||
|
||||
if isMainModule:
|
||||
main()
|
|
@ -2,55 +2,64 @@ import std/os
|
|||
import std/times
|
||||
import std/osproc
|
||||
import std/re
|
||||
import std/threadpool
|
||||
import i3bar_base
|
||||
|
||||
let args = getArguments()
|
||||
|
||||
proc getObject(date: string): i3barData =
|
||||
let data = i3barData(
|
||||
full_text: date,
|
||||
color: foreground,
|
||||
border: blue
|
||||
)
|
||||
var data = newi3barData()
|
||||
data.title = "Date : "
|
||||
data.full_text = date
|
||||
data.border = blue
|
||||
return data
|
||||
|
||||
#proc openCalendar(datestr: string) =
|
||||
proc openCalendar(input: i3barInput) =
|
||||
|
||||
proc newCalendar(): string =
|
||||
var c = """yad --calendar \
|
||||
--undecorated --fixed --close-on-unfocus --no-buttons \
|
||||
--width="222" --height="193" \
|
||||
--posx="%pos_x" --posy="%pos_y" \
|
||||
--title="yad-calendar" --borders 0 > /dev/null
|
||||
"""
|
||||
return c
|
||||
proc openCalendar*(input: i3barInput) =
|
||||
var c = newCalendar()
|
||||
|
||||
c = replace(c,re"%pos_x", $(input.x - 111))
|
||||
c = replace(c,re"%pos_y", $input.y)
|
||||
|
||||
discard execCmd(c)
|
||||
|
||||
proc getDate() =
|
||||
proc dmenuCalendar() =
|
||||
var c = newCalendar()
|
||||
|
||||
c = replace(c,re"%pos_x", "100")
|
||||
c = replace(c,re"%pos_y", "0")
|
||||
|
||||
discard execCmd(c)
|
||||
|
||||
|
||||
proc getDate*() =
|
||||
var last_date = ""
|
||||
while true:
|
||||
let now = now()
|
||||
let d = now.format("yyyy-MM-dd")
|
||||
if d != last_date:
|
||||
let data = getObject(d)
|
||||
outputJSON(data)
|
||||
let args = @["open calendar"]
|
||||
case outputJSON(data, args):
|
||||
of "open calendar":
|
||||
dmenuCalendar()
|
||||
last_date = d
|
||||
if stoploop:
|
||||
break
|
||||
sleep(5000)
|
||||
|
||||
proc await_click_info() =
|
||||
while true:
|
||||
let input = parseInput()
|
||||
if input.button == 1:
|
||||
openCalendar(input)
|
||||
|
||||
proc main() =
|
||||
spawn getDate()
|
||||
spawn await_click_info()
|
||||
sync()
|
||||
getDate()
|
||||
|
||||
|
||||
if isMainModule:
|
||||
main()
|
||||
|
||||
#DATE="$(date +"%a %d %H:%M")"
|
||||
|
|
18
i3bar_date_threads.nim
Normal file
18
i3bar_date_threads.nim
Normal file
|
@ -0,0 +1,18 @@
|
|||
import std/threadpool
|
||||
import i3bar_date
|
||||
import i3bar_base
|
||||
|
||||
proc await_click_info() =
|
||||
while true:
|
||||
let input = parseInput()
|
||||
if input.button == 1:
|
||||
openCalendar(input)
|
||||
|
||||
proc main() =
|
||||
spawn getDate()
|
||||
spawn await_click_info()
|
||||
sync()
|
||||
|
||||
|
||||
if isMainModule:
|
||||
main()
|
|
@ -74,7 +74,7 @@ proc getObject(time: string): i3barData =
|
|||
var data = newi3barData()
|
||||
data.title = "Fuzzy Time :"
|
||||
data.full_text = time
|
||||
#data.color = foreground
|
||||
data.color = foreground
|
||||
data.border = lightblue
|
||||
return data
|
||||
|
||||
|
@ -85,12 +85,12 @@ proc main() =
|
|||
let time = get_fuzzytime()
|
||||
if time != last_time:
|
||||
let data = getObject(time)
|
||||
if dmenu:
|
||||
runDMenu(data)
|
||||
break
|
||||
outputJSON(data)
|
||||
if stoploop:
|
||||
break
|
||||
last_time = time
|
||||
|
||||
sleep(2000)
|
||||
|
||||
if isMainModule:
|
||||
main()
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import i3bar_base
|
||||
import std/os
|
||||
import std/osproc
|
||||
import std/threadpool
|
||||
import strutils
|
||||
|
||||
const nics: seq[string] = @["wlan0", "enp3s0","wlp2s0","enp0s20f0u3"]
|
||||
|
@ -25,29 +24,31 @@ proc get_net(nic: string): (string, string) =
|
|||
|
||||
proc getObject(conn: string, nic: string): i3barData =
|
||||
var data = newi3barData()
|
||||
data.title = "IP :"
|
||||
data.full_text = conn
|
||||
data.border = purple
|
||||
return data
|
||||
|
||||
proc get_net_info(nic: string) =
|
||||
proc get_net_info*(nic: string) =
|
||||
var last_ip = ""
|
||||
var last_state = ""
|
||||
while true:
|
||||
let (ip, state) = get_net(nic)
|
||||
if ip != last_ip or state != last_state:
|
||||
let data = getObject(state & " " & ip, nic)
|
||||
outputJSON(data)
|
||||
let args = @["nmtui-connect"]
|
||||
let option = outputJSON(data, args)
|
||||
case option:
|
||||
of "nmtui-connect":
|
||||
discard execCmd("alacritty -e nmtui-connect")
|
||||
last_ip = ip
|
||||
last_state = state
|
||||
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 get_nic(): string =
|
||||
proc get_nic*(): string =
|
||||
for nic in nics:
|
||||
if dirExists("/sys/class/net/" & nic):
|
||||
return nic
|
||||
|
@ -56,9 +57,7 @@ proc get_nic(): string =
|
|||
proc main() =
|
||||
let mynic = get_nic()
|
||||
if dirExists("/sys/class/net/" & mynic):
|
||||
spawn get_net_info(mynic)
|
||||
spawn await_click_info()
|
||||
sync()
|
||||
get_net_info(mynic)
|
||||
else:
|
||||
echo "No NIC"
|
||||
|
||||
|
|
25
i3bar_nic_threads.nim
Normal file
25
i3bar_nic_threads.nim
Normal file
|
@ -0,0 +1,25 @@
|
|||
import i3bar_base
|
||||
import i3bar_nic
|
||||
import std/os
|
||||
import std/osproc
|
||||
import std/threadpool
|
||||
import strutils
|
||||
|
||||
proc await_click_info() =
|
||||
while true:
|
||||
let input = parseInput()
|
||||
if input.button == 1:
|
||||
discard execCmd("alacritty -e nmtui-connect")
|
||||
|
||||
|
||||
proc main() =
|
||||
let mynic = get_nic()
|
||||
if dirExists("/sys/class/net/" & mynic):
|
||||
spawn get_net_info(mynic)
|
||||
spawn await_click_info()
|
||||
sync()
|
||||
else:
|
||||
echo "No NIC"
|
||||
|
||||
if isMainModule:
|
||||
main()
|
|
@ -68,9 +68,6 @@ proc main() =
|
|||
let ping = get_ping()
|
||||
if ping != last_ping:
|
||||
let data = getObject(ping)
|
||||
if dmenu:
|
||||
runDMenu(data)
|
||||
else:
|
||||
outputJSON(data)
|
||||
last_ping = ping
|
||||
loop = not stoploop
|
||||
|
@ -78,4 +75,5 @@ proc main() =
|
|||
sleep(time_secs * 1000)
|
||||
|
||||
|
||||
if isMainModule:
|
||||
main()
|
||||
|
|
|
@ -41,11 +41,13 @@ proc getObject(temp: int): i3barData =
|
|||
colour = green
|
||||
icon = ""
|
||||
let text = "<span foreground='" & colour & "'>" & icon & "</span> " & $temp & "°C"
|
||||
let data = i3barData(
|
||||
full_text: text,
|
||||
color: foreground,
|
||||
border: colour
|
||||
)
|
||||
let main_text = icon & " " & $temp & "°C"
|
||||
var data = newi3barData()
|
||||
data.title = "Temp : "
|
||||
data.full_text = main_text
|
||||
data.html_text = text
|
||||
data.color = foreground
|
||||
data.border = colour
|
||||
return data
|
||||
|
||||
proc main() =
|
||||
|
@ -57,6 +59,8 @@ proc main() =
|
|||
let data = getObject(temp)
|
||||
outputJSON(data)
|
||||
last_temp = temp
|
||||
if stoploop:
|
||||
break
|
||||
sleep(10000)
|
||||
|
||||
main()
|
||||
|
|
|
@ -3,13 +3,11 @@ import i3bar_base
|
|||
import std/re
|
||||
import std/httpclient
|
||||
import std/os
|
||||
import std/json
|
||||
import std/times
|
||||
import std/threadpool
|
||||
import std/osproc
|
||||
|
||||
const url = "https://www.tidetimes.org.uk/%LOC-tide-times"
|
||||
const loc = "exmouth-dock"
|
||||
const url* = "https://www.tidetimes.org.uk/%LOC-tide-times"
|
||||
const loc* = "exmouth-dock"
|
||||
const icon: string = "🌊"
|
||||
|
||||
type
|
||||
|
@ -86,9 +84,7 @@ proc getDesign(tides: seq[Tide]): i3barData =
|
|||
return data
|
||||
|
||||
|
||||
|
||||
|
||||
proc getTides() {.gcsafe.}=
|
||||
proc getTides*() {.gcsafe.}=
|
||||
var mytides = TideList()
|
||||
var last_data = ""
|
||||
while true:
|
||||
|
@ -99,20 +95,11 @@ proc getTides() {.gcsafe.}=
|
|||
if $data != last_data:
|
||||
outputJSON(data)
|
||||
last_data = $data
|
||||
if stoploop:
|
||||
break
|
||||
sleep(10000)
|
||||
|
||||
proc await_click_info() =
|
||||
while true:
|
||||
let input = parseInput()
|
||||
case input.button:
|
||||
of 1:
|
||||
let state = execCmd("xdg-open " & replace(url,re"\%LOC",loc))
|
||||
else:
|
||||
let no = false
|
||||
|
||||
proc main() =
|
||||
spawn getTides()
|
||||
spawn await_click_info()
|
||||
sync()
|
||||
getTides()
|
||||
|
||||
main()
|
||||
|
|
21
i3bar_tides_threads.nim
Normal file
21
i3bar_tides_threads.nim
Normal file
|
@ -0,0 +1,21 @@
|
|||
import i3bar_tides
|
||||
import i3bar_base
|
||||
import std/re
|
||||
import std/threadpool
|
||||
import std/osproc
|
||||
|
||||
proc await_click_info() =
|
||||
while true:
|
||||
let input = parseInput()
|
||||
case input.button:
|
||||
of 1:
|
||||
let state = execCmd("xdg-open " & replace(url,re"\%LOC",loc))
|
||||
else:
|
||||
let no = false
|
||||
|
||||
proc main() =
|
||||
spawn getTides()
|
||||
spawn await_click_info()
|
||||
sync()
|
||||
|
||||
main()
|
|
@ -3,7 +3,6 @@ import strutils
|
|||
import std/osproc
|
||||
import std/math
|
||||
import i3bar_base
|
||||
import std/threadpool
|
||||
|
||||
proc get_current_volume(): string {.gcsafe.}
|
||||
|
||||
|
@ -15,11 +14,11 @@ proc check_volume(volume: string): string =
|
|||
vol = check_volume(vol)
|
||||
return vol
|
||||
|
||||
proc getDesign(volume: string): string =
|
||||
proc getDesign(volume: string): (string,string) =
|
||||
let vol = check_volume(volume)
|
||||
var icon = " "
|
||||
if vol == "muted":
|
||||
return icon & "muted"
|
||||
return (icon & "muted", "")
|
||||
let pcnt = parseInt(strip(vol))
|
||||
case pcnt:
|
||||
of 85..100:
|
||||
|
@ -32,8 +31,9 @@ proc getDesign(volume: string): string =
|
|||
icon = " "
|
||||
else:
|
||||
icon = " "
|
||||
let main_text = icon & $pcnt & "%"
|
||||
let text = "<span size=\"x-large\">" & icon & "</span>" & $pcnt & "%"
|
||||
return text
|
||||
return (text, main_text)
|
||||
|
||||
proc get_current_volume(): string =
|
||||
let mute = execCmdEx("pamixer --get-mute")
|
||||
|
@ -42,49 +42,47 @@ proc get_current_volume(): string =
|
|||
let vol = execCmdEx("pamixer --get-volume")
|
||||
return vol.output
|
||||
|
||||
proc get_volume(run_once: bool = false) =
|
||||
proc get_volume*(run_once: bool = false) =
|
||||
var last_vol: string = ""
|
||||
while true:
|
||||
let vol = get_current_volume()
|
||||
if vol != last_vol or true:
|
||||
let text = getDesign(vol)
|
||||
let (text, main_text) = getDesign(vol)
|
||||
let data = i3barData(
|
||||
full_text: text,
|
||||
title: "Volume : ",
|
||||
html_text: text,
|
||||
full_text: main_text,
|
||||
color: foreground,
|
||||
border: green,
|
||||
background: black
|
||||
)
|
||||
outputJSON(data)
|
||||
let args = @["up", "down", "mute", "ncpamixer", "pavucontrol"]
|
||||
let option = outputJSON(data,args)
|
||||
case option:
|
||||
of "up":
|
||||
discard execCmd("pamixer -i 5")
|
||||
get_volume()
|
||||
of "down":
|
||||
discard execCmd("pamixer -d 5")
|
||||
get_volume()
|
||||
of "mute":
|
||||
discard execCmd("pamixer -t")
|
||||
get_volume()
|
||||
of "ncpamixer":
|
||||
discard execCmd("ncpamixer")
|
||||
of "pavucontrol":
|
||||
discard execCmd("pavucontrol")
|
||||
|
||||
|
||||
if run_once:
|
||||
break
|
||||
last_vol = vol
|
||||
sleep(1000)
|
||||
|
||||
proc await_click_info() =
|
||||
while true:
|
||||
let input = parseInput()
|
||||
case input.button:
|
||||
of 4:
|
||||
discard execCmd("pamixer -i 5")
|
||||
get_volume(true)
|
||||
clearInput(2)
|
||||
of 5:
|
||||
discard execCmd("pamixer -d 5")
|
||||
get_volume(true)
|
||||
clearInput(2)
|
||||
of 1:
|
||||
discard execCmd("pamixer -t")
|
||||
get_volume(true)
|
||||
of 3:
|
||||
discard execCmd("alacritty -e ncpamixer")
|
||||
get_volume(true)
|
||||
else:
|
||||
let no = false
|
||||
|
||||
if stoploop:
|
||||
break
|
||||
|
||||
proc main() =
|
||||
spawn get_volume()
|
||||
spawn await_click_info()
|
||||
sync()
|
||||
get_volume()
|
||||
|
||||
if isMainModule:
|
||||
main()
|
||||
|
|
34
i3bar_volume_threads.nim
Normal file
34
i3bar_volume_threads.nim
Normal file
|
@ -0,0 +1,34 @@
|
|||
import i3bar_base
|
||||
import i3bar_volume
|
||||
import std/threadpool
|
||||
import std/osproc
|
||||
|
||||
proc await_click_info() =
|
||||
while true:
|
||||
let input = parseInput()
|
||||
case input.button:
|
||||
of 4:
|
||||
discard execCmd("pamixer -i 5")
|
||||
get_volume(true)
|
||||
clearInput(2)
|
||||
of 5:
|
||||
discard execCmd("pamixer -d 5")
|
||||
get_volume(true)
|
||||
clearInput(2)
|
||||
of 1:
|
||||
discard execCmd("pamixer -t")
|
||||
get_volume(true)
|
||||
of 3:
|
||||
discard execCmd("alacritty -e ncpamixer")
|
||||
get_volume(true)
|
||||
else:
|
||||
let no = false
|
||||
|
||||
|
||||
proc main() =
|
||||
spawn get_volume()
|
||||
spawn await_click_info()
|
||||
sync()
|
||||
|
||||
if isMainModule:
|
||||
main()
|
|
@ -1,10 +1,9 @@
|
|||
import i3bar_base
|
||||
import std/os
|
||||
import std/osproc
|
||||
import std/threadpool
|
||||
import strutils
|
||||
|
||||
const wlan_nic: string ="wlan0"
|
||||
const wlan_nic*: string ="wlan0"
|
||||
|
||||
# /sys/class/net/wlp2s0/operstate up or down if connected
|
||||
|
||||
|
@ -29,18 +28,26 @@ proc get_wifi(): (string, string) =
|
|||
|
||||
proc getObject(conn: string): i3barData =
|
||||
var data = newi3barData()
|
||||
data.title = "WiFi : "
|
||||
data.full_text = conn
|
||||
data.border = purple
|
||||
return data
|
||||
|
||||
proc get_wifi_info() =
|
||||
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)
|
||||
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() =
|
||||
|
@ -51,10 +58,9 @@ proc await_click_info() =
|
|||
|
||||
proc main() =
|
||||
if dirExists("/sys/class/net/" & wlan_nic):
|
||||
spawn get_wifi_info()
|
||||
spawn await_click_info()
|
||||
sync()
|
||||
get_wifi_info()
|
||||
else:
|
||||
echo "No WLAN"
|
||||
|
||||
if isMainModule:
|
||||
main()
|
||||
|
|
22
i3bar_wlan_threads.nim
Executable file
22
i3bar_wlan_threads.nim
Executable file
|
@ -0,0 +1,22 @@
|
|||
import i3bar_base
|
||||
import i3bar_wlan
|
||||
import std/[os,osproc]
|
||||
import std/threadpool
|
||||
|
||||
|
||||
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"
|
||||
|
||||
if isMainModule:
|
||||
main()
|
Loading…
Reference in a new issue