{ stdenvNoCC, lib, elixir, hex, rebar, rebar3, cacert, git, }@inputs: { pname, version, hash ? "", sha256 ? "", src, mixEnv ? "prod", debug ? false, meta ? { }, patches ? [ ], elixir ? inputs.elixir, hex ? inputs.hex.override { inherit elixir; }, ... }@attrs: let hash_ = if hash != "" then { outputHashAlgo = null; outputHash = hash; } else if sha256 != "" then { outputHashAlgo = "sha256"; outputHash = sha256; } else { outputHashAlgo = "sha256"; outputHash = lib.fakeSha256; }; in stdenvNoCC.mkDerivation ( attrs // { nativeBuildInputs = [ elixir hex cacert git ]; MIX_ENV = mixEnv; MIX_DEBUG = if debug then 1 else 0; DEBUG = if debug then 1 else 0; # for rebar3 # the api with `mix local.rebar rebar path` makes a copy of the binary MIX_REBAR = "${rebar}/bin/rebar"; MIX_REBAR3 = "${rebar3}/bin/rebar3"; # there is a persistent download failure with absinthe 1.6.3 # those defaults reduce the failure rate HEX_HTTP_CONCURRENCY = 1; HEX_HTTP_TIMEOUT = 120; configurePhase = attrs.configurePhase or '' runHook preConfigure export HEX_HOME="$TEMPDIR/.hex"; export MIX_HOME="$TEMPDIR/.mix"; export MIX_DEPS_PATH="$TEMPDIR/deps"; # Rebar export REBAR_GLOBAL_CONFIG_DIR="$TMPDIR/rebar3" export REBAR_CACHE_DIR="$TMPDIR/rebar3.cache" runHook postConfigure ''; inherit patches; dontBuild = true; installPhase = attrs.installPhase or '' runHook preInstall mix deps.get ''${MIX_ENV:+--only $MIX_ENV} find "$TEMPDIR/deps" -path '*/.git/*' -a ! -name HEAD -exec rm -rf {} + cp -r --no-preserve=mode,ownership,timestamps $TEMPDIR/deps $out runHook postInstall ''; outputHashMode = "recursive"; impureEnvVars = lib.fetchers.proxyImpureEnvVars; inherit meta; } // hash_ )