fix bug in grub/install-grub.pl that would replace @bootRoot@ with an invalid stringwip/yesman
parent
3faacca044
commit
e69f876cca
@ -0,0 +1,64 @@ |
||||
# This module adds a scripted iPXE entry to the GRUB boot menu. |
||||
|
||||
{ config, lib, pkgs, ... }: |
||||
|
||||
with lib; |
||||
|
||||
let |
||||
scripts = builtins.attrNames config.boot.loader.grub.ipxe; |
||||
|
||||
grubEntry = name: |
||||
'' |
||||
menuentry "iPXE - ${name}" { |
||||
linux16 @bootRoot@/ipxe.lkrn |
||||
initrd16 @bootRoot@/${name}.ipxe |
||||
} |
||||
|
||||
''; |
||||
|
||||
scriptFile = name: |
||||
let |
||||
value = builtins.getAttr name config.boot.loader.grub.ipxe; |
||||
in |
||||
if builtins.typeOf value == "path" then value |
||||
else builtins.toFile "${name}.ipxe" value; |
||||
in |
||||
{ |
||||
options = |
||||
{ boot.loader.grub.ipxe = mkOption { |
||||
type = types.attrsOf (types.either types.path types.str); |
||||
description = |
||||
'' |
||||
Set of iPXE scripts available for |
||||
booting from the GRUB boot menu. |
||||
''; |
||||
default = { }; |
||||
example = literalExample '' |
||||
{ demo = ''' |
||||
#!ipxe |
||||
dhcp |
||||
chain http://boot.ipxe.org/demo/boot.php |
||||
'''; |
||||
}; |
||||
''; |
||||
}; |
||||
}; |
||||
|
||||
config = mkIf (builtins.length scripts != 0) { |
||||
|
||||
boot.loader.grub.extraEntries = |
||||
if config.boot.loader.grub.version == 2 then |
||||
toString (map grubEntry scripts) |
||||
else |
||||
throw "iPXE is not supported with GRUB 1."; |
||||
|
||||
boot.loader.grub.extraFiles = |
||||
{ "ipxe.lkrn" = "${pkgs.ipxe}/ipxe.lkrn"; } |
||||
// |
||||
builtins.listToAttrs ( map |
||||
(name: { name = name+".ipxe"; value = scriptFile name; }) |
||||
scripts |
||||
); |
||||
}; |
||||
|
||||
} |
Loading…
Reference in new issue