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)
Host credentials are forwarded into the container via devcontainer.json bind mounts (readonly):
~/.gitconfig→/home/dev/.gitconfig~/.ssh/→/home/dev/.ssh/
Git operations (git push, git pull, SSH cloning) work inside the container without any extra setup.
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
The tmux layout helpers are designed for coding with one or more AI assistants in parallel:
tdl <ai> [second_ai]: editor + AI pane(s) + terminaltdlm <ai> [second_ai]: one dev window per subdirectorytsl <pane_count> <command>: command swarm across panes
These commands are sourced from ~/.tmux-dev-layouts.sh, which is pre-installed in the image and automatically loaded by .bashrc.
.
├── .devcontainer/
│ ├── Dockerfile
│ ├── devcontainer.json
│ ├── post-create.sh
│ ├── tmux.conf
│ └── tmux-dev-layouts.sh
├── bash/
│ ├── .bashrc
│ └── .config/bash/
│ ├── aliases
│ ├── functions
│ └── rc
├── starship/
│ └── .config/starship.toml
└── README.md
- Open this repository in VS Code.
- Run
Dev Containers: Reopen in Container. - Wait for post-create setup to finish.
- Start working with
nvim .,tmux, or your preferred workflow. - (Optional) Run
gh auth loginonce to enableghandgh dashwith your GitHub account.
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.