Skip to content

Commit 0ae3464

Browse files
committed
Improve README setup and portability docs
1 parent 830c4df commit 0ae3464

File tree

1 file changed

+39
-8
lines changed

1 file changed

+39
-8
lines changed

README.md

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,21 @@ One repo to carry an entire development environment between machines. Everything
1616

1717
---
1818

19+
### Quick Start
20+
21+
```bash
22+
xcode-select --install
23+
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply Braden1996
24+
```
25+
26+
First apply can take a few minutes on a fresh machine because it may install Homebrew, Brew packages, and `mise` runtimes.
27+
28+
### Design Goals
29+
30+
- **Fast shell startup** — cache generated init for `starship`, `fzf`, and `zoxide`, prefer `mise` shims over full shell hooks, and keep shell config modular.
31+
- **Portable between laptops** — detect Homebrew prefix dynamically, template only the parts that actually vary by machine, and route work Git identity by remote org instead of hardcoded checkout paths.
32+
- **Keep local state local** — SSH host config, auth state, generated keys, and other machine-bound setup stay outside the tracked repo.
33+
1934
### New Machine Setup
2035

2136
#### Prerequisites
@@ -59,7 +74,7 @@ You'll be prompted for these values (stored locally, never committed):
5974

6075
- **Homebrew** is installed if missing (with Apple Silicon detection)
6176
- **Packages** are installed via Brewfile — shell tools, editors, `mise`, `biome`, `jq`, 1Password CLI, Ghostty
62-
- **Runtimes** are installed via `mise` using the global Node/Python defaults
77+
- **Runtimes and global tools** are installed via `mise` using the global Node/Python/Biome defaults
6378
- **Configs** are templated and written to `~` — git, zsh, fish, starship, editors, terminal, tmux
6479
- **TPM** (tmux plugin manager) is cloned if not present
6580
- **Post-setup checklist** runs and flags anything that still needs manual attention
@@ -97,13 +112,21 @@ Then re-run `chezmoi init` to set the key ID in your config.
97112
- **Neovim plugins** — open nvim and run `:PlugInstall`
98113
- **SSH config** — keep `~/.ssh/config` local-only and unmanaged by chezmoi
99114

100-
#### 5. Verify
115+
#### 5. What stays local
116+
117+
- **SSH host config**`~/.ssh/config` is intentionally unmanaged so work- and machine-specific hosts do not leak into the repo
118+
- **Auth state**`op signin`, SSH agent state, and GPG agent state remain local to the machine
119+
- **Secrets and keys** — private keys are never stored in the repo; only public identifiers like GPG key IDs are prompted into local chezmoi data
120+
- **Fonts and app state** — fonts, editor extensions, and login sessions still need a one-time local install/sign-in
121+
122+
#### 6. Verify
101123

102124
```bash
103125
ssh -T git@github.com # SSH works
104126
echo "test" | gpg --clearsign # GPG signing works
105127
zsh-check-deps # all tools installed
106128
fish-check-deps # fish prompt/tooling dependencies installed
129+
chezmoi verify # applied files match the target state
107130
```
108131

109132
---
@@ -112,7 +135,7 @@ fish-check-deps # fish prompt/tooling dependencies installed
112135

113136
<table>
114137
<tr><td><b>Shell</b></td><td>zsh, fish, antidote, starship prompt, fzf, zoxide, bat, eza, yazi</td></tr>
115-
<tr><td><b>Editor</b></td><td>cursor (primary), neovim, zed</td></tr>
138+
<tr><td><b>Editor</b></td><td>Cursor (primary), neovim, zed</td></tr>
116139
<tr><td><b>Terminal</b></td><td>ghostty, alacritty, iterm2</td></tr>
117140
<tr><td><b>Git</b></td><td>gpg signing, graphite, conditional work includes, aliases</td></tr>
118141
<tr><td><b>Tmux</b></td><td>tmux + TPM, dracula theme</td></tr>
@@ -160,6 +183,12 @@ Catppuccin colors, bat-powered preview windows, fzf-tab for completions, Ctrl+R
160183
Core: zephyr (prompt, completion). Oh-My-Zsh: git, magic-enter, extract, sudo. Deferred: autosuggestions, autopair, you-should-use, forgit, fast-syntax-highlighting. Atomic bundle regeneration prevents race conditions.
161184
</details>
162185

186+
<details>
187+
<summary><b>Fish without a plugin manager</b></summary>
188+
<br/>
189+
Fish uses native <code>conf.d</code> autoloading plus cached init output for <code>starship</code>, <code>fzf</code>, and <code>zoxide</code>. Custom helpers and Nx completions live in-repo instead of depending on a runtime plugin manager.
190+
</details>
191+
163192
<details>
164193
<summary><b>1Password integration</b></summary>
165194
<br/>
@@ -175,7 +204,7 @@ Template validation via chezmoi, shellcheck linting (SC1090/SC1091 excluded), JS
175204
<details>
176205
<summary><b>Dependency checker</b></summary>
177206
<br/>
178-
Run <code>zsh-check-deps</code> to verify required tools (starship, fzf) and optional ones (eza, bat, yazi, zoxide, antidote) with color-coded output and install hints.
207+
Run <code>zsh-check-deps</code> or <code>fish-check-deps</code> to verify required tools (starship, fzf, mise) and optional ones (eza, bat, yazi, zoxide) with install hints.
179208
</details>
180209

181210
### Structure
@@ -193,11 +222,12 @@ Run <code>zsh-check-deps</code> to verify required tools (starship, fzf) and opt
193222
├── dot_tmux.conf # tmux config
194223
├── dot_bashrc # bash fallback
195224
├── dot_profile # POSIX profile
225+
├── dot_local/bin/ # lightweight wrappers (ghostty-fish, corepack shims)
196226
├── empty_dot_hushlogin # suppress login banner
197227
├── run_once_before_*.sh.tmpl # homebrew + package bootstrap
198228
├── run_once_after_*.sh.tmpl # post-apply setup + checklist
199229
├── dot_config/
200-
│ ├── fish/ # fish config (prompt, bindings, wrappers)
230+
│ ├── fish/ # fish conf.d, functions, completions
201231
│ ├── zsh/ # modular zsh configs (00-99)
202232
│ │ ├── 00-path.zsh # PATH management
203233
│ │ ├── 10-options.zsh # shell options & history
@@ -208,7 +238,7 @@ Run <code>zsh-check-deps</code> to verify required tools (starship, fzf) and opt
208238
│ │ ├── 70-keybindings.zsh # Ctrl+y, arrow keys
209239
│ │ └── 99-local.zsh.tmpl # machine-specific
210240
│ ├── zed/settings.json.tmpl # zed editor (biome, catppuccin)
211-
│ ├── ghostty/config # ghostty (catppuccin, blur)
241+
│ ├── ghostty/config.tmpl # ghostty (catppuccin, blur, wrapper command)
212242
│ ├── alacritty/alacritty.yml # alacritty (dracula)
213243
│ ├── iterm2/Default.json # iterm2 profile
214244
│ ├── starship.toml # prompt (catppuccin palette)
@@ -227,9 +257,10 @@ Run <code>zsh-check-deps</code> to verify required tools (starship, fzf) and opt
227257
chezmoi update # pull latest changes and apply
228258
chezmoi diff # preview what would change
229259
chezmoi apply # apply without pulling
230-
chezmoi edit ~/.zshrc # edit zsh entrypoint
260+
chezmoi verify # confirm target and destination still match
261+
chezmoi edit ~/.zshrc # edit zsh entrypoint
231262
chezmoi edit ~/.config/fish/config.fish # edit fish entrypoint
232-
chezmoi add ~/.config/foo/bar # start managing a new file
263+
chezmoi add ~/.config/foo/bar # start managing a new file
233264
chezmoi cd # cd into the source directory
234265
chezmoi init # re-run prompts (e.g. after generating a GPG key)
235266
```

0 commit comments

Comments
 (0)