first commit
This commit is contained in:
commit
bc5084df13
6 changed files with 310 additions and 0 deletions
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# ignore all
|
||||||
|
*
|
||||||
|
|
||||||
|
# unignore all with extensions
|
||||||
|
!*.*
|
||||||
|
|
||||||
|
# unignore directories
|
||||||
|
!*/
|
38
i3bar_base.nim
Normal file
38
i3bar_base.nim
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
import marshal
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
type
|
||||||
|
i3BarData* = object
|
||||||
|
full_text*: string
|
||||||
|
short_text*: string
|
||||||
|
color*: string
|
||||||
|
border*: string
|
||||||
|
|
||||||
|
const background* = "#000000"
|
||||||
|
const backgroundalt* = "#bb222222"
|
||||||
|
const backgroundalt2* = "#bb333333"
|
||||||
|
const foreground* = "#dfdfdf"
|
||||||
|
const foregroundalt* = "#777"
|
||||||
|
const foregroundalt2* = "#ccc"
|
||||||
|
const yellow* = "#ffb52a"
|
||||||
|
const red* = "#e60053"
|
||||||
|
const purple* = "#9f78e1"
|
||||||
|
const blue* = "#0a6cf5"
|
||||||
|
const lightblue* = "#7296EF"
|
||||||
|
const lighterblue* = "#B5DDF7"
|
||||||
|
const green* = "#4b9901"
|
||||||
|
const lightgreen* = "#00ff00"
|
||||||
|
const grey* = "#dfdfdf"
|
||||||
|
const darkgrey* = "#444"
|
||||||
|
const primary* = yellow
|
||||||
|
const secondary* = red
|
||||||
|
const alert* = "#bd2c40"
|
||||||
|
|
||||||
|
proc getArguments*(): seq[string] =
|
||||||
|
let args = commandLineParams()
|
||||||
|
return args
|
||||||
|
|
||||||
|
proc outputJSON*(data: i3barData) =
|
||||||
|
echo $$data
|
||||||
|
|
||||||
|
|
54
i3bar_brightness.nim
Normal file
54
i3bar_brightness.nim
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
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 getBrightness() =
|
||||||
|
let current = parseInt(strip(readFile("/sys/class/backlight/intel_backlight/actual_brightness")))
|
||||||
|
let pcnt = (current/limit)*100
|
||||||
|
let text = getDesign(pcnt)
|
||||||
|
let data = i3barData(
|
||||||
|
full_text: text,
|
||||||
|
color: foreground,
|
||||||
|
border: yellow
|
||||||
|
)
|
||||||
|
outputJSON(data)
|
||||||
|
|
||||||
|
proc main() =
|
||||||
|
if len(args) > 0:
|
||||||
|
if args[0] == "4":
|
||||||
|
discard execCmd("xbacklight -inc 5")
|
||||||
|
elif args[0] == "5":
|
||||||
|
discard execCmd("xbacklight -dec 5")
|
||||||
|
getBrightness()
|
||||||
|
|
||||||
|
main()
|
64
i3bar_date.nim
Normal file
64
i3bar_date.nim
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
import std/os
|
||||||
|
import std/times
|
||||||
|
import std/osproc
|
||||||
|
import i3bar_base
|
||||||
|
|
||||||
|
let args = getArguments()
|
||||||
|
|
||||||
|
proc getObject(date: string): i3barData =
|
||||||
|
let data = i3barData(
|
||||||
|
full_text: date,
|
||||||
|
color: foreground,
|
||||||
|
border: blue
|
||||||
|
)
|
||||||
|
return data
|
||||||
|
|
||||||
|
proc openCalendar() =
|
||||||
|
let cmd = "~/Nextcloud/Backups/Linux/dotFiles/scripts/popup-calendar.sh"
|
||||||
|
discard execCmd(cmd)
|
||||||
|
|
||||||
|
proc getDate() =
|
||||||
|
let now = now()
|
||||||
|
let d = now.format("yyyy-MM-dd")
|
||||||
|
let data = getObject(d)
|
||||||
|
outputJSON(data)
|
||||||
|
|
||||||
|
proc main() =
|
||||||
|
if len(args) == 0:
|
||||||
|
#while true:
|
||||||
|
getDate()
|
||||||
|
# sleep(5000)
|
||||||
|
else:
|
||||||
|
if args[0] == "1":
|
||||||
|
openCalendar()
|
||||||
|
getDate()
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
#BAR_HEIGHT=28 # polybar height
|
||||||
|
#BORDER_SIZE=1 # border size from your wm settings
|
||||||
|
#YAD_WIDTH=222 # 222 is minimum possible value
|
||||||
|
#YAD_HEIGHT=193 # 193 is minimum possible value
|
||||||
|
#DATE="$(date +"%a %d %H:%M")"
|
||||||
|
#if [ "$(xdotool getwindowfocus getwindowname)" = "yad-calendar" ]; then
|
||||||
|
# exit 0
|
||||||
|
#fi
|
||||||
|
#eval "$(xdotool getmouselocation --shell)"
|
||||||
|
#eval "$(xdotool getdisplaygeometry --shell)"
|
||||||
|
## X
|
||||||
|
#if [ "$((X + YAD_WIDTH / 2 + BORDER_SIZE))" -gt "$WIDTH" ]; then #Right side
|
||||||
|
# : $((pos_x = WIDTH - YAD_WIDTH - BORDER_SIZE))
|
||||||
|
#elif [ "$((X - YAD_WIDTH / 2 - BORDER_SIZE))" -lt 0 ]; then #Left side
|
||||||
|
# : $((pos_x = BORDER_SIZE))
|
||||||
|
#else #Center
|
||||||
|
# : $((pos_x = X - YAD_WIDTH / 2))
|
||||||
|
#fi
|
||||||
|
## Y
|
||||||
|
#if [ "$Y" -gt "$((HEIGHT / 2))" ]; then #Bottom
|
||||||
|
# : $((pos_y = HEIGHT - YAD_HEIGHT - BAR_HEIGHT - BORDER_SIZE))
|
||||||
|
#else #Top
|
||||||
|
# : $((pos_y = BAR_HEIGHT + BORDER_SIZE))
|
||||||
|
#fi
|
||||||
|
#yad --calendar --undecorated --fixed --close-on-unfocus --no-buttons \
|
||||||
|
# --width="$YAD_WIDTH" --height="$YAD_HEIGHT" --posx="$pos_x" --posy="$pos_y" \
|
||||||
|
# --title="yad-calendar" --borders=0 >/dev/null &
|
87
i3bar_fuzzytime.nim
Normal file
87
i3bar_fuzzytime.nim
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
import std/times
|
||||||
|
import std/os
|
||||||
|
import i3bar_base
|
||||||
|
|
||||||
|
proc get_hour(hr: int): string
|
||||||
|
proc get_minute(min: int): string
|
||||||
|
|
||||||
|
proc get_fuzzytime(): string =
|
||||||
|
let tm = now()
|
||||||
|
var hr = tm.hour()
|
||||||
|
let min = tm.minute()
|
||||||
|
var link = "past"
|
||||||
|
if min > 32 :
|
||||||
|
link = "to"
|
||||||
|
hr = hr + 1
|
||||||
|
|
||||||
|
if min >= 58 or min <= 02:
|
||||||
|
return get_hour(hr) & " " & get_minute(min)
|
||||||
|
else:
|
||||||
|
return get_minute(min) & " " & link & " " & get_hour(hr)
|
||||||
|
|
||||||
|
proc get_hour(hr: int): string =
|
||||||
|
case hr:
|
||||||
|
of 1, 13:
|
||||||
|
return "one"
|
||||||
|
of 2, 14:
|
||||||
|
return "two"
|
||||||
|
of 3, 15:
|
||||||
|
return "three"
|
||||||
|
of 4, 16:
|
||||||
|
return "four"
|
||||||
|
of 5, 17:
|
||||||
|
return "five"
|
||||||
|
of 6, 18:
|
||||||
|
return "six"
|
||||||
|
of 7, 19:
|
||||||
|
return "seven"
|
||||||
|
of 8, 20:
|
||||||
|
return "eight"
|
||||||
|
of 9, 21:
|
||||||
|
return "nine"
|
||||||
|
of 10, 22:
|
||||||
|
return "ten"
|
||||||
|
of 11, 23:
|
||||||
|
return "eleven"
|
||||||
|
of 0, 12, 24:
|
||||||
|
return "twelve"
|
||||||
|
else:
|
||||||
|
return "error"
|
||||||
|
|
||||||
|
proc get_minute(min: int): string =
|
||||||
|
case min:
|
||||||
|
of 58,59,0,1,2:
|
||||||
|
return "o'clock"
|
||||||
|
of 3,4,5,6,7,53,54,55,56,57:
|
||||||
|
return "five"
|
||||||
|
of 8,9,10,11,12,48,49,50,51,52:
|
||||||
|
return "ten"
|
||||||
|
of 13,14,15,16,17,43,44,45,46,47:
|
||||||
|
return "quarter"
|
||||||
|
of 18,19,20,21,22,38,39,40,41,42:
|
||||||
|
return "twenty"
|
||||||
|
of 23,24,25,26,27,33,34,35,36,37:
|
||||||
|
return "twenty-five"
|
||||||
|
of 28,29,30,31,32:
|
||||||
|
return "half"
|
||||||
|
else:
|
||||||
|
return "error"
|
||||||
|
|
||||||
|
proc getObject(time: string): i3barData =
|
||||||
|
let data = i3barData(
|
||||||
|
full_text: time,
|
||||||
|
color: foreground,
|
||||||
|
border: lightblue,
|
||||||
|
)
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
proc main() =
|
||||||
|
while true:
|
||||||
|
let time = get_fuzzytime()
|
||||||
|
let data = getObject(time)
|
||||||
|
outputJSON(data)
|
||||||
|
|
||||||
|
sleep(10000)
|
||||||
|
|
||||||
|
main()
|
59
i3bar_temperature.nim
Normal file
59
i3bar_temperature.nim
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
import std/os
|
||||||
|
import std/re
|
||||||
|
import std/math
|
||||||
|
import strutils
|
||||||
|
import i3bar_base
|
||||||
|
|
||||||
|
|
||||||
|
proc getThermalZones(): seq[string] =
|
||||||
|
var zones: seq[string] = @[]
|
||||||
|
let dirname = re("thermal_zone[\\d]+")
|
||||||
|
for file in walkDir("/sys/class/thermal/"):
|
||||||
|
if contains(file.path,dirname):
|
||||||
|
let state = readFile(file.path & "/mode")
|
||||||
|
if contains(state,re"enabled"):
|
||||||
|
zones.add(file.path)
|
||||||
|
return zones
|
||||||
|
|
||||||
|
proc getTemp(zone: string): int =
|
||||||
|
let temp = strip(readFile(zone & "/temp"))
|
||||||
|
return parseInt(temp)
|
||||||
|
|
||||||
|
proc getAverageTemp(zones: seq[string]): int =
|
||||||
|
var temps: int = 0
|
||||||
|
for zone in zones:
|
||||||
|
let temp = getTemp(zone)
|
||||||
|
temps += temp
|
||||||
|
let avgtemp = ceil((temps / len(zones))/1000)
|
||||||
|
return toInt(round(avgtemp,0))
|
||||||
|
|
||||||
|
proc getObject(temp: int): i3barData =
|
||||||
|
var icon = ""
|
||||||
|
var colour = foreground
|
||||||
|
case temp:
|
||||||
|
of 40..59:
|
||||||
|
colour = yellow
|
||||||
|
icon = ""
|
||||||
|
of 60.. 200:
|
||||||
|
colour = red
|
||||||
|
icon = ""
|
||||||
|
else:
|
||||||
|
colour = green
|
||||||
|
icon = ""
|
||||||
|
let text = "<span foreground='" & colour & "'>" & icon & "</span> " & $temp & "°C"
|
||||||
|
let data = i3barData(
|
||||||
|
full_text: text,
|
||||||
|
color: foreground,
|
||||||
|
border: colour
|
||||||
|
)
|
||||||
|
return data
|
||||||
|
|
||||||
|
proc main() =
|
||||||
|
let zones = getThermalZones()
|
||||||
|
while true:
|
||||||
|
let temp = getAverageTemp(zones)
|
||||||
|
let data = getObject(temp)
|
||||||
|
outputJSON(data)
|
||||||
|
sleep(10000)
|
||||||
|
|
||||||
|
main()
|
Loading…
Reference in a new issue