mirror of
https://github.com/cloud-shuttle/leptos-shadcn-ui.git
synced 2025-12-22 22:00:00 +00:00
128 lines
4.4 KiB
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;
|
|
});
|
|
}
|