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/services | |
| 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/services')
| -rw-r--r-- | gnu/services/dav.scm | 107 |
1 files changed, 107 insertions, 0 deletions
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."))) |
