From c5082087d3da510b508a08900c6461e0b371c38f Mon Sep 17 00:00:00 2001 From: Yuri Kuit Date: Mon, 6 Jul 2026 15:59:32 +0200 Subject: [PATCH] v3-revamp --- 0-setup-linux.sh | 141 ++++++++++++++++++++++++----------------------- 1 file changed, 71 insertions(+), 70 deletions(-) diff --git a/0-setup-linux.sh b/0-setup-linux.sh index 225577a..b187714 100755 --- a/0-setup-linux.sh +++ b/0-setup-linux.sh @@ -1,8 +1,22 @@ #!/bin/bash -set -euo pipefail +# If debug is enabled, we remove '-e' dynamically inside the initialization so it doesn't instantly crash during debugging steps +set -uo pipefail #------------------------------------------ -# Color helpers (no tput) +# Debug Flag Initialization +#------------------------------------------ +export DEBUG_MODE=false +if [[ "${1:-}" == "-d" || "${1:-}" == "--debug" ]]; then + export DEBUG_MODE=true + echo "!!! DEBUG MODE ENABLED !!!" + echo "The script will pause after each major section." + echo +else + set -e # Enable immediate exit on error only if NOT debugging step-by-step +fi + +#------------------------------------------ +# Color helpers (printf-safe, no tput) #------------------------------------------ RED='\033[0;31m' GREEN='\033[0;32m' @@ -19,33 +33,44 @@ if [ ! -t 1 ]; then RED='' GREEN='' YELLOW='' CYAN='' PURPLE='' BLUE='' GRAY='' BOLD='' RESET='' fi -color_yellow() { printf '%b' "$YELLOW"; } -color_cyan() { printf '%b' "$CYAN"; } -color_red() { printf '%b' "$RED"; } -color_green() { printf '%b' "$GREEN"; } -color_gray() { printf '%b' "$GRAY"; } -color_reset() { printf '%b' "$RESET"; } +color_yellow() { printf "%b%s%b\n" "$YELLOW" "$*" "$RESET"; } +color_cyan() { printf "%b%s%b\n" "$CYAN" "$*" "$RESET"; } +color_red() { printf "%b%s%b\n" "$RED" "$*" "$RESET"; } +color_green() { printf "%b%s%b\n" "$GREEN" "$*" "$RESET"; } + +#------------------------------------------ +# Debug Pause Helper +#------------------------------------------ +pause_if_debug() { + if [[ "$DEBUG_MODE" == "true" ]]; then + echo + color_yellow "----------------------------------------------------------------" + read -rp "Section complete. Press [Enter] to continue, or [q] to abort: " debug_choice + if [[ "${debug_choice,,}" == "q" ]]; then + color_red "Script aborted by user." + exit 1 + fi + color_yellow "----------------------------------------------------------------" + echo + fi +} #------------------------------------------ # Script Version 3.0 #------------------------------------------ echo -color_yellow -echo "----------------------------------------------------------------" +color_yellow "----------------------------------------------------------------" echo " script version 3.0" echo "----------------------------------------------------------------" -color_reset echo #------------------------------------------ # OS Detection #------------------------------------------ echo -color_yellow +color_yellow "----------------------------------------------------------------" +echo " Start OS Detection" echo "----------------------------------------------------------------" -echo "Start OS Detection" -echo "----------------------------------------------------------------" -color_reset echo source /etc/os-release @@ -76,31 +101,27 @@ case "$OS_ID" in esac if [[ -n "$OS" ]]; then - color_cyan - echo "----------------------------------------------------------------" + color_cyan "----------------------------------------------------------------" printf "Detected OS: %s (%s)\n" "$OS" "$OS_PRETTY" printf "Version: %s\n" "$OS_VERSION" - echo "----------------------------------------------------------------" - color_reset + color_cyan "----------------------------------------------------------------" else - color_red - echo "----------------------------------------------------------------" + color_red "----------------------------------------------------------------" printf "ERROR: Unsupported or unknown Linux distribution.\n" printf "Detected: ID=%s, ID_LIKE=%s\n" "$OS_ID" "${OS_LIKE:-empty}" - echo "----------------------------------------------------------------" - color_reset + color_red "----------------------------------------------------------------" exit 1 fi +pause_if_debug + #------------------------------------------ # Desktop Environment Detection / Selection #------------------------------------------ echo -color_yellow -echo "----------------------------------------------------------------" +color_yellow "----------------------------------------------------------------" echo " Desktop Environment Selection" echo "----------------------------------------------------------------" -color_reset echo DE_RAW="${XDG_CURRENT_DESKTOP:-${DESKTOP_SESSION:-}}" @@ -115,11 +136,9 @@ esac if [[ -n "$DE" ]]; then echo - color_cyan - echo "----------------------------------------------------------------" + color_cyan "----------------------------------------------------------------" printf "Detected Desktop Environment: %s (%s)\n" "$DE" "${DE_RAW:-unknown}" - echo "----------------------------------------------------------------" - color_reset + color_cyan "----------------------------------------------------------------" else echo printf "No Desktop Environment detected. Select one to install:\n" @@ -128,7 +147,6 @@ else echo " 2) Plasma" echo " 3) GNOME" echo " x) None (default)" - # Added timeout to avoid hanging if ! read -t 15 -rp "Enter choice [1/2/3/x] (default: x): " choice; then choice="x" fi @@ -142,22 +160,20 @@ else esac done echo - color_cyan - echo "----------------------------------------------------------------" + color_cyan "----------------------------------------------------------------" printf "Selected Desktop Environment: %s\n" "$DE" - echo "----------------------------------------------------------------" - color_reset + color_cyan "----------------------------------------------------------------" fi +pause_if_debug + #------------------------------------------ # Tiling Window Manager Selection #------------------------------------------ echo -color_yellow -echo "----------------------------------------------------------------" +color_yellow "----------------------------------------------------------------" printf " Tiling WM Selection\n" -echo "----------------------------------------------------------------" -color_reset +color_yellow "----------------------------------------------------------------" echo while true; do @@ -181,21 +197,19 @@ while true; do done echo -color_cyan -echo "----------------------------------------------------------------" +color_cyan "----------------------------------------------------------------" printf "Selected Tiling WM: %s\n" "$TWM" -echo "----------------------------------------------------------------" -color_reset +color_cyan "----------------------------------------------------------------" + +pause_if_debug #------------------------------------------ # Installation Level Selection #------------------------------------------ echo -color_yellow -echo "----------------------------------------------------------------" +color_yellow "----------------------------------------------------------------" printf " Installation Level Selection\n" -echo "----------------------------------------------------------------" -color_reset +color_yellow "----------------------------------------------------------------" echo while true; do @@ -219,11 +233,11 @@ while true; do done echo -color_cyan -echo "----------------------------------------------------------------" +color_cyan "----------------------------------------------------------------" printf "Selected Installation Level: %s\n" "$INSTALL_LEVEL" -echo "----------------------------------------------------------------" -color_reset +color_cyan "----------------------------------------------------------------" + +pause_if_debug #------------------------------------------ # Export selections for OS script @@ -243,10 +257,7 @@ case "$OS" in arch) OS_SCRIPT="./arch/arch.sh" ;; fedora) OS_SCRIPT="./fedora/fedora.sh" ;; *) - color_red - echo - printf "No OS script available for %s\n" "$OS" - color_reset + color_red "No OS script available for $OS" exit 1 ;; esac @@ -255,10 +266,7 @@ esac # Preflight check & run #------------------------------------------ if [[ ! -f "$OS_SCRIPT" ]]; then - color_red - echo - printf "ERROR: OS script not found: %s\n" "$OS_SCRIPT" - color_reset + color_red "ERROR: OS script not found: $OS_SCRIPT" exit 1 fi @@ -267,20 +275,13 @@ if [[ ! -x "$OS_SCRIPT" ]]; then fi echo -color_cyan -printf "Running OS script: %s\n" "$OS_SCRIPT" -color_reset +color_cyan "Running OS script: $OS_SCRIPT" bash "$OS_SCRIPT" || { - color_red - echo - printf "ERROR: OS script failed: %s\n" "$OS_SCRIPT" - color_reset + color_red "ERROR: OS script failed: $OS_SCRIPT" exit 1 } echo -color_yellow -echo "----------------------------------------------------------------" +color_yellow "----------------------------------------------------------------" printf "End Detection\n" -echo "----------------------------------------------------------------" -color_reset \ No newline at end of file +color_yellow "----------------------------------------------------------------" \ No newline at end of file