nixos/lib/user.nix
2025-08-13 10:39:08 +01:00

59 lines
1.4 KiB
Nix

{ pkgs
, stdenv
, home-manager
, mkHomeRole
, ...
}:
let
# Default roles that all NixOS users get
defaultSystemUserRoles = [ "common" "zsh" "aichat" ];
# Default roles for standalone home-manager configs
defaultHMUserRoles = [ "common" "aichat" ];
in
{
mkUser = { name, roles ? [ ], defaultRoles ? defaultSystemUserRoles }:
let
roles_mod = (map (r: mkHomeRole r) roles);
defaults_mod = (map (r: mkHomeRole r) defaultRoles);
in
{
fileSystems."/home/${name}/Downloads" = pkgs.lib.mkIf stdenv.isLinux {
device = "tmpfs";
fsType = "tmpfs";
options = [ "size=3G" ];
};
users = {
users.${name} = {
isNormalUser = name != "root";
extraGroups = [ "wheel" "plugdev" ];
shell = pkgs.zsh;
};
};
programs.zsh.enable = true;
home-manager.users.${name}.imports = defaults_mod ++ roles_mod;
};
mkHMUser = { name, roles ? [ ], defaultRoles ? defaultHMUserRoles }:
let
roles_mod = (map (r: mkHomeRole r) roles);
defaults_mod = (map (r: mkHomeRole r) defaultRoles);
in
home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = [
{
home = {
username = name;
homeDirectory =
if stdenv.isLinux then "/home/${name}" else "/Users/${name}";
};
}
] ++ defaults_mod ++ roles_mod;
};
}