123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #!/run/current-system/profile/bin/guile -s
- !#
- (define-module (i3-battery-warning)
- #:use-module (ice-9 rdelim)
- #:use-module (ice-9 regex)
- #:use-module (ice-9 popen)
- #:use-module (srfi srfi-1))
- ;; TODO!
- ;; Make config file to read values.
- ;; Package with guix
- ;; Add to mcron jobs as a simple program...
- (define BAT-WARN-LVL 30)
- (define BAT-ERR-LVL 20)
- (define (bat-percentage)
- (let* ((return #f)
- (pipe-bat
- (open-input-pipe
- (string-append "upower -i "
- "/org/freedesktop/UPower/devices/battery_BAT0")))
- (str-bat (read-line pipe-bat))
- (re-perc-line (make-regexp "percentage:"))
- (re-perc-num (make-regexp "[0-9][0-9]")))
- (while (not (eof-object? str-bat))
- (when (regexp-exec re-perc-line str-bat)
- (set! return (string->number
- (match:substring
- (regexp-exec re-perc-num str-bat)))))
- (set! str-bat (read-line pipe-bat)))
- (close-pipe pipe-bat)
- return))
- (define (pwr-connected?)
- (let* ((return #f)
- (pipe-pwr
- (open-input-pipe
- (string-append "upower -i"
- " /org/freedesktop/UPower/devices/line_power_ADP1")))
- (str-pwr (read-line pipe-pwr))
- (re-pat (make-regexp "online: yes" regexp/icase)))
- (while (not (eof-object? str-pwr))
- (when (regexp-exec re-pat str-pwr)
- (set! return #t))
- (set! str-pwr (read-line pipe-pwr)))
-
- (close-pipe pipe-pwr)
- return))
- (define (notify-usr percentage)
- (system (string-append "i3-nagbar"
- " -m \"Battery low! at " (number->string percentage) "%\""
- " -t "
- (if (< percentage BAT-ERR-LVL)
- "error"
- "warning"))))
- (define (check&react)
- (let ((pc (pwr-connected?))
- (bp (bat-percentage)))
- (unless pc
- (when (< bp BAT-WARN-LVL)
- (notify-usr bp)))))
- (check&react)
|