Files
nix-config/modules/nixos/hardware/raspberry-pi/generational/install-device-tree.sh
mjallen18 70002a19e2 hmm
2026-04-07 18:39:42 -05:00

77 lines
1.7 KiB
Bash
Executable File

#! @bash@/bin/sh -e
# shellcheck disable=SC3030,SC3043,SC3044,SC3054
shopt -s nullglob
export PATH=/empty:@path@
usage() {
echo "usage: $0 -c <path-to-configuration> [-d <destination-dir>] [-r]" >&2
exit 1
}
generationPath= # Path to nixos configuration/generation
target=/boot/firmware # Device tree files target directory
while getopts "c:d:r" opt; do
case "$opt" in
c) generationPath="$OPTARG" ;;
d) target="$OPTARG" ;;
r) useVendorDeviceTree=1 ;;
\?) usage ;;
esac
done
# Copy a file from the Nix store to $target.
declare -A filesCopied
copyForced() {
local src="$1"
local dst="$2"
local dstTmp="$dst.tmp.$$"
cp "$src" "$dstTmp"
mv "$dstTmp" "$dst"
}
echo "$0: $@"
echo -n "installing device tree files: "
# Device Tree
if [ -n "$useVendorDeviceTree" ]; then
echo -n "vendor firmware "
dtb_path=@firmware@/share/raspberrypi/boot
else
echo -n "generation's kernel's "
dtb_path=$(readlink -f "$generationPath/dtbs")
fi
echo "$dtb_path"
# firmware package has dtbs in its root,
# dtbs built with kernel are in broadcom/
DTBS=("$dtb_path"/*.dtb "$dtb_path"/broadcom/*.dtb)
echo "all dtbs: $DTBS"
for dtb in "${DTBS[@]}"; do
dst="$target/$(basename "$dtb")"
echo "$dtb"
copyForced "$dtb" "$dst"
filesCopied[$dst]=1
done
SRC_OVERLAYS=("$dtb_path/overlays"/*)
mkdir -p "$target/overlays"
for ovr in "${SRC_OVERLAYS[@]}"; do
dst="$target/overlays/$(basename "$ovr")"
copyForced "$ovr" "$dst"
filesCopied[$dst]=1
done
# remove obsolete device tree files
for fn in $target/*.dtb $target/overlays/*; do
if ! test "${filesCopied[$fn]}" = 1; then
rm -vf -- "$fn"
fi
done