{ lib, stdenv, fetchurl, gleam, beamPackages, makeWrapper, src, }: let manifest = builtins.fromTOML (builtins.readFile "${src}/manifest.toml"); packages = map (package: { inherit (package) name version; archive = fetchurl { url = "https://repo.hex.pm/tarballs/${package.name}-${package.version}.tar"; sha256 = lib.toLower package.outer_checksum; }; }) manifest.packages; packageIndex = builtins.toFile "packages.toml" ("[packages]\n" + lib.concatMapStrings (package: "${package.name} = \"${package.version}\"\n") packages + "\n[git]\n"); in stdenv.mkDerivation { pname = "glinter"; inherit (builtins.fromTOML (builtins.readFile "${src}/gleam.toml")) version; inherit src; nativeBuildInputs = [gleam beamPackages.erlang makeWrapper]; buildPhase = '' runHook preBuild mkdir -p build/packages ${lib.concatMapStringsSep "\n" (package: '' mkdir -p build/packages/${package.name} "$TMPDIR/hex-${package.name}" tar -xf ${package.archive} -C "$TMPDIR/hex-${package.name}" tar -xzf "$TMPDIR/hex-${package.name}/contents.tar.gz" -C build/packages/${package.name} '') packages} cp ${packageIndex} build/packages/packages.toml chmod -R u+w build/packages gleam export erlang-shipment runHook postBuild ''; installPhase = '' runHook preInstall mkdir -p $out/lib/glinter $out/bin cp -R build/erlang-shipment/. $out/lib/glinter/ makeWrapper $out/lib/glinter/entrypoint.sh $out/bin/glinter \ --add-flags run \ --prefix PATH : ${lib.makeBinPath [beamPackages.erlang]} runHook postInstall ''; meta = { description = "Gleam linter for development checks"; license = lib.licenses.mit; mainProgram = "glinter"; platforms = lib.platforms.unix; }; }