{ 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; }; }