Skip to content

Latest commit

 

History

71 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bogdan's Dotfiles

Managed with chezmoi. Source of truth is home/, which mirrors $HOME using chezmoi's naming convention (dot_vimrc~/.vimrc).

New machine

Homebrew first, by hand. Then chezmoi, then everything else.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
eval "$(/opt/homebrew/bin/brew shellenv)"

brew install chezmoi
chezmoi init --apply git@github.com:hurrycane/dotfiles.git

The last line clones the repo, runs .chezmoiscripts/run_once_before_install-packages.sh to brew-install the rest of the CLI stack, then writes every config file into place. That script does not install Homebrew. It exits with an error if brew is not on the PATH.

To keep the working copy somewhere other than chezmoi's default (~/.local/share/chezmoi), point sourceDir at it in ~/.config/chezmoi/chezmoi.toml — this machine uses:

sourceDir = "/Users/bogdan/Projects/dotfiles"

Daily use

chezmoi copies files rather than symlinking them, so an edit in the repo is not live until you apply it.

chezmoi diff              # what would change in $HOME
chezmoi apply             # write changes into $HOME
chezmoi status            # short form; empty means in sync
chezmoi verify            # non-zero exit if $HOME has drifted

chezmoi edit ~/.vimrc     # edit the source file for a target
chezmoi add ~/.vimrc      # pull a change made directly in $HOME back into the repo
chezmoi cd                # drop into the source directory

The usual mistake is editing ~/.vimrc directly and then losing it on the next chezmoi apply. Either chezmoi edit it, or chezmoi add it afterwards.

Manual steps

Not automated, because they need sudo or a GUI:

# Make fish the login shell
echo /opt/homebrew/bin/fish | sudo tee -a /etc/shells
chsh -s /opt/homebrew/bin/fish

# atuin's sync daemon
brew services start atuin

The atuin daemon is ignored until it is also enabled in ~/.config/atuin/config.toml:

[daemon]
enabled = true

Atuin works fully offline; atuin login is only needed for cross-machine sync.

Preferred font: Monaco Nerd Font Mono, Regular, 18.

What is here

.chezmoiroot                 -> "home", so repo docs are never applied to $HOME
home/
  .chezmoiignore             files chezmoi must not manage
  .chezmoiscripts/           run_once package install
  dot_gitconfig              delta as pager, aliases
  dot_vimrc                  plain vim, no plugin manager
  dot_inputrc                readline
  dot_tmux.conf              + dot_tmux.colors.conf
  dot_vim/colors/            solarized
  dot_config/
    starship.toml            prompt
    fish/config.fish         PATH, CLI stack init
    fish/conf.d/colors.fish  fish colors
    fish/functions/          fetch, fish_prompt
    nvim/                    LazyVim starter + lazy-lock.json

Two things are deliberately not managed, listed in home/.chezmoiignore: fish_variables and conf.d/fish_frozen_key_bindings.fish. Fish rewrites both itself, so tracking them means permanent phantom drift in chezmoi diff. The colors that used to live in fish_variables are now set explicitly in conf.d/colors.fish.

Dependencies

Installed by the run_once script. Shell: fish, starship, direnv, tmux, neovim (reattach-to-user-namespace is optional; tmux.conf only uses it if present).

CLI stack — see CHEATSHEET.md for various tool uses:

tool replaces notes
eza ls aliased to ls/ll/la/lt
bat cat also the MANPAGER
fd find backs FZF_DEFAULT_COMMAND
ripgrep grep rg
ast-grep sg; structural search/rewrite, where rg is line-based
zoxide cd z, zi
fzf ctrl-t files, alt-c cd
atuin history owns ctrl-r; up-arrow left to fish
git-delta git diff wired up in dot_gitconfig
dust du dust
wget downloader; also mason.nvim's curl fallback
chezmoi manages this repo

Only ls shadows its classic command — cat, du, find and grep are left as-is, since bat/dust/fd/rg take incompatible flags.

openjdk@21 is deliberately absent. config.fish wires up its PATH, JAVA_HOME and CPPFLAGS when it is present, but a JDK is machine-specific, so the test -d guard skips the block on machines without one.

Brew-installed completions need no setup: fish already carries /opt/homebrew/share/fish/vendor_completions.d in $fish_complete_path.

Inspiration

Kudos to Erik Michaels-Ober and Ryan Bates.

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages