This file provides guidance to AI agents like Claude Code when working with code in this repository.
Personal macOS dotfiles with comprehensive setup automation. All scripts are idempotent and designed primarily for macOS. Uses 1Password for secure credential management.
linkme/- Files symlinked to home directory (shell config,.zshrc,.aliases,.functions,.exports, app configs)copyme/- Files copied to home directory (Library preferences that don't work as symlinks)injectme/- Templates for local user-specific config injectionscripts/- Installation and configuration scriptsapps.toml- Central catalog of all apps with installation metadata
make check # Run all linters in parallel - run before committing
make lint-shellcheck # Shell script static analysis
make lint-shfmt # Shell formatting
make lint-ruff # Python linting
make lint-ruff-format # Python formatting
make lint-ty # Python type checking
make lint-rumdl # Markdown linting
make lint-tombi # TOML linting/formatting
make lint-yamllint # YAML linting
make lint-trufflehog # Secret detection
make lint-checkov # Infrastructure securitymake test-app # Run scripts/app.py unit testsAlways run make check before committing to ensure CI will pass.
make check includes make test-app, which runs the scripts/app.py unit tests.
app add <name> <source> [--group <group>] [--description <text>] # Add app to apps.toml and install
app remove <name> # Remove app from apps.toml and uninstall
app list # List all apps
# Sources: cask, formula, mas, uv
# Use --no-install to skip installation./run.sh # Full setup (Homebrew, dotfiles, apps, macOS settings)
bootstrap # Run bootstrap.sh
aerials # Download/manage macOS Aerial wallpapersuv run scripts/aerials.py # Run with inline dependencies
uv run scripts/app.py # CLI managed via shell function `app`bootstrap.sh- Entry point for fresh installs (downloads repo, runsrun.sh)run.sh- Orchestrates full setup: Homebrew β dotsync β macos β install β dock β aerials β code β localapps.toml- TOML file listing all apps with source (cask/formula/mas/uv) and categorylinkme/.functions- Shell functions includingapp,aerials,bootstraplinkme/.aliases- Shell aliases (lsβeza, navigation shortcuts, etc.)
PR titles are validated by action-semantic-pull-request using conventional commits format:
type(scope): description
- Types:
feat,fix,chore,refactor,docs,test,ci,perf,build - Scope: optional, in parentheses (e.g.,
apps,deps) - Description: lowercase, no period at end
- PR body: keep it short (1-3 bullets), lowercase
- Examples:
feat(apps): add docker,fix: bad regex for csv diff,chore: update config
- Shell scripts source
bash_traceback.shfor better error reporting - Python scripts use inline script dependencies (
# /// script) foruv runcompatibility - Apps in
apps.tomlfollow format:name = "source" # Description - Mac App Store apps use numeric IDs as keys
- Custom Homebrew taps use
tap/formulaformat (e.g.,martimlobao/fonts/font-neacademia)