{ lib, fetchFromGitHub, nodejs_18, buildNpmPackage, nodePackages, python3, gcc, gnumake, }: let in buildNpmPackage (finalAttrs: rec { pname = "prometheus-actual-exporter"; version = "1.1.5"; src = fetchFromGitHub { owner = "sakowicz"; repo = "actual-budget-prometheus-exporter"; tag = version; hash = "sha256-DAmWr1HngxAjhOJW9OnMfDqpxBcZT+Tpew/w/YYJIYU="; }; patches = [ ./tsconfig.patch ]; npmDepsHash = "sha256-N8xqRYFelolNGTEhG22M7KJ7B5U/uW7o+/XfLF8rHMg="; nativeBuildInputs = [ nodejs_18 nodePackages.typescript python3 nodePackages.node-gyp gcc gnumake ]; postPatch = '' echo "Removing better-sqlite3 install script before npm install" sed -i '/"install"/d' node_modules/better-sqlite3/package.json || true sed -i '/"install"/d' package.json || true ''; preBuild = '' echo "Disabling prebuilt install script from better-sqlite3" find node_modules/better-sqlite3 -name package.json -exec sed -i '/"install"/d' {} + rm -f node_modules/better-sqlite3/build/Release/better_sqlite3.node || true ''; buildPhase = '' # export npm_config_build_from_source=true # export npm_config_unsafe_perm=true # export BINARY_SITE=none # export PATH=${nodePackages.node-gyp}/bin:$PATH # export npm_config_node_gyp=${nodePackages.node-gyp}/bin/node-gyp # npm rebuild better-sqlite3 --build-from-source --verbose npm run build ''; installPhase = '' mkdir -p $out/{bin,lib} cp -r . $out/lib/prometheus-actual-exporter makeWrapper ${lib.getExe nodejs_18} $out/bin/prometheus-actual-exporter \ --add-flags "$out/lib/prometheus-actual-exporter/dist/app.js" ''; postInstall = '' echo "Removing prebuilt .node and rebuilding better-sqlite3" export npm_config_build_from_source=true export npm_config_unsafe_perm=true export BINARY_SITE=none export PATH=${nodePackages.node-gyp}/bin:$PATH export npm_config_node_gyp=${nodePackages.node-gyp}/bin/node-gyp sed -i '/"install"/d' node_modules/better-sqlite3/package.json rm -f node_modules/better-sqlite3/build/Release/better_sqlite3.node || true npm rebuild better-sqlite3 --build-from-source --verbose ''; meta = { description = "Prometheus exporter for Actual Budget"; homepage = "https://github.com/sakowicz/actual-budget-prometheus-exporter"; mainProgram = "prometheus-actual-exporter"; }; })