|
| 1 | +{ lib |
| 2 | +, runCommand |
| 3 | +, fetchurl |
| 4 | +, libguestfs |
| 5 | +, libguestfs-appliance |
| 6 | +, resolution ? "1024x768" |
| 7 | +, csrFlag ? "0x3" |
| 8 | +, params ? "-v" |
| 9 | +, timeout ? "3" |
| 10 | +# https://github.com/Clover-EFI-Bootloader/clover/blob/6b8018b1fec958d672951f87cefd8b6cfd5318ac/rEFIt_UEFI/Platform/boot.h#L127-L135 |
| 11 | +}: |
| 12 | + |
| 13 | +lib.fix (self: { |
| 14 | + clover-image = runCommand "clover.qcow2" { |
| 15 | + buildInputs = [ libguestfs ]; |
| 16 | + inherit resolution csrFlag params timeout; |
| 17 | + LIBGUESTFS_PATH = libguestfs-appliance; |
| 18 | + } '' |
| 19 | + export HOME=$NIX_BUILD_TOP |
| 20 | + mkdir work |
| 21 | + cp --no-preserve=mode ${self.clover-iso} clover.iso |
| 22 | + guestfish -a clover.iso -m "/dev/sda:/:norock" <<EOF |
| 23 | + copy-out /EFI work |
| 24 | + EOF |
| 25 | + eval $(guestfish --listen) |
| 26 | + guestfish --remote disk-create clover2.img qcow2 256M |
| 27 | + guestfish --remote add clover2.img |
| 28 | + time guestfish --remote run |
| 29 | + guestfish --remote part-init /dev/sda gpt |
| 30 | + guestfish --remote part-add /dev/sda p 2048 200000 |
| 31 | + guestfish --remote -- part-add /dev/sda p 202048 -2048 |
| 32 | + guestfish --remote part-set-gpt-type /dev/sda 1 C12A7328-F81F-11D2-BA4B-00A0C93EC93B |
| 33 | + guestfish --remote part-set-bootable /dev/sda 1 true |
| 34 | + guestfish --remote mkfs vfat /dev/sda1 label:EFI |
| 35 | + guestfish --remote mkfs vfat /dev/sda2 label:clover |
| 36 | + guestfish --remote mount /dev/sda2 / |
| 37 | + guestfish --remote mkdir /ESP |
| 38 | + guestfish --remote mount /dev/sda1 /ESP |
| 39 | + guestfish --remote mkdir /ESP/EFI |
| 40 | + guestfish --remote mkdir /ESP/EFI/CLOVER |
| 41 | + guestfish --remote copy-in work/EFI/BOOT /ESP/EFI |
| 42 | + guestfish --remote copy-in work/EFI/CLOVER/CLOVERX64.efi /ESP/EFI/CLOVER |
| 43 | + guestfish --remote copy-in work/EFI/CLOVER/drivers64UEFI /ESP/EFI/CLOVER |
| 44 | + guestfish --remote copy-in work/EFI/CLOVER/drivers-Off/drivers64UEFI/PartitionDxe-64.efi /ESP/EFI/CLOVER/drivers64UEFI |
| 45 | + guestfish --remote copy-in work/EFI/CLOVER/drivers-Off/drivers64UEFI/ApfsDriverLoader-64.efi /ESP/EFI/CLOVER/drivers64UEFI |
| 46 | + guestfish --remote copy-in work/EFI/CLOVER/drivers-Off/drivers64UEFI/OsxAptioFix3Drv-64.efi /ESP/EFI/CLOVER/drivers64UEFI |
| 47 | + guestfish --remote copy-in work/EFI/CLOVER/tools /ESP/EFI/CLOVER |
| 48 | + substituteAll ${./config.plist.template} work/config.plist |
| 49 | + guestfish --remote copy-in work/config.plist /ESP/EFI/CLOVER |
| 50 | + guestfish --remote rm /ESP/EFI/CLOVER/drivers64UEFI/AudioDxe-64.efi |
| 51 | + guestfish --remote umount-all |
| 52 | + guestfish --remote shutdown |
| 53 | + mv clover2.img $out |
| 54 | + ''; |
| 55 | + cloverVersion = "4934"; |
| 56 | + clover-iso-lzma = fetchurl { |
| 57 | + url = "mirror://sourceforge/cloverefiboot/CloverISO-${self.cloverVersion}.tar.lzma"; |
| 58 | + sha256 = "0ivwaapgir2yvsyp7gi9ddj6r97j99n99cz0xwqhcrijimp06hcl"; |
| 59 | + }; |
| 60 | + clover-iso = runCommand "clover.iso" {} '' |
| 61 | + tar -xvf ${self.clover-iso-lzma} |
| 62 | + mv -v *.iso $out |
| 63 | + ''; |
| 64 | +}) |
0 commit comments