{ description = "Development environment for atashdotdev with Node and pnpm"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; version = (pkgs.lib.importJSON ./package.json).version; app = pkgs.stdenv.mkDerivation { pname = "atashdotdev"; inherit version; src = ./.; nativeBuildInputs = with pkgs; [ nodejs_24 nodePackages.pnpm cacert ]; buildPhase = '' export HOME=$TMPDIR export SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt pnpm install --frozen-lockfile pnpm build ''; installPhase = '' mkdir -p $out/lib/app cp -r dist package.json pnpm-lock.yaml $out/lib/app/ cd $out/lib/app && pnpm install --prod --frozen-lockfile mkdir -p $out/bin echo '#!/bin/sh cd $out/lib/app exec ${pkgs.nodejs_24}/bin/node ./dist/server/entry.mjs "$@"' > $out/bin/atashdotdev chmod +x $out/bin/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)" if [ ! -d "node_modules" ]; then echo "📦 Installing pnpm dependencies..." pnpm install --frozen-lockfile fi ''; }; # nix run - run the dev server apps.default = { type = "app"; program = "${pkgs.writeShellScript "dev" '' export PATH="${pkgs.nodejs_24}/bin:${pkgs.nodePackages.pnpm}/bin:$PATH" if [ ! -d "node_modules" ]; then pnpm install --frozen-lockfile fi pnpm dev ''}"; }; # nix build - build the container packages.default = pkgs.dockerTools.buildLayeredImage { name = "atashdotdev"; tag = "latest"; contents = with pkgs; [ app nodejs_24 bash coreutils ]; config = { Cmd = [ "${app}/bin/atashdotdev" ]; ExposedPorts."4321/tcp" = {}; Env = [ "NODE_ENV=production" "HOST=0.0.0.0" "PORT=4321" ]; WorkingDir = "${app}/lib/app"; }; }; }); }