Last active
February 13, 2020 16:36
-
-
Save Lifelovinglight/8b45b5c056aaca4711abf3a46c6bb77f to your computer and use it in GitHub Desktop.
Battery monitoring script.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;; Battery monitoring daemon script. | |
(require-extension shell) | |
(require-extension srfi-1) | |
;;; Constant values. | |
;;; Battery level control interval, in seconds. | |
(define +check-interval+ 5) | |
;;; Path to the virtual file containing the battery percentage number. | |
(define +capacity-path+ "/sys/class/power_supply/BAT1/capacity") | |
;;; Association list of threshold levels and formatting functions. | |
(define +thresholds+ | |
`((20 . ,(lambda (battery-level) | |
(string-append "Battery level low: " (number->string battery-level) "%."))) | |
(5 . ,(lambda (battery-level) | |
(string-append "Battery level critical: " (number->string battery-level) "%."))))) | |
;;; Utility functions. | |
;;; Get the battery level, return it as a number. | |
(define (get-battery-level) | |
(with-input-from-file +capacity-path+ read)) | |
;;; Method to display a notification dialog. | |
(define (user-notify message) | |
(run ("notify-send '" ,message "'"))) | |
;;; Core daemon loop. | |
(define (core previous-level) | |
(let ((current-level (get-battery-level))) | |
(let ((crossed-thresholds | |
(filter (lambda (n) | |
(and (>= n current-level) | |
(< n previous-level))) | |
(map car +thresholds+)))) | |
(if (not (null? crossed-thresholds)) | |
(user-notify ((cdr (assoc (last crossed-thresholds) +thresholds+)) current-level)))) | |
(sleep +check-interval+) | |
(core current-level))) | |
;;; Entry point of the program. | |
(define (main) | |
(core 100)) | |
(main) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment