all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Sergey Trofimov <sarg@sarg.org.ru>
To: 62401@debbugs.gnu.org
Cc: Sergey Trofimov <sarg@sarg.org.ru>,
	paren@disroot.org, andrew@trop.in, ludo@gnu.org
Subject: [bug#62401] [PATCH] home: Add home-syncthing-service-type.
Date: Thu, 23 Mar 2023 09:10:26 +0100	[thread overview]
Message-ID: <20230323081026.13850-1-sarg@sarg.org.ru> (raw)

* gnu/home/services/syncthing.scm
(home-syncthing-service-type): New variable.
(home-syncthing-configuration): New procedure.
* gnu/services/syncthing.scm
(syncthing-shepherd-service): Adapt to be used as a home service.
* doc/guix.texi: Ditto.
---
 doc/guix.texi                   | 42 ++++++++++++++++++++++++++++-
 gnu/home/services/syncthing.scm | 48 +++++++++++++++++++++++++++++++++
 gnu/services/syncthing.scm      | 15 +++++++----
 3 files changed, 99 insertions(+), 6 deletions(-)
 create mode 100644 gnu/home/services/syncthing.scm

diff --git a/doc/guix.texi b/doc/guix.texi
index dfdb26103a..a2fe2514db 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -20735,7 +20735,7 @@ List of command-line arguments passing to @code{syncthing} binary.
 Sum of logging flags, see
 @uref{https://docs.syncthing.net/users/syncthing.html#cmdoption-logflags, Syncthing documentation logflags}.
 
-@item @code{user} (default: @var{#f})
+@item @code{user}
 The user as which the Syncthing service is to be run.
 This assumes that the specified user exists.
 
@@ -41790,6 +41790,7 @@ services)}.
 * Sound: Sound Home Services.   Dealing with audio.
 * Messaging: Messaging Home Services.   Services for managing messaging.
 * Media: Media Home Services.   Services for managing media.
+* Networking: Networking Home Services.
 @end menu
 @c In addition to that Home Services can provide
 
@@ -42978,6 +42979,45 @@ kodi} for more information.
 @end table
 @end deftp
 
+@node Networking Home Services
+@subsection Networking Home Services
+
+@cindex syncthing
+With the @code{(gnu home services syncthing)} service, you can configure
+@uref{https://github.com/syncthing/syncthing, Syncthing} to run upon
+login.
+
+Here is an example of a service and its configuration that you could add
+to the @code{services} field of your @code{home-environment}:
+
+@lisp
+(service home-syncthing-service-type
+  (home-syncthing-configuration
+   (arguments '("--paused"))))
+@end lisp
+
+@defvar home-syncthing-service-type
+This is the type of the @code{syncthing} home service, whose value is an
+@code{home-syncthing-configuration} object.
+@end defvar
+
+@deftp {Data Type} home-syncthing-configuration
+Data type representing the configuration for @code{home-syncthing-service-type}.
+
+@table @asis
+@item @code{syncthing} (default: @var{syncthing})
+@code{syncthing} package to use.
+
+@item @code{arguments} (default: @var{'()})
+List of command-line arguments passing to @code{syncthing} binary.
+
+@item @code{logflags} (default: @var{0})
+Sum of logging flags, see
+@uref{https://docs.syncthing.net/users/syncthing.html#cmdoption-logflags, Syncthing documentation logflags}.
+
+@end table
+@end deftp
+
 @node Invoking guix home
 @section Invoking @command{guix home}
 
diff --git a/gnu/home/services/syncthing.scm b/gnu/home/services/syncthing.scm
new file mode 100644
index 0000000000..928a23986b
--- /dev/null
+++ b/gnu/home/services/syncthing.scm
@@ -0,0 +1,48 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2023 Sergey Trofimov <sarg@sarg.org.ru>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu home services syncthing)
+  #:use-module (gnu services)
+  #:use-module (gnu services syncthing)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu home services shepherd)
+
+  #:export (home-syncthing-service-type
+            home-syncthing-configuration))
+
+(define syncthing-home-shepherd-service
+  (lambda (configuration)
+    (map (lambda (srv) (shepherd-service (inherit srv) (requirement '())))
+         ((@@ (gnu services syncthing) syncthing-shepherd-service) configuration))))
+
+(define-syntax-rule (home-syncthing-configuration args ...)
+  (syncthing-configuration
+   (user #f)
+   args ...))
+
+(define home-syncthing-service-type
+  (service-type (name 'syncthing)
+                (extensions (list (service-extension home-shepherd-service-type
+                                                     syncthing-home-shepherd-service)))
+                (default-value (home-syncthing-configuration))
+                (description
+                 "Run @uref{https://github.com/syncthing/syncthing, Syncthing}
+decentralized continuous file system synchronization.")))
+
+;;; syncthing.scm ends here
diff --git a/gnu/services/syncthing.scm b/gnu/services/syncthing.scm
index 7c3d5b027d..960f0a1db8 100644
--- a/gnu/services/syncthing.scm
+++ b/gnu/services/syncthing.scm
@@ -43,8 +43,7 @@ (define-record-type* <syncthing-configuration>
              (default '()))
   (logflags  syncthing-configuration-logflags  ;number
              (default 0))
-  (user      syncthing-configuration-user      ;string
-             (default #f))
+  (user      syncthing-configuration-user)     ;string
   (group     syncthing-configuration-group     ;string
              (default "users"))
   (home      syncthing-configuration-home      ;string
@@ -55,9 +54,12 @@ (define syncthing-shepherd-service
     (($ <syncthing-configuration> syncthing arguments logflags user group home)
      (list
       (shepherd-service
-       (provision (list (string->symbol (string-append "syncthing-" user))))
+       (provision (list
+                   (or (and user (string->symbol (string-append "syncthing-" user)))
+                       'syncthing)))
        (documentation "Run syncthing.")
        (requirement '(loopback))
+       (modules '((srfi srfi-1) (shepherd support)))
        (start #~(make-forkexec-constructor
                  (append (list (string-append #$syncthing "/bin/syncthing")
                                "-no-browser"
@@ -65,9 +67,12 @@ (define syncthing-shepherd-service
                                (string-append "-logflags=" (number->string #$logflags)))
                          '#$arguments)
                  #:user #$user
-                 #:group #$group
+                 #:group (and #$user #$group)
                  #:environment-variables
-                 (append (list (string-append "HOME=" (or #$home (passwd:dir (getpw #$user))))
+                 (append (list (string-append "HOME="
+                                              (or #$home
+                                                  (and #$user (passwd:dir (getpw #$user)))
+                                                  user-homedir))
                                "SSL_CERT_DIR=/etc/ssl/certs"
                                "SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt")
                          (remove (lambda (str)
-- 
2.39.2





             reply	other threads:[~2023-03-23  8:11 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-23  8:10 Sergey Trofimov [this message]
2023-03-28 15:58 ` [bug#62401] [PATCH] home: Add home-syncthing-service-type Ludovic Courtès
2023-03-28 19:29   ` Sergey Trofimov
2023-03-29 16:35     ` Bruno Victal
2023-03-28 16:18 ` Automatically mapping services from System to Home Ludovic Courtès
2023-03-28 19:59   ` Attila Lendvai
2023-03-29 15:21   ` Bruno Victal
2023-08-07  9:50     ` [bug#62401] [PATCH] home: Add home-syncthing-service-type Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230323081026.13850-1-sarg@sarg.org.ru \
    --to=sarg@sarg.org.ru \
    --cc=62401@debbugs.gnu.org \
    --cc=andrew@trop.in \
    --cc=ludo@gnu.org \
    --cc=paren@disroot.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.