at 17.09-beta 2.0 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 cfg = config.services.radicale; 8 9 confFile = pkgs.writeText "radicale.conf" cfg.config; 10 11 # This enables us to default to version 2 while still not breaking configurations of people with version 1 12 defaultPackage = if versionAtLeast "17.09" config.system.stateVersion then { 13 pkg = pkgs.radicale2; 14 text = "pkgs.radicale2"; 15 } else { 16 pkg = pkgs.radicale1; 17 text = "pkgs.radicale1"; 18 }; 19in 20 21{ 22 23 options = { 24 services.radicale.enable = mkOption { 25 type = types.bool; 26 default = false; 27 description = '' 28 Enable Radicale CalDAV and CardDAV server. 29 ''; 30 }; 31 32 services.radicale.package = mkOption { 33 type = types.package; 34 default = defaultPackage.pkg; 35 defaultText = defaultPackage.text; 36 description = '' 37 Radicale package to use. This defaults to version 1.x if 38 <literal>system.stateVersion &lt; 17.09</literal> and version 2.x 39 otherwise. 40 ''; 41 }; 42 43 services.radicale.config = mkOption { 44 type = types.string; 45 default = ""; 46 description = '' 47 Radicale configuration, this will set the service 48 configuration file. 49 ''; 50 }; 51 }; 52 53 config = mkIf cfg.enable { 54 environment.systemPackages = [ cfg.package ]; 55 56 users.extraUsers = singleton 57 { name = "radicale"; 58 uid = config.ids.uids.radicale; 59 description = "radicale user"; 60 home = "/var/lib/radicale"; 61 createHome = true; 62 }; 63 64 users.extraGroups = singleton 65 { name = "radicale"; 66 gid = config.ids.gids.radicale; 67 }; 68 69 systemd.services.radicale = { 70 description = "A Simple Calendar and Contact Server"; 71 after = [ "network.target" ]; 72 wantedBy = [ "multi-user.target" ]; 73 serviceConfig = { 74 ExecStart = "${cfg.package}/bin/radicale -C ${confFile} -f"; 75 User = "radicale"; 76 Group = "radicale"; 77 }; 78 }; 79 }; 80 81 meta.maintainers = with lib.maintainers; [ aneeshusa infinisil ]; 82}