Nix all the things
All checks were successful
Build and Deploy / build-and-push (push) Successful in 2m36s

This commit is contained in:
2025-07-25 22:41:56 -06:00
parent 8cf1d5c2e1
commit 20b38c614a
5 changed files with 130 additions and 41 deletions

View File

@@ -1,5 +1,5 @@
{
description = "Development environment for atashdotdev with Node and pnpm";
description = "atashdotdev - Astro application with Nix build";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
@@ -10,24 +10,104 @@
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
# Build the Astro application
atashdotdev = pkgs.stdenv.mkDerivation rec {
pname = "atashdotdev";
version = "1.1.0";
src = ./.;
nativeBuildInputs = with pkgs; [
nodejs_24
nodePackages.pnpm
cacert
];
configurePhase = ''
export HOME=$TMPDIR
export SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt
pnpm config set store-dir $TMPDIR/pnpm-store
'';
buildPhase = ''
pnpm install --frozen-lockfile
pnpm build
'';
installPhase = ''
mkdir -p $out/lib/atashdotdev
cp -r dist $out/lib/atashdotdev/
cp package.json $out/lib/atashdotdev/
cp pnpm-lock.yaml $out/lib/atashdotdev/
cd $out/lib/atashdotdev
pnpm install --prod --frozen-lockfile
mkdir -p $out/bin
cat > $out/bin/atashdotdev << 'EOF'
#!/bin/sh
cd $out/lib/atashdotdev
exec ${pkgs.nodejs_24}/bin/node ./dist/server/entry.mjs "$@"
EOF
chmod +x $out/bin/atashdotdev
'';
};
# Container image
containerImage = pkgs.dockerTools.buildLayeredImage {
name = "atashdotdev";
tag = "latest";
contents = with pkgs; [
atashdotdev
nodejs_24
bash
coreutils
cacert
];
config = {
Cmd = [ "${atashdotdev}/bin/atashdotdev" ];
ExposedPorts = {
"4321/tcp" = {};
};
Env = [
"NODE_ENV=production"
"HOST=0.0.0.0"
"PORT=4321"
];
WorkingDir = "${atashdotdev}/lib/atashdotdev";
};
};
in
{
# Dev shell
devShells.default = pkgs.mkShell {
packages = with pkgs; [
nodejs_24
nodePackages.pnpm
];
};
shellHook = ''
echo "🚀 atashdotdev development environment loaded!"
echo "Node version: $(node --version)"
echo "pnpm version: $(pnpm --version)"
# Default package is the container
packages = {
default = containerImage;
atashdotdev = atashdotdev;
containerImage = containerImage;
};
# Dev server app
apps.default = {
type = "app";
program = "${pkgs.writeShellScript "dev" ''
export PATH="${pkgs.nodejs_24}/bin:${pkgs.nodePackages.pnpm}/bin:$PATH"
if [ ! -d "node_modules" ]; then
echo "📦 Installing pnpm dependencies..."
pnpm install --frozen-lockfile
fi
'';
pnpm dev
''}";
};
});
}