From 5af2a76b43a9fd48764988e515f36e62932018c9 Mon Sep 17 00:00:00 2001 From: Timo Wilken Date: Sun, 22 Jan 2023 22:16:21 +0100 Subject: Only start polybar if its monitor is connected --- tw/home/lap.scm | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'tw') diff --git a/tw/home/lap.scm b/tw/home/lap.scm index becb74e5..20e23f0c 100644 --- a/tw/home/lap.scm +++ b/tw/home/lap.scm @@ -67,12 +67,33 @@ (".local/bin/mutt_oauth2.py" ,(local-file "files/neomutt/contrib/oauth2/mutt_oauth2.py" #:recursive? #t)))))) +(define polybar-wrapper + (program-file + "polybar-wrapper" + #~(begin + ;; This wrapper program checks that the monitor we want to start + ;; polybar on is actually connected. + (use-modules (ice-9 popen) + (ice-9 rdelim)) + (let* ((connected-str (string-append (getenv "POLYBAR_MONITOR") " connected")) + (xrandr (open-pipe* OPEN_READ #$(file-append xrandr "/bin/xrandr") "-q")) + (monitor-connected? + (let loop ((line (read-line xrandr))) + (cond + ((eof-object? line) #f) ; we didn't find our monitor connected + ((string-prefix? connected-str line) #t) ; the monitor we want is connected + (else (loop (read-line xrandr))))))) ; keep looking + (close-pipe xrandr) + (when monitor-connected? + (execl #$(file-append polybar "/bin/polybar"))))))) + (define (polybar-service monitor) (shepherd-service (documentation (string-append "Polybar desktop bar for monitor " monitor ".")) (provision (list (string->symbol (string-append "polybar-" monitor)))) + (requirement '(xorg-setup)) (start #~(make-forkexec-constructor - (list #$(file-append polybar "/bin/polybar")) + (list #$polybar-wrapper) #:environment-variables (cons #$(string-append "POLYBAR_MONITOR=" monitor) (default-environment-variables)))) -- cgit v1.2.3