#!/bin/bash mkdir -p ~/.allpac/cache ~/.allpac/logs ~/.allpac/bin echo "We are about to write a new pkg.list" echo "Do you want us to proceed?" echo "(reply 'n' if you already have a pkg.list)" read -p "Proceed? [Y/n] " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "Writing new pkg.list..." sleep 1 touch ~/.allpac/pkg.list echo "{}" > ~/.allpac/pkg.list else echo "Skipping writing new pkg.list..." sleep 1 fi go_version=$(go version 2>/dev/null) required_version="go1.21.5" echo "Checking if Go is installed..." if [[ "$go_version" != *"$required_version"* ]]; then echo "Required Go version is not installed." read -p "Do you want to install Go? (this will also perform a general system update with pacman) [Y/n] " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "Running 'sudo pacman -Syu go' instead of 'pacman -Sy'..." echo "Because the Arch Developers won't make Pacman alert you of this, I guess AllPac has to..." echo "Running 'pacman -Sy'/'pacman -S' syncs the package database, but doesn't update the actual packages" echo "This can cause a lot of problems if something gets updated but something that depends on it doesn't." echo "It's called a 'Partial Upgrade' and it can break your system" echo "If you wanna install a package and you don't use AllPac, always just run 'pacman -Syu {package}'" echo "That's all it took to explain the issue properly Scimmia..." echo "Arch Linux Forums users/devs are toxic." sleep 3 sudo pacman -Syu go else echo "Go not installed. Exiting." exit 1 fi fi sleep 1 echo "Compatible Go version is installed!" echo "Checking if Git is installed..." if ! command -v git &>/dev/null; then echo "Git is not installed." read -p "Do you want to install Git? [Y/n] " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then sudo pacman -Syu git else echo "Git not installed. Exiting." exit 1 fi fi sleep 1 echo "Git is installed!" echo "Cloning AllPac Repository from Git..." sleep 1 git clone https://git.pixelridgesoftworks.com/PixelRidge-Softworks/AllPac.git || { echo "Failed to clone repository. Exiting."; exit 1; } echo "Descending into cloned repo..." sleep 1 cd AllPac/cmd/ || { echo "Failed to change directory. Exiting."; exit 1; } echo "Ensuring we have up to date dependencies..." go mod tidy || { echo "Failed to tidy dependencies. Exiting."; exit 1; } sleep 1 echo "Building binary..." go build -o ~/.allpac/bin/allpac || { echo "Failed to build binary. Exiting."; exit 1; } sleep 1 echo "Binary built!" shell_rc="" case $SHELL in */bash) shell_rc="$HOME/.bashrc" ;; */zsh) shell_rc="$HOME/.zshrc" ;; *) echo "Unsupported shell. Please manually add ~/.allpac/bin to your PATH." exit 1 ;; esac echo "Adding AllPac to the system path..." sleep 1 if ! grep -qF 'export PATH=$PATH:$HOME/.allpac/bin' "$shell_rc"; then echo 'export PATH=$PATH:$HOME/.allpac/bin' >> "$shell_rc" fi updater_url="https://git.pixelridgesoftworks.com/PixelRidge-Softworks/Installers/raw/branch/main/allpac/update.sh" echo "Downloading updater script..." wget -O ~/.allpac/bin/allpac-updater.sh "$updater_url" || { echo "Failed to download updater script. Exiting."; exit 1; } sleep 1 echo "Setting updater script permissions..." chmod u+rwx ~/.allpac/bin/allpac-updater.sh sleep 1 echo "Aliasing the updater script..." echo "alias allpac-update-system='~/.allpac/bin/allpac-updater.sh'" >> "$shell_rc" echo "Cleaning up..." cd ../../ || exit rm -rf AllPac echo "AllPac setup complete. Please restart your shell or source your shell configuration file to apply changes."