{ stdenv, nasm, qemu, ... }: let bootImg = "boot"; in stdenv.mkDerivation { pname = "bootler"; version = "0.1.0"; src = ../.; buildPhase = '' ${nasm}/bin/nasm asm/boot.asm -o boot.bin ${nasm}/bin/nasm asm/kernel.asm -o kernel.bin dd if=/dev/zero of=${bootImg} bs=512 count=2 dd if=boot.bin of=${bootImg} conv=notrunc dd if=kernel.bin of=${bootImg} bs=512 seek=1 conv=notrunc ''; installPhase = '' mkdir -p $out/bin cp ${bootImg} $out/bin # create emulation binary cat<$out/bin/bootler #!/usr/bin/env bash # create temp dir mkdir -p ./.bootler cp $(echo $out)/bin/${bootImg} ./.bootler/${bootImg} chmod a+w ./.bootler/${bootImg} # run image ${qemu}/bin/qemu-system-x86_64 \ -nographic \ -drive file=./.bootler/${bootImg},format=raw,index=0,media=disk # clean up rm ./.bootler -r EOF chmod +x $out/bin/${bootImg} chmod +x $out/bin/bootler ''; }