diff options
| author | Wilko Meyer <w@wmeyer.eu> | 2024-10-23 17:02:57 +0200 |
|---|---|---|
| committer | Ricardo Wurmus <rekado@elephly.net> | 2026-02-09 16:27:42 +0100 |
| commit | eee1bfbec5f281fb3b21b0d6bc4db88187d113b5 (patch) | |
| tree | fbb48067df66fe72fd619033e92e6720a7637a23 /gnu | |
| parent | 84d6e780e1cf42caae8b9f9b0321267d99da4ddb (diff) | |
gnu: services: Add xandikos-service-type.
* gnu/services/dav.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add file.
* doc/guix.texi (DAV Services): Document the service.
Change-Id: I5345efd579f9e527eb8798397b52bf1b9b4cab56
Diffstat (limited to 'gnu')
| -rw-r--r-- | gnu/local.mk | 2 | ||||
| -rw-r--r-- | gnu/services/dav.scm | 107 |
2 files changed, 109 insertions, 0 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index 07b2390315d..eee60193533 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -67,6 +67,7 @@ # Copyright © 2024, 2025 David Elsing <david.elsing@posteo.net> # Copyright © 2024 Ashish SHUKLA <ashish.is@lostca.se> # Copyright © 2024 Fabio Natali <me@fabionatali.com> +# Copyright © 2024 Wilko Meyer <w@wmeyer.eu> # Copyright © 2024 Noé Lopez <noelopez@free.fr> # Copyright © 2024 Runciter <runciter@whispers-vpn.org> # Copyright © 2024 Ashvith Shetty <ashvithshetty10@gmail.com> @@ -735,6 +736,7 @@ GNU_SYSTEM_MODULES = \ %D%/services/cuirass.scm \ %D%/services/cups.scm \ %D%/services/databases.scm \ + %D%/services/dav.scm \ %D%/services/dbus.scm \ %D%/services/desktop.scm \ %D%/services/dict.scm \ diff --git a/gnu/services/dav.scm b/gnu/services/dav.scm new file mode 100644 index 00000000000..875d197f2c6 --- /dev/null +++ b/gnu/services/dav.scm @@ -0,0 +1,107 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2024 Wilko Meyer <w@wmeyer.eu> +;;; +;;; 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 dav) + #:use-module (gnu packages dav) + #:use-module (gnu services) + #:use-module (gnu services configuration) + #:use-module (gnu services shepherd) + #:use-module (guix deprecation) + #:use-module (guix gexp) + #:use-module (guix records) + #:use-module (ice-9 match) + #:export (xandikos-configuration + xandikos-configuration? + xandikos-service-type)) + +;;; +;;; Xandikos. +;;; + +(define (port? x) + (and (number? x) + (and (>= x 0) (<= x 65535)))) + +(define-configuration/no-serialization xandikos-configuration + (package + (file-like xandikos) + "Xandikos package to use.") + (directory + (string "/var/xandikos/dav") + "Directory to serve from.") + (listen-address + (string "127.0.0.1") + "The address Xandikos listens on.") + (port + (port 8080) + "The port to run Xandikos on.") + (current-user-principal + (string "/user/") + "Path to current user principal.") + (route-prefix + (string "/") + "Path to Xandikos. (Useful when Xandikos is behind a reverse proxy.)") + (defaults? + (boolean #t) + "Create initial calendar and address book.") + (dump? + (boolean #f) + "Print DAV XML request/responses.") + (avahi? + (boolean #f) + "Announce services with avahi.") + (autocreate? + (boolean #f) + "Automatically create necessary directories.") + (no-strict? + (boolean #f) + "Enable workarounds for buggy CalDAV/CardDAV client implementations.")) + +(define (xandikos-shepherd-service config) + (match-record config <xandikos-configuration> + (package directory listen-address port current-user-principal + route-prefix defaults? dump? avahi? autocreate? + no-strict?) + (list + (shepherd-service + (provision '(xandikos)) + (documentation "Caldav/CardDAV server") + (requirement '(networking user-processes)) + (start #~(make-forkexec-constructor + (list #$(file-append xandikos "/bin/xandikos") + "--listen-address" #$listen-address + "--port" #$(number->string port) + "-d" #$directory + "--route-prefix" #$route-prefix + "--current-user-principal" #$current-user-principal + #$@(if dump? '("--dump-dav-xml") '()) + #$@(if avahi? '("--avahi") '()) + #$@(if autocreate? '("--autocreate") '()) + #$@(if defaults? '("--defaults") '()) + #$@(if no-strict? '("--no-strict") '())))) + (stop #~(make-kill-destructor)) + (respawn? #t))))) + +(define xandikos-service-type + (service-type + (name 'xandikos) + (extensions + (list (service-extension shepherd-root-service-type + xandikos-shepherd-service))) + (default-value (xandikos-configuration)) + (description "Service to run the @code{Xandikos} CalDAV/CardDAV server."))) |
