#!/usr/bin/env bash set -e # 0. Abhängigkeiten prüfen for cmd in jq curl sed nix; do command -v $cmd >/dev/null 2>&1 || { echo "Fehler: $cmd nicht installiert!"; exit 1; } done # 1. Version aus .fvmrc extrahieren if [ ! -f .fvmrc ]; then echo "Fehler: .fvmrc nicht gefunden!" exit 1 fi FLUTTER_VERSION=$(jq -r .flutter .fvmrc) echo "Gesuchte Flutter Version: $FLUTTER_VERSION" # 2. Commit-Hash und Version aus Devbox-API holen API_URL="https://search.devbox.sh/v2/pkg?name=flutter" RELEASES_JSON=$(curl -s "$API_URL") # Alle Versionen extrahieren und sortieren ALL_VERSIONS=$(echo "$RELEASES_JSON" | jq -r '.releases[].version' | sort -V) # Finde die gewünschte oder nächsthöhere Version FOUND_VERSION=$(echo "$ALL_VERSIONS" | awk -v v="$FLUTTER_VERSION" '$0 >= v { print; exit }') if [ -z "$FOUND_VERSION" ]; then echo "Fehler: Keine passende Flutter-Version gefunden." exit 1 fi if [ "$FOUND_VERSION" != "$FLUTTER_VERSION" ]; then echo "Hinweis: Exakte Version nicht gefunden, benutze stattdessen Version $FOUND_VERSION." fi # Commit-Hash für x86_64-linux extrahieren COMMIT=$(echo "$RELEASES_JSON" | jq -r --arg v "$FOUND_VERSION" '.releases[] | select(.version==$v) | .platforms[] | select(.system=="x86_64-linux") | .commit_hash' | head -n 1) if [ -z "$COMMIT" ] || [ "$COMMIT" == "null" ]; then echo "Fehler: Kein Commit-Hash für Version $FOUND_VERSION und Plattform x86_64-linux gefunden." exit 1 fi echo "Gefundener Commit: $COMMIT (Version: $FOUND_VERSION)" # 3. Die flake.nix patchen (Backup anlegen) sed -i.bak "s|nixpkgs-flutter.url = \"github:NixOS/nixpkgs/[a-f0-9]*\";|nixpkgs-flutter.url = \"github:NixOS/nixpkgs/$COMMIT\";|" flake.nix # 4. Den Flake-Lock aktualisieren nix flake update nixpkgs-flutter # 5. Optional: direnv reload if command -v direnv >/dev/null 2>&1; then direnv reload fi echo "Erfolgreich! Die flake.nix nutzt nun den Commit für Flutter $FLUTTER_VERSION (oder höher)."