Personal dotfiles managed by chezmoi for a consistent development environment across machines.
This repository contains configuration files for my development workflow, featuring:
- Fish shell with intelligent history and directory navigation
- Neovim with a fully-configured LazyVim setup
- Ghostty terminal with automatic Zellij multiplexing
- Git with GPG commit signing via 1Password
All configurations use the Gruvbox color scheme with automatic light/dark mode switching based on system appearance.
Before installation, ensure you have:
- macOS (primary target; Linux support via templating)
- Homebrew package manager: brew.sh
- 1Password with SSH agent enabled (for GPG signing)
- Berkeley Mono font (for Ghostty): berkeleygraphics.com
These tools are configured but need to be installed separately:
brew install fish neovim git bat btop atuin zoxide ghostty
brew install --cask 1password
# For automatic dark mode switching (macOS)
brew install cormacrelf/tap/dark-notifyInstall chezmoi and apply dotfiles in one command:
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply mschoeningDuring setup, you'll be prompted for:
- Name: Your full name (for Git commits)
- Email: Your email address (for Git commits)
- GPG Key ID: Optional, for commit signing via 1Password
Pull and apply the latest changes:
chezmoi update
- fish (fishshell.com)
- atuin: Encrypted shell history sync
- zoxide: Smart directory jumping (
zcommand) - Custom PATH: Homebrew, Bun, local bins
- nvim (neovim.io)
- LazyVim distribution with sensible defaults
- Gruvbox Hard colorscheme with automatic light/dark switching
- Custom keymap:
kjin insert mode →<Esc> - Plugins configured in
lua/plugins/
-
ghostty (ghostty.org)
- Berkeley Mono Variable font
- Auto-launches Zellij session "main"
- Automatic light/dark theme switching
-
zellij (zellij.dev)
- Compact layout
- Automatic light/dark theme switching
- git
- GPG commit signing via 1Password (macOS)
- Templated configuration using chezmoi variables
- User info populated from setup prompts
- bat: Syntax-highlighted
catreplacement - btop: Modern system monitor
This setup includes automatic theme switching across Ghostty, Neovim, and Zellij based on macOS system appearance.
- Ghostty: Native support for light/dark theme switching
- Neovim: Uses the
dark-notifyplugin to watch system appearance - Zellij: Automated via
dark-notifyand a background service
If you prefer manual control or need to test:
~/.local/bin/toggle-zellij-theme.sh light ~/.local/bin/toggle-zellij-theme.sh dark
Ghostty and Neovim will automatically follow system appearance without manual intervention.
Important: Never edit files in ~/.config directly. Always edit the source files in this repository.
# Edit a file (opens source in $EDITOR) chezmoi edit ~/.config/nvim/init.lua # Preview changes before applying chezmoi diff # Apply changes chezmoi apply
# Add an existing config file to chezmoi chezmoi add ~/.config/newapp/config.toml # Commit and push chezmoi cd git add . git commit -m "Add newapp configuration" git push
Templates use Go's text/template syntax and can access variables from .chezmoi.toml.tmpl:
{{ .user.name }}: Your name{{ .user.email }}: Your email{{ .gpg.keyid }}: GPG key ID{{ .chezmoi.os }}: Operating system (darwin, linux, etc.)
Example OS-specific configuration:
{{ if eq .chezmoi.os "darwin" }}
# macOS-specific settings
{{ end }}
~/.local/share/chezmoi/ # Source directory
├── .chezmoi.toml.tmpl # Template prompts
├── dot_config/ # Maps to ~/.config/
│ ├── fish/
│ ├── nvim/
│ ├── ghostty/
│ ├── zellij/
│ └── git/
└── README.md
chezmoi diff
chezmoi cat ~/.config/git/configchezmoi init