wmtools/i3bar_volume.nim

79 lines
1.6 KiB
Nim

import std/os
import strutils
import std/osproc
import std/math
import i3bar_base
import std/threadpool
proc getDesign(vol: string): string =
var icon = ""
if vol == "muted":
return icon & "muted"
let pcnt = parseInt(strip(vol))
case pcnt:
of 85..100:
icon = ""
of 55..84:
icon = ""
of 35..54:
icon = ""
of 10..34:
icon = ""
else:
icon = ""
let text = icon & $pcnt & "%"
return text
proc get_current_volume(): string =
let mute = execCmdEx("pamixer --get-mute")
if strip(mute.output) == "true":
return "muted"
let vol = execCmdEx("pamixer --get-volume")
return vol.output
proc get_volume(run_once: bool = false) =
var last_vol: string = ""
while true:
let vol = get_current_volume()
if vol != last_vol:
let text = getDesign(vol)
let data = i3barData(
full_text: text,
color: foreground,
border: green,
background: black
)
outputJSON(data)
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
proc main() =
spawn get_volume()
spawn await_click_info()
sync()
main()