summaryrefslogtreecommitdiff
path: root/home-configuration.scm
diff options
context:
space:
mode:
Diffstat (limited to 'home-configuration.scm')
-rw-r--r--home-configuration.scm65
1 files changed, 1 insertions, 64 deletions
diff --git a/home-configuration.scm b/home-configuration.scm
index b00b08be..4acc4f8c 100644
--- a/home-configuration.scm
+++ b/home-configuration.scm
@@ -325,70 +325,7 @@ replacement spec (to which `regexp-substitute/global' is applied)."
;; With #:recursive? #t, Guix keeps the files' permission bits, i.e. makes them executable.
(".local/bin/sessionmenu" ,(local-file "sessionmenu" #:recursive? #t)) ; rofi logout/reboot menu
(".local/bin/passmenu" ,(local-file "passmenu" #:recursive? #t)) ; rofi passwords menu
- (".local/bin/volume"
- ,(program-file
- "volume"
- #~(begin
- (use-modules (ice-9 format)
- (ice-9 match)
- (ice-9 popen)
- (ice-9 regex)
- (ice-9 textual-ports))
-
- (define (read-from-pactl . args)
- (let* ((port (apply open-pipe* OPEN_READ
- #$(package-binary "pulseaudio" "pactl") args))
- (output (get-string-all port)))
- (close-pipe port)
- (string-trim-right output #\newline)))
-
- (define %default-sink
- (read-from-pactl "get-default-sink"))
-
- (define* (sink-muted? #:optional (sink %default-sink))
- (match (read-from-pactl "get-sink-mute" sink)
- ("Mute: yes" #t)
- ("Mute: no" #f)
- (output (error "Unknown `pactl get-sink-mute' output" output))))
-
- (define* (sink-volume #:optional (sink %default-sink))
- (match-let ((`#(,match (,start . ,end))
- (string-match "[0-9]+%" (read-from-pactl "get-sink-volume" sink))))
- (string->number (substring match start (1- end))))) ; trim trailing "%"
-
- (define* (set-sink-mute! #:optional (state "toggle") (sink %default-sink))
- (status:exit-val
- (system* #$(package-binary "pulseaudio" "pactl") "set-sink-mute" sink state)))
-
- (define* (increment-sink-volume! increment-percent #:optional (sink %default-sink))
- (status:exit-val
- (system* #$(package-binary "pulseaudio" "pactl")
- "set-sink-volume" sink
- ;; A percentage with a sign is an increment.
- (format #f "~@d%" increment-percent))))
-
- (define* (notify #:optional (muted? (sink-muted?)) (volume (sink-volume)))
- (status:exit-val
- (system* #$(package-binary "dunst" "dunstify")
- "-a" "volume" "-u" "low"
- "-i" (cond (muted? "audio-volume-muted")
- ((< volume 50) "audio-volume-low")
- (#t "audio-volume-high"))
- "-h" "string:x-canonical-private-synchronous:volume"
- "-h" (format #f "int:value:~d" (if muted? 0 volume))
- (if muted? "Volume muted" "Volume"))))
-
- (match (cdr (program-arguments))
- (() 0) ; notify only
- (("mute") (set-sink-mute! "true"))
- (("unmute") (set-sink-mute! "false"))
- (("toggle-mute") (set-sink-mute! "toggle"))
- (((? string->number increment-percent))
- (and (set-sink-mute! "false")
- (increment-sink-volume!
- (string->number increment-percent))))
- (args (error "Could not parse command-line arguments:" args)))
- (notify))))))))
+ (".local/bin/volume" ,(local-file "volume" #:recursive? #t)))))) ; set volume on key press
(home-environment
(packages