{ description = "Reference Board Viewer - Web-based visual reference management"; 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}; pythonEnv = pkgs.python3.withPackages (ps: with ps; [ # Core backend dependencies fastapi uvicorn sqlalchemy alembic pydantic # Auth & Security python-jose passlib # Image processing pillow # Storage boto3 # HTTP & uploads httpx python-multipart # Testing pytest pytest-cov pytest-asyncio ]); in { devShells.default = pkgs.mkShell { buildInputs = with pkgs; [ # Python environment pythonEnv uv ruff # Database postgresql # Frontend nodejs nodePackages.npm # Image processing imagemagick # Storage minio minio-client # Development tools git direnv # Optional: monitoring/debugging # redis ]; shellHook = '' echo "🚀 Reference Board Viewer Development Environment" echo "" echo "📦 Versions:" echo " Python: $(python --version)" echo " Node.js: $(node --version)" echo " PostgreSQL: $(psql --version | head -n1)" echo " MinIO: $(minio --version | head -n1)" echo "" echo "📚 Quick Commands:" echo " Backend: cd backend && uvicorn app.main:app --reload" echo " Frontend: cd frontend && npm run dev" echo " Database: psql webref" echo " Tests: cd backend && pytest --cov" echo " MinIO: minio server ~/minio-data --console-address :9001" echo "" echo "📖 Documentation:" echo " API Docs: http://localhost:8000/docs" echo " App: http://localhost:5173" echo " MinIO UI: http://localhost:9001" echo "" # Set up environment variables export DATABASE_URL="postgresql://localhost/webref" export PYTHONPATH="$PWD/backend:$PYTHONPATH" ''; }; # Package definitions (for production deployment) packages = { # Backend package backend = pkgs.python3Packages.buildPythonApplication { pname = "webref-backend"; version = "1.0.0"; src = ./backend; propagatedBuildInputs = with pkgs.python3Packages; [ fastapi uvicorn sqlalchemy alembic pydantic python-jose passlib pillow boto3 httpx python-multipart ]; }; # Frontend package frontend = pkgs.buildNpmPackage { pname = "webref-frontend"; version = "1.0.0"; src = ./frontend; npmDepsHash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; # Update after first build buildPhase = '' npm run build ''; installPhase = '' mkdir -p $out cp -r build/* $out/ ''; }; }; } ); }