forked from fediversity/fediversity
		
	
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
/**
 | 
						|
  Convert a NixOS configuration to one for a minimal installer ISO
 | 
						|
 | 
						|
  WARNING: Running this installer will format the target disk!
 | 
						|
*/
 | 
						|
 | 
						|
{
 | 
						|
  nixosConfiguration,
 | 
						|
  hostKeys ? { },
 | 
						|
  nixpkgs ? (import ../npins).nixpkgs,
 | 
						|
}:
 | 
						|
 | 
						|
let
 | 
						|
  inherit (builtins) concatStringsSep attrValues mapAttrs;
 | 
						|
 | 
						|
  installer =
 | 
						|
    {
 | 
						|
      pkgs,
 | 
						|
      lib,
 | 
						|
      ...
 | 
						|
    }:
 | 
						|
    let
 | 
						|
      bootstrap = pkgs.writeShellApplication {
 | 
						|
        name = "bootstrap";
 | 
						|
        runtimeInputs = with pkgs; [ nixos-install-tools ];
 | 
						|
        text = ''
 | 
						|
          ${nixosConfiguration.config.system.build.diskoScript}
 | 
						|
          nixos-install --no-root-password --no-channel-copy --system ${nixosConfiguration.config.system.build.toplevel}
 | 
						|
          ${concatStringsSep "\n" (
 | 
						|
            attrValues (
 | 
						|
              mapAttrs (kind: keys: ''
 | 
						|
                cp ${keys.private} /mnt/etc/ssh/ssh_host_${kind}_key
 | 
						|
                chmod 600 /mnt/etc/ssh/ssh_host_${kind}_key
 | 
						|
                cp ${keys.public} /mnt/etc/ssh/ssh_host_${kind}_key.pub
 | 
						|
                chmod 644 /mnt/etc/ssh/ssh_host_${kind}_key.pub
 | 
						|
              '') hostKeys
 | 
						|
            )
 | 
						|
          )}
 | 
						|
          poweroff
 | 
						|
        '';
 | 
						|
      };
 | 
						|
    in
 | 
						|
    {
 | 
						|
      imports = [ "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix" ];
 | 
						|
      nixpkgs.hostPlatform = "x86_64-linux";
 | 
						|
      services.getty.autologinUser = lib.mkForce "root";
 | 
						|
      programs.bash.loginShellInit = lib.getExe bootstrap;
 | 
						|
 | 
						|
      isoImage = {
 | 
						|
        compressImage = false;
 | 
						|
        squashfsCompression = "lz4";
 | 
						|
        isoName = lib.mkForce "installer.iso";
 | 
						|
        ## ^^ FIXME: Use a more interesting name or keep the default name and
 | 
						|
        ## use `isoImage.isoName` in the tests.
 | 
						|
      };
 | 
						|
    };
 | 
						|
in
 | 
						|
(import "${nixpkgs}/nixos/lib/eval-config.nix" {
 | 
						|
  modules = [ installer ];
 | 
						|
  # Allow system to be set modularly in nixpkgs.system.
 | 
						|
  # We set it to null, to remove the "legacy" entrypoint's
 | 
						|
  # non-hermetic default.
 | 
						|
  system = null;
 | 
						|
}).config.system.build.isoImage
 |