From 4276f63c5980a1410c814b99e5a13868aa48c356 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sun, 26 Oct 2025 17:36:25 -0400 Subject: [PATCH] Install disko in the ISOs. --- nix/configuration/configuration.nix | 1 + nix/configuration/flake.nix | 16 ++-- nix/configuration/formats/iso.nix | 5 ++ nix/configuration/hosts/hydra/default.nix | 1 + .../hosts/ionlybootzfs/default.nix | 1 + .../hosts/ionlybootzfs/optimized_build.nix | 1 + nix/configuration/hosts/odo/default.nix | 1 + nix/configuration/hosts/quark/default.nix | 1 + nix/configuration/hosts/recovery/default.nix | 2 +- nix/configuration/roles/disko/default.nix | 75 +++++++++++++++++++ .../roles/distributed_build/default.nix | 2 + 11 files changed, 100 insertions(+), 6 deletions(-) create mode 100644 nix/configuration/roles/disko/default.nix diff --git a/nix/configuration/configuration.nix b/nix/configuration/configuration.nix index 9e4b913..376e1a6 100644 --- a/nix/configuration/configuration.nix +++ b/nix/configuration/configuration.nix @@ -19,6 +19,7 @@ ./roles/chromium ./roles/d2 ./roles/direnv + ./roles/disko ./roles/distributed_build ./roles/doas ./roles/docker diff --git a/nix/configuration/flake.nix b/nix/configuration/flake.nix index 649a624..54671aa 100644 --- a/nix/configuration/flake.nix +++ b/nix/configuration/flake.nix @@ -6,12 +6,13 @@ # # Install on a new machine: # +# Set +# me.disko.enable = true; +# me.disko.offline.enable = true; # -# doas nix --substituters "http://10.0.2.2:8080?trusted=1 https://cache.nixos.org/" --experimental-features "nix-command flakes" run github:nix-community/disko/latest -- --mode destroy,format,mount hosts/odo/disk-config.nix - -# for f in /persist/manual/manual_add_to_store/*; do nix-store --add-fixed sha256 "$f"; done -# nixos-install --substituters "http://10.0.2.2:8080?trusted=1 https://cache.nixos.org/" --flake ".#vm_ionlybootzfs" -# +# Run +# doas disko --mode destroy,format,mount hosts/recovery/disk-config.nix +# doas nixos-install --substituters "http://10.0.2.2:8080?trusted=1 https://cache.nixos.org/" --flake ".#recovery" { description = "My system configuration"; @@ -32,6 +33,7 @@ outputs = { + self, nixpkgs, nixpkgs-unoptimized, disko, @@ -57,6 +59,10 @@ nixpkgs.lib.nixosSystem { inherit (nodeConfig) system; specialArgs = { + inherit self; + + this_nixos_config = self.nixosConfigurations."${hostname}"; + pkgs-unoptimized = import nixpkgs-unoptimized { inherit (nodeConfig) system; hostPlatform.gcc.arch = "default"; diff --git a/nix/configuration/formats/iso.nix b/nix/configuration/formats/iso.nix index 1c1dd41..c911623 100644 --- a/nix/configuration/formats/iso.nix +++ b/nix/configuration/formats/iso.nix @@ -14,10 +14,15 @@ isoImage.makeUsbBootable = true; me.buildingPortable = true; + me.disko.enable = true; + me.disko.offline.enable = true; me.mountPersistence = lib.mkForce false; me.optimizations.enable = lib.mkForce false; # Not doing image_based_appliance because this might be an install ISO, in which case we'd need nix to do the install. # me.image_based_appliance.enable = true; + + # TODO: Should I use this instead of doing a mkIf for the disk config? + # disko.enableConfig = false; }; } diff --git a/nix/configuration/hosts/hydra/default.nix b/nix/configuration/hosts/hydra/default.nix index 35c489c..c94d0d0 100644 --- a/nix/configuration/hosts/hydra/default.nix +++ b/nix/configuration/hosts/hydra/default.nix @@ -39,6 +39,7 @@ system_features = [ "gccarch-znver4" "gccarch-skylake" + "gccarch-kabylake" # "gccarch-alderlake" missing WAITPKG "gccarch-x86-64-v3" "gccarch-x86-64-v4" diff --git a/nix/configuration/hosts/ionlybootzfs/default.nix b/nix/configuration/hosts/ionlybootzfs/default.nix index e2faf35..abca80d 100644 --- a/nix/configuration/hosts/ionlybootzfs/default.nix +++ b/nix/configuration/hosts/ionlybootzfs/default.nix @@ -38,6 +38,7 @@ system_features = [ "gccarch-znver4" "gccarch-skylake" + "gccarch-kabylake" # "gccarch-alderlake" missing WAITPKG "gccarch-x86-64-v3" "gccarch-x86-64-v4" diff --git a/nix/configuration/hosts/ionlybootzfs/optimized_build.nix b/nix/configuration/hosts/ionlybootzfs/optimized_build.nix index 3f5b975..7eb8f5f 100644 --- a/nix/configuration/hosts/ionlybootzfs/optimized_build.nix +++ b/nix/configuration/hosts/ionlybootzfs/optimized_build.nix @@ -94,6 +94,7 @@ nix.settings.system-features = lib.mkForce [ "gccarch-znver4" "gccarch-skylake" + "gccarch-kabylake" # "gccarch-alderlake" missing WAITPKG "gccarch-x86-64-v3" "gccarch-x86-64-v4" diff --git a/nix/configuration/hosts/odo/default.nix b/nix/configuration/hosts/odo/default.nix index 7d5cf24..124afa5 100644 --- a/nix/configuration/hosts/odo/default.nix +++ b/nix/configuration/hosts/odo/default.nix @@ -34,6 +34,7 @@ system_features = [ "gccarch-znver4" "gccarch-skylake" + "gccarch-kabylake" # "gccarch-alderlake" missing WAITPKG "gccarch-x86-64-v3" "gccarch-x86-64-v4" diff --git a/nix/configuration/hosts/quark/default.nix b/nix/configuration/hosts/quark/default.nix index 6b3977f..7c9310b 100644 --- a/nix/configuration/hosts/quark/default.nix +++ b/nix/configuration/hosts/quark/default.nix @@ -33,6 +33,7 @@ "gccarch-znver4" "gccarch-znver5" "gccarch-skylake" + "gccarch-kabylake" # "gccarch-alderlake" missing WAITPKG "gccarch-x86-64-v3" "gccarch-x86-64-v4" diff --git a/nix/configuration/hosts/recovery/default.nix b/nix/configuration/hosts/recovery/default.nix index 6cf1ed6..00a9032 100644 --- a/nix/configuration/hosts/recovery/default.nix +++ b/nix/configuration/hosts/recovery/default.nix @@ -25,7 +25,7 @@ me.mountPersistence = true; me.optimizations = { - enable = true; + # enable = true; arch = "kabylake"; # build_arch = "x86-64-v3"; system_features = [ diff --git a/nix/configuration/roles/disko/default.nix b/nix/configuration/roles/disko/default.nix new file mode 100644 index 0000000..f4cbadf --- /dev/null +++ b/nix/configuration/roles/disko/default.nix @@ -0,0 +1,75 @@ +{ + config, + lib, + pkgs, + self, + this_nixos_config, + ... +}: + +let + flakeOutPaths = + let + collector = + parent: + map ( + child: + [ child.outPath ] ++ (if child ? inputs && child.inputs != { } then (collector child) else [ ]) + ) (lib.attrValues parent.inputs); + in + lib.unique (lib.flatten (collector self)); + dependencies = [ + # this_nixos_config.config.system.build.toplevel + this_nixos_config.config.system.build.diskoScript + # this_nixos_config.config.system.build.diskoScript.drvPath + this_nixos_config.pkgs.stdenv.drvPath + + # https://github.com/NixOS/nixpkgs/blob/f2fd33a198a58c4f3d53213f01432e4d88474956/nixos/modules/system/activation/top-level.nix#L342 + this_nixos_config.pkgs.perlPackages.ConfigIniFiles + this_nixos_config.pkgs.perlPackages.FileSlurp + + (this_nixos_config.pkgs.closureInfo { rootPaths = [ ]; }).drvPath + ] + ++ flakeOutPaths; + closureInfo = pkgs.closureInfo { rootPaths = dependencies; }; +in +{ + imports = [ ]; + + options.me = { + disko.enable = lib.mkOption { + type = lib.types.bool; + default = false; + example = true; + description = "Whether we want to install disko."; + }; + + disko.offline.enable = lib.mkOption { + type = lib.types.bool; + default = false; + example = true; + description = "Whether we want to install disko."; + }; + }; + + config = lib.mkIf config.me.disko.enable ( + lib.mkMerge [ + { + environment.systemPackages = with pkgs; [ + disko + ]; + } + (lib.mkIf config.me.disko.offline.enable { + environment.systemPackages = with pkgs; [ + (pkgs.writeShellScriptBin "install-nixos-unattended" '' + set -xeuo pipefail + IFS=$'\n\t' + exec ${pkgs.disko}/bin/disko-install --flake '${self}#${config.networking.hostName}' --disk main '/dev/nvme0n1' + '') + ]; + + environment.etc."install-closure".source = "${closureInfo}/store-paths"; + }) + ] + ); +} diff --git a/nix/configuration/roles/distributed_build/default.nix b/nix/configuration/roles/distributed_build/default.nix index 65b31a7..63d70f6 100644 --- a/nix/configuration/roles/distributed_build/default.nix +++ b/nix/configuration/roles/distributed_build/default.nix @@ -64,6 +64,7 @@ in "gccarch-x86-64-v3" "gccarch-x86-64-v4" "gccarch-skylake" + "gccarch-kabylake" "gccarch-znver4" ]; } @@ -93,6 +94,7 @@ in "gccarch-x86-64-v3" "gccarch-x86-64-v4" "gccarch-skylake" + "gccarch-kabylake" "gccarch-znver4" "gccarch-znver5" ];