Forgeon is a copier template to generate fully containerized, language-aware development environments using Neovim (with your choice of configuration) and language-specific tooling — all inside Docker.
🧠 Forgeon = Forge + On-demand dev environments
- 🔧 Language Picker – Select from multiple programming languages (Python, Go, Rust, JS/TS, etc.)
- 🧠 Custom Neovim Config – Use NvChad, LazyVim, AstroNvim, kickstart.nvim, or your own config (GitHub or local path)
- 🐋 Docker-Based – Reproducible environments with language servers and common dev tools
- 🧩 LSP & Plugin Autoconfig – Auto-generate Neovim config entries for selected languages
- 🔁 Regenerable – Rerun the tool any time to modify your dev stack
copier copy gh:Toita86/Forgeon ~/path/to/your/subprojectYou’ll be asked:
- Which languages do you want to develop in?
- Which Neovim config would you like to use?
- Do you want to mount a local workspace?
- Would you like to include extra tools (tmux)?
Forgeon then generates:
- A
Dockerfile - Optional
docker-compose.yml - Custom Neovim configuration (if needed)
- Shell scripts or volume mappings for easy startup
Once everything is generated, if you user has ID 1000 you are all set.
Otherwise you need to configure in the .env file by doing
echo "UID=$(id -u)" > .env
echo "GID=$(id -g)" >> .envThis will avoid any docker container ownership permissions error.
After this just build with docker compose build, run with docker compose up -d and access the ubuntu shell by doing docker exec -it <contaniner-name> bash
- Python (with
pyright,black,ruff) - Node.js / TypeScript (
tsserver,eslint) - Go (
gopls,goimports) - Rust (
rust-analyzer,cargo,clippy) - Java (
jdtls,maven) - C/C++ (
clangd,cmake,make) - Lua (for Neovim plugin dev)
Forgeon/
copier.yml
└─ Copier configuration file. Defines template variables, prompts, defaults, and conditional logic.
.devcontainer/
└─ Development container configuration (VS Code / devcontainer CLI).
This can be conditionally included or excluded based on user options.
docker-compose.yml.jinja
└─ Template for the Docker Compose file.
Uses variables from copier.yml to customize services, volumes, and environment.
Dockerfile.jinja
└─ Template for the main Dockerfile.
Adjusts installed tools, languages, and config depending on user choices.
.gitignore.jinja
└─ Template for `.gitignore`.
Generates language-specific ignores depending on selected languages.
LICENSE
└─ Project license (MIT by default, can be customized).
pre-commit-config.yaml.jinja
└─ Jinja-templated version of the pre-commit config for customization at generation time.
README.md.jinja
└─ README template for generated projects — can include details based on user selections.
requirements.txt
└─ Python dependencies for the template (if any tools/scripts require them).
- Python 3.8+
copier- Docker + docker compose
- Template using copier
- Devcontainer integration
- Use
pyenvfor python installation - Podman support
- Tmux with pre-configured session management
Contributions are welcome! Open issues, suggest features, or send PRs. You can also submit starter configs for Neovim.
MIT License