# ─── Deny by default ──────────────────────────────────────────────── # Everything inside a service directory is ignored. This means a new # service is safe automatically — you don't have to remember to add a # rule for it before the first `docker compose up`. */* # ─── …except the files that define a stack ────────────────────────── !*/compose.yaml !*/docker-compose.yaml # A service's alternative compose file, published as documentation. Narrow on # purpose: `!*/compose.*.yaml` would also un-ignore compose.override.yaml, # which is exactly where people keep local secrets. !*/compose.personal.yaml !*/.env.example !*/README.md # Support files a stack needs at runtime: init scripts, config fragments. # Keep them in a per-service `init/` directory so they are never mistaken for # application state. !*/init/ !*/init/** # Docs are not service data. !docs/** # ─── Never, anywhere ──────────────────────────────────────────────── .env *.key *.pem *.crt secrets/ TODO # VPN configs carry private keys. Named explicitly because the `!*/init/**` # rule above would otherwise happily commit one dropped in a service's # init/ directory -- which is exactly where this repo's own conventions # tell you to put runtime config fragments. wg*.conf *.ovpn