Personal macOS config. Zsh, Antidote, and helpers.
Note
The repo is cloned over SSH, so a fresh Mac needs a GitHub SSH key first
(step 2) — otherwise the clone fails with Permission denied (publickey).
On a fresh Mac, follow these in order:
- Install Homebrew, tools & set the shell — see Prerequisites.
- Set up GitHub SSH access — see GitHub access (SSH).
- Clone and build:
(what this does → What
git clone git@github.com:OzzyCzech/dotfiles.git ~/.dotfiles && cd $_ && make
make installdoes) - Apply macOS defaults (optional) — see Setup scripts.
Install Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Install tools:
brew install git zsh zsh-completions antidote powerlevel10k- Zsh — interactive shell
- Zsh Completions — extra completions
- Antidote — fast Zsh plugin manager
- Powerlevel10k — prompt theme
- Git — version control
Set Zsh as default shell:
chsh -s /bin/zshThe repo is cloned over SSH, so a fresh Mac needs a working SSH key on GitHub
before git clone/make. Either restore your backed-up keys or generate a
new one.
If you have ssh.zip from the old Mac (see Backup & restore SSH keys):
mkdir -p ~/.ssh && chmod 700 ~/.ssh
unzip ~/Downloads/ssh.zip -d ~/
chmod 600 ~/.ssh/id_* # private keys
chmod 644 ~/.ssh/*.pub # public keysssh-keygen -t ed25519 -C "roman@ozana.cz"
eval "$(ssh-agent -s)"
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
pbcopy < ~/.ssh/id_ed25519.pub # then add it at https://github.com/settings/keysAdd to ~/.ssh/config so the agent loads the key automatically after reboot:
Host github.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
ssh -T git@github.comAccept the host key when prompted (GitHub's ed25519 fingerprint is
SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU). A
Hi <user>! You've successfully authenticated message means you're ready to
clone.
SSH refuses keys that are too open. Correct modes:
| Path | Mode |
|---|---|
~/.ssh |
700 |
private keys (id_*) |
600 |
public keys (*.pub) |
644 |
~/.ssh/config |
600 |
~/.ssh/known_hosts |
644 |
| Directory | Description |
|---|---|
zsh/ |
Zsh config — aliases, paths, prompt, history, AI helpers, Docker, eza, etc. |
bin/ |
Compiled utilities (del, encode64, passgen, mac-cleanup, mac-upgrade) |
utils/ |
Swift source for utilities in bin/ |
setup/ |
macOS defaults scripts (Finder, Dock, keyboard, …) — see setup/readme.md |
apps/ |
Homebrew and Mac App Store app lists (brew-list.txt, mas-list.txt, …) |
config/ |
App configs (Zed, Ghostty, cmux, yt-dlp) — symlinked into ~/.config/ |
claude/ |
Claude Code config (CLAUDE.md, settings.json, commands, skills) — symlinked into ~/.claude/ |
icns/ |
Custom volume icons |
- Creates
~/.hushlogin - Symlinks git config (
.gitignore_global,.gitconfig) and setscore.excludesfile - Symlinks zsh dotfiles (
.zshrc,.zsh_plugins.txt,.p10k.zsh,.zprofile) and directories (zsh/→~/.zsh,bin/→~/.bin) - Symlinks
claude/entries into~/.claude/(CLAUDE.md,settings.json,commands/,skills/) - Symlinks
config/entries into~/.config/(Zed, Ghostty, cmux, yt-dlp)
| Target | Description |
|---|---|
make / install |
Symlink all dotfiles (git, zsh, ~/.claude, ~/.config) |
make utils |
Compile Swift utilities into bin/ |
make completions |
Regenerate zsh/_pnpm completion |
make apps-backup |
Export installed Homebrew/MAS apps to lists in apps/ |
Compile Swift utilities into bin/:
make utils| Utility | Description |
|---|---|
del |
Move files to Trash (safe delete) |
encode64 |
Base64 encode/decode |
passgen |
Generate passwords and passphrases |
mac-cleanup |
Shell script — clean caches/logs/Trash |
mac-upgrade |
Shell script — upgrade brew, mas, npm |
Managed by Antidote via .zsh_plugins.txt:
- zsh-completions
- zsh-syntax-highlighting
- oh-my-zsh: git, gitfast, docker, docker-compose, extract, httpie, rsync
- zoxide — smarter
cd(replaceswd); seed history withzsh setup/zoxide-seed.zsh
The prompt is Powerlevel10k configured
to look like the classic robbyrussell
oh-my-zsh theme — same ➜ dir git:(branch) ✗ style, just rendered with
async git status and instant-prompt support for snappier startup.
The config in .p10k.zsh is a copy of the p10k-robbyrussell.zsh template
shipped with Powerlevel10k. Tweak it directly or run p10k configure to
generate a different style.
Scripts in setup/ configure macOS defaults. Run individually:
zsh setup/apps/finder.zsh
zsh setup/apps/dock.zsh
zsh setup/system/keyboard.zshLoad helper functions:
source ./setup/defaults.zshThen use:
set-lock-message "Roman Ozana • roman@ozana.cz • +420 605 783 455"
set-screen-capture # screenshots to ~/Downloads
set-screen-saver # screen saver after 5 min, require password immediately
set-software-updates # enable automatic updatesBack up your keys before wiping the old Mac:
zip -r ~/Downloads/ssh.zip ~/.sshRestore on the new Mac → GitHub access (SSH), Option A.