A streamlined approach to building development containers with Mise for tool version management and chezmoi for dotfiles synchronization, featuring automated setup and DevPod integration for portable development environments.
Prerequisites
- Docker installed and running
- DevPod CLI installed
# Configure DevPod for terminal-based workflow (Neovim)
devpod ide use none
devpod provider add docker
Directory Structure
.devcontainer/
├── devcontainer.json
├── Dockerfile
└── scripts
└── setup
Dockerfile
# Dockerfile
FROM mcr.microsoft.com/devcontainers/base:ubuntu-24.04
COPY --from=jdxcode/mise /usr/local/bin/mise /usr/local/bin/
# make sure mise is activated in both zsh and bash. Might be overridden by a user's dotfiles.
RUN echo 'eval "$(mise activate bash)"' >> /home/vscode/.bashrc && \
echo 'eval "$(mise activate zsh)"' >> /home/vscode/.zshrc
Devcontainer
# devcontainer.json
{
"build": {
"context": "..",
"dockerfile": "Dockerfile"
},
"remoteEnv": {
"MISE_GITHUB_TOKEN": "${localEnv:MISE_GITHUB_TOKEN}"
},
"postCreateCommand": ".devcontainer/scripts/setup",
"forwardPorts": [8000]
}
Script/setup
#!/bin/bash
/usr/local/bin/mise trust /workspaces/"$DEVPOD_WORKSPACE_ID"/mise.toml && /usr/local/bin/mise install
Build
devpod up . --dotfiles [email protected]:affragak/dotfiles-devpod.git
Connect
devpod ssh .