diff options
| author | andromeda <andromeda@lenovo> | 2026-03-06 20:33:51 +0100 |
|---|---|---|
| committer | andromeda <andromeda@lenovo> | 2026-03-06 20:33:51 +0100 |
| commit | 9c65697dd8119ec9cee13f57f870b07e305d27ec (patch) | |
| tree | 27b61bd7a27df6e25db8b21dc0ee3daed01d79fb /bootler/package.nix | |
| parent | fdf5bb9daf8574b7f993e2e38e400c35aedc3b96 (diff) | |
bunch of stuff idek
Diffstat (limited to 'bootler/package.nix')
| -rw-r--r-- | bootler/package.nix | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/bootler/package.nix b/bootler/package.nix new file mode 100644 index 0000000..c4faf29 --- /dev/null +++ b/bootler/package.nix @@ -0,0 +1,48 @@ +{ + 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 dummy.bin + + dd if=/dev/zero of=${bootImg} bs=512 count=2880 + dd if=boot.bin of=${bootImg} conv=notrunc + dd if=dummy.bin of=${bootImg} bs=512 seek=1 conv=notrunc + ''; + installPhase = '' + mkdir -p $out/bin + cp boot.bin $out/bin + cp ${bootImg} $out/bin + + # create emulation binary + cat<<EOF>$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 + ''; + } |
