{ buildToolbox
, checkedShellScript
, coreutils
, curl
, jq
, nix
}:
# Utility script for pinning the latest stable version of Nixpkgs.

# Instead of pinning Nixpkgs based on the huge Git repository, we reference a
# specific tarball that only contains the source of the revision that we want
# to pin.
let
  name =
    "postgrest-nixpkgs-upgrade";

  refUrl =
    "https://api.github.com/repos/nixos/nixpkgs/git/matching-refs/heads/nixpkgs-";

  githubV3Header =
    "Accept: application/vnd.github.v3+json";

  tarballUrlBase =
    "https://github.com/nixos/nixpkgs/archive/";

  upgrade =
    checkedShellScript
      {
        inherit name;
        docs = "Pin the newest stable version of Nixpkgs.";
        workingDir = "/";
      }
      ''
        # The list of refs is sorted. The first result will be nixpkgs-unstable, the second the latest stable branch.
        commitHash="$(${curl}/bin/curl "${refUrl}" -H "${githubV3Header}" | ${jq}/bin/jq -r 'sort_by(.ref) | reverse | .[1].object.sha')"
        tarballUrl="${tarballUrlBase}$commitHash.tar.gz"
        tarballHash="$(${nix}/bin/nix-prefetch-url --unpack "$tarballUrl")"
        currentDate="$(${coreutils}/bin/date --iso)"

        cat > nix/nixpkgs-version.nix << EOF
        # Pinned version of Nixpkgs, generated with ${name}.
        {
          owner = "NixOS";
          repo = "nixpkgs";
          date = "$currentDate";
          rev = "$commitHash";
          tarballHash = "$tarballHash";
        }
        EOF
      '';

in
buildToolbox
{
  name = "postgrest-nixpkgs";
  tools = { inherit upgrade; };
}
