fix: Ensure all users are read from and that the config is shared between module levels
Some checks failed
CI / Flake Check (push) Has been cancelled
CI / Evaluate Key Configurations (nix-builder) (push) Has been cancelled
CI / Evaluate Key Configurations (nix-desktop1) (push) Has been cancelled
CI / Evaluate Key Configurations (nix-laptop1) (push) Has been cancelled
CI / Evaluate Artifacts (installer-iso-nix-laptop1) (push) Has been cancelled
CI / Evaluate Artifacts (lxc-nix-builder) (push) Has been cancelled
CI / Format Check (push) Has been cancelled
Some checks failed
CI / Flake Check (push) Has been cancelled
CI / Evaluate Key Configurations (nix-builder) (push) Has been cancelled
CI / Evaluate Key Configurations (nix-desktop1) (push) Has been cancelled
CI / Evaluate Key Configurations (nix-laptop1) (push) Has been cancelled
CI / Evaluate Artifacts (installer-iso-nix-laptop1) (push) Has been cancelled
CI / Evaluate Artifacts (lxc-nix-builder) (push) Has been cancelled
CI / Format Check (push) Has been cancelled
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
inputs,
|
||||
lib,
|
||||
config,
|
||||
self ? null,
|
||||
users ? {},
|
||||
...
|
||||
}:
|
||||
|
||||
@@ -139,13 +141,19 @@ let
|
||||
typeModule
|
||||
overrideModule
|
||||
{ networking.hostName = hostName; }
|
||||
{
|
||||
# Inject user definitions from flake-parts level
|
||||
config.athenix.users = lib.mapAttrs (_: user: lib.mapAttrs (_: lib.mkDefault) user) users;
|
||||
}
|
||||
]
|
||||
++ lib.optional (externalModulePath != null) externalPathModule;
|
||||
in
|
||||
{
|
||||
system = lib.nixosSystem {
|
||||
inherit system;
|
||||
specialArgs = { inherit inputs; };
|
||||
specialArgs = {
|
||||
inputs = if self != null then inputs // { inherit self; } else inputs;
|
||||
};
|
||||
modules = allModules;
|
||||
};
|
||||
modules = allModules;
|
||||
|
||||
@@ -172,7 +172,6 @@ in
|
||||
};
|
||||
users = lib.mkOption {
|
||||
type = lib.types.attrsOf userSubmodule;
|
||||
default = { };
|
||||
description = "User accounts configuration. Set enable=true for users that should exist on this system.";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -33,41 +33,34 @@ let
|
||||
in
|
||||
{
|
||||
config = {
|
||||
|
||||
# Generate NixOS users
|
||||
users.users =
|
||||
let
|
||||
enabledAccounts = lib.filterAttrs (_: user: user.enable) config.athenix.users;
|
||||
in
|
||||
lib.mapAttrs (
|
||||
name: user:
|
||||
let
|
||||
isPlasma6 = config.services.desktopManager.plasma6.enable;
|
||||
defaultPackages = lib.optionals (isPlasma6 && name != "root") [ pkgs.kdePackages.kate ];
|
||||
finalPackages = lib.subtractLists user.excludePackages (defaultPackages ++ user.extraPackages);
|
||||
shells = {
|
||||
bash = pkgs.bash;
|
||||
zsh = pkgs.zsh;
|
||||
fish = pkgs.fish;
|
||||
tcsh = pkgs.tcsh;
|
||||
};
|
||||
in
|
||||
rec {
|
||||
inherit (user) isNormalUser extraGroups hashedPassword;
|
||||
description = if user.description != null then user.description else lib.mkDefault "";
|
||||
openssh.authorizedKeys.keys = user.opensshKeys;
|
||||
shell = if user.shell != null then shells.${user.shell} else pkgs.bash;
|
||||
packages = finalPackages ++ [ shell ];
|
||||
group = if user.isNormalUser then name else lib.mkDefault "root";
|
||||
}
|
||||
) enabledAccounts;
|
||||
|
||||
# Generate user groups for normal users
|
||||
users.groups =
|
||||
let
|
||||
enabledAccounts = lib.filterAttrs (_: user: user.enable) config.athenix.users;
|
||||
normalUsers = lib.filterAttrs (_: user: user.isNormalUser) enabledAccounts;
|
||||
in
|
||||
lib.mapAttrs (_: _: { }) normalUsers;
|
||||
name: user:
|
||||
let
|
||||
isPlasma6 = config.services.desktopManager.plasma6.enable;
|
||||
defaultPackages = lib.optionals (isPlasma6 && name != "root") [ pkgs.kdePackages.kate ];
|
||||
finalPackages = lib.subtractLists user.excludePackages (defaultPackages ++ user.extraPackages);
|
||||
shells = {
|
||||
bash = pkgs.bash;
|
||||
zsh = pkgs.zsh;
|
||||
fish = pkgs.fish;
|
||||
tcsh = pkgs.tcsh;
|
||||
};
|
||||
in
|
||||
rec {
|
||||
isNormalUser = user.isNormalUser;
|
||||
inherit (user) extraGroups hashedPassword;
|
||||
description = if user.description != null then user.description else lib.mkDefault "";
|
||||
openssh.authorizedKeys.keys = user.opensshKeys;
|
||||
shell = if user.shell != null then shells.${user.shell} else pkgs.bash;
|
||||
packages = finalPackages ++ [ shell ];
|
||||
}
|
||||
) enabledAccounts;
|
||||
|
||||
# Home Manager configs per user
|
||||
home-manager = {
|
||||
@@ -133,7 +126,7 @@ in
|
||||
|
||||
# Always set these required options
|
||||
home.username = name;
|
||||
home.homeDirectory = if name == "root" then "/root" else "/home/${name}";
|
||||
home.homeDirectory = lib.mkOverride 999 (if name == "root" then "/root" else "/home/${name}");
|
||||
home.stateVersion = "25.11";
|
||||
programs.${user.editor} = {
|
||||
enable = true;
|
||||
|
||||
Reference in New Issue
Block a user