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 < 15 { if !sent { sent = true notify("battery running low!") } } else { sent = false } time.Sleep(time.Second * 10) } }