nixos/modules/services/groupshare.nix

47 lines
1.8 KiB
Nix
Raw Permalink Normal View History

2023-09-12 22:43:38 +08:00
inputs:
{
options.nixos.services.groupshare = let inherit (inputs.lib) mkOption types; in
{
enable = mkOption { type = types.bool; default = false; };
2023-09-13 02:12:41 +08:00
# hard to read value from inputs.config.users.users.xxx.home, causing infinite recursion
mountPoints = mkOption { type = types.listOf types.str; default = []; };
2023-09-12 22:43:38 +08:00
};
config =
let
inherit (inputs.lib) mkIf;
2023-12-09 20:01:50 +08:00
inherit (builtins) listToAttrs map concatLists concatStringsSep;
2023-09-12 22:43:38 +08:00
inherit (inputs.config.nixos.services) groupshare;
users = inputs.config.users.groups.groupshare.members;
in mkIf groupshare.enable
{
2023-12-09 20:01:50 +08:00
users.groups.groupshare.gid = inputs.config.nixos.system.user.group.groupshare;
2023-09-12 22:43:38 +08:00
systemd.tmpfiles.rules = [ "d /var/lib/groupshare" ]
2023-09-13 02:12:41 +08:00
++ (concatLists (map
(user:
[
2023-09-13 23:32:10 +08:00
"d /var/lib/groupshare/${user} 2750 ${user} groupshare"
2023-12-15 20:20:30 +08:00
"Z /var/lib/groupshare/${user} - ${user} groupshare"
2023-12-09 20:01:50 +08:00
("A /var/lib/groupshare/${user} - - - - "
# d 指 default, 即目录下新创建的文件和目录的权限
# 大写 X 指仅给目录执行权限
# m 指 mask, 即对于所有者以外的用户, 该用户的权限最大为 m 指定的权限
+ (concatStringsSep "," (concatLists (map
(perm: [ "d:${perm}" perm ])
[ "u:${user}:rwX" "g:groupshare:r-X" "o::---" "m::r-x" ]))))
2023-09-13 02:12:41 +08:00
])
users));
2023-09-12 22:43:38 +08:00
fileSystems = listToAttrs (map
2023-09-13 02:12:41 +08:00
(mountPoint:
2023-09-12 22:43:38 +08:00
{
2023-09-13 02:12:41 +08:00
name = mountPoint;
2023-10-23 10:36:19 +08:00
value =
{
device = "/var/lib/groupshare";
options = [ "bind" "private" "x-gvfs-hide" "X-fstrim.notrim" ];
depends = [ "/home" "/var/lib" ];
};
2023-09-12 22:43:38 +08:00
})
2023-09-13 02:12:41 +08:00
groupshare.mountPoints);
2023-09-12 22:43:38 +08:00
};
2023-09-13 02:12:41 +08:00
}