summary refs log tree commit diff
path: root/gnu/services
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/services')
-rw-r--r--gnu/services/syncthing.scm26
1 files changed, 16 insertions, 10 deletions
diff --git a/gnu/services/syncthing.scm b/gnu/services/syncthing.scm
index e03e8e40b6..2f7c822827 100644
--- a/gnu/services/syncthing.scm
+++ b/gnu/services/syncthing.scm
@@ -49,32 +49,38 @@
   (group     syncthing-configuration-group     ;string
              (default "users"))
   (home      syncthing-configuration-home      ;string
-             (default #f)))
+             (default #f))
+  (home-service? syncthing-configuration-home-service?
+                 (default for-home?) (innate)))
 
 (define syncthing-shepherd-service
   (match-record-lambda <syncthing-configuration>
-      (syncthing arguments logflags user group home)
+      (syncthing arguments logflags user group home home-service?)
     (list
      (shepherd-service
-      (provision (list (string->symbol (string-append "syncthing-" user))))
+      (provision (if home-service?
+                     '(syncthing)
+                     (list (string->symbol
+                            (string-append "syncthing-" user)))))
       (documentation "Run syncthing.")
-      (requirement '(loopback))
+      (requirement (if home-service? '() '(loopback)))
       (start #~(make-forkexec-constructor
                 (append (list (string-append #$syncthing "/bin/syncthing")
                               "--no-browser"
                               "--no-restart"
                               (string-append "--logflags=" (number->string #$logflags)))
                         '#$arguments)
-                #:user #$user
-                #:group #$group
+                #:user #$(and (not home-service?) user)
+                #:group #$(and (not home-service?) group)
                 #:environment-variables
                 (append (list (string-append "HOME=" (or #$home (passwd:dir (getpw #$user))))
                               "SSL_CERT_DIR=/etc/ssl/certs"
                               "SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt")
-                        (remove (lambda (str)
-                                  (or (string-prefix? "HOME=" str)
-                                      (string-prefix? "SSL_CERT_DIR=" str)
-                                      (string-prefix? "SSL_CERT_FILE=" str)))
+                        (filter (negate       ;XXX: 'remove' is not in (guile)
+                                 (lambda (str)
+                                   (or (string-prefix? "HOME=" str)
+                                       (string-prefix? "SSL_CERT_DIR=" str)
+                                       (string-prefix? "SSL_CERT_FILE=" str))))
                                 (environ)))))
       (respawn? #f)
       (stop #~(make-kill-destructor))))))