65 lines
1.4 KiB
Nim
65 lines
1.4 KiB
Nim
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()
|