summaryrefslogtreecommitdiff
path: root/tw/home/lap.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tw/home/lap.scm')
-rw-r--r--tw/home/lap.scm23
1 files changed, 22 insertions, 1 deletions
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))))