Newer
Older
percord / flake.nix
@Emma [it/its]@Rory& Emma [it/its]@Rory& on 30 Oct 2024 3 KB Run npm update, remove erlpack from package list
{
  description = "Spacebar server, written in Typescript.";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs =
    {
      self,
      nixpkgs,
      flake-utils,
    }:
    flake-utils.lib.eachSystem flake-utils.lib.allSystems (
      system:
      let
        pkgs = import nixpkgs {
          inherit system;
        };
        hashesFile = builtins.fromJSON (builtins.readFile ./hashes.json);
        lib = pkgs.lib;
      in
      rec {
        packages.default = pkgs.buildNpmPackage {
          pname = "spacebar-server-ts";
          name = "spacebar-server-ts";

          meta = with lib; {
            description = "Spacebar server, a FOSS reimplementation of the Discord backend.";
            homepage = "https://github.com/spacebarchat/server";
            license = licenses.agpl3Plus;
            platforms = platforms.all;
            mainProgram = "start-bundle";
          };

          src = ./.;
          nativeBuildInputs = with pkgs; [ python3 ];
          npmDepsHash = hashesFile.npmDepsHash;
          makeCacheWritable = true;
          postPatch = ''
            substituteInPlace package.json --replace 'npx patch-package' '${pkgs.nodePackages.patch-package}/bin/patch-package'
          '';
          installPhase = ''
            runHook preInstall
            set -x
            #remove packages not needed for production, or at least try to...
            npm prune --omit dev --no-save $npmInstallFlags "''${npmInstallFlagsArray[@]}" $npmFlags "''${npmFlagsArray[@]}"
            find node_modules -maxdepth 1 -type d -empty -delete


            #mkdir -p $out/node_modules/
            #cp -r node_modules/* $out/node_modules/
            #cp -r dist/ $out/node_modules/@spacebar
            #for i in dist/**/start.js
            #do
            #  makeWrapper ${pkgs.nodejs-slim}/bin/node $out/bin/start-`dirname ''${i/dist\//}` --prefix NODE_PATH : $out/node_modules --add-flags $out/node_modules/@spacebar`dirname ''${i/dist/}`/start.js
            #done
            #set +x
            #substituteInPlace package.json --replace 'dist/' 'node_modules/@spacebar/'
            #find $out/node_modules/@spacebar/ -type f -name "*.js" | while read srcFile; do
            #  echo Patching imports in ''${srcFile/$out\/node_modules\/@spacebar//}...
            #  substituteInPlace $srcFile --replace 'require("./' 'require(__dirname + "/'
            #  substituteInPlace $srcFile --replace 'require("../' 'require(__dirname + "/../'
            #  substituteInPlace $srcFile --replace ', "assets"' ', "..", "assets"'
            #  #substituteInPlace $srcFile --replace 'require("@spacebar/' 'require("
            #done
            #set -x
            #cp -r assets/ $out/
            #cp package.json $out/
            #rm -v $out/assets/openapi.json
            ##rm -v $out/assets/schemas.json

            mkdir -p $out
            cp -r assets dist node_modules package.json $out/
            for i in dist/**/start.js
            do
              makeWrapper ${pkgs.nodejs-slim}/bin/node $out/bin/start-`dirname ''${i/dist\//}` --prefix NODE_PATH : $out/node_modules --add-flags $out/$i
            done

            #debug utils:
            #cp $out/node_modules/@spacebar/ $out/build_output -r
            set +x
            runHook postInstall
          '';
        };
        devShell = pkgs.mkShell {
          buildInputs = with pkgs; [
            nodejs
            nodePackages.typescript
            nodePackages.ts-node
            nodePackages.patch-package
            nodePackages.prettier
          ];
        };
      }
    );
}