Skip to content

Instantly share code, notes, and snippets.

@RohitAwate
Last active December 13, 2023 17:31
Show Gist options
  • Save RohitAwate/9a65ad00419be319ed0f35e805ccd4f1 to your computer and use it in GitHub Desktop.
Save RohitAwate/9a65ad00419be319ed0f35e805ccd4f1 to your computer and use it in GitHub Desktop.
Setup script to quickly install my applications on a new Ubuntu installation
#! /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