Simplify configuring users

This commit is contained in:
Manuel Thalmann 2024-05-07 22:02:12 +02:00
parent bdea1aa785
commit 47802f7450
3 changed files with 54 additions and 0 deletions

View file

@ -50,6 +50,7 @@
keyMap = "us"; keyMap = "us";
keyboardLayout = "us"; keyboardLayout = "us";
localeSettings = { }; localeSettings = { };
users = { };
}; };
systems = { systems = {
nixos.config = { ... }: { nixos.config = { ... }: {

View file

@ -2,6 +2,7 @@
imports = [ imports = [
./modules/custom-build-vm.nix ./modules/custom-build-vm.nix
./modules/custom-sops-nix.nix ./modules/custom-sops-nix.nix
./modules/my-users.nix
]; ];
config = { config = {
@ -23,6 +24,8 @@
vmVariantWithBootLoader = vmConfig; vmVariantWithBootLoader = vmConfig;
}; };
users.myUsers = machineConfig.users;
# Networking # Networking
networking.hostName = machineConfig.name; networking.hostName = machineConfig.name;

50
lib/modules/my-users.nix Normal file
View file

@ -0,0 +1,50 @@
{ 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;
};
}