From 92d0eb7467d97e17baea675841fde45e5af5ef7c Mon Sep 17 00:00:00 2001 From: stornic56 <71296607+stornic56@users.noreply.github.com> Date: Sun, 19 Jul 2026 00:57:57 -0500 Subject: [PATCH] System Refactor, GPU & Terminal Overhaul - Bug Fixes: Rewrote `install_gaming_bullseye()` in `modules/bullseye/legacy.sh` to use a unified `_checklist` flow (matching Debian 12/13) with automatic i386 architecture detection and driver installation. Fixed greetd "Back" menu crash on Debian 11 by adding version-specific conditional logic in `desktop_display.sh`. Corrected ZRAM text overflow in `zram.sh` using `\n` line breaks for terminal wrapping. Updated Kernel Backports warning message in `debianito.sh` to clarify Bullseye limitations. - Architecture & Repositories: Refactored Debian 11 repository configuration (`configure_repos_bullseye`) to reuse modern submenus (`_repos_enable_components`, `_branch_migration`), eliminating ~44 lines of hardcoded logic and duplicate source list management. Restricted `non-free-firmware` component availability to Debian 12+ in `modules/repos.sh`. Implemented mandatory `apt autoremove -y` and `apt autoclean` execution immediately after enabling non-free/contrib components (`_repos_enable_components`). - UI & Menus: Added a new "Communication" menu (Option 4) between Internet and Media Players, featuring Signal, Telegram (with Trixie backports warning), and Hexchat. Moved all terminal emulators from System Tools to the "Customization System" -> Terminals submenu (`modules/extras/terminals/terminals.sh`) with version-specific logic (Alacritty 12+, Blackbox/Ptyxis 13+). Added Joplin installer in Office & Productivity for Debian 12/13 only. Integrated Synaptic into Software Centers menu alongside GNOME and Plasma stores. Unified Essential Pack UI across versions, switching between `fastfetch` (Trixie) and `neofetch` (Bookworm/Bullseye). - Hardware Drivers: Replaced deprecated `install_gpu_drivers()` in `modules/gpu.sh` with `_install_amd_intel_stack()` and `_install_nvidia_stack()`. Implemented specific logic for Debian 13 (Trixie): Blackwell GPUs now enable the official NVIDIA CUDA repository; Maxwell/Pascal on Backports forces a stable kernel path to ensure driver compatibility. Deprecated `install_nvidia_driver()` in favor of new stack functions while preserving global state variables (`NVIDIA_DRIVER_MODE`). - Utilities & Cleanup: Added `gdebi` and `bleachbit` to System Tools (GUI-only). Standardized menu headers across 15 files using a centralized `SCROLL_HINT` variable. Ensured VLC installation is conditional on headless status checks in Essential Pack modules. --- README.md | 4 +- debianito.sh | 18 ++- modules/bullseye/extras.sh | 70 ++++---- modules/bullseye/legacy.sh | 137 ++++++---------- modules/bullseye/repos.sh | 59 ++----- modules/desktop_display.sh | 8 +- modules/extras.sh | 42 ++--- modules/extras/communication/communication.sh | 86 ++++++++++ modules/extras/essential/essential.sh | 21 ++- modules/extras/office/office.sh | 25 +++ modules/extras/system/software_centers.sh | 9 +- modules/extras/system/system.sh | 10 +- modules/extras/terminals/terminals.sh | 43 +++++ modules/extras/themes/themes.sh | 2 + modules/gaming.sh | 2 +- modules/gpu.sh | 150 +++++++++++------- modules/gpu/nvidia.sh | 1 + modules/repos.sh | 10 +- modules/zram.sh | 6 +- 19 files changed, 442 insertions(+), 261 deletions(-) create mode 100644 modules/extras/communication/communication.sh create mode 100644 modules/extras/terminals/terminals.sh diff --git a/README.md b/README.md index 2f2fe6f..b72f193 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ After running the script: | **8** | [ZRAM](/docs/zram.md)| Configure compressed RAM for memory optimization| | **9** | [Swap Management](/docs/swap.md)| Manage swap file or partition size and enable/disable swap space for system stability| | **10** | Install Programs and Software | Browse and install packages by category (Development, Themes, System Tools, etc.) using APT | -| **11** | [Boot Rescue + GRUB](/docs/boot.md))| Config and fix GRUB bootloader issues, chroot repair, or restore system boot configuration| +| **11** | [Boot Rescue + GRUB](/docs/boot.md)| Config and fix GRUB bootloader issues, chroot repair, or restore system boot configuration| | **12** | [Desktop & Display](/docs/desktops_display.md)| Install and configure desktops and display managers| | **13** | Exit | Return to terminal | @@ -71,7 +71,7 @@ The submenu offers the next categories: | **0** | Essential Pack | Quick install of common tools (compression, system info, VLC, MS fonts)| | **1** | Customization System | Desktop themes, icon themes, cursor themes, and fonts | | **2** | Download & Network | Downloaders (aria2, ytdlp, FileZilla) + Torrent clients (qBittorrent, Deluge, Transmission) | -| **3** | Internet (Browsers, Email Clients, VPN) | Web browsers (Firefox/Mozilla, LibreWolf, Floorp, Chromium, Brave, Tor), email client (Thunderbird), and VPN tools (RiseUp, Proton, Mullvad)| +| **3** | Internet (Browsers, Email Clients, VPN) | Web browsers (Firefox, LibreWolf, Floorp, Chromium, Tor), email client (Thunderbird), and VPN tools (RiseUp, Proton, Mullvad)| | **4** | Media Players | Multimedia playback with VLC media player and MPV for advanced video/audio support | | **5** | Multimedia & Design | image editing (GIMP), video editing (Kdenlive, HandBrake), 3D modeling (Blender), audio recording (Audacity), and graphics design (Inkscape) | | **6** | Code Editors & IDEs | vim, vim-gtk3, Neovim, Helix, nano, Emacs, Kate, Mousepad, Gedit, Geany, GNOME Text Editor, and VSCodium (VS Code open-source) | diff --git a/debianito.sh b/debianito.sh index 1ac3324..11cdf46 100644 --- a/debianito.sh +++ b/debianito.sh @@ -91,13 +91,23 @@ main_menu() { install_firmware || true fi ;; - 5) install_gpu_drivers || true; STATE_REFRESHED=true ;; + 5) + local gpu_sub + gpu_sub=$(_menu "Graphics Drivers" "" 12 50 2 \ + "1" "Radeon/Intel Mesa" \ + "2" "NVIDIA Drivers") + [ -z "$gpu_sub" ] && continue + clear + case $gpu_sub in + 1) _install_amd_intel_stack || true ;; + 2) _install_nvidia_stack || true ;; + esac + STATE_REFRESHED=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 + "Backports Kernel is not available on Debian 11 Bullseye.\n\nThe stable kernel provided by Bullseye is the only option." 10 60 else install_kernel_backports || true fi diff --git a/modules/bullseye/extras.sh b/modules/bullseye/extras.sh index a728ad5..7bf0a18 100644 --- a/modules/bullseye/extras.sh +++ b/modules/bullseye/extras.sh @@ -4,18 +4,20 @@ # ── Essential Pack (Bullseye) ── _quick_install_bullseye() { - _msg "Essential Pack — Bullseye" \ + _msg "Essential Pack" \ "Install basic programs:\n\n\ - - Compression (zip, unrar, p7zip-full)\n\ - - System tools (htop, inxi, neofetch, bpytop)\n\ - - VLC media player\n\ - - Microsoft fonts" 13 60 + - Compression (zip, unrar, 7z)\n\ + - System tools (htop, inxi, neofetch)\n\ + - Networking (curl, wget, ufw)\n\ + - CA certs & GPG\n\ + - VLC media player" 13 60 local quick_pkgs=( zip unzip rar unrar p7zip-full p7zip-rar - neofetch bpytop htop inxi vlc - ttf-mscorefonts-installer + neofetch htop inxi curl wget ufw + ca-certificates gnupg lsb-release ) + _is_headless || quick_pkgs+=(vlc) _run_install_batch "${quick_pkgs[@]}" echo -e "${GREEN}Essential Pack installed.${NC}" } @@ -64,6 +66,7 @@ _cat_customization_bullseye() { "2" "Icon Themes" \ "3" "Cursor Themes" \ "4" "Fonts" \ + "5" "Terminals" \ ) [ -z "$sub" ] && return case $sub in @@ -71,6 +74,7 @@ _cat_customization_bullseye() { 2) _cat_icons_bullseye ;; 3) _cat_cursors_bullseye ;; 4) _cat_fonts_bullseye ;; + 5) _cat_terminals ;; esac } @@ -418,7 +422,7 @@ _cat_security_bullseye() { } _cat_general_bullseye() { - local item_count=18 + local item_count=22 local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices choices=$(_checklist "System Tools (Bullseye)" "Select system utilities${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ @@ -432,6 +436,7 @@ _cat_general_bullseye() { "gparted" "Partition editor" "$(_state gparted)" \ "htop" "Interactive process viewer" "$(_state htop)" \ "inxi" "System information tool" "$(_state inxi)" \ + "jq" "JSON command-line processor" "$(_state jq)" \ "kvm" "QEMU/KVM virtualization" "$(_state virt-manager)" \ "lshw" "List hardware details" "$(_state lshw)" \ "mc" "Midnight Commander" "$(_state mc)" \ @@ -441,6 +446,8 @@ _cat_general_bullseye() { "timeshift" "System restore snapshots" "$(_state timeshift)" \ "tmux" "Terminal multiplexer" "$(_state tmux)" \ "wine" "Windows compatibility layer" "$(_state wine)" \ + "bleachbit" "System cleaner (GUI)" "$(_state bleachbit)" \ + "gdebi" "Install .deb packages with deps (GUI)" "$(_state gdebi)" \ ) clear [ -z "$choices" ] && return @@ -560,15 +567,16 @@ install_extras_bullseye() { "1" "Customization System" \ "2" "Download & Network" \ "3" "Internet (Browsers, Email)" \ - "4" "Media Players" \ - "5" "Multimedia & Design" \ - "6" "Code Editors & IDEs" \ - "7" "Servers & Dev Tools" \ - "8" "Security & Networking" \ - "9" "Software Centers" \ - "10" "System Tools" \ - "11" "Fetch / System Info" \ - "12" "Back to main menu" \ + "4" "Communication" \ + "5" "Media Players" \ + "6" "Multimedia & Design" \ + "7" "Code Editors & IDEs" \ + "8" "Servers & Dev Tools" \ + "9" "Security & Networking" \ + "10" "Software Centers" \ + "11" "System Tools" \ + "12" "Fetch / System Info" \ + "13" "Back to main menu" \ ) [ -z "$cat_choice" ] && return @@ -579,15 +587,16 @@ install_extras_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_dev_bullseye ;; - 8) _cat_security_bullseye ;; - 9) _cat_software_centers_bullseye ;; - 10) _cat_general_bullseye ;; - 11) _cat_fetch_bullseye ;; - 12) return ;; + 4) _cat_communication ;; + 5) _cat_players_bullseye ;; + 6) _cat_design_bullseye ;; + 7) _cat_programming_bullseye ;; + 8) _cat_dev_bullseye ;; + 9) _cat_security_bullseye ;; + 10) _cat_software_centers_bullseye ;; + 11) _cat_general_bullseye ;; + 12) _cat_fetch_bullseye ;; + 13) return ;; esac clear done @@ -595,12 +604,19 @@ install_extras_bullseye() { _cat_software_centers_bullseye() { local sc_choice - sc_choice=$(_menu "Software Centers" "Choose a software store to install:" 12 65 2 \ + sc_choice=$(_menu "Software Centers" "Choose a software store to install:" 12 65 3 \ "gnome-software" "Software Center for GNOME" \ "plasma-discover" "Software manager for Plasma" \ + "synaptic" "Classic APT package manager (GTK)" \ ) [ -z "$sc_choice" ] && return + if [ "$sc_choice" = "synaptic" ]; then + _run_cmd "Install" "sudo apt install -y synaptic" "Installing synaptic..." + echo -e "${GREEN}synaptic installed.${NC}" + return + fi + _run_cmd "Install" "sudo apt install -y $sc_choice" "Installing ${sc_choice}..." if _confirm "Flatpak Support" "Do you want to enable Flatpak support for this software center?"; then diff --git a/modules/bullseye/legacy.sh b/modules/bullseye/legacy.sh index 2a96208..49e6133 100644 --- a/modules/bullseye/legacy.sh +++ b/modules/bullseye/legacy.sh @@ -103,77 +103,22 @@ install_nvidia_bullseye() { # 32-bit Mesa/NVIDIA + gamemode + mangohud + goverlay + lutris # --------------------------------------------------------------------------- install_gaming_bullseye() { - echo -e "${YELLOW}Lightweight Gaming (Bullseye mode).${NC}" + echo -e "${YELLOW}Gaming setup (Bullseye)...${NC}" - local enable_32bit=false - if _confirm "32-bit Support" \ - "Enable i386 architecture for 32-bit games?\n\n\ -Required by Steam/Proton for 32-bit games.\n\ -Installs matching 32-bit graphics drivers."; then - enable_32bit=true - fi - - if $enable_32bit; then - echo "Enabling i386 multi-architecture support..." - if ! dpkg --print-foreign-architectures | grep -q i386; then - sudo dpkg --add-architecture i386 - fi - _run_cmd "APT Update" "sudo apt update" "Updating package lists..." - - 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}" \ - "Installing NVIDIA 32-bit libraries..." - fi - else - echo "nvidia-driver-libs:i386 not available on 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 for gaming.\n\n" - msg+="Source: Debian Bullseye Stable\n" - msg+="Mesa ${ref_ver}\n" - msg+="${comp_line}\n\n" - msg+="Install 32-bit drivers?" - - if _confirm "Mesa 32-bit" "$msg" 14 70; then - _run_cmd "Mesa 32-bit" "sudo apt install -y ${mesa_32[*]}" \ - "Installing Mesa 32-bit..." - fi - fi - fi - - # Gaming tools checklist (no Steam, no Heroic) local choices - choices=$(_checklist "Gaming Tools — Bullseye" \ - "Select gaming optimization tools:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ - "gamemode" "Game performance optimization" ON \ + choices=$(_checklist "Gaming Setup — Bullseye" \ + "Select gaming packages to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "steam" "Steam (requires 32-bit support)" ON \ + "gamemode" "Game performance optimization" OFF \ "mangohud" "Performance overlay (Vulkan/OpenGL)" ON \ "goverlay" "MangoHud config GUI" ON \ - "lutris" "Game launcher/manager" OFF \ - "java" "Java Runtimes (8, 17, 21)" OFF) + "java" "Minecraft Java Runtime" OFF \ + "lutris" "Lutris + Wine (requires 32-bit support)" OFF \ + "retroarch" "RetroArch Emulator Frontend" OFF \ + "i386" "Enable 32-bit (i386) architecture" ON) if [ -z "$choices" ]; then - echo "No gaming tools selected." + echo "No gaming packages selected." _pause return fi @@ -181,34 +126,50 @@ Installs matching 32-bit graphics drivers."; then local cleaned cleaned=$(echo "$choices" | tr -d '"') - for pkg in $cleaned; do + local need_32bit=false + for p in $cleaned; do + case $p in steam|lutris) need_32bit=true ;; esac + done + echo "$cleaned" | grep -qw i386 && need_32bit=true + + local install_list + install_list=$(echo "$cleaned" | tr ' ' '\n' | grep -v '^i386$' | tr '\n' ' ') + install_list=${install_list% } + + if $need_32bit && ! dpkg --print-foreign-architectures 2>/dev/null | grep -q i386; then + echo -e "${YELLOW}Enabling i386 architecture...${NC}" + sudo dpkg --add-architecture i386 + _run_cmd "APT Update" "sudo apt update" "Updating package lists..." + fi + + if $need_32bit; then + echo "Installing 32-bit graphics drivers..." + if [ "$GPU_TYPE" = "nvidia" ]; then + _install_nvidia_32bit + else + _install_mesa_32bit + fi + fi + + for pkg in $install_list; do case $pkg in - mangohud) - local mh_pkgs="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 - mh_pkgs+=" mangohud:i386" - fi + steam) + if ensure_contrib_repo; then + install_steam + else + echo -e "${YELLOW}Skipping Steam installation (contrib repository not enabled).${NC}" fi - _run_cmd "MangoHud" "sudo apt install -y $mh_pkgs" "Installing MangoHud (64 + 32-bit)..." ;; - gamemode) _run_cmd "GameMode" "sudo apt install -y gamemode" "Installing GameMode..." ;; - goverlay) _run_cmd "GOverlay" "sudo apt install -y goverlay" "Installing GOverlay..." ;; - lutris) - local pkgs="lutris wine64" - if dpkg --print-foreign-architectures 2>/dev/null | grep -q i386; then - pkgs+=" wine32" - fi - _run_cmd "Lutris" "sudo apt install -y $pkgs" "Installing Lutris + Wine..." - ;; - java) _install_gaming_java ;; - *) _run_install "$pkg" ;; + java) install_minecraft_java ;; + mangohud) install_mangohud ;; + gamemode) install_gamemode ;; + goverlay) install_goverlay ;; + lutris) install_lutris ;; + retroarch) install_retroarch ;; + *) _run_install "$pkg" ;; esac done - echo -e "${GREEN}Lightweight gaming setup complete.${NC}" + echo -e "${GREEN}Gaming setup complete.${NC}" _pause } diff --git a/modules/bullseye/repos.sh b/modules/bullseye/repos.sh index 647595d..34b776a 100644 --- a/modules/bullseye/repos.sh +++ b/modules/bullseye/repos.sh @@ -3,48 +3,19 @@ # License GPL v3 configure_repos_bullseye() { - echo -e "${YELLOW}Repository configuration — Debian 11 Bullseye${NC}" - - local info="Repository configuration for Debian 11 Bullseye.\n\n" - info+="Official repositories will be used with components\n" - info+="main, contrib and non-free (non-free-firmware excluded).\n" - info+="DEB822 format is not used.\n" - if $BULLSEYE_USE_ARCHIVE; then - info+="\nArchive Mode: URLs will point to archive.debian.org\n" - info+="(Bullseye LTS ended on 31 Aug 2026)." - fi - _msg "Repositories — Bullseye" "$info" 12 65 - - if [ -f /etc/apt/sources.list ]; then - if ! _confirm "Repositories" "/etc/apt/sources.list already exists.\n\nOverwrite with Bullseye configuration?"; then - echo "Keeping current configuration." - 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+="# 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 "Updating package lists..." - if sudo apt update; then - echo -e "${GREEN}Debian 11 Bullseye repositories configured.${NC}" - else - echo -e "${RED}apt update failed. Check your network connection.${NC}" - return 1 - fi + while true; do + local repo_choice + repo_choice=$(_menu "Configure Repositories — Bullseye" \ + "Select an option:" $TUI_ALTO $TUI_ANCHO 6 \ + "1" "Enable Contrib & Non-Free Components" \ + "2" "Migrate to SID/Testing branch" \ + "3" "Back to main menu") + [ -z "$repo_choice" ] && break + clear + case "$repo_choice" in + 1) _repos_enable_components ;; + 2) _branch_migration || true ;; + 3) break ;; + esac + done } diff --git a/modules/desktop_display.sh b/modules/desktop_display.sh index f30e34d..146cfe4 100644 --- a/modules/desktop_display.sh +++ b/modules/desktop_display.sh @@ -40,7 +40,13 @@ display_manager_menu() { 1) lightdm_config_menu ;; 2) configure_gdm3 ;; 3) configure_sddm ;; - 4) configure_greetd ;; + 4) + if [ "$DEBIAN_VERSION" = "12" ] || [ "$DEBIAN_VERSION" = "13" ]; then + configure_greetd + else + break + fi + ;; 5) break ;; esac done diff --git a/modules/extras.sh b/modules/extras.sh index f9618bf..a31dcf0 100644 --- a/modules/extras.sh +++ b/modules/extras.sh @@ -33,16 +33,17 @@ install_extras() { "1" "Customization System" \ "2" "Download & Network" \ "3" "Internet (Browsers, Email, VPN)" \ - "4" "Media Players" \ - "5" "Multimedia & Design" \ - "6" "Code Editors & IDEs" \ - "7" "Servers & Dev Tools" \ - "8" "Security & Networking" \ - "9" "Software Centers" \ - "10" "Office & Productivity" \ - "11" "System Tools" \ - "12" "Fetch / System Info" \ - "13" "Back to main menu") + "4" "Communication" \ + "5" "Media Players" \ + "6" "Multimedia & Design" \ + "7" "Code Editors & IDEs" \ + "8" "Servers & Dev Tools" \ + "9" "Security & Networking" \ + "10" "Software Centers" \ + "11" "Office & Productivity" \ + "12" "System Tools" \ + "13" "Fetch / System Info" \ + "14" "Back to main menu") [ -z "$cat_choice" ] && return clear @@ -52,16 +53,17 @@ install_extras() { 1) _cat_customization ;; 2) _cat_download ;; 3) _cat_internet ;; - 4) _cat_players ;; - 5) _cat_design ;; - 6) _cat_programming ;; - 7) _cat_dev ;; - 8) _cat_security ;; - 9) _cat_software_centers ;; - 10) _cat_office ;; - 11) _cat_general ;; - 12) _cat_fetch ;; - 13) return ;; + 4) _cat_communication ;; + 5) _cat_players ;; + 6) _cat_design ;; + 7) _cat_programming ;; + 8) _cat_dev ;; + 9) _cat_security ;; + 10) _cat_software_centers ;; + 11) _cat_office ;; + 12) _cat_general ;; + 13) _cat_fetch ;; + 14) return ;; esac clear done diff --git a/modules/extras/communication/communication.sh b/modules/extras/communication/communication.sh new file mode 100644 index 0000000..1287672 --- /dev/null +++ b/modules/extras/communication/communication.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash +# communication.sh — Signal, Telegram, HexChat + +_install_signal() { + _ensure_extrepo + if [ ! -f /etc/apt/sources.list.d/extrepo_signal.sources ]; then + _run_cmd "Signal" "sudo extrepo enable signal" "Enabling Signal repository..." + fi + _run_cmd "APT Update" "sudo apt update" "Updating package lists..." + if ! is_installed "signal-desktop"; then + _run_cmd "Signal" "sudo apt install -y signal-desktop" "Installing Signal..." + echo -e "${GREEN}Signal installed.${NC}" + else + echo "Signal already installed." + fi +} + +_install_telegram() { + if [ "$DEBIAN_VERSION" = "13" ]; then + if ! is_backports_enabled; then + _msg "telegram-desktop" \ + "telegram-desktop is only available in Trixie-backports.\n\n\ +Please enable backports first via:\n Main Menu → 3 Configure Repositories" 12 65 + echo -e "${YELLOW}Skipping telegram-desktop.${NC}" + return + fi + if ! is_installed "telegram-desktop"; then + _run_cmd "Telegram" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports telegram-desktop" \ + "Installing telegram-desktop from backports..." + echo -e "${GREEN}telegram-desktop installed.${NC}" + else + echo "telegram-desktop already installed." + fi + else + if ! is_installed "telegram-desktop"; then + _run_install "telegram-desktop" + echo -e "${GREEN}telegram-desktop installed.${NC}" + else + echo "telegram-desktop already installed." + fi + fi +} + +_cat_communication() { + local headless=false + _is_headless && headless=true + if $headless; then + echo "Communication apps require a GUI — skipping." + return + fi + + local -a items=() + local signal_state; signal_state=$(_state "signal-desktop") + local telegram_state; telegram_state=$(_state "telegram-desktop") + local hexchat_state; hexchat_state=$(_state "hexchat") + items+=( + "signal-desktop" "Signal Private Messenger (extrepo)" "$signal_state" + "telegram-desktop" "Telegram Desktop messaging" "$telegram_state" + "hexchat" "IRC client (HexChat)" "$hexchat_state" + ) + + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) + local choices + choices=$(_checklist "Communication" "Select communication apps${SCROLL_HINT}:" \ + $TUI_ALTO $TUI_ANCHO $lista_alto "${items[@]}") + clear + [ -z "$choices" ] && return + + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + for pkg in $cleaned; do + case $pkg in + signal-desktop) _install_signal ;; + telegram-desktop) _install_telegram ;; + hexchat) + if ! is_installed "hexchat"; then + _run_install "hexchat" + echo -e "${GREEN}hexchat installed.${NC}" + else + echo "hexchat already installed." + fi + ;; + esac + done + echo -e "${GREEN}Communication tools installed.${NC}" +} diff --git a/modules/extras/essential/essential.sh b/modules/extras/essential/essential.sh index 39adb0d..1b3255c 100644 --- a/modules/extras/essential/essential.sh +++ b/modules/extras/essential/essential.sh @@ -3,18 +3,27 @@ _quick_install() { local fetch_pkg - if [ "$DEBIAN_CODENAME" = "bookworm" ]; then - fetch_pkg="neofetch" - else + if [ "$DEBIAN_CODENAME" = "trixie" ]; then fetch_pkg="fastfetch" + else + fetch_pkg="neofetch" + fi + + local comp_pkgs + if [ "$DEBIAN_CODENAME" = "trixie" ]; then + comp_pkgs="7zip 7zip-rar" + else + comp_pkgs="p7zip-full p7zip-rar" fi _msg "Essential Pack" \ - "Install basic programs:\n\n - Compression (zip, unrar, 7z)\n - System tools (htop, inxi, ${fetch_pkg}, $(_is_headless || echo "VLC"))\n - Microsoft fonts" 13 60 + "Install basic programs:\n\n - Compression (zip, unrar, 7z)\n - System tools (htop, inxi, ${fetch_pkg})\n - Networking (curl, wget, ufw)\n - CA certs & GPG\n - VLC media player" 13 60 local quick_pkgs=( - zip unzip rar unrar p7zip-full p7zip-rar - "$fetch_pkg" htop inxi ttf-mscorefonts-installer + zip unzip rar unrar + $comp_pkgs + "$fetch_pkg" htop inxi curl wget ufw + ca-certificates gnupg lsb-release ) _is_headless || quick_pkgs+=(vlc) _run_install_batch "${quick_pkgs[@]}" diff --git a/modules/extras/office/office.sh b/modules/extras/office/office.sh index ab92b48..2936ba8 100644 --- a/modules/extras/office/office.sh +++ b/modules/extras/office/office.sh @@ -26,6 +26,25 @@ Version: ${ver:-unknown}"; then fi } +# ── Joplin (extrepo, solo Debian 12+) ── +install_joplin() { + if [ "$DEBIAN_VERSION" != "12" ] && [ "$DEBIAN_VERSION" != "13" ]; then + _msg "Joplin" "Joplin via extrepo is only available on\nDebian 12 (Bookworm) and 13 (Trixie)." 10 60 + return 1 + fi + _ensure_extrepo + if [ ! -f /etc/apt/sources.list.d/extrepo_joplin.sources ]; then + _run_cmd "Joplin" "sudo extrepo enable joplin" "Enabling Joplin repository..." + fi + _run_cmd "APT Update" "sudo apt update" "Updating package lists..." + if ! is_installed "joplin"; then + _run_cmd "Joplin" "sudo apt install -y joplin" "Installing Joplin..." + echo -e "${GREEN}Joplin installed.${NC}" + else + echo "Joplin already installed." + fi +} + # ── LibreOffice (backports) ── install_libreoffice_bpo() { if [ "$DEBIAN_VERSION" != "12" ] && [ "$DEBIAN_VERSION" != "13" ]; then @@ -68,6 +87,11 @@ _cat_office() { "onlyoffice" "OnlyOffice Desktop Editors (extrepo)" OFF "libreoffice" "LibreOffice (backports on Bookworm/Trixie)" OFF ) + if [ "$DEBIAN_VERSION" = "12" ] || [ "$DEBIAN_VERSION" = "13" ]; then + items+=( + "joplin" "Joplin note-taking (extrepo)" OFF + ) + fi fi local item_count=${#items[@]} @@ -84,6 +108,7 @@ _cat_office() { case $pkg in onlyoffice) install_onlyoffice ;; libreoffice) install_libreoffice_bpo ;; + joplin) install_joplin ;; esac done } diff --git a/modules/extras/system/software_centers.sh b/modules/extras/system/software_centers.sh index 7217c88..3b3dda9 100644 --- a/modules/extras/system/software_centers.sh +++ b/modules/extras/system/software_centers.sh @@ -10,12 +10,19 @@ _cat_software_centers() { local de_type de_type=$(_detect_desktop_type) local sc_choice - sc_choice=$(_menu "Software Centers" "Choose a software store to install:" 12 65 2 \ + sc_choice=$(_menu "Software Centers" "Choose a software store to install:" 12 65 3 \ "gnome-software" "Software Center for GNOME" \ "plasma-discover" "Software manager for Plasma" \ + "synaptic" "Classic APT package manager (GTK)" \ ) [ -z "$sc_choice" ] && return + if [ "$sc_choice" = "synaptic" ]; then + _run_cmd "Install" "sudo apt install -y synaptic" "Installing synaptic..." + echo -e "${GREEN}synaptic installed.${NC}" + return + fi + if { [ "$de_type" = "qt" ] && [ "$sc_choice" = "gnome-software" ]; } || \ { [ "$de_type" = "gtk" ] && [ "$sc_choice" = "plasma-discover" ]; }; then _msg "Warning" "Warning: This store requires extra background libraries \ diff --git a/modules/extras/system/system.sh b/modules/extras/system/system.sh index 9ad6bda..8dc19dc 100644 --- a/modules/extras/system/system.sh +++ b/modules/extras/system/system.sh @@ -40,6 +40,7 @@ _cat_general() { local fwupd_state; fwupd_state=$(_state "fwupd") local htop_state; htop_state=$(_state "htop") local inxi_state; inxi_state=$(_state "inxi") + local jq_state; jq_state=$(_state "jq") local kvm_state; kvm_state=$(_state "virt-manager") local lshw_state; lshw_state=$(_state "lshw") local mc_state; mc_state=$(_state "mc") @@ -59,6 +60,7 @@ _cat_general() { "fwupd" "Firmware update daemon" "$fwupd_state" "htop" "Interactive process viewer" "$htop_state" "inxi" "System information tool" "$inxi_state" + "jq" "JSON command-line processor" "$jq_state" "kvm" "QEMU/KVM virtualization" "$kvm_state" "lshw" "List hardware details" "$lshw_state" "mc" "Midnight Commander (file manager)" "$mc_state" @@ -69,27 +71,27 @@ _cat_general() { "wine" "Windows compatibility layer" "$wine_state" ) if ! $headless; then - local alacritty_state; alacritty_state=$(_state "alacritty") + local bleachbit_state; bleachbit_state=$(_state "bleachbit") local conky_state; conky_state=$(_state "conky") + local gdebi_state; gdebi_state=$(_state "gdebi") local corectrl_state; corectrl_state=$(_state "corectrl") local dcgtk_state; dcgtk_state=$(_state "doublecmd-gtk") local dcqt_state; dcqt_state=$(_state "doublecmd-qt") local disks_state; disks_state=$(_state "gnome-disk-utility") local gparted_state; gparted_state=$(_state "gparted") local hardinfo_state; hardinfo_state=$(_state "hardinfo") - local kitty_state; kitty_state=$(_state "kitty") local psensor_state; psensor_state=$(_state "psensor") local timeshift_state; timeshift_state=$(_state "timeshift") items+=( - "alacritty" "GPU-accelerated terminal" "$alacritty_state" + "bleachbit" "System cleaner (GUI)" "$bleachbit_state" "conky" "System monitor for desktop" "$conky_state" + "gdebi" "Install .deb packages with deps" "$gdebi_state" "corectrl" "AMD GPU control (CoreCtrl)" "$corectrl_state" "doublecmd-gtk" "Dual-panel file manager (GTK)" "$dcgtk_state" "doublecmd-qt" "Dual-panel file manager (Qt)" "$dcqt_state" "gnome-disk-utility" "Disk management GUI" "$disks_state" "gparted" "GNOME partition editor" "$gparted_state" "hardinfo" "Graphical system profiler" "$hardinfo_state" - "kitty" "GPU-based terminal emulator" "$kitty_state" "psensor" "Hardware temperature monitor" "$psensor_state" "timeshift" "System restore snapshots" "$timeshift_state" ) diff --git a/modules/extras/terminals/terminals.sh b/modules/extras/terminals/terminals.sh new file mode 100644 index 0000000..9476ba4 --- /dev/null +++ b/modules/extras/terminals/terminals.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +# terminals.sh — Terminal emulators + +_cat_terminals() { + local headless=false + _is_headless && headless=true + if $headless; then + echo "Terminals require a GUI — skipping." + return + fi + + local -a items=() + for t in kitty deepin-terminal gnome-terminal lxterminal mate-terminal \ + qterminal xfce4-terminal konsole terminator guake cool-retro-term \ + tilix yakuake terminology rxvt-unicode xterm; do + items+=("$t" "" "$(_state "$t")") + done + + if [ "$DEBIAN_VERSION" = "12" ] || [ "$DEBIAN_VERSION" = "13" ]; then + items+=("alacritty" "" "$(_state alacritty)") + fi + if [ "$DEBIAN_VERSION" = "13" ]; then + items+=("blackbox-terminal" "" "$(_state blackbox-terminal)") + items+=("ptyxis" "" "$(_state ptyxis)") + fi + + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) + local choices + choices=$(_checklist "Terminals" "Select terminal emulators${SCROLL_HINT}:" \ + $TUI_ALTO $TUI_ANCHO $lista_alto "${items[@]}") + clear + [ -z "$choices" ] && return + + for pkg in $(echo "$choices" | tr -d '"'); do + if ! is_installed "$pkg"; then + _run_install "$pkg" + else + echo "$pkg already installed." + fi + done + echo -e "${GREEN}Terminals installed.${NC}" +} diff --git a/modules/extras/themes/themes.sh b/modules/extras/themes/themes.sh index 3087424..677f99d 100644 --- a/modules/extras/themes/themes.sh +++ b/modules/extras/themes/themes.sh @@ -8,6 +8,7 @@ _cat_customization() { "2" "Icon Themes" \ "3" "Cursor Themes" \ "4" "Fonts" \ + "5" "Terminals" \ ) [ -z "$sub" ] && return case $sub in @@ -15,5 +16,6 @@ _cat_customization() { 2) _cat_icons ;; 3) _cat_cursors ;; 4) _cat_fonts ;; + 5) _cat_terminals ;; esac } diff --git a/modules/gaming.sh b/modules/gaming.sh index b93b3e0..2465c25 100644 --- a/modules/gaming.sh +++ b/modules/gaming.sh @@ -54,7 +54,7 @@ install_gaming() { choices=$(_checklist "Gaming Setup" \ "Select gaming packages to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ "steam" "Steam (requires 32-bit support)" ON \ - "gamemode" "Game performance optimization" ON \ + "gamemode" "Game performance optimization" OFF \ "mangohud" "Performance overlay (Vulkan/OpenGL)" ON \ "goverlay" "MangoHud config GUI" ON \ "heroic" "Heroic Launcher (Epic/GOG)" OFF \ diff --git a/modules/gpu.sh b/modules/gpu.sh index fdf529b..20e6cc9 100644 --- a/modules/gpu.sh +++ b/modules/gpu.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Graphics Stack — sources submodules and provides install_gpu_drivers() +# Graphics Stack — sources submodules, provides AMD/Intel and NVIDIA top-level functions _GPU_DIR="${MODULES_DIR}/gpu" source "${_GPU_DIR}/_helpers.sh" @@ -9,8 +9,7 @@ source "${_GPU_DIR}/nvidia.sh" # Consumed by gaming.sh to know which NVIDIA driver path was taken NVIDIA_DRIVER_MODE="" -install_gpu_drivers() { - # ── Unknown GPU / VM block ── +_install_amd_intel_stack() { if [ "$GPU_TYPE" = "unknown" ] || [ -z "$GPU_TYPE" ]; then local mesa_pkgs=(mesa-vulkan-drivers libgl1-mesa-dri libglx-mesa0 libegl-mesa0 mesa-va-drivers) local ref_ver @@ -50,9 +49,7 @@ install_gpu_drivers() { return fi - # ── Detectable GPU: build plan ── - local plan="The script has automatically detected your graphics hardware\n" - plan+="and prepared a personalized installation plan.\n\n" + local plan="The script has detected your graphics hardware.\n\n" plan+="Detected GPUs:\n" local gpu_count=0 while IFS= read -r gpu_line; do @@ -70,10 +67,7 @@ install_gpu_drivers() { if $HAS_AMD; then plan+=" [+] AMD firmware (firmware-amd-graphics)\n" fi - if $HAS_NVIDIA; then - plan+=" [+] NVIDIA driver (proprietary)\n" - fi - plan+=" [+] Mesa (version selected in next step)\n" + plan+=" [+] Mesa (OpenGL/Vulkan/VA-API)\n" _msg "Graphics Stack — Plan" "$plan" 16 70 @@ -82,77 +76,115 @@ install_gpu_drivers() { return fi - # ── Sequential firmware / driver installs ── if $HAS_INTEL; then install_intel_firmware fi - if $HAS_AMD; then install_amd_firmware fi - if $HAS_NVIDIA; then - if [ "$DEBIAN_VERSION" = "11" ]; then - if type install_nvidia_bullseye &>/dev/null; then - install_nvidia_bullseye - else - install_nvidia_driver - fi - elif [ "$DEBIAN_VERSION" = "12" ]; then - if [ "$(is_nvidia_kepler)" = "true" ]; then - if type _install_nvidia_bookworm_kepler &>/dev/null; then - _install_nvidia_bookworm_kepler - else - install_nvidia_driver - fi - elif [ "$(is_nvidia_fermi)" = "true" ]; then - _msg "NVIDIA Fermi — Bookworm" \ - "Fermi GPUs (GF1xx) are not supported\nin Debian 12 (Bookworm).\nThe nvidia-legacy-390xx driver is\nnot available in this version.\n\nNo NVIDIA driver will be installed." - NVIDIA_DRIVER_MODE="" - else - install_nvidia_driver - fi - elif [ "$DEBIAN_VERSION" = "13" ]; then - if [ "$(is_nvidia_kepler)" = "true" ] || [ "$(is_nvidia_fermi)" = "true" ]; then - _msg "NVIDIA — Trixie" \ - "Kepler and Fermi GPUs are not supported\nin Debian 13 (Trixie).\n\nThe nvidia-legacy drivers are not available\nin this version of Debian.\n\nNo NVIDIA driver will be installed." - NVIDIA_DRIVER_MODE="" - else - install_nvidia_driver - fi - else - install_nvidia_driver - fi - fi - - # ── Mesa (once) ── _install_mesa_backports - # ── Refresh GPU_VERSION after Mesa install ── local mesa_ver mesa_ver=$(dpkg -l libgl1-mesa-dri 2>/dev/null | awk '/^ii/ {print $3; exit}' | sed 's/-.*//') [ -n "$mesa_ver" ] && GPU_VERSION="Mesa ${mesa_ver}" - # ── Vendor-specific tools ── if $HAS_INTEL; then offer_intel_tools fi if $HAS_AMD; then offer_amd_tools fi - if $HAS_NVIDIA; then + if ! $HAS_INTEL && ! $HAS_AMD; then offer_generic_tools fi - # ── Build summary ── - local summary="" - summary+="Mesa: ${GPU_VERSION:-not available}\n" - if $HAS_NVIDIA; then - local nv_mode="${NVIDIA_DRIVER_MODE:-unknown}" - summary+="NVIDIA: ${nv_mode}\n" - fi + local summary="Mesa: ${GPU_VERSION:-not available}\n" summary+="Firmware: installed for detected GPUs\n" - summary+="Tools: installed per vendor selection" - + summary+="Tools: installed per vendor" _msg "Graphics Stack — Complete" "$summary" 12 65 } + +_install_nvidia_stack() { + if ! $HAS_NVIDIA; then + _msg "NVIDIA Not Found" "No NVIDIA GPU was detected.\n\nPlease check your hardware and try again." 10 60 + return + fi + + local plan="The script has detected your NVIDIA GPU.\n\n" + plan+="Detected GPUs:\n" + local gpu_count=0 + while IFS= read -r gpu_line; do + gpu_count=$((gpu_count + 1)) + local desc + desc=$(echo "$gpu_line" | sed -E 's/.*: //; s/ *\(rev.*//') + plan+=" GPU ${gpu_count}: ${desc}\n" + done < <(lspci -nn | grep -E "VGA|3D" || true) + plan+="\nPlanned:\n [+] NVIDIA proprietary driver" + + _msg "NVIDIA Stack — Plan" "$plan" 14 65 + if ! _confirm "NVIDIA Stack" "Install the NVIDIA proprietary driver?"; then + echo "Skipping NVIDIA driver installation." + return + fi + + NVIDIA_DRIVER_MODE="" + + if [ "$DEBIAN_VERSION" = "11" ]; then + install_nvidia_bullseye + + elif [ "$DEBIAN_VERSION" = "12" ]; then + if [ "$(is_nvidia_kepler)" = "true" ]; then + if type _install_nvidia_bookworm_kepler &>/dev/null; then + _install_nvidia_bookworm_kepler + else + _install_nvidia_standard + fi + elif [ "$(is_nvidia_fermi)" = "true" ]; then + _msg "NVIDIA Fermi — Bookworm" \ + "Fermi GPUs (GF1xx) are not supported\nin Debian 12 (Bookworm).\nThe nvidia-legacy-390xx driver is\nnot available in this version.\n\nNo NVIDIA driver will be installed." + NVIDIA_DRIVER_MODE="" + elif [ "$(is_backports_kernel)" = "true" ]; then + _install_nvidia_bookworm_bpo + else + _install_nvidia_standard + fi + + elif [ "$DEBIAN_VERSION" = "13" ]; then + if [ "$(is_nvidia_blackwell)" = "true" ]; then + _install_nvidia_cuda_repo + elif [ "$(is_nvidia_kepler)" = "true" ] || [ "$(is_nvidia_fermi)" = "true" ]; then + _msg "NVIDIA — Trixie" \ + "Kepler and Fermi GPUs are not supported\nin Debian 13 (Trixie).\n\nThe nvidia-legacy drivers are not available\nin this version of Debian.\n\nNo NVIDIA driver will be installed." + NVIDIA_DRIVER_MODE="" + elif [ "$(is_backports_kernel)" = "true" ]; then + if [ "$(is_nvidia_maxwell)" = "true" ] || [ "$(is_nvidia_pascal)" = "true" ]; then + local gpu_gen="Maxwell" + [ "$(is_nvidia_pascal)" = "true" ] && gpu_gen="Pascal" + _msg "NVIDIA — Trixie + Backports" \ + "INCOMPATIBILITY DETECTED: Your NVIDIA ${gpu_gen} GPU\n\ +is NOT supported by the modern v590 driver.\n\n\ +To run NVIDIA safely on Debian 13 (Trixie), you MUST use\n\ +the official Debian v550 driver, which requires the\n\ +standard STABLE Kernel.\n\n\ +Forcing the stable driver path." 14 70 + _install_nvidia_standard + NVIDIA_DRIVER_MODE="stable" + else + _install_nvidia_cuda_repo + fi + else + _install_nvidia_standard + fi + + else + _install_nvidia_standard + fi + + if [ -n "$NVIDIA_DRIVER_MODE" ]; then + offer_generic_tools + local summary="NVIDIA: ${NVIDIA_DRIVER_MODE}\n" + summary+="Tools: nvtop + vainfo" + _msg "NVIDIA Stack — Complete" "$summary" 10 55 + fi +} diff --git a/modules/gpu/nvidia.sh b/modules/gpu/nvidia.sh index 434dc22..58ce9c8 100644 --- a/modules/gpu/nvidia.sh +++ b/modules/gpu/nvidia.sh @@ -5,6 +5,7 @@ # CASE B : Bookworm + backports kernel → Debian backports (-t bookworm-backports) # CASE C : Kernel stable (any distro) → Debian stable (optional backports) +# --- DEPRECATED (Replaced by _install_nvidia_stack in gpu.sh) --- install_nvidia_driver() { echo -e "${YELLOW}NVIDIA GPU detected.${NC}" NVIDIA_DRIVER_MODE="" diff --git a/modules/repos.sh b/modules/repos.sh index 010192f..eb7bd98 100644 --- a/modules/repos.sh +++ b/modules/repos.sh @@ -374,7 +374,11 @@ popular software (like gaming platforms and proprietary tools)." 12 60; then _pause return fi - components="main contrib non-free non-free-firmware" + if [ "$DEBIAN_VERSION" = "11" ]; then + components="main contrib non-free" + else + components="main contrib non-free non-free-firmware" + fi fi bp_enabled=false @@ -398,6 +402,10 @@ popular software (like gaming platforms and proprietary tools)." 12 60; then cleanup_repo_backup echo -e "${GREEN}Repository components configured.${NC}" _repos_offer_upgrade + echo -e "${GREEN}Cleaning old packages...${NC}" + sudo apt autoremove -y + sudo apt autoclean + echo -e "${GREEN}System packages cleaned.${NC}" else restore_previous_repos echo -e "${RED}apt update failed. Previous configuration restored.${NC}" diff --git a/modules/zram.sh b/modules/zram.sh index f1e85cd..35d3448 100644 --- a/modules/zram.sh +++ b/modules/zram.sh @@ -13,10 +13,10 @@ install_zram() { local algo algo=$(_menu "ZRAM Configuration" \ - "ZRAM creates a compressed block device in RAM to use as swap. This reduces disk I/O and can significantly improve responsiveness on systems with limited memory (e.g., 4GB RAM or less), at the cost of a small amount of CPU usage." \ + "ZRAM creates a compressed swap device in RAM to reduce disk I/O and boost speed. Data is stored compressed in memory. Choose an algorithm below to balance CPU usage and compression ratio:" \ $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ - "lz4" "Fastest compression/decompression. Lowest CPU overhead. (Default)" \ - "zstd" "Higher compression ratio. Saves slightly more memory but uses more CPU.") + "lz4" "Fastest compression. Lowest CPU overhead. (Default)" \ + "zstd" "Higher compression ratio. Saves more RAM, uses more CPU.") if [ -z "$algo" ]; then echo "ZRAM configuration cancelled."