bat-alert/main.go
2023-03-05 15:09:49 +01:00

48 lines
980 B
Go

package main
import (
"flag"
"log"
"os"
"os/exec"
"strconv"
"strings"
"time"
)
func notify(msg string) {
cmd := exec.Command("notify-send", "-t", "5000", "-u", "critical", "bat-alert", msg)
err := cmd.Run()
if err != nil {
log.Println(err)
}
}
var targetFlag = flag.Int("target", 15, "when to send the alert")
func main() {
flag.Parse()
sent := false
for {
capacity, err := os.ReadFile("/sys/class/power_supply/BAT0/capacity")
if err != nil {
notify("error: " + err.Error())
}
numCap, err := strconv.Atoi(strings.Trim(string(capacity), "\n"))
if err != nil {
notify("error: " + err.Error())
}
if numCap <= *targetFlag {
if !sent {
sent = true
notify("battery running low!")
}
} else {
sent = false
}
time.Sleep(time.Second * 10)
}
}