Personal dotfiles for John Stegeman, managed with chezmoi. Works on both macOS and Linux.
- chezmoi for dotfile management with cross-platform support
- Rosé Pine color theme applied consistently across all tools
- Fish shell as the default shell with Tide prompt
- Jujutsu (jj) as the primary version control system
- Helix as the primary editor
- Ghostty as the primary terminal emulator, with cmux for agentic development and Wezterm and Zellij also configured
- Kanata for keyboard remapping with the Gallium layout
- 1Password integration for secrets management (macOS)
- Homebrew for package management (macOS) with a tracked Brewfile
Rosé Pine is applied across all tools that support it:
| Tool | Theme |
|---|---|
| Fish shell | rose-pine/fish plugin |
| Tide prompt | Rose Pine colors via custom fish vars |
| Bat | rose-pine theme |
| Delta (git diffs) | rose-pine syntax theme |
| Atuin | Rose Pine theme |
| Helix | rose_pine theme |
| Tmux | rose-pine/tmux plugin |
| VS Code | Rosé Pine extension |
| Wezterm | Rose Pine plugin |
| Ghostty | rose-pine theme |
| Zellij | Rose Pine themes |
| Btop | Custom rose-pine theme |
| Leadr | rose-pine theme |
Fish is the default shell. Zsh is also configured as a fallback (with a custom prompt), but Fish is where all active development happens.
The prompt uses Tide (v6), configured with Rose Pine colors in ~/.config/fish/conf.d/tide.fish. Transience is enabled.
The prompt layout:
<os> <directory> [python env] [status] <vcs>
❯
VCS info is provided by a custom _tide_item_vcs.fish that shows jj state in jj repos (change ID, commit ID, bookmark, file counts, diff metrics, state flags) and falls back to git otherwise.
Fish plugins are managed with fisher:
| Plugin | Purpose |
|---|---|
jorgebucaran/autopair.fish |
Automatic bracket/quote pairing |
nickeb96/puffer-fish |
Enhanced ... directory navigation |
0rax/fish-bd |
Jump back to a parent directory by name |
PatrickF1/fzf.fish |
Fzf integration (file/history/pid search) |
icezyclon/zoxide.fish |
Zoxide integration for smart cd |
rose-pine/fish |
Rosé Pine color theme |
johnstegeman/fish-take |
take command — mkdir and cd in one step |
The following tools are initialized in config.fish when available:
- Tide — prompt (with transience enabled)
- Zoxide — replaces
cdwith smart directory jumping - Fzf — fuzzy finder shell integration
- Atuin — shell history (ctrl-r not overridden; atuin uses its own binding)
- Carapace — enhanced completions for many CLI tools
- Leadr — terminal session/command management
- uv — shell completions generated on init
- Helix — set as
$EDITOR
These replace standard commands with better alternatives, falling back gracefully if the tool is not installed:
| Function | Replaces | Tool |
|---|---|---|
ls |
ls |
eza |
ll |
ls -l |
eza -l |
la |
ls -a |
eza -a |
lla |
ls -la |
eza -la |
lt |
— | eza --tree |
cat |
cat |
bat |
du |
du |
dua |
df |
df |
duf |
rm |
rm |
trash-cli (moves to trash) |
dig |
dig |
doggo |
cd |
cd |
zoxide |
Wrapper for common chezmoi operations:
cm ap # chezmoi apply -v
cm ed # open chezmoi source directory in Zed
cm cd # cd to chezmoi source directory
cm ... # pass-through to chezmoi for anything elseWrapper for Homebrew bundle operations (macOS):
br up # update, upgrade, cleanup, doctor
br in # brew bundle install from ~/config/Brewfile
br clean # brew bundle cleanup --zap from ~/config/Brewfile
br ... # pass-through to brew for anything elseSets up a jj repo with two remotes (upstream + fork), configuring fetch from both and push to origin only:
jmr # configure upstream/origin remotes and track bookmarksmkvenv # create a uv virtual environment
uvu # update uv lockfile and syncSSH helper for connecting to GCP instances via gcloud:
inf gs # ssh to inf-graph
inf p1 # ssh to inf-prop1
# ... p2 through p5Backup and restore the macOS Dock configuration.
Short aliases wrapping common jj/git operations: g, ga, gb, gc, gl, gp, gst.
Jujutsu is the primary VCS. The Tide prompt shows jj state (change ID, commit ID, bookmark, file counts, diff metrics, and state flags) when inside a jj repository via a custom _tide_item_jj.fish.
Git is configured with:
- Delta as the pager with side-by-side diffs and Rose Pine syntax highlighting
- SSH signing via 1Password's SSH agent
diff3conflict style
| Editor | Role | Notes |
|---|---|---|
| Helix | Primary | Rosé Pine theme, Gallium keymaps |
| Zed | Secondary | Used by cm ed to open dotfiles |
| VS Code | Available | Rosé Pine theme, settings via chezmoi template |
| Neovim | Available | — |
| Terminal | Role |
|---|---|
| Ghostty | Primary |
| cmux | Agentic development (multi-pane Claude Code sessions) |
| Wezterm | Alternative |
| Zellij | Terminal multiplexer (Rose Pine theme) |
| Tmux | Terminal multiplexer (rose-pine/tmux plugin) |
| Tool | Purpose |
|---|---|
| mise | Version manager for Go, Java (Temurin 24), Node, Bun, Python, Rust, and CLI tools |
| uv | Python version and dependency management |
| jbang | Run Java programs as self-contained scripts |
| Tool | Purpose |
|---|---|
| eza | Modern ls replacement |
| bat | cat with syntax highlighting (Rose Pine theme) |
| delta | Git diff pager |
| dua | Interactive disk usage (du replacement) |
| duf | Disk free display (df replacement) |
| trash-cli | Safe rm that moves to trash |
| doggo | DNS lookup (dig replacement) |
| ripgrep | Fast search |
| fd | Fast find replacement |
| fzf | Fuzzy finder |
| zoxide | Smart cd with frecency |
| atuin | Shell history with search (Rose Pine theme) |
| carapace | Multi-shell completion |
| btop | System monitor (Rose Pine theme) |
| lnav | Log file viewer |
| leadr | Terminal command session manager |
| just | Command runner |
Kanata remaps the keyboard to the Gallium layout. On macOS, Kanata runs as a LaunchDaemon via a chezmoi template that resolves the correct binary path.
Helix keybindings are also adjusted for the Gallium layout.
- Package management via Homebrew with a tracked
~/config/Brewfile - Supports both Apple Silicon (
/opt/homebrew) and Intel (/usr/local) Homebrew paths - 1Password used for secrets; SSH keys stored in 1Password and accessed via the SSH agent integration
- Orbstack for containers and Linux VMs
- Raycast as the launcher
- Finicky for URL routing
| Doc | Contents |
|---|---|
| Installation | Detailed setup steps, post-install configuration, platform notes |
| Fish Shell | Plugins, tool integrations, all custom functions with usage examples |
| Version Control | Jujutsu (jj) workflow, multi-remote setup, git configuration |
| Utilities | CLI tools, command replacements, system monitoring |
| macOS Apps | Homebrew casks — GUI apps with descriptions |
| Keyboard | Gallium layout, Kanata remapper, Helix keybindings |
| Python | uv for version management, virtual environments, and dependencies |
| Java | mise for JDK management, jbang for scripting |
| Customizing | Forking, adding functions/plugins, secrets, cross-platform templates |
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply https://github.com/johnstegeman/dotfilesSee docs/installation.md for full details including post-install steps and platform notes.
Sensitive files (SSH keys, etc.) are managed via chezmoi's 1Password integration. Private SSH keys are stored in 1Password and accessed through the 1Password SSH agent — no keys are stored in plaintext on disk.
| File | Purpose |
|---|---|
~/.config/fish/config.fish |
Fish shell configuration |
~/.config/fish/fish_plugins |
Fisher plugin list |
~/.config/fish/conf.d/tide.fish |
Tide prompt configuration |
~/.config/git/config |
Git configuration |
~/.config/jj/config.toml |
Jujutsu configuration |
~/.config/helix/config.toml |
Helix editor configuration |
~/.config/wezterm/wezterm.lua |
Wezterm configuration |
~/.config/ghostty/config |
Ghostty configuration |
~/.config/zellij/ |
Zellij configuration |
~/.config/tmux/ |
Tmux configuration |
~/.config/atuin/config.toml |
Atuin history configuration |
~/.config/btop/btop.conf |
Btop system monitor configuration |
~/.config/leadr/config.toml |
Leadr configuration |
~/.config/bat/config |
Bat configuration |
~/.config/mise/config.toml |
Mise version manager configuration |
~/config/Brewfile |
Homebrew bundle file (macOS) |