nixos/preload: init
[NixPkgs.git] / nixos / modules / services / network-filesystems / davfs2.nix
blob8024cfba08be52ce12577ee3b50308187e144c1c
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
6   cfg = config.services.davfs2;
7   cfgFile = pkgs.writeText "davfs2.conf" ''
8     dav_user ${cfg.davUser}
9     dav_group ${cfg.davGroup}
10     ${cfg.extraConfig}
11   '';
14   options.services.davfs2 = {
15     enable = mkOption {
16       type = types.bool;
17       default = false;
18       description = lib.mdDoc ''
19         Whether to enable davfs2.
20       '';
21     };
23     davUser = mkOption {
24       type = types.str;
25       default = "davfs2";
26       description = lib.mdDoc ''
27         When invoked by root the mount.davfs daemon will run as this user.
28         Value must be given as name, not as numerical id.
29       '';
30     };
32     davGroup = mkOption {
33       type = types.str;
34       default = "davfs2";
35       description = lib.mdDoc ''
36         The group of the running mount.davfs daemon. Ordinary users must be
37         member of this group in order to mount a davfs2 file system. Value must
38         be given as name, not as numerical id.
39       '';
40     };
42     extraConfig = mkOption {
43       type = types.lines;
44       default = "";
45       example = ''
46         kernel_fs coda
47         proxy foo.bar:8080
48         use_locks 0
49       '';
50       description = lib.mdDoc ''
51         Extra lines appended to the configuration of davfs2.
52       ''  ;
53     };
54   };
56   config = mkIf cfg.enable {
57     environment.systemPackages = [ pkgs.davfs2 ];
58     environment.etc."davfs2/davfs2.conf".source = cfgFile;
60     users.groups = optionalAttrs (cfg.davGroup == "davfs2") {
61       davfs2.gid = config.ids.gids.davfs2;
62     };
64     users.users = optionalAttrs (cfg.davUser == "davfs2") {
65       davfs2 = {
66         createHome = false;
67         group = cfg.davGroup;
68         uid = config.ids.uids.davfs2;
69         description = "davfs2 user";
70       };
71     };
73     security.wrappers."mount.davfs" = {
74       program = "mount.davfs";
75       source = "${pkgs.davfs2}/bin/mount.davfs";
76       owner = "root";
77       group = cfg.davGroup;
78       setuid = true;
79       permissions = "u+rx,g+x";
80     };
82     security.wrappers."umount.davfs" = {
83       program = "umount.davfs";
84       source = "${pkgs.davfs2}/bin/umount.davfs";
85       owner = "root";
86       group = cfg.davGroup;
87       setuid = true;
88       permissions = "u+rx,g+x";
89     };
91   };