Personal configuration files managed by Dotbot.
./install assumes several prerequisites it does not install itself (Homebrew,
Xcode CLT, Rosetta, App Store sign-in, 1Password SSH agent, auth tokens).
scripts/bootstrap.sh handles them and then runs ./install:
# 1. Xcode Command Line Tools (gives you git)
xcode-select --install
# 2. Clone over HTTPS (SSH isn't wired up yet)
git clone https://github.com/amtagrwl/dots ~/git/dots
cd ~/git/dots
# 3. Bootstrap: Rosetta + Homebrew + submodules + ./install + guided auth
./scripts/bootstrap.shThe bootstrap pauses for the steps that can't be scripted:
- App Store — sign in, then install Amphetamine and Bear from the App Store GUI
(most reliable). The
maslines only succeed if you're signed in and already own the apps — otherwisemas installfails with a misleadingsudo: a terminal is required. - 1Password — sign in; optionally enable Settings → Developer → Use the SSH
agent + Integrate with 1Password CLI for human key flows. Agent tooling
does NOT depend on either: install the WorkspaceAgents service-account token
at
~/.config/agents/op-token(chmod 600; from the 1Password item "Service Account Auth Token: WorkspaceAgents") for explicit unattendedopcommands outside coding-agent startup. Theclaude/codexwrappers and GBrain proxy inherit only already-exported final credentials; they never query 1Password at CLI/MCP startup, so missing optional MCP credentials do not block the coding CLI. - Contexts — after 1Password CLI sign-in, bootstrap retrieves the signed
Contexts Licensedocument from theAgentsvault and imports it. The license never lives in this repository. Re-run manually with./scripts/ensure_contexts_license.sh. - gh / gcloud —
gh auth login,gh auth setup-git,gcloud auth login,gcloud auth application-default login.
Keep this repo on HTTPS so unattended agent automation never blocks on key
approval (gh auth setup-git handles credentials):
git remote set-url origin https://github.com/amtagrwl/dots.gitopenclaw / hermes / local-LLM tooling are intentionally not in this repo — install them per-machine as needed.
- Clone the repository.
- Run the install script:
./install(This will link configs and install Brew packages fromBrewfile)
The install also makes the standard macOS screenshot shortcuts copy images to
the clipboard instead of writing files to the Desktop. The setting is managed
by scripts/macos_screenshot_settings.sh.
Use this for MacBook → iMac Hermes TUI work. tmux keeps the remote Hermes
session alive; mosh makes the interactive terminal survive Wi-Fi drops,
sleep/wake, and IP changes; Tailscale keeps the path private.
Installed by Brewfile:
tailscale— tailnet access +tailscale ip/tailscale pingdiagnosticsmosh— resilient UDP interactive shell; uses SSH only for bootstraptmux— persistent remote session (hermessession name by default)
From the MacBook after ./install / new shell:
himacEquivalent explicit command:
mosh imac
# or for the managed Hermes tmux session:
mosh --server=/opt/homebrew/bin/mosh-server imac -- /opt/homebrew/bin/tmux start-server \; source-file ~/.tmux.conf \; new-session -A -s hermesDiagnostics before first use or after network changes:
./scripts/check_mosh_tailscale.sh imacFirst-run MacBook checklist if diagnostics show missing tools or SSH host-key errors:
cd ~/git/dots
brew bundle install --file Brewfile
./install # writes the iMac SSH block (agents key, not 1P agent)
ssh-keygen -t ed25519 -f ~/.ssh/agents_ed25519 -N "" # then append the .pub (with from="100.64.0.0/10") to iMac ~/.ssh/authorized_keys
ssh imac # accept the iMac host key onceExpected iMac host-key fingerprints:
- ED25519:
SHA256:Af4RDTYJelvGTskwG2KuE1LtzQrRBnDkFTYGTbX67Ns - RSA:
SHA256:GYgJ2cZ9Iod5vJzEVQ8LdxRrk1csrQ3ib8wkK/WlwSo - ECDSA:
SHA256:RN5VR+5AvHHZoXvtz0/jY5I7z7fF/zNQXmOIXtBayFg
If the iMac tailnet name or user differs, set overrides in ~/.zshrc.local:
export IMAC_TAILSCALE_HOST=imac
export IMAC_TAILSCALE_USER=amtagrwl
export HERMES_TMUX_SESSION=hermesIf a dropped TUI leaves Ghostty printing mouse escape sequences like ;151;36M, run:
fixtermCopying text:
~/.tmux.confkeeps tmux mouse mode off by default, so normal Ghostty drag/select works in tmux panes.- If Hermes or another full-screen TUI captures the mouse anyway, hold Shift while dragging to force Ghostty native selection.
- tmux keyboard copy still works:
Ctrl-b [enters copy-mode, select text, thenEnterorycopies to tmux/terminal clipboard when supported.
Notes:
-
Tailscale works with mosh: mosh's SSH bootstrap and encrypted UDP session both ride the tailnet. This avoids public UDP port-forwarding.
-
If mosh starts but shows
Nothing received from server on UDP port ..., allow the iMac mosh server through macOS Application Firewall:cd ~/git/dots ./scripts/allow_mosh_firewall.sh
-
moshis for interactive shells/TUIs only. Keep using SSH for port forwarding,scp,rsync, and Git.
This setup uses a curated Brewfile. Edit it by hand — do not run
brew bundle dump (it wipes the section grouping, the inline comments, the
install-on-demand block, and the # Pruned list, and re-adds everything you
deliberately removed).
- Add a package you actually use: add the
brew/cask/mas/vscodeline in the right section with a short "why" comment. - Remove a package: delete its line and move it into the
# Prunedblock so it isn't reinstalled by accident. - Verify it parses:
brew bundle list --file Brewfile. - Install missing packages without upgrading everything:
./installusesbrew bundle install --file Brewfile --no-upgradeby design. Usebrew bundle upgrade --file Brewfileorbrew upgrade <name>only when you intentionally want upgrades. - Commit:
git add Brewfile git commit -m "feat: add <package/app name> to Brewfile" git push
See AGENTS.md → How to maintain for the full convention.
- Update Dotbot submodule to latest version
- Configure Zsh (
~/.zshrc)- Add PATH modifications
- Set up
ezaaliases forls,ll - Add other useful aliases (grep, hist, wget)
- Add
mkcdfunction - Enable
AUTO_CD
- Set up Brew package management (
Brewfile) - Review and potentially link other config files (e.g.,
tmux.conf,profile?) - Clean up unused files (bash configs, tmux installer script?)
- Configure Git settings (
.gitconfig_dotfiles, ensure include in~/.gitconfig) - Review installed Brew packages & configure:
- Set up
starshipprompt (config file +zshrcinit) - Verify/Configure
zsh-autocomplete(check ifzshrcsourcing needed) - Add manual step reminder for
gh auth login(seescripts/bootstrap.sh)
- Set up
- Configure VS Code/Cursor settings (
settings.json,keybindings.json)- Add files to repository (
config/vscode/) - Review existing settings & extensions (remove unused, consolidate e.g. Ruff, remove Copilot, review IntelliCode)
- Review Vim extension settings/keybindings specifically
- Add Dotbot links for
settings.jsonandkeybindings.json(to Cursor config path) - Automate extension installation (Brewfile
vscodelines;brew bundleauto-detects the Cursor CLI)
- Add files to repository (
- Configure global Ruff settings (
~/.config/ruff/ruff.toml)- Create
config/ruff/ruff.tomlin repository - Add Dotbot link
- Create