# This module defines a systemd service that automatically installs NixOS to the disk. # It is intended to be used in an installation ISO. # It expects `targetSystem` (the closure to install) and `diskoScript` (the partitioning script) to be passed as arguments. { config, lib, pkgs, inputs, hostName, hostPlatform, targetSystemBuild, diskoScript, ... }: { environment.systemPackages = [ pkgs.git pkgs.bashInteractive pkgs.curl targetSystemBuild.toplevel ]; nixpkgs.hostPlatform = hostPlatform; nix.settings.experimental-features = "nix-command flakes"; system.extraDependencies = with targetSystemBuild; [ toplevel etc bootStage2 ]; isoImage.storeContents = [ targetSystemBuild.toplevel ]; systemd.services.auto-install = { description = "Automatic NixOS install for ${hostName}"; after = [ "network-online.target" "systemd-udev-settle.service" ]; wants = [ "network-online.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { Type = "oneshot"; StandardOutput = "journal+console"; StandardError = "journal+console"; Environment = "PATH=/run/current-system/sw/bin"; }; script = '' echo "=== AUTO INSTALL START for ${hostName} ===" echo ">>> Running disko script..." ${diskoScript} echo ">>> Setting up NixOS..." nixos-install \ --system ${targetSystemBuild.toplevel} \ --no-root-passwd \ --no-channel-copy \ --substituters "" echo ">>> Done. Rebooting." systemctl reboot ''; }; }