= Host-specific configuration :toc: These are NixOS configurations that are specific to a machine (e.g., desktop, servers, VMs, containers, installation media). Ideally, it should be made minimal as much as possible considering you also have to manage your users. == Integrating with custom modules The host configurations placed here most likely use the link:../modules/nixos[custom NixOS modules]. The custom modules shouldn't be imported manually from the host as this is already taken care of from the link:../flake.nix[flake definition]. It is best practice to assume the host configurations make use of the link:../modules/nixos[custom NixOS modules], link:../pkgs[custom packages], and the flake inputs. In other words, always pay attention to link:../flake.nix[`../flake.nix`]. == User management For managing users, there are multiple ways to manage them with this config: * The usual `users.users.${user}` from system configuration (see `man configuration.nix.5`). * If you intend to import users from the link:../users/nixos/[`../users/nixos/`], you can simply import them through `imports` in the system module. + -- For a convenient option, there is the function `getUser` defined from the link:../lib/private.nix[private custom library]. You can use it as follows: [source, nix] ---- imports = [ (lib.private.getUser "nixos" "foo-dogsquared") (lib.private.getUser "nixos" "polaski") ]; ---- -- * You could also easily map link:../users/home-manager[one of my home-manager configurations] into one of the users for a NixOS system with `lib.mapHomeManagerUser` which accepts two arguments: a name from of the home-manager user folder and the user config as if configuration with `users.users.`. + -- Here's an example to easily get my main home-manager config to be one of the users of the system. [source, nix] ---- lib.mapHomeManagerUser "foo-dogsquared" { extraGroups = [ "audio" "docker" ]; password = "what"; createHome = true; home = "/home/foo-dogsquared"; } ---- --