76 lines
1.5 KiB
Nix
76 lines
1.5 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
with lib; let
|
|
cfg = config.local.sys.users;
|
|
userType = types.submodule {
|
|
options = {
|
|
enable = mkEnableOption "user settings";
|
|
unixId = mkOption {
|
|
# gid and uid are always the same
|
|
type = types.int;
|
|
};
|
|
admin = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
};
|
|
sshKeyPublicFile = mkOption {
|
|
type = types.listOf types.path;
|
|
default = [];
|
|
};
|
|
};
|
|
};
|
|
in {
|
|
options.local.sys.users = mkOption {
|
|
type = types.attrsOf userType;
|
|
default = {};
|
|
};
|
|
|
|
config = {
|
|
local.sys.users = {
|
|
fabian = {
|
|
unixId = mkDefault 1000;
|
|
admin = true;
|
|
};
|
|
vanessa = {
|
|
unixId = mkDefault 1001;
|
|
admin = false;
|
|
};
|
|
soto = {
|
|
unixId = mkDefault 1010;
|
|
admin = false;
|
|
};
|
|
diaz = {
|
|
unixId = mkDefault 1011;
|
|
admin = false;
|
|
};
|
|
};
|
|
|
|
users = let
|
|
enabledUsers = filterAttrs (k: v: v.enable) cfg;
|
|
in {
|
|
groups =
|
|
mapAttrs (k: v: {
|
|
gid = v.unixId;
|
|
})
|
|
enabledUsers;
|
|
|
|
users =
|
|
mapAttrs (k: v: {
|
|
isNormalUser = true;
|
|
uid = v.unixId;
|
|
group = k;
|
|
shell = pkgs.zsh;
|
|
extraGroups =
|
|
["users" "networkmanager"]
|
|
++ optionals (v.admin) ["wheel" "libvirtd" "dialout"];
|
|
openssh.authorizedKeys.keyFiles = v.sshKeyPublicFile;
|
|
})
|
|
enabledUsers;
|
|
};
|
|
};
|
|
}
|