os/doc/concepts/hosts.md

1.6 KiB

Hosts

Nix flakes contain an output called nixosConfigurations declaring an attribute set of valid NixOS systems. To create hosts, you can use the nixos.hosts argument and pass modules to each host. Host-specific modules typically go in the hosts folder of the template.

Each host should follow a certain channel to define the pkgs of that host. You can use the nixos.hostDefaults to set defaults and global modules for all hosts.

For each host, the configuration automatically sets the networking.hostName attribute to the name of the host. This is for convenience, since nixos-rebuild automatically searches for a configuration matching the current systems hostname if one is not specified explicitly.

It is recommended that the host modules only contain configuration information specific to a particular piece of hardware. Anything reusable across machines is best saved for profile modules.

This is a good place to import sets of profiles, called suites, that you intend to use on your machine.

Additionally, you can pass modules from nixos-hardware in the modules argument for relevant hosts.

Example

hosts/librem.nix:

{ suites, hardware, ... }:
{
  imports = suites.laptop ++ [ hardware.purism-librem-13v3 ];

  boot.loader.systemd-boot.enable = true;
  boot.loader.efi.canTouchEfiVariables = true;

  fileSystems."/" = { device = "/dev/disk/by-label/nixos"; };
}

flake.nix

{
  nixos.hosts.librem = {
    system = "aarch64-linux";
    modules = ./hosts/librem.nix;
  };
}