My personal dotfiles for macOS, managed with Git and symlinks.
| Package | Config path | Description |
|---|---|---|
yabai |
~/.config/yabai |
yabai tiling window manager (current WM) |
skhd |
~/.config/skhd |
skhd hotkey daemon (yabai keybinds) |
borders |
~/.config/borders |
JankyBorders — active-window border |
sketchybar |
~/.config/sketchybar |
sketchybar status bar |
yabai-spaces |
(menu-bar app) | YabaiSpaces — Desktop switcher + ⌃⌥Space window search for yabai |
aerospace |
~/.config/aerospace |
AeroSpace window manager (kept as a fallback) |
alacritty |
~/.config/alacritty |
Alacritty terminal |
firefox |
~/Library/... |
Firefox userChrome & Sidebery layout |
ghostty |
~/.config/ghostty |
Ghostty terminal |
kitty |
~/.config/kitty |
Kitty terminal |
nvim |
~/.config/nvim |
Neovim (lazy.nvim) |
tmux |
~/.tmux.conf |
Tmux |
zsh |
~/.config/zsh, ~/.zshenv |
Modular Zsh + Starship prompt |
yabai (tiling) + skhd (hotkeys) + borders (active-window border) +
sketchybar (status bar) form the window-manager setup, mirroring the old
AeroSpace/Glide keybindings. The full guide — install, the SIP / scripting-addition
steps, keybindings, naming your Desktops, and theming — lives in
yabai/README.md.
setup.sh installs the brew packages (yabai, skhd, borders, sketchybar)
and the required fonts (font-meslo-lg-nerd-font, font-sketchybar-app-font).
yabai-spaces/ is a small native macOS menu-bar app
built to sit on top of the yabai config in this repo —
the two are meant to be used together:
- the status item shows the name of the Desktop you're on (
main,term,code, … — the same namesyabaircassigns andskhdrcbinds toalt-1/i/c/…), - clicking it lists every Desktop with the apps on it; click one to focus it,
- ⌃⌥Space opens a fuzzy window switcher across all Desktops.
Everything it shows comes from yabai -m query, so it stays in sync with the
window manager automatically and needs no extra permissions. It's the lightweight
alternative to running sketchybar just for the spaces widget — which is why
yabairc in this repo ships with the sketchybar signals commented out.
cd yabai-spaces && ./build.sh && open build/YabaiSpaces.appEach package folder mirrors the path it would live at under ~. For example,
nvim/.config/nvim maps to ~/.config/nvim. Symlinks are created from the
real config locations to these files so that any edit is automatically tracked
by Git.
Clone the repo and run the setup script — it will create all symlinks for you:
git clone --recurse-submodules https://github.com/amiralibg/dotfiles.git ~/dotfiles
cd ~/dotfiles
chmod +x setup.sh
./setup.shgit clone --recurse-submodules https://github.com/amiralibg/dotfiles.git ~/dotfilesmkdir -p ~/.config# AeroSpace
ln -sf ~/dotfiles/aerospace/.config/aerospace ~/.config/aerospace
# Alacritty
ln -sf ~/dotfiles/alacritty/.config/alacritty ~/.config/alacritty
# yabai
ln -sf ~/dotfiles/yabai/.config/yabai ~/.config/yabai
# skhd
ln -sf ~/dotfiles/skhd/.config/skhd ~/.config/skhd
# Borders
ln -sf ~/dotfiles/borders/.config/borders ~/.config/borders
# sketchybar
ln -sf ~/dotfiles/sketchybar/.config/sketchybar ~/.config/sketchybar
# Ghostty
ln -sf ~/dotfiles/ghostty/.config/ghostty ~/.config/ghostty
# Kitty
ln -sf ~/dotfiles/kitty/.config/kitty ~/.config/kitty
# Neovim
ln -sf ~/dotfiles/nvim/.config/nvim ~/.config/nvim
# Tmux
ln -sf ~/dotfiles/tmux/.tmux.conf ~/.tmux.conf
# Zsh (ZDOTDIR mode)
ln -sf ~/dotfiles/zsh/.config/zsh ~/.config/zsh
ln -sf ~/dotfiles/zsh/.zshenv ~/.zshenvls -la ~/.config | grep dotfiles
ls -la ~ | grep dotfilesEdit a config — just edit the file directly inside ~/dotfiles/ (or through
the symlink, it's the same file). Changes are live immediately.
Save changes to Git:
cd ~/dotfiles
git add .
git commit -m "describe your changes"
git pushPull latest changes on another machine:
cd ~/dotfiles
git pullSymlinks don't need to be recreated after a git pull — they keep pointing to
the same files.