Skip to content

Commit be753c6

Browse files
committed
fix flake
1 parent 6540eac commit be753c6

File tree

2 files changed

+108
-110
lines changed

2 files changed

+108
-110
lines changed

β€Žflake.lock

+8-44
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

β€Žflake.nix

+100-66
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,112 @@
11
{
2-
description = "Your project description";
2+
description = "Node.js development environment with NVM and PNPM";
33

44
inputs = {
5-
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
6-
pnpm2nix.url = "github:nzbr/pnpm2nix-nzbr";
5+
nixpkgs.url = "github:nixos/nixpkgs";
76
flake-utils.url = "github:numtide/flake-utils";
87
};
98

109
outputs = {
1110
self,
1211
nixpkgs,
13-
pnpm2nix,
1412
flake-utils,
1513
}:
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+
});
78112
}

0 commit comments

Comments
Β (0)