This repository contains my personal macOS dotfiles configuration using GNU Stow for symlink management.
- Multi-terminal Support: WezTerm, Ghostty, Alacritty configurations
- Window Management: AeroSpace, Yabai, Rectangle, Hammerspoon
- Custom Status Bar: SketchyBar with modular plugins
- Shell Configuration: ZSH with Oh-My-Zsh and Powerlevel10k
- Development Tools: Git, tmux, Vim/Neovim, various CLI tools
- Input Customization: Karabiner-Elements with language switching
Ensure you have the following installed:
# Install Homebrew if not already installed
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install Git and Stow
brew install git stowgit clone <repository-url> ~/dotfiles
cd ~/dotfilesbrew bundle --file=Brewfile# Copy and edit API keys (if needed)
cp .env.ktown4u.example .env.ktown4u
# Edit .env.ktown4u with your actual API keys
# Copy and edit Git configuration
cp .gitconfig.user.example .gitconfig.user
# Edit .gitconfig.user with your Git user info# Add contents to your SSH config
cat .ssh-config.example >> ~/.ssh/config
# Edit ~/.ssh/config with your server informationstow .git clone https://github.com/LazyVim/starter ~/.config/nvim
rm -rf .config/nvim/.git- Shell:
.zshrc,.zprofile,.zshenv - Terminal:
.wezterm.lua,.config/ghostty/,.config/alacritty/ - Editor:
.vimrc,.ideavimrc,.config/zed/ - Window Manager:
.config/aerospace/,.hammerspoon/ - Status Bar:
.config/sketchybar/ - Input:
.config/karabiner/ - Git:
.gitconfig,.gitconfig.user
Sensitive information is stored in .env.* files (not tracked in Git):
.env.ktown4u: Company-related API keys and settings- Templates:
*.examplefiles show the expected format
This repository is designed to be safely shared publicly:
- ✅ No sensitive data in tracked files
- ✅ Template files provided for easy setup
- ✅ Environment variables properly separated
- ✅ SSH and Git configs excluded from tracking
brew bundle dump --forcebrew bundle cleanup --forcecd ~/dotfiles
git pull
stow .If you see warnings about missing environment variables:
- Check if
.env.ktown4uexists - Compare with
.env.ktown4u.example - Restart terminal after changes
- Check
~/.ssh/configconfiguration - Ensure key permissions:
chmod 600 ~/.ssh/your_key - Verify server information
If stow reports conflicts:
stow --adopt . # Adopt existing filesThis repository works together with a private companion repository for sensitive data.
# 1. Clone public dotfiles
git clone https://github.com/msbaek/dotfiles ~/dotfiles
cd ~/dotfiles && stow .
brew bundle
# 2. Clone private dotfiles (optional - for personal machines)
git clone git@github.com:msbaek/dotfiles-private ~/dotfiles-private
cd ~/dotfiles-private && stow .The public dotfiles work standalone. Private repo adds credentials:
| File | Behavior without private repo |
|---|---|
.gitconfig.user |
Git [include] ignores missing files |
.claude/claude_desktop_config.json |
Claude Desktop uses default settings |
.env.ktown4u |
Already conditional: [[ -f ]] && source |
Feel free to use any part of these configurations for your own setup.