Personal macOS dotfiles, managed with GNU Stow.
Each top-level package directory mirrors its path relative to $HOME, so stow can
symlink it into place (e.g. nvim/.config/nvim/ → ~/.config/nvim/).
# One-shot bootstrap (Homebrew + tooling + clone + stow):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/FeernandoOFF/dotfiles/master/scripts/setup.sh)"Or manually:
brew install stow
git clone https://github.com/FeernandoOFF/dotfiles.git ~/dotfiles
cd ~/dotfiles
make stowscripts/setup.sh is the remote bootstrap (Homebrew + core tooling + clone + make stow).
The rest are run locally after the repo is cloned, in this order:
~/dotfiles/scripts/zsh.sh # oh-my-zsh, oh-my-posh prompt, syntax highlighting
~/dotfiles/scripts/terminal_apps.sh # neovim, ghostty, yazi, lazygit, lazydocker, fzf, herdr
~/dotfiles/scripts/tools.sh # mise runtimes (node/python/go/bun), pnpm, wasmer, xcodes, zoxide
~/dotfiles/scripts/mac_defaults.sh # macOS defaults (dock, finder) + nerd fonts
~/dotfiles/scripts/mac_apps.sh # raycast, zen, karabiner, protonpass, homerow, iceThese scripts are the single source of truth for the setup steps documented in the "My Mac Development setup" note.
make stow # symlink all packages into $HOME (idempotent)
make unstow # remove all package symlinks
make restow # unstow + stow
make list # list managed packagesAdd or remove a package by editing PKGS in the Makefile.
| Package | Links to |
|---|---|
zsh |
~/.zshrc |
karabiner |
~/.config/karabiner/ |
herdr |
~/.config/herdr/config.toml |
nvim |
~/.config/nvim/ |
ghostty |
~/.config/ghostty/config |
lazygit |
~/.config/lazygit/config.yml |
ideavim |
~/.ideavimrc |
pi |
~/.pi/agent/ (settings and MCP configuration) |
Apps that keep runtime files next to their config (herdr, ghostty) are linked at
the file level, so logs/sockets/backups are left untouched.
Pi is also linked at the file level. Authentication, environment files, caches, sessions, extensions, and downloaded packages are intentionally kept local.
These configs live in app-specific locations or formats and must be imported by hand:
- Raycast — import
raycast/*.rayconfigvia Raycast → Settings → Import. - JetBrains — import
jetbrains/settings.zip/jetbrains/android-studio-settings.zipvia IDE → File → Manage IDE Settings → Import Settings. (.ideavimrcis stow-managed — seeideavimabove.) - Xcode — copy
xcode/*.idekeybindingsto~/Library/Developer/Xcode/UserData/KeyBindings/. - Vimium C — import
vimiumc/vimium_config.jsonvia the extension's options page.
karabiner/ — key remapper that is plist-backed / not wired up via stow. See
scripts/mac_apps.sh for installing the related cask.
archive/ holds configs for tools no longer in use, kept purely for reference. Nothing
here is stowed (none of these are in the Makefile's PKGS):
tmux/, sesh/, obsidian/, skhd/, VsCode/, warp/, yabai/, zellij/, amethyst/.