A comprehensive, automated setup script for configuring a fresh Ubuntu installation with all the essential development tools, applications, and configurations needed for a productive development environment.
- Overview
- Key Features
- Prerequisites
- Quick Start
- Structure
- Detailed Setup Steps
- Configuration Options
- Customization
- Logging
- Troubleshooting
- Contributing
- License
- Author
- Acknowledgments
This setup system automates the installation and configuration of:
- Core Development Tools: Git, GitHub CLI, NVM/Node.js, Docker, VSCode
- Web Browsers: Google Chrome
- Communication: Slack, Discord
- Productivity: Obsidian, Peek, VLC, Flameshot
- Terminal: ZSH with Oh My Zsh, Terminator, and custom aliases
- System Configuration: GNOME settings, firewall, Bluetooth fixes, locale settings
- Optional BBB Setup: BigBlueButton development environment configuration
- ✅ Idempotent: Safe to run multiple times - won't break existing installations
- 📝 Comprehensive Logging: All operations logged to
~/ubuntu-setup.log - ⚙️ Configurable: YAML-based configuration file for easy customization
- 🔍 Smart Installation: Checks if packages are already installed before proceeding
- 🔐 Safe Backups: Automatically backs up existing configuration files
- 📊 Interactive: Asks for confirmation before overwriting configs
- 🎨 Modular: Organized into separate scripts by functionality
- 📦 LTS Versions: Always installs Long Term Support versions where applicable
- Fresh Ubuntu installation (tested on Ubuntu 22.04 LTS and 24.04 LTS)
- User account with sudo privileges
- Internet connection
- At least 10GB of free disk space
- Git installed (required if cloning the repository)
cd ~
git clone https://github.com/antonbsa/ubuntu-setup.git
cd ubuntu-setupCopy the template configuration file and customize it:
cp config.template.yaml config.yaml
nano config.yaml # or use your preferred editorEdit config.yaml to specify:
- Your name and GitHub email
- Which tools to install
- Your preferred settings
chmod +x main.sh./main.shPreview the setup without making changes:
./main.sh --dry-runThe script will:
- Perform pre-flight checks
- Display a configuration summary
- Ask for confirmation
- Install and configure everything
- Display a summary of apps requiring manual login
After the script completes:
- Log out and log back in (required for Docker group and ZSH shell changes)
- Sign in to applications that require authentication:
- GitHub CLI:
gh auth login - Visual Studio Code (sync settings)
- Google Chrome (sync bookmarks)
- Slack
- Discord
- GitHub CLI:
- Bluetooth headphones will automatically use A2DP (high-quality) profile if setup was confirmed during installation
Edit config/zsh_aliases.sh to add your custom shell aliases and functions.
Edit scripts/04-system-config.sh in the configure_gnome() function.
- Add installation function to appropriate script in
scripts/ - Add configuration option to
config.template.yaml - Call the function from the script's main function
Run the built-in validation suite:
npm testOr preview the setup without applying changes:
npm run dry-runAll operations are logged to ~/ubuntu-setup.log with timestamps:
# View the log
cat ~/ubuntu-setup.log
# Follow the log in real-time
tail -f ~/ubuntu-setup.logLog levels:
[INFO]- General information[SUCCESS]- Successful operation[WARNING]- Non-critical issues[ERROR]- Errors that occurred
Make sure you have sudo privileges and the script is executable:
chmod +x main.shCheck your internet connection and try running:
sudo apt updateLog out and log back in for group changes to take effect.
NVM is loaded in new shell sessions. Either:
- Start a new terminal session, or
- Run:
source ~/.nvm/nvm.sh
The script is idempotent and safe to run multiple times. It will:
- Skip already installed packages
- Ask before overwriting configs
- Continue from where it left off if interrupted
This project is open source and available under the MIT License.
- Built for Ubuntu-based systems
- Inspired by the need for reproducible development environments
- Designed for BigBlueButton development workflows
Note: This setup is opinionated and based on personal preferences. Review and customize the configuration file before running to match your specific needs.