Personal dotfiles managed with chezmoi.
Prerequisites
- macOS with Homebrew installed
- GPG key configured for commit signing
Installation
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply gaborbernat/dotfilesPost-Installation
Create ~/.secrets with your tokens (this file is sourced by fish but never committed):
set -gx GITHUB_TOKEN ghp_xxx # Add other secrets as needed
Updating
chezmoi update
What's Included
- Shell — Fish with a custom async prompt, functions, completions, and fisher plugins; atuin history, zoxide, direnv, and mise for language runtimes
- Git — GPG-signed config with delta as the diff pager, tig, git-lfs, and a global gitignore
- Terminal — Ghostty configuration
- Package managers — a Homebrew Brewfile (public baseline + optional private overlay), uv Python tools, Cargo packages, and mise runtimes
- Utilities — Atuin shell history, duti file associations, gdu disk usage config
- Scripts — custom CLI tools in
~/.local/bin/backed by uv-managed Python scripts - Stream Deck — Elgato Stream Deck profiles (v2 and v3)
- AI tooling — Claude Code settings, hooks, sounds, and skills with a
custom ccstatusline status line; Codex
config; and shared agent skill definitions (e.g. the
simprestyle skill) linked into both
Tools
Documentation for the notable tools installed via the Brewfile.
Shell & prompt — fish · fisher · atuin · zoxide · direnv · mise
Terminal — Ghostty
Git — git · gh · tig · git-delta · git-lfs
Files & search — ripgrep · fd · fzf · bat · lsd · glow · gdu
Languages & build — mise · rustup · GNU parallel
Python — uv · ruff · ty · tox · prek
Editors & multiplexers — neovim · tmux · mprocs
AI — Claude Code · ccstatusline · Codex · opencode
Private overlay
A downstream private chezmoi source can be layered on top of this public one:
chezmoi apply --source ~/.local/share/chezmoi-privateWhen present it augments the public config without forking it:
| Private file | Effect |
|---|---|
~/.local/share/chezmoi-private/Brewfile |
Adds private-only Homebrew installs |
~/.local/share/chezmoi-private/Brewfile.skip |
Drops named public Brewfile entries on that machine |
~/.local/share/chezmoi-private/fish_work.fish |
Sourced by fish for work-specific shell config |
~/.local/share/chezmoi-private/gitconfig_work |
Included by git for work identity/settings |
The brew-bundle runner merges the public Brewfile with the private additions and applies the skip-list.
Structure
| Path | Description |
|---|---|
.chezmoitemplates/ |
Shared template fragments (AI instructions) |
dot_agents/ |
Shared agent skill definitions (linked into Claude Code and Codex) |
dot_codex/ |
Codex CLI config, AGENTS.md, and rules |
dot_config/atuin/ |
Atuin shell history config |
dot_config/ccstatusline/ |
ccstatusline (Claude Code status line) config |
dot_config/fish/ |
Fish shell config, prompt, functions, and completions |
dot_config/ghostty/ |
Ghostty terminal config |
dot_config/ruff/ |
Global ruff (Python lint/format) config |
dot_config/tig/ |
Tig git interface config |
dot_local/bin/ |
Executable wrapper scripts for CLI tools |
dot_local/scripts/ |
Python source for CLI tools (uv-managed) |
dot_Brewfile.tmpl |
Homebrew packages (public baseline) |
dot_cargo_packages.txt |
Cargo packages |
dot_duti |
Default application associations |
dot_gdu.yaml |
gdu disk usage config |
dot_gitconfig.tmpl |
Git configuration |
dot_gitignore_global |
Global gitignore |
dot_uv_tools.txt.tmpl |
uv Python tools |
private_dot_claude/ |
Claude Code settings, hooks, sounds, and skills |
private_Library/ |
Stream Deck profiles |
create_private_dot_secrets |
Template creating ~/.secrets (never committed) |
run_once_* |
One-time setup (uv, rustup, Ghostty symlink) |
run_onchange_* |
On-change scripts (brew, cargo, fisher, uv tools, duti, wrappers, agent-skill links) |