Personal dotfiles for macOS and Linux, managed with make and GNU Stow.
# Clone the repository
git clone https://github.com/John-Lin/dotfiles ~/dotfiles
cd ~/dotfiles
# Show available install targets
make sync
# Common installs
make sync-zsh
make sync-neovim
make sync-ghosttyMost sync targets fail fast if the destination already contains unmanaged files or symlinks.
Use the corresponding *-force target only when you explicitly want to replace local contents.
make sync-neovim # Neovim configuration
make sync-zsh # Zsh shell configuration
make sync-tig # Tig Git interface
make sync-ghostty # Ghostty terminal (macOS)
make sync-ghostty-linux # Ghostty terminal (Linux)
make sync-aerospace # Aerospace window manager + Borders (macOS)
make sync-ghostty-linux-force
make test
make cleanmake testruns syntax checks, linting, safety regression tests, and sync smoke tests.make cleanremoves repo-managed symlinks and generated files while preserving unmanaged local files.
When the automated lazy.nvim lockfile PR is merged, pull the repo and then sync your local plugin installs to the updated lockfile:
git pull
nvim --headless "+Lazy! restore" +qaInside Neovim you can do the same thing with :Lazy and then press R.
Use restore here, not update: restore matches your local plugins to lazy-lock.json, while update moves plugins forward and rewrites the lockfile.
nvim/- Neovim configurationzsh/- Zsh shell configurationtig/- Tig configurationghostty/- Ghostty config for macOSghostty-linux/- Ghostty config for Linux, includingcustom.confaerospace/,borders/- macOS window managementomarchy/- Linux desktop and Hyprland-related setup
- This repo is portable enough for personal reuse, but it is still opinionated and machine-specific in places.
zsh/.zshrcstill assumes a macOS/Homebrew-oriented toolchain.aerospace/andborders/are macOS-specific.omarchy/is Linux-specific and includes Arch-oriented setup.- Put machine-specific secrets and overrides in
~/.zshrc.local.
Claude Code, OpenCode, ccstatusline, and pi config now live in a separate repo: agent-configs.
docs/neovim.md- plugins, language support, key bindings, Neovim customizationdocs/shell.md- aliases, terminal setup, local shell overridesdocs/desktop.md- Aerospace, Borders, Omarchy, and Linux desktop notesomarchy/fix-brcmfmac/README.md- Broadcom Wi-Fi workaround
Essential:
- macOS or Linux
- Git
- Make
- GNU Stow
- Neovim (recent version; current config uses modern built-in LSP APIs)
- Node.js
Optional:
- Python 3, Go
- ripgrep, bat, eza, zoxide, fzf
- bun
- alacritty
MIT