This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This is a personal dotfiles repository that manages shell configuration, Neovim setup, tmux configuration, and custom scripts through symlinks to the home directory.
The repository uses a shell script to create symlinks from the dotfiles directory to the home directory:
./init.shWarning: This script will:
- Prompt for each dotfile before symlinking
- Delete existing files in
$HOMEif you choose to overwrite - Skip
.git,.gitignore, and.DS_Storeautomatically
.zshrc- Main zsh configuration with vi mode, history, prompt (vcs_info), and plugin loading.zsh/envs.zsh- Environment variables (gitignored).zsh/aliases.zsh- Shell aliases.zsh/functions.zsh- Custom shell functions.zsh/plugins/- Zsh plugins (fast-syntax-highlighting, zsh-autosuggestions)
Key Zsh Features:
- Vi mode with custom cursor shapes (block in normal, beam in insert)
- Large history (120M commands) with immediate append and sharing
- Custom prompt with git branch info via vcs_info
- Loads nvm, pyenv, and custom PATH extensions
Important Aliases:
vim→nvimdev→ cd to~/Developer/dat→ bat with GitHub theme
Useful Functions (see .zsh/functions.zsh):
listfuncs- List all available functionsprettyjson- Pretty print JSON with batjsontondjson- Convert JSON array to newline-delimited JSONconverttocsv/dnbtoynab- Financial data convertersmetatags/linktags- Extract meta/link tags from URLs
.tmux.conf- Tmux configuration with custom keybindings and styling.tmux/plugins/tmux-resurrect- Session persistence plugin
Key Tmux Bindings:
- Prefix:
Ctrl+Space |- Split horizontal-- Split verticalF3- Enter copy mode (vi bindings enabled)Alt+Arrow- Resize panes (repeatable with prefix)- Status bar at top, color239 theme
- Mouse support enabled
- Auto-save/restore sessions on close/start
.config/nvim/- Neovim configuration (migrating from v1.0 to v2.0).config/nvim/init.lua- Main config entry point.config/nvim/lua/plugins.lua- Packer plugin management.config/nvim/lua/settings.lua- Editor settings
IMPORTANT: The .config/nvim/ directory should NOT contain a .git directory. It was originally cloned from NvChad but should be tracked directly in this repository, not as a submodule.
Neovim Architecture:
- Uses Packer for plugin management
- Mason for LSP server auto-installation
- Leader key:
Space - LSP servers: ts_ls, eslint, emmet_ls, tailwindcss, html, cssls, biome
- Auto-formatting with Prettier and Biome on save
- Copilot integration for completion
Key Neovim Bindings (see .config/CLAUDE.md for full details):
<leader>w- Save<leader>nn- Toggle NvimTree<leader>ff- Telescope find files<leader>fF- Telescope live grep<leader>r- LSP renamegd- Go to definition
bin/- Executable scripts in PATHmacos-init- macOS system initialization scriptpassword- Password utilityarchive- Archive utility
scripts/- Additional scripts in PATH- AppleScript utilities for Mail, Safari
- Video/image processing helpers
.flexget/- FlexGet RSS/torrent automation.flexget/config.yml- Main configuration (references variables.yml).flexget/variables.yml- Credentials and secrets (gitignored)
FlexGet is configured to automatically download TV series from RSS feeds to Transmission.
When modifying Neovim configuration:
- Never commit a
.gitdirectory inside.config/nvim/- if one appears, remove it withrm -rf .config/nvim/.git - The
.config/nvim/.gitignorecontrols what's tracked:- Tracks:
custom/,after/,ftplugin/,syntax/,lazy-lock.json - Ignores:
plugin/(generated),spell/*.add.spl,.luarc.json
- Tracks:
- Plugin configurations auto-compile on save of
plugins.lua - Keep
.config/CLAUDE.mdupdated with architecture changes
The following directories are added to PATH (in .zshrc):
~/.local/bin~/scripts(symlinked from this repo)~/.dotnet- Pyenv shims
- NVM
- Kebab case for file names (as per user's global CLAUDE.md)
- Zsh config files use
.zshextension - Lua files for Neovim use
.luaextension
- Sensitive files gitignored:
.zsh/envs.zsh,.flexget/variables.yml - Vim vs Neovim:
vimalias points tonvim, always use Neovim - Tmux sessions: Auto-restored on tmux server start via resurrect plugin
- Symlink workflow: All dotfiles are symlinked, not copied, so edits in
~affect this repo