Coder Templates
Docker-based Coder workspace templates for the homelab, organized by development stack. Every template shares the same infrastructure and differs only in the toolchain baked into its image.
Templates
| Template | Stack |
|---|---|
| dev-web | Node.js, Bun, Python, Claude Code |
| dev-backend | Go, Node.js, Bun, Opencode, Claude Code |
| dev-rust | Rust, Python, Claude Code |
| dev-c | C, C++, Claude Code |
| dev-java | Java, Maven, SDKMAN!, Claude Code |
| dev-robots | ROS 2, Python, C++, Claude Code |
Shared features
- Selectable GPU support: a
GPU Assignmentparameter attaches GPU 0, GPU 1, or both. GPU 0 is the default because GPU 1 is shared with the Ollama and Immich stacks. - Docker-out-of-Docker: the host's
/var/run/docker.sockis mounted, so workspaces can build and run containers. - Ollama integration:
OLLAMA_HOSTpoints athttp://host.docker.internal:11434. - Persistent home:
/home/coderis mapped to a host directory and survives restarts. - Telemetry: CPU, RAM, disk, load average, swap, and GPU utilization in the Coder UI.
- IDE support: code-server and JetBrains Toolbox.
- Gitea CLI:
teais preinstalled for working withgit.sirblob.cofrom the workspace. - Patched on start: the agent runs
apt-get updateandapt-get upgradeeach time a workspace starts.
Layout
Each template directory is self-contained and can be pushed to Coder on its own:
dev-<stack>/
main.tf Providers, data sources, and shared locals
parameters.tf Workspace parameters
agent.tf Coder agent, startup script, and metadata
apps.tf code-server and JetBrains modules
container.tf Docker image build and container resource
Dockerfile Workspace image
README.md Template documentation
Pushing a template
coder templates push dev-web -d ./dev-web
Prerequisites
The host needs the NVIDIA container toolkit for GPU passthrough. Coder itself runs as a container and creates workspaces through the host's Docker socket, so its service needs the socket mounted and the host docker group added:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
group_add:
- "987"
Workspaces get the same GID through the docker_group_id template variable, which defaults to 987. Confirm the host GID with getent group docker and override the variable if it differs.
Adding tools to a template
The container's root filesystem is ephemeral and /home/coder is a mounted volume, so anything installed into the home directory at build time is shadowed at runtime. Install tools under /opt or /usr/local and add them to PATH at the end of the Dockerfile.