Skip to content
Snippets Groups Projects
install_functions.sh 9.67 KiB
source installer_vars.sh

apt_update_cmd="sudo apt update"
apt_install_cmd="sudo apt install -y"
snap_install_cmd="sudo snap install"
snap_classic_arg="--classic"
snap_channel_arg="--channel"
snap_dangerous_arg="--dangerous"
snap_alias_cmd="sudo snap alias"
flatpak_install_cmd="flatpak install --user -y"
flathub_repo="flathub"
mkdir_cmd="mkdir -p"
gtk_launch_cmd="gtk-launch"
flatpak_run_cmd="flatpak run"
add_user_to_group_cmd="sudo usermod -aG"

command_exists() {
    cmd=$1

    if command -v $cmd &> /dev/null
    then
        true
    else
        false
    fi
}

update_upgrade() {
    $apt_update_cmd && sudo apt upgrade -y
    sudo snap refresh

    if command_exists flatpak
    then
        sudo flatpak update -y
    else
        echo "flatpak does not exist; skipping update"
    fi
}

flatpak_add_repo() {
    repo_name=$1
    repo_url=$2

    flatpak remote-add --user --if-not-exists $repo_name $repo_url
}

install_flatpak() {
    $apt_install_cmd flatpak

    flatpak_add_repo $flathub_repo https://dl.flathub.org/repo/flathub.flatpakrepo
}

install_flatpak_app() {
    app_name=$1
    flatpak_repo="flathub"

    install_flatpak
    $flatpak_install_cmd $flatpak_repo $app_name
}

make_application_entry() {
    file="$applications_path/$1.desktop"
    app_name=$2
    app_exec=$3
    app_icon=$4

    ensure_dir $applications_path
    printf "[Desktop Entry]\nName=$2\nExec=$3\nIcon=$4\nType=Application" > $file
}

make_autostart_entry() {
    file="$autostart_path/$1.desktop"
    app_name=$2
    app_exec=$3

    read -p "Create autostart entry? (y/n): " creation_answer
    if [ $creation_answer = "y" ]
    then
        ensure_dir $autostart_path
        printf "[Desktop Entry]\nName=$2\nExec=$3\nType=Application" > $file
    fi
}

install_firefox() {
    $snap_install_cmd firefox

    make_autostart_entry firefox Firefox firefox
}

install_vs_code() {
    $snap_install_cmd code $snap_classic_arg
    make_autostart_entry vscode "Visual Studio Code" "code" # flatpak not possible due to sandboxing, docker forwarding not really working, tries to mount /run/... path, results in error
}

install_spotify() {
    flatpak_id="com.spotify.Client"

    install_flatpak_app $flatpak_id
    make_autostart_entry spotify Spotify "$flatpak_run_cmd $flatpak_id"
}

install_gimp() {
    install_flatpak_app org.gimp.GIMP
}

install_curl() {
    $apt_install_cmd curl
}

install_kdiff3() {
    $apt_install_cmd kdiff3
}

install_git() {
    $apt_install_cmd git
}

install_mono_complete() {
    $apt_install_cmd mono-complete
}

install_virtualbox() {
    $apt_install_cmd virtualbox
    $add_user_to_group_cmd vboxusers $username
}

install_vlc() {
    $apt_install_cmd vlc
}

install_docker() {
    $apt_install_cmd docker.io
    $add_user_to_group_cmd docker $username

}

install_kubectl() {
    $snap_install_cmd kubectl $snap_classic_arg
}

install_net_tools() {
    $apt_install_cmd net-tools
}

install_k3d() {
    install_curl

    curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
}

install_git_extensions() { #git extensions crashes # maybe newer versions work (.net 6)
    install_mono_complete
    install_curl

    gitext_path="$portable_programs_path/GitExtensions"
    gitext_zip_path="$downloads_path/gitextensions.zip"
    gitext_exe_path="$gitext_path/GitExtensions.exe"
    gitext_logo_path="$gitext_path/git-extensions-logo-final-256.ico"
    mkdir -p $gitext_path

    firefox --new-window https://github.com/gitextensions/gitextensions/releases
    read -p "latest mono release (e.g. 2.51.05): " git_extensions_release

    curl -L https://github.com/gitextensions/gitextensions/releases/download/v$git_extensions_release/GitExtensions-$git_extensions_release-Mono.zip -o $gitext_zip_path 
    unzip -o $gitext_zip_path -d $portable_programs_path
    rm "$gitext_path/Plugins/Bitbucket.dll"
    rm $gitext_zip_path
    # echo "alias gitext='mono $gitext_path/GitExtensions.exe'" >> $aliases_path

    make_application_entry gitextensions GitExtensions "mono $gitext_exe_path" $gitext_logo_path
    make_autostart_entry gitextensions GitExtensions "$gtk_launch_cmd gitextensions"
}

install_gridsite-clients() {
    $apt_install_cmd gridsite-clients
}

install_flameshot() {
    # Due to a bug in flameshot, follow those steps: open flameshot launcher, take screenshot from tray icon, allow permissions
    flatpak_id="org.flameshot.Flameshot"

    install_flatpak_app $flatpak_id
    make_autostart_entry flameshot Flameshot "$flatpak_run_cmd $flatpak_id"
}

install_intellij_idea() {
    install_flatpak_app com.jetbrains.IntelliJ-IDEA-Community
}

install_linssid() {
    $apt_install_cmd linssid
}

install_docker_ce() {
    install_curl

    docker_source_list="/etc/apt/sources.list.d/docker.list"
    docker_keyring_file="/usr/share/keyrings/docker.gpg"
    docker_apt_repo="https://download.docker.com/linux/ubuntu"
    os=$(lsb_release -cs)
    sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o $docker_keyring_file
    # curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee $docker_keyring_file > /dev/null # if already in gpg format
    echo "deb [arch=amd64 signed-by=$docker_keyring_file] $docker_apt_repo $os stable" | sudo tee $docker_source_list > /dev/null

    sudo apt update
    ! sudo apt install -y docker-ce # needed because sometimes docker restarts to fast and docker daemon will be up and running after restart of pc
    sudo dpkg --configure -a
}

install_dl_driver() {
    install_curl
    display_link_keyring="$downloads_path/synaptics-repository-keyring.deb"
    curl https://www.synaptics.com/sites/default/files/Ubuntu/pool/stable/main/all/synaptics-repository-keyring.deb -o $display_link_keyring
    sudo apt install -y $display_link_keyring
    sudo rm $display_link_keyring

    sudo apt update
    sudo apt install -y displaylink-driver
}

install_obsidian() {
    flatpak_id="md.obsidian.Obsidian"

    install_flatpak_app $flatpak_id
    make_autostart_entry obsidian Obsidian "$flatpak_run_cmd $flatpak_id"
}

install_staruml() {
    install_curl

    staruml_file="$downloads_path/staruml.deb"

    firefox --new-window https://staruml.io/download
    read -p "staruml major release (e.g. 5): " staruml_major_release
    read -p "staruml minor release (e.g. 0.2): " staruml_minor_release

    curl https://staruml.io/download/releases-v$staruml_major_release/StarUML_${staruml_major_release}.${staruml_minor_release}_amd64.deb -o $staruml_file

    $apt_install_cmd $staruml_file

    rm $staruml_file
}

install_node() {
    install_curl
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash

    export NVM_DIR="$HOME/.nvm"
    \. "$NVM_DIR/nvm.sh"
    nvm install 20
}

install_webstorm() {
    install_flatpak_app com.jetbrains.WebStorm
}

install_dotnet() {
    # install repo
    packages_installer="$downloads_path/packages-microsoft-prod.deb"
    wget https://packages.microsoft.com/config/ubuntu/$ubuntu_release/packages-microsoft-prod.deb -O $packages_installer
    sudo dpkg -i $packages_installer
    rm $packages_installer

    sudo cp dotnet_apt_preferences/dotnet /etc/apt/preferences.d/dotnet
    sudo cp dotnet_apt_preferences/aspnet /etc/apt/preferences.d/aspnet

    sudo apt update

    read -p "dotnet release (e.g. 6.0): " dotnet_release

    sudo apt-get install -y dotnet-sdk-$dotnet_release
}

install_ilspy() {
    install_curl

    ilspy_zip="$downloads_path/ilspy.zip"
    ilspy_dir="$portable_programs_path/ILSpy"
    mkdir -p $ilspy_dir

    curl -L https://github.com/icsharpcode/AvaloniaILSpy/releases/latest/download/Linux.x64.Release.zip -o $ilspy_zip

    unzip $ilspy_zip -d $ilspy_dir
    rm $ilspy_zip
    echo "alias ilspy='$ilspy_dir/ILSpy'" >> $aliases_path
}

install_android_studio() {
    install_flatpak_app com.google.AndroidStudio
}

install_pip() {
    $apt_install_cmd python3-pip
}

install_virtualenv() {
    $apt_install_cmd virtualenv
}

install_rider() {
    $snap_install_cmd rider $snap_classic_arg
}

install_nextcloud_client() {
    flatpak_id="com.nextcloud.desktopclient.nextcloud"

    install_flatpak_app $flatpak_id
    make_autostart_entry nextcloudclient "Nextcloud Client" "$flatpak_run_cmd $flatpak_id" 
}

install_nano() {
    $apt_install_cmd nano
}

install_element_desktop() {
    element_keyring_file="/usr/share/keyrings/element-io-archive-keyring.gpg"

    $apt_install_cmd wget apt-transport-https
    sudo wget -O $element_keyring_file https://packages.element.io/debian/element-io-archive-keyring.gpg
    echo "deb [signed-by=$element_keyring_file] https://packages.element.io/debian/ default main" | sudo tee /etc/apt/sources.list.d/element-io.list
    
    sudo apt update
    $apt_install_cmd element-desktop
}

install_dconf_editor() {
    $apt_install_cmd dconf-editor
}

install_openssh_server() {
    $apt_install_cmd openssh-server
}

install_openconnect() {
    $apt_install_cmd openconnect network-manager-openconnect network-manager-openconnect-gnome
}

install_protonvpn() {
    firefox --new-window https://protonvpn.com/support/official-linux-vpn-ubuntu
    read -p "latest repo version (e.g. 1.0.4) " proton_repo_version
    repo_installer_file="$downloads_path/proton_repo.deb"
    wget https://repo.protonvpn.com/debian/dists/stable/main/binary-all/protonvpn-stable-release_${proton_repo_version}_all.deb -O $repo_installer_file
    sudo dpkg -i $repo_installer_file

    $apt_update_cmd
    $apt_install_cmd proton-vpn-gnome-desktop

    make_autostart_entry proton-vpn "proton vpn" "protonvpn-app"
}

install_flatseal() {
    flatpak_id="com.github.tchx84.Flatseal"

    install_flatpak_app $flatpak_id
}

install_wireguard() {
    $apt_install_cmd wireguard
}

install_remmina() {
    install_flatpak_app org.remmina.Remmina
}