A single, multipurpose developer devcontainer: fast startup, strong terminal ergonomics, AI-ready workflows, and reproducible tooling.
This repository combines dotfiles, container setup scripts, and workspace automation so any project can boot into a consistent, high-signal development environment.
dev-dots is an opinionated, production-ready devcontainer built to cover the full range of everyday development work — Python, data, content, and beyond — in a single container:
- Reproducible CLI toolchain
- Excellent shell UX out of the box
- AI-assisted tmux layouts for rapid coding sessions
- Minimal host setup required
Defined in .devcontainer/Dockerfile:
- Debian bookworm-slim base image
- Core dev tools:
git,curl,tmux,htop,jq,wget,fd-find,bat,openssh-client,build-essential - Data and search utilities:
ripgrep,qsv,fzf - Modern shell utilities:
eza(ls replacement) - Node.js LTS (for npm and Node-based tools)
- Latest Neovim install
- Non-root
devuser and workspace-ready permissions - CLI installs for
opencode,uv,starship, andzoxide - Dotfiles pre-loaded:
.bashrc, bash helpers, starship config, tmux config, tmux layout scripts - LazyVim starter pre-cloned to
~/.config/nvim(plugins download on firstnvimlaunch) - Git tooling:
lazygit(TUI git client),gh(GitHub CLI),delta(syntax-highlighted diffs),gh-dash(GitHub dashboard TUI) - System-level git pager configured to use
delta(user~/.gitconfigtakes precedence)
Defined in .devcontainer/post-create.sh:
- CLI availability verification (nvim, opencode, uv, starship, zoxide, node, npm, csvlens)
- Git tooling availability summary on startup
- Helpful tips printed on startup (lazygit, gh auth login, gh dash, tdl opencode)
Authentication is handled via CLI tools that work inside the container:
gh auth login— authenticate GitHub CLI (enablesghandglaboperations)glab auth login— authenticate GitLab CLI (if needed)
Once authenticated, git operations work seamlessly via the CLI wrappers (gh repo clone, gh pr create, etc.) or native git commands.
Available git TUI tools:
| Tool | Command | Notes |
|---|---|---|
| lazygit | lazygit |
Full-featured TUI git client; integrates with LazyVim |
| GitHub CLI | gh |
Baked in; run gh auth login once to enable authenticated ops |
| gh-dash | gh dash |
GitHub dashboard TUI (PRs, issues, notifications) |
| delta | automatic | Syntax-highlighted diffs for every git diff / git log -p |
From bash/ and starship/:
- Modular bash config (
aliases,functions,rc) - Productivity helpers (
fzfhistory search, compression helpers, apt helpers) zoxide-powered directory jumping- Starship prompt with concise git-aware status
.
├── .devcontainer/
│ ├── Dockerfile
│ ├── devcontainer.json
│ ├── post-create.sh
│ └── tmux.conf
├── bash/
│ ├── .bashrc
│ └── .config/bash/
│ ├── aliases
│ ├── functions
│ └── rc
├── starship/
│ └── .config/starship.toml
└── README.md
- Clone this repository.
- Start the devcontainer:
devcontainer-cli open . - Wait for post-create setup to finish.
- Run
onboardto authenticate GitHub CLI and Copilot (one-time setup). - Start working with
nvim .,vim,tmux, or your preferred workflow.
Keep dev-dots a single, well-maintained multipurpose container that stays current with tooling updates and remains easy to extend for any project type. The focus is depth and quality over breadth of profiles:
- Keep shell/editor defaults portable and easy to override
- Make every session AI-collaboration friendly by default
- Preserve reproducibility with minimal manual machine setup
To present from inside the container, run:
npm run dev -- --remoteThis exposes the Slidev dev server so you can access it from outside the container. Port 3030 is forwarded by default via devcontainer.json.