51 lines
1.2 KiB
Nix
51 lines
1.2 KiB
Nix
|
{ config, lib, ... }:
|
||
|
let
|
||
|
userType = lib.types.submodule {
|
||
|
options = {
|
||
|
fullName = lib.mkOption {
|
||
|
type = lib.types.nullOr lib.types.str;
|
||
|
description = lib.mdDoc "The full name of the user.";
|
||
|
default = null;
|
||
|
};
|
||
|
|
||
|
defaultShell = lib.mkOption {
|
||
|
type = lib.types.anything;
|
||
|
description = "The default shell of the user.";
|
||
|
default = null;
|
||
|
};
|
||
|
|
||
|
sudoer = lib.mkOption {
|
||
|
type = lib.types.bool;
|
||
|
description = lib.mdDoc "Enable `sudo` commands for this user.";
|
||
|
default = false;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
in {
|
||
|
options = {
|
||
|
users.myUsers = lib.mkOption {
|
||
|
type = lib.types.attrsOf userType;
|
||
|
description = lib.mdDoc "The users for the system to create.";
|
||
|
default = {};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
config = {
|
||
|
users.users = builtins.mapAttrs
|
||
|
(
|
||
|
name: user: {
|
||
|
description = lib.mkIf
|
||
|
(user.fullName != null)
|
||
|
user.fullName;
|
||
|
isNormalUser = true;
|
||
|
shell = lib.mkIf
|
||
|
(user.defaultShell != null)
|
||
|
user.defaultShell;
|
||
|
extraGroups = lib.mkIf user.sudoer [
|
||
|
"wheel"
|
||
|
];
|
||
|
})
|
||
|
config.users.myUsers;
|
||
|
};
|
||
|
}
|