netboot.nix/pkgs/pxescript/default.nix
2024-12-26 19:41:30 -05:00

74 lines
2.0 KiB
Nix

{ stdenv, runCommand }:
{ config
, initrds ? {}
, pkgs
,
}:
let
cmdlineinitrds = builtins.concatStringsSep " " (builtins.map (name: "initrd=${name}") (builtins.attrNames initrds));
in
runCommand "netboot" {
pxe = ''
#!ipxe
:custom
clear custom_choice
menu NixOS netboot installer
item --gap Role Installers
item option_one ''${space} Boot NixOS
item option_two ''${space} Loading an ISO
item --gap Testing Tools (incomplete)
item option_three ''${space} Loads another custom sub menu
item option_four ''${space} This is option 4
choose custom_choice || goto custom_exit
echo ''${cls}
goto ''${custom_choice}
goto custom_exit
:option_one
kernel http://172.16.1.6/netboot/${pkgs.stdenv.hostPlatform.linux-kernel.target}
${builtins.concatStringsSep "\n" (builtins.attrValues (builtins.mapAttrs (name: path: "initrd http://172.16.1.6/netboot/${name}") initrds))}
#initrd http://172.16.1.6/netboot/initrd
#initrd http://172.16.1.6/netboot/manifest
#initrd http://172.16.1.6/netboot/nix-store
imgargs ${pkgs.stdenv.hostPlatform.linux-kernel.target} init=${config.system.build.toplevel}/init ${cmdlineinitrds} ${toString config.boot.kernelParams}
boot || goto custom_exit
:option_two
kernel {{ memdisk_location }} raw iso
initrd https://mirror.mauer.tech/archlinux/iso/latest/archlinux-x86_64.iso
boot || goto custom_exit
:option_three
echo Chains into another menu...
chain custom1.ipxe || goto custom
:custom_exit
exit
'';
preferLocalBuild = true;
} ''
mkdir stage
cd stage
ln -s "${config.system.build.kernel}/${pkgs.stdenv.hostPlatform.linux-kernel.target}" ./
set -x
${builtins.concatStringsSep "\n"
(
builtins.attrValues
(
builtins.mapAttrs
(
name: path: ''
test -f "$(realpath "${path}")"
ln -s ${path} ./${name}
''
) initrds
)
)}
set +x
echo "$pxe" > netboot.ipxe
cd ..
mv stage $out
''