commit daa2685ed9a07071a076fd25d03c4d2b6195f62f Author: myrmidex Date: Mon Dec 29 17:05:44 2025 +0100 set up environment diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..757fee3 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.idea \ No newline at end of file diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..39839a5 --- /dev/null +++ b/shell.nix @@ -0,0 +1,172 @@ +{ pkgs ? import {} }: + +pkgs.mkShell { + buildInputs = with pkgs; [ + # PHP and tools + php83 + php83Packages.composer + + # Node.js and npm + nodejs_20 + + # Container tools + podman + podman-compose + + # Database client (optional, for direct DB access) + mariadb-client + + # Utilities + git + curl + gnumake + ]; + + shellHook = '' + # Export user/group IDs for Docker permission matching + export USER_ID=$(id -u) + export GROUP_ID=$(id -g) + # Use keep-id for proper permission mapping in rootless podman + export PODMAN_USERNS=keep-id + + # Define helper functions + dev-rebuild() { + echo "🔨 Rebuilding development environment..." + PODMAN_USERNS=keep-id podman-compose down -v + PODMAN_USERNS=keep-id podman-compose build --no-cache app + PODMAN_USERNS=keep-id podman-compose up -d + echo "✅ Rebuild complete! Check logs with: dev-logs" + } + + dev-rebuild-quick() { + echo "⚡ Quick rebuild (keeping volumes)..." + PODMAN_USERNS=keep-id podman-compose down + PODMAN_USERNS=keep-id podman-compose build app + PODMAN_USERNS=keep-id podman-compose up -d + echo "✅ Quick rebuild complete!" + } + + dev-up() { + echo "🚀 Starting development environment..." + PODMAN_USERNS=keep-id podman-compose up -d + echo "✅ Dev environment started!" + } + + dev-down() { + echo "🛑 Stopping development environment..." + podman-compose down + echo "✅ Dev environment stopped!" + } + + dev-restart() { + echo "🔄 Restarting development environment..." + podman-compose restart + echo "✅ Dev environment restarted!" + } + + dev-logs() { + podman-compose logs -f "$@" + } + + dev-shell() { + podman-compose exec app sh + } + + dev-artisan() { + podman-compose exec app php artisan "$@" + } + + dev-fix-permissions() { + echo "🔧 Fixing file permissions..." + echo "This will require sudo to fix Docker-created files" + sudo chown -R $(id -u):$(id -g) storage/ bootstrap/cache/ vendor/ node_modules/ 2>/dev/null || true + echo "✅ Permissions fixed!" + } + + prod-build() { + local TAG="''${1:-latest}" + local REGISTRY="codeberg.org" + local NAMESPACE="lvl0" + local IMAGE_NAME="buckets" + + echo "🔨 Building production image..." + podman build -f Dockerfile -t ''${REGISTRY}/''${NAMESPACE}/''${IMAGE_NAME}:''${TAG} . + + echo "✅ Build complete: ''${REGISTRY}/''${NAMESPACE}/''${IMAGE_NAME}:''${TAG}" + echo "Run 'prod-push' to push to Codeberg" + } + + prod-push() { + local TAG="''${1:-latest}" + local REGISTRY="codeberg.org" + local NAMESPACE="lvl0" + local IMAGE_NAME="buckets" + + echo "📤 Pushing to Codeberg registry..." + if podman push ''${REGISTRY}/''${NAMESPACE}/''${IMAGE_NAME}:''${TAG}; then + echo "✅ Image pushed to ''${REGISTRY}/''${NAMESPACE}/''${IMAGE_NAME}:''${TAG}" + else + echo "❌ Failed to push image. Did you run 'prod-build' first?" + echo " Also make sure you're logged in with 'prod-login'" + return 1 + fi + } + + prod-build-push() { + local TAG="''${1:-latest}" + prod-build "$TAG" && prod-push "$TAG" + } + + prod-login() { + echo "📝 Logging into Codeberg registry..." + podman login codeberg.org + } + + echo "🚀 Buckets Development Environment" + echo "=======================================" + echo "PHP: $(php --version | head -n1)" + echo "Node: $(node --version)" + echo "Podman: $(podman --version)" + echo "Podman-compose: $(podman-compose --version 2>/dev/null || echo 'checking...')" + echo "" + echo "Development commands:" + echo " dev-up - Start development environment" + echo " dev-down - Stop development environment" + echo " dev-restart - Restart containers" + echo " dev-rebuild - Full rebuild (removes volumes)" + echo " dev-rebuild-quick - Quick rebuild (keeps volumes)" + echo " dev-logs [svc] - Follow logs (default: all)" + echo " dev-shell - Enter app container" + echo " dev-artisan - Run artisan commands" + echo " dev-fix-permissions - Fix Docker-created file permissions" + echo "" + echo "Production commands:" + echo " prod-login - Login to Codeberg registry" + echo " prod-build [tag] - Build production image (default: latest)" + echo " prod-push [tag] - Push image to Codeberg" + echo " prod-build-push - Build and push in one command" + echo "" + + # Auto-start prompt + if [ -f "docker-compose.yml" ]; then + read -p "Start development containers? (y/N) " -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + echo "Starting containers..." + podman-compose up -d + + # Wait a moment for containers to start + sleep 3 + + echo "" + echo "✅ Services should be available at:" + echo " App: http://localhost:8000" + echo " Vite: http://localhost:5173" + echo " Mailhog: http://localhost:8025" + echo " MariaDB: localhost:3306" + echo "" + echo "Run 'podman-compose logs -f app' to follow logs" + fi + fi + ''; +} \ No newline at end of file