summary refs log tree commit diff
path: root/installer/default.nix
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2021-12-15 05:28:38 +0000
committerAlyssa Ross <hi@alyssa.is>2022-02-14 12:21:40 +0000
commit2ae30ffe993f314898d75c2bbeede32312e55f82 (patch)
tree3db0bf60d295bed4f8ab2671ec004997ea8b9555 /installer/default.nix
parent76f88027d626d36010f1e23ed16cccb19ae32bb9 (diff)
downloadspectrum-2ae30ffe993f314898d75c2bbeede32312e55f82.tar
spectrum-2ae30ffe993f314898d75c2bbeede32312e55f82.tar.gz
spectrum-2ae30ffe993f314898d75c2bbeede32312e55f82.tar.bz2
spectrum-2ae30ffe993f314898d75c2bbeede32312e55f82.tar.lz
spectrum-2ae30ffe993f314898d75c2bbeede32312e55f82.tar.xz
spectrum-2ae30ffe993f314898d75c2bbeede32312e55f82.tar.zst
spectrum-2ae30ffe993f314898d75c2bbeede32312e55f82.zip
installer: operate on FAT image directly
Message-Id: <20220201175138.43759-1-hi@alyssa.is>
Diffstat (limited to 'installer/default.nix')
-rw-r--r--installer/default.nix25
1 files changed, 13 insertions, 12 deletions
diff --git a/installer/default.nix b/installer/default.nix
index f7e84ac..0818091 100644
--- a/installer/default.nix
+++ b/installer/default.nix
@@ -24,6 +24,7 @@ let
 
   esp = runCommand "esp.img" {
     nativeBuildInputs = [ grub libfaketime dosfstools mtools ];
+    grubTargetDir = "${grub}/lib/grub/${grub.grubTarget}";
     # Definition copied from util/grub-install-common.c.
     # Last checked: GRUB 2.06
     pkglib_DATA = [
@@ -31,23 +32,23 @@ let
       "parttool.lst" "video.lst" "crypto.lst" "terminal.lst" "modinfo.sh"
     ];
   } ''
-    mkdir -p files/grub/${grub.grubTarget}
-    cp ${grubCfg} files/grub/grub.cfg
-    cp ${grub}/lib/grub/${grub.grubTarget}/*.mod files/grub/${grub.grubTarget}
+    truncate -s 15M $out
+    faketime "1970-01-01 00:00:00" mkfs.vfat -i 0x2178694e -n EFI $out
+    mmd -i $out ::/EFI ::/EFI/BOOT \
+        ::/grub ::/grub/${grub.grubTarget} ::/grub/fonts
+
+    mcopy -i $out ${grubCfg} ::/grub/grub.cfg
+    mcopy -i $out $grubTargetDir/*.mod ::/grub/${grub.grubTarget}
     for file in $pkglib_DATA; do
-        path="${grub}/lib/grub/${grub.grubTarget}/$file"
-        ! [ -e "$path" ] || cp "$path" files/grub/${grub.grubTarget}
+        path="$grubTargetDir/$file"
+        ! [ -e "$path" ] || mcopy -i $out "$path" ::/grub/${grub.grubTarget}
     done
+    mcopy -i $out ${grub}/share/grub/unicode.pf2 ::/grub/fonts
 
-    install -D ${grub}/share/grub/unicode.pf2 files/grub/fonts/unicode.pf2
     grub-mkimage -o grubx64.efi -p "(hd0,gpt1)/grub" -O ${grub.grubTarget} part_gpt fat
-    install -D grubx64.efi files/EFI/BOOT/BOOTX64.EFI
+    mcopy -i $out grubx64.efi ::/EFI/BOOT/BOOTX64.EFI
 
-    img=$out
-    truncate -s 15M $img
-    faketime "1970-01-01 00:00:00" mkfs.vfat -i 0x2178694e -n EFI $img
-    (cd files; mcopy -psvm -i $img ./* ::)
-    fsck.vfat -vn $img
+    fsck.vfat -n $out
   '';
 
   installer = runCommand "installer.img" {