3
0
Fork 0
flake-template/tmp/default.do

43 lines
1.1 KiB
Plaintext

#!/bin/sh
# This do script creates an indirect root to an input flake
exec >&2
pfx=${2%.rw}
redo-ifchange ../flake.nix ../flake.lock || true
resolve_flake() {
STORE_PATH=$(nix flake archive .. --dry-run --json | jq -r .inputs.\"$pfx\".path)
# Do this after 'info' to avoid unnecessary network activity. nix flake
# archive may try to download a flake although the store path is available.
if [ ! -d "$STORE_PATH" ]; then
nix flake archive --inputs-from .. "$pfx"
fi
}
case $2 in
# Resolves cleanup targets by their softlinks
clean)
redo-always || true
find . -type l -print -exec realpath -P --relative-base="$PWD" {} \+ |
while read p; do
if [ "$p" = "${p#/}" ]; then
rm -rf -- "$p"
fi
done
;;
*.rw)
resolve_flake "$@"
rm -rf -- ".$2"
cp --reflink=auto -r --no-preserve=mode "$STORE_PATH" ".$2"
ln -sf ".$2" "$3"
;;
*)
resolve_flake "$@"
nix-store -r "$STORE_PATH" --indirect --add-root "$2"
[ "$2" = "$3" ] || mv "$2" "$3"
;;
esac