Install disko in the ISOs.

This commit is contained in:
Tom Alexander 2025-10-26 17:36:25 -04:00
parent 614ef2e5cf
commit 4276f63c59
Signed by: talexander
GPG Key ID: 36C99E8B3C39D85F
11 changed files with 100 additions and 6 deletions

View File

@ -19,6 +19,7 @@
./roles/chromium
./roles/d2
./roles/direnv
./roles/disko
./roles/distributed_build
./roles/doas
./roles/docker

View File

@ -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";

View File

@ -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;
};
}

View File

@ -39,6 +39,7 @@
system_features = [
"gccarch-znver4"
"gccarch-skylake"
"gccarch-kabylake"
# "gccarch-alderlake" missing WAITPKG
"gccarch-x86-64-v3"
"gccarch-x86-64-v4"

View File

@ -38,6 +38,7 @@
system_features = [
"gccarch-znver4"
"gccarch-skylake"
"gccarch-kabylake"
# "gccarch-alderlake" missing WAITPKG
"gccarch-x86-64-v3"
"gccarch-x86-64-v4"

View File

@ -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"

View File

@ -34,6 +34,7 @@
system_features = [
"gccarch-znver4"
"gccarch-skylake"
"gccarch-kabylake"
# "gccarch-alderlake" missing WAITPKG
"gccarch-x86-64-v3"
"gccarch-x86-64-v4"

View File

@ -33,6 +33,7 @@
"gccarch-znver4"
"gccarch-znver5"
"gccarch-skylake"
"gccarch-kabylake"
# "gccarch-alderlake" missing WAITPKG
"gccarch-x86-64-v3"
"gccarch-x86-64-v4"

View File

@ -25,7 +25,7 @@
me.mountPersistence = true;
me.optimizations = {
enable = true;
# enable = true;
arch = "kabylake";
# build_arch = "x86-64-v3";
system_features = [

View File

@ -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";
})
]
);
}

View File

@ -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"
];