diff --git a/README.md b/README.md index f8f403a..d226832 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@
-Debianito is a user-friendly post-installation automation script for Debian 12 (Bookworm) and Debian 13 (Trixie). It streamlines system configuration, driver installation (including NVIDIA drivers), repository setup with backports support, gaming tools integration, and more with an interactive menu-driven interface. +Debianito is a user-friendly post-installation automation script for Debian 11 (Bullseye), Debian 12 (Bookworm) and Debian 13 (Trixie). It streamlines system configuration, driver installation (including NVIDIA drivers with legacy support via rescue environment), repository setup with backports support, gaming tools integration, and more with an interactive menu-driven interface. [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-red.svg?style=for-the-badge&logo=gnu&logoColor=white)](https://github.com/stornic56/debianito-post-install/blob/main/LICENSE) @@ -14,8 +14,8 @@ Debianito is a user-friendly post-installation automation script for Debian 12 ( | Requirement | Specification | |-------------|---------------| -| **OS** | Debian 12 (Bookworm), Debian 13 (Trixie) | -| **Privileges** | Normal user with `sudo` access, script validates root/sudo in `utils.sh`| +| **OS** | Debian 11 (Bullseye), Debian 12 (Bookworm), Debian 13 (Trixie) | +| **Privileges** | Normal user with `sudo` access, script validates root/sudo in utils.sh | | **Terminal** | Any modern terminal emulator supporting ANSI colors and UTF-8 box-drawing characters | | **Dependencies** | Standard Debian packages (`whiptail`, `lsb-release`); auto-installed if missing | @@ -39,10 +39,11 @@ chmod +x debianito.sh && ./debianito.sh After running the script: -1. **Select Option:** Use arrow keys or type `1-10`. -2. **Confirm Actions:** Installation prompts use `whiptail` for TUI confirmations. -3. **Review System Info:** Header displays detected Debian version `DEBIAN_CODENAME`, `DEBIAN_VERSION` and hardware summary before each action. -4. **Repeat as Needed:** Return to main menu at any time or exit when done. +1. **Select Option:** Use arrow keys or type 1-10. +2. **Navigation:** Use Arrow Keys (Up↑/Down↓) to move between list options and ENTER key to confirm selection. +3. **Confirm Actions:** Installation prompts use whiptail for TUI confirmations. +4. **Review System Info:** Header displays detected Debian version and hardware summary before each action. +5. **Repeat as Needed:** Return to main menu at any time or exit when done. | Option | Description | What it does | |--------|-------------|--------------| @@ -87,44 +88,50 @@ The submenu offers 11 categories: ```bash ├── debianito.sh # Main entry point; TUI menu + system detection -└── modules/ - ├── utils.sh # System info helpers: CPU/RAM/GPU/WiFi detection, Debian version check ([`detect_debian_version()`](utils.sh#L79)) - ├── sudo_config.sh # User group + pwfeedback setup - ├── repos.sh # Repository configuration (deb822/classic format) with backup/restore - ├── firmware.sh # WiFi microcode and chipset-specific support via [`firmware-linux-nonfree`](modules/firmware.sh) - ├── gpu.sh # AMD/Intel/NVIDIA driver handling ([`detect_gpu()`](utils.sh#L168)); NVIDIA Kepler/Turing detection veto (line 203+) - ├── kernel.sh # Update Kernel to Backports with NVIDIA compatibility warnings - ├── gaming.sh # Steam, GameMode, MangoHud, Heroic Games Launcher - ├── extras.sh # Dispatcher for the "Extras" submenu (Option 9) - ├── zram.sh # ZRAM compressed swap configuration - └── extras/ # Category modules organized by function - ├── _helpers.sh # Shared helpers: [`_inst()`](utils.sh#L418), [`_state()`] for package management - ├── essential/ # Essential Pack (compression, system info, VLC, MS fonts) - │ └── essential.sh # One-click essentials installation - ├── system/ # System Tools (htop, btop, ncdu, timeshift, tmux, flatpak, extrepo, virtualization tools) - │ └── system.sh # 25+ system utility packages - ├── dev/ # Development & Servers (Docker, Nginx/Apache, PostgreSQL/MariaDB, SSH, fail2ban, Python) - │ └── dev.sh # 15 development/server tools - ├── players/ # Media Players (VLC, MPV) - │ └── players.sh # Video player packages - ├── internet/ # Internet: Firefox (Mozilla), LibreWolf, Floorp, Chromium, Thunderbird, Riseup VPN, Tor Browser - │ └── internet.sh # Browsers, email clients, VPN tools - ├── themes/ # Customization submenu with 4 options - │ ├── themes.sh # Submenu dispatcher for customization categories - │ ├── desktop-themes/ # Desktop Themes (GTK/KDE): Arc, Numix, Breeze GTK, Bluebird, Blackbird, Greybird, Orchis - │ │ └── desktop-themes.sh - │ ├── icons/ # Icon Themes: Papirus, Numix, Elementary, Deepin, Suru, Obsidian, Breeze, Moka - │ │ └── icons.sh # 11-12 icon theme packages - │ ├── cursors/ # Cursor Themes: Bibata, Breeze, Chameleon, DMZ, XCursor, Oxygen - │ │ └── cursors.sh # 6 cursor theme packages - │ └── fonts/ # Fonts: Bebas Neue, Anonymous Pro, ADF Verana, 3270, Liberation, MS Core, Ubuntu, Recommended - │ └── fonts.sh # 8 font packages including MS Core fonts - ├── fetch/ # Fetch Tools (Neofetch/Fastfetch, hyfetch, Linux logo, Screenfetch) - │ └── fetch.sh # System info display tools - ├── download/ # Downloaders & Torrent Clients: aria2, ytdlp, FileZilla, qBittorrent, Deluge, Transmission, mktorrent - │ └── download.sh # Download manager + torrent client packages - └── design/ # Multimedia & Design (GIMP, Kdenlive, Blender, OBS Studio, Audacity, Inkscape, HandBrake) - └── design.sh # 12+ creative applications +├── modules/ +│ ├── utils.sh # System info helpers: CPU/RAM/GPU/WiFi detection, Debian version check ([`detect_debian_version()`](utils.sh#L79)) +│ ├── sudo_config.sh # User group + pwfeedback setup +│ ├── repos.sh # Repository configuration (deb822/classic format) with backup/restore +│ ├── firmware.sh # WiFi microcode and chipset-specific support via [`firmware-linux-nonfree`](modules/firmware.sh) +│ ├── gpu.sh # AMD/Intel/NVIDIA driver handling ([`detect_gpu()`](utils.sh#L168)); NVIDIA Kepler/Turing detection veto (line 203+) +│ ├── kernel.sh # Update Kernel to Backports with NVIDIA compatibility warnings +│ ├── gaming.sh # Steam, GameMode, MangoHud, Heroic Games Launcher +│ ├── zram.sh # ZRAM compressed swap configuration +│ ├── gpu/ # NVIDIA-specific modules for Debian 12+ (Bookworm/Trixie) +│ │ ├── _helpers.sh # Shared helpers including [`is_nvidia_kepler()`](gpu/_helpers.sh#LXX) with four isolated blocks for legacy detection +│ │ └── nvidia.sh # NVIDIA driver installation ([`_install_nvidia_bookworm_kepler()`](gpu/nvidia.sh#LXX)) +│ ├── bullseye/ # Legacy support modules for Debian 11 (Bullseye) with ultra-minimalist rescue environment +│ │ ├── legacy.sh # Fermi GPU detection (NVIDIA-390xx drivers), [install_gaming_bullseye](bullseye/legacy.sh#LXX) function +│ │ ├── repos.sh # Classic `/etc/apt/sources.list` format with Archive Phase 2026 configuration +│ │ └── extras.sh # Utilities installation with purged package list for unavailable packages on Debian 11 +│ └── extras/ # Category modules organized by function (Option 9 submenu) +│ ├── _helpers.sh # Shared helpers: [`_inst()`](utils.sh#L418), [`_state()`] for package management +│ ├── essential/ # Essential Pack (compression, system info, VLC, MS fonts) +│ │ └── essential.sh # One-click essentials installation +│ ├── system/ # System Tools (htop, btop, ncdu, timeshift, tmux, flatpak, extrepo, virtualization tools) +│ │ └── system.sh # 25+ system utility packages +│ ├── dev/ # Development & Servers (Docker, Nginx/Apache, PostgreSQL/MariaDB, SSH, fail2ban, Python) +│ │ └── dev.sh # 15 development/server tools +│ ├── players/ # Media Players (VLC, MPV) +│ │ └── players.sh # Video player packages +│ ├── internet/ # Internet: Firefox (Mozilla), LibreWolf, Floorp, Chromium, Thunderbird, Riseup VPN, Tor Browser +│ │ └── internet.sh # Browsers, email clients, VPN tools +│ ├── themes/ # Customization submenu with 4 options +│ │ ├── themes.sh # Submenu dispatcher for customization categories +│ │ ├── desktop-themes/ # Desktop Themes (GTK/KDE): Arc, Numix, Breeze GTK, Bluebird, Blackbird, Greybird, Orchis +│ │ │ └── desktop-themes.sh +│ │ ├── icons/ # Icon Themes: Papirus, Numix, Elementary, Deepin, Suru, Obsidian, Breeze, Moka +│ │ │ └── icons.sh # 11-12 icon theme packages +│ │ ├── cursors/ # Cursor Themes: Bibata, Breeze, Chameleon, DMZ, XCursor, Oxygen +│ │ │ └── cursors.sh # 6 cursor theme packages +│ │ └── fonts/ # Fonts: Bebas Neue, Anonymous Pro, ADF Verana, 3270, Liberation, MS Core, Ubuntu, Recommended +│ │ └── fonts.sh # 8 font packages including MS Core fonts +│ ├── fetch/ # Fetch Tools (Neofetch/Fastfetch, hyfetch, Linux logo, Screenfetch) +│ │ └── fetch.sh # System info display tools +│ ├── download/ # Downloaders & Torrent Clients: aria2, ytdlp, FileZilla, qBittorrent, Deluge, Transmission, mktorrent +│ │ └── download.sh # Download manager + torrent client packages +│ └── design/ # Multimedia & Design (GIMP, Kdenlive, Blender, OBS Studio, Audacity, Inkscape, HandBrake) +│ └── design.sh # 12+ creative applications ``` > 🤖 **AI-Assisted Development Note** diff --git a/debianito.sh b/debianito.sh index e2ee634..46ae55b 100644 --- a/debianito.sh +++ b/debianito.sh @@ -25,6 +25,13 @@ source "${MODULES_DIR}/repos.sh" [ -f "${MODULES_DIR}/extras.sh" ] && source "${MODULES_DIR}/extras.sh" [ -f "${MODULES_DIR}/zram.sh" ] && source "${MODULES_DIR}/zram.sh" +# ── Bullseye-specific modules (loaded only on Debian 11) ── +if [ -d "${MODULES_DIR}/bullseye" ]; then + [ -f "${MODULES_DIR}/bullseye/legacy.sh" ] && source "${MODULES_DIR}/bullseye/legacy.sh" + [ -f "${MODULES_DIR}/bullseye/repos.sh" ] && source "${MODULES_DIR}/bullseye/repos.sh" + [ -f "${MODULES_DIR}/bullseye/extras.sh" ] && source "${MODULES_DIR}/bullseye/extras.sh" +fi + REPOS_CONFIGURED=false DEBIAN_VERSION="" DEBIAN_CODENAME="" @@ -58,13 +65,46 @@ main_menu() { case "$choice" in 1) _show_sysinfo ;; 2) config_sudo || true ;; - 3) configure_repos || true ;; - 4) install_firmware || true ;; + 3) + if [ "$DEBIAN_VERSION" = "11" ] && type configure_repos_bullseye &>/dev/null; then + configure_repos_bullseye || true + else + configure_repos || true + fi + ;; + 4) + if [ "$DEBIAN_VERSION" = "11" ] && type install_firmware_bullseye &>/dev/null; then + install_firmware_bullseye || true + else + install_firmware || true + fi + ;; 5) install_gpu_drivers || true ;; - 6) install_kernel_backports || true ;; - 7) install_gaming || true ;; + 6) + if [ "$DEBIAN_VERSION" = "11" ]; then + _msg "Not Available" \ + "Backports Kernel is not available on Debian 11 Bullseye.\n\n\ +Ultra Minimalist Rescue Mode does not include third-party\n\ +kernels. Use the stable kernel provided by Bullseye." 10 60 + else + install_kernel_backports || true + fi + ;; + 7) + if [ "$DEBIAN_VERSION" = "11" ] && type install_gaming_bullseye &>/dev/null; then + install_gaming_bullseye || true + else + install_gaming || true + fi + ;; 8) install_zram || true ;; - 9) install_extras || true ;; + 9) + if [ "$DEBIAN_VERSION" = "11" ] && type install_extras_bullseye &>/dev/null; then + install_extras_bullseye || true + else + install_extras || true + fi + ;; 10) echo "Exiting."; exit 0 ;; esac done @@ -97,6 +137,7 @@ Network: ${network_info}" 13 65 check_root check_sudo check_system_time +sync_system_time detect_debian_version detect_cpu_ram @@ -104,4 +145,9 @@ detect_kernel detect_gpu detect_network +# ── Bullseye-specific init (archive phase) ── +if [ "$DEBIAN_VERSION" = "11" ] && type check_bullseye_archive_phase &>/dev/null; then + check_bullseye_archive_phase +fi + main_menu diff --git a/modules/bullseye/extras.sh b/modules/bullseye/extras.sh new file mode 100644 index 0000000..10c27d1 --- /dev/null +++ b/modules/bullseye/extras.sh @@ -0,0 +1,475 @@ +#!/usr/bin/env bash +# extras.sh — Bullseye: software purgado / solo repos oficiales +# License GPL v3 + +# ── Essential Pack (Bullseye) ── +_quick_install_bullseye() { + _msg "Essential Pack — Bullseye" \ + "Instalar programas básicos:\n\n\ + - Compression (zip, unrar, p7zip-full)\n\ + - System tools (htop, inxi, neofetch, bpytop)\n\ + - VLC media player\n\ + - Microsoft fonts" 13 60 + + local quick_pkgs=( + zip unzip rar unrar p7zip-full p7zip-rar + neofetch bpytop htop inxi vlc + ttf-mscorefonts-installer + ) + _run_install_batch "${quick_pkgs[@]}" + echo -e "${GREEN}Essential Pack installed.${NC}" +} + +# ── Firmware (Bullseye) ── +install_firmware_bullseye() { + echo -e "${YELLOW}Installing firmware-linux-nonfree (Bullseye)...${NC}" + + if is_installed "firmware-linux-nonfree"; then + echo "firmware-linux-nonfree already installed." + return + fi + + local fw_ver + fw_ver=$(apt-cache policy firmware-linux-nonfree 2>/dev/null | awk 'NR==3 {print $2; exit}') + + if _confirm "Firmware" \ + "firmware-linux-nonfree proporciona drivers para:\n\ + WiFi, Bluetooth, GPU, audio, webcams, etc.\n\n\ + Version: ${fw_ver:-unknown}\n\n\ +Instalar?"; then + _run_cmd "Firmware" "sudo apt install -y firmware-linux-nonfree" \ + "Installing firmware-linux-nonfree..." + echo -e "${GREEN}Firmware installed.${NC}" + fi +} + +# ====================================================================== +# EXTRA SOFTWARE CATEGORIES — Bullseye versions (purged/whitelisted) +# Only packages available in Debian 11 official repos. +# ====================================================================== + +_cat_customization_bullseye() { + local items=() + if [ -f "${MODULES_DIR}/extras/themes/icons/icons.sh" ]; then + local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6)) + local sub + sub=$(whiptail --title "Customization (Bullseye)" --menu \ + "Select type:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \ + "1" "Desktop Themes (GTK/KDE)" \ + "2" "Icon Themes" \ + "3" "Cursor Themes" \ + "4" "Fonts" \ + 3>&1 1>&2 2>&3) + [ -z "$sub" ] && return + case $sub in + 1) _cat_themes_bullseye ;; + 2) _cat_icons_bullseye ;; + 3) _cat_cursors_bullseye ;; + 4) _cat_fonts_bullseye ;; + esac + else + _msg "Customization" "Themes submodules not found." 8 50 + fi +} + +_cat_themes_bullseye() { + local theme_state; theme_state=$(_state "breeze") + local numix_state; numix_state=$(_state "numix-gtk-theme") + + if [ "$theme_state" = "OFF" ] && [ "$numix_state" = "OFF" ]; then + theme_state="ON" + fi + + local choices + choices=$(whiptail --title "Desktop Themes (Bullseye)" --checklist \ + "Available themes in Bullseye repos ($TUI_ALTO linea):" \ + $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "breeze" "Breeze GTK theme (KDE)$(_inst breeze)" "$theme_state" \ + "numix-gtk-theme" "Numix GTK theme$(_inst numix-gtk-theme)" "$numix_state" \ + 3>&1 1>&2 2>&3) + clear + [ -z "$choices" ] && return + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + for pkg in $cleaned; do + ! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed." + done + echo -e "${GREEN}Desktop themes installed.${NC}" +} + +_cat_icons_bullseye() { + _msg "Icon Themes (Bullseye)" \ + "Adwaita, Humanity, DMZ y otros temas de iconos\n\ +están disponibles desde los repos oficiales.\n\n\ +Seleccione desde el menú de GNOME/KDE o instale\n\ +el paquete 'gnome-icon-theme' o 'breeze-icon-theme'." 12 60 + + local choices + choices=$(whiptail --title "Icon Themes (Bullseye)" --checklist \ + "Available icon themes:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "gnome-icon-theme" "GNOME icon theme$(_inst gnome-icon-theme)" "$(_state gnome-icon-theme)" \ + "breeze-icon-theme" "Breeze icon theme$(_inst breeze-icon-theme)" "$(_state breeze-icon-theme)" \ + "papirus-icon-theme" "Papirus icon theme$(_inst papirus-icon-theme)" "$(_state papirus-icon-theme)" \ + 3>&1 1>&2 2>&3) + clear + [ -z "$choices" ] && return + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + for pkg in $cleaned; do + ! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed." + done + echo -e "${GREEN}Icon themes installed.${NC}" +} + +_cat_cursors_bullseye() { + local choices + choices=$(whiptail --title "Cursor Themes (Bullseye)" --checklist \ + "Available cursor themes:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "dmz-cursor-theme" "DMZ cursor theme$(_inst dmz-cursor-theme)" "$(_state dmz-cursor-theme)" \ + "breeze-cursor-theme" "Breeze cursor theme$(_inst breeze-cursor-theme)" "$(_state breeze-cursor-theme)" \ + "oxygen-cursor-theme" "Oxygen cursor theme$(_inst oxygen-cursor-theme)" "$(_state oxygen-cursor-theme)" \ + 3>&1 1>&2 2>&3) + clear + [ -z "$choices" ] && return + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + for pkg in $cleaned; do + ! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed." + done + echo -e "${GREEN}Cursor themes installed.${NC}" +} + +_cat_fonts_bullseye() { + local choices + choices=$(whiptail --title "Fonts (Bullseye)" --checklist \ + "Available fonts:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "fonts-firacode" "Fira Code monospace font$(_inst fonts-firacode)" "$(_state fonts-firacode)" \ + "fonts-noto" "Noto fonts (Google)$(_inst fonts-noto)" "$(_state fonts-noto)" \ + "fonts-dejavu-core" "DejaVu core fonts$(_inst fonts-dejavu-core)" "$(_state fonts-dejavu-core)" \ + "ttf-mscorefonts-installer" "Microsoft Core Fonts$(_inst ttf-mscorefonts-installer)" "$(_state ttf-mscorefonts-installer)" \ + 3>&1 1>&2 2>&3) + clear + [ -z "$choices" ] && return + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + for pkg in $cleaned; do + ! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed." + done + echo -e "${GREEN}Fonts installed.${NC}" +} + +_cat_download_bullseye() { + local choices + choices=$(whiptail --title "Download & Torrent (Bullseye)" --checklist \ + "Select download tools:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "aria2" "Multiprotocol downloader (CLI)$(_inst aria2)" "$(_state aria2)" \ + "filezilla" "FTP/SFTP client (GUI)$(_inst filezilla)" "$(_state filezilla)" \ + "qbittorrent" "BitTorrent client (Qt)$(_inst qbittorrent)" "$(_state qbittorrent)" \ + "transmission-gtk" "BitTorrent client (GTK)$(_inst transmission-gtk)" "$(_state transmission-gtk)" \ + "transmission-qt" "BitTorrent client (Qt)$(_inst transmission-qt)" "$(_state transmission-qt)" \ + "deluge" "BitTorrent client (GTK)$(_inst deluge)" "$(_state deluge)" \ + 3>&1 1>&2 2>&3) + clear + [ -z "$choices" ] && return + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + for pkg in $cleaned; do + if ! is_installed "$pkg"; then + _run_install "$pkg" + else + echo "$pkg already installed." + fi + done + echo -e "${GREEN}Download tools installed.${NC}" +} + +_cat_internet_bullseye() { + local ff_state; ff_state=$(_state "firefox-esr") + local tbird_state; tbird_state=$(_state "thunderbird") + local chr_state; chr_state=$(_state "chromium") + + local choices + choices=$(whiptail --title "Internet (Bullseye)" --checklist \ + "Select browsers, email:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "firefox-esr" "Firefox ESR (official Debian)$(_inst firefox-esr)" "$ff_state" \ + "chromium" "Chromium web browser$(_inst chromium)" "$chr_state" \ + "thunderbird" "Email client$(_inst thunderbird)" "$tbird_state" \ + "dillo" "Lightweight graphical browser$(_inst dillo)" "$(_state dillo)" \ + "elinks" "Text-mode web browser$(_inst elinks)" "$(_state elinks)" \ + "konqueror" "KDE file manager / web browser$(_inst konqueror)" "$(_state konqueror)" \ + "w3m" "Text-mode browser + deps$(_inst w3m)" "$(_state w3m)" \ + "torbrowser-launcher" "Tor Browser launcher$(_inst torbrowser-launcher)" "$(_state torbrowser-launcher)" \ + 3>&1 1>&2 2>&3) + clear + [ -z "$choices" ] && return + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + for pkg in $cleaned; do + if ! is_installed "$pkg"; then + _run_install "$pkg" + else + echo "$pkg already installed." + fi + done + echo -e "${GREEN}Internet tools installed.${NC}" +} + +_cat_players_bullseye() { + local choices + choices=$(whiptail --title "Media Players (Bullseye)" --checklist \ + "Select media players:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "mpv" "Lightweight media player$(_inst mpv)" "$(_state mpv)" \ + "vlc" "VLC media player$(_inst vlc)" "$(_state vlc)" \ + 3>&1 1>&2 2>&3) + clear + [ -z "$choices" ] && return + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + for pkg in $cleaned; do + if ! is_installed "$pkg"; then + _run_install "$pkg" + else + echo "$pkg already installed." + fi + done + echo -e "${GREEN}Media players installed.${NC}" +} + +_cat_design_bullseye() { + local choices + choices=$(whiptail --title "Multimedia & Design (Bullseye)" --checklist \ + "Select multimedia and design tools:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "audacity" "Audio editor/recorder$(_inst audacity)" "$(_state audacity)" \ + "blender" "3D modeling/animation suite$(_inst blender)" "$(_state blender)" \ + "ffmpeg" "Multimedia framework (CLI)$(_inst ffmpeg)" "$(_state ffmpeg)" \ + "gimp" "Image editor$(_inst gimp)" "$(_state gimp)" \ + "inkscape" "Vector graphics editor$(_inst inkscape)" "$(_state inkscape)" \ + "kdenlive" "Video editor (KDE)$(_inst kdenlive)" "$(_state kdenlive)" \ + "obs-studio" "Streaming/recording studio$(_inst obs-studio)" "$(_state obs-studio)" \ + "scribus" "Desktop publishing$(_inst scribus)" "$(_state scribus)" \ + 3>&1 1>&2 2>&3) + clear + [ -z "$choices" ] && return + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + for pkg in $cleaned; do + if ! is_installed "$pkg"; then + _run_install "$pkg" + else + echo "$pkg already installed." + fi + done + echo -e "${GREEN}Design tools installed.${NC}" +} + +_cat_programming_bullseye() { + local choices + choices=$(whiptail --title "Programming (Bullseye)" --checklist \ + "Select programming tools:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "build-essential" "GCC/Clang compilers$(_inst build-essential)" "$(_state build-essential)" \ + "python3" "Python 3 interpreter$(_inst python3)" "$(_state python3)" \ + "python3-pip" "Python 3 package manager$(_inst python3-pip)" "$(_state python3-pip)" \ + "nodejs" "Node.js (Debian repo)$(_inst nodejs)" "$(_state nodejs)" \ + "npm" "Node.js package manager$(_inst npm)" "$(_state npm)" \ + "openjdk-17-jdk" "OpenJDK 17 JDK$(_inst openjdk-17-jdk)" "$(_state openjdk-17-jdk)" \ + "git" "Version control system$(_inst git)" "$(_state git)" \ + "vim" "Text editor (Vim)$(_inst vim)" "$(_state vim)" \ + "nano" "Text editor (Nano)$(_inst nano)" "$(_state nano)" \ + "geany" "Lightweight IDE$(_inst geany)" "$(_state geany)" \ + "codeblocks" "Cross-platform IDE$(_inst codeblocks)" "$(_state codeblocks)" \ + 3>&1 1>&2 2>&3) + clear + [ -z "$choices" ] && return + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + for pkg in $cleaned; do + if ! is_installed "$pkg"; then + _run_install "$pkg" + else + echo "$pkg already installed." + fi + done + echo -e "${GREEN}Programming tools installed.${NC}" +} + +_cat_security_bullseye() { + local choices + choices=$(whiptail --title "Security & Networking (Bullseye)" --checklist \ + "Select security tools:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "nmap" "Network scanner$(_inst nmap)" "$(_state nmap)" \ + "wireshark" "Packet analyzer$(_inst wireshark)" "$(_state wireshark)" \ + "nikto" "Web server scanner$(_inst nikto)" "$(_state nikto)" \ + "sqlmap" "SQL injection tool$(_inst sqlmap)" "$(_state sqlmap)" \ + "gobuster" "Directory/file brute-forcer$(_inst gobuster)" "$(_state gobuster)" \ + "hydra" "Login cracker$(_inst hydra)" "$(_state hydra)" \ + "john" "John the Ripper password cracker$(_inst john)" "$(_state john)" \ + "aircrack-ng" "Wireless security tool$(_inst aircrack-ng)" "$(_state aircrack-ng)" \ + 3>&1 1>&2 2>&3) + clear + [ -z "$choices" ] && return + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + for pkg in $cleaned; do + if ! is_installed "$pkg"; then + _run_install "$pkg" + else + echo "$pkg already installed." + fi + done + echo -e "${GREEN}Security tools installed.${NC}" +} + +_cat_general_bullseye() { + local choices + choices=$(whiptail --title "System Tools (Bullseye)" --checklist \ + "Select system utilities:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "compress" "Compression tools (zip, unrar, p7zip)$(_inst zip)" "$(_state zip)" \ + "conky" "System monitor for desktop$(_inst conky)" "$(_state conky)" \ + "cpu-x" "CPU-X (alternative to CPU-Z)$(_inst cpu-x)" "$(_state cpu-x)" \ + "curl-wget" "HTTP transfer tools (curl, wget)$(_inst curl)" "$(_state curl)" \ + "flatpak" "Flatpak sandbox (Bullseye native)$(_inst flatpak)" "$(_state flatpak)" \ + "fwupd" "Firmware update daemon$(_inst fwupd)" "$(_state fwupd)" \ + "gnome-disk-utility" "Disk management GUI$(_inst gnome-disk-utility)" "$(_state gnome-disk-utility)" \ + "gparted" "Partition editor$(_inst gparted)" "$(_state gparted)" \ + "htop" "Interactive process viewer$(_inst htop)" "$(_state htop)" \ + "inxi" "System information tool$(_inst inxi)" "$(_state inxi)" \ + "kvm" "QEMU/KVM virtualization$(_inst virt-manager)" "$(_state virt-manager)" \ + "lshw" "List hardware details$(_inst lshw)" "$(_state lshw)" \ + "mc" "Midnight Commander$(_inst mc)" "$(_state mc)" \ + "ncdu" "Disk usage analyzer$(_inst ncdu)" "$(_state ncdu)" \ + "psensor" "Temperature monitor$(_inst psensor)" "$(_state psensor)" \ + "timeshift" "System restore snapshots$(_inst timeshift)" "$(_state timeshift)" \ + "tmux" "Terminal multiplexer$(_inst tmux)" "$(_state tmux)" \ + "wine" "Windows compatibility layer$(_inst wine)" "$(_state wine)" \ + 3>&1 1>&2 2>&3) + clear + [ -z "$choices" ] && return + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + for pkg in $cleaned; do + case $pkg in + compress) + local need=() + ! is_installed "zip" && need+=("zip") + ! is_installed "unzip" && need+=("unzip") + ! is_installed "rar" && need+=("rar") + ! is_installed "unrar" && need+=("unrar") + ! is_installed "p7zip-full" && need+=("p7zip-full") + ! is_installed "p7zip-rar" && need+=("p7zip-rar") + if [ ${#need[@]} -gt 0 ]; then + _run_install_batch "${need[@]}" + fi + ;; + curl-wget) + local need=() + ! is_installed "curl" && need+=("curl") + ! is_installed "wget" && need+=("wget") + [ ${#need[@]} -gt 0 ] && _run_install_batch "${need[@]}" || echo "Already installed." + ;; + kvm) + if ! is_installed "virt-manager"; then + _run_cmd "KVM" "sudo apt install -y qemu-system-x86 qemu-utils libvirt-daemon-system libvirt-clients bridge-utils virt-manager" "Installing KVM..." + sudo adduser "$USER" libvirt 2>/dev/null || true + sudo adduser "$USER" kvm 2>/dev/null || true + else + echo "QEMU/KVM already installed." + fi + ;; + flatpak) + if ! is_installed "flatpak"; then + _run_cmd "Flatpak" "sudo apt install -y flatpak" "Installing Flatpak..." + flatpak remote-add --if-not-exists flathub \ + https://dl.flathub.org/repo/flathub.flatpakrepo + echo -e "${GREEN}Flatpak + Flathub installed.${NC}" + else + echo "Flatpak already installed." + fi + ;; + wine) + if ! is_installed "wine"; then + if ! dpkg --print-foreign-architectures 2>/dev/null | grep -q i386; then + sudo dpkg --add-architecture i386 + _run_cmd "APT Update" "sudo apt update" "Updating package lists..." + fi + _run_cmd "Wine" "sudo apt install -y wine wine32 wine64 libwine libwine:i386 fonts-wine" "Installing Wine..." + echo -e "${GREEN}Wine installed.${NC}" + else + echo "Wine already installed." + fi + ;; + fwupd) + if ! is_installed "fwupd"; then + _run_cmd "fwupd" "sudo apt install -y fwupd" "Installing fwupd..." + fi + if _confirm "Firmware Scan" "Scan for firmware updates now?"; then + sudo fwupdmgr refresh --force 2>/dev/null || true + sudo fwupdmgr get-updates 2>&1 || true + fi + ;; + *) + if ! is_installed "$pkg"; then + _run_install "$pkg" + else + echo "$pkg already installed." + fi + ;; + esac + done + echo -e "${GREEN}System tools installed.${NC}" +} + +_cat_fetch_bullseye() { + local items=( + "neofetch" "System info fetcher$(_inst neofetch)" "$(_state neofetch)" + "screenfetch" "System info (BSD/Linux)$(_inst screenfetch)" "$(_state screenfetch)" + "linuxlogo" "Linux logo + system info$(_inst linuxlogo)" "$(_state linuxlogo)" + ) + local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6)) + local choices + choices=$(whiptail --title "Fetch Tools (Bullseye)" --checklist \ + "Select system info tools:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \ + "${items[@]}" 3>&1 1>&2 2>&3) + clear + [ -z "$choices" ] && return + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + for pkg in $cleaned; do + if ! is_installed "$pkg"; then + _run_install "$pkg" + else + echo "$pkg already installed." + fi + done + echo -e "${GREEN}Fetch tools installed.${NC}" +} + +# ====================================================================== +# master installer — replaces install_extras() on Bullseye +# ====================================================================== +install_extras_bullseye() { + echo -e "${YELLOW}Extra software — Bullseye mode (official repos only).${NC}" + + while true; do + local cat_choice + cat_choice=$(whiptail --title "Extra Software — Bullseye" --menu \ + "Select a category:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "0" "Essential Pack" \ + "1" "Customization System" \ + "2" "Download & Network" \ + "3" "Internet (Browsers, Email)" \ + "4" "Media Players" \ + "5" "Multimedia & Design" \ + "6" "Programming Applications" \ + "7" "Security & Networking" \ + "8" "System Tools" \ + "9" "Fetch / System Info" \ + "10" "Back to main menu" \ + 3>&1 1>&2 2>&3) + + [ -z "$cat_choice" ] && return + clear + + case "$cat_choice" in + 0) _quick_install_bullseye ;; + 1) _cat_customization_bullseye ;; + 2) _cat_download_bullseye ;; + 3) _cat_internet_bullseye ;; + 4) _cat_players_bullseye ;; + 5) _cat_design_bullseye ;; + 6) _cat_programming_bullseye ;; + 7) _cat_security_bullseye ;; + 8) _cat_general_bullseye ;; + 9) _cat_fetch_bullseye ;; + 10) return ;; + esac + clear + done +} diff --git a/modules/bullseye/legacy.sh b/modules/bullseye/legacy.sh new file mode 100644 index 0000000..076e582 --- /dev/null +++ b/modules/bullseye/legacy.sh @@ -0,0 +1,214 @@ +#!/usr/bin/env bash +# legacy.sh — Bullseye: hardware detection, NVIDIA legacy drivers, lightweight gaming +# License GPL v3 + +BULLSEYE_USE_ARCHIVE=false +BULLSEYE_USE_ARCHIVE_CHECKED=false + +check_bullseye_archive_phase() { + $BULLSEYE_USE_ARCHIVE_CHECKED && return + BULLSEYE_USE_ARCHIVE_CHECKED=true + + local current_year + local current_month + current_year=$(date +%Y) + current_month=$(date +%-m) + + if [ "$current_year" -gt 2026 ] || \ + { [ "$current_year" -eq 2026 ] && [ "$current_month" -ge 9 ]; }; then + BULLSEYE_USE_ARCHIVE=true + fi + + if $BULLSEYE_USE_ARCHIVE; then + _msg "Debian 11 — Archive Phase" \ + "Bullseye LTS support ended on 31 Aug 2026.\n\n\ +The script will use archive.debian.org mirrors.\n\ +No security updates will be available." 12 60 + fi +} + +# --------------------------------------------------------------------------- +# Fermi PCI ID detection — 6 condiciones inclusivas +# --------------------------------------------------------------------------- +is_nvidia_fermi() { + local dev_id + dev_id=$(lspci -nn | grep -iE "VGA|3D" | grep -i nvidia | \ + grep -oP '10de:\K[0-9a-fA-F]+' | head -n1) + [ -z "$dev_id" ] && { echo false; return; } + + local dev_int + dev_int=$((16#${dev_id,,})) + + if [ "$dev_int" -ge $((16#06C0)) ] && [ "$dev_int" -le $((16#06DF)) ]; then echo true; return; fi + if [ "$dev_int" -ge $((16#0DC0)) ] && [ "$dev_int" -le $((16#0DFF)) ]; then echo true; return; fi + if [ "$dev_int" -ge $((16#0DE0)) ] && [ "$dev_int" -le $((16#0DFF)) ]; then echo true; return; fi + if [ "$dev_int" -ge $((16#0E00)) ] && [ "$dev_int" -le $((16#0E1F)) ]; then echo true; return; fi + if [ "$dev_int" -ge $((16#1080)) ] && [ "$dev_int" -le $((16#10DF)) ]; then echo true; return; fi + if [ "$dev_int" -eq $((16#1201)) ]; then echo true; return; fi + + echo false +} + +# --------------------------------------------------------------------------- +# NVIDIA driver installer for Bullseye (Kepler → 470, Fermi → 390) +# --------------------------------------------------------------------------- +install_nvidia_bullseye() { + echo -e "${YELLOW}NVIDIA GPU detected (Bullseye mode).${NC}" + + local is_fermi; is_fermi=$(is_nvidia_fermi) + + local nv_pkg="" + local gpu_gen="" + + if [ "$is_fermi" = "true" ]; then + nv_pkg="nvidia-legacy-390xx-driver" + gpu_gen="Fermi" + else + # Bullseye: cualquier otra NVIDIA (Kepler incl.) → nvidia-driver (470) + nv_pkg="nvidia-driver" + gpu_gen="NVIDIA" + fi + + local nv_ver + nv_ver=$(apt-cache policy "$nv_pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}') + + local msg="Source: Debian Bullseye Stable\n" + msg+="Driver: ${gpu_gen} — ${nv_pkg} ${nv_ver:-unknown}\n" + msg+="[+] firmware-misc-nonfree\n" + msg+="[+] nvidia-settings\n\n" + msg+="Instalar driver NVIDIA?" + + if ! _confirm "NVIDIA — Bullseye" "$msg" 14 70; then + echo "Omitiendo driver NVIDIA." + NVIDIA_DRIVER_MODE="" + return 0 + fi + + _run_cmd "NVIDIA" \ + "sudo apt install -y $nv_pkg firmware-misc-nonfree nvidia-settings" \ + "Instalando driver NVIDIA ${gpu_gen}..." + + local i386_active=false + dpkg --print-foreign-architectures | grep -q i386 && i386_active=true + if $i386_active; then + local nv32_pkg="${nv_pkg}:i386" + local nv32_ver + nv32_ver=$(apt-cache policy "$nv32_pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}') + if [ -n "$nv32_ver" ] && [ "$nv32_ver" != "(none)" ]; then + echo "Instalando compatibilidad 32-bit para ${nv_pkg}..." + _run_cmd "NVIDIA 32-bit" "sudo apt install -y $nv32_pkg" \ + "Instalando librerías NVIDIA 32-bit..." + else + echo "No hay paquete 32-bit disponible para ${nv_pkg} en Bullseye." + fi + fi + + NVIDIA_DRIVER_MODE="stable" + echo -e "${GREEN}Driver NVIDIA ${nv_pkg} instalado. Requiere reinicio.${NC}" +} + +# --------------------------------------------------------------------------- +# Lightweight Gaming for Bullseye — sin Steam, sin Heroic +# 32-bit Mesa/NVIDIA + gamemode + mangohud + goverlay + lutris +# --------------------------------------------------------------------------- +install_gaming_bullseye() { + echo -e "${YELLOW}Lightweight Gaming (Bullseye mode).${NC}" + + local enable_32bit=false + if _confirm "32-bit Support" \ + "Habilitar arquitectura i386 para juegos?\n\n\ +Requieren los juegos nativos de 32 bits y ciertas\n\ +bibliotecas de emulación."; then + enable_32bit=true + fi + + if $enable_32bit; then + echo "Activando soporte multiarquitectura i386..." + if ! dpkg --print-foreign-architectures | grep -q i386; then + sudo dpkg --add-architecture i386 + fi + _run_cmd "APT Update" "sudo apt update" "Actualizando listas..." + + if [ "$GPU_TYPE" = "nvidia" ]; then + local nv32_pkg="nvidia-driver-libs:i386" + local nv32_ver + nv32_ver=$(apt-cache policy "$nv32_pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}') + if [ -n "$nv32_ver" ] && [ "$nv32_ver" != "(none)" ]; then + local msg="Source: Debian Bullseye Stable\n" + msg+="NVIDIA 32-bit Libraries ${nv32_ver}\n\n" + msg+="[+] nvidia-driver-libs:i386" + if _confirm "NVIDIA 32-bit" "$msg" 12 70; then + _run_cmd "32-bit NVIDIA" "sudo apt install -y ${nv32_pkg}" \ + "Instalando librerías NVIDIA 32-bit..." + fi + else + echo "nvidia-driver-libs:i386 no disponible en Bullseye." + fi + else + # Mesa 32-bit + local mesa_32=( + "mesa-vulkan-drivers:i386" + "libgl1-mesa-dri:i386" + "libglx-mesa0:i386" + "libegl-mesa0:i386" + "mesa-va-drivers:i386" + ) + local ref_ver + ref_ver=$(apt-cache policy "mesa-vulkan-drivers:i386" 2>/dev/null | \ + awk 'NR==3 {print $2; exit}') + local comp_line="Components: Vulkan:i386, OpenGL:i386, GLX:i386, EGL:i386, VA-API:i386" + + local msg="Mesa 32-bit drivers para gaming.\n\n" + msg+="Source: Debian Bullseye Stable\n" + msg+="Mesa ${ref_ver}\n" + msg+="${comp_line}\n\n" + msg+="Instalar drivers 32-bit?" + + if _confirm "Mesa 32-bit" "$msg" 14 70; then + _run_cmd "Mesa 32-bit" "sudo apt install -y ${mesa_32[*]}" \ + "Instalando Mesa 32-bit..." + fi + fi + fi + + # Gaming tools checklist (sin Steam ni Heroic) + local choices + choices=$(whiptail --title "Gaming Tools — Bullseye" --checklist \ + "Select gaming optimization tools:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "gamemode" "Game performance optimization" ON \ + "mangohud" "Performance overlay (Vulkan/OpenGL)" ON \ + "goverlay" "MangoHud config GUI" ON \ + "lutris" "Game launcher/manager" OFF \ + 3>&1 1>&2 2>&3) + + if [ -z "$choices" ]; then + echo "No gaming tools selected." + return + fi + + local cleaned + cleaned=$(echo "$choices" | tr -d '"') + + for pkg in $cleaned; do + case $pkg in + mangohud) + _run_cmd "MangoHud" "sudo apt install -y mangohud" "Instalando MangoHud..." + if $enable_32bit; then + local mh32_ver + mh32_ver=$(apt-cache policy mangohud:i386 2>/dev/null | \ + awk 'NR==3 {print $2; exit}') + if [ -n "$mh32_ver" ] && [ "$mh32_ver" != "(none)" ]; then + _run_cmd "MangoHud" "sudo apt install -y mangohud:i386" \ + "Instalando MangoHud 32-bit..." + fi + fi + ;; + gamemode) _run_cmd "GameMode" "sudo apt install -y gamemode" "Instalando GameMode..." ;; + goverlay) _run_cmd "GOverlay" "sudo apt install -y goverlay" "Instalando GOverlay..." ;; + lutris) _run_cmd "Lutris" "sudo apt install -y lutris" "Instalando Lutris..." ;; + *) _run_install "$pkg" ;; + esac + done + + echo -e "${GREEN}Lightweight gaming setup complete.${NC}" +} diff --git a/modules/bullseye/repos.sh b/modules/bullseye/repos.sh new file mode 100644 index 0000000..04d4184 --- /dev/null +++ b/modules/bullseye/repos.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +# repos.sh — Bullseye: repos clásicos con archive phase +# License GPL v3 + +configure_repos_bullseye() { + echo -e "${YELLOW}Repository configuration — Debian 11 Bullseye${NC}" + + local info="Configuración de repositorios para Debian 11 Bullseye.\n\n" + info+="Se usarán los repositorios oficiales con componentes\n" + info+="main, contrib y non-free (sin non-free-firmware).\n" + info+="No se utiliza formato DEB822.\n" + if $BULLSEYE_USE_ARCHIVE; then + info+="\nModo Archive: Las URLs apuntarán a archive.debian.org\n" + info+="(Bullseye LTS finalizó el 31 Ago 2026)." + fi + _msg "Repositorios — Bullseye" "$info" 12 65 + + if [ -f /etc/apt/sources.list ]; then + if ! _confirm "Repositorios" "Ya existe /etc/apt/sources.list.\n\nSobrescribir con la configuración de Bullseye?"; then + echo "Manteniendo configuración actual." + return 0 + fi + fi + + local base_uri="https://deb.debian.org/debian" + local security_uri="https://security.debian.org/debian-security" + if $BULLSEYE_USE_ARCHIVE; then + base_uri="https://archive.debian.org/debian" + security_uri="https://archive.debian.org/debian-security" + fi + + local content="" + content="# Oficial Repo\n" + content+="deb ${base_uri} bullseye main contrib non-free\n" + content+="#deb-src ${base_uri} bullseye main contrib non-free\n\n" + + content+="# Updates\n" + content+="deb ${base_uri} bullseye-updates main contrib non-free\n" + content+="#deb-src ${base_uri} bullseye-updates main contrib non-free\n\n" + + content+="# Security\n" + content+="deb ${security_uri} bullseye-security main contrib non-free\n" + content+="#deb-src ${security_uri} bullseye-security main contrib non-free\n" + + echo -e "$content" | sudo tee /etc/apt/sources.list > /dev/null + + echo "Actualizando listas de paquetes..." + if sudo apt update; then + echo -e "${GREEN}Repositorios de Debian 11 Bullseye configurados.${NC}" + else + echo -e "${RED}apt update falló. Revise su conexión de red.${NC}" + return 1 + fi +} diff --git a/modules/gpu.sh b/modules/gpu.sh index 10e3dcd..f13eba0 100644 --- a/modules/gpu.sh +++ b/modules/gpu.sh @@ -99,7 +99,47 @@ install_gpu_drivers() { case "$GPU_TYPE" in amd) install_amd_firmware ;; intel) install_intel_firmware ;; - nvidia) install_nvidia_driver ;; + nvidia) + if [ "$DEBIAN_VERSION" = "11" ]; then + # Bullseye: solo Fermi check, resto → nvidia-driver directo + if type install_nvidia_bullseye &>/dev/null; then + install_nvidia_bullseye + else + install_nvidia_driver + fi + elif [ "$DEBIAN_VERSION" = "12" ]; then + # Bookworm: Kepler intercepción → legacy, sin nvidia-detect + if [ "$(is_nvidia_kepler)" = "true" ]; then + if type _install_nvidia_bookworm_kepler &>/dev/null; then + _install_nvidia_bookworm_kepler + else + install_nvidia_driver + fi + else + install_nvidia_driver + fi + elif [ "$DEBIAN_VERSION" = "13" ]; then + # Trixie: Kepler → advertencia Nouveau, sin driver + if [ "$(is_nvidia_kepler)" = "true" ]; then + _msg "NVIDIA Kepler — Trixie" \ + "Su GPU es arquitectura Kepler (GKxxx).\n\n\ +Los drivers privativos NVIDIA para Kepler (rama 470)\n\ +NO están disponibles en Debian 13 (Trixie).\n\n\ +Se recomienda usar el driver libre Nouveau:\n\ + - Soporte básico de display\n\ + - Sin aceleración 3D completa\n\ + - Sin Optimus/PRIME\n\n\ +Si necesita driver privativo, use Debian 12 (Bookworm)\n\ +con nvidia-legacy-470xx-driver." 16 70 + NVIDIA_DRIVER_MODE="" + return 1 + else + install_nvidia_driver + fi + else + install_nvidia_driver + fi + ;; esac # Mesa (backports / stable) diff --git a/modules/gpu/_helpers.sh b/modules/gpu/_helpers.sh index 0c2c798..96554ac 100644 --- a/modules/gpu/_helpers.sh +++ b/modules/gpu/_helpers.sh @@ -9,13 +9,14 @@ is_nvidia_kepler() { local dev_int dev_int=$((16#${dev_id,,})) - # Known Kepler device ID ranges (GKxxx) - if [ "$dev_int" -ge $((16#0FC0)) ] && [ "$dev_int" -le $((16#0FCF)) ]; then echo true; return; fi - if [ "$dev_int" -ge $((16#1180)) ] && [ "$dev_int" -le $((16#118F)) ]; then echo true; return; fi - if [ "$dev_int" -ge $((16#11C0)) ] && [ "$dev_int" -le $((16#11CF)) ]; then echo true; return; fi - if [ "$dev_int" -ge $((16#0FE0)) ] && [ "$dev_int" -le $((16#0FEF)) ]; then echo true; return; fi - if [ "$dev_int" -ge $((16#1280)) ] && [ "$dev_int" -le $((16#129F)) ]; then echo true; return; fi - if [ "$dev_int" -ge $((16#0EB0)) ] && [ "$dev_int" -le $((16#0EBF)) ]; then echo true; return; fi + # Bloque 1: GK107 (escritorio + móvil) — 0x0FC0..0x0FFF + if [ "$dev_int" -ge $((16#0FC0)) ] && [ "$dev_int" -le $((16#0FFF)) ]; then echo true; return; fi + # Bloque 2: GK110/GK110B/GK210 acotado puro — 0x1000..0x103F + if [ "$dev_int" -ge $((16#1000)) ] && [ "$dev_int" -le $((16#103F)) ]; then echo true; return; fi + # Bloque 3: GK104/GK106 (completo) — 0x1180..0x11FF + if [ "$dev_int" -ge $((16#1180)) ] && [ "$dev_int" -le $((16#11FF)) ]; then echo true; return; fi + # Bloque 4: GK208/GK208B acotado — 0x1280..0x12BF + if [ "$dev_int" -ge $((16#1280)) ] && [ "$dev_int" -le $((16#12BF)) ]; then echo true; return; fi echo false } diff --git a/modules/gpu/nvidia.sh b/modules/gpu/nvidia.sh index d7bd12f..8b7febf 100644 --- a/modules/gpu/nvidia.sh +++ b/modules/gpu/nvidia.sh @@ -189,6 +189,60 @@ _install_nvidia_bookworm_bpo() { echo -e "${GREEN}NVIDIA driver installed from backports. Reboot required.${NC}" } +# ------------------------------------------------------------------- +# Bookworm Kepler intercepción — fuerza nvidia-legacy-470xx-driver +# sin pasar por nvidia-detect (evita falsa recomendación rama 535) +# ------------------------------------------------------------------- +_install_nvidia_bookworm_kepler() { + local nv_pkg="nvidia-legacy-470xx-driver" + local nv_ver + nv_ver=$(apt-cache policy "$nv_pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}') + + echo -e "${YELLOW}Kepler GPU detected — forcing ${nv_pkg}.${NC}" + + local msg="Kepler GPU detectada (GKxxx).\n\n" + msg+="En Debian 12 Bookworm, Kepler requiere el driver legacy\n" + msg+="en lugar del moderno. Se usará el paquete:\n" + msg+=" ${nv_pkg} ${nv_ver:-unknown}\n" + msg+="para evitar fallos de pantalla negra.\n\n" + msg+=" [SKIP] nvidia-detect (omitido — evita rama 535)\n" + msg+=" [USE] ${nv_pkg}\n" + msg+=" [+] firmware-misc-nonfree\n" + msg+=" [+] nvidia-settings\n\n" + msg+="Instalar driver legacy para Kepler?" + + if ! _confirm_custom "NVIDIA Kepler — Bookworm" "$msg" "Install" "Skip" 14 70; then + echo "Omitiendo driver Kepler." + NVIDIA_DRIVER_MODE="" + return 0 + fi + + _run_cmd "NVIDIA Kepler" \ + "sudo apt install -y $nv_pkg firmware-misc-nonfree nvidia-settings" \ + "Instalando nvidia-legacy-470xx-driver..." + + # Si backports está habilitado, ofrecer actualización + if [ "$(is_backports_enabled)" == "true" ]; then + local bpo_ver + bpo_ver=$(apt-cache madison "$nv_pkg" 2>/dev/null | \ + grep "bookworm-backports" | awk '{print $3}' | head -1) + if [ -n "$bpo_ver" ]; then + local msg="Hay una versión en backports: ${bpo_ver}\n" + msg+="Instalar desde bookworm-backports?" + if _confirm "Kepler Backports" "$msg"; then + _run_cmd "NVIDIA Kepler" \ + "sudo apt install -y -t bookworm-backports $nv_pkg" \ + "Actualizando Kepler driver desde backports..." + NVIDIA_DRIVER_MODE="backports" + echo -e "${GREEN}Kepler driver actualizado desde backports.${NC}" + fi + fi + fi + + NVIDIA_DRIVER_MODE="${NVIDIA_DRIVER_MODE:-stable}" + echo -e "${GREEN}Kepler driver (${nv_pkg}) installed. Reboot required.${NC}" +} + # ------------------------------------------------------------------- # CASE C: Kernel stable (any distro) → Debian stable, optional backports # ------------------------------------------------------------------- diff --git a/modules/repos.sh b/modules/repos.sh index 4624b2d..19faf3a 100644 --- a/modules/repos.sh +++ b/modules/repos.sh @@ -67,8 +67,6 @@ configure_repos() { return 1 fi - sync_system_time - backup_current_repos if $use_deb822; then diff --git a/modules/utils.sh b/modules/utils.sh index 040dbbf..77dcb57 100644 --- a/modules/utils.sh +++ b/modules/utils.sh @@ -40,21 +40,24 @@ check_system_time() { fi local year year=$(date +%Y) - if [ "$year" -lt 2024 ]; then - echo -e "${YELLOW}System date appears incorrect: $(date '+%Y-%m-%d %H:%M')${NC}" - echo -e "${YELLOW}This can cause apt update to fail with sync/GPG errors.${NC}" - if _confirm "System Date" "The system date is set to $(date '+%Y-%m-%d %H:%M'),\nwhich is before 2024.\n\nSync time via NTP?"; then - sudo timedatectl set-ntp true 2>/dev/null || true - echo -e "${YELLOW}Waiting a few seconds for time sync...${NC}" - sleep 5 + if [ "$year" -lt 2026 ]; then + local msg="Se ha detectado que la fecha/hora de su sistema está desconfigurada\n" + msg+="($(date '+%Y-%m-%d %H:%M')), lo que impedirá que los repositorios\n" + msg+="de Debian funcionen correctamente.\n\n" + msg+="¿Desea que el script intente sincronizar la hora automáticamente\n" + msg+="mediante la red (NTP) y configurar timedatectl?" + if _confirm "System Date" "$msg"; then + sync_system_time local new_year new_year=$(date +%Y) - if [ "$new_year" -ge 2024 ]; then + if [ "$new_year" -ge 2026 ]; then echo -e "${GREEN}Time synced: $(date '+%Y-%m-%d %H:%M')${NC}" else echo -e "${RED}Could not sync time automatically.${NC}" echo "You may need to set it manually: sudo date --set \"YYYY-MM-DD HH:MM:SS\"" fi + else + echo -e "${YELLOW}Warning: System time is incorrect. Package installations may fail.${NC}" fi fi } @@ -66,7 +69,7 @@ sync_system_time() { if [ "$ntp_active" != "yes" ]; then echo -e "${YELLOW}NTP not active. Attempting to enable time sync...${NC}" sudo timedatectl set-ntp true 2>/dev/null || true - sleep 3 + sleep 4 fi elif command -v hwclock &> /dev/null && command -v ntpd &> /dev/null; then sudo hwclock --hctosys 2>/dev/null || true @@ -91,10 +94,11 @@ detect_debian_version() { DEBIAN_CODENAME=$(lsb_release -cs 2>/dev/null || echo "") fi case "$DEBIAN_CODENAME" in + bullseye) DEBIAN_VERSION="11" ;; bookworm) DEBIAN_VERSION="12" ;; trixie) DEBIAN_VERSION="13" ;; *) - echo -e "${RED}Unsupported Debian version: '$DEBIAN_CODENAME'. Only 12 (bookworm) and 13 (trixie) are supported.${NC}" + echo -e "${RED}Unsupported Debian version: '$DEBIAN_CODENAME'. Only 11 (bullseye), 12 (bookworm) and 13 (trixie) are supported.${NC}" exit 1 ;; esac