initramfs.nix (1473B)
1 { 2 config 3 , pkgs 4 , lib 5 , ... 6 }: 7 let 8 inherit (lib) mkEnableOption mkOption mkIf types; 9 inherit (pkgs) runCommand callPackage writeText; 10 in 11 { 12 options = { 13 boot.initramfs = { 14 enable = mkEnableOption "initramfs"; 15 }; 16 system.outputs.initramfs = mkOption { 17 type = types.package; 18 internal = true; 19 description = '' 20 Initramfs image capable of mounting the jffs2 root 21 filesystem 22 ''; 23 }; 24 }; 25 config = mkIf config.boot.initramfs.enable { 26 kernel.config = { 27 BLK_DEV_INITRD = "y"; 28 INITRAMFS_SOURCE = builtins.toJSON "${config.system.outputs.initramfs}"; 29 # INITRAMFS_COMPRESSION_LZO = "y"; 30 }; 31 32 system.outputs = { 33 initramfs = 34 let inherit (pkgs.pkgsBuildBuild) gen_init_cpio; 35 in runCommand "initramfs.cpio" {} '' 36 cat << SPECIALS | ${gen_init_cpio}/bin/gen_init_cpio /dev/stdin > $out 37 dir /proc 0755 0 0 38 dir /dev 0755 0 0 39 nod /dev/console 0600 0 0 c 5 1 40 nod /dev/mtdblock0 0600 0 0 b 31 0 41 nod /dev/mtdblock1 0600 0 0 b 31 1 42 nod /dev/mtdblock2 0600 0 0 b 31 2 43 nod /dev/mtdblock3 0600 0 0 b 31 3 44 nod /dev/mtdblock4 0600 0 0 b 31 4 45 nod /dev/mtdblock5 0600 0 0 b 31 5 46 dir /target 0755 0 0 47 dir /target/persist 0755 0 0 48 dir /target/nix 0755 0 0 49 file /init ${pkgs.preinit}/bin/preinit 0755 0 0 50 SPECIALS 51 ''; 52 }; 53 }; 54 }