1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 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 ''; 12in 13{ 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 }; 22 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 }; 31 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 }; 41 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 }; 55 56 config = mkIf cfg.enable { 57 environment.systemPackages = [ pkgs.davfs2 ]; 58 environment.etc."davfs2/davfs2.conf".source = cfgFile; 59 60 users.groups = optionalAttrs (cfg.davGroup == "davfs2") { 61 davfs2.gid = config.ids.gids.davfs2; 62 }; 63 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 }; 72 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 }; 81 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 }; 90 91 }; 92 93}