Move eww scripts
This commit is contained in:
119
eww/eww-battery-monitor
Executable file
119
eww/eww-battery-monitor
Executable file
@ -0,0 +1,119 @@
|
||||
#!/usr/bin/env -S awk -f
|
||||
# -*- mode: awk -*-
|
||||
function get_icon(charge) {
|
||||
if (charge <= 10) {
|
||||
return "";
|
||||
} else if (charge <= 20) {
|
||||
return "";
|
||||
} else if (charge <= 30) {
|
||||
return "";
|
||||
} else if (charge <= 40) {
|
||||
return "";
|
||||
} else if (charge <= 50) {
|
||||
return "";
|
||||
} else if (charge <= 60) {
|
||||
return "";
|
||||
} else if (charge <= 70) {
|
||||
return "";
|
||||
} else if (charge <= 80) {
|
||||
return "";
|
||||
} if (charge < 100) {
|
||||
return "";
|
||||
} else {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
function notify_send(title, desc, id) {
|
||||
if (!id) {
|
||||
cmd="dunstify -t 0 -p \"" title "\" \"" desc "\""
|
||||
while ((cmd | getline id) > 0) { }
|
||||
close(cmd)
|
||||
} else {
|
||||
system("dunstify -r " id " \"" title "\" \"" desc "\"")
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
function close_notify(id) {
|
||||
system("dunstify -C " id)
|
||||
}
|
||||
|
||||
function warn_if_low() {
|
||||
percentage = state_info["percentage"]
|
||||
id = state_info["id"]
|
||||
notified = state_info["notified"]
|
||||
if (percentage <= 10) {
|
||||
if (!notified) {
|
||||
state_info["id"] = notify_send("Battery Low", percentage "%", id)
|
||||
state_info["notified"] = 1
|
||||
}
|
||||
} else if (notified) {
|
||||
close_notify(id)
|
||||
state_info["notified"] = 0
|
||||
}
|
||||
}
|
||||
|
||||
function print_state() {
|
||||
percentage = state_info["percentage"]
|
||||
printf "%s%s%d%%\n",
|
||||
get_icon(percentage),
|
||||
state_info["charging"] ? "" : "",
|
||||
percentage
|
||||
fflush()
|
||||
}
|
||||
|
||||
function parse_record(record, exit_on_absent) {
|
||||
split(record, fields)
|
||||
for (i in fields) {
|
||||
match(fields[i], /^ *([^:]+): *(.+)$/, parts)
|
||||
if (length(parts) >= 3) {
|
||||
props[parts[1]] = parts[2]
|
||||
}
|
||||
}
|
||||
name = props["native-path"]
|
||||
if ((! BATTERY && props["power supply"] == "yes" && \
|
||||
props["native-path"] ~ /BAT[0-9]+/) || name == BATTERY) {
|
||||
state_info["percentage"] = props["percentage"] + 0
|
||||
return 1
|
||||
} else if ((! ADAPTER && props["power supply"] == "yes" && \
|
||||
props["native-path"] ~ /ADP[0-9]+/) || name == ADAPTER) {
|
||||
state_info["charging"] = (props["online"] == "yes")
|
||||
return 1
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
function print_initial_stats() {
|
||||
cmd = "upower --dump"
|
||||
found = 0
|
||||
while ((cmd | getline record) > 0) {
|
||||
if (record ~ /Device: \/org\/freedesktop\/UPower\/devices\// \
|
||||
&& parse_record(record)) {
|
||||
found = 1
|
||||
}
|
||||
}
|
||||
close(cmd)
|
||||
if (! found) {
|
||||
# we found no battery adapters
|
||||
exit 1
|
||||
}
|
||||
print_state()
|
||||
warn_if_low()
|
||||
}
|
||||
|
||||
BEGIN {
|
||||
RS = ""
|
||||
FS = "\n"
|
||||
print_initial_stats()
|
||||
cmd = "upower --monitor-detail"
|
||||
while ((cmd | getline record) > 0) {
|
||||
if (record ~ /device changed/) {
|
||||
parse_record(record)
|
||||
print_state()
|
||||
warn_if_low()
|
||||
}
|
||||
}
|
||||
close(cmd)
|
||||
}
|
Reference in New Issue
Block a user