Files
leptos-shadcn-ui/flake.nix

128 lines
4.4 KiB
Nix

{
description = "shadcn/ui Rust Development Environment";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
rust-overlay.url = "github:oxalica/rust-overlay";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, rust-overlay, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
overlays = [ (import rust-overlay) ];
pkgs = import nixpkgs {
inherit system overlays;
};
# Rust toolchain with WebAssembly support
rustToolchain = pkgs.rust-bin.stable.latest.default.override {
extensions = [ "rust-src" "rust-analyzer" ];
targets = [ "wasm32-unknown-unknown" ];
};
# Node.js and pnpm for Playwright and frontend tooling
nodejs = pkgs.nodejs_20;
pnpm = pkgs.nodePackages.pnpm;
# Additional Node.js tools
nodePackages = pkgs.nodePackages;
in
{
devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [
# Rust ecosystem
rustToolchain
cargo-watch
cargo-edit
cargo-audit
cargo-outdated
# WebAssembly tools
wasm-pack
trunk
# Node.js ecosystem for Playwright
nodejs
pnpm
nodePackages.typescript
# Build tools
gnumake
pkg-config
# System dependencies for web development
openssl
cacert
# Development utilities
jq
curl
git
# Browser automation (for Playwright) - will be installed by Playwright
];
shellHook = ''
echo "🦀 shadcn/ui Rust Development Environment"
echo "======================================"
echo "Rust version: $(rustc --version)"
echo "Cargo version: $(cargo --version)"
echo "Node.js version: $(node --version)"
echo "pnpm version: $(pnpm --version)"
echo "TypeScript version: $(tsc --version 2>/dev/null || echo 'Not installed')"
echo "Make version: $(make --version | head -n1)"
echo ""
echo "Available commands:"
echo " pnpm test - Run Playwright tests (auto-closing)"
echo " pnpm test:headed - Run tests with browser visible"
echo " pnpm test:ui - Run tests with Playwright UI"
echo " make help - Show available make targets"
echo " make dev - Start development environment"
echo " make test - Run all tests"
echo " make test-rust - Run Rust tests only"
echo " make test-e2e - Run Playwright E2E tests"
echo " make build - Build all components"
echo " make clean - Clean build artifacts"
echo ""
# Set up environment variables
export RUST_LOG=debug
export PLAYWRIGHT_BROWSERS_PATH=$PWD/.playwright-browsers
export PATH="$PWD/node_modules/.bin:$PATH"
# Ensure pnpm is properly configured
export PNPM_HOME="$HOME/.local/share/pnpm"
export PATH="$PNPM_HOME:$PATH"
# Create necessary directories
mkdir -p .playwright-browsers
mkdir -p tests/e2e
mkdir -p test-results
# Check if dependencies are installed
if [ ! -d "node_modules" ] && [ -f "package.json" ]; then
echo "📦 Installing Node.js dependencies with pnpm..."
pnpm install
fi
# Install Playwright browsers if not already installed
if [ ! -d ".playwright-browsers" ] || [ -z "$(ls -A .playwright-browsers 2>/dev/null)" ]; then
echo "🎭 Installing Playwright browsers..."
pnpm exec playwright install --with-deps
fi
echo "🚀 Environment ready! Run 'pnpm test' to start testing."
'';
# Environment variables
RUST_SRC_PATH = "${rustToolchain}/lib/rustlib/src/rust/library";
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = "1";
};
# Formatter for nix files
formatter = pkgs.nixpkgs-fmt;
});
}