84 lines
1.9 KiB
Nix
84 lines
1.9 KiB
Nix
{ pkgs, lib, options, config, ... }:
|
|
|
|
let
|
|
inherit (lib) types mkOption mkDefault foldl optionalAttrs optional;
|
|
|
|
cfg = config.snowfallorg;
|
|
|
|
user-names = builtins.attrNames cfg.user;
|
|
|
|
create-system-users = system-users: name:
|
|
let
|
|
user = cfg.user.${name};
|
|
in
|
|
system-users // (optionalAttrs user.create {
|
|
${name} = {
|
|
isNormalUser = mkDefault true;
|
|
|
|
name = mkDefault cfg.name;
|
|
|
|
home = mkDefault user.home.path;
|
|
group = mkDefault "users";
|
|
|
|
extraGroups = (builtins.trace user.admin) optional user.admin "wheel";
|
|
};
|
|
});
|
|
|
|
create-resolved-home = resolved-homes: name:
|
|
let
|
|
user = cfg.user.${name};
|
|
in
|
|
resolved-homes // {
|
|
${name} = user.home.config;
|
|
};
|
|
in
|
|
(builtins.trace "hello")
|
|
{
|
|
options.snowfallorg = {
|
|
user = mkOption {
|
|
description = "User configuration.";
|
|
default = { };
|
|
type = types.attrsOf (types.submodule ({ name, ... }: {
|
|
options = {
|
|
create = mkOption {
|
|
description = "Whether to create the user automatically.";
|
|
type = types.bool;
|
|
default = true;
|
|
};
|
|
|
|
admin = mkOption {
|
|
description = "Whether the user should be added to the wheel group.";
|
|
type = types.bool;
|
|
default = true;
|
|
};
|
|
|
|
home = {
|
|
path = mkOption {
|
|
type = types.str;
|
|
default = "/home/${name}";
|
|
};
|
|
|
|
config = mkOption {
|
|
type = types.attrs;
|
|
default = { };
|
|
};
|
|
};
|
|
};
|
|
}));
|
|
};
|
|
|
|
resolved-homes = mkOption {
|
|
type = types.attrs;
|
|
default = { };
|
|
internal = true;
|
|
};
|
|
};
|
|
|
|
config = {
|
|
users.users = (foldl (create-system-users) { } (user-names));
|
|
|
|
snowfallorg = {
|
|
resolved-homes = (foldl (create-resolved-home) { } (user-names));
|
|
};
|
|
};
|
|
}
|