Configurations to improve the CLI dev experience.
- Keep
$HOMEclean. Config, state and cache live in the standard XDG directories;$HOMEholds only the few paths a tool forces. - No vendored plugin code. Tools install and update their own; this repo stores config.
- One set of keys. The same vi motions everywhere, with
<Space>as the editor leader and<Ctrl-Space>as the terminal prefix. - One clipboard. Copy in one tool, paste in another.
- One session per worktree. Every piece of work is isolated and restorable, with its own agent and diff.
- One look. Gruvbox-like colours everywhere.
Terminal.
Shell. Vi mode, autosuggestions, syntax highlighting, starship prompt, zoxide jumps and direnv per-directory environments.
Multiplexer, with a sesh + fzf session picker and split navigation that reaches into Neovim.
Editor. Plugins install themselves on first start; language servers start per file type.
Version control, with Neovim as the difftool and lazygit for interactive use.
Agent, installed separately.
- Add 'U.S. International - PC' input source
- Change ' Caps Lock' to 'Control' (Keyboard Shortcuts > Modifier Keys)
- Disable keyboard shortcuts for 'Input Sources' (i.e. Ctrl-Space)
- Set 'Key repeat rate' to 'Fast'
Requires Homebrew. Install with stow:
chsh -s /bin/zsh # Ghostty and tmux use the login shell
git clone https://github.com/alimfeld/dotfiles ~/.dotfiles
cd ~/.dotfiles
mkdir -p ~/.config ~/.local/bin ~/.agents/skills ~/.pi/agent/extensions
./dot-local/bin/brew-install # core tools, dependencies and language servers
stow .
# then install pi (see pi.dev)The directories are created first because they are shared with other stow sources (e.g. a work dotfiles repo).
Machine-local overrides go in ~/.config/local/ (zsh.zsh, tmux.conf,
git.inc), which zsh, tmux and git read if present. git.inc must set
[user] email for repos outside github.com/alimfeld: git has no fallback
identity. Edit that file, never git config --global (it writes into the
stowed file above). Another repo can own that directory, e.g. a work dotfiles
repo stowing dot-config/local. Neovim and Ghostty have their own untracked
spots: ~/.local/share/nvim/site/plugin/ and
~/Library/Application Support/com.mitchellh.ghostty/config.ghostty.
If ~/.gitconfig exists, delete it: git reads it after ~/.config/git/config,
so it silently overrides every rule above.