Skip to content

Forgeon is a powerful CLI tool that automates the creation of Docker-based development environments tailored to your stack.

License

Notifications You must be signed in to change notification settings

toita86/Forgeon

Repository files navigation

Forgeon

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


Features

  • 🔧 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

Example Workflow

copier copy gh:Toita86/Forgeon ~/path/to/your/subproject

You’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)" >> .env

This 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


Supported Languages (so far)

  • 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)

Project Structure

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).

Requirements

  • Python 3.8+
  • copier
  • Docker + docker compose

Roadmap

  • Template using copier
  • Devcontainer integration
  • Use pyenv for python installation
  • Podman support
  • Tmux with pre-configured session management

Contributing

Contributions are welcome! Open issues, suggest features, or send PRs. You can also submit starter configs for Neovim.


License

MIT License

About

Forgeon is a powerful CLI tool that automates the creation of Docker-based development environments tailored to your stack.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages