{ compiler
, name
, pkgs
, src
}:
let
  # This builds a static PostgREST executable based on pkgsStatic.
  inherit (pkgs) pkgsStatic;
  inherit (pkgsStatic.haskell) lib;

  packagesStatic = pkgsStatic.haskell.packages.native-bignum."${compiler}";

  makeExecutableStatic = drv: pkgs.lib.pipe drv [
    lib.compose.justStaticExecutables

    # To successfully compile a redistributable, fully static executable we need to:
    # 1. avoid any references to /nix/store to prevent blowing up the closure size.
    (drv: drv.overrideAttrs {
      allowedReferences = [
        pkgsStatic.openssl.etc
      ];
    })

    # 2. be able to run the executable.
    (drv: drv.overrideAttrs {
      passthru.tests.version = pkgsStatic.testers.testVersion {
        package = drv;
      };
    })
  ];

in
{
  inherit packagesStatic;

  postgrestStatic = makeExecutableStatic (packagesStatic.callCabal2nix name src { });
}
