summary refs log tree commit diff
path: root/flake.nix
blob: 4c5e915f534e95774a26a027e724e0fdffed1622 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# 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;
        };
        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;
            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 assets dist node_modules package.json $out/
              makeWrapper ${pkgs.nodejs}/bin/node $out/bin/start --prefix NODE_PATH : $out/node_modules --add-flags $out/$i

              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; [
            nodejs
            nodePackages.typescript
            nodePackages.ts-node
            nodePackages.patch-package
            nodePackages.prettier
          ];
        };
      }
    );
}