aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2023 Justin Veilleux <terramorpha@cock.li>
;;;
;;; 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 services syncthing)
  #:use-module (gnu packages syncthing)
  #:use-module (gnu services)
  #:use-module (gnu services shepherd)
  #:use-module (guix gexp)
  #:use-module (guix records)
  #:use-module (ice-9 match)
  #:use-module (srfi srfi-1)
  #:export (syncthing-configuration
            syncthing-configuration?
            syncthing-service-type))

;;; Commentary:
;;;
;;; This module provides a service definition for the syncthing service.
;;;
;;; Code:

(define-record-type* <syncthing-configuration>
  syncthing-configuration make-syncthing-configuration
  syncthing-configuration?
  (syncthing syncthing-configuration-syncthing ;file-like
             (default syncthing))
  (arguments syncthing-configuration-arguments ;list of strings
             (default '()))
  (logflags  syncthing-configuration-logflags  ;number
             (default 0))
  (user      syncthing-configuration-user      ;string
             (default #f))
  (group     syncthing-configuration-group     ;string
             (default "users"))
  (home      syncthing-configuration-home      ;string
             (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 home-service?)
    (list
     (shepherd-service
      (provision (if home-service?
                     '(syncthing)
                     (list (string->symbol
                            (string-append "syncthing-" user)))))
      (documentation "Run syncthing.")
      (requirement (if home-service? '() '(loopback user-processes)))
      (start #~(make-forkexec-constructor
                (append (list (string-append #$syncthing "/bin/syncthing")
                              "--no-browser"
                              "--no-restart"
                              (string-append "--logflags=" (number->string #$logflags)))
                        '#$arguments)
                #:user #$(and (not home-service?) user)
                #:group #$(and (not home-service?) group)
                #:environment-variables
                (append
                 (list
                  (string-append "HOME="
                                 (or #$home
                                     (passwd:dir
                                      (getpw (if (and #$home-service?
                                                      (not #$user))
                                                 (getuid)
                                                 #$user)))))
                              "SSL_CERT_DIR=/etc/ssl/certs"
                              "SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt")
                        (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))))))

(define syncthing-service-type
  (service-type (name 'syncthing)
                (extensions (list (service-extension shepherd-root-service-type
                                                     syncthing-shepherd-service)))
                (description
                 "Run @uref{https://github.com/syncthing/syncthing, Syncthing}
decentralized continuous file system synchronization.")))

;;; syncthing.scm ends here
u: packages: Use 'search-patches' everywhere....* gnu/packages/abiword.scm: Use 'search-patches' for 'patches' field. * gnu/packages/acl.scm: Likewise. * gnu/packages/admin.scm: Likewise. * gnu/packages/algebra.scm: Likewise. * gnu/packages/animation.scm: Likewise. * gnu/packages/apr.scm: Likewise. * gnu/packages/audacity.scm: Likewise. * gnu/packages/audio.scm: Likewise. * gnu/packages/autotools.scm: Likewise. * gnu/packages/avahi.scm: Likewise. * gnu/packages/backup.scm: Likewise. * gnu/packages/base.scm: Likewise. * gnu/packages/bash.scm: Likewise. * gnu/packages/bioinformatics.scm: Likewise. * gnu/packages/cdrom.scm: Likewise. * gnu/packages/ci.scm: Likewise. * gnu/packages/cmake.scm: Likewise. * gnu/packages/cpio.scm: Likewise. * gnu/packages/cross-base.scm: Likewise. * gnu/packages/dico.scm: Likewise. * gnu/packages/doxygen.scm: Likewise. * gnu/packages/ebook.scm: Likewise. * gnu/packages/elf.scm: Likewise. * gnu/packages/emacs.scm: Likewise. * gnu/packages/engineering.scm: Likewise. * gnu/packages/firmware.scm: Likewise. * gnu/packages/flashing-tools.scm: Likewise. * gnu/packages/fltk.scm: Likewise. * gnu/packages/ftp.scm: Likewise. * gnu/packages/games.scm: Likewise. * gnu/packages/gawk.scm: Likewise. * gnu/packages/gcc.scm: Likewise. * gnu/packages/gd.scm: Likewise. * gnu/packages/ghostscript.scm: Likewise. * gnu/packages/glib.scm: Likewise. * gnu/packages/gnome.scm: Likewise. * gnu/packages/gnucash.scm: Likewise. * gnu/packages/gnunet.scm: Likewise. * gnu/packages/gnupg.scm: Likewise. * gnu/packages/gnuzilla.scm: Likewise. * gnu/packages/graphics.scm: Likewise. * gnu/packages/grub.scm: Likewise. * gnu/packages/gtk.scm: Likewise. * gnu/packages/guile.scm: Likewise. * gnu/packages/icu4c.scm: Likewise. * gnu/packages/idutils.scm: Likewise. * gnu/packages/image.scm: Likewise. * gnu/packages/imagemagick.scm: Likewise. * gnu/packages/irc.scm: Likewise. * gnu/packages/ldc.scm: Likewise. * gnu/packages/libcanberra.scm: Likewise. * gnu/packages/libevent.scm: Likewise. * gnu/packages/libreoffice.scm: Likewise. * gnu/packages/libunwind.scm: Likewise. * gnu/packages/libusb.scm: Likewise. * gnu/packages/linux.scm: Likewise. * gnu/packages/lirc.scm: Likewise. * gnu/packages/llvm.scm: Likewise. * gnu/packages/lsh.scm: Likewise. * gnu/packages/lua.scm: Likewise. * gnu/packages/lxqt.scm: Likewise. * gnu/packages/mail.scm: Likewise. * gnu/packages/maths.scm: Likewise. * gnu/packages/mcrypt.scm: Likewise. * gnu/packages/messaging.scm: Likewise. * gnu/packages/mit-krb5.scm: Likewise. * gnu/packages/mp3.scm: Likewise. * gnu/packages/multiprecision.scm: Likewise. * gnu/packages/music.scm: Likewise. * gnu/packages/ninja.scm: Likewise. * gnu/packages/nvi.scm: Likewise. * gnu/packages/ocaml.scm: Likewise. * gnu/packages/orpheus.scm: Likewise. * gnu/packages/ots.scm: Likewise. * gnu/packages/parallel.scm: Likewise. * gnu/packages/patchutils.scm: Likewise. * gnu/packages/pcre.scm: Likewise. * gnu/packages/pdf.scm: Likewise. * gnu/packages/perl.scm: Likewise. * gnu/packages/plotutils.scm: Likewise. * gnu/packages/polkit.scm: Likewise. * gnu/packages/pulseaudio.scm: Likewise. * gnu/packages/python.scm: Likewise. * gnu/packages/qemu.scm: Likewise. * gnu/packages/qt.scm: Likewise. * gnu/packages/ratpoison.scm: Likewise. * gnu/packages/rdf.scm: Likewise. * gnu/packages/readline.scm: Likewise. * gnu/packages/rush.scm: Likewise. * gnu/packages/scheme.scm: Likewise. * gnu/packages/screen.scm: Likewise. * gnu/packages/sdl.scm: Likewise. * gnu/packages/slim.scm: Likewise. * gnu/packages/ssh.scm: Likewise. * gnu/packages/tcl.scm: Likewise. * gnu/packages/tcsh.scm: Likewise. * gnu/packages/texinfo.scm: Likewise. * gnu/packages/tls.scm: Likewise. * gnu/packages/tor.scm: Likewise. * gnu/packages/tv.scm: Likewise. * gnu/packages/valgrind.scm: Likewise. * gnu/packages/version-control.scm: Likewise. * gnu/packages/video.scm: Likewise. * gnu/packages/vpn.scm: Likewise. * gnu/packages/vtk.scm: Likewise. * gnu/packages/w3m.scm: Likewise. * gnu/packages/web.scm: Likewise. * gnu/packages/wicd.scm: Likewise. * gnu/packages/wm.scm: Likewise. * gnu/packages/xdisorg.scm: Likewise. * gnu/packages/xfce.scm: Likewise. * gnu/packages/xiph.scm: Likewise. * gnu/packages/xml.scm: Likewise. * gnu/packages/xorg.scm: Likewise. * gnu/packages/zip.scm: Likewise. Alex Kost 2016-02-12gnu: Add tclxml....* gnu/packages/patches/tclxml-3.2-install.patch: New file. * gnu-system.am (dist_patch_DATA): Add it. * gnu/packages/tcl.scm (tclxml): New variable. Signed-off-by: Leo Famulari <leo@famulari.name> Jan Nieuwenhuizen 2016-02-12gnu: Add tcllib....* gnu/packages/tcl.scm (tcllib): New variable. Signed-off-by: Leo Famulari <leo@famulari.name> Jan Nieuwenhuizen 2016-02-12gnu: tcl: Use tcl/tk license....* gnu/packages/tcl.scm (tcl)[license]: Use the tcl/tk license variable. Signed-off-by: Leo Famulari <leo@famulari.name> Jan Nieuwenhuizen 2016-01-31gnu: perl-tk: Update to 804.033....* gnu/packages/tcl.scm (perl-tk): Update to 804.033. [source]: Remove patch. * gnu/packages/patches/perl-tk-x11-discover.patch: Remove file. * gnu-system.am (dist_patch_DATA): Remove patch. Efraim Flashner 2015-11-29gnu: tcl: Produce 'tclIndex' files deterministically....* gnu/packages/patches/tcl-mkindex-deterministic.patch: New patch. * gnu/packages/tcl.scm (tcl)[source]: Use it. * gnu-system.am (dist_patch_DATA): Add it. Ludovic Courtès 2015-11-29tk: Hardcode path to TK_LIBRARY....Fixes <http://bugs.gnu.org/20889>. * gnu/packages/patches/tk-find-library.patch: New patch. * gnu-system.am (dist_patch_DATA): Add it. * gnu/packages/tcl.scm (tk)[source]: Add patch. 宋文武 2015-09-24gnu: tcl: Add missing -L flag in tk.pc and tkConfig.sh....* gnu/packages/tcl.scm (tk)[arguments]: Use 'modify-phases'. Add 'add-fontconfig-flag' phase. [inputs]: Add FONTCONFIG. Ludovic Courtès 2015-09-12gnu: tk: Update to 8.6.4....* gnu/packages/tcl.scm (tk): Update to 8.6.4. 宋文武 2015-09-12gnu: tcl: Update to 8.6.4....* gnu/packages/tcl.scm (tcl): Update to 8.6.4. 宋文武 2015-08-19gnu: tk: Build with Xft support....* gnu/packages/tcl.scm (tk)[inputs]: Add LIBXFT. [native-inputs]: New field. 宋文武 2015-03-14gnu: Update packages to use 'non-copyleft' instead of 'bsd-style'....* gnu/packages/avr.scm, gnu/packages/compression.scm, gnu/packages/curl.scm, gnu/packages/cyrus-sasl.scm, gnu/packages/databases.scm, gnu/packages/firmware.scm, gnu/packages/flex.scm, gnu/packages/fontutils.scm, gnu/packages/gd.scm, gnu/packages/ghostscript.scm, gnu/packages/gnunet.scm, gnu/packages/graphics.scm, gnu/packages/hugs.scm, gnu/packages/image.scm, gnu/packages/linux.scm, gnu/packages/mail.scm, gnu/packages/maths.scm, gnu/packages/mit-krb5.scm, gnu/packages/python.scm, gnu/packages/rdf.scm, gnu/packages/ssh.scm, gnu/packages/tcl.scm, gnu/packages/xdisorg.scm, gnu/packages/xiph.scm, gnu/packages/yasm.scm, gnu/packages/zip.scm: Use 'non-copyleft' instead of 'bsd-style'. Ludovic Courtès 2015-01-07gnu: tcl: Pass --mandir to configure....This partially reverts 9b1bf33081652210502c6ef34506e27a9bc60f06. "gnu: Remove a bunch of now unneeded '--mandir' configure flags." * gnu/packages/tcl.scm (tcl)[arguments]: Put back the --mandir configure flag, with a comment explaining why it's still needed. Mark H Weaver 2015-01-04gnu: Remove a bunch of now unneeded '--mandir' configure flags....This has become redundant with the 'validate-documentation-location' phase introduced in commit d68fe74. * gnu/packages/compression.scm (bzip2): Remove 'fix-man-dir' phase. * gnu/packages/ncurses.scm (ncurses)[arguments]: Remove --mandir. * gnu/packages/pth.scm (pth)[arguments]: Remove #:configure-flags. * gnu/packages/tcl.scm (tcl)[arguments]: Likewise. * gnu/packages/xiph.scm (flac)[arguments]: Likewise. Ludovic Courtès