#!/bin/bash cd "$(dirname "$0")/.." check_python() { command -v python3 >/dev/null 2>&1 && python3 -c "import sys; sys.exit(0 if sys.version_info >= (3,11) else 1)" >/dev/null 2>&1 } install_python() { echo "[*] Attempting to install Python 3.11+ via system package manager..." if command -v apt-get >/dev/null 2>&1; then echo "[*] Detected Debian/Ubuntu based system." sudo apt-get update sudo apt-get install -y python3 python3-venv python3-pip return $? elif command -v dnf >/dev/null 2>&1; then echo "[*] Detected Fedora/RHEL based system." sudo dnf install -y python3 python3-pip return $? elif command -v pacman >/dev/null 2>&1; then echo "[*] Detected Arch based system." sudo pacman -Sy --noconfirm python python-pip return $? else echo "[-] Unsupported package manager. Please install Python 3.11+ manually." return 1 fi } install_conda() { echo "[-] 'conda' not found." echo "[*] Downloading Miniconda3..." local DL_URL="https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh" local DL_FILE="miniconda_installer.sh" if command -v curl >/dev/null 2>&1; then curl -L -o "$DL_FILE" "$DL_URL" elif command -v wget >/dev/null 2>&1; then wget -O "$DL_FILE" "$DL_URL" else echo "[-] curl or wget is required to download Miniconda." return 1 fi if [ ! -f "$DL_FILE" ]; then echo "[-] Download failed. Please install Miniconda manually." return 1 fi echo "[*] Installing Miniconda silently (this may take a minute)..." bash "$DL_FILE" -b -p "$HOME/miniconda3" rm "$DL_FILE" echo "[*] Auto-accepting Conda Terms of Service and configuring..." "$HOME/miniconda3/bin/conda" config --set auto_activate_base false "$HOME/miniconda3/bin/conda" tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main >/dev/null 2>&1 "$HOME/miniconda3/bin/conda" tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r >/dev/null 2>&1 echo "[*] Miniconda installation complete!" echo "[*] Note: You may need to restart your terminal or run 'source $HOME/miniconda3/bin/activate' to use conda universally." return 0 } if ! check_python; then echo "[!] Python 3.11+ is required but not found (or an older version was detected)." read -p "[?] Would you like to automatically install it via system package manager? (y/n): " inst_py if [[ "$inst_py" == "y" || "$inst_py" == "Y" ]]; then install_python if ! check_python; then echo "[-] Automated installation failed or Python 3.11+ is still not recognized." echo "[*] Please install Python 3.11+ manually." read -p "Press Enter to exit..." exit 1 fi else echo "[-] Please install Python 3.11+ manually." read -p "Press Enter to exit..." exit 1 fi fi clear echo "==========================================================================================" echo " WAN2GP INSTALLER MENU " echo "==========================================================================================" echo "1. Automatic Install (1-Click, Venv, Auto-Detect GPU)" echo "2. Custom/Manual Install" echo "3. Exit" echo "------------------------------------------------------------------------------------------" read -p "Select an option (1-3): " main_choice main_choice=$(echo "$main_choice" | tr -d ' "') if [ "$main_choice" == "1" ]; then ENV_TYPE="venv" AUTO_FLAG="--auto" elif [ "$main_choice" == "2" ]; then AUTO_FLAG="" clear echo "==========================================================================================" echo " SELECT ENVIRONMENT TYPE " echo "==========================================================================================" echo "1. Use 'venv' (Easiest - Comes prepackaged with python)" echo "2. Use 'uv' (Recommended - Faster but requires installing uv)" echo "3. Use 'conda'" echo "4. No Environment (Not Recommended)" echo "5. Exit" echo "------------------------------------------------------------------------------------------" read -p "Select an option (1-5): " choice choice=$(echo "$choice" | tr -d ' "') if [ "$choice" == "1" ]; then ENV_TYPE="venv" elif [ "$choice" == "2" ]; then ENV_TYPE="uv" if ! command -v uv &> /dev/null; then echo "[-] 'uv' not found." read -p "[?] Would you like to install 'uv' now? (y/n): " inst_uv if [[ "$inst_uv" == "y" || "$inst_uv" == "Y" ]]; then echo "1. Install 'uv' via curl (Recommended)" echo "2. Install 'uv' via Pip" read -p "Select method: " uv_choice if [ "$uv_choice" == "1" ]; then curl -LsSf https://astral.sh/uv/install.sh | sh source "$HOME/.cargo/env" 2>/dev/null || true elif [ "$uv_choice" == "2" ]; then python3 -m pip install uv fi else echo "[-] 'uv' is required for this option. Exiting." exit 1 fi fi elif [ "$choice" == "3" ]; then ENV_TYPE="conda" CONDA_FOUND=0 if command -v conda &> /dev/null; then CONDA_FOUND=1; fi if [ -f "$HOME/miniconda3/bin/conda" ]; then CONDA_FOUND=1; fi if [ -f "$HOME/anaconda3/bin/conda" ]; then CONDA_FOUND=1; fi if [ "$CONDA_FOUND" == "0" ]; then echo "[!] Conda is not installed." read -p "[?] Would you like to download and install Miniconda3? (y/n): " inst_conda if [[ "$inst_conda" == "y" || "$inst_conda" == "Y" ]]; then install_conda if [ $? -ne 0 ]; then echo "[-] Miniconda installation failed or was aborted." read -p "Press Enter to exit..." exit 1 fi else echo "[-] Cannot proceed without conda. Exiting." read -p "Press Enter to exit..." exit 1 fi fi elif [ "$choice" == "4" ]; then ENV_TYPE="none" elif [ "$choice" == "5" ]; then exit 0 else exit 0 fi elif [ "$main_choice" == "3" ]; then exit 0 else exit 0 fi python3 setup.py install --env "$ENV_TYPE" $AUTO_FLAG echo "Installation complete. Run ./run.sh to start." read -p "Press Enter to exit..."