Personal macOS-first dotfiles and bootstrap scripts.
- primary shell setup in
.zshrc - generated Powerlevel10k config in
.p10k.zsh - minimal legacy Bash fallback in
.bash_profile - Git, Vim, npm, tmux, and lftp config (plus a legacy
.screenrc) - Homebrew bundles for core, apps, and extras installs
setup.shto bootstrap a fresh machine
Run the base setup:
./setup.sh
With no bundle flags, setup.sh installs the core bundle and then interactively asks whether to install apps and extras.
Optional bundle flags:
./setup.sh --apps./setup.sh --extras./setup.sh --all
The script will:
- install Homebrew if needed
- install the base
Brewfile - optionally install
Brewfile.appsand/orBrewfile.extras - install Oh My Zsh
- install the
evalcacheplugin used by.zshrc - generate Bun completions at
~/.bun/_bun - install
vim-plug - optionally symlink the common dotfiles into
$HOME - install Vim plugins
- install the Rust stable toolchain if
rustupis available
If you opt in, setup.sh links:
.gitconfig.zshrc.p10k.zsh.gitignore_global.vimrc.npmrc.tmux.conf
If ~/.gitconfig.local does not already exist, setup.sh creates it with your Git identity and a commented includeIf example for folder-specific overrides.
These are intentionally not auto-linked right now:
.bash_profile(legacy fallback).screenrc(legacy reference).lftprc
- This repo is intentionally tuned for Apple Silicon macOS and assumes Homebrew lives at
/opt/homebrew. .p10k.zshis generated; usep10k configureif you want to rework the prompt.- Powerlevel10k is configured for Nerd Font glyphs;
Brewfile.appsinstallsfont-jetbrains-mono-nerd-font, but you still need to select it in your terminal profile. - Local editor defaults are
code -w; SSH sessions fall back tovim. - Shared Git behavior lives in repo-managed
.gitconfig; machine-specific identity and overrides live in~/.gitconfig.local. treeis provided via the aliaseza --tree.
If you install Brewfile.apps, JetBrains Mono Nerd Font is installed for you.
To make Powerlevel10k render correctly in iTerm2:
- open
iTerm2→Settings→Profiles→Text - enable the regular font picker
- choose
JetBrainsMono Nerd Font - open a new terminal tab/window
If icons still look wrong, run p10k configure and let it re-detect your terminal/font setup.
direnv— auto-load project env vars from.envrc; usedirenv allowafter creating or changing a file.fzf— fuzzy finder; common bindings areCtrl-Rfor history,Ctrl-Tfor files, andAlt-Cfor directories.zoxide— smarter directory jumping; usez <name>orzifor interactive selection.tmux— terminal multiplexer; with the Oh My Zsh plugin you get helpers liketl,ts <name>, andta <name>.shellcheck— shell linter; runshellcheck setup.sh .bash_profilewhen editing shell code.fd— a friendlierfind; tryfd fooorfd -t d src.delta— better Git diffs; it is configured as the default Git pager.yq—jq-style querying for YAML; useful for CI/config files.btop— system monitor; this is the preferred replacement forhtop.
vim-fugitivefor Git integration inside Vimvim-surroundandvim-repeatfor fast editing ergonomicseditorconfig-vimfor per-project editor settingsfzf.vimfor:Files,:Buffers, and:Rg
Useful mappings:
Ctrl-N— toggle NERDTreeCtrl-P— fuzzy-find files\b— list open buffers\rg— start an:Rgsearch\t— open a terminal split below the current window\a— ask tmux to split a new pane below for an agent/shell (when Vim is running inside tmux)
setup.sh now links .tmux.conf, which provides a small default config with:
- mouse support
- 5k lines of scrollback
- vi-style copy-mode keys
- 1-based window/pane numbering
- a simple bottom status line inspired by the legacy
screenconfig
Brewfile— core tooling plus must-have apps likeiterm2andrectangleBrewfile.apps— GUI apps you generally want, plus the JetBrains Mono Nerd Font for Powerlevel10kBrewfile.extras— optional fun/media/AI extras and extra apps likecursor
This split keeps the base install small, lets you skip Homebrew-managed GUI apps on corporate machines, and still makes it easy to layer in extras on personal machines.