This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This is a personal dotfiles repository using GNU Stow for symlink management. The structure manages configuration for:
- Shell environment (zsh with Oh-My-Zsh)
- Terminal applications (Ghostty, Wezterm, Tmux)
- Development tools (Neovim, various CLI tools)
- Package management (Homebrew via Brewfile)
- Development environments (Node.js via NVM, Bun, Python)
# Run all setup scripts
./scripts/run
# Run specific setup categories
./scripts/run --dry # Dry run to see what would be executed
./scripts/run brew # Filter to run only homebrew-related scripts
# Individual setup scripts (located in scripts/runs/)
./scripts/runs/setup # Main environment setup
./scripts/runs/homebrew # Install Homebrew packages
./scripts/runs/neovim # Build Neovim from source
./scripts/runs/shell-setup # Configure shell environment# Install/update Homebrew packages
brew bundle --file=brew/Brewfile
# Generate current package lists
brew bundle dump --file=brew/Brewfile --force
brew leaves > brew/formulae.txt
brew list --cask > brew/casks.txt# Deploy configurations (from dotfiles directory)
stow . # Deploy all configs using .stow-local-ignore
# Files ignored by stow: homebrew, .git, .gitignore, .DS_Store, scripts.config/- Application configurations (nvim, ghostty, tmux, etc.).zshrc- Shell configuration with environment variables and aliasesbrew/- Homebrew package definitions and listsscripts/- Setup automation scripts with modular execution
Located in .config/nvim/, this is a modular Lua-based configuration:
Core Structure:
init.lua- Main entry point with plugin specificationslua/user/- Configuration modules organized by functionalitylua/user/extras/- Optional/experimental pluginslazy-lock.json- Plugin version lockfile
Key Configuration Modules:
options.lua,keymaps.lua,autocmds.lua- Core Neovim settingslspconfig.lua+lspsettings/- LSP configurations per languagetreesitter.lua,cmp.lua,telescope.lua- Core functionalitymason.lua- LSP/formatter/linter management
Key Environment Variables (defined in .zshrc):
REPOS="$HOME/Developer/projects/"- Main development directoryDOTFILES="$HOME/dotfiles"- This repository locationGITUSER="jmartinn"- Git username for repository operationsEDITOR='nvim'- Default editor
Development Tools:
- Node.js via NVM (lazy-loaded)
- Bun runtime with completions
- Python 3.9 user packages
- Homebrew-managed CLI tools (eza, fzf, etc.)
The scripts/run system provides:
- Filtering: Run specific script categories
- Dry-run mode: Preview operations without execution
- Modular execution: Each script in
runs/handles one setup aspect - Idempotent operations: Scripts can be safely re-run
- Edit configuration files in
.config/or root-level dotfiles - Test changes in current environment
- Commit changes to track configuration evolution
- Use
stow .to deploy changes if working from a different location
- Add configuration to
.config/[app-name]/ - Add package to
brew/Brewfileif needed - Create setup script in
scripts/runs/if complex setup required - Update
.stow-local-ignoreif files should not be symlinked
- Plugins defined via
speccalls ininit.lua - Plugin configurations in
lua/user/[plugin-name].lua - Experimental plugins in
lua/user/extras/ - Run
:Lazyin Neovim to manage plugins - LSP servers managed through Mason (
:Masoncommand)