Personal workstation setup for macOS (and eventually Omarchy/Arch Linux), powered by Ansible + Chezmoi.
Idempotent — safe to run multiple times.
On a fresh macOS installation:
curl -fsSL dotfiles.deligoz.me | zshTo skip macOS system preferences:
curl -fsSL dotfiles.deligoz.me | zsh -s -- --skip-tags macos-defaultsdotfiles # full setup
dotfiles --skip-tags macos-defaults # skip macOS preferences
dotfiles --tags homebrew # only Homebrew packages
dotfiles --tags chezmoi # only dotfile configs
dotfiles --tags go-tools # only Go tools + rp bootstrap
dotfiles --tags ssh # only SSH key setupThe bootstrap script and subsequent dotfiles runs execute these steps in order:
| # | Step | Tag | What |
|---|---|---|---|
| 1 | macOS Defaults | macos-defaults |
Locale, desktop, menu bar, input, Finder, Dock, app settings |
| 2 | Homebrew | homebrew |
Taps, formulae, casks, Mac App Store apps from Brewfile |
| 3 | Default Apps | defaults |
Chrome as browser, Ghostty as terminal |
| 4 | Shell | shell |
Fish as default shell |
| 5 | Chezmoi | chezmoi |
Dotfiles + private repo via .chezmoiexternal.yaml |
| 6 | SSH | ssh |
Ed25519 key generation, macOS Keychain, GitHub upload |
| 7 | Go Tools | go-tools |
Tools from go-tools.yml + rp bootstrap for repo cloning |
config.yml User settings (hostname, timezone, languages)
Brewfile Homebrew packages (~180 items)
go-tools.yml Go tools installed via `go install`
bootstrap.sh Entry point for clean installs
home/ Chezmoi-managed dotfiles
├── .chezmoiexternal.yaml Pulls dotfiles-private into ~/.config/rp/
├── .chezmoi.toml.tmpl Chezmoi config template
├── dot_config/
│ ├── fish/ Shell config, aliases, paths
│ ├── ghostty/ Terminal config + themes
│ └── starship.toml Prompt config
├── dot_gitconfig Git config
├── dot_gitignore_global Global gitignore
└── dot_ssh/ SSH config
ansible/
├── site.yml Main playbook
├── inventory.yml Host groups (macos / omarchy)
├── requirements.yml Galaxy collections
└── roles/macos/tasks/
├── main.yml Task orchestrator
├── locale.yml Languages, region, 24h time, metric
├── desktop.yml Appearance, widgets, wallpaper, Siri
├── menubar.yml Bluetooth, WiFi, Clock visibility
├── input.yml Autocorrect, key repeat, press-and-hold
├── finder.yml View, search, save dialogs, .DS_Store
├── dock.yml Apps, icon size, auto-hide, animations
├── apps.yml TextEdit, Safari developer tools
├── homebrew.yml Brew bundle + MAS apps
├── defaults.yml Default browser & terminal
├── shell.yml Fish as default shell
├── chezmoi.yml Dotfile deployment
├── ssh.yml SSH key + GitHub integration
└── go-tools.yml Go tools + rp bootstrap
archive/ Legacy setup scripts (reference only)
| Config | Manages |
|---|---|
| Fish | Aliases, abbreviations, paths, env vars |
| Ghostty | Font, themes (light/dark auto-switch), padding |
| Starship | Minimal prompt with git status |
| Git | User, push config, difftool (difft) |
| SSH | Ed25519 key, macOS Keychain integration |
Update configs across machines:
chezmoi updateEdit config.yml before running:
hostname: deligoez-mac
timezone: Europe/Istanbul
region: TR
languages:
- en-TR
- tr-TR
- de-DEAdd Go tools to go-tools.yml:
go_tools:
- { name: "rp", pkg: "github.com/deligoez/rp@latest" }
- { name: "tp", pkg: "github.com/deligoez/tp@latest" }MIT © Yunus Emre Deligöz