import std/os import strutils import std/osproc import std/math import i3bar_base proc getLimit(): int let limit = getLimit() let args = getArguments() proc getLimit(): int = let limit = parseInt(strip(readFile("/sys/class/backlight/intel_backlight/max_brightness"))) return limit proc getDesign(pcnt: float): string = var icon = "🌑" case pcnt: of 85..100: icon = "🌕" of 75..85: icon = "🌖" of 50..75: icon = "🌗" of 35..50: icon = "🌘" else: icon = "🌑" let percent = toInt(round(pcnt,0)) let text = icon & " " & $percent & "%" return text 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"))) let pcnt = (current/limit)*100 if pcnt != last_pcnt: let text = getDesign(pcnt) var data = newi3BarData() data.title = "Brightness : " data.full_text = text data.border = yellow 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 main() = get_brightness() if isMainModule: main()