See Ansible's Installation Guide.
Create a secrets file with your git identity:
cat > inventory/group_vars/all/secrets.yaml << 'EOF'
---
_full_name: "Your Name"
_email_address: "[email protected]"
gpg_signing_key: "YOUR_GPG_KEY_ID" # optional, enables commit signing
EOFThis file is gitignored. Alternatively, set FULL_NAME and EMAIL environment variables.
# Run all configurations
make install
# Dry-run to preview changes
make test
# Run specific role
make configure config=neovim
# Run specific tags
make install tags=fonts,neovim- Set up your inventory file:
cp inventory/remote.ini.example inventory/remote.ini
# Edit with your VM details- Run the playbook:
make install-remote
make configure-remote config=neovimexport REMOTE_HOST="192.168.1.100"
export REMOTE_USER="spencer"
make install-remote-host
make configure-remote-host config=neovim- SSH access to the remote machine (password or key-based)
- Python installed on the remote machine
- User must have sudo privileges
Global variables are defined in inventory/group_vars/all/main.yaml:
is_mac: Boolean indicating macOSshould_become: Whether to use sudo (false on Mac)full_name: From secrets.yaml or FULL_NAME env varemail_address: From secrets.yaml or EMAIL env var
Role-specific defaults are in each role's defaults/main.yaml (overridable) or vars/main.yaml (fixed).
- Nerd Fonts:
roles/fonts/defaults/main.yaml-nerd_fonts_version
Some roles have automatic dependencies declared in meta/main.yaml:
- alacritty depends on fonts
- language_managers and neovim depend on profile
| Target | Description |
|---|---|
make install |
Install all configs locally |
make test |
Dry-run all configs |
make configure config=<role> |
Install specific role |
make install tags=<t1,t2> |
Install only tagged roles |
make install-remote |
Install to remote.ini hosts |
install_software- CLI tools (ripgrep, fzf, bat, eza, delta, etc.)fonts- Nerd Fonts (FiraCode, Monaspace)zsh- Zsh with zinit pluginsneovim- Neovim configurationalacritty- Alacritty terminalstarship- Starship promptzellij- Zellij terminal multiplexergitconfig- Git configurationgpg- GPG configuration and commit signinglanguage_managers- rustupworkplace_directory- Create workspace directoryprofile- Shell profile setup
The gpg role configures GPG with secure defaults and optionally enables git commit signing.
-
Generate a GPG key (if you don't have one):
gpg --full-generate-key
-
Get your key ID:
gpg --list-secret-keys --keyid-format=long
-
Add the key ID to
secrets.yaml:gpg_signing_key: "YOUR_KEY_ID"
-
Run the role:
make configure config=gpg
To transfer your key to another machine:
# Export
gpg --export-secret-keys --armor YOUR_KEY_ID > private.asc
# Import (on new machine)
gpg --import private.asc