anchor.diff:      (_: v: v != null)
       { inherit setupHook configurePhase buildPhase installPhase; };
   
  -  pkg = self: stdenv.mkDerivation (attrs // {
  +  # When using the `beamDeps` argument, it is important that we use
  +  # `rebar3WithPlugins` here even when there are no plugins. The vanilla
  +  # `rebar3` package is an escript archive with bundled dependencies which can
  +  # interfere with those in the app we are trying to build. `rebar3WithPlugins`
  +  # doesn't have this issue since it puts its own deps last on the code path.
  +  rebar3 = rebar3WithPlugins {
  +    plugins = buildPlugins;
  +  };
  +
  +  pkg =
  +    assert beamDeps != [] -> checkouts == null;
  +    self: stdenv.mkDerivation (attrs // {
   
       name = "${name}-${version}";
       inherit version;
   
  -    buildInputs = buildInputs ++ [ erlang rebar3 openssl ];
  -    propagatedBuildInputs = [checkouts];
  +    buildInputs = buildInputs ++ [ erlang rebar3 openssl ] ++ beamDeps;
   
       dontStrip = true;
   
       inherit src;
   
  -    setupHook = writeText "setupHook.sh" ''
  -       addToSearchPath ERL_LIBS "$1/lib/erlang/lib/"
  -    '';
  -
       configurePhase = ''
         runHook preConfigure
  -      ${if checkouts != null then
  -          "cp --no-preserve=all -R ${checkouts}/_checkouts ."
  -        else
  -          ""}
  +      ${lib.optionalString (checkouts != null)
  +      "cp --no-preserve=all -R ${checkouts}/_checkouts ."}
  +      ${# Prevent rebar3 from trying to manage deps
  +      lib.optionalString (beamDeps != [ ]) ''
  +        erl -noshell -eval '
  +          {ok, Terms0} = file:consult("rebar.config"),
  +          Terms = lists:keydelete(deps, 1, Terms0),
  +          ok = file:write_file("rebar.config", [io_lib:format("~tp.~n", [T]) || T <- Terms]),
  +          init:stop(0)
  +        '
  +        rm -f rebar.lock
  +      ''}
         runHook postConfigure
       '';
   
  
positive.code: { stdenv, writeText, erlang, rebar3, openssl,
    lib }:
  
  { name, version
  , src
  , checkouts ? null
  , releaseType
  , buildInputs ? []
  
negative.code: , buildPhase ? null
  , configurePhase ? null
  , meta ? {}
  , ... }@attrs:
  
  with lib;
  