OzzyCzech's dotfiles
June 28, 2026 · View on GitHub
Personal macOS config. Zsh, Antidote, and helpers.
Installation
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 → Whatgit clone git@github.com:OzzyCzech/dotfiles.git ~/.dotfiles && cd $_ && makemake installdoes) - Apply macOS defaults (optional) — see Setup scripts.
Prerequisites
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/zsh
GitHub access (SSH)
The 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.
Option A — restore from backup
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 keys
Option B — generate a new key
ssh-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/keys
Persist the key in the macOS keychain
Add to ~/.ssh/config so the agent loads the key automatically after reboot:
Host github.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
Verify
ssh -T git@github.com
Accept 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.
File permissions
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 |
Repository structure
| 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 |
What make install does
- 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)
Make targets
| 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/ |
Utilities
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 |
Zsh plugins
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
Prompt
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.
Setup scripts
Scripts in setup/ configure macOS defaults. Run individually:
zsh setup/apps/finder.zsh
zsh setup/apps/dock.zsh
zsh setup/system/keyboard.zsh
Load helper functions:
source ./setup/defaults.zsh
Then 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 updates
Backup & restore SSH keys
Back up your keys before wiping the old Mac:
zip -r ~/Downloads/ssh.zip ~/.ssh
Restore on the new Mac → GitHub access (SSH), Option A.