My personal dot files.
My day-to-day development environment on macOS:
- Shell -- zsh with oh-my-zsh, fish-style abbreviations (zsh-abbr),
autosuggestions, and syntax highlighting (
zshrc,zsh-abbr/) - Terminal & workspaces -- cmux with its bundled
Ghostty engine: per-project workspaces, panes, and the
start smilelauncher (cmux/,ghostty/) - Editor -- Neovim, mostly for small edits and commit messages (
nvim/) - macOS hotkeys -- Hammerspoon for app launching and window management
(
hammerspoon/) - Language runtimes -- asdf-managed Ruby, Node.js, and Python
Steps are in the order to run them on a fresh machine.
Everything below installs through Homebrew (this also
installs the Xcode Command Line Tools, which provide git for the next step).
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Requires a GitHub SSH key.
git clone git@github.com:lucasprag/.config.git ~/.configThe shell setup uses oh-my-zsh with zsh-abbr (fish-style abbreviations), zsh-autosuggestions, and zsh-syntax-highlighting.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
brew install zsh-autosuggestions zsh-syntax-highlighting
# zsh-abbr as an oh-my-zsh custom plugin (zshrc sources it from this path)
git clone --recurse-submodules https://github.com/olets/zsh-abbr ~/.oh-my-zsh/custom/plugins/zsh-abbr
ln -sf ~/.config/zshrc ~/.zshrc
chsh -s /bin/zshNotes:
- abbreviations are auto-loaded from
~/.config/zsh-abbr/user-abbreviations - secrets (DD/Metabase/Slack tokens etc.) live in
~/.secret.zsh-- NOT committed
cmux bundles the Ghostty
terminal engine, so there is no separate Ghostty install. Both configs are
read directly from ~/.config/cmux and ~/.config/ghostty (the ghostty
config drives cmux's embedded terminal) -- no symlinks needed.
brew install --cask cmuxasdf manages the language runtimes I code
in: Ruby,
Node.js, and
Python. zshrc already puts
the asdf shims on the PATH.
brew install asdfThen install only the languages the machine needs.
asdf plugin add ruby
asdf install ruby latest
asdf global ruby latestasdf plugin add nodejs
asdf install nodejs latest
asdf global nodejs latest
# pnpm
npm install -g pnpm
asdf reshim nodejsLatest 3 and latest 2, both available globally (python is 3, python2
resolves via the fallback version).
asdf plugin add python
# latest regular 3.x (skips the free-threaded `t` builds, which `latest` resolves to)
PY3="$(asdf list all python | grep -E '^3(\.[0-9]+)+$' | tail -1)"
asdf install python "$PY3"
asdf install python latest:2
asdf global python "$PY3" latest:2brew install neovimPlugins are managed by lazy.nvim, which
installs itself on first launch. Then follow the instructions in nvim/README.md.
Hammerspoon provides the app-launcher and window-management hotkeys.
ln -s ~/.config/hammerspoon/init.lua ~/.hammerspoon/init.lua# make typing great again -- re-pairing the bluetooth keyboard is required to make it work
defaults write -g InitialKeyRepeat -int 13
defaults write -g KeyRepeat -int 1
# after installing vscode. Restart vscode.
defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false- fzf (Ctrl-R history, Ctrl-T files, the
kpprocess killer) - Powerline fonts
Once everything is set up, start smile (defined in zshrc) opens all the
smile workspaces via the cmux CLI.