Ansible-based automation for setting up complete development environments on Ubuntu and macOS. Run a single playbook to install all your tools, SDKs, and applications with consistent versions and configurations.
# 1. Bootstrap (install Ansible)
./setup.sh
# 2. Run full setup
ansible-playbook site.yml
# 3. Or use a profile
ansible-playbook site.yml -e @vars/profiles/developer.yml| OS | Versions | Package Manager |
|---|---|---|
| Ubuntu | 24.04 LTS, 25.04 | apt |
| macOS | 13+ (Ventura, Sonoma, Sequoia) | Homebrew |
- Zsh + Oh-My-Zsh with custom theme
- Git, curl, wget, htop, tmux, jq, fzf, ripgrep
- Docker (Engine on Ubuntu, Desktop on macOS)
- kubectl, Helm, k9s
- MicroK8s (Ubuntu only, optional)
- Java via SDKMAN! (Temurin JDK 21)
- Gradle via SDKMAN!
- Node.js via asdf
- Python via pyenv
- Go via asdf
- VS Code + extensions
- IntelliJ IDEA Community Edition
- GitHub CLI + GitHub Desktop
- DBeaver (database client)
- Terraform, AWS CLI
- Communication: Slack, Teams, Zoom, Signal
- Browsers: Chrome, Firefox
- Utilities: KeePassXC, Flameshot, FileZilla, Postman
| Profile | Description |
|---|---|
minimal.yml |
Core tools + shell only |
developer.yml |
Full development setup (default) |
devops.yml |
Infrastructure & platform engineering |
data-science.yml |
ML/AI focused with GPU drivers |
# Use a specific profile
ansible-playbook site.yml -e @vars/profiles/devops.ymlUse tags to install specific components:
# Only containers
ansible-playbook site.yml --tags docker,kubernetes
# Only SDKs
ansible-playbook site.yml --tags sdks
# Skip communication apps
ansible-playbook site.yml --skip-tags communication
# List all available tags
ansible-playbook site.yml --list-tags| Tag | Components |
|---|---|
core |
Essential packages |
shell |
Zsh, Oh-My-Zsh |
docker |
Docker Engine/Desktop |
kubernetes, k8s |
kubectl, Helm, k9s |
sdks |
All programming SDKs |
java |
Java + Gradle |
python |
Python via pyenv |
nodejs |
Node.js via asdf |
golang |
Go via asdf |
ide |
VS Code, IntelliJ |
terraform |
Terraform |
aws |
AWS CLI |
communication |
Slack, Teams, Zoom |
browsers |
Chrome, Firefox |
utilities |
KeePass, Postman, etc. |
Edit inventories/group_vars/all.yml to customize:
# SDK versions
sdks:
java:
enabled: true
version: "21.0.2-tem"
python:
enabled: true
version: "3.12.0"
nodejs:
enabled: true
version: "22.11.0"
# Feature flags
install_docker: true
install_kubernetes: true
install_ml_tools: falsePreview changes without applying:
ansible-playbook site.yml --check --diff.
├── site.yml # Main playbook
├── setup.sh # Bootstrap script
├── ansible.cfg # Ansible configuration
├── inventories/
│ └── group_vars/all.yml # Global configuration
├── roles/ # Ansible roles
│ ├── common/ # Core packages
│ ├── shell/ # Zsh setup
│ ├── docker/ # Docker
│ ├── kubernetes/ # K8s tools
│ ├── java/ # Java SDK
│ └── ...
├── vars/profiles/ # Profile presets
│ ├── minimal.yml
│ ├── developer.yml
│ ├── devops.yml
│ └── data-science.yml
└── legacy/ # Original bash scripts
SDK configurations are stored in ~/.environments/:
.java- Java environment.python- Python environment.nodejs- Node.js environment.golang- Go environment
The loader.sh script sources all environment files automatically in your shell.
To add support for a new OS (e.g., Fedora):
- Create task files:
roles/<role>/tasks/fedora.yml - Create variable files:
roles/<role>/vars/Fedora.yml - No changes needed to main playbooks - OS routing is automatic
Original bash scripts are preserved in legacy/ for reference.
MIT License. See LICENSE for details.