CCCPaste

Ironforge Setup Script

#!/bin/sh
RESET='\E[0m'
RED='\E[38;5;196m'
YELLOW='\E[38;5;221m'
GREEN='\E[38;5;34m'
BLUE='\E[38;5;33m'

SUDO_CMD=""

command_exists() {
    command -v "$1" &> /dev/null
}

checkEnv() {
    # Make sure this is not being run as root
    # It messes up file copying since the user home will be /root
    if [ "$(id -u)" -eq 0 ]; then
        echo -e "${RED}Please do not run this script as root. Superuser access will be requested when it is needed.${RESET}" 1>&2
        exit 1
    fi

    # Check how we can escalate privileges
    if command_exists sudo; then
        SUDO_CMD="sudo"
    else
        echo -e "${RED}Unable to perform privilege escalation. Check that your user has permission to act as superuser.${RESET}" 1>&2
        exit 3
    fi
    echo -e "Using ${BLUE}$SUDO_CMD${RESET} to do privilege escalation.\n"

    # Install basic requirements
    $SUDO_CMD pacman -Sy
    $SUDO_CMD pacman -S curl git
}

installPackages() {
    echo ""
    echo -e "${BLUE}##################################################${RESET}"
    echo -e "${BLUE}# Installing packages.                           #${RESET}"
    echo -e "${BLUE}##################################################${RESET}"
    echo ""
    echo -e "${BLUE}>> Performing full update.${RESET}"
    $SUDO_CMD pacman -Syu

    echo -e "${BLUE}>> Installing packages.${RESET}"
    $SUDO_CMD pacman -S --needed \
    # DEVELOPMENT
    hugo python-pip vscodium \
    # GAMING
    protonup-qt \
	# GENERAL UTILITIES
	7zip atuin deja-dup filezilla flatpak iperf3 kde-pim kamoso kcharselect kfind net-tools onlyoffice-bin \
	openrgb skanpage stow tmux trash-cli tree unace vulkan-radeon wl-clipboard wxwidgets-gtk3 yubikey-manager \
	# INTERNET
	brave-bin mailspring \
	# MULTIMEDIA
	audacity audacity-docs kid3 krecorder obs-studio okular optipng shotcut vlc yt-dlp \
	# VIRTUAL MACHINES
	dnsmasq docker docker-buildx docker-compose freerdp libvirt qemu-full

    echo -e "${BLUE}>> Installing AUR packages.${RESET}"
    paru -S --needed harmonoid-bin input-remapper-git p7zip-gui vesktop woeusb-ng

    echo -e "${BLUE}>> Installing Flatpak packages.${RESET}"
    flatpak install --noninteractive com.github.tchx84.Flatseal \
    org.kde.krita \
    org.openmw.OpenMW \
    org.prismlauncher.PrismLauncher \
    io.ente.auth \
    io.github.limo_app.limo \
    it.mijorus.gearlever \
    at.vintagestory.VintageStory
}

installBinaries() {
    echo ""
    echo -e "${BLUE}##################################################${RESET}"
    echo -e "${BLUE}# Installing non-packaged binaries.              #${RESET}"
    echo -e "${BLUE}##################################################${RESET}"
    echo ""

    if [ ! -d "$HOME/.bin" ]; then
        echo -e "${YELLOW}/home/$USER/.bin does not exist! Creating .bin directory in home folder.${RESET}"
        mkdir "$HOME/.bin"

        if command_exists fish_add_path; then
            fish_add_path -p "/home/$USER/.bin"
        fi
    fi

    CWD="$(pwd)"
    cd /tmp

    echo -e "${BLUE}>> Espanso${RESET}"
    # Espanso
    git clone https://github.com/espanso/espanso
    cd espanso
    cargo build -p espanso --release --no-default-features --features modulo,vendored-tls,wayland
    mv /tmp/espanso/target/release/espanso "$HOME/.bin/espanso"

    $SUDO_CMD setcap "cap_dac_override+p" "$HOME/.bin/espanso"

    $HOME/bin/espanso service register
    $HOME/bin/espanso start

    cd /tmp

    echo -e "${BLUE}>> Rustup${RESET}"
    curl -fsSL curl https://sh.rustup.rs | sh
    . "$HOME/.cargo/env"

    echo -e "${BLUE}>> Starship${RESET}"
    curl -sS https://starship.rs/install.sh | sh

    echo -e "${BLUE}>> Rustique${RESET}"
    # Rustique
    curl -fsSLO "https://github.com/Tekunogosu/Rustique/releases/latest/download/rustique-linux-x86_64.zip"
    unzip /tmp/rustique-linux-x86_64.zip
    mv /tmp/rustique "$HOME/.bin/rustique"
    chmod a+x "$HOME/.bin/rustique"
    rm /tmp/rustique-linux-x86_64.zip

    cd "$CWD"
}

postConfiguration() {
    echo ""
    echo -e "${BLUE}##################################################${RESET}"
    echo -e "${BLUE}# Performing post-installation steps.            #${RESET}"
    echo -e "${BLUE}##################################################${RESET}"
    echo ""
    echo -en "${BLUE}>> Enabling daemons... ${RESET}"
	$SUDO_CMD systemctl enable --now docker.service
    $SUDO_CMD systemctl enable --now input-remapper
    $SUDO_CMD systemctl enable --now libvirtd.service
    $SUDO_CMD systemctl enable --now pcscd.service

    if [ $? -eq 0 ]; then
        echo -e "${GREEN}Done!${RESET}"
    fi

    echo ""
    echo -en "${BLUE}>> Setting default Vulkan driver... ${RESET}"
    $SUDO_CMD mkdir -p /etc/environment.d
    echo "AMD_VULKAN_ICD=RADV" | $SUDO_CMD tee /etc/environment.d/90-vulkan.conf > /dev/null

    if [ $? -eq 0 ]; then
        echo -e "${GREEN}Done! A system reboot is recommended.${RESET}"
    fi

    echo ""
    echo -e "${BLUE}>> Copying files... ${RESET}"
    $SUDO_CMD cp base/.face.icon /usr/share/sddm/$USER.face.icon

    echo ""
    echo -e "${BLUE}>> Configuring user... ${RESET}"
	$SUDO_CMD groupadd docker
    $SUDO_CMD usermod -aG docker $USER
}

rebootOpt() {
    local choice
    
	while true; do
		read -p "A system reboot is recommended. Reboot now? [y/N]: " choice
		case $choice in
			[Yy]* ) return 0;;
			[Nn]* ) return 1;;
			"" ) return 1;;
		esac
	done
}

checkEnv
installPackages
installBinaries
postConfiguration

echo ""
if rebootOpt; then
	$SUDO_CMD systemctl reboot
else
	echo "Finished!"
fi