65 lines
1.5 KiB
Bash
65 lines
1.5 KiB
Bash
SYSTEM="x86_64-linux"
|
|
IGNORE_PACKAGES=(
|
|
"pyman"
|
|
"synapse_change_display_name"
|
|
)
|
|
|
|
error() {
|
|
echo "Error: $1" >&2
|
|
exit 1
|
|
}
|
|
|
|
if [[ "$#" -gt 0 ]]; then
|
|
error "This script does not accept arguments."
|
|
fi
|
|
|
|
TEMP_PACKAGE_LIST="/tmp/nix_flake_packages.$$"
|
|
|
|
nix eval .#packages."$SYSTEM" --apply 'pkgs: builtins.attrNames pkgs' --json > "$TEMP_PACKAGE_LIST" 2>/dev/null || \
|
|
error "Could not determine flake package attributes."
|
|
|
|
PACKAGES=$(jq -r '.[]' "$TEMP_PACKAGE_LIST")
|
|
|
|
if [ -z "$PACKAGES" ]; then
|
|
echo "No packages found in the flake outputs. Exiting."
|
|
rm -f "$TEMP_PACKAGE_LIST"
|
|
exit 0
|
|
fi
|
|
|
|
IGNORE_PATTERNS=$(printf "%s\n" "${IGNORE_PACKAGES[@]}")
|
|
PACKAGES=$(echo "$PACKAGES" | grep -v -F -f <(echo "$IGNORE_PATTERNS"))
|
|
|
|
echo "Found the following packages to consider for update:"
|
|
echo "$PACKAGES"
|
|
|
|
UPDATED_COUNT=0
|
|
FAILED_UPDATES=()
|
|
for PACKAGE_NAME in $PACKAGES; do
|
|
echo "Attempting to update package: $PACKAGE_NAME"
|
|
|
|
if nix-update "$PACKAGE_NAME" --flake --format; then
|
|
echo "Successfully updated $PACKAGE_NAME."
|
|
UPDATED_COUNT=$((UPDATED_COUNT + 1))
|
|
else
|
|
echo "Failed to update $PACKAGE_NAME." >&2
|
|
FAILED_UPDATES+=("$PACKAGE_NAME")
|
|
fi
|
|
done
|
|
|
|
if [ -f "$TEMP_PACKAGE_LIST" ]; then
|
|
rm "$TEMP_PACKAGE_LIST"
|
|
fi
|
|
|
|
echo
|
|
echo "Summary:"
|
|
echo "Packages scanned: $(echo "$PACKAGES" | wc -l)"
|
|
echo "Packages updated: $UPDATED_COUNT"
|
|
|
|
if [ ${#FAILED_UPDATES[@]} -gt 0 ]; then
|
|
echo "Packages that failed to update:" >&2
|
|
echo "${FAILED_UPDATES[@]}"
|
|
exit 1
|
|
else
|
|
echo "All packages processed successfully."
|
|
exit 0
|
|
fi
|