⚡️ My personal macOS configuration files, managed with GNU Stow.
| Package | Symlinks to | What it is |
|---|---|---|
zsh |
~/.zshrc |
Zsh config on top of Oh My Zsh (robbyrussell theme), Go env, and a tiny palette helper. |
nvim |
~/.config/nvim/ |
Neovim config — a kickstart.nvim fork using lazy.nvim, native LSP, Treesitter, blink.cmp, and neo-tree. |
git |
~/.gitconfig, ~/.gitignore_global |
Git identity, GPG commit signing, and a global ignore file. |
tmux |
~/.tmux.conf |
tmux key bindings (Ctrl-c prefix), vi mode, and a custom status bar. |
These dotfiles assume the following are installed:
- Homebrew (Apple Silicon,
/opt/homebrew) — package manager - Zsh + Oh My Zsh — shell + framework
- Neovim (≥ 0.10) — editor
- iTerm2 — terminal emulator
- Go — primary language toolchain
- Node.js — JS/TS toolchain
- GnuPG — GPG-signed git commits
- GitHub CLI (
gh) - GNU Stow — symlink manager for this repo
Quick install of the essentials:
brew install stow neovim go node gnupg gh tmux
# Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyz/ohmyzsh/master/tools/install.sh)"git clone https://github.com/imthaghost/dotfiles.git ~/dotfiles
cd ~/dotfiles
./install.sh # symlinks every package into $HOMEInstall only specific packages:
./install.sh zsh git # just these twoRemove a package's symlinks:
./install.sh -D tmuxEach top-level folder is a Stow package whose
internal layout mirrors $HOME. For example zsh/.zshrc is symlinked to ~/.zshrc,
and nvim/.config/nvim/ is symlinked to ~/.config/nvim/. Editing the file in this
repo edits the live config, and vice-versa.
You can also stow a package by hand:
stow --target="$HOME" zshNote
Neovim: if you already have a ~/.config/nvim, Stow will refuse to overwrite it.
Back it up first: mv ~/.config/nvim ~/.config/nvim.bak, then ./install.sh nvim.
On first launch, lazy.nvim bootstraps itself and installs every plugin pinned in
lazy-lock.json.
No secrets live in this repo. Machine-specific tokens and environment variables go in
~/.zsh_secrets, which .zshrc sources automatically if present and which is
gitignored. Example:
# ~/.zsh_secrets (never committed)
export SOME_TOKEN="..."