about summary refs log blame commit diff
path: root/ipxe.nix
blob: 461e4fff8b1e797d81bbebcbdc50e6c892a23713 (plain) (tree)






































                                                                                                                    
# SPDX-FileCopyrightText: 2022 Alyssa Ross <hi@alyssa.is>
# SPDX-License-Identifier: MIT

{ lib ? import <nixpkgs/lib>
, runScript ? "https://spectrum-os.org/git/infra/plain/run"
, chain ? "https://github.com/nix-community/nixos-images/releases/download/nixos-unstable/netboot-x86_64-linux.ipxe"
, configuration ? "https://spectrum-os.org/git/infra/plain/configuration.nix"
, userdata ? "http://169.254.169.254/latest/user-data"
}:

let
  commands = [
    "systemctl start network-online.target"
    "/run/current-system/sw/bin/curl -fLsSo /tmp/run ${runScript}"
    "/run/current-system/sw/bin/chmod +x /tmp/run"
    "/tmp/run"
  ];

  cmdline = lib.concatMapStrings (cmd: ''systemd.run="${cmd}" '') commands
    + toString [
      "systemd.unit=kernel-command-line.target"
      "systemd.run_success_action=none"
      "systemd.run_failure_action=none"
      "configuration=${configuration}"
      "userdata=${userdata}"
    ];

  defaultCmdlineLength = 122;
  cmdlineMax = 2048;
in

assert builtins.stringLength cmdline + defaultCmdlineLength <= cmdlineMax;

''
#!ipxe
set cmdline ${cmdline}
dhcp
chain ${chain}
''