{ lib, stdenv, callPackage, clojure, jre, writeText, writeShellScript, toEDN }: { src, name, group, version, deps-edn, clj-deps, src-paths, build-tools-jar, ... }: with lib; let build-tools-deps = toEDN { aliases.build = { extra-deps."'io.github.clojure/tools.build"."local/root" = ''\"${build-tools-jar}\"''; }; }; classpath = clj-deps.makeClasspaths { }; build-deps = callPackage ./deps.nix { }; build-classpath = build-deps.makeClasspaths { }; full-name = "${name}-${version}-standalone.jar"; target = "$TEMP/target"; build-script = writeShellScript "create-uberjar.sh" '' HOME=$TEMP/home mkdir -p $HOME mkdir -p ${target} clojure \ -Scp ${build-classpath}:${classpath}:${build-tools-jar}:. \ -Sdeps "${build-tools-deps}" \ -X:build \ build/lib-uberjar \ :project ${group}/${name} \ :version ${version} \ :src-dirs ${concatStringsSep "," src-paths} \ :target '"${target}"' \ :deps-edn '"${deps-edn}"' [ $? -eq 0 ] || cat /tmp/*.edn ''; pthru = o: builtins.trace o o; in stdenv.mkDerivation { name = full-name; src = src; nativeBuildInputs = [ clojure jre ]; buildInputs = (map (x: x.paths) clj-deps.packages) ++ (map (x: x.paths) build-deps.packages); buildPhase = pthru "${build-script}"; installPhase = '' mv ${target}/${name}-${version}-standalone.jar $out ''; }