#!/usr/bin/env bash searched_file="$1" get_inputs() { flake=$1 name=$2 cat "$flake" | jq -r --arg name "$name" '.nodes|to_entries[]|select(.value.original.path != null and (.value.original.path|test("(../)+" + $name)))|.key' } find flakes -name "flake.lock" | while read flake; do for input in $(get_inputs "$flake" "$searched_file"); do echo "updating $input in $(dirname "$flake")" pushd "$(dirname "$flake")" >/dev/null 2>/dev/null nix flake update --update-input "$input" popd >/dev/null 2>/dev/null done done