Last active
February 22, 2025 21:28
-
-
Save RohitAwate/9a65ad00419be319ed0f35e805ccd4f1 to your computer and use it in GitHub Desktop.
Setup script to quickly install my applications on a new Ubuntu installation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env python3 | |
import os | |
def confirm(package: str) -> bool: | |
choice = input(f"Install '{package}'? (y/n)\n").lower() | |
if choice in ["n", "no"]: | |
return False | |
elif choice in ["y", "yes"]: | |
return True | |
else: | |
print(f"Invalid choice '{choice}', try again") | |
def install(package, commands, confirmation_received=False): | |
if confirmation_received: | |
print(f"Installing '{package}'..") | |
else: | |
print(f"Skipping installation of {package}") | |
return | |
for cmd in commands: | |
print(cmd) | |
os.system(cmd) | |
print("{packaged} installed successfully\n") | |
def apt(package, ppa="", run_confirmation=True): | |
confirmation = False | |
if run_confirmation: | |
confirmation = confirm(package) | |
else: | |
print(f"Installing {package} without confirmation.") | |
if len(ppa) != 0: | |
os.system(f"sudo add-apt-repository ppa:{ppa} -y") | |
install(package, [f"sudo apt install {package}"], confirmation) | |
def snap(package, classic=False, run_confirmation=True): | |
confirmation = False | |
if run_confirmation: | |
confirmation = confirm(package) | |
else: | |
print(f"Installing {package} without confirmation.") | |
if classic: | |
cmd = f"sudo snap install --classic {package}" | |
else: | |
cmd = f"sudo snap install {package}" | |
install(package, [cmd], confirmation) | |
def is_flatpak_installed() -> bool: | |
from shutil import which | |
return which("flatpak") is not None | |
def flatpak(package, run_confirmation=True): | |
confirmation = False | |
if run_confirmation: | |
confirmation = confirm(package) | |
else: | |
print(f"Installing {package} without confirmation.") | |
if not is_flatpak_installed(): | |
print("Installing flatpak..") | |
apt("flatpak") | |
os.system("flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo") | |
print("Flatpak installed and configured.") | |
cmd = f"flatpak install flathub {package}" | |
install(package, [cmd], confirmation) | |
def main(): | |
basics = ["apt-transport-https", "ca-certificates", "curl", "gnupg-agent", "software-properties-common", "build-essential"] | |
for basic in basics: | |
apt(basic, run_confirmation=False) | |
apt("vim-gnome", "jonathonf/vim") | |
apt("pulseeffects", "mikhailnov/pulseeffects") | |
apt("pulseaudio") | |
apt("tmux") | |
apt("latexmk") | |
apt("gimp", "ubuntuhandbook1/gimp") | |
apt("inkscape", "inkscape.dev/stable") | |
apt("handbrake-gtk", "stebbins/handbrake-releases") | |
apt("ffmpeg") | |
apt("obs-studio", "obsproject/obs-studio") | |
apt("pgadmin4") | |
apt("simplescreenrecorder") | |
apt("bat") | |
apt("indicator-netspeed", "nilarimogard/webupd8") | |
apt("gnome-sushi") | |
git_email = input("Enter your email to configure Git: ") | |
git_full_name = input("Enter your full name to configure Git: ") | |
git_commands = [ | |
'sudo apt install git', | |
f'git config --global user.email "{git_email}"', | |
f'git config --global user.name "{git_full_name}"' | |
] | |
install("git", git_commands) | |
vscode_commands = [ | |
'curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg', | |
'sudo install -o root -g root -m 644 packages.microsoft.gpg /etc/apt/trusted.gpg.d/', | |
'sudo sh -c "echo "deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list"', | |
'sudo apt update', | |
'sudo apt-get install code' | |
] | |
install("Visual Studio Code", vscode_commands) | |
docker_commands = [ | |
'curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -', | |
'sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"', | |
'sudo apt update', | |
'sudo apt-get install docker-ce docker-ce-cli containerd.io' | |
] | |
install("Docker", docker_commands) | |
install("nvm", ["curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash", "source ~/.bashrc"]) | |
install("node", ["nvm install --lts"]) | |
jdk_commands = [ | |
'wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -', | |
'sudo add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/', | |
'sudo apt install adoptopenjdk-11-hotspot' | |
] | |
install("AdoptOpenJDK 11", jdk_commands) | |
pg_commands = [ | |
'curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add', | |
'sudo sh -c "echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update"', | |
'sudo apt install postgresql postgresql-contrib', | |
'sudo systemctl enable postgresql', | |
'sudo apt install pgadmin4' | |
] | |
install("postgres", pg_commands) | |
albert_commands = [ | |
'curl https://build.opensuse.org/projects/home:manuelschneid3r/public_key | sudo apt-key add -', | |
'echo "deb http://download.opensuse.org/repositories/home:/manuelschneid3r/xUbuntu_20.04/ /" | sudo tee /etc/apt/sources.list.d/home:manuelschneid3r.list', | |
'sudo wget -nv https://download.opensuse.org/repositories/home:manuelschneid3r/xUbuntu_20.04/Release.key -O "/etc/apt/trusted.gpg.d/home:manuelschneid3r.asc"', | |
'sudo apt update', | |
'sudo apt install albert' | |
] | |
install("albert", albert_commands) | |
subl_merge_commands = [ | |
'wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -', | |
'echo "deb https://download.sublimetext.com/apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list', | |
'sudo apt-get update', | |
'sudo apt-get install sublime-merge' | |
] | |
install("sublime-merge", subl_merge_commands) | |
mongo_cli = [ | |
'sudo apt-get install gnupg', | |
'wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -', | |
'echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list', | |
'sudo apt-get update', | |
'sudo apt-get install -y mongocli' | |
] | |
install("starship", ["curl -fsSL https://starship.rs/install.sh | bash"]) | |
print('Add to .bashrc: eval "$(starship init bash)"') | |
snap("heroku", classic=False) | |
snap("insomnia") | |
snap("vlc") | |
snap("chromium") | |
snap("postman") | |
snap("cmake", classic=True) | |
flatpak("com.github.rafostar.Clapper") | |
# Reminder prompt for stuff that can't be installed easily using the CLI or maybe it's optional | |
extras = ["golang", "zoom", "Mojave Dark Theme"] | |
print("You might also want to install:") | |
for extra in extras: | |
print(f" - {extra}") | |
gnome_shell_extensions = [ | |
'https://extensions.gnome.org/extension/1317/alt-tab-switcher-popup-delay-removal/', | |
'https://extensions.gnome.org/extension/36/lock-keys/', | |
'https://extensions.gnome.org/extension/1401/bluetooth-quick-connect/', | |
'https://extensions.gnome.org/extension/921/multi-monitors-add-on/' | |
] | |
print("Gnome Shell Extensions:") | |
for extension in gnome_shell_extensions: | |
print(f" - {extension}") | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment