audit + modernize dotfiles - #11
Merged
Merged
Conversation
A full pass over the dotfiles: prune outdated tooling, fix breaking
bugs, lock in declarative installs via a Brewfile, share editor configs
between VS Code and Cursor, and bring docs up to date.
Highlights:
* Fix breaking bugs in setup
- misc.sh: 7 broken `brew install` (raw) calls → `brew_install` helper
- browsers.sh: drop deprecated `homebrew/cask-versions` tap
- misc.sh: drop deprecated `homebrew/cask-fonts` tap
- vscode.sh: stray trailing colon (file now retired)
- Homebrew analytics opt-out → modern `HOMEBREW_NO_ANALYTICS=1`
* Brewfile (declarative installs)
- New top-level `Brewfile` (45 formulae, 29 casks, 3 MAS apps, 1 tap)
- Replaces 11 install scripts: browsers, cli_tools, misc, git, tmux,
gpg, compression_tools, image_tools, video_tools, web_font_tools,
misc_tools
- `src/os/installs/macos/brewfile.sh` runs `brew bundle`
- `justfile` adds `bundle`, `bundle-check`, `bundle-dump` recipes
- Adds: claude, chatgpt, block-goose, granola, linear-linear, ice,
mongodb-compass, postman, mole, fzf, ripgrep, bat, eza, fd,
zoxide, git-delta, direnv, gh, lazygit, just, awscli, terraform,
tflint, ruff, watchman, zellij, pnpm
- Removes: dozer, bartender, transmit, transmission, loom,
chrome canary, firefox dev/nightly, chromium, safari TP, adobe CC
* Vim → minimal, plugin-free
- Remove 33 phantom-submodule gitlink entries that lived without a
`.gitmodules` file and caused permanent `M` markers in `git status`
- vimrc shrunk from 740 → ~140 lines of sane defaults
- Drop minpac and all plugins; sources `~/.vimrc.local` at the end
* Shared VS Code + Cursor config
- New `src/vscode/{settings,keybindings}.json` + `snippets/`
- `link_vscode_configs.sh` symlinks both into each editor's User dir,
backing up any pre-existing real files
* Git hygiene
- Remove committed `name`/`email` (now lives in `~/.gitconfig.local`)
- Replace hardcoded `/opt/homebrew/bin/gh` with bare `gh`
- Add `[pull] rebase`, `[rerere]`, `[branch] sort`, `[fetch] prune`,
`[core] pager = delta`, `[interactive] diffFilter`, `[delta]`
* Shell config cleanup
- Move pnpm block from `bashrc` to `bash_exports` (idempotent)
- Add `zoxide`, `direnv`, `fzf` shell hooks (guarded on installation)
- Dedupe `ip` alias, trim `update` alias, fix `dc`/`dcc`
- Add `lg`/`gs`/`pn` aliases
* macOS preferences
- New `init.sh`: prompts for Full Disk Access before defaults writes
- `ui_and_ux.sh`: fix typos, add Stage Manager / widget hiding,
comment out destructive defaults (force hostname, force Bluetooth off)
- Remove dead Terminal.app theme files (Warp / Cursor user)
* Apple Silicon + Tahoe only
- `MINIMUM_MACOS_VERSION` 10.10 → 26.0 (Tahoe)
- homebrew.sh: drop arm64/x86_64 detection, hardcode /opt/homebrew
- settings.json: eslint.nodePath → /opt/homebrew/lib/node_modules
* Repo health
- Modernize tmux.conf (truecolor RGB, drop reattach-to-user-namespace)
- `.editorconfig` at repo root
- `.gitignore` updated for `.env*`, `.envrc`, `*.local`, `.backup.*`
- `renovate.json`: dependency dashboard, weekly schedule,
automerge for non-major Actions updates
- GitHub workflows: minimal permissions, branch-scoped triggers,
drop link-check from push (cron handles it)
- Rename `README.MD` → `README.md` and rewrite end-to-end
- Add missing `LICENSE.txt` (was referenced but never existed)
- Add `justfile` for one-line repo operations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A full pass over the dotfiles based on what's actually used today.
Net result: 76 files changed, ~1218 insertions / ~1598 deletions
(~380 lines smaller).
What changed
Fix breaking bugs in setup
The setup script had several breaks that meant it could no longer
complete cleanly on a fresh machine:
misc.sh: 7 brokenbrew install "Readable Name" "pkg" "--cask"calls (which tried to install packages literally named "Docker",
"MeetingBar", "Cursor", etc.) → switched to the
brew_installhelperbrowsers.sh: dropped the deprecatedhomebrew/cask-versionstap(removed Aug 2023). Chrome Canary / FF Dev/Nightly / Safari TP /
Chromium installs would all fail without this
misc.sh: dropped the deprecatedhomebrew/cask-fontstap(untapped Oct 2023; fonts now live in the main cask)
vscode.sh: stray trailing colon onprint_in_purple(file nowretired as VS Code moves into the Brewfile)
HOMEBREW_NO_ANALYTICS=1env var instead of the legacy git-configapproach
Brewfile (declarative installs)
Replaces 11 imperative install scripts with one root
Brewfile(45 formulae, 29 casks, 3 MAS apps, 1 tap).
Retired scripts:
browsers.sh,cli_tools.sh,misc.sh,git.sh,tmux.sh,gpg.sh,compression_tools.sh,image_tools.sh,video_tools.sh,web_font_tools.sh,misc_tools.sh.New
src/os/installs/macos/brewfile.shrunsbrew bundleagainstthe root Brewfile.
justfilegetsbundle,bundle-check,bundle-dumprecipes.Added (apps in active use, not previously managed): claude,
chatgpt, block-goose, granola, linear-linear, jordanbaird-ice (Ice),
mongodb-compass, postman, mole (Mac cleanup).
CLI quality of life: fzf, ripgrep, bat, eza, fd, zoxide,
git-delta, direnv, gh, lazygit, just, awscli, terraform, tflint,
ruff, watchman, zellij, pnpm.
Removed: dozer, bartender, transmit, transmission, loom, Chrome
Canary, Firefox Dev/Nightly, Chromium, Safari TP, Adobe CC.
Vim → minimal, plugin-free
The bulk of the "tracked files keep reappearing" complaint had a
real root cause: 22 plugin folders were tracked as git submodule
gitlinks but the repo had no
.gitmodules. Each plugincheckout drifting on disk showed up as
Mforever, with no way toresolve.
This PR removes all 33 phantom gitlink entries via
git update-index --force-remove(plaingit rmrefuses without.gitmodules), then physically deletes the directories. The vimrcshrinks from 740 → ~140 lines of plugin-free sane defaults, and
sources
~/.vimrc.localat the end. Rationale: day-to-day editinghappens in Cursor/VS Code; vim is for quick terminal edits and
doesn't need a plugin ecosystem.
Shared VS Code + Cursor config
New
src/vscode/directory holds a single sharedsettings.json,keybindings.json, andsnippets/.link_vscode_configs.shsymlinks them into both editors' User dirs and backs up any
pre-existing real files. Unknown keys (
cursor.*in VS Code,claudeCode.*in Cursor) are silently ignored by the editor thatdoesn't know them, so one shared file works.
Git hygiene
name/emailfromgitconfig— these nowlive in the (gitignored)
~/.gitconfig.local, matching the file'sown comment block warning
/opt/homebrew/bin/ghcredential helper withbare
gh[pull] rebase = true,[rerere],[branch] sort = -committerdate,[fetch] prune = true,[core] pager = delta+[delta]config blockShell config cleanup
bashrcintobash_exportswithan idempotent guard
zoxide,direnv,fzfshell integrations (only loadedif installed)
ipalias, trimmed theupdatealias of deadcomposer/gem commands, fixed
dc/dccto use moderndocker compose(v2)lg→lazygit,gs→git status,pn→pnpmmacOS preferences
init.shprompts for Full Disk Access beforedefaults writecalls (silently fails without it on modern macOS)
ui_and_ux.sh: fixed typos, added Stage Manager disable,desktop-widget hiding, click-to-reveal-desktop off
force Bluetooth off) so they don't auto-run on next setup
Terminal.app)
Apple Silicon + Tahoe only
MINIMUM_MACOS_VERSIONbumped from10.10→26.0(Tahoe)homebrew.sh: droppedarm64/x86_64detection, hardcoded/opt/homebrewsettings.json:eslint.nodePathupdated from/usr/local/lib/node_modules(Intel npm path) →/opt/homebrew/lib/node_modulesRepo health
tmux.conf:tmux-256color+ truecolorRGBoverrides;removed obsolete
reattach-to-user-namespaceshim.editorconfigat repo root.gitignore: added.env*,.envrc,*.local,.backup.*,Python/build artifacts, common editor dirs
renovate.json: enabled dependency dashboard, weekly schedule,semantic commits, automerge for non-major GitHub Actions updates,
timezone
America/New_Yorkpermissions:blocks,branch/PR-scoped triggers, dropped redundant link-check on every
push (the weekly cron handles it)
README.MD→README.md(case-sensitive on Linux runners)and rewrote it end-to-end: new "What's inside" tree, "Common
commands" section for
just, "Editor configs" section, updatedexamples
LICENSE.txt(was referenced in README, never existed)justfilewith one-line recipes:setup,install,bundle,prefs,link,link-editors,update,lint,checkTest plan
shellcheckpasses on all.shfilesmarkdownlintpasses on all.mdfilessetup.shexistjustfileexistsettings.json+keybindings.jsonparse asvalid JSONC
homebrew-core (
brew info --formula/--cask)$(...))$HOME/$PATHexpansions in changed filesbash_aliasesBrewfilegit config --file ... --listrenovate.jsonis valid JSONTo exercise on a fresh machine:
just setup(or, manually,bash src/os/setup.sh).