diff --git a/flake.nix b/flake.nix index 3e8b340..f514cc6 100644 --- a/flake.nix +++ b/flake.nix @@ -31,13 +31,15 @@ packageLock = builtins.fromJSON(builtins.readFile (src + "/package-lock.json")); - deps = builtins.attrValues (removeAttrs packageLock.packages [ "" ]) - ++ builtins.attrValues (removeAttrs (packageLock.dependencies or {} ) [ "" ]) - ; - tarballs = map (p: pkgs.fetchurl { url = p.resolved; hash = p.integrity; }) deps; + deps = builtins.attrValues (removeAttrs packageLock.packages [ "" ]); + depTarballs = map (p: pkgs.fetchurl { url = p.resolved; hash = p.integrity; }) deps; + nodeTarball = pkgs.fetchurl { + url = "https://nodejs.org/download/release/v20.2.0/node-v20.2.0-headers.tar.gz"; + hash = "sha256-GxkJoXnN/35mTQXnivQAa942T07t5hTCr4C6j0C3a/k="; + }; tarballsFile = pkgs.writeTextFile { name = "tarballs"; - text = builtins.concatStringsSep "\n" tarballs; + text = (builtins.concatStringsSep "\n" depTarballs) + "\n"; }; tempestdev_modules = pkgs.stdenv.mkDerivation { @@ -45,23 +47,33 @@ name = "tempestdevnode_modules"; - buildInputs = [ nodejs ]; + nativeBuildInputs = [ + nodejs + pkgs.nodePackages.node-gyp + pkgs.vips + pkgs.pkg-config + pkgs.python3 + ]; buildPhase = '' export HOME=$PWD/.home export npm_config_cache=$PWD/.npm + echo "Caching Node headers" + ${pkgs.nodePackages.node-gyp}/bin/node-gyp install v20.2.0 --tarball=${nodeTarball} + + echo "Caching NPM dependencies" while read package do - echo "caching $(echo $package | sed 's/\/nix\/store\/[^-]*-//')" npm cache add "$package" done <${tarballsFile} - ${nodejs}/bin/npm --cache-min 99999999 ci --no-registry + ${nodejs}/bin/npm --offline ci --no-registry ''; installPhase = '' mkdir $out + sed --in-place 's|/usr/bin/env node|${nodejs}/bin/node|' ./node_modules/next/dist/bin/next mv node_modules $out/node_modules ''; };