Personal macOS dotfiles. Bootstraps a fresh machine with the tools, shell, terminal, window manager, and editor I use day-to-day, then symlinks every config in files/ to the matching path under $HOME.
This repo is shared as a reference; clone, fork, or just lift bits that are useful. macOS only.
⚠️ bootstrap.shwill silently replace any existing dotfiles in$HOME(.zshrc,.tmux.conf,.bash_profile, …) with symlinks into this repo. If you already have configs you care about, back them up before running.
git clone https://github.com/chiply/.files.git ~/.files
cd ~/.files
# optional: set this if you want the signal-cli LaunchAgent installed.
# without it, the signal-cli block is skipped silently.
export SIGNAL_PHONE="+15551234567"
./bootstrap.shThe script asks for your sudo password upfront, then runs unattended for ~30 minutes. It installs Xcode CLI tools, Homebrew, and a long list of CLI utilities and language toolchains.
- Shell: zsh + zinit for plugins, starship prompt, atuin for shared shell history
- Terminal: Ghostty with cursor shaders, plus Nerd Fonts (JetBrains Mono Nerd Font, Terminess, Terminus)
- Multiplexer: tmux + tmux-powerline, tmuxinator, TPM (Tmux Plugin Manager) and a curated plugin list
- Window manager / status bar: AeroSpace, simple-bar (with a customised bottom bar), JankyBorders
- Editor: Emacs 31 (via
emacs-plus@31) configured by zetta.d, with TeX Live (dvipng/dvisvgm) and MathJax fororg-latex-preview.install_emacs_distros.shcan additionally install Doom / Spacemacs / Chemacs side-by-side. - Languages: pyenv (3.10 / 3.11 / 3.12), Poetry, uv, nvm + Node, language servers (json, eslint, copilot, svelte)
- Misc CLI: AWS CLI v2,
gh,k9s(with catppuccin skins),bat,fzf,ripgrep,eza,jq,lazygit, and more — full list infiles/.config/Brewfile - Background services: signal-cli daemon (opt-in via
$SIGNAL_PHONE), a wallpaper rotator, and apm2-managed simple-bar focus watcher
.files/
├── bootstrap.sh # main installer
├── main.py # symlinks files/* -> ~/*
├── install_emacs_distros.sh # optional: install Doom/Spacemacs/Chemacs side-by-side
├── files/ # everything in here is symlinked to $HOME
│ ├── .zshrc, .tmux.conf, .aerospace.toml, ...
│ └── .config/Brewfile # full package list
├── ghostty/config # symlinked separately into Application Support
└── LICENSE
main.py walks files/ and creates ln -s -f symlinks at the matching paths under $HOME. Re-run it any time you add a new dotfile.
bootstrap.sh will:
- create
~/.localsecrets,~/.tokens, and (via the Emacs config) expect~/.private.el— these hold local secrets and are never committed - clone
zetta.dto~/.zetta.dfor the Emacs setup - install LaunchAgents for
signal-cliand the wallpaper rotator - create
~/Wallpapersand~/Screenshots - run
defaults writefor Shottr screenshot preferences - install simple-bar into
~/Library/Application Support/Übersicht/widgets/
If any of that isn't what you want, read through bootstrap.sh (it's a single linear script) and comment out the bits you'd rather skip before running.
- Packages: edit
files/.config/Brewfileand re-runbrew bundle --file=files/.config/Brewfile - Shell:
files/.zshrcis the entry point; aliases live infiles/.aliases/ - Tmux:
files/.tmux.conf, themes underfiles/.tmux/themes/. Notes on the setup are in TMUX.md. - Tmuxinator projects:
files/.config/tmuxinator/*.yml
If you fork this repo, the parts you'll most likely want to change before running:
- The
git clone https://github.com/chiply/.zetta.d.gitline inbootstrap.sh— that's my Emacs configuration. Point it at your own, or comment out the entire emacs section if you don't want Emacs. - The Quick start clone URL above.
- Tmuxinator project files under
files/.config/tmuxinator/reference my project paths.
After the initial bootstrap, to pull in new dotfiles or package additions:
cd ~/.files
git pull
python main.py # re-symlink anything new
brew bundle --file=files/.config/Brewfile # install new brews- Drop the file under
files/at the path you want it to live under$HOME(e.g.files/.config/foo/bar.toml→~/.config/foo/bar.toml). - Run
python ~/.files/main.pyto create the symlink.
- macOS only. Developed on Apple Silicon; Intel should mostly work (
/opt/homebrewand/usr/localare both onPATH) but isn't actively tested. bootstrap.shis idempotent for most steps but isn't guaranteed safe to run on a heavily-customised existing machine — it will overwrite symlinks and dotfiles under$HOME.- The Emacs config (
zetta.d) lives in its own repo and has its own footprint (~270 package configurations, devdocs, tree-sitter binaries). If you only want the shell/tmux setup, comment out the emacs section near the bottom ofbootstrap.sh. fetch_mail.shandfiles/.newsrc*are gitignored — those are personal to me and aren't part of the published config.
MIT — see LICENSE.