70 lines
1.5 KiB
Nim
Executable file
70 lines
1.5 KiB
Nim
Executable file
import std/os
|
|
import strutils
|
|
import std/osproc
|
|
import std/math
|
|
import i3bar_base
|
|
import std/threadpool
|
|
|
|
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.full_text = text
|
|
data.border = yellow
|
|
outputJSON(data)
|
|
if run_once:
|
|
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()
|
|
|
|
main()
|