nixos/sd-image: add preBuildCommands option

Allow running shell commands after the root filesystem image has been
prepared but before the final SD image is assembled. This is useful for
adjusting the rootfs, such as resizing it to a fixed size or injecting
additional files, without having to override the entire build
derivation.

Signed-off-by: Tanel Dettenborn <tanel.dettenborn@tii.ae>
This commit is contained in:
Tanel Dettenborn 2026-03-25 10:17:09 +01:00 committed by Jörg Thalheim
commit 6fec0974dc
No known key found for this signature in database

View file

@ -179,6 +179,33 @@ in
'';
};
preBuildCommands = mkOption {
type = types.lines;
example = literalExpression ''
'''
if [ ! -w "$root_fs" ]; then
cp --no-preserve=mode "$root_fs" ./root-fs.img
root_fs=./root-fs.img
fi
resize2fs $root_fs 15G
'''
'';
default = "";
description = ''
Shell commands to run after the root filesystem image has been
prepared, but before the final SD image is assembled.
The path to the root filesystem image is available in the
{var}`root_fs` shell variable. This hook can be used to modify
the rootfs, for example to resize it or inject additional files.
Note that when {option}`sdImage.compressImage` is disabled,
{var}`root_fs` points to a read-only store path. To modify it,
first copy it to a writable location and update {var}`root_fs`
to point to the copy.
'';
};
postBuildCommands = mkOption {
type = types.lines;
example = literalExpression "'' dd if=\${pkgs.myBootLoader}/SPL of=$img bs=1024 seek=1 conv=notrunc ''";
@ -289,6 +316,8 @@ in
zstd -d --no-progress "${config.sdImage.rootFilesystemImage}" -o $root_fs
''}
${config.sdImage.preBuildCommands}
# Gap in front of the first partition, in MiB
gap=${toString config.sdImage.firmwarePartitionOffset}