This is an automated email from the git hooks/post-receive script.

guix_mirror_bot pushed a commit to branch master
in repository guix.

The following commit(s) were added to refs/heads/master by this push:
     new eee1bfbec5 gnu: services: Add xandikos-service-type.
eee1bfbec5 is described below

commit eee1bfbec5f281fb3b21b0d6bc4db88187d113b5
Author: Wilko Meyer <[email protected]>
AuthorDate: Wed Oct 23 17:02:57 2024 +0200

    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
---
 doc/guix.texi        |  57 +++++++++++++++++++++++++++
 gnu/local.mk         |   2 +
 gnu/services/dav.scm | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 166 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index cb22e612e4..9d41b43d94 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -131,6 +131,7 @@ Copyright @copyright{} 2024 Dariqq@*
 Copyright @copyright{} 2024 Denis 'GNUtoo' Carikli@*
 Copyright @copyright{} 2024 Fabio Natali@*
 Copyright @copyright{} 2024 Arnaud Daby-Seesaram@*
+Copyright @copyright{} 2024 Wilko Meyer@*
 Copyright @copyright{} 2024-2025 Nigko Yerden@*
 Copyright @copyright{} 2024 Troy Figiel@*
 Copyright @copyright{} 2024 Sharlatan Hellseher@*
@@ -431,6 +432,7 @@ Services
 * DNS Services::                DNS daemons.
 * VNC Services::                VNC daemons.
 * VPN Services::                VPN daemons.
+* DAV Services::                DAV daemons.
 * Network File System::         NFS related services.
 * Samba Services::              Samba services.
 * Continuous Integration::      Cuirass and Laminar services.
@@ -19882,6 +19884,7 @@ declaration.
 * DNS Services::                DNS daemons.
 * VNC Services::                VNC daemons.
 * VPN Services::                VPN daemons.
+* DAV Services::                DAV daemons.
 * Network File System::         NFS related services.
 * Samba Services::              Samba services.
 * Continuous Integration::      Cuirass and Laminar services.
@@ -37736,6 +37739,60 @@ a firewall.
 @end table
 @end deftp
 
+@node DAV Services
+@subsection DAV Services
+@cindex CalDAV
+
+@defvar xandikos-service-type
+This service starts @code{xandikos}, a lightweight CardDAV/CalDAV
+server backed by a Git repository.
+
+The service's value is a @code{xandikos-configuration} record.
+@end defvar
+
+@deftp {Data Type} xandikos-configuration
+This is the data type representing the configuration for the
+@code{xandikos-shepherd-service}.
+
+It has the following parameters:
+
+@table @asis
+@item @code{package} (default: @code{xandikos})
+The @code{xandikos} package to use.
+
+@item @code{directory} (default: @code{"/var/xandikos/dav"})
+The directory to serve from.
+
+@item @code{listen-address} (default: @code{127.0.0.1})
+The address @command{xandikos} listens on.
+
+@item @code{port} (default: @code{8080})
+The port to run @command{xandikos} on.
+
+@item @code{current-user-principal} (default: @code{"/user/"})
+Path to current user principal.
+
+@item @code{route-prefix} (default: @code{"/"})
+Path to @command{xandikos} (useful when Xandikos is behind a reverse proxy).
+
+@item @code{defaults?} (default: @code{#t})
+Create initial calendar and address book.  Implies @option{--autocreate}.
+
+@item @code{dump?} (default: @code{#f})
+Print DAV XML request/responses.
+
+@item @code{avahi?} (default: @code{#f})
+Announce services with avahi.
+
+@item @code{autocreate?} (default: @code{#f})
+Automatically create necessary directories.
+
+@item @code{no-strict?} (default: @code{#f})
+Enable workarounds for buggy CalDAV/CardDAV client implementations.
+@end table
+@end deftp
+
+
 @node Network File System
 @subsection Network File System
 @cindex NFS
diff --git a/gnu/local.mk b/gnu/local.mk
index 07b2390315..eee6019353 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -67,6 +67,7 @@
 # Copyright © 2024, 2025 David Elsing <[email protected]>
 # Copyright © 2024 Ashish SHUKLA <[email protected]>
 # Copyright © 2024 Fabio Natali <[email protected]>
+# Copyright © 2024 Wilko Meyer <[email protected]>
 # Copyright © 2024 Noé Lopez <[email protected]>
 # Copyright © 2024 Runciter <[email protected]>
 # Copyright © 2024 Ashvith Shetty <[email protected]>
@@ -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 0000000000..875d197f2c
--- /dev/null
+++ b/gnu/services/dav.scm
@@ -0,0 +1,107 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2024 Wilko Meyer <[email protected]>
+;;;
+;;; 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.")))

Reply via email to