troutbot/nix/package.nix
NotAShelf 1bf4bc335c
chore: bundle necessary dependencies via tsup
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Iaf818970d17c911b80d3b5bc634a75896a6a6964
2026-02-01 16:26:34 +03:00

73 lines
1.5 KiB
Nix

{
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";
};
})