import std/os import strutils import std/osproc import std/math import base proc getLimit(): int let limit = getLimit() 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 = newInfo() data.title = "Brightness : " data.full_text = text data.border = yellow data.selected_background = yellow data.selected_color = black let args = @["up", "down"] let option = outputJSON(data,args) if option in args: case option: of "up": discard execCmd("xbacklight -inc 5") get_brightness(true) of "down": discard execCmd("xbacklight -dec 5") get_brightness(true) else: try: let i = parseInt(option) discard execCmd("xbacklight -set " & $i) get_brightness(true) except: echo getCurrentExceptionMsg() if run_once: break if stoploop: break last_pcnt = pcnt sleep(1000) proc main() = get_brightness() if isMainModule: main()