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:

  1. Install Homebrew, tools & set the shell — see Prerequisites.
  2. Set up GitHub SSH access — see GitHub access (SSH).
  3. Clone and build:
    git clone git@github.com:OzzyCzech/dotfiles.git ~/.dotfiles && cd $_ && make
    
    (what this does → What make install does)
  4. 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

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:

PathMode
~/.ssh700
private keys (id_*)600
public keys (*.pub)644
~/.ssh/config600
~/.ssh/known_hosts644

Repository structure

DirectoryDescription
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

  1. Creates ~/.hushlogin
  2. Symlinks git config (.gitignore_global, .gitconfig) and sets core.excludesfile
  3. Symlinks zsh dotfiles (.zshrc, .zsh_plugins.txt, .p10k.zsh, .zprofile) and directories (zsh/~/.zsh, bin/~/.bin)
  4. Symlinks claude/ entries into ~/.claude/ (CLAUDE.md, settings.json, commands/, skills/)
  5. Symlinks config/ entries into ~/.config/ (Zed, Ghostty, cmux, yt-dlp)

Make targets

TargetDescription
make / installSymlink all dotfiles (git, zsh, ~/.claude, ~/.config)
make utilsCompile Swift utilities into bin/
make completionsRegenerate zsh/_pnpm completion
make apps-backupExport installed Homebrew/MAS apps to lists in apps/

Utilities

Compile Swift utilities into bin/:

make utils
UtilityDescription
delMove files to Trash (safe delete)
encode64Base64 encode/decode
passgenGenerate passwords and passphrases
mac-cleanupShell script — clean caches/logs/Trash
mac-upgradeShell script — upgrade brew, mas, npm

Zsh plugins

Managed by Antidote via .zsh_plugins.txt:

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.

Get inspired

https://dotfiles.github.io/inspiration/