|
1 | 1 | {
|
2 |
| - description = "Your project description"; |
| 2 | + description = "Node.js development environment with NVM and PNPM"; |
3 | 3 |
|
4 | 4 | inputs = {
|
5 |
| - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; |
6 |
| - pnpm2nix.url = "github:nzbr/pnpm2nix-nzbr"; |
| 5 | + nixpkgs.url = "github:nixos/nixpkgs"; |
7 | 6 | flake-utils.url = "github:numtide/flake-utils";
|
8 | 7 | };
|
9 | 8 |
|
10 | 9 | outputs = {
|
11 | 10 | self,
|
12 | 11 | nixpkgs,
|
13 |
| - pnpm2nix, |
14 | 12 | flake-utils,
|
15 | 13 | }:
|
16 |
| - flake-utils.lib.eachDefaultSystem ( |
17 |
| - system: let |
18 |
| - pkgs = nixpkgs.legacyPackages.${system}; |
19 |
| - pnpm2nix-lib = pnpm2nix.packages.${system}; |
20 |
| - in { |
21 |
| - packages.default = pnpm2nix-lib.mkPnpmPackage { |
22 |
| - src = ./.; |
23 |
| - |
24 |
| - # Install dependencies in source directory for workspace support |
25 |
| - installInPlace = true; |
26 |
| - |
27 |
| - # Run recursive build across all workspace packages |
28 |
| - script = "-r build"; |
29 |
| - |
30 |
| - # Copy all build outputs |
31 |
| - distDir = "."; |
32 |
| - |
33 |
| - buildPhase = '' |
34 |
| - export HOME=$(mktemp -d) |
35 |
| - pnpm install --frozen-lockfile |
36 |
| - pnpm -r build |
37 |
| - ''; |
38 |
| - |
39 |
| - installPhase = '' |
40 |
| - mkdir -p $out |
41 |
| - cp -r . $out/ |
42 |
| - ''; |
43 |
| - }; |
44 |
| - |
45 |
| - devShells.default = pkgs.mkShell { |
46 |
| - packages = with pkgs; [ |
47 |
| - nodePackages.pnpm |
48 |
| - cairo |
49 |
| - pango |
50 |
| - libpng |
51 |
| - ]; |
52 |
| - |
53 |
| - shellHook = '' |
54 |
| - export PATH="$PWD/node_modules/.bin:$PATH" |
55 |
| - export PKG_CONFIG_PATH="${pkgs.cairo}/lib/pkgconfig:${pkgs.pango}/lib/pkgconfig:${pkgs.libpng}/lib/pkgconfig:$PKG_CONFIG_PATH" |
56 |
| -
|
57 |
| - echo "π€ Eliza development environment loaded π" |
58 |
| - echo "------------------------------------------" |
59 |
| - echo "Using:" |
60 |
| - echo " - Node.js $(node --version)" |
61 |
| - echo " - pnpm $(pnpm --version)" |
62 |
| -
|
63 |
| - echo """ |
64 |
| - ποΈ Quickstart Guide: |
65 |
| - ------------------------ |
66 |
| - ββ> 1. pnpm i (Install dependencies) |
67 |
| - β 2. pnpm build (Build project) |
68 |
| - ββ 3. pnpm clean (Clear Artifacts, for a fresh start) |
69 |
| - 4. pnpm test (Run tests) |
70 |
| -
|
71 |
| - For more commands, run: pnpm --help |
72 |
| - ------------------------ |
73 |
| - """ |
74 |
| - ''; |
75 |
| - }; |
76 |
| - } |
77 |
| - ); |
| 14 | + flake-utils.lib.eachDefaultSystem (system: let |
| 15 | + pkgs = nixpkgs.legacyPackages.${system}; |
| 16 | + fallbackNodeVersion = "23.3.0"; |
| 17 | + fallbackPnpmVersion = "9.14.4"; |
| 18 | + |
| 19 | + # Read and parse package.json |
| 20 | + packageJson = let |
| 21 | + path = ./package.json; |
| 22 | + in |
| 23 | + if builtins.pathExists path |
| 24 | + then builtins.fromJSON (builtins.readFile path) |
| 25 | + else { |
| 26 | + engines = {node = fallbackNodeVersion;}; |
| 27 | + packageManager = "pnpm@${fallbackPnpmVersion}"; |
| 28 | + }; # Default if no package.json |
| 29 | + |
| 30 | + # Extract Node.js version from engines field |
| 31 | + nodeVersion = let |
| 32 | + engineVersion = packageJson.engines.node or fallbackNodeVersion; |
| 33 | + cleanVersion = builtins.replaceStrings ["^" ">" "=" "~" " "] ["" "" "" "" ""] engineVersion; |
| 34 | + in |
| 35 | + cleanVersion; |
| 36 | + |
| 37 | + # Extract PNPM version from packageManager field |
| 38 | + # Handles format: "pnpm@x.y.z+sha512..." or "pnpm@x.y.z" |
| 39 | + pnpmVersion = let |
| 40 | + packageManager = packageJson.packageManager or "pnpm@${fallbackPnpmVersion}"; |
| 41 | + # First split on '+' to remove SHA, then extract version |
| 42 | + withoutSha = builtins.head (builtins.split "[+]" packageManager); |
| 43 | + versionMatch = builtins.match "pnpm@([0-9]+[.][0-9]+[.][0-9]+).*" withoutSha; |
| 44 | + in |
| 45 | + if versionMatch == null |
| 46 | + then fallbackPnpmVersion |
| 47 | + else builtins.head versionMatch; |
| 48 | + in { |
| 49 | + devShell = pkgs.mkShell { |
| 50 | + buildInputs = with pkgs; [ |
| 51 | + curl |
| 52 | + git |
| 53 | + ]; |
| 54 | + |
| 55 | + shellHook = '' |
| 56 | + # Install nvm if it's not already installed |
| 57 | + export NVM_DIR="$HOME/.nvm" |
| 58 | + if [ ! -d "$NVM_DIR" ]; then |
| 59 | + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash |
| 60 | + fi |
| 61 | +
|
| 62 | + # Load nvm |
| 63 | + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" |
| 64 | +
|
| 65 | + # Install and use the specified version if not already installed |
| 66 | + if ! nvm ls ${nodeVersion} >/dev/null 2>&1; then |
| 67 | + nvm install ${nodeVersion} |
| 68 | + fi |
| 69 | + nvm use ${nodeVersion} |
| 70 | +
|
| 71 | + # Enable and configure corepack for PNPM |
| 72 | + corepack enable |
| 73 | + corepack prepare pnpm@${pnpmVersion} --activate |
| 74 | +
|
| 75 | + # Setup PNPM environment |
| 76 | + export PNPM_HOME="$HOME/.local/share/pnpm" |
| 77 | + export PATH="$PNPM_HOME:$PATH" |
| 78 | +
|
| 79 | + # Get clean versions for comparison |
| 80 | + NODE_ACTUAL=$(node --version | sed 's/^v//') |
| 81 | + PNPM_ACTUAL=$(pnpm --version) |
| 82 | +
|
| 83 | + echo "π€ Development environment loaded π" |
| 84 | + echo "------------------------------------------" |
| 85 | + echo "package.json version(s) = environment:" |
| 86 | +
|
| 87 | + if [ "$NODE_ACTUAL" = "${nodeVersion}" ]; then |
| 88 | + echo "β
Node.js (v${nodeVersion})" |
| 89 | + else |
| 90 | + echo "β Node.js (v${nodeVersion} != v$NODE_ACTUAL)" |
| 91 | + fi |
| 92 | +
|
| 93 | + if [ "$PNPM_ACTUAL" = "${pnpmVersion}" ]; then |
| 94 | + echo "β
PNPM (v${pnpmVersion})" |
| 95 | + else |
| 96 | + echo "β PNPM (v${pnpmVersion} != v$PNPM_ACTUAL)" |
| 97 | + fi |
| 98 | +
|
| 99 | + echo """ |
| 100 | + ποΈ Quickstart Guide: |
| 101 | + -------------------- |
| 102 | + ββ> 1. pnpm i (Install dependencies) |
| 103 | + β 2. pnpm build (Build project) |
| 104 | + ββ 3. pnpm clean (Clear Artifacts, for a fresh start) |
| 105 | + 4. pnpm test (Run tests) |
| 106 | +
|
| 107 | + For more commands, run: pnpm --help |
| 108 | + """ |
| 109 | + ''; |
| 110 | + }; |
| 111 | + }); |
78 | 112 | }
|
0 commit comments