#!/usr/bin/env bash # ============================================================================== # Linux Toolbox - Główny skrypt uruchomieniowy # Użycie: # bash -c "$(curl -fsSL https://sh.furxe.net/run.sh)" # curl -fsSL https://sh.furxe.net/run.sh | bash # curl -fsSL https://sh.furxe.net | bash # ./run.sh (lokalnie) # ============================================================================== SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)" # ============================================================================== # KONFIGURACJA ZDALNA (Cloudflare Pages: https://sh.furxe.net) # ============================================================================== BASE_URL="${SCRIPTS_BASE_URL:-https://sh.furxe.net}" # Kolory RED='\033[1;31m' GREEN='\033[1;32m' YELLOW='\033[1;33m' BLUE='\033[1;34m' CYAN='\033[1;36m' BOLD='\033[1m' NC='\033[0m' # Bezpieczny odczyt wejścia od użytkownika (działa zarówno lokalnie jak i przy curl | bash) read_choice() { local prompt="$1" local var_name="$2" local default_val="$3" local input="" if [ -t 0 ]; then read -rp "$prompt" input elif [ -r /dev/tty ]; then read -rp "$prompt" input < /dev/tty 2>/dev/null || input="$default_val" else input="$default_val" fi input="${input:-$default_val}" printf -v "$var_name" '%s' "$input" } detect_distro() { if [ -f /etc/os-release ]; then . /etc/os-release case "$ID" in arch|manjaro|endeavouros|garuda|cachyos) echo "arch" ;; debian|ubuntu|linuxmint|pop|kali|elementary) echo "debian" ;; *) if [ -n "${ID_LIKE:-}" ]; then case "$ID_LIKE" in *arch*) echo "arch" ;; *debian*|*ubuntu*) echo "debian" ;; *) echo "unknown" ;; esac else echo "unknown" fi ;; esac else echo "unknown" fi } run_target_script() { local os="$1" local script_name="$2" local local_path="$SCRIPT_DIR/$os/$script_name" # Sprawdź, czy plik istnieje lokalnie w repozytorium if [ -f "$local_path" ]; then echo -e "${BLUE}[INFO]${NC} Uruchamianie lokalnego skryptu: $local_path" if [ ! -t 0 ] && [ -r /dev/tty ]; then bash "$local_path" < /dev/tty else bash "$local_path" fi return $? fi # Jeśli nie ma pliku lokalnie, pobierz z serwera local script_url="$BASE_URL/$os/$script_name" echo -e "${BLUE}[INFO]${NC} Pobieranie i uruchamianie: $script_url" local tmp_file tmp_file=$(mktemp) if curl -fsSL "$script_url" -o "$tmp_file"; then if [ ! -t 0 ] && [ -r /dev/tty ]; then bash "$tmp_file" < /dev/tty else bash "$tmp_file" fi local status=$? rm -f "$tmp_file" return $status else echo -e "${RED}[BŁĄD]${NC} Nie udało się pobrać skryptu z $script_url" echo "Upewnij się, że plik istnieje na serwerze i połączenie z siecią jest aktywne." rm -f "$tmp_file" return 1 fi } # ============================================================================== # MENU GŁÓWNE # ============================================================================== clear 2>/dev/null || true echo -e "${CYAN}====================================================${NC}" echo -e "${BOLD} Linux Toolbox - Katalog Skryptów ${NC}" echo -e "${CYAN}====================================================${NC}" DETECTED_OS=$(detect_distro) echo -e "Wykryte środowisko: ${GREEN}$DETECTED_OS${NC}" echo "" echo "Wybierz dystrybucję docelową:" echo "1) Arch Linux (oraz Manjaro, EndeavourOS, itp.)" echo "2) Debian / Ubuntu (oraz Linux Mint, Pop!_OS, itp.)" echo "3) Użyj automatycznie wykrytej ($DETECTED_OS)" echo "0) Wyjście" echo "" read_choice "Twój wybór (0-3) [3]: " distro_choice "3" case "$distro_choice" in 1) OS="arch" ;; 2) OS="debian" ;; 3) if [ "$DETECTED_OS" = "unknown" ]; then echo -e "${RED}[BŁĄD]${NC} Nie rozpoznano automatycznie dystrybucji. Wybierz 1 lub 2." exit 1 fi OS="$DETECTED_OS" ;; 0) echo "Wyjście." exit 0 ;; *) echo -e "${RED}Nieprawidłowy wybór!${NC}" exit 1 ;; esac echo -e "\nWybrane środowisko: ${GREEN}$OS${NC}" echo "----------------------------------------------------" if [ "$OS" = "debian" ]; then echo -e "${BOLD}Dostępne skrypty dla Debian / Ubuntu:${NC}" echo "1) Główne menu interaktywne (main.sh)" echo "2) Docker - Instalacja (docker-install.sh)" echo "3) Docker - Deinstalacja (docker-rm.sh)" echo "4) Grafana - Instalacja (grafana-install.sh)" echo "5) Lunar Client - Instalacja (lunarclient.sh)" echo "6) Narzędzia deweloperskie (dev_setup.sh)" echo "7) Narzędzia podstawowe (base_tools.sh)" echo "8) Informacje o systemie (info.sh)" echo "9) Inny (podaj własną nazwę pliku)" echo "0) Wyjście" echo "" read_choice "Wybierz skrypt (0-9) [1]: " script_choice "1" case "$script_choice" in 1) SCRIPT_NAME="main.sh" ;; 2) SCRIPT_NAME="docker-install.sh" ;; 3) SCRIPT_NAME="docker-rm.sh" ;; 4) SCRIPT_NAME="grafana-install.sh" ;; 5) SCRIPT_NAME="lunarclient.sh" ;; 6) SCRIPT_NAME="dev_setup.sh" ;; 7) SCRIPT_NAME="base_tools.sh" ;; 8) SCRIPT_NAME="info.sh" ;; 9) read_choice "Podaj nazwę skryptu (np. custom.sh): " SCRIPT_NAME "main.sh" ;; 0) exit 0 ;; *) echo -e "${RED}Nieprawidłowy wybór!${NC}"; exit 1 ;; esac elif [ "$OS" = "arch" ]; then echo -e "${BOLD}Dostępne skrypty dla Arch Linux:${NC}" echo "1) Główne menu interaktywne (main.sh)" echo "2) Fast Setup - Szybka instalacja PC (fast-setup.sh)" echo "3) AUR Helpers - yay / paru (aur-helpers.sh)" echo "4) Java OpenJDK - Wybór wersji (java.sh)" echo "5) Lunar Client - Instalator (lunarclient.sh)" echo "6) Narzędzia deweloperskie (dev_setup.sh)" echo "7) Narzędzia podstawowe (base_tools.sh)" echo "8) Informacje o systemie (info.sh)" echo "9) Inny (podaj własną nazwę pliku)" echo "0) Wyjście" echo "" read_choice "Wybierz skrypt (0-9) [1]: " script_choice "1" case "$script_choice" in 1) SCRIPT_NAME="main.sh" ;; 2) SCRIPT_NAME="fast-setup.sh" ;; 3) SCRIPT_NAME="aur-helpers.sh" ;; 4) SCRIPT_NAME="java.sh" ;; 5) SCRIPT_NAME="lunarclient.sh" ;; 6) SCRIPT_NAME="dev_setup.sh" ;; 7) SCRIPT_NAME="base_tools.sh" ;; 8) SCRIPT_NAME="info.sh" ;; 9) read_choice "Podaj nazwę skryptu (np. custom.sh): " SCRIPT_NAME "main.sh" ;; 0) exit 0 ;; *) echo -e "${RED}Nieprawidłowy wybór!${NC}"; exit 1 ;; esac fi run_target_script "$OS" "$SCRIPT_NAME" EXIT_STATUS=$? if [ $EXIT_STATUS -eq 0 ]; then echo -e "\n${GREEN}Zakończono pomyślnie!${NC}" else echo -e "\n${RED}Skrypt zakończył się kodem błędu: $EXIT_STATUS.${NC}" fi exit $EXIT_STATUS