#!/usr/bin/env sh die() { printf "\033[31;1mError: \033[0m%s\n" "$1" exit 1 } cd "$(dirname "$0")" || die "Bug: run with the wrong first arg: '$0'!" cd ./by-name || die "(BUG): The directory './by-name' does not exist?" # First check if all the update scripts conform to the standard files_with_update="$(mktemp)" trap 'rm "$files_with_update"' EXIT fd '^update.sh$' . --type file --extension sh --max-depth 3 | while read -r file; do grep -q "nix flake update" "$file" && echo "$file" >>"$files_with_update" done if [ "$(wc -l <"$files_with_update")" != 0 ]; then die "Some packages seem to try to update their flake with 'nix flake update'. This is redundant. These Packages are: $(echo && cat "$files_with_update")" fi # Than actually perform the update fd . --type directory --max-depth 1 | while read -r shard; do cd "$shard" || die "(BUG): Shard '$shard' does not exist?" fd . --type directory --max-depth 1 | while read -r package; do cd "$package" || die "(BUG): Package '$package' does not exist?" if [ -x update.sh ]; then printf " \033[34;1m> \033[0m\033[34;1m%s\033[0m\n" "Running '${shard}${package}update.sh' .." [ -f flake.nix ] && nix flake update direnv allow eval "$(direnv export bash 2>/dev/null)" ./update.sh "$@" fi cd - >/dev/null || die "Bug: Last dir does not exist" done cd - >/dev/null || die "Bug: Last dir does not exist" done # vim: ft=sh