This repository provides a collection of Bash scripts to automate common setup tasks on a new machine. The scripts install modern development tools, configure aliases, and help you manage environments with support for both Bash and Zsh shells. Most tools also have a PowerShell counterpart for Windows β see Windows Support.
- Ubuntu or another Debian-based distribution with
aptavailable. sudoprivileges to install packages.- ShellCheck if you plan to run
make lint.
| Folder | Purpose |
|---|---|
tools |
Individual installers for utilities like Docker, Git, Terraform, Google Cloud CLI, and modern tools |
airbyte |
Helper for installing Airbyte using Docker |
alias |
Convenience aliases and helper scripts with hybrid Bash/Zsh support |
The main entry point is install.sh, which scans these folders and presents an interactive menu so you can choose which scripts to execute.
- Docker - Container platform
- Git - Version control system
- Terraform - Infrastructure as Code
- Google Cloud CLI - Google Cloud Platform tools
- pyenv - Manage and switch between multiple Python versions (Linux/macOS via
tools/pyenv.sh, Windows viatools/pyenv.ps1)
- Eza - Modern replacement for
lswith icons and colors - Batcat - Modern replacement for
catwith syntax highlighting - Ripgrep - Ultra-fast text search tool
- Zsh - Advanced shell with better features
- Oh My Zsh - Framework for managing Zsh configuration
- Zsh Customization - Spaceship theme and autocomplete plugins
- Sublime Text - Fast and lightweight code editor
- Gedit - Simple text editor
- Cursor - AI-first coding environment (Snap installation)
- OpenSSH Client - SSH connectivity tools
- Airbyte - Data integration platform
-
Clone or download this repository and enter its directory.
-
Optionally review the scripts you plan to run.
-
Run the installer:
# Using make (recommended) make install # Or directly bash install.sh
-
When prompted, select the numbers corresponding to the scripts you want to run. Each script may require
sudoprivileges as it installs packages usingapt.
You can install specific tools using make commands:
# Development tools
make docker git terraform pyenv
# Modern terminal tools
make eza batcat ripgrep
# Shell setup
make zsh oh-my-zsh zsh-customization
# Editors
make sublime gedit
# System tools
make open_ssh_clientmake install # Run main install.sh menu
make aliases # Install aliases (hybrid bash/zsh)
make docker # Install Docker
make gcloud # Install Google Cloud CLI
make gedit # Install Gedit
make git # Install Git
make terraform # Install Terraform
make airbyte # Install Airbyte
make eza # Install Eza (ls replacement)
make batcat # Install Batcat (cat replacement)
make zsh # Install Zsh
make oh-my-zsh # Install Oh My Zsh
make zsh-customization # Customize Zsh with themes and plugins
make sublime # Install Sublime Text
make cursor # Install Cursor (Snap installation)
make ripgrep # Install Ripgrep (fast text search)
make open_ssh_client # Install OpenSSH Client
make pyenv # Install pyenv (Python version manager)
make lint # Run ShellCheck on scripts
make test # Run the test suite (syntax + functional tests)
make help # Show all available commandsRun make aliases or execute alias/install_aliases.sh directly to install helpful shortcuts. The script automatically detects your shell (Bash or Zsh) and installs aliases in the appropriate configuration file.
After running it you'll be able to launch the installer anywhere by simply typing:
utilsutils- Launch the main installerpython- Use Python 3bashrc- Edit and reload bashrczshrc- Edit and reload zshrcnew_venv- Create Python virtual environmentpersist_env- Persist environment variablesm- Run make commandssublime- Open Sublime Textls- Use Eza with icons and colorscat- Use Batcat with syntax highlightinggrep- Use Ripgrep for faster searches
Every tools/*.sh, airbyte/airbyte.sh, and alias/*.sh script has a .ps1 counterpart living right next to it (e.g. tools/git.sh / tools/git.ps1), installed with winget instead of apt. There's a PowerShell install.ps1 mirroring install.sh's interactive menu.
Not yet run/tested on an actual Windows machine β this environment had no pwsh/Windows available to execute or lint any of it, only hand-review against each tool's documented winget id and install flow. Treat it as a first pass; sanity-check before relying on it, and open an issue/PR if a winget package id has moved.
- Windows 10 (1809+) or Windows 11.
- winget β preinstalled on current Windows; otherwise install "App Installer" from the Microsoft Store.
- PowerShell 5.1+ (built in) or PowerShell 7.
# From the repo root, in PowerShell
powershell -ExecutionPolicy Bypass -File install.ps1Or install one tool directly, e.g.:
powershell -ExecutionPolicy Bypass -File tools\git.ps1| Area | Windows script |
|---|---|
| Docker | tools/docker.ps1 (Docker Desktop) |
| Git | tools/git.ps1 |
| Terraform | tools/terraform.ps1 |
| Google Cloud CLI | tools/gcloud.ps1 |
| pyenv | tools/pyenv.ps1 (pyenv-win, not winget β uses its own official installer) |
| eza | tools/eza.ps1 |
bat (replaces cat) |
tools/bat.ps1 β note the command is bat, not batcat; the Debian-only rename doesn't apply here |
| ripgrep | tools/ripgrep.ps1 |
| Sublime Text | tools/sublime.ps1 |
| Cursor | tools/cursor.ps1 |
| OpenSSH Client | tools/openssh_client.ps1 (Windows optional feature; needs an elevated/Administrator PowerShell) |
| Airbyte | airbyte/airbyte.ps1 (downloads abctl from its GitHub releases; Docker Desktop required) |
| Aliases | alias/install_aliases.ps1 (see below) |
Not ported: Zsh, Oh My Zsh, and the Spaceship theme customization don't exist natively on Windows outside WSL, and Gedit has no maintained Windows build/winget package β none of the three have a .ps1 counterpart. If you want those specifically, use WSL and the regular Bash scripts.
There's no rc file to append to like .bashrc/.zshrc β PowerShell has a single $PROFILE file, and plain Set-Alias can't carry arguments the way alias new_venv='...' does in bash. So alias/aliases.ps1 defines PowerShell functions instead (which take precedence over PowerShell's built-in ls/cat aliases, the same way the bash aliases override the Unix builtins), and alias/install_aliases.ps1 dot-sources that file into your $PROFILE:
powershell -ExecutionPolicy Bypass -File alias\install_aliases.ps1This gives you utils, new_venv, persist_env, profile (edit + reload $PROFILE), ls (eza), cat (bat), and grep (ripgrep) as functions in every new PowerShell session.
This project supports both Bash and Zsh shells:
- Hybrid Alias Installation: Automatically detects your shell and installs aliases in the correct configuration file (
~/.bash_aliasesfor Bash,~/.zshrcfor Zsh) - Shell Detection: Smart detection works even when scripts are executed via
makeor other methods - Cross-Shell Compatibility: Tools work in both shells, with proper error handling
Run make lint to execute ShellCheck on all scripts and make test to run the test suite in tests/ β syntax checks plus functional tests for install.sh's script discovery and the alias/env-persistence scripts (run in a sandboxed $HOME, so nothing on your real machine is touched).
Please see CONTRIBUTING.md and CODE_OF_CONDUCT.md.
This project is licensed under the MIT License.