Personal development environment configuration for macOS. Automated Rust-based installer manages shell configurations (zsh, nushell, bash), terminal setup (ghostty, tmux), and development tools (git, neovim, emacs) with a unified catppuccin mocha theme.
git clone https://github.com/buddhamagnet/dotfiles ~/Code/dotfiles
cd ~/Code/dotfiles
cargo run --releasePreview changes without modifying anything:
cargo run --release -- --dry-runThe installer automatically installs these dependencies if not already present:
| Tool | Description | Version | Links |
|---|---|---|---|
| Monospace font for developers | Latest | Website · GitHub | |
| Modern shell with structured data | Latest | Website · GitHub | |
| Fast, customizable shell prompt | Latest | Website · GitHub | |
| Multi-shell completion generator | Latest | Website · GitHub | |
| Git worktree manager | Latest | GitHub | |
| Smarter cd command (tracks frecency) | Latest | GitHub | |
| Command-line fuzzy finder | Latest | GitHub | |
| Fast line-oriented search tool | Latest | GitHub | |
| Modern find replacement | Latest | GitHub | |
| tmux plugin manager | v3.1.0 | GitHub |
tpm is automatically installed and initialized. The following plugins are configured:
| Plugin | Description | Repository |
|---|---|---|
| tpm | tmux plugin manager - manages all other plugins | tmux-plugins/tpm |
| catppuccin | soothing pastel theme for tmux (mocha variant) | catppuccin/tmux |
| tmux-cpu | CPU and RAM usage indicators for tmux status bar | tmux-plugins/tmux-cpu |
Installing plugins:
After running the dotfiles installer, open tmux and press Prefix + I (Ctrl-a + Shift-i) to install all declared plugins.
Managing plugins:
- Update plugins:
Prefix + U - Remove unlisted plugins:
Prefix + alt + u
Adding new plugins:
Add plugin declarations to tmux/tmux.conf (after the existing plugin declarations, before the TPM initialization line):
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'Then press Prefix + I inside tmux to install them.
neovim uses lazy.nvim for plugin management. Configured plugins:
| Plugin | Description | Repository |
|---|---|---|
| lazy.nvim | modern plugin manager with lazy loading | folke/lazy.nvim |
| catppuccin | soothing pastel theme for neovim (mocha variant) | catppuccin/nvim |
| telescope | fuzzy finder over lists (files, buffers, etc.) | nvim-telescope/telescope.nvim |
| telescope-fzf-native | native C sorter for telescope (performance) | telescope-fzf-native.nvim |
| plenary | lua utility library (required by telescope) | nvim-lua/plenary.nvim |
telescope keybindings:
<leader>ff- Find files<leader>fg- Live grep (search text in files)<leader>fb- List buffers<leader>fh- Search help tags
Managing plugins:
- View plugin status:
:Lazy - Install/update plugins:
:Lazy sync - Check plugin health:
:checkhealth telescope
Adding new plugins:
Edit nvim/lua/plugins/init.lua and add plugin specs:
{
"plugin/name",
config = function()
-- Plugin configuration here
end,
}Plugins auto-install on next nvim launch, or run :Lazy sync.
These tools are referenced in configurations but require separate installation:
| Tool | Description | Links |
|---|---|---|
| fast, native terminal emulator | Website · GitHub | |
| Terminal multiplexer | GitHub · Wiki | |
| node version manager | GitHub |
| Tool | Description | Version | Links |
|---|---|---|---|
| version control system | Latest | Website · GitHub | |
| hyperextensible vim-based text editor | Latest | Website · GitHub | |
| extensible text editor (clojure-focused) | Latest | Website · GNU | |
| clojure build automation tool | CIDER nREPL 0.62.0 | Website · GitHub | |
| relational database | 8.3.0 | Website · Dev | |
| GNU debugger | Latest | Website | |
| haskell REPL | Latest | Website | |
| claude code | AI-powered coding assistant | Latest | Website |
- macOS (tested on Darwin 24.6.0)
- Rust & Cargo - Install via rustup
- Homebrew - Install Homebrew
-
Clone the repository:
git clone https://github.com/buddhamagnet/dotfiles ~/Code/dotfiles cd ~/Code/dotfiles
-
Run the installer:
cargo run --release
-
Interactive prompts: When the installer encounters existing files, you'll be prompted:
y- Overwrite this file (backup created)n- Skip this filea- Overwrite all remaining filesq- Quit installation
-
Backup location: Existing files are moved to
~/.dotfiles-backup/before being replaced.
Preview what will be changed without modifying anything:
cargo run --release -- --dry-runThe installer symlinks these files from the repository into your home directory:
| Source (Repo) | Destination ($HOME) | Purpose |
|---|---|---|
bashrc |
~/.bashrc |
bash configuration with carapace and worktrunk |
zshrc |
~/.zshrc |
zsh configuration with starship prompt, carapace completions, vi mode, and custom functions |
gitconfig |
~/.gitconfig |
git configuration with SSH GitHub URLs and worktree aliases |
gitignore |
~/.gitignore |
global git ignore patterns |
gdbinit |
~/.gdbinit |
GNU debugger configuration (Intel disassembly) |
ghci |
~/.ghci |
haskell REPL configuration (lambda prompt) |
tmux/tmux.conf |
~/.tmux.conf |
tmux configuration with catppuccin theme, custom prefix (C-a) |
tmux/tmux-workspace.sh |
~/tmux-workspace.sh |
automated tmux workspace setup script |
.lein/profiles.clj |
~/.lein/profiles.clj |
leiningen configuration with CIDER plugin |
.emacs.d |
~/.emacs.d |
emacs configuration (entire directory) |
ghostty/config |
~/.config/ghostty/config |
ghostty terminal configuration with catppuccin theme |
nushell/env.nu |
~/.config/nushell/env.nu |
nushell environment configuration |
nushell/config.nu |
~/.config/nushell/config.nu |
nushell main configuration |
starship/starship.toml |
~/.config/starship/starship.toml |
starship prompt customization |
nvim |
~/.config/nvim |
neovim configuration with lazy.nvim plugin manager |
- catppuccin mocha theme across tmux and ghostty for consistent aesthetics
- jetbrains mono font with ligatures
- starship prompt with extensive customization
- vi mode in zsh with preserved Ctrl+R history search
- carapace shell completion bridges for zsh, fish, bash, and inshellisense
- entire CLI shell completion integration
- worktrunk shell integration for zsh and nushell
- zoxide smart directory navigation based on frecency (frequency + recency)
- fzf fuzzy finder for files, directories, and command history
- ripgrep blazingly fast text search (used by telescope live_grep)
- fd modern file finder (used by telescope for better file search)
- custom prefix:
C-ainstead of defaultC-b - tpm (tmux plugin manager) automatically installed for plugin management
- catppuccin theme managed via tpm (mocha variant)
- workspace automation:
tmux-workspace.shcreates 5-window setup with claude instances
- SSH-based GitHub URLs automatically
- worktree aliases for git worktree management
- custom
.gitignorepatterns
- claude code integration with work and personal config functions
- clojure development via emacs with paredit, cider, and clojure-mode
- leiningen with CIDER nREPL plugin
After installation, enable worktrunk shell integration in nushell:
wt config shell install nuThis creates a static wt.nu file in nushell's vendor-autoload directory. Re-run this command after updating worktrunk.
cd ~/Code/dotfiles
git pull
cargo run --releaseTo move to a newer catppuccin version:
- Edit
src/main.rsand updateTMUX_PLUGIN_TAGconstant - Remove existing plugin:
rm -rf ~/.config/tmux/plugins/catppuccin - Re-run installer:
cargo run --release
This project is licensed under the MIT License - see the LICENSE file for details.
Maintained by: Dave Goodchild (buddhamagnet@gmail.com)