diff --git a/flake.nix b/flake.nix index 335b784..0e83233 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "atashdotdev - Astro application with Nix build"; + description = "Development environment for atashdotdev with Node and pnpm"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; @@ -10,95 +10,53 @@ flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; + version = (pkgs.lib.importJSON ./package.json).version; - # Build the Astro application - atashdotdev = pkgs.stdenv.mkDerivation rec { + app = pkgs.stdenv.mkDerivation { pname = "atashdotdev"; - version = "1.1.0"; - + inherit version; 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 - ''; + 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/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/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 - cat > $out/bin/atashdotdev << 'EOF' -#!/bin/sh -cd $out/lib/atashdotdev -exec ${pkgs.nodejs_24}/bin/node ./dist/server/entry.mjs "$@" -EOF + 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 ''; }; - # 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 - ]; + 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 + ''; }; - # Default package is the container - packages = { - default = containerImage; - atashdotdev = atashdotdev; - containerImage = containerImage; - }; - - # Dev server app + # nix run - run the dev server apps.default = { type = "app"; program = "${pkgs.writeShellScript "dev" '' @@ -109,5 +67,18 @@ EOF 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"; + }; + }; }); }