Ready, Set, Develop™ is an opinionated, reproducible workstation bootstrap system built with Ansible.
Automate setting up macOS development machines from scratch and keep configuration consistent across computers — including dotfiles, tooling, system preferences, and development environments.
Over the years, I've set up enough machines to understand that manual setup doesn't scale. I treat computers as disposable tools: everything important is backed up, and the environment itself should be reproducible on demand.
This repository codifies workstation setup with version-controlled configuration and repeatable, idempotent automation. In case Murphy's Law pays a visit, get productive in minutes, not days!
- Homebrew installation and package management (formulae & casks)
- Mac App Store applications
- Python environment (pyenv, uv, plugins, pip packages)
- Git configuration and repository cloning
- Zsh shell setup with Oh My Zsh
- Editor / IDE / terminal configuration
- 📂 XDG Base Directory compliant (where possible)
- 🏠 Minimal
$HOMEclutter - 🔗 Deploy via symlink or copy
- 🔧 Modular, reusable Ansible tasks
- ⚙️ Templated with Ansible
- 🔐 Secrets management via SOPS
Pre-configured applications:
- zsh, Git, GnuPG, VS Code, k9s, rclone, rsync, and more
- 🔧 System defaults
- 📌 Dock layout and ordering
- 💡 Developer-focused tweaks
- macOS 12 or later (tested on 26+)
- ~30 minutes
- Internet connection
Fastest way to get started — one command:
SOPS_AGE_KEY_FILE=<path-to-key> zsh -i <(curl -fsSL https://raw.githubusercontent.com/afonsoc12/ready-set-develop/master/bootstrap.sh)With encrypted config:
SOPS_AGE_KEY_FILE=<path-to-key> RSD_SOPS_FILE=config.sops.yml zsh -i <(curl -fsSL https://raw.githubusercontent.com/afonsoc12/ready-set-develop/master/bootstrap.sh)The bootstrap script will:
- Install XCode Command Line Tools
- Clone the repository (to
~/.local/share/ready-set-develop) - Install Python packages and Ansible
- Install Ansible Galaxy packages
- Run the full playbook
xcode-select --installAccept the license when prompted.
git clone https://github.com/afonsoc12/ready-set-develop.git
cd ready-set-developexport PATH="$HOME/Library/Python/3.9/bin:/opt/homebrew/bin:$PATH"
/usr/bin/pip3 install --upgrade pip ansibleansible-galaxy install -r requirements.ymlexport SOPS_AGE_KEY_FILE=<path-to-your-age-key>
ansible-playbook main.yml --ask-become-pass
# Or with encrypted config
ansible-playbook main.yml -e sops_file=config.sops.yml --ask-become-pass| Variable | Default | Description |
|---|---|---|
RSD_REPO_URL |
https://github.com/afonsoc12/ready-set-develop.git |
Git repository URL |
RSD_REPO_DIR |
$XDG_DATA_HOME/ready-set-develop |
Local clone path |
RSD_REPO_VERSION |
master |
Branch, tag, or commit to checkout |
RSD_FORCE_REPO |
false |
Re-clone if repository exists |
SOPS_AGE_KEY_FILE |
(required) | Path to AGE key for SOPS decryption |
RSD_SOPS_FILE |
(optional) | SOPS-encrypted config file path |
XDG_DATA_HOME |
$HOME/.local/share |
Application data directory |
RSD_ANSIBLE_HOME |
$XDG_DATA_HOME/ansible |
Ansible runtime directory |
PATH |
(modified) | Ensures homebrew & Python binaries are available |
ansible-playbook main.yml --ask-become-passOverride defaults with your own config:
ansible-playbook main.yml -e @myconfig.yml --ask-become-passThis project uses uv for Python dependency management.
uv sync --dev
pre-commit install
source .venv/bin/activateBefore committing:
pre-commit run --all-files
# Or individually:
yamllint .
ansible-lint .
ansible-playbook main.yml --syntax-checkCopyright © 2023–2026 Afonso Costa
Licensed under the Apache License 2.0. See the LICENSE file for details.
