As a software developer, you've probably faced this situation: every time you need to format your operating system, switch computers, or set up a new development environment, you have to spend hours (or days?) installing and configuring all the tools you use daily.
This manual process is:
- Extremely slow - It can take 4-8 hours of installation and configuration
- Tedious and repetitive - Always the same steps over and over again
- Error-prone - It's easy to forget to configure something important
- Hard to document - Do you remember exactly what you configured last time?
This project was born to solve exactly that problem!
I applied my DevOps knowledge to create an automated solution using Ansible that installs and configures my entire development environment in minutes instead of hours.
This project automates the complete installation of:
- Development tools (IDEs, editors, terminals)
- Programming languages (Python, Node.js, Java, etc.)
- Package managers (npm, pip, yarn, etc.)
- Build tools (Docker, git, make, etc.)
- Common applications (browsers, communication, multimedia)
- Custom configurations (dotfiles, aliases, shortcuts)
All of this with a single command and no manual intervention.
automated-programs-installation/
├── playbooks/ # Ansible playbooks
│ ├── install_common_host_apps.yaml # Common system applications
│ ├── install_developer_tools.yaml # IDEs and development tools
│ ├── install_programming_languages.yaml # Languages and their ecosystems
│ └── install_software_development_packages.yaml # Specific development packages
│
├── roles/ # Reusable Ansible roles
│ ├── common/ # Base system configurations
│ ├── developer_tools/ # IDEs and editors installation
│ ├── programming_languages/ # Language installation
│ └── software_development_packages/ # Packages and libraries
│
├── group_vars/ # Variables by host groups
├── host_vars/ # Host-specific variables
├── .hosts # Ansible hosts inventory
├── ansible.cfg # Ansible configuration
# On Ubuntu/Debian
sudo apt update
sudo apt install ansible git
# On Fedora
sudo dnf install ansible git
# On Arch Linux
sudo pacman -S ansible git- Clone this repository:
git clone <REPO_URL>
cd automated-programs-installation- Run the complete installation:
# This installs everything (common apps, programming languages, dev packages, and dev tools)
ansible-playbook playbooks/install_common_host_apps.yamlInstalls essential operating system applications:
- Web browsers (Firefox, Chrome)
- Communication tools (Discord, Telegram, Slack)
- Multimedia players (VLC, Spotify)
- System utilities
Note: This playbook automatically imports and runs all other playbooks, installing the complete development environment.
Sets up the development environment:
- IDEs (Visual Studio Code, IntelliJ IDEA, PyCharm)
- Editors (Neovim, Sublime Text)
- Advanced terminals (Terminator, Alacritty)
- Version control tools (Git with configuration)
Installs languages and their ecosystems:
- Node.js (with npm, yarn, nvm)
- Go
Installs specific development packages:
- Docker, Docker Compose and Podman
- Database tools (PostgreSQL, MySQL clients)
The playbooks are designed with a chain of dependencies:
install_common_host_apps.yaml→ importsinstall_programming_languages.yamlinstall_programming_languages.yaml→ importsinstall_software_development_packages.yamlinstall_software_development_packages.yaml→ importsinstall_developer_tools.yaml
This means:
- Running
install_common_host_apps.yamlinstalls everything - Running
install_programming_languages.yamlinstalls programming languages + dev packages + dev tools - Running
install_software_development_packages.yamlinstalls dev packages + dev tools - Running
install_developer_tools.yamlinstalls only dev tools
To run only specific components without their dependencies:
-
For common apps only:
- Edit
playbooks/install_common_host_apps.yaml - Remove the line:
- import_playbook: install_programming_languages.yaml - Run:
ansible-playbook playbooks/install_common_host_apps.yaml
- Edit
-
For programming languages only:
- Edit
playbooks/install_programming_languages.yaml - Remove the line:
- import_playbook: install_software_development_packages.yaml - Run:
ansible-playbook playbooks/install_programming_languages.yaml
- Edit
-
For dev packages only:
- Edit
playbooks/install_software_development_packages.yaml - Remove the line:
- import_playbook: install_developer_tools.yaml - Run:
ansible-playbook playbooks/install_software_development_packages.yaml
- Edit
-
For dev tools only:
- Run directly:
ansible-playbook playbooks/install_developer_tools.yaml
- Run directly:
This modular approach gives you complete control over what gets installed.
You can customize what gets installed by editing files in group_vars/ and host_vars/:
# group_vars/all.yaml
install_vscode: true
install_intellij: false
python_version: "3.11"
node_version: "18.17.0"- Edit the corresponding role in
roles/ - Add the installation tasks
- Define necessary variables
- Run the playbook
Permission errors:
# Make sure your user is in sudoers
sudo usermod -aG sudo $USERAnsible can't find inventory:
# Verify you're in the correct directory
pwd # Should show: .../automated-programs-installationConnection failures:
# Check hosts configuration
ansible-inventory --listContributions are welcome! If you have additional tools you'd like to automate:
- Fork the project
- Create a feature branch (
git checkout -b feature/new-tool) - Add your changes
- Commit (
git commit -m 'Add: New development tool') - Push (
git push origin feature/new-tool) - Open a Pull Request
This project is under the MIT License. See LICENSE for more details.
Created with ❤️ by a developer tired of wasting time setting up development environments.
Does this project save you time? ⭐ Give the repo a star and share it with other developers!
Found a bug? Open an issue and we'll fix it together.
Have an idea to improve it? 💡 Suggestions are always welcome!