{ buildNpmPackage , mkCljBin , nodejs , importNpmLock , stdenv , clojure , clj-builder , mk-deps-cache , breakpointHook , makeWrapper , lib }: stdenv.mkDerivation (finalAttrs: { name = "net.deertopia/doerg"; version = "0.1.0"; src = ./.; nativeBuildInputs = [ # importNpmLock.npmConfigHook clojure clj-builder breakpointHook makeWrapper ]; buildInputs = [ nodejs ]; npmDeps = importNpmLock.buildNodeModules { npmRoot = finalAttrs.src; inherit nodejs; }; depsCache = mk-deps-cache { lockfile = finalAttrs.src + "/deps-lock.json"; }; buildPhase = '' runHook preBuild # Node dependencies. ln -s $npmDeps/node_modules ./node_modules mv package.json package.json.orig mv package-lock.json package-lock.json.orig cp $npmDeps/{package,package-lock}.json . # Clojure dependencies. export HOME="$depsCache" export JAVA_TOOL_OPTIONS="-Duser.home=$depsCache" export CLJ_CONFIG="$HOME/.clojure" export CLJ_CACHE="$TMP/cp_cache" export GITLIBS="$HOME/.gitlibs" clj-builder --patch-git-sha $PWD ./node_modules/.bin/shadow-cljs release app runHook postBuild ''; installPhase = '' runHook preInstall mkdir -p $out/bin $out/var cp -r build/* $out/var # chmod +x $out/bin/doerg makeWrapper ${lib.getExe nodejs} $out/bin/doerg \ --add-flags $out/var/doerg/main.js \ --prefix NODE_PATH : $npmDeps/node_modules runHook postInstall ''; })