Personal dotfiles for macOS and Linux. Managed with chezmoi.
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply --source ~/.config/dotfiles VictorinolavidaOr if chezmoi is already installed:
chezmoi init --apply --source ~/.config/dotfiles VictorinolavidaNote:
--source ~/.config/dotfilesis required. This repo setssourceDir = ~/.config/dotfilesin.chezmoi.toml.tmpl, so chezmoi must clone there too. Without--source, chezmoi clones to its default (~/.local/share/chezmoi), which won't matchsourceDir— and your dotfiles will look unmanaged.
chezmoi manages symlinks and file application. On first run it also executes run_once_install.sh.tmpl to install all packages.
This script runs automatically when you first apply the dotfiles (or whenever its content changes). It bootstraps your environment end-to-end.
macOS (via Homebrew)
- CLI tools:
git,curl,zsh,eza,bat,fzf,fd,zoxide,lazygit,tmux,ripgrep,go,neovim,yazi - Casks:
ghostty,font-jetbrains-mono-nerd-font,font-intone-mono-nerd-font,font-symbols-only-nerd-font - Node version manager:
fnm
Linux (via apt + GitHub releases)
- apt:
git,curl,zsh,tmux,ripgrep,build-essential,xclip,fzf,fd-find,zoxide,golang-go ezavia the official gierens apt repobat(with abat→batcatsymlink on Ubuntu)lazygit,yazi— downloaded from GitHub releasesneovimvia snapghostty— prints a manual-install reminder (no official Linux package)fnm, Rust/Cargo, JetBrainsMono + IntelliOneMono + Symbols Nerd Fonts
Both platforms
- Oh My Zsh
- Tmux Plugin Manager (TPM) →
~/.tmux/plugins/tpm
chezmoi tracks a hash of the script. It runs automatically on:
chezmoi init --apply(first-time setup)chezmoi apply/chezmoi update— only if the script content has changed since the last run
To re-run the script without changing its content:
chezmoi state delete-bucket --bucket=scriptState
chezmoi apply| Command | What it does |
|---|---|
chezmoi apply |
Apply config changes to $HOME |
chezmoi diff |
Preview what would change |
chezmoi edit ~/.zshrc |
Edit source file and apply |
chezmoi cd |
Jump into source directory |
chezmoi update |
Pull latest + apply |
dotfiles/
├── dot_zshrc → ~/.zshrc
├── dot_tmux.conf → ~/.tmux.conf
├── dot_aerospace.toml → ~/.aerospace.toml
├── dot_wezterm.lua → ~/.wezterm.lua
├── dot_config/
│ ├── ghostty/ → ~/.config/ghostty/
│ ├── git/ignore → ~/.config/git/ignore (global gitignore)
│ ├── kitty/ → ~/.config/kitty/
│ └── yazi/ → ~/.config/yazi/
├── dot_local/bin/ → ~/.local/bin/ (tmux scripts)
├── run_once_install.sh.tmpl — package installs (runs once)
├── .chezmoi.toml.tmpl — chezmoi config
├── .chezmoiexternal.toml — external repos (nvim)
└── .chezmoiignore — files chezmoi skips
Requires Oh My Zsh + plugins (installed by run_once_install.sh.tmpl).
Plugins: zsh-autosuggestions, zsh-syntax-highlighting, wd, powerlevel10k theme.
Cross-platform key bindings. os-keys.conf is generated from a chezmoi template — uses cmd+ on macOS and ctrl+shift+ on Linux. No manual symlink needed.
Config at ~/.config/ghostty/config.
Requires TPM. Installed by run_once_install.sh.tmpl. After first apply, open tmux and press prefix + I to install plugins.
Config sourced from minimal_nvim via .chezmoiexternal.toml. chezmoi clones it automatically to ~/.config/nvim.
Modern terminal file manager. Use ycd instead of yazi to cd into the last visited directory on exit. (ya is reserved for yazi's own CLI tool.)
chezmoi creates ~/.oh-my-zsh/custom/ (for plugins) before the install script runs, which can cause the OMZ installer to be skipped if the check tests the directory rather than the actual install. The script now checks for oh-my-zsh.sh instead.
If you still see plugin not found or theme not found errors, force-refresh the external repos:
chezmoi apply --force --refresh-externals=alwaysOMZ wasn't installed. Remove the partial directory and re-run:
rm -rf ~/.oh-my-zsh
bash <(chezmoi execute-template < ~/.local/share/chezmoi/run_once_install.sh.tmpl)
chezmoi apply --force --refresh-externals=alwaysdirenv is installed by the run_once script. If it's missing, install manually:
brew install direnv # macOS
sudo apt-get install direnv # LinuxSee notes/multiple-github-accounts.md.