From f043c130a8fac928a790386a8328a8f9cf5bae4a Mon Sep 17 00:00:00 2001 From: stornic56 <71296607+stornic56@users.noreply.github.com> Date: Sat, 11 Jul 2026 22:05:35 -0500 Subject: [PATCH] clean TUI core - Stripped forced-scrollbar hack from _menu and _checklist - Eliminated TUI_ANCHO_REFORZADO overflow across 9 files - Removed redundant _inst() function globally - Added dynamic list height calculation for checklists - Introduced Desktop & Display menu (Option 12) - Fixed non-free-firmware false positive in repo detection - Restored terminal transparency for apt/vainfo output" --- debianito.sh | 7 +- modules/bullseye/extras.sh | 282 ++++++++++-------- modules/desktop_display.sh | 73 +++++ modules/extras/design/design.sh | 30 +- modules/extras/dev/dev.sh | 33 +- modules/extras/download/download.sh | 33 +- modules/extras/fetch/fetch.sh | 17 +- modules/extras/internet/internet.sh | 40 +-- modules/extras/office/office.sh | 4 +- modules/extras/players/players.sh | 9 +- modules/extras/programming/programming.sh | 29 +- modules/extras/security/security.sh | 17 +- modules/extras/system/software_centers.sh | 4 +- modules/extras/system/system.sh | 63 ++-- modules/extras/themes/cursors/cursors.sh | 16 +- .../themes/desktop-themes/desktop-themes.sh | 18 +- modules/extras/themes/fonts/fonts.sh | 20 +- modules/extras/themes/icons/icons.sh | 28 +- modules/extras/themes/themes.sh | 3 +- modules/firmware.sh | 2 - modules/gaming.sh | 4 +- modules/gaming/_helpers.sh | 1 + modules/gpu/_helpers.sh | 2 +- modules/gpu/amd_intel.sh | 4 +- modules/repos.sh | 14 +- modules/swap.sh | 14 +- modules/utils.sh | 18 +- 27 files changed, 454 insertions(+), 331 deletions(-) create mode 100644 modules/desktop_display.sh diff --git a/debianito.sh b/debianito.sh index 8c916cf..4de6820 100644 --- a/debianito.sh +++ b/debianito.sh @@ -30,6 +30,7 @@ source "${MODULES_DIR}/repos.sh" [ -f "${MODULES_DIR}/extras/java.sh" ] && source "${MODULES_DIR}/extras/java.sh" [ -f "${MODULES_DIR}/rescue.sh" ] && source "${MODULES_DIR}/rescue.sh" [ -f "${MODULES_DIR}/swap.sh" ] && source "${MODULES_DIR}/swap.sh" +[ -f "${MODULES_DIR}/desktop_display.sh" ] && source "${MODULES_DIR}/desktop_display.sh" # ── Bullseye-specific modules (loaded only on Debian 11) ── if [ -d "${MODULES_DIR}/bullseye" ]; then @@ -67,7 +68,8 @@ main_menu() { "9" "Swap Management" \ "10" "Install Programs and Software" \ "11" "Boot Rescue & Repair" \ - "12" "Exit") + "12" "Desktop & Display" \ + "13" "Exit") clear @@ -119,7 +121,8 @@ kernels. Use the stable kernel provided by Bullseye." 10 60 fi ;; 11) rescue_boot || true ;; - 12) echo "Exiting."; exit 0 ;; + 12) manage_desktop_display || true ;; + 13) echo "Exiting."; exit 0 ;; esac if $STATE_REFRESHED; then refresh_system_state diff --git a/modules/bullseye/extras.sh b/modules/bullseye/extras.sh index 111c12c..a728ad5 100644 --- a/modules/bullseye/extras.sh +++ b/modules/bullseye/extras.sh @@ -58,9 +58,8 @@ Instalar?"; then # ====================================================================== _cat_customization_bullseye() { - local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6)) local sub - sub=$(_menu "Customization (Bullseye)" "Select type:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \ + sub=$(_menu "Customization (Bullseye)" "Select type:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ "1" "Desktop Themes (GTK/KDE)" \ "2" "Icon Themes" \ "3" "Cursor Themes" \ @@ -76,14 +75,16 @@ _cat_customization_bullseye() { } _cat_themes_bullseye() { + local item_count=6 + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Desktop Themes (Bullseye)" "Select desktop themes${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ - "arc-theme" "Arc GTK theme$(_inst arc-theme)" "$(_state arc-theme)" \ - "blackbird-gtk-theme" "Blackbird GTK theme$(_inst blackbird-gtk-theme)" "$(_state blackbird-gtk-theme)" \ - "bluebird-gtk-theme" "Bluebird GTK theme$(_inst bluebird-gtk-theme)" "$(_state bluebird-gtk-theme)" \ - "breeze-gtk-theme" "Breeze GTK theme (KDE port)$(_inst breeze-gtk-theme)" "$(_state breeze-gtk-theme)" \ - "greybird-gtk-theme" "Greybird GTK theme$(_inst greybird-gtk-theme)" "$(_state greybird-gtk-theme)" \ - "numix-gtk-theme" "Numix GTK theme$(_inst numix-gtk-theme)" "$(_state numix-gtk-theme)" \ + choices=$(_checklist "Desktop Themes (Bullseye)" "Select desktop themes${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ + "arc-theme" "Arc GTK theme" "$(_state arc-theme)" \ + "blackbird-gtk-theme" "Blackbird GTK theme" "$(_state blackbird-gtk-theme)" \ + "bluebird-gtk-theme" "Bluebird GTK theme" "$(_state bluebird-gtk-theme)" \ + "breeze-gtk-theme" "Breeze GTK theme (KDE port)" "$(_state breeze-gtk-theme)" \ + "greybird-gtk-theme" "Greybird GTK theme" "$(_state greybird-gtk-theme)" \ + "numix-gtk-theme" "Numix GTK theme" "$(_state numix-gtk-theme)" \ ) clear [ -z "$choices" ] && return @@ -96,18 +97,20 @@ _cat_themes_bullseye() { _cat_icons_bullseye() { local items=( - "breeze-icon-theme" "Breeze icon theme$(_inst breeze-icon-theme)" "$(_state breeze-icon-theme)" - "deepin-icon-theme" "Deepin icon theme$(_inst deepin-icon-theme)" "$(_state deepin-icon-theme)" - "moka-icon-theme" "Moka icon theme$(_inst moka-icon-theme)" "$(_state moka-icon-theme)" - "numix-icon-theme" "Numix icon theme$(_inst numix-icon-theme)" "$(_state numix-icon-theme)" - "numix-icon-theme-circle" "Numix Circle icon theme$(_inst numix-icon-theme-circle)" "$(_state numix-icon-theme-circle)" - "obsidian-icon-theme" "Obsidian icon theme$(_inst obsidian-icon-theme)" "$(_state obsidian-icon-theme)" - "papirus-icon-theme" "Papirus icon theme$(_inst papirus-icon-theme)" "$(_state papirus-icon-theme)" - "paper-icon-theme" "Paper icon theme$(_inst paper-icon-theme)" "$(_state paper-icon-theme)" - "suru-icon-theme" "Suru icon theme$(_inst suru-icon-theme)" "$(_state suru-icon-theme)" + "breeze-icon-theme" "Breeze icon theme" "$(_state breeze-icon-theme)" + "deepin-icon-theme" "Deepin icon theme" "$(_state deepin-icon-theme)" + "moka-icon-theme" "Moka icon theme" "$(_state moka-icon-theme)" + "numix-icon-theme" "Numix icon theme" "$(_state numix-icon-theme)" + "numix-icon-theme-circle" "Numix Circle icon theme" "$(_state numix-icon-theme-circle)" + "obsidian-icon-theme" "Obsidian icon theme" "$(_state obsidian-icon-theme)" + "papirus-icon-theme" "Papirus icon theme" "$(_state papirus-icon-theme)" + "paper-icon-theme" "Paper icon theme" "$(_state paper-icon-theme)" + "suru-icon-theme" "Suru icon theme" "$(_state suru-icon-theme)" ) + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Icon Themes (Bullseye)" "Select icon themes${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + choices=$(_checklist "Icon Themes (Bullseye)" "Select icon themes${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ "${items[@]}" ) clear [ -z "$choices" ] && return @@ -119,13 +122,15 @@ _cat_icons_bullseye() { } _cat_cursors_bullseye() { + local item_count=5 + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Cursor Themes (Bullseye)" "Select cursor themes${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ - "breeze-cursor-theme" "Breeze cursors (KDE)$(_inst breeze-cursor-theme)" "$(_state breeze-cursor-theme)" \ - "chameleon-cursor-theme" "Chameleon cursors$(_inst chameleon-cursor-theme)" "$(_state chameleon-cursor-theme)" \ - "dmz-cursor-theme" "DMZ cursors$(_inst dmz-cursor-theme)" "$(_state dmz-cursor-theme)" \ - "oxygencursors" "Oxygen cursors (KDE legacy)$(_inst oxygencursors)" "$(_state oxygencursors)" \ - "xcursor-themes" "X11 base cursors$(_inst xcursor-themes)" "$(_state xcursor-themes)" \ + choices=$(_checklist "Cursor Themes (Bullseye)" "Select cursor themes${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ + "breeze-cursor-theme" "Breeze cursors (KDE)" "$(_state breeze-cursor-theme)" \ + "chameleon-cursor-theme" "Chameleon cursors" "$(_state chameleon-cursor-theme)" \ + "dmz-cursor-theme" "DMZ cursors" "$(_state dmz-cursor-theme)" \ + "oxygencursors" "Oxygen cursors (KDE legacy)" "$(_state oxygencursors)" \ + "xcursor-themes" "X11 base cursors" "$(_state xcursor-themes)" \ ) clear [ -z "$choices" ] && return @@ -137,12 +142,14 @@ _cat_cursors_bullseye() { } _cat_fonts_bullseye() { + local item_count=4 + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Fonts (Bullseye)" "Available fonts${SCROLL_HINT}:" $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)" \ + choices=$(_checklist "Fonts (Bullseye)" "Available fonts${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ + "fonts-firacode" "Fira Code monospace font" "$(_state fonts-firacode)" \ + "fonts-noto" "Noto fonts (Google)" "$(_state fonts-noto)" \ + "fonts-dejavu-core" "DejaVu core fonts" "$(_state fonts-dejavu-core)" \ + "ttf-mscorefonts-installer" "Microsoft Core Fonts" "$(_state ttf-mscorefonts-installer)" \ ) clear [ -z "$choices" ] && return @@ -156,21 +163,25 @@ _cat_fonts_bullseye() { _cat_download_bullseye() { local choices1 choices2="" - choices1=$(_checklist "Downloaders" "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)" \ + local item_count1=2 + local lista_alto1=$((item_count1 > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count1)) + choices1=$(_checklist "Downloaders" "Select download tools:" $TUI_ALTO $TUI_ANCHO $lista_alto1 \ + "aria2" "Multiprotocol downloader (CLI)" "$(_state aria2)" \ + "filezilla" "FTP/SFTP client (GUI)" "$(_state filezilla)" \ ) clear - choices2=$(_checklist "Torrent Clients" "Select torrent clients${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ - "deluge" "BitTorrent client (GTK)$(_inst deluge)" "$(_state deluge)" \ - "deluged" "BitTorrent daemon/server$(_inst deluged)" "$(_state deluged)" \ - "mktorrent" "Torrent metainfo creator (CLI)$(_inst mktorrent)" "$(_state mktorrent)" \ - "qbittorrent" "BitTorrent client (Qt)$(_inst qbittorrent)" "$(_state qbittorrent)" \ - "qbittorrent-nox" "BitTorrent WebUI/CLI$(_inst qbittorrent-nox)" "$(_state qbittorrent-nox)" \ - "transmission-cli" "BitTorrent client (CLI)$(_inst transmission-cli)" "$(_state transmission-cli)" \ - "transmission-gtk" "BitTorrent client (GTK)$(_inst transmission-gtk)" "$(_state transmission-gtk)" \ - "transmission-qt" "BitTorrent client (Qt)$(_inst transmission-qt)" "$(_state transmission-qt)" \ + local item_count2=8 + local lista_alto2=$((item_count2 > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count2)) + choices2=$(_checklist "Torrent Clients" "Select torrent clients${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto2 \ + "deluge" "BitTorrent client (GTK)" "$(_state deluge)" \ + "deluged" "BitTorrent daemon/server" "$(_state deluged)" \ + "mktorrent" "Torrent metainfo creator (CLI)" "$(_state mktorrent)" \ + "qbittorrent" "BitTorrent client (Qt)" "$(_state qbittorrent)" \ + "qbittorrent-nox" "BitTorrent WebUI/CLI" "$(_state qbittorrent-nox)" \ + "transmission-cli" "BitTorrent client (CLI)" "$(_state transmission-cli)" \ + "transmission-gtk" "BitTorrent client (GTK)" "$(_state transmission-gtk)" \ + "transmission-qt" "BitTorrent client (Qt)" "$(_state transmission-qt)" \ ) clear @@ -189,19 +200,21 @@ _cat_download_bullseye() { } _cat_internet_bullseye() { + local item_count=11 + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Internet (Bullseye)" "Select browsers, email${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ - "chromium" "Chromium web browser$(_inst chromium)" "$(_state chromium)" \ - "dillo" "Lightweight graphical browser$(_inst dillo)" "$(_state dillo)" \ - "elinks" "Text-mode web browser$(_inst elinks)" "$(_state elinks)" \ - "epiphany-browser" "GNOME web browser$(_inst epiphany-browser)" "$(_state epiphany-browser)" \ - "falkon" "KDE web browser (QtWebEngine)$(_inst falkon)" "$(_state falkon)" \ - "firefox-esr" "Firefox ESR (official Debian)$(_inst firefox-esr)" "$(_state firefox-esr)" \ - "konqueror" "KDE file manager / web browser$(_inst konqueror)" "$(_state konqueror)" \ - "qutebrowser" "Keyboard-driven browser (Qt)$(_inst qutebrowser)" "$(_state qutebrowser)" \ - "thunderbird" "Email client$(_inst thunderbird)" "$(_state thunderbird)" \ - "torbrowser-launcher" "Tor Browser launcher$(_inst torbrowser-launcher)" "$(_state torbrowser-launcher)" \ - "w3m" "Text-mode browser + deps$(_inst w3m)" "$(_state w3m)" \ + choices=$(_checklist "Internet (Bullseye)" "Select browsers, email${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ + "chromium" "Chromium web browser" "$(_state chromium)" \ + "dillo" "Lightweight graphical browser" "$(_state dillo)" \ + "elinks" "Text-mode web browser" "$(_state elinks)" \ + "epiphany-browser" "GNOME web browser" "$(_state epiphany-browser)" \ + "falkon" "KDE web browser (QtWebEngine)" "$(_state falkon)" \ + "firefox-esr" "Firefox ESR (official Debian)" "$(_state firefox-esr)" \ + "konqueror" "KDE file manager / web browser" "$(_state konqueror)" \ + "qutebrowser" "Keyboard-driven browser (Qt)" "$(_state qutebrowser)" \ + "thunderbird" "Email client" "$(_state thunderbird)" \ + "torbrowser-launcher" "Tor Browser launcher" "$(_state torbrowser-launcher)" \ + "w3m" "Text-mode browser + deps" "$(_state w3m)" \ ) clear [ -z "$choices" ] && return @@ -229,10 +242,12 @@ _cat_internet_bullseye() { } _cat_players_bullseye() { + local item_count=2 + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Media Players (Bullseye)" "Select media players${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ - "mpv" "Lightweight media player$(_inst mpv)" "$(_state mpv)" \ - "vlc" "VLC media player$(_inst vlc)" "$(_state vlc)" \ + choices=$(_checklist "Media Players (Bullseye)" "Select media players${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ + "mpv" "Lightweight media player" "$(_state mpv)" \ + "vlc" "VLC media player" "$(_state vlc)" \ ) clear [ -z "$choices" ] && return @@ -248,21 +263,23 @@ _cat_players_bullseye() { } _cat_design_bullseye() { + local item_count=13 + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Multimedia & Design (Bullseye)" "Select multimedia and design tools${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ - "ardour" "Digital audio workstation$(_inst ardour)" "$(_state ardour)" \ - "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)" \ - "handbrake" "Video transcoder (DVD ripper)$(_inst handbrake)" "$(_state handbrake)" \ - "inkscape" "Vector graphics editor$(_inst inkscape)" "$(_state inkscape)" \ - "kdenlive" "Video editor (KDE)$(_inst kdenlive)" "$(_state kdenlive)" \ - "krita" "Digital painting/illustration$(_inst krita)" "$(_state krita)" \ - "obs-studio" "Screen recording/streaming$(_inst obs-studio)" "$(_state obs-studio)" \ - "openshot-qt" "Video editor (simple)$(_inst openshot-qt)" "$(_state openshot-qt)" \ - "scribus" "Desktop publishing (DTP)$(_inst scribus)" "$(_state scribus)" \ - "shotcut" "Video editor (cross-platform)$(_inst shotcut)" "$(_state shotcut)" \ + choices=$(_checklist "Multimedia & Design (Bullseye)" "Select multimedia and design tools${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ + "ardour" "Digital audio workstation" "$(_state ardour)" \ + "audacity" "Audio editor/recorder" "$(_state audacity)" \ + "blender" "3D modeling/animation suite" "$(_state blender)" \ + "ffmpeg" "Multimedia framework (CLI)" "$(_state ffmpeg)" \ + "gimp" "Image editor" "$(_state gimp)" \ + "handbrake" "Video transcoder (DVD ripper)" "$(_state handbrake)" \ + "inkscape" "Vector graphics editor" "$(_state inkscape)" \ + "kdenlive" "Video editor (KDE)" "$(_state kdenlive)" \ + "krita" "Digital painting/illustration" "$(_state krita)" \ + "obs-studio" "Screen recording/streaming" "$(_state obs-studio)" \ + "openshot-qt" "Video editor (simple)" "$(_state openshot-qt)" \ + "scribus" "Desktop publishing (DTP)" "$(_state scribus)" \ + "shotcut" "Video editor (cross-platform)" "$(_state shotcut)" \ ) clear [ -z "$choices" ] && return @@ -278,17 +295,19 @@ _cat_design_bullseye() { } _cat_programming_bullseye() { + local item_count=9 + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Code Editors & IDEs (Bullseye)" "Select editors and IDEs${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ - "vim" "Classic terminal editor$(_inst vim)" "$(_state vim)" \ - "vim-gtk3" "Vim with GTK3 GUI$(_inst vim-gtk3)" "$(_state vim-gtk3)" \ - "neovim" "Modern vim fork$(_inst neovim)" "$(_state neovim)" \ - "nano" "Simple terminal editor$(_inst nano)" "$(_state nano)" \ - "emacs" "Extensible editor / IDE$(_inst emacs)" "$(_state emacs)" \ - "kate" "KDE advanced text editor$(_inst kate)" "$(_state kate)" \ - "mousepad" "Xfce text editor$(_inst mousepad)" "$(_state mousepad)" \ - "gedit" "GNOME text editor$(_inst gedit)" "$(_state gedit)" \ - "geany" "Lightweight IDE$(_inst geany)" "$(_state geany)" \ + choices=$(_checklist "Code Editors & IDEs (Bullseye)" "Select editors and IDEs${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ + "vim" "Classic terminal editor" "$(_state vim)" \ + "vim-gtk3" "Vim with GTK3 GUI" "$(_state vim-gtk3)" \ + "neovim" "Modern vim fork" "$(_state neovim)" \ + "nano" "Simple terminal editor" "$(_state nano)" \ + "emacs" "Extensible editor / IDE" "$(_state emacs)" \ + "kate" "KDE advanced text editor" "$(_state kate)" \ + "mousepad" "Xfce text editor" "$(_state mousepad)" \ + "gedit" "GNOME text editor" "$(_state gedit)" \ + "geany" "Lightweight IDE" "$(_state geany)" \ ) clear [ -z "$choices" ] && return @@ -304,21 +323,23 @@ _cat_programming_bullseye() { } _cat_dev_bullseye() { + local item_count=14 + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Servers & Dev Tools (Bullseye)" "Select development tools and servers${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ - "apache2" "Apache web server$(_inst apache2)" "$(_state apache2)" \ - "build-essential" "C/C++ build tools (gcc, make)$(_inst build-essential)" "$(_state build-essential)" \ - "docker" "Docker container runtime$(_inst docker.io)" "$(_state docker.io)" \ - "mariadb-server" "MariaDB database server$(_inst mariadb-server)" "$(_state mariadb-server)" \ - "netcat-openbsd" "TCP/IP networking utility$(_inst netcat-openbsd)" "$(_state netcat-openbsd)" \ - "nginx" "Nginx web server$(_inst nginx)" "$(_state nginx)" \ - "openssh-server" "SSH server$(_inst openssh-server)" "$(_state openssh-server)" \ - "openssl" "OpenSSL cryptography toolkit$(_inst openssl)" "$(_state openssl)" \ - "postgresql" "PostgreSQL database server$(_inst postgresql)" "$(_state postgresql)" \ - "python3-pip" "Python 3 pip + venv + dev$(_inst python3-pip)" "$(_state python3-pip)" \ - "redis-server" "Redis key-value store$(_inst redis-server)" "$(_state redis-server)" \ - "sqlite3" "SQLite database engine$(_inst sqlite3)" "$(_state sqlite3)" \ - "jellyfin" "Jellyfin Media Server (Web GUI on port 8096)$(_inst jellyfin)" OFF \ + choices=$(_checklist "Servers & Dev Tools (Bullseye)" "Select development tools and servers${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ + "apache2" "Apache web server" "$(_state apache2)" \ + "build-essential" "C/C++ build tools (gcc, make)" "$(_state build-essential)" \ + "docker" "Docker container runtime" "$(_state docker.io)" \ + "mariadb-server" "MariaDB database server" "$(_state mariadb-server)" \ + "netcat-openbsd" "TCP/IP networking utility" "$(_state netcat-openbsd)" \ + "nginx" "Nginx web server" "$(_state nginx)" \ + "openssh-server" "SSH server" "$(_state openssh-server)" \ + "openssl" "OpenSSL cryptography toolkit" "$(_state openssl)" \ + "postgresql" "PostgreSQL database server" "$(_state postgresql)" \ + "python3-pip" "Python 3 pip + venv + dev" "$(_state python3-pip)" \ + "redis-server" "Redis key-value store" "$(_state redis-server)" \ + "sqlite3" "SQLite database engine" "$(_state sqlite3)" \ + "jellyfin" "Jellyfin Media Server (Web GUI on port 8096)" OFF \ "openjdk-dev-env" "Adoptium Temurin JDK (17, 21, 25 LTS)$(_any_jdk_installed_desc)" "$(_any_jdk_state)" \ ) clear @@ -366,13 +387,15 @@ _cat_dev_bullseye() { echo -e "${GREEN}Servers & dev tools installed.${NC}" } _cat_security_bullseye() { + local item_count=5 + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Security & Networking (Bullseye)" "Select security and networking tools${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ - "wireshark" "Network protocol analyzer (GUI)$(_inst wireshark)" "$(_state wireshark)" \ - "tcpdump" "Command-line packet analyzer$(_inst tcpdump)" "$(_state tcpdump)" \ - "fail2ban" "Brute-force protection daemon$(_inst fail2ban)" "$(_state fail2ban)" \ - "ufw" "Uncomplicated firewall$(_inst ufw)" "$(_state ufw)" \ - "clamav" "Antivirus engine (ClamAV)$(_inst clamav)" "$(_state clamav)" \ + choices=$(_checklist "Security & Networking (Bullseye)" "Select security and networking tools${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ + "wireshark" "Network protocol analyzer (GUI)" "$(_state wireshark)" \ + "tcpdump" "Command-line packet analyzer" "$(_state tcpdump)" \ + "fail2ban" "Brute-force protection daemon" "$(_state fail2ban)" \ + "ufw" "Uncomplicated firewall" "$(_state ufw)" \ + "clamav" "Antivirus engine (ClamAV)" "$(_state clamav)" \ ) clear [ -z "$choices" ] && return @@ -395,27 +418,29 @@ _cat_security_bullseye() { } _cat_general_bullseye() { + local item_count=18 + 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 $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)" \ - "nvme-cli" "NVMe SSD health monitoring$(_inst nvme-cli)" "$(_state nvme-cli)" \ - "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)" \ + choices=$(_checklist "System Tools (Bullseye)" "Select system utilities${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ + "compress" "Compression tools (zip, unrar, p7zip)" "$(_state zip)" \ + "conky" "System monitor for desktop" "$(_state conky)" \ + "cpu-x" "CPU-X (alternative to CPU-Z)" "$(_state cpu-x)" \ + "curl-wget" "HTTP transfer tools (curl, wget)" "$(_state curl)" \ + "flatpak" "Flatpak sandbox (Bullseye native)" "$(_state flatpak)" \ + "fwupd" "Firmware update daemon" "$(_state fwupd)" \ + "gnome-disk-utility" "Disk management GUI" "$(_state gnome-disk-utility)" \ + "gparted" "Partition editor" "$(_state gparted)" \ + "htop" "Interactive process viewer" "$(_state htop)" \ + "inxi" "System information tool" "$(_state inxi)" \ + "kvm" "QEMU/KVM virtualization" "$(_state virt-manager)" \ + "lshw" "List hardware details" "$(_state lshw)" \ + "mc" "Midnight Commander" "$(_state mc)" \ + "nvme-cli" "NVMe SSD health monitoring" "$(_state nvme-cli)" \ + "ncdu" "Disk usage analyzer" "$(_state ncdu)" \ + "psensor" "Temperature monitor" "$(_state psensor)" \ + "timeshift" "System restore snapshots" "$(_state timeshift)" \ + "tmux" "Terminal multiplexer" "$(_state tmux)" \ + "wine" "Windows compatibility layer" "$(_state wine)" \ ) clear [ -z "$choices" ] && return @@ -499,13 +524,14 @@ _cat_general_bullseye() { _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)" + "neofetch" "System info fetcher" "$(_state neofetch)" + "screenfetch" "System info (BSD/Linux)" "$(_state screenfetch)" + "linuxlogo" "Linux logo + system info" "$(_state linuxlogo)" ) - local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6)) + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Fetch Tools (Bullseye)" "Select system info tools:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \ + choices=$(_checklist "Fetch Tools (Bullseye)" "Select system info tools:" $TUI_ALTO $TUI_ANCHO $lista_alto \ "${items[@]}" ) clear [ -z "$choices" ] && return @@ -570,8 +596,8 @@ install_extras_bullseye() { _cat_software_centers_bullseye() { local sc_choice sc_choice=$(_menu "Software Centers" "Choose a software store to install:" 12 65 2 \ - "gnome-software" "Software Center for GNOME$(_inst gnome-software)" \ - "plasma-discover" "Software manager for Plasma$(_inst plasma-discover)" \ + "gnome-software" "Software Center for GNOME" \ + "plasma-discover" "Software manager for Plasma" \ ) [ -z "$sc_choice" ] && return diff --git a/modules/desktop_display.sh b/modules/desktop_display.sh new file mode 100644 index 0000000..de3eff4 --- /dev/null +++ b/modules/desktop_display.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash + +manage_desktop_display() { + while true; do + local choice + choice=$(_menu "Desktop & Display" \ + "Select an option:" $TUI_ALTO $TUI_ANCHO 6 \ + "1" "Desktop Environment" \ + "2" "Display Manager" \ + "3" "Back to main menu") + [ -z "$choice" ] && break + clear + case "$choice" in + 1) _msg "Coming Soon" "Desktop Environment management will be available in a future update." 10 60 ;; + 2) display_manager_menu ;; + 3) break ;; + esac + done +} + +display_manager_menu() { + while true; do + local choice + choice=$(_menu "Display Manager" \ + "Select an option:" $TUI_ALTO $TUI_ANCHO 6 \ + "1" "LightDM" \ + "2" "Back") + [ -z "$choice" ] && break + clear + case "$choice" in + 1) lightdm_config_menu ;; + 2) break ;; + esac + done +} + +lightdm_config_menu() { + local -a items=() + items+=("install_lightdm" "Install LightDM & GTK Greeter" "$(_state lightdm)") + items+=("enable_userlist" "Enable user list" "OFF") + local choices + choices=$(_checklist "LightDM Configuration" \ + "Select options to apply:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + "${items[@]}") + if [ -z "$choices" ]; then + echo "No changes." + _pause + return + fi + local cleaned + cleaned=$(echo "$choices" | tr -d '"') + for item in $cleaned; do + case $item in + install_lightdm) + if is_installed lightdm; then + echo -e "${GREEN}LightDM is already installed.${NC}" + else + _run_cmd "LightDM" "sudo apt install -y lightdm lightdm-gtk-greeter-settings" "Installing LightDM..." + fi + ;; + enable_userlist) + local conf="/etc/lightdm/lightdm.conf.d/50-debianito-userlist.conf" + if echo "[Seat:*] +greeter-hide-users=false" | sudo tee "$conf" > /dev/null; then + echo -e "${GREEN}User list enabled in LightDM.${NC}" + else + echo -e "${RED}Failed to write configuration.${NC}" + fi + ;; + esac + done + _pause +} diff --git a/modules/extras/design/design.sh b/modules/extras/design/design.sh index 5f171ce..f2d550c 100644 --- a/modules/extras/design/design.sh +++ b/modules/extras/design/design.sh @@ -19,26 +19,28 @@ _cat_design() { local scribus_state; scribus_state=$(_state "scribus") local shotcut_state; shotcut_state=$(_state "shotcut") items+=( - "audacity" "Audio editor/recorder$(_inst audacity)" "$audacity_state" - "ardour" "Digital audio workstation$(_inst ardour)" "$ardour_state" - "blender" "3D modeling/animation suite$(_inst blender)" "$blender_state" - "gimp" "Image editor (Photoshop alternative)$(_inst gimp)" "$gimp_state" - "handbrake" "Video transcoder (DVD ripper)$(_inst handbrake)" "$handbrake_state" - "inkscape" "Vector graphics editor$(_inst inkscape)" "$inkscape_state" - "kdenlive" "Video editor (KDE)$(_inst kdenlive)" "$kdenlive_state" - "krita" "Digital painting/illustration$(_inst krita)" "$krita_state" - "obs-studio" "Screen recording/streaming$(_inst obs-studio)" "$obs_state" - "openshot-qt" "Video editor (simple)$(_inst openshot-qt)" "$openshot_state" - "scribus" "Desktop publishing (DTP)$(_inst scribus)" "$scribus_state" - "shotcut" "Video editor (cross-platform)$(_inst shotcut)" "$shotcut_state" + "audacity" "Audio editor/recorder" "$audacity_state" + "ardour" "Digital audio workstation" "$ardour_state" + "blender" "3D modeling/animation" "$blender_state" + "gimp" "Image editor" "$gimp_state" + "handbrake" "Video transcoder" "$handbrake_state" + "inkscape" "Vector graphics editor" "$inkscape_state" + "kdenlive" "Video editor (KDE)" "$kdenlive_state" + "krita" "Digital painting" "$krita_state" + "obs-studio" "Screen recording" "$obs_state" + "openshot-qt" "Simple video editor" "$openshot_state" + "scribus" "Desktop publishing" "$scribus_state" + "shotcut" "Cross-platform video editor" "$shotcut_state" ) fi local ffmpeg_state; ffmpeg_state=$(_state "ffmpeg") - items+=("ffmpeg" "Multimedia framework (CLI)$(_inst ffmpeg)" "$ffmpeg_state") + items+=("ffmpeg" "Multimedia framework (CLI)" "$ffmpeg_state") + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices choices=$(_checklist "Multimedia & Design" "Select multimedia and design tools${SCROLL_HINT}:" \ - $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA "${items[@]}") + $TUI_ALTO $TUI_ANCHO $lista_alto "${items[@]}") clear [ -z "$choices" ] && return diff --git a/modules/extras/dev/dev.sh b/modules/extras/dev/dev.sh index af29ae1..5275f31 100644 --- a/modules/extras/dev/dev.sh +++ b/modules/extras/dev/dev.sh @@ -21,26 +21,27 @@ _cat_dev() { local jdk_desc; jdk_desc=$(_any_jdk_installed_desc) local jdk_state; jdk_state=$(_any_jdk_state) items+=( - "apache2" "Apache web server$(_inst apache2)" "$apache_state" - "build-essential" "C/C++ build tools (gcc, make)$(_inst build-essential)" "$build_state" - "certbot" "Let's Encrypt TLS certificates$(_inst certbot)" "$certbot_state" - "docker" "Docker + docker-compose$(_inst docker.io)" "$docker_state" - "mariadb-server" "MariaDB database server$(_inst mariadb-server)" "$mariadb_state" - "netcat-openbsd" "TCP/IP networking utility$(_inst netcat-openbsd)" "$netcat_state" - "nginx" "Nginx web server$(_inst nginx)" "$nginx_state" - "openssh-server" "SSH server$(_inst openssh-server)" "$ssh_state" - "openssl" "OpenSSL cryptography toolkit$(_inst openssl)" "$openssl_state" - "postgresql" "PostgreSQL database server$(_inst postgresql)" "$pg_state" - "python3-pip" "Python 3 pip + venv + dev$(_inst python3-pip)" "$pip_state" - "redis-server" "Redis key-value store$(_inst redis-server)" "$redis_state" - "sqlite3" "SQLite database engine$(_inst sqlite3)" "$sqlite_state" - "jellyfin" "Jellyfin Media Server (Web GUI on port 8096)$(_inst jellyfin)" OFF + "apache2" "Apache web server" "$apache_state" + "build-essential" "C/C++ build tools (gcc, make)" "$build_state" + "certbot" "Let's Encrypt TLS certificates" "$certbot_state" + "docker" "Docker + docker-compose" "$docker_state" + "mariadb-server" "MariaDB database server" "$mariadb_state" + "netcat-openbsd" "TCP/IP networking utility" "$netcat_state" + "nginx" "Nginx web server" "$nginx_state" + "openssh-server" "SSH server" "$ssh_state" + "openssl" "OpenSSL cryptography toolkit" "$openssl_state" + "postgresql" "PostgreSQL database server" "$pg_state" + "python3-pip" "Python 3 pip + venv + dev" "$pip_state" + "redis-server" "Redis key-value store" "$redis_state" + "sqlite3" "SQLite database engine" "$sqlite_state" + "jellyfin" "Jellyfin Media Server (Web GUI on port 8096)" OFF "openjdk-dev-env" "Adoptium Temurin JDK (17, 21, 25 LTS)${jdk_desc}" "${jdk_state}" ) - local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6)) + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Development & Servers" "Select development tools and servers${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \ + choices=$(_checklist "Development & Servers" "Select development tools and servers${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ "${items[@]}" \ ) clear diff --git a/modules/extras/download/download.sh b/modules/extras/download/download.sh index 05bcb38..224b586 100644 --- a/modules/extras/download/download.sh +++ b/modules/extras/download/download.sh @@ -13,14 +13,14 @@ _cat_download() { local qbitnox_state; qbitnox_state=$(_state "qbittorrent-nox") local tr_cli_state; tr_cli_state=$(_state "transmission-cli") items1+=( - "aria2" "Multiprotocol downloader (CLI)$(_inst aria2)" "$aria2_state" - "yt-dlp" "Video downloader CLI$(_inst yt-dlp)" "$ytdlp_state" + "aria2" "Multiprotocol downloader (CLI)" "$aria2_state" + "yt-dlp" "Video downloader CLI" "$ytdlp_state" ) items2+=( - "deluged" "BitTorrent daemon/server$(_inst deluged)" "$deluged_state" - "mktorrent" "Torrent metainfo creator (CLI)$(_inst mktorrent)" "$mktorrent_state" - "qbittorrent-nox" "BitTorrent WebUI/CLI$(_inst qbittorrent-nox)" "$qbitnox_state" - "transmission-cli" "BitTorrent client (CLI)$(_inst transmission-cli)" "$tr_cli_state" + "deluged" "BitTorrent daemon/server" "$deluged_state" + "mktorrent" "Torrent metainfo creator (CLI)" "$mktorrent_state" + "qbittorrent-nox" "BitTorrent WebUI/CLI" "$qbitnox_state" + "transmission-cli" "BitTorrent client (CLI)" "$tr_cli_state" ) if ! $headless; then local filezilla_state; filezilla_state=$(_state "filezilla") @@ -30,26 +30,29 @@ _cat_download() { local tr_gtk_state; tr_gtk_state=$(_state "transmission-gtk") local tr_qt_state; tr_qt_state=$(_state "transmission-qt") items1+=( - "filezilla" "FTP/SFTP client (GUI)$(_inst filezilla)" "$filezilla_state" - "youtubedl-gui" "GUI for yt-dlp$(_inst youtubedl-gui)" "$ytdlp_gui_state" + "filezilla" "FTP/SFTP client (GUI)" "$filezilla_state" + "youtubedl-gui" "GUI for yt-dlp" "$ytdlp_gui_state" ) items2+=( - "deluge" "BitTorrent client (GTK)$(_inst deluge)" "$deluge_state" - "qbittorrent" "BitTorrent client (Qt)$(_inst qbittorrent)" "$qbit_state" - "transmission-gtk" "BitTorrent client (GTK)$(_inst transmission-gtk)" "$tr_gtk_state" - "transmission-qt" "BitTorrent client (Qt)$(_inst transmission-qt)" "$tr_qt_state" + "deluge" "BitTorrent client (GTK)" "$deluge_state" + "qbittorrent" "BitTorrent client (Qt)" "$qbit_state" + "transmission-gtk" "BitTorrent client (GTK)" "$tr_gtk_state" + "transmission-qt" "BitTorrent client (Qt)" "$tr_qt_state" ) fi - local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6)) + local item_count1=${#items1[@]} + local lista_alto1=$((item_count1 > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count1)) local choices1 choices2="" - choices1=$(_checklist "Downloaders" "Select download tools:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \ + choices1=$(_checklist "Downloaders" "Select download tools:" $TUI_ALTO $TUI_ANCHO $lista_alto1 \ "${items1[@]}" \ ) clear - choices2=$(_checklist "Torrent Clients" "Select torrent clients:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + local item_count2=${#items2[@]} + local lista_alto2=$((item_count2 > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count2)) + choices2=$(_checklist "Torrent Clients" "Select torrent clients:" $TUI_ALTO $TUI_ANCHO $lista_alto2 \ "${items2[@]}" \ ) clear diff --git a/modules/extras/fetch/fetch.sh b/modules/extras/fetch/fetch.sh index b1f0ee1..0edf132 100644 --- a/modules/extras/fetch/fetch.sh +++ b/modules/extras/fetch/fetch.sh @@ -21,23 +21,24 @@ _cat_fetch() { local -a items=() if [ "$fetch_pkg" = "fastfetch" ]; then - items+=("fastfetch" "System info fetcher$(_inst fastfetch)" "$fetch_state") + items+=("fastfetch" "System info fetcher" "$fetch_state") if [ "$DEBIAN_CODENAME" = "trixie" ]; then - items+=("hyfetch" "Neofetch with pride flags$(_inst hyfetch)" "$hyfetch_state") + items+=("hyfetch" "Neofetch with pride flags" "$hyfetch_state") fi fi - items+=("linuxlogo" "Linux logo + system info$(_inst linuxlogo)" "$linuxlogo_state") + items+=("linuxlogo" "Linux logo + system info" "$linuxlogo_state") if [ "$fetch_pkg" = "neofetch" ]; then - items+=("neofetch" "System info fetcher$(_inst neofetch)" "$fetch_state") + items+=("neofetch" "System info fetcher" "$fetch_state") if [ "$DEBIAN_CODENAME" = "trixie" ]; then - items+=("hyfetch" "Neofetch with pride flags$(_inst hyfetch)" "$hyfetch_state") + items+=("hyfetch" "Neofetch with pride flags" "$hyfetch_state") fi fi - items+=("screenfetch" "System info (BSD/Linux)$(_inst screenfetch)" "$screenfetch_state") + items+=("screenfetch" "System info (BSD/Linux)" "$screenfetch_state") - local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6)) + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Fetch Tools" "Select system info tools:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \ + choices=$(_checklist "Fetch Tools" "Select system info tools:" $TUI_ALTO $TUI_ANCHO $lista_alto \ "${items[@]}" \ ) clear diff --git a/modules/extras/internet/internet.sh b/modules/extras/internet/internet.sh index 45d09a0..0e4f43d 100644 --- a/modules/extras/internet/internet.sh +++ b/modules/extras/internet/internet.sh @@ -140,22 +140,22 @@ _cat_internet() { local mullvadbrowser_state; mullvadbrowser_state=$(_state "mullvad-browser") local protonvpn_state; protonvpn_state=$(_state "protonvpn") items+=( - "chromium" "Chromium web browser$(_inst chromium)" "$chromium_state" - "dillo" "Lightweight graphical browser$(_inst dillo)" "$dillo_state" - "epiphany-browser" "GNOME web browser$(_inst epiphany-browser)" "$epiphany_state" - "falkon" "KDE web browser (QtWebEngine)$(_inst falkon)" "$falkon_state" + "chromium" "Chromium web browser" "$chromium_state" + "dillo" "Lightweight graphical browser" "$dillo_state" + "epiphany-browser" "GNOME web browser" "$epiphany_state" + "falkon" "KDE web browser (QtWebEngine)" "$falkon_state" "firefox" "Firefox from Mozilla (replaces ESR)" "$firefox_state" "firefox-esr" "Firefox ESR (official Debian + locale auto)" "$firefox_esr_state" - "floorp" "Firefox-based browser (extrepo)$(_inst floorp)" "$floorp_state" - "konqueror" "KDE file manager / web browser$(_inst konqueror)" "$konqueror_state" - "librewolf" "Privacy-focused Firefox fork (extrepo)$(_inst librewolf)" "$librewolf_state" + "floorp" "Firefox-based browser (extrepo)" "$floorp_state" + "konqueror" "KDE file manager / web browser" "$konqueror_state" + "librewolf" "Privacy-focused Firefox fork (extrepo)" "$librewolf_state" "palemoon" "Classic Firefox-derived browser (extrepo)" "$palemoon_state" - "privacybrowser" "Privacy-focused web browser$(_inst privacybrowser)" "$privacybrowser_state" - "qutebrowser" "Keyboard-driven browser (Qt)$(_inst qutebrowser)" "$qutebrowser_state" - "thunderbird" "Email client$(_inst thunderbird)" "$thunderbird_state" - "torbrowser-launcher" "Tor Browser launcher$(_inst torbrowser-launcher)" "$torbrowser_state" - "mullvad-browser" "Mullvad privacy browser$(_inst mullvad-browser)" "$mullvadbrowser_state" - "protonvpn" "ProtonVPN client$(_inst protonvpn)" "$protonvpn_state" + "privacybrowser" "Privacy-focused web browser" "$privacybrowser_state" + "qutebrowser" "Keyboard-driven browser (Qt)" "$qutebrowser_state" + "thunderbird" "Email client" "$thunderbird_state" + "torbrowser-launcher" "Tor Browser launcher" "$torbrowser_state" + "mullvad-browser" "Mullvad privacy browser" "$mullvadbrowser_state" + "protonvpn" "ProtonVPN client" "$protonvpn_state" ) fi local elinks_state; elinks_state=$(_state "elinks") @@ -164,15 +164,17 @@ _cat_internet() { local tailscale_state; tailscale_state=$(_state "tailscale") local mullvad_state; mullvad_state=$(_state "mullvad-vpn") items+=( - "elinks" "Text-mode web browser$(_inst elinks)" "$elinks_state" - "riseup-vpn" "Riseup VPN client$(_inst riseup-vpn)" "$riseupvpn_state" - "w3m" "Text-mode browser + deps (w3m-img)$(_inst w3m)" "$w3m_state" - "tailscale" "Zero-config VPN & mesh networking$(_inst tailscale)" "$tailscale_state" - "mullvad-vpn" "Mullvad VPN client (WireGuard)$(_inst mullvad-vpn)" "$mullvad_state" + "elinks" "Text-mode web browser" "$elinks_state" + "riseup-vpn" "Riseup VPN client" "$riseupvpn_state" + "w3m" "Text-mode browser + deps (w3m-img)" "$w3m_state" + "tailscale" "Zero-config VPN & mesh networking" "$tailscale_state" + "mullvad-vpn" "Mullvad VPN client (WireGuard)" "$mullvad_state" ) + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Internet" "Select browsers, email, and VPN tools${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + choices=$(_checklist "Internet" "Select browsers, email, and VPN tools${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ "${items[@]}" \ ) clear diff --git a/modules/extras/office/office.sh b/modules/extras/office/office.sh index 40a982f..ab92b48 100644 --- a/modules/extras/office/office.sh +++ b/modules/extras/office/office.sh @@ -70,8 +70,10 @@ _cat_office() { ) fi + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Office & Productivity" "Select office applications${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + choices=$(_checklist "Office & Productivity" "Select office applications${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ "${items[@]}" \ ) diff --git a/modules/extras/players/players.sh b/modules/extras/players/players.sh index bc44dce..cd57575 100644 --- a/modules/extras/players/players.sh +++ b/modules/extras/players/players.sh @@ -9,14 +9,15 @@ _cat_players() { local mpv_state; mpv_state=$(_state "mpv") local vlc_state; vlc_state=$(_state "vlc") items+=( - "mpv" "Lightweight media player$(_inst mpv)" "$mpv_state" - "vlc" "VLC media player$(_inst vlc)" "$vlc_state" + "mpv" "Lightweight media player" "$mpv_state" + "vlc" "VLC media player" "$vlc_state" ) fi - local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6)) + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Media Players" "Select media players:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \ + choices=$(_checklist "Media Players" "Select media players:" $TUI_ALTO $TUI_ANCHO $lista_alto \ "${items[@]}" \ ) clear diff --git a/modules/extras/programming/programming.sh b/modules/extras/programming/programming.sh index 74447ab..801d68b 100644 --- a/modules/extras/programming/programming.sh +++ b/modules/extras/programming/programming.sh @@ -11,11 +11,11 @@ _cat_programming() { local nano_state; nano_state=$(_state "nano") local emacs_state; emacs_state=$(_state "emacs") items+=( - "vim" "Classic terminal editor$(_inst vim)" "$vim_state" - "neovim" "Modern vim fork$(_inst neovim)" "$neovim_state" - "hx" "Helix modal editor (Rust)$(_inst hx)" "$hx_state" - "nano" "Simple terminal editor$(_inst nano)" "$nano_state" - "emacs" "Extensible editor / IDE$(_inst emacs)" "$emacs_state" + "vim" "Classic terminal editor" "$vim_state" + "neovim" "Modern vim fork" "$neovim_state" + "hx" "Helix modal editor (Rust)" "$hx_state" + "nano" "Simple terminal editor" "$nano_state" + "emacs" "Extensible editor / IDE" "$emacs_state" ) if ! $headless; then local vimgtk_state; vimgtk_state=$(_state "vim-gtk3") @@ -29,19 +29,20 @@ _cat_programming() { codium_state="ON" fi items+=( - "vim-gtk3" "Vim with GTK3 GUI$(_inst vim-gtk3)" "$vimgtk_state" - "kate" "KDE advanced text editor$(_inst kate)" "$kate_state" - "mousepad" "Xfce text editor$(_inst mousepad)" "$mousepad_state" - "gedit" "GNOME text editor$(_inst gedit)" "$gedit_state" - "geany" "Lightweight IDE$(_inst geany)" "$geany_state" - "gnome-text-editor" "GNOME modern text editor$(_inst gnome-text-editor)" "$gte_state" - "vscodium" "VS Code open-source (extrepo)$(_inst codium)" "$codium_state" + "vim-gtk3" "Vim with GTK3 GUI" "$vimgtk_state" + "kate" "KDE advanced text editor" "$kate_state" + "mousepad" "Xfce text editor" "$mousepad_state" + "gedit" "GNOME text editor" "$gedit_state" + "geany" "Lightweight IDE" "$geany_state" + "gnome-text-editor" "GNOME modern text editor" "$gte_state" + "vscodium" "VS Code open-source (extrepo)" "$codium_state" ) fi - local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6)) + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Programming Applications" "Select editors and IDEs${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \ + choices=$(_checklist "Programming Applications" "Select editors and IDEs${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ "${items[@]}" \ ) clear diff --git a/modules/extras/security/security.sh b/modules/extras/security/security.sh index 41c1130..da6da54 100644 --- a/modules/extras/security/security.sh +++ b/modules/extras/security/security.sh @@ -9,8 +9,8 @@ _cat_security() { local wireshark_state; wireshark_state=$(_state "wireshark") local zenmap_state; zenmap_state=$(_state "zenmap") items+=( - "wireshark" "Network protocol analyzer (GUI)$(_inst wireshark)" "$wireshark_state" - "zenmap" "Network scanner GUI (Nmap frontend)$(_inst zenmap)" "$zenmap_state" + "wireshark" "Network protocol analyzer (GUI)" "$wireshark_state" + "zenmap" "Network scanner GUI (Nmap frontend)" "$zenmap_state" ) fi local tcpdump_state; tcpdump_state=$(_state "tcpdump") @@ -18,15 +18,16 @@ _cat_security() { local ufw_state; ufw_state=$(_state "ufw") local clamav_state; clamav_state=$(_state "clamav") items+=( - "tcpdump" "Command-line packet analyzer$(_inst tcpdump)" "$tcpdump_state" - "fail2ban" "Brute-force protection daemon$(_inst fail2ban)" "$fail2ban_state" - "ufw" "Uncomplicated firewall$(_inst ufw)" "$ufw_state" - "clamav" "Antivirus engine (ClamAV)$(_inst clamav)" "$clamav_state" + "tcpdump" "Command-line packet analyzer" "$tcpdump_state" + "fail2ban" "Brute-force protection daemon" "$fail2ban_state" + "ufw" "Uncomplicated firewall" "$ufw_state" + "clamav" "Antivirus engine (ClamAV)" "$clamav_state" ) - local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6)) + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Security & Networking" "Select security and networking tools${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \ + choices=$(_checklist "Security & Networking" "Select security and networking tools${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ "${items[@]}" \ ) clear diff --git a/modules/extras/system/software_centers.sh b/modules/extras/system/software_centers.sh index 3048564..7217c88 100644 --- a/modules/extras/system/software_centers.sh +++ b/modules/extras/system/software_centers.sh @@ -11,8 +11,8 @@ _cat_software_centers() { de_type=$(_detect_desktop_type) local sc_choice sc_choice=$(_menu "Software Centers" "Choose a software store to install:" 12 65 2 \ - "gnome-software" "Software Center for GNOME$(_inst gnome-software)" \ - "plasma-discover" "Software manager for Plasma$(_inst plasma-discover)" \ + "gnome-software" "Software Center for GNOME" \ + "plasma-discover" "Software manager for Plasma" \ ) [ -z "$sc_choice" ] && return diff --git a/modules/extras/system/system.sh b/modules/extras/system/system.sh index 11bf8c6..9ad6bda 100644 --- a/modules/extras/system/system.sh +++ b/modules/extras/system/system.sh @@ -49,24 +49,24 @@ _cat_general() { local wine_state; wine_state=$(_state "wine") local nvme_state; nvme_state=$(_state "nvme-cli") items+=( - "btop" "Resource monitor (fancy top)$(_inst btop)" "$btop_state" - "compress" "Compression tools (zip, unrar, 7z)$(_inst zip)" "$compress_state" - "cpufetch" "CPU info fetcher$(_inst cpufetch)" "$cpufetch_state" - "cpu-x" "CPU-X (alternative to CPU-Z)$(_inst cpu-x)" "$cpu_x_state" - "curl-wget" "HTTP transfer tools (curl, wget)$(_inst curl)" "$curl_wget_state" - "extrepo" "External repository manager$(_inst extrepo)" "$extrepo_state" - "flatpak" "Flatpak sandbox + Flathub$(_inst flatpak)" "$flatpak_state" - "fwupd" "Firmware update daemon$(_inst fwupd)" "$fwupd_state" - "htop" "Interactive process viewer$(_inst htop)" "$htop_state" - "inxi" "System information tool$(_inst inxi)" "$inxi_state" - "kvm" "QEMU/KVM virtualization$(_inst virt-manager)" "$kvm_state" - "lshw" "List hardware details$(_inst lshw)" "$lshw_state" - "mc" "Midnight Commander (file manager)$(_inst mc)" "$mc_state" - "nala" "APT frontend (parallel downloads)$(_inst nala)" "$nala_state" - "ncdu" "Disk usage analyzer (ncurses)$(_inst ncdu)" "$ncdu_state" - "nvme-cli" "NVMe SSD health monitoring$(_inst nvme-cli)" "$nvme_state" - "tmux" "Terminal multiplexer$(_inst tmux)" "$tmux_state" - "wine" "Windows compatibility layer$(_inst wine)" "$wine_state" + "btop" "Resource monitor (fancy top)" "$btop_state" + "compress" "Compression tools (zip, unrar, 7z)" "$compress_state" + "cpufetch" "CPU info fetcher" "$cpufetch_state" + "cpu-x" "CPU-X (alternative to CPU-Z)" "$cpu_x_state" + "curl-wget" "HTTP transfer tools (curl, wget)" "$curl_wget_state" + "extrepo" "External repository manager" "$extrepo_state" + "flatpak" "Flatpak sandbox + Flathub" "$flatpak_state" + "fwupd" "Firmware update daemon" "$fwupd_state" + "htop" "Interactive process viewer" "$htop_state" + "inxi" "System information tool" "$inxi_state" + "kvm" "QEMU/KVM virtualization" "$kvm_state" + "lshw" "List hardware details" "$lshw_state" + "mc" "Midnight Commander (file manager)" "$mc_state" + "nala" "APT frontend (parallel downloads)" "$nala_state" + "ncdu" "Disk usage analyzer (ncurses)" "$ncdu_state" + "nvme-cli" "NVMe SSD health monitoring" "$nvme_state" + "tmux" "Terminal multiplexer" "$tmux_state" + "wine" "Windows compatibility layer" "$wine_state" ) if ! $headless; then local alacritty_state; alacritty_state=$(_state "alacritty") @@ -81,23 +81,24 @@ _cat_general() { local psensor_state; psensor_state=$(_state "psensor") local timeshift_state; timeshift_state=$(_state "timeshift") items+=( - "alacritty" "GPU-accelerated terminal$(_inst alacritty)" "$alacritty_state" - "conky" "System monitor for desktop$(_inst conky)" "$conky_state" - "corectrl" "AMD GPU control (CoreCtrl)$(_inst corectrl)" "$corectrl_state" - "doublecmd-gtk" "Dual-panel file manager (GTK)$(_inst doublecmd-gtk)" "$dcgtk_state" - "doublecmd-qt" "Dual-panel file manager (Qt)$(_inst doublecmd-qt)" "$dcqt_state" - "gnome-disk-utility" "Disk management GUI$(_inst gnome-disk-utility)" "$disks_state" - "gparted" "GNOME partition editor$(_inst gparted)" "$gparted_state" - "hardinfo" "Graphical system profiler$(_inst hardinfo)" "$hardinfo_state" - "kitty" "GPU-based terminal emulator$(_inst kitty)" "$kitty_state" - "psensor" "Hardware temperature monitor$(_inst psensor)" "$psensor_state" - "timeshift" "System restore snapshots$(_inst timeshift)" "$timeshift_state" + "alacritty" "GPU-accelerated terminal" "$alacritty_state" + "conky" "System monitor for desktop" "$conky_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" ) fi - local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6)) + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "System Tools" "Select system utilities to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \ + choices=$(_checklist "System Tools" "Select system utilities to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ "${items[@]}" \ ) clear diff --git a/modules/extras/themes/cursors/cursors.sh b/modules/extras/themes/cursors/cursors.sh index 94d9a22..b10cc0e 100644 --- a/modules/extras/themes/cursors/cursors.sh +++ b/modules/extras/themes/cursors/cursors.sh @@ -13,17 +13,19 @@ _cat_cursors() { local xcursor_state; xcursor_state=$(_state "xcursor-themes") local oxygen_state; oxygen_state=$(_state "oxygencursors") items+=( - "bibata-cursor-theme" "Bibata cursors$(_inst bibata-cursor-theme)" "$bibata_state" - "breeze-cursor-theme" "Breeze cursors (KDE)$(_inst breeze-cursor-theme)" "$breeze_state" - "chameleon-cursor-theme" "Chameleon cursors$(_inst chameleon-cursor-theme)" "$chameleon_state" - "dmz-cursor-theme" "DMZ cursors$(_inst dmz-cursor-theme)" "$dmz_state" - "xcursor-themes" "X11 base cursors$(_inst xcursor-themes)" "$xcursor_state" - "oxygencursors" "Oxygen cursors (KDE legacy)$(_inst oxygencursors)" "$oxygen_state" + "bibata-cursor-theme" "Bibata cursors" "$bibata_state" + "breeze-cursor-theme" "Breeze cursors (KDE)" "$breeze_state" + "chameleon-cursor-theme" "Chameleon cursors" "$chameleon_state" + "dmz-cursor-theme" "DMZ cursors" "$dmz_state" + "xcursor-themes" "X11 base cursors" "$xcursor_state" + "oxygencursors" "Oxygen cursors (KDE legacy)" "$oxygen_state" ) fi + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Cursor Themes" "Select cursor themes to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + choices=$(_checklist "Cursor Themes" "Select cursor themes to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ "${items[@]}" \ ) clear diff --git a/modules/extras/themes/desktop-themes/desktop-themes.sh b/modules/extras/themes/desktop-themes/desktop-themes.sh index c4496c4..794a388 100644 --- a/modules/extras/themes/desktop-themes/desktop-themes.sh +++ b/modules/extras/themes/desktop-themes/desktop-themes.sh @@ -14,18 +14,20 @@ _cat_themes() { local numix_gtk_state; numix_gtk_state=$(_state "numix-gtk-theme") local orchis_state; orchis_state=$(_state "orchis-gtk-theme") items+=( - "arc-theme" "Arc GTK theme$(_inst arc-theme)" "$arc_state" - "blackbird-gtk-theme" "Blackbird GTK theme$(_inst blackbird-gtk-theme)" "$blackbird_state" - "bluebird-gtk-theme" "Bluebird GTK theme$(_inst bluebird-gtk-theme)" "$bluebird_state" - "breeze-gtk-theme" "Breeze GTK theme (KDE port)$(_inst breeze-gtk-theme)" "$breeze_gtk_state" - "greybird-gtk-theme" "Greybird GTK theme$(_inst greybird-gtk-theme)" "$greybird_state" - "numix-gtk-theme" "Numix GTK theme$(_inst numix-gtk-theme)" "$numix_gtk_state" - "orchis-gtk-theme" "Orchis GTK theme$(_inst orchis-gtk-theme)" "$orchis_state" + "arc-theme" "Arc GTK theme" "$arc_state" + "blackbird-gtk-theme" "Blackbird GTK theme" "$blackbird_state" + "bluebird-gtk-theme" "Bluebird GTK theme" "$bluebird_state" + "breeze-gtk-theme" "Breeze GTK theme (KDE port)" "$breeze_gtk_state" + "greybird-gtk-theme" "Greybird GTK theme" "$greybird_state" + "numix-gtk-theme" "Numix GTK theme" "$numix_gtk_state" + "orchis-gtk-theme" "Orchis GTK theme" "$orchis_state" ) fi + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Desktop Themes (GTK/KDE)" "Select desktop themes to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + choices=$(_checklist "Desktop Themes (GTK/KDE)" "Select desktop themes to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ "${items[@]}" \ ) clear diff --git a/modules/extras/themes/fonts/fonts.sh b/modules/extras/themes/fonts/fonts.sh index 421675f..498c9af 100644 --- a/modules/extras/themes/fonts/fonts.sh +++ b/modules/extras/themes/fonts/fonts.sh @@ -15,19 +15,21 @@ _cat_fonts() { local ubuntu_state; ubuntu_state=$(_state "fonts-ubuntu") local recommended_state; recommended_state=$(_state "fonts-recommended") items+=( - "fonts-bebas-neue" "Bebas Neue (display)$(_inst fonts-bebas-neue)" "$bebas_state" - "fonts-anonymous-pro" "Anonymous Pro (monospace)$(_inst fonts-anonymous-pro)" "$anon_state" - "fonts-adf-verana" "ADF Verana (sans-serif)$(_inst fonts-adf-verana)" "$verana_state" - "fonts-3270" "IBM 3270 terminal font$(_inst fonts-3270)" "$f3270_state" - "fonts-liberation" "Liberation (MS-compatible)$(_inst fonts-liberation)" "$liberation_state" - "ttf-mscorefonts-installer" "Microsoft fonts (EULA required)$(_inst ttf-mscorefonts-installer)" "$mscore_state" - "fonts-ubuntu" "Ubuntu font family$(_inst fonts-ubuntu)" "$ubuntu_state" - "fonts-recommended" "Debian recommended fonts$(_inst fonts-recommended)" "$recommended_state" + "fonts-bebas-neue" "Bebas Neue (display)" "$bebas_state" + "fonts-anonymous-pro" "Anonymous Pro (monospace)" "$anon_state" + "fonts-adf-verana" "ADF Verana (sans-serif)" "$verana_state" + "fonts-3270" "IBM 3270 terminal font" "$f3270_state" + "fonts-liberation" "Liberation (MS-compatible)" "$liberation_state" + "ttf-mscorefonts-installer" "Microsoft fonts (EULA required)" "$mscore_state" + "fonts-ubuntu" "Ubuntu font family" "$ubuntu_state" + "fonts-recommended" "Debian recommended fonts" "$recommended_state" ) fi + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Fonts" "Select fonts to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + choices=$(_checklist "Fonts" "Select fonts to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ "${items[@]}" \ ) clear diff --git a/modules/extras/themes/icons/icons.sh b/modules/extras/themes/icons/icons.sh index b6aa67b..65b66dc 100644 --- a/modules/extras/themes/icons/icons.sh +++ b/modules/extras/themes/icons/icons.sh @@ -24,25 +24,27 @@ _cat_icons() { fi items=( - "breeze-icon-theme" "Breeze icon theme$(_inst breeze-icon-theme)" "$breeze_state" - "deepin-icon-theme" "Deepin icon theme$(_inst deepin-icon-theme)" "$deepin_state" - "elementary-icon-theme" "Elementary icon theme$(_inst elementary-icon-theme)" "$ele_state" - "elementary-xfce-icon-theme" "Elementary Xfce icons$(_inst elementary-xfce-icon-theme)" "$ele_xfce_state" - "moka-icon-theme" "Moka icon theme$(_inst moka-icon-theme)" "$moka_state" - "numix-icon-theme" "Numix icon theme$(_inst numix-icon-theme)" "$numix_state" - "numix-icon-theme-circle" "Numix Circle icon theme$(_inst numix-icon-theme-circle)" "$numix_c_state" - "obsidian-icon-theme" "Obsidian icon theme$(_inst obsidian-icon-theme)" "$obsidian_state" - "papirus-icon-theme" "Papirus icon theme$(_inst papirus-icon-theme)" "$papirus_state" - "paper-icon-theme" "Paper icon theme$(_inst paper-icon-theme)" "$paper_state" - "suru-icon-theme" "Suru icon theme$(_inst suru-icon-theme)" "$suru_state" + "breeze-icon-theme" "Breeze icon theme" "$breeze_state" + "deepin-icon-theme" "Deepin icon theme" "$deepin_state" + "elementary-icon-theme" "Elementary icon theme" "$ele_state" + "elementary-xfce-icon-theme" "Elementary Xfce icons" "$ele_xfce_state" + "moka-icon-theme" "Moka icon theme" "$moka_state" + "numix-icon-theme" "Numix icon theme" "$numix_state" + "numix-icon-theme-circle" "Numix Circle icon theme" "$numix_c_state" + "obsidian-icon-theme" "Obsidian icon theme" "$obsidian_state" + "papirus-icon-theme" "Papirus icon theme" "$papirus_state" + "paper-icon-theme" "Paper icon theme" "$paper_state" + "suru-icon-theme" "Suru icon theme" "$suru_state" ) if [ "$DEBIAN_CODENAME" = "trixie" ]; then - items+=("kf6-breeze-icon-theme" "KF6 Breeze icon theme$(_inst kf6-breeze-icon-theme)" "$kf6_state") + items+=("kf6-breeze-icon-theme" "KF6 Breeze icon theme" "$kf6_state") fi fi + local item_count=${#items[@]} + local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count)) local choices - choices=$(_checklist "Icon Themes" "Select icon themes to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ + choices=$(_checklist "Icon Themes" "Select icon themes to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $lista_alto \ "${items[@]}" \ ) clear diff --git a/modules/extras/themes/themes.sh b/modules/extras/themes/themes.sh index 76760b5..3087424 100644 --- a/modules/extras/themes/themes.sh +++ b/modules/extras/themes/themes.sh @@ -2,9 +2,8 @@ # themes.sh — Customization submenu dispatcher _cat_customization() { - local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6)) local sub - sub=$(_menu "Customization System" "Select type:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \ + sub=$(_menu "Customization System" "Select type:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ "1" "Desktop Themes (GTK/KDE)" \ "2" "Icon Themes" \ "3" "Cursor Themes" \ diff --git a/modules/firmware.sh b/modules/firmware.sh index 001a19e..7b3ea00 100644 --- a/modules/firmware.sh +++ b/modules/firmware.sh @@ -378,7 +378,6 @@ install_firmware() { # 3. Confirm if ! _confirm "Firmware" "Apply the network & firmware plan?"; then echo "Firmware installation skipped." - _pause return fi @@ -400,7 +399,6 @@ install_firmware() { fi else echo "$fw_pkg already installed." - _pause fi else local msg="firmware-linux-nonfree provides hardware drivers for:\n" diff --git a/modules/gaming.sh b/modules/gaming.sh index 7ec0dde..b93b3e0 100644 --- a/modules/gaming.sh +++ b/modules/gaming.sh @@ -59,9 +59,9 @@ install_gaming() { "goverlay" "MangoHud config GUI" ON \ "heroic" "Heroic Launcher (Epic/GOG)" OFF \ "java" "Minecraft Java Runtime" OFF \ - "openrgb" "OpenRGB (RGB lighting control)$(_inst openrgb)" OFF \ + "openrgb" "OpenRGB (RGB lighting control)" OFF \ "lutris" "Lutris + Wine (requires 32-bit support)" OFF \ - "retroarch" "RetroArch Emulator Frontend$(_inst retroarch)" OFF \ + "retroarch" "RetroArch Emulator Frontend" OFF \ "i386" "Enable 32-bit (i386) architecture" ON) if [ -z "$choices" ]; then diff --git a/modules/gaming/_helpers.sh b/modules/gaming/_helpers.sh index 98d226c..56c4772 100644 --- a/modules/gaming/_helpers.sh +++ b/modules/gaming/_helpers.sh @@ -32,6 +32,7 @@ _install_mesa_32bit() { _run_cmd "Mesa 32-bit" "sudo apt install -y ${install_list[*]}" \ "Installing Mesa drivers (${#install_list[@]} packages)..." + echo -e "${GREEN}Mesa 32-bit libraries installed.${NC}" } apt_cache_exists() { diff --git a/modules/gpu/_helpers.sh b/modules/gpu/_helpers.sh index 47fbb7b..2bedb53 100644 --- a/modules/gpu/_helpers.sh +++ b/modules/gpu/_helpers.sh @@ -190,7 +190,7 @@ offer_generic_tools() { if _confirm "GPU Tools" "Install monitoring and info tools?\n\n${tool_pkgs}"; then _run_cmd "GPU Tools" "sudo apt install -y nvtop vainfo" "Installing GPU tools..." vainfo - _pause + _pause "vainfo output shown above." else echo "Skipping GPU monitoring tools." fi diff --git a/modules/gpu/amd_intel.sh b/modules/gpu/amd_intel.sh index 3da9b9b..1ce13c1 100644 --- a/modules/gpu/amd_intel.sh +++ b/modules/gpu/amd_intel.sh @@ -42,7 +42,7 @@ offer_amd_tools() { _run_cmd "AMD Tools" "sudo apt install -y ${amd_tools[*]} nvtop vainfo" "Installing AMD tools..." fi vainfo - _pause + _pause "vainfo output shown above." if $corectrl_available; then if [ "$DEBIAN_CODENAME" = "trixie" ]; then @@ -109,7 +109,7 @@ offer_intel_tools() { if _confirm "Intel Tools" "Intel GPU monitoring tools\n\n${driver_info}\n\nPackages:\n${pkg_info}"; then _run_cmd "Intel Tools" "sudo apt install -y ${pkg_list[*]} vainfo" "Installing Intel monitoring tools..." vainfo - _pause + _pause "vainfo output shown above." else echo "Skipping Intel monitoring tools." fi diff --git a/modules/repos.sh b/modules/repos.sh index ea86c95..a9b482b 100644 --- a/modules/repos.sh +++ b/modules/repos.sh @@ -322,10 +322,16 @@ configure_repos() { _components_enabled() { if [ -f /etc/apt/sources.list.d/debian.sources ]; then - grep -qE "^Components:.*\b(contrib|non-free)\b" /etc/apt/sources.list.d/debian.sources 2>/dev/null && return 0 + for c in $(grep "^Components:" /etc/apt/sources.list.d/debian.sources 2>/dev/null | cut -d: -f2-); do + [ "$c" = "contrib" ] || [ "$c" = "non-free" ] && return 0 + done fi if [ -f /etc/apt/sources.list ]; then - grep -qE "^[^#]*\b(contrib|non-free)\b" /etc/apt/sources.list 2>/dev/null && return 0 + local components + components=$(grep "^[^#]*deb .* main" /etc/apt/sources.list 2>/dev/null | head -1 | sed 's/.*main\s*//') + for c in $components; do + [ "$c" = "contrib" ] || [ "$c" = "non-free" ] && return 0 + done fi return 1 } @@ -362,8 +368,8 @@ _repos_enable_components() { else if ! _confirm "Enable Components" \ "Enable contrib and non-free components?\n\n\ -Needed for proprietary drivers, firmware, and other popular\n\ -software (like gaming platforms and proprietary tools)." 12 60; then +Needed for proprietary drivers, firmware, and other +popular software (like gaming platforms and proprietary tools)." 12 60; then echo "No changes made." _pause return diff --git a/modules/swap.sh b/modules/swap.sh index 009a58e..0bcc3cc 100644 --- a/modules/swap.sh +++ b/modules/swap.sh @@ -56,14 +56,12 @@ _swap_recommend_gb() { # ── Menu options ── _swap_current_status() { - echo "── Current swap ──" - sudo swapon --show 2>/dev/null || echo "(none active)" - echo "" - echo "swappiness: $(cat /proc/sys/vm/swappiness)" - echo "" - echo "fstab swap entries:" - grep -E 'swap|SWAP' /etc/fstab 2>/dev/null || echo "(none in fstab)" - _pause + local info="── Current swap ──\n" + info+="$(sudo swapon --show 2>/dev/null || echo '(none active)')\n\n" + info+="swappiness: $(cat /proc/sys/vm/swappiness)\n\n" + info+="fstab swap entries:\n" + info+="$(grep -E 'swap|SWAP' /etc/fstab 2>/dev/null || echo '(none in fstab)')" + _msg "Swap Status" "$info" 14 65 } _swap_create_file() { diff --git a/modules/utils.sh b/modules/utils.sh index 5094c45..917c436 100644 --- a/modules/utils.sh +++ b/modules/utils.sh @@ -158,10 +158,6 @@ is_installed() { dpkg -l "$1" 2>/dev/null | grep -q '^ii' } -_inst() { - if is_installed "$1"; then echo " *"; else echo ""; fi -} - _state() { is_installed "$1" && echo "ON" || echo "OFF" } @@ -573,9 +569,9 @@ _validate_sudoers() { local tmpfile tmpfile=$(mktemp) || return 1 echo "$content" > "$tmpfile" - if ! visudo -cf "$tmpfile" &>/dev/null; then + if ! /usr/sbin/visudo -cf "$tmpfile" &>/dev/null; then local err - err=$(visudo -cf "$tmpfile" 2>&1 || true) + err=$(/usr/sbin/visudo -cf "$tmpfile" 2>&1 || true) rm -f "$tmpfile" _msg "Sudoers Error" "Invalid sudoers syntax in:\n\n${err}\n\nFile was NOT written.\nThis prevents broken sudo access." 12 70 return 1 @@ -586,14 +582,14 @@ _validate_sudoers() { } _pause() { - local msg="${1:-Presiona OK para continuar.}" - whiptail --title "Continuar" --msgbox "$msg" 8 50 3>&1 1>&2 2>&3 || true + local msg="${1:-Press Enter to continue...}" + echo -e "$msg" + read -r || true } -# Blocks 2-4: clear → run → pause +# Blocks 2-4: run → pause _run_cmd() { local title="$1" command="$2" success_msg="${3:-Running...}" - clear echo -e "${GREEN}[+]${NC} $success_msg" echo "──────────────────────────────────────────────" bash -c "$command" @@ -607,7 +603,7 @@ _run_cmd() { _pause } -# Blocks 1-4: confirm → clear → run → pause +# Blocks 1-4: confirm → run → pause _run() { if _confirm "$1" "$2"; then _run_cmd "$1" "$3" "$4"