Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Brennan Spellacy's Dotfiles

Bootstrap a new machine

xcode-select --install          # if not already prompted
git clone https://github.com/<you>/dotfiles.git ~/code/dotfiles
cd ~/code/dotfiles
./setup.sh
exec zsh

setup.sh is idempotent — re-run it any time. See MIGRATION.md for the credentials and machine-local state that must be moved by hand.

Scope

This repo installs machine-level tooling and config only. Project dependencies (postgres, redis, docker, cloud CLIs, browser drivers, ...) belong in each project's own Brewfile — e.g. ~/code/patch/Brewfile — not here.

Structure

  • setup.sh — installs core tooling (via Homebrew + Brewfile) and symlinks configs into your home directory.
  • Brewfile — Homebrew bundle for CLI tools and casks.
  • MIGRATION.md — new-machine checklist for everything setup.sh can't automate.
  • git/
    • gitconfig — Git defaults + aliases; includes ~/.gitconfig.local for machine-specific overrides.
    • gitignore_global — global ignores.
    • gitattributes — global attributes (line-ending normalization).
  • zsh/ — Zsh config (zshenv, zshrc, aliases.zsh, functions.zsh).
  • config/ — XDG-style app configs (starship.toml, ghostty/config, zed/settings.json).
    • launchd/ — user launch agents. Copied (not symlinked) into ~/Library/LaunchAgents and bootstrapped by setup.sh.
  • toolchains/ — tool/runtime config (mise.toml, default-npm-packages).
  • scripts/ — one-off scripts (e.g. macOS defaults).
  • ai/ — agent instructions and configs (AGENTS.global.md, codex.config.toml, conductor.settings.toml, opencode.json).
    • User-level files are symlinked into $HOME by setup.sh (e.g. claude-settings.json~/.claude/settings.json).
    • Repo-level files for this repo live here too and are symlinked back to the root: claude-settings.local.json.claude/settings.local.json, claude-skills/.claude/skills/, conductor.settings.local.toml.conductor/settings.local.toml.

Notes

  • Ruby is not pinned globally. toolchains/mise.toml pins only Node; each project's .ruby-version drives the Ruby version via mise.

  • opencode comes from anomalyco/tap, which Homebrew treats as untrusted. setup.sh taps and trusts it before running brew bundle.

  • Global npm packages go in toolchains/default-npm-packages (symlinked to ~/.default-npm-packages) so they survive a Node version change.

  • ~/.ssh/allowed_signers is generated, not tracked. It is a trust list — it decides which keys git accepts as valid signers — and this repo is public, so it should not be editable by pull request. setup.sh rebuilds it from your GitHub-published signing keys (a public, unauthenticated endpoint), falling back to the local key when offline. Old keys keep verifying as long as they stay registered on GitHub; any manually added lines are preserved across regeneration.

  • Caps Lock is remapped to Escape by a launch agent (config/launchd/com.brennan.dotfiles.capslock-escape.plist) rather than System Settings, so it covers external keyboards too. hidutil remaps only last until reboot, hence the agent. To turn it off: launchctl bootout gui/$(id -u)/com.brennan.dotfiles.capslock-escape && hidutil property --set '{"UserKeyMapping":[]}' (and delete ~/Library/LaunchAgents/com.brennan.dotfiles.capslock-escape.plist so setup.sh doesn't reinstate it).

  • cmd-d toggles Do Not Disturb, set in scripts/macos_defaults.sh via macOS's own (normally unassigned) shortcut for it — symbolic hotkey 175, the one System Settings > Keyboard > Keyboard Shortcuts > Mission Control writes to. No hotkey daemon or Shortcuts.app detour needed.

    Because it's a system-wide hotkey it takes precedence over every app's own cmd-d: Ghostty's split-right, Zed's select-next-match, Chrome's Add Bookmark, Finder's Duplicate, "Don't Save" in save sheets. Change the combo by editing parameters in that script, or drop the binding with: defaults delete com.apple.symbolichotkeys AppleSymbolicHotKeys 175 followed by /System/Library/PrivateFrameworks/SystemAdministration.framework/Resources/activateSettings -u.

Helpers

  • uq — unquarantine a Homebrew-installed app or binary.
    • Examples: uq chromedriver or uq /Applications/SomeApp.app

About

Dotfiles

Resources

Stars

1 star

Watchers

0 watching

Forks

Used by

Contributors

Languages