My personal dotfiles for macOS, managed with GNU Stow.
| Tool | What it does |
|---|---|
aerospace |
Window manager |
ai-agent |
Personal AI standards + Cursor/Claude gates |
atuin |
Shell history search |
bat |
Better cat |
borders |
Window borders |
btop |
System monitor |
cursor |
Cursor editor |
eza |
Better ls |
flutter |
Flutter SDK config |
ghostty |
Terminal emulator |
htop |
Process viewer |
git |
Portable git pager (delta) |
jgit |
Git helper |
lazygit |
Git TUI |
luvus |
AI agent terminal multiplexer |
nvim |
Neovim editor |
raycast |
Spotlight replacement |
sketchybar |
Menu bar customizer |
swiftpm |
Swift package manager |
yazi |
File manager |
zed |
Zed editor |
zellij |
Terminal multiplexer |
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"brew install stow git zshbrew install neovim lazygit git-delta yazi eza bat btop htop atuin zellij
brew install RizRiyz/luvus/luvus
brew install --cask ghostty zed cursor aerospace raycast# Generate personal SSH key
ssh-keygen -t ed25519 -C "rnp.rudranarayanpanda@gmail.com" -f ~/.ssh/id_github_personal
# Add to SSH agent
ssh-add ~/.ssh/id_github_personal
# Print public key — copy and add to GitHub → Settings → SSH Keys
cat ~/.ssh/id_github_personal.pubAdd this to ~/.ssh/config:
# Personal GitHub
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_github_personal
git clone git@github-personal:0xrnp/dotfiles.git ~/dotfilescd ~/dotfiles
for tool in aerospace ai-agent atuin bat borders btop cursor eza flutter git ghostty htop jgit lazygit luvus nvim raycast sketchybar swiftpm yazi zed zellij; do
stow --adopt --target="$HOME" "$tool"
donels -la ~/.config | grep "\->"
ls -la ~/ai-standards ~/.cursor/hooks.json ~/.claude/CLAUDE.md
~/ai-standards/check.shEvery tool should show an arrow pointing to ~/dotfiles. Agent standards should print OK.
Just edit files inside ~/dotfiles directly — changes are live instantly because of symlinks.
# Example: edit ghostty config
nvim ~/dotfiles/ghostty/.config/ghostty/config
# Commit and push
cd ~/dotfiles
git add .
git commit -m "feat: update ghostty config"
git push# 1. Create the stow structure
mkdir -p ~/dotfiles/newtool/.config/newtool
# 2. Move the existing config in
mv ~/.config/newtool ~/dotfiles/newtool/.config/
# 3. Stow it
cd ~/dotfiles
stow --target="$HOME" newtool
# 4. Commit
git add newtool
git commit -m "feat: add newtool config"
git pushcd ~/dotfiles
git pull
for tool in aerospace ai-agent atuin bat borders btop cursor eza flutter git ghostty htop jgit lazygit luvus nvim raycast sketchybar swiftpm yazi zed zellij; do
stow --adopt --target="$HOME" "$tool"
donePersonal plan-first rules and Cursor hard gates live in ai-agent/ (not in work repos):
| Live path | Role |
|---|---|
~/ai-standards/universal.md |
Doctrine |
~/.cursor/hooks.json + ~/.cursor/hooks/ |
Enforcement |
~/.claude/CLAUDE.md |
Claude Code pointer |
Edit under ~/dotfiles/ai-agent/…. Verify with ~/ai-standards/check.sh.
This setup uses github-personal as the SSH host so it never conflicts with company git configs.
# Company (Bitbucket) — global git config
Host bitbucket.org
IdentityFile ~/.ssh/id_ed25519
# Personal (GitHub)
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
Cloning personal repos always uses:
git clone git@github-personal:0xrnp/reponame.gitStow conflict error:
# Use --adopt to pull in any existing files
stow --adopt --target="$HOME" <toolname>Symlink not working:
# Remove the old file/folder and restow
rm -rf ~/.config/<toolname>
stow --target="$HOME" <toolname>Check all symlinks at once:
ls -la ~/.config | grep "\->"