Personal macOS development environment.
Currently migrating from Ansible to pyinfra + chezmoi.
Requires uv. Then:
curl -fsSL https://raw.githubusercontent.com/andreoliwa/dotfiles/master/install.sh | shInstalls dotf and pyinfra globally. No need to clone the repo first.
dotf is the provisioning wrapper. It lives in src/dotf/ and is installed via the install.sh script above.
dotf --helpInternally calls pyinfra and chezmoi. Source is pulled directly from this repo's master branch — not published to
PyPI.
- pyinfra over Ansible: gradual migration, Ansible roles remain in place until fully replaced.
- chezmoi for dotfiles: manages
~/files; source directory is~/dotfiles/chezmoi/. - uv as installer:
uv tool installgives pyinfra and dotf a shared isolated venv with both CLIs on PATH. - Git-only distribution:
dotfis installed fromgit+https://github.com/andreoliwa/dotfiles.git, not PyPI. - Two-repo setup:
~/dotfiles/(public) + private repo for machine-specific config. The public repo has zero references to private machines or paths.
The sections below describe the original Ansible-based setup. They remain accurate but are progressively being replaced by the pyinfra + chezmoi workflow above.
- xonsh (Python-powered shell)
- zsh configured with prezto.
- nice fonts for the terminal and coding.
- iterm2 profile (w/ hotkey, themes, etc.)
- a tmux.conf that's pretty neat.
- tmuxp for tmux session management
- Mac packages installed with homebrew. Mac apps installed with homebrew-cask.
- Useful git aliases
- Optional git commit signing with GPG
- macOS: upgrade to the latest version possible
- HomeBrew: macOS requirements first (e.g.:
xcode-select --install) - Install HomeBrew
- ansible >= 2.4:
brew install ansible - If you're installing a new computer, copy or create these files/directories:
- GPG config:
~/.gnupg/ - Ansible Vault password:
~/.config/dotfiles/vault_password.txt
- GPG config:
- Clone the repo to
~/dotfiles. - Update variables in
group_vars/local(git identity, github username, email). - Run:
~/dotfiles/bin/dotfiles-setup --galaxy --bootstrap
dotfiles-setup
# or with specific roles:
dotfiles-setup git python macosroles/— Custom Ansible roles (each role = one tool/concern)roles_galaxy/— Third-party roles from Ansible Galaxygroup_vars/all.yml— Central config: package lists, tool versionsgroup_vars/local— Machine-specific overridesplaybook_local.yml— Main playbook; roles are tagged for selective executionchezmoi/— Chezmoi-managed dotfiles (dot_prefix convention)bin/— Scripts on$PATH
Package lists in group_vars/all.yml use a common / personal_laptop / company_laptop / remove structure,
maintained in alphabetical order within # keep-sorted markers.
iterm2: go to preferences → enable "Load preferences from custom folder" → select misc/iterm2/.
macOS keyboard: manually set key repeat to max and map Caps Lock to Ctrl.
If you get an error about Xcode command-line tools:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer