SERVICES=traefik whoami gitea nextcloud devbox docs-site .PHONY: up down restart backup init-env env-sync docs generate-docs serve-docs logs status up-% down-% up: for svc in $(SERVICES); do \ if [ -f "$$svc/docker-compose.yml" ]; then \ echo "Starting $$svc..."; \ (cd $$svc && docker compose --env-file ../.env `if [ -f .env ]; then echo --env-file .env; fi` up -d); \ fi; \ done; \ up-%: @svc=$*; \ if [ -f "$$svc/docker-compose.yml" ]; then \ echo "Starting $$svc..."; \ (cd $$svc && docker compose --env-file ../.env `if [ -f .env ]; then echo --env-file .env; fi` up -d); \ fi down-%: @svc=$*; \ if [ -f "$$svc/docker-compose.yml" ]; then \ echo "Stopping $$svc..."; \ (cd $$svc && docker compose down); \ fi down: @for svc in $(SERVICES); do \ if [ -f "$$svc/docker-compose.yml" ]; then \ echo "Stopping $$svc..."; \ (cd $$svc && docker compose down); \ fi; \ done restart: down up logs: @echo "=== Traefik ===" && (cd traefik && docker compose logs --tail=10) @echo "=== Gitea ===" && (cd gitea && docker compose logs --tail=10) @echo "=== Nextcloud ===" && (cd nextcloud && docker compose logs --tail=10) status: @for svc in $(SERVICES); do \ if [ -f "$$svc/docker-compose.yml" ]; then \ echo "--- $$svc ---"; \ (cd $$svc && docker compose ps --format "table {{.Name}}\t{{.Status}}\t{{.Ports}}"); \ fi; \ done backup: ./backup.sh init-env: @echo "Initializing .env files from .env.example..." @find . -path './.git' -prune -o -type f -name '.env.example' -print | while read -r example; do \ env_file="$${example%.example}"; \ if [ -f "$$env_file" ]; then \ echo "Skip (exists): $$env_file"; \ else \ cp "$$example" "$$env_file"; \ echo "Created: $$env_file"; \ fi; \ done env-sync: python3 scripts/check_env_sync.py --fix generate-docs: python3 scripts/generate_docs.py docs: generate-docs uvx --from mkdocs-material --with mkdocs-include-markdown-plugin mkdocs build serve-docs: generate-docs @command -v uvx >/dev/null 2>&1 || { \ echo "Error: uvx is not installed or not in PATH."; \ echo "Install with: curl -LsSf https://astral.sh/uv/install.sh | sh"; \ echo "Then run: source $$HOME/.local/bin/env"; \ exit 1; \ } uvx --from mkdocs-material --with mkdocs-include-markdown-plugin mkdocs serve --dev-addr 0.0.0.0:8000