{ lib, stdenv, nodejs, pnpmConfigHook, fetchPnpmDeps, pnpm, makeBinaryWrapper, }: stdenv.mkDerivation (finalAttrs: { pname = "troutbot"; version = "0-unstable-2026-02-01"; src = lib.fileset.toSource { root = ../.; fileset = lib.fileset.unions [ ../src ../config.example.ts ../package.json ../pnpm-lock.yaml ../tsconfig.json ../tsup.config.ts ]; }; strictDeps = true; nativeBuildInputs = [ nodejs # in case scripts are run outside of a pnpm call pnpmConfigHook pnpm # at least required by pnpmConfigHook, if not other (custom) phases makeBinaryWrapper ]; pnpmDeps = fetchPnpmDeps { inherit (finalAttrs) pname version src; fetcherVersion = 3; hash = "sha256-y8LV1D+EgGcZ79lmxS20dqYBPEfk4atma+RWf7pJI30="; }; buildPhase = '' runHook preBuild pnpm run build --outDir dist runHook postBuild ''; installPhase = '' runHook preInstall mkdir -p $out/{bin,share} # Copy transpiled result cp -rv dist/* $out/share # Copy the example config install -Dm755 config.example.ts $out/share makeWrapper ${lib.getExe nodejs} $out/bin/troutbot \ --set-default NODE_ENV production \ --add-flags "$out/share/index.js" runHook postInstall ''; meta = { description = "The ultimate trout population helper"; license = lib.licenses.eupl12; maintainers = with lib.maintainers; [NotAShelf]; mainProgram = "troutbot"; }; })