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.")))