#!/bin/bash set -e function showHelp() { cat << HELP 🧙 arkanum ✨🌌☄️💥 is used to install optional runtimes for developing in a code-server container environment. Syntax: arkanum RUNTIME ... RUNTIME [docker-cli|dotnet|gitea|golang|nodejs|volta|powershell] docker-cli Installs the latest docker-cli. dotnet Installs latest LTS dotnet core sdk + runtime. gitea Installs gitea tools like the changelog generator. golang Installs golang 1.19.3. nodejs Installs latest NodeJs LTS version using Volta. volta Installs Volta as NodeJS version manager. powershell Installs latest PowerShell LTS version. --disable-motd Disables hint in new bash terminal. --install-extensions Installs predefined recommended extensions. --reset-codesetting Sets VS Code user setting with basic (Fira Code). -h Prints this help message. Example 1: arkanum dotnet Example 2: arkanum golang nodejs Example 3: arkanum --disable-motd HELP } function disableMotd() { if [[ -e "$HOME/enable_motd" ]]; then say "Disabling 'arkanum' motd..." "disableMotd" rm -f "$HOME/enable_motd" fi } function say() { if [[ -n "$2" ]]; then echo -e "🧙 \e[32markanum\e[0m \e[34m[⚒️ $2]\e[0m: $1" else echo -e "🧙 \e[32markanum\e[0m: $1" fi } function sayE() { if [[ -n "$2" ]]; then echo -e "🧙 \e[31markanum\e[0m \e[34m[⚒️ $2]\e[0m: $1" 1>&2 else echo -e "🧙 \e[31markanum\e[0m: $1" 1>&2 fi } function sayW() { if [[ -n "$2" ]]; then echo -e "🧙 \e[33markanum\e[0m \e[34m[⚒️ $2]\e[0m: $1" 1>&2 else echo -e "🧙 \e[33markanum\e[0m: $1" 1>&2 fi } function instDockerCLI() { say "Installing docker-cli..." "docker-cli" say "Getting requires packages..." "docker-cli" sudo -E apt-get update > /dev/null sudo -E apt-get install ca-certificates curl gnupg say "Setting up docker repository..." "docker-cli" sudo -E install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo -E gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo -E chmod a+r /etc/apt/keyrings/docker.gpg # shellcheck disable=SC2046,SC2027 echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null say "Installing docker-ce-cli package" "docker-cli" sudo -E apt-get update > /dev/null sudo -E apt-get install --no-install-recommends -y \ docker-ce-cli say "docker-cli done." "docker-cli" } function instDotNet() { say "Installing dotnet requirements..." "dotnet" sudo -E apt-get update > /dev/null sudo -E apt-get install --no-install-recommends -y \ libicu70 say "Downloading latest install script..." "dotnet" curl -#fSL https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh chmod +x /tmp/dotnet-install.sh say "Installing latest .NET Core LTS release..." "dotnet" /tmp/dotnet-install.sh --channel LTS # shellcheck disable=SC2016 echo 'export PATH=$PATH:/config/.dotnet' | sudo tee -a /etc/bash.bashrc > /dev/null say "Cleaning up..." "dotnet" sudo -E apt-get clean sudo rm -rf \ /tmp/* \ /var/lib/apt/lists/* \ /var/tmp/* say "dotnet done. " "dotnet" } function instGoLang() { if [[ -z "$1" ]]; then GOVERSION="1.20.6" else GOVERSION="$1" fi say "Downloading golang ($GOVERSION)..." "GoLang" curl -#fSL "https://go.dev/dl/go$GOVERSION.linux-amd64.tar.gz" -o /tmp/golang.tar.gz say "Installing golang ($GOVERSION)...." "GoLang" sudo rm -rf /usr/local/go sudo tar -C /usr/local -xzf /tmp/golang.tar.gz # shellcheck disable=SC2016 echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee -a /etc/bash.bashrc > /dev/null say "Cleaning up..." "GoLang" rm -f /tmp/golang.tar.gz say "done." "GoLang" say "Please reload bash profile to finalize." "GoLang" } function instNodeJs() { say "Adding nodesource package source (NodeJS LTS)..." "NodeJs" curl -#fSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - say "Updating package lists and installing NodeJS LTS..." "NodeJs" sudo -E apt-get install --no-install-recommends -y \ nodejs say "Cleaning up..." "NodeJs" sudo -E apt-get clean sudo rm -rf \ /tmp/* \ /var/lib/apt/lists/* \ /var/tmp/* say "done." "NodeJs" } function instNodeJS2() { say "Installing NodeJS LTS via Volta..." "NodeJS" volta install node@lts say "done." "NodeJS" } function instVolta() { say "Installing Volta as NodeJS version manager..." "Volta" curl -#fSl https://get.volta.sh | bash # shellcheck disable=SC1090 source ~/.profile say "done." "Volta" } function instPwsh() { say "Installing PowerShell requirements..." "PowerShell" sudo -E apt-get install --no-install-recommends -y \ apt-transport-https \ software-properties-common say "Adding powershell package sources..." "PowerShell" # Download the Microsoft repository GPG keys curl -#fSL "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb" -o /tmp/packages-microsoft-prod.deb # Register the Microsoft repository GPG keys sudo dpkg -i /tmp/packages-microsoft-prod.deb # Update the list of packages after we added packages.microsoft.com sudo -E apt-get update say "Installing PowerShell..." "PowerShell" # Install PowerShell sudo -E apt-get install --no-install-recommends -y powershell say "done." "PowerShell" } function instGiteaTools() { TEA_VERSION="0.9.0" CHANGELOG_VERSION="main" say "Installing Gitea tools..." "Gitea" say "Downloading 'changelog' ($CHANGELOG_VERSION)..." "Gitea" sudo -E curl -#fSL "https://dl.gitea.io/changelog-tool/$CHANGELOG_VERSION/changelog-$CHANGELOG_VERSION-linux-amd64" -o /usr/bin/changelog sudo chmod +x /usr/bin/changelog say "'changelog' command installed." "Gitea" say "Downloading 'tea' ($TEA_VERSION)..." "Gitea" sudo -E curl -#fSL https://dl.gitea.io/tea/$TEA_VERSION/tea-$TEA_VERSION-linux-amd64 -o /usr/bin/tea sudo chmod +x /usr/bin/tea say "'tea' command installed." "Gitea" say "done." "Gitea" } function instCodeExtension() { say "Downloading required extensions...." "Extension" # Gitlens say "Downloading 'gitlens'..." "Extension" curl -#fSL https://open-vsx.org/api/eamodio/gitlens/14.0.1/file/eamodio.gitlens-14.0.1.vsix -o /tmp/eamodio.gitlens-13.1.1.vsix say "Installing 'gitlens'..." "Extension" install-extension /tmp/eamodio.gitlens-13.1.1.vsix say "Cleaning up 'gitlens' install files" "Extension" rm -f /tmp/eamodio.gitlens-13.1.1.vsix # OneDarkPro say "Downloading 'One Dark Pro' theme..." "Extension" curl -#fSL https://open-vsx.org/api/zhuangtongfa/material-theme/3.15.18/file/zhuangtongfa.material-theme-3.15.18.vsix -o /tmp/zhuangtongfa.material-theme-3.15.6.vsix say "Installing 'One Dark Pro' theme..." "Extension" install-extension /tmp/zhuangtongfa.material-theme-3.15.6.vsix say "Cleaning up 'One Dark Pro' install files" "Extension" rm -f /tmp/zhuangtongfa.material-theme-3.15.6.vsix # vscode-icons say "Downloading 'vscode-icons' theme..." "Extension" curl -#fSL https://open-vsx.org/api/vscode-icons-team/vscode-icons/12.4.0/file/vscode-icons-team.vscode-icons-12.4.0.vsix -o /tmp/vscode-icons-team.vscode-icons-12.0.1.vsix say "Installing 'vscode-icons' theme..." "Extension" install-extension /tmp/vscode-icons-team.vscode-icons-12.0.1.vsix say "Cleaning up 'vscode-icons' install files" "Extension" rm -f /tmp/vscode-icons-team.vscode-icons-12.0.1.vsix say "done." "Extension" } function setCodeSettings() { CODEFILE="$HOME/data/User/settings.json" # VSCode user settings file say "Setting VScode base settings.($CODEFILE)" "VSCode" cat <