nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at devShellTools-shell 76 lines 2.2 kB view raw
1{ 2 lib, 3 runCommand, 4 jq, 5 yq, 6}: 7 8{ 9 pname ? null, 10 11 # A list of dependency package names. 12 dependencies, 13 14 # An attribute set of package names to sources. 15 dependencySources, 16}: 17 18let 19 packages = lib.genAttrs dependencies (dependency: rec { 20 src = dependencySources.${dependency}; 21 inherit (src) packageRoot; 22 }); 23in 24(runCommand "${lib.optionalString (pname != null) "${pname}-"}package-config.json" { 25 inherit packages; 26 27 nativeBuildInputs = [ 28 jq 29 yq 30 ]; 31 32 __structuredAttrs = true; 33}) 34 '' 35 declare -A packageSources 36 declare -A packageRoots 37 while IFS=',' read -r name src packageRoot; do 38 packageSources["$name"]="$src" 39 packageRoots["$name"]="$packageRoot" 40 done < <(jq -r '.packages | to_entries | map("\(.key),\(.value.src),\(.value.packageRoot)") | .[]' "$NIX_ATTRS_JSON_FILE") 41 42 for package in "''${!packageSources[@]}"; do 43 pubspec="$(realpath --logical "''${packageSources["$package"]}/''${packageRoots["$package"]}/pubspec.yaml")" 44 45 if [ ! -e "$pubspec" ]; then 46 echo >&2 "The package sources for $package are missing. Is the following path inside the source derivation?" 47 echo >&2 "Source path: $pubspec" 48 exit 1 49 fi 50 51 languageConstraint="$(yq -r .environment.sdk "$pubspec")" 52 if [[ "$languageConstraint" =~ ^[[:space:]]*(\^|>=|>)?[[:space:]]*([[:digit:]]+\.[[:digit:]]+)\.[[:digit:]]+.*$ ]]; then 53 languageVersionJson="\"''${BASH_REMATCH[2]}\"" 54 elif [ "$languageConstraint" = 'any' ]; then 55 languageVersionJson='null' 56 else 57 # https://github.com/dart-lang/pub/blob/68dc2f547d0a264955c1fa551fa0a0e158046494/lib/src/language_version.dart#L106C35-L106C35 58 languageVersionJson='"2.7"' 59 fi 60 61 jq --null-input \ 62 --arg name "$package" \ 63 --arg path "''${packageSources["$package"]}/''${packageRoots["$package"]}" \ 64 --argjson languageVersion "$languageVersionJson" \ 65 '{ 66 name: $name, 67 rootUri: "file://\($path)", 68 packageUri: "lib/", 69 languageVersion: $languageVersion, 70 }' 71 done | jq > "$out" --slurp '{ 72 configVersion: 2, 73 generator: "nixpkgs", 74 packages: ., 75 }' 76 ''