Nix Dev Shells
Overview
All development environments are managed through Nix Flakes, providing reproducible, composable toolsets per language. Enter any shell with:
nix develop .#<shell>
Available Shells
| Shell | Purpose |
|---|---|
default | Base tools only |
node | Node.js 22, npm/yarn/pnpm |
python | Python 3.12, uv |
rust | Rust stable, cargo, clippy |
go | Go, golangci-lint |
devops | Terraform, kubectl, Helm, k9s, AWS CLI 2 |
lua | Lua 5.4, luarocks, stylua |
haskell | GHC, cabal, stack |
ruby | Ruby, bundler |
scheme | Guile Scheme |
perl | Perl with core modules |
java | Java 21, Gradle/Maven |
full | All of the above combined |
Base Tools (Every Shell)
Every shell includes a common set of CLI tools:
- git, gh version control and GitHub CLI
- fzf fuzzy finder
- ripgrep fast search
- jq, yq JSON/YAML processing
- just command runner
- direnv per-directory environment variables
- chezmoi dotfile management
- tmux terminal multiplexer
- tree-sitter incremental parsing
- uv Python package manager (available everywhere)
Usage with direnv
Projects use .envrc files with use flake .#<shell> to automatically activate the correct Nix shell when entering the directory:
# .envrc
use flake .#rust
Combined with direnv, this means the right tools are always available without manual shell activation.