Dotfiles and config for macOS. Managed via symlinks into this repo.
blut-setup/
├── ghostty/ # Ghostty terminal config
│ └── config
├── zsh/
│ ├── .zshrc # Main shell config (interactive)
│ ├── .zshenv # Sourced by every zsh; mise shims fallback for non-interactive shells
│ └── config/ # Modular zsh config (aliases, exports, plugins, fzf-tab)
├── mise/
│ └── config.toml # mise tool versions + global npm: CLIs (codex, omc, …)
├── yabai/
│ └── .yabairc # Yabai window manager
└── vscode/ # VS Code settings
This assumes macOS with Zsh as your login shell.
- Git (Xcode Command Line Tools)
xcode-select --install || true- Homebrew
Install from https://brew.sh, then verify:
brew --version- Clone and init submodules (required for
fzf-tab)
cd "$HOME"
git clone https://github.com/blutarche/blut-setup.git
cd blut-setup
git submodule update --init --recursive- Install CLI dependencies
brew update
brew install antidote starship zoxide fzf atuin mise navi thefuck fd fastfetch eza bat ripgrep lazygit- Apply symlinks (so changes apply immediately)
cd /path/to/blut-setup
ln -sf "$(pwd)/zsh/.zshrc" ~/.zshrc
ln -sf "$(pwd)/zsh/.zshenv" ~/.zshenv
mkdir -p ~/.config
ln -sf "$(pwd)/zsh/config" ~/.config/zsh
mkdir -p ~/.config/mise
ln -sf "$(pwd)/mise/config.toml" ~/.config/mise/config.toml
mise trust "$(pwd)/mise/config.toml" # mise resolves the symlink to its real path; trust it once
ln -sf "$(pwd)/yabai/.yabairc" ~/.yabairc
mkdir -p "$HOME/Library/Application Support/com.mitchellh.ghostty"
ln -sf "$(pwd)/ghostty/config" "$HOME/Library/Application Support/com.mitchellh.ghostty/config"- Restart your shell
exec zsh -lecho "=== Symlinks ===" && \
for link in ~/.zshrc ~/.zshenv ~/.config/zsh ~/.config/mise/config.toml ~/.yabairc; do
[[ -L "$link" ]] && echo "✓ $link -> $(readlink "$link")" || echo "✗ $link (not a symlink)"
done && \
[[ -L "$HOME/Library/Application Support/com.mitchellh.ghostty/config" ]] && \
echo "✓ Ghostty config -> $(readlink "$HOME/Library/Application Support/com.mitchellh.ghostty/config")" || \
echo "✗ Ghostty config (not a symlink)"This repo contains user settings at vscode/settings.json. Cursor supports the same format.
mkdir -p "$HOME/Library/Application Support/Cursor/User"
# optional backup
[ -f "$HOME/Library/Application Support/Cursor/User/settings.json" ] && \
cp "$HOME/Library/Application Support/Cursor/User/settings.json" \
"$HOME/Library/Application Support/Cursor/User/settings.json.bak.$(date +%Y%m%d-%H%M%S)"
cp "$(pwd)/vscode/settings.json" \
"$HOME/Library/Application Support/Cursor/User/settings.json"- Theme:
Catppuccin Mocha - Formatter:
esbenp.prettier-vscode
Install them via Cursor’s Extensions UI.
The Zsh config supports both Homebrew locations:
- Apple Silicon:
/opt/homebrew - Intel:
/usr/local
Most failures are missing dependencies. Ensure these are installed:
brew install antidote starship zoxide fzf atuin mise navi thefuck fd fastfetchyabai scripting addition requires SIP changes and manual steps (see yabai docs). You can still symlink ~/.yabairc now and enable later.
- Symlinks: SYMLINKS.md
- zsh: Antidote, Starship, Zoxide, fzf, Atuin, Mise, Navi, TheFuck
- yabai: Requires SIP parts disabled and
yabai --load-safor scripting addition - ghostty: Terminal emulator