nixos/modules/services/groupshare.nix

53 lines
1.8 KiB
Nix
Raw Normal View History

2023-09-12 22:43:38 +08:00
inputs:
{
2024-03-20 09:28:34 +08:00
options.nixos.services.groupshare = let inherit (inputs.lib) mkOption types; in mkOption
2023-09-12 22:43:38 +08:00
{
2024-03-20 09:28:34 +08:00
type = types.nullOr (types.submodule { options =
{
2024-08-30 14:40:35 +08:00
users = mkOption
{
type = types.listOf types.nonEmptyStr;
default = [ "chn" "gb" "xll" "yjq" "zem" "gb" "wp" "hjp" ];
};
2024-03-20 09:28:34 +08:00
};});
default = null;
2023-09-12 22:43:38 +08:00
};
config =
let
inherit (inputs.config.nixos.services) groupshare;
2024-03-20 09:28:34 +08:00
users = inputs.lib.intersectLists groupshare.users inputs.config.nixos.user.users;
in inputs.lib.mkIf (groupshare != null)
2023-09-12 22:43:38 +08:00
{
2024-03-20 09:28:34 +08:00
users =
{
users = builtins.listToAttrs (map (user: { name = user; value.extraGroups = [ "groupshare" ]; }) users);
groups.groupshare.gid = inputs.config.nixos.user.gid.groupshare;
};
2023-09-12 22:43:38 +08:00
systemd.tmpfiles.rules = [ "d /var/lib/groupshare" ]
2024-03-20 09:28:34 +08:00
++ (builtins.concatLists (map
2023-09-13 02:12:41 +08:00
(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 指定的权限
2024-03-20 09:28:34 +08:00
+ (builtins.concatStringsSep "," (builtins.concatLists (map
2023-12-09 20:01:50 +08:00
(perm: [ "d:${perm}" perm ])
[ "u:${user}:rwX" "g:groupshare:r-X" "o::---" "m::r-x" ]))))
2023-09-13 02:12:41 +08:00
])
users));
2024-03-20 09:28:34 +08:00
home-manager.users = builtins.listToAttrs (map
(user:
{
name = user;
value = homeInputs:
{
config.home.file.groupshare.source = homeInputs.config.lib.file.mkOutOfStoreSymlink "/var/lib/groupshare";
};
})
users);
2023-09-12 22:43:38 +08:00
};
2023-09-13 02:12:41 +08:00
}