This file provides Claude-specific guidance when working with this dotfiles repository.
For general project information, installation instructions, and usage details, see the README.
Before designing, writing, or editing any code — invoke the uphold-project-invariants skill. It
loads this repo's own docs/invariants/ and docs/standards/. This is in addition to the global
uphold-standards skill, not instead of it: that one carries portable engineering guidance, this
one carries what is true only here.
See README.md for the complete overview. Key points for Claude:
Current Active Structure:
- Installation scripts are in
features/install/zsh/(individual .zsh files) - Update scripts are in
features/update/zsh/ - Main setup script is
features/setup/setup.zsh - Configuration files are in
tools/{tool}/config/directories
Folder Structure
- Common functionality being built in
features/common/(bash modules for shared logic) - Tool-specific logic is in
tools/{tool}/folders - Feature-specific code (leveraging one or more tools) is in
features/{feature}/folders - Future main setup script will be
features/setup/setup.bash - Future main update script will be
features/update/bash/tools.bash - Note: These bash files are not yet functional or ready for use
Self-Contained Feature Modules (features/common/) - Under construction:
detection/- Machine and macOS detection logicdry-run/- Dry run utilitieserrors/- Error handlingpermissions/- Permission utilitiesprerequisites/- Installation prerequisites validationsymlinks/- Symlink managementtesting/- Testing utilities and test suite
Self-Contained Tool Modules (tools/{tool}/)
- See
tools/@newfor an example of the files in each folder - See
tools/README.mdfor an explanation of the feature folder approach - For brew formulae without config, see
tools/eza/ortools/logcli/as examples
Important for Git commits: Files in tools/claude/config/ are symlinked to ~/.claude/. To
commit changes to global Claude settings (like ~/.claude/CLAUDE.md), commit the dotfiles copy at
tools/claude/config/CLAUDE.md instead of trying to commit outside the repository.
The symlink creation logic is in features/update/symlinks.bash, invoked by
features/update/tools.bash and by the symlinks alias.
(features/install/zsh/deprecated/symlinks.zsh is deprecated and only still sourced by
features/setup/setup.zsh.)
When making changes to this repository:
- Verify file existence before referencing scripts or commands
- Use actual file paths from the repository structure
- Update all relevant README.md files after making any user-facing changes
- Update all relevant project-level CLAUDE.md files after clarifying any Claude-specific workflows
- The commands that check a change, and how to run what you changed, are in CONTRIBUTING.md. Read it before running anything, and run every check it lists before reporting a change as done.
- Run
symlinksalias to recreate all symlinks - Test individual scripts by sourcing them