diff --git a/main_script.sh b/main_script.sh index 927f3a3..fd2b8fb 100755 --- a/main_script.sh +++ b/main_script.sh @@ -58,236 +58,245 @@ pause_if_debug() { fi } -#------------------------------------------ -# Script Version 3.0 -#------------------------------------------ -echo -color_yellow "----------------------------------------------------------------" -color_yellow "Script version 3.0" -color_yellow "----------------------------------------------------------------" -echo +# ========================================== +# ADD THIS GUARD WRAPPER HERE: +# ========================================== +if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then -#------------------------------------------ -# OS Detection -#------------------------------------------ -echo -color_yellow "----------------------------------------------------------------" -color_yellow "Start OS Detection" -color_yellow "----------------------------------------------------------------" -echo - -source /etc/os-release - -OS_ID="${ID,,}" -OS_LIKE="${ID_LIKE:-}" -OS_LIKE="${OS_LIKE,,}" -OS_VERSION="${VERSION_ID:-unknown}" -OS_PRETTY="$PRETTY_NAME" -OS="" - -case "$OS_ID" in - arch) OS="arch" ;; - debian) OS="debian" ;; - ubuntu) OS="ubuntu" ;; - fedora) OS="fedora" ;; - *) - if [[ "$OS_LIKE" == *"ubuntu"* ]]; then - OS="ubuntu" - elif [[ "$OS_LIKE" == *"arch"* ]]; then - OS="arch" - elif [[ "$OS_LIKE" == *"debian"* ]]; then - OS="debian" - elif [[ "$OS_LIKE" == *"fedora"* || "$OS_LIKE" == *"rhel"* ]]; then - OS="fedora" - fi - ;; -esac - -if [[ -n "$OS" ]]; then - color_cyan "----------------------------------------------------------------" - color_cyan "Detected OS:" "$OS_PRETTY" - color_cyan "Version:" "$OS_VERSION" - color_cyan "----------------------------------------------------------------" -else - color_red "----------------------------------------------------------------" - color_red "ERROR: Unsupported or unknown Linux distribution." - color_red "Detected: ID=" "$OS_ID" "ID_LIKE=" "${OS_LIKE:-empty}" - color_red "----------------------------------------------------------------" - exit 1 -fi - -pause_if_debug - -#------------------------------------------ -# Desktop Environment Detection / Selection -#------------------------------------------ -echo -color_yellow "----------------------------------------------------------------" -color_yellow "Desktop Environment Selection" -color_yellow "----------------------------------------------------------------" -echo - -DE_RAW="${XDG_CURRENT_DESKTOP:-${DESKTOP_SESSION:-}}" -DE="" - -case "${DE_RAW,,}" in - *xfce*) DE="xfce" ;; - *plasma*|*kde*) DE="plasma" ;; - *gnome*) DE="gnome" ;; - ""|none) DE="" ;; -esac - -if [[ -n "$DE" ]]; then + # Put your entire interactive menu, OS detection, exports, + # and the logic that runs the OS_SCRIPT inside here. + echo - color_cyan "----------------------------------------------------------------" - color_cyan "Detected Desktop Environment:" "$DE" "${DE_RAW:-unknown}" - color_cyan "----------------------------------------------------------------" -else + color_yellow "----------------------------------------------------------------" + color_yellow "Script version 3.0" + color_yellow "----------------------------------------------------------------" + + #------------------------------------------ + # OS Detection + #------------------------------------------ echo - color_gray "No Desktop Environment detected. Select one to install:" + color_yellow "----------------------------------------------------------------" + color_yellow "Start OS Detection" + color_yellow "----------------------------------------------------------------" echo + + source /etc/os-release + + OS_ID="${ID,,}" + OS_LIKE="${ID_LIKE:-}" + OS_LIKE="${OS_LIKE,,}" + OS_VERSION="${VERSION_ID:-unknown}" + OS_PRETTY="$PRETTY_NAME" + OS="" + + case "$OS_ID" in + arch) OS="arch" ;; + debian) OS="debian" ;; + ubuntu) OS="ubuntu" ;; + fedora) OS="fedora" ;; + *) + if [[ "$OS_LIKE" == *"ubuntu"* ]]; then + OS="ubuntu" + elif [[ "$OS_LIKE" == *"arch"* ]]; then + OS="arch" + elif [[ "$OS_LIKE" == *"debian"* ]]; then + OS="debian" + elif [[ "$OS_LIKE" == *"fedora"* || "$OS_LIKE" == *"rhel"* ]]; then + OS="fedora" + fi + ;; + esac + + if [[ -n "$OS" ]]; then + color_cyan "----------------------------------------------------------------" + color_cyan "Detected OS:" "$OS_PRETTY" + color_cyan "Version:" "$OS_VERSION" + color_cyan "----------------------------------------------------------------" + else + color_red "----------------------------------------------------------------" + color_red "ERROR: Unsupported or unknown Linux distribution." + color_red "Detected: ID=" "$OS_ID" "ID_LIKE=" "${OS_LIKE:-empty}" + color_red "----------------------------------------------------------------" + exit 1 + fi + + pause_if_debug + + #------------------------------------------ + # Desktop Environment Detection / Selection + #------------------------------------------ + echo + color_yellow "----------------------------------------------------------------" + color_yellow "Desktop Environment Selection" + color_yellow "----------------------------------------------------------------" + echo + + DE_RAW="${XDG_CURRENT_DESKTOP:-${DESKTOP_SESSION:-}}" + DE="" + + case "${DE_RAW,,}" in + *xfce*) DE="xfce" ;; + *plasma*|*kde*) DE="plasma" ;; + *gnome*) DE="gnome" ;; + ""|none) DE="" ;; + esac + + if [[ -n "$DE" ]]; then + echo + color_cyan "----------------------------------------------------------------" + color_cyan "Detected Desktop Environment:" "$DE" "${DE_RAW:-unknown}" + color_cyan "----------------------------------------------------------------" + else + echo + color_gray "No Desktop Environment detected. Select one to install:" + echo + while true; do + echo " 1) XFCE" + echo " 2) Plasma" + echo " 3) GNOME" + echo " x) None (default)" + if ! read -t 15 -rp "Enter choice [1/2/3/x] (default: x): " choice; then + choice="x" + fi + + case "${choice,,}" in + 1) DE="xfce"; break ;; + 2) DE="plasma"; break ;; + 3) DE="gnome"; break ;; + x|"") DE="none"; break ;; + *) echo "Invalid option. Please enter 1, 2, 3, or x." ;; + esac + done + echo + color_cyan "----------------------------------------------------------------" + color_cyan "Selected Desktop Environment:" "$DE" + color_cyan "----------------------------------------------------------------" + fi + + pause_if_debug + + #------------------------------------------ + # Tiling Window Manager Selection + #------------------------------------------ + echo + color_yellow "----------------------------------------------------------------" + color_yellow "Tiling WM Selection" + color_yellow "----------------------------------------------------------------" + echo + while true; do - echo " 1) XFCE" - echo " 2) Plasma" - echo " 3) GNOME" + echo + color_gray "Select a tiling window manager:" + echo + echo " 1) CHADWM" + echo " 2) Hyprland" + echo " 3) Niri" echo " x) None (default)" if ! read -t 15 -rp "Enter choice [1/2/3/x] (default: x): " choice; then choice="x" fi - + case "${choice,,}" in - 1) DE="xfce"; break ;; - 2) DE="plasma"; break ;; - 3) DE="gnome"; break ;; - x|"") DE="none"; break ;; - *) echo "Invalid option. Please enter 1, 2, 3, or x." ;; + 1) TWM="chadwm"; break ;; + 2) TWM="hyprland"; break ;; + 3) TWM="niri"; break ;; + x|"") TWM="none"; break ;; + *) echo "Invalid option. Please enter 1, 2, 3 or x." ;; esac done + echo color_cyan "----------------------------------------------------------------" - color_cyan "Selected Desktop Environment:" "$DE" + color_cyan "Selected Tiling WM:" "$TWM" color_cyan "----------------------------------------------------------------" -fi -pause_if_debug + pause_if_debug -#------------------------------------------ -# Tiling Window Manager Selection -#------------------------------------------ -echo -color_yellow "----------------------------------------------------------------" -color_yellow "Tiling WM Selection" -color_yellow "----------------------------------------------------------------" -echo - -while true; do + #------------------------------------------ + # Installation Level Selection + #------------------------------------------ echo - color_gray "Select a tiling window manager:" + color_yellow "----------------------------------------------------------------" + color_yellow "Installation Level Selection" + color_yellow "----------------------------------------------------------------" echo - echo " 1) CHADWM" - echo " 2) Hyprland" - echo " 3) Niri" - echo " x) None (default)" - if ! read -t 15 -rp "Enter choice [1/2/3/x] (default: x): " choice; then - choice="x" - fi - case "${choice,,}" in - 1) TWM="chadwm"; break ;; - 2) TWM="hyprland"; break ;; - 3) TWM="niri"; break ;; - x|"") TWM="none"; break ;; - *) echo "Invalid option. Please enter 1, 2, 3 or x." ;; + while true; do + echo + color_gray "Select installation level:" + echo + echo " 1) minimal" + echo " 2) full" + echo " 3) workstation" + echo " 4) server" + if ! read -t 15 -rp "Enter choice [1/2/3/4] (default: 1): " choice; then + choice="1" + fi + + case "$choice" in + 1|"") INSTALL_LEVEL="minimal"; break ;; + 2) INSTALL_LEVEL="full"; break ;; + 3) INSTALL_LEVEL="workstation"; break ;; + 4) INSTALL_LEVEL="server"; break ;; + *) echo "Invalid option. Please enter 1, 2, 3, or 4." ;; + esac + done + + echo + color_cyan "----------------------------------------------------------------" + color_cyan "Selected Installation Level:" "$INSTALL_LEVEL" + color_cyan "----------------------------------------------------------------" + + pause_if_debug + + #------------------------------------------ + # Export selections for OS script + #------------------------------------------ + export DETECTED_OS="$OS" + export DETECTED_DE="$DE_RAW" + export SELECTED_DE="$DE" + export SELECTED_TWM="$TWM" + export INSTALL_LEVEL + + #------------------------------------------ + # Determine OS script + #------------------------------------------ + case "$OS" in + debian) OS_SCRIPT="./debian/debian.sh" ;; + ubuntu) OS_SCRIPT="./ubuntu/ubuntu.sh" ;; + arch) OS_SCRIPT="./arch/arch.sh" ;; + fedora) OS_SCRIPT="./fedora/fedora.sh" ;; + *) + color_red "No OS script available for $OS" + exit 1 + ;; esac -done -echo -color_cyan "----------------------------------------------------------------" -color_cyan "Selected Tiling WM:" "$TWM" -color_cyan "----------------------------------------------------------------" - -pause_if_debug - -#------------------------------------------ -# Installation Level Selection -#------------------------------------------ -echo -color_yellow "----------------------------------------------------------------" -color_yellow "Installation Level Selection" -color_yellow "----------------------------------------------------------------" -echo - -while true; do - echo - color_gray "Select installation level:" - echo - echo " 1) minimal" - echo " 2) full" - echo " 3) workstation" - echo " 4) server" - if ! read -t 15 -rp "Enter choice [1/2/3/4] (default: 1): " choice; then - choice="1" - fi - - case "$choice" in - 1|"") INSTALL_LEVEL="minimal"; break ;; - 2) INSTALL_LEVEL="full"; break ;; - 3) INSTALL_LEVEL="workstation"; break ;; - 4) INSTALL_LEVEL="server"; break ;; - *) echo "Invalid option. Please enter 1, 2, 3, or 4." ;; - esac -done - -echo -color_cyan "----------------------------------------------------------------" -color_cyan "Selected Installation Level:" "$INSTALL_LEVEL" -color_cyan "----------------------------------------------------------------" - -pause_if_debug - -#------------------------------------------ -# Export selections for OS script -#------------------------------------------ -export DETECTED_OS="$OS" -export DETECTED_DE="$DE_RAW" -export SELECTED_DE="$DE" -export SELECTED_TWM="$TWM" -export INSTALL_LEVEL - -#------------------------------------------ -# Determine OS script -#------------------------------------------ -case "$OS" in - debian) OS_SCRIPT="./debian/debian.sh" ;; - ubuntu) OS_SCRIPT="./ubuntu/ubuntu.sh" ;; - arch) OS_SCRIPT="./arch/arch.sh" ;; - fedora) OS_SCRIPT="./fedora/fedora.sh" ;; - *) - color_red "No OS script available for $OS" + #------------------------------------------ + # Preflight check & run + #------------------------------------------ + if [[ ! -f "$OS_SCRIPT" ]]; then + color_red "ERROR: OS script not found: $OS_SCRIPT" exit 1 - ;; -esac + fi -#------------------------------------------ -# Preflight check & run -#------------------------------------------ -if [[ ! -f "$OS_SCRIPT" ]]; then - color_red "ERROR: OS script not found: $OS_SCRIPT" - exit 1 -fi + if [[ ! -x "$OS_SCRIPT" ]]; then + chmod +x "$OS_SCRIPT" + fi -if [[ ! -x "$OS_SCRIPT" ]]; then - chmod +x "$OS_SCRIPT" -fi + echo + color_cyan "Running OS script: $OS_SCRIPT" + bash "$OS_SCRIPT" || { + color_red "ERROR: OS script failed: $OS_SCRIPT" + exit 1 + } -echo -color_cyan "Running OS script: $OS_SCRIPT" -bash "$OS_SCRIPT" || { - color_red "ERROR: OS script failed: $OS_SCRIPT" - exit 1 -} + echo + color_yellow "----------------------------------------------------------------" + color_yellow "End Detection" + color_yellow "----------------------------------------------------------------" -echo -color_yellow "----------------------------------------------------------------" -color_yellow "End Detection" -color_yellow "----------------------------------------------------------------" \ No newline at end of file +# ========================================== +# CLOSE THE GUARD WRAPPER AT THE VERY END OF THE FILE: +# ========================================== +fi \ No newline at end of file