portfolio: 0.71.2 -> 0.72.2 (#360387)
[NixPkgs.git] / nixos / modules / services / network-filesystems / webdav.nix
blob28f129fc12d290b357e9e2455ae7a6da2c61477d
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.webdav;
4   format = pkgs.formats.yaml { };
5 in
7   options = {
8     services.webdav = {
9       enable = lib.mkEnableOption "WebDAV server";
11       user = lib.mkOption {
12         type = lib.types.str;
13         default = "webdav";
14         description = "User account under which WebDAV runs.";
15       };
17       group = lib.mkOption {
18         type = lib.types.str;
19         default = "webdav";
20         description = "Group under which WebDAV runs.";
21       };
23       settings = lib.mkOption {
24         type = format.type;
25         default = { };
26         description = ''
27           Attrset that is converted and passed as config file. Available options
28           can be found at
29           [here](https://github.com/hacdias/webdav).
31           This program supports reading username and password configuration
32           from environment variables, so it's strongly recommended to store
33           username and password in a separate
34           [EnvironmentFile](https://www.freedesktop.org/software/systemd/man/systemd.exec.html#EnvironmentFile=).
35           This prevents adding secrets to the world-readable Nix store.
36         '';
37         example = lib.literalExpression ''
38           {
39               address = "0.0.0.0";
40               port = 8080;
41               scope = "/srv/public";
42               modify = true;
43               auth = true;
44               users = [
45                 {
46                   username = "{env}ENV_USERNAME";
47                   password = "{env}ENV_PASSWORD";
48                 }
49               ];
50           }
51         '';
52       };
54       configFile = lib.mkOption {
55         type = lib.types.path;
56         default = format.generate "webdav.yaml" cfg.settings;
57         defaultText = "Config file generated from services.webdav.settings";
58         description = ''
59           Path to config file. If this option is set, it will override any
60           configuration done in options.services.webdav.settings.
61         '';
62         example = "/etc/webdav/config.yaml";
63       };
65       environmentFile = lib.mkOption {
66         type = lib.types.nullOr lib.types.path;
67         default = null;
68         description = ''
69           Environment file as defined in {manpage}`systemd.exec(5)`.
70         '';
71       };
72     };
73   };
75   config = lib.mkIf cfg.enable {
76     users.users = lib.mkIf (cfg.user == "webdav") {
77       webdav = {
78         description = "WebDAV daemon user";
79         group = cfg.group;
80         uid = config.ids.uids.webdav;
81       };
82     };
84     users.groups = lib.mkIf (cfg.group == "webdav") {
85       webdav.gid = config.ids.gids.webdav;
86     };
88     systemd.services.webdav = {
89       description = "WebDAV server";
90       after = [ "network.target" ];
91       wantedBy = [ "multi-user.target" ];
92       serviceConfig = {
93         ExecStart = "${pkgs.webdav}/bin/webdav -c ${cfg.configFile}";
94         Restart = "on-failure";
95         User = cfg.user;
96         Group = cfg.group;
97         EnvironmentFile = lib.mkIf (cfg.environmentFile != null) [ cfg.environmentFile ];
98       };
99     };
100   };
102   meta.maintainers = with lib.maintainers; [ pmy ];