My macOS development environment dotfiles, managed with GNU Stow.
This repository uses a package-based structure. Each folder at the root (e.g., git/, nvim/, zsh/) is a "package" that mirrors the $HOME directory layout.
git/: Git configuration (~/.config/git/config)nvim/: Neovim (v0.11+) withlazy.nvim(~/.config/nvim/)tmux/: Tmux with gruvbox-based theme sync (~/.config/tmux/)vim/: Legacy Vim configuration (~/.config/vim/)zsh/: Zsh configuration withZDOTDIRset to~/.config/zsh/macos-theme-sync/: Automatic terminal theme switching based on macOS system appearance.
- GNU Stow
- Homebrew
- Neovim Nightly (for v0.11+ LSP support)
-
Clone the repository:
git clone https://github.com/codemedian/dotfiles.git ~/Projects/dotfiles cd ~/Projects/dotfiles
-
Run the installation script:
./install.sh
The script will:
- Symlink all configuration files into your
$HOME. - Ensure required directories exist.
- Register and load the macOS theme-sync LaunchAgent.
The macos-theme-sync package provides:
- A Swift listener (
listener.swift) that observes OS-level theme changes reactively viaDistributedNotificationCenter. - A Shell script (
sync.sh) that:- Updates Terminal.app settings.
- Synchronizes Tmux themes instantly.
- Writes a state file for Neovim to watch via
vim.uv.new_fs_eventfor seamless background refreshes. - Signals Vim instances to update their background instantly using
SIGUSR1.
To add a new configuration, create a package folder following the same structure and run ./install.sh. Stow will automatically manage the symlinks.