# Based off of https://github.com/spacebarchat/server/blob/master/flake.nix { description = "Final assignment for NodeJS"; 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; config.allowUnfree = true; }; hashesFile = builtins.fromJSON (builtins.readFile ./hashes.json); lib = pkgs.lib; in { packages = { default = pkgs.buildNpmPackage { pname = "nodejs-ti-a-final-assignment-TheArcaneBrony"; name = "nodejs-ti-a-final-assignment-TheArcaneBrony"; meta = with lib; { description = "Final assignment for NodeJS"; homepage = "https://github.com/VivesMDima/nodejs-ti-a-final-assignment-TheArcaneBrony"; license = licenses.agpl3Plus; platforms = platforms.all; mainProgram = "start"; }; src = ./.; nativeBuildInputs = with pkgs; [ python3 ]; npmDepsHash = hashesFile.npmDepsHash; makeCacheWritable = true; dontNpmBuild = 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 cp -r src node_modules package.json $out/ makeWrapper ${pkgs.nodejs}/bin/node $out/bin/start --prefix NODE_PATH : $out/node_modules --add-flags $out set +x runHook postInstall ''; }; update-nix = pkgs.writeShellApplication { name = "update-nix"; runtimeInputs = with pkgs; [ prefetch-npm-deps nix jq ]; text = '' #nix flake update --extra-experimental-features 'nix-command flakes' DEPS_HASH=$(prefetch-npm-deps package-lock.json) TMPFILE=$(mktemp) jq '.npmDepsHash = "'"$DEPS_HASH"'"' hashes.json > "$TMPFILE" mv -- "$TMPFILE" hashes.json ''; }; }; devShell = pkgs.mkShell { buildInputs = with pkgs; [ mongodb-compass nodejs nodePackages.prettier ]; }; } ); }