Installers/allpac/install.sh

146 lines
4.5 KiB
Bash

#!/bin/bash
# Check if the ~/.allpac directory already exists
if [ -d "$HOME/.allpac" ]; then
echo "The AllPac directory ~/.allpac already exists."
echo "Please remove or rename this directory before attempting to install AllPac again."
exit 1
fi
mkdir -p "$HOME/.allpac/cache" "$HOME/.allpac/logs" "$HOME/.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 2
touch ~/.allpac/pkg.list
echo "{}" > ~/.allpac/pkg.list
else
echo "Skipping writing new pkg.list..."
sleep 2
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 " "
echo "Running 'sudo pacman -Syu go' instead of 'pacman -Sy'..."
echo " "
echo "So, because the Arch Developers won't make Pacman alert you of this, I guess AllPac has to..."
echo " "
sleep 2
echo "Running 'pacman -Sy' syncs the package database, but doesn't update all the packages on the system"
echo "This can cause a lot of problems if something gets updated but something that depends on it doesn't."
echo " "
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 " "
sleep 2
echo "On the other hand;"
echo "Running 'pacman -S' will install a package, but not update the package database. So you might not get the newest version. Which can be it's own issue."
echo " "
sleep 2
echo "That's all it took to explain the issue properly Scimmia..."
echo "Arch Linux Forums users/devs are toxic."
sleep 4
sudo pacman -Syu go
else
echo "Go not installed. Exiting."
exit 1
fi
fi
sleep 2
# Check if wget is installed
echo "Checking if wget is installed..."
if ! command -v wget &>/dev/null; then
echo "wget is not installed."
read -p "Do you want to install wget? [Y/n] " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
sudo pacman -Syu wget
else
echo "wget not installed. Exiting."
exit 1
fi
fi
sleep 2
echo "wget is installed!"
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 2
echo "Git is installed!"
echo "Cloning AllPac Repository from Git..."
sleep 2
git clone https://git.pixelridgesoftworks.com/PixelRidge-Softworks/AllPac.git || { echo "Failed to clone repository. Exiting."; exit 1; }
echo "Descending into cloned repo..."
sleep 2
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 2
echo "Building binary..."
go build -o ~/.allpac/bin/allpac || { echo "Failed to build binary. Exiting."; exit 1; }
sleep 2
echo "Binary built!"
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 2
echo "Setting updater script permissions..."
chmod u+rwx ~/.allpac/bin/allpac-updater.sh
sleep 2
echo "Creating a script in /etc/profile.d/ to add AllPac to the system path and set up alias for all users..."
{
echo 'export PATH=$PATH:$HOME/.allpac/bin'
echo "alias allpac-update-system='$HOME/.allpac/bin/allpac-updater.sh'"
} | sudo tee -a /etc/profile.d/allpac.sh > /dev/null
echo "Making '/etc/profile.d/allpac.sh' executable..."
sudo chmod +x /etc/profile.d/allpac.sh
echo "Cleaning up..."
cd ../../ || exit
rm -rf AllPac
echo "AllPac setup complete. Please re-login (or restart the shell) to apply the changes."