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"
This commit is contained in:
stornic56
2026-07-11 22:05:35 -05:00
committed by GitHub
parent 2ebb33460c
commit f043c130a8
27 changed files with 454 additions and 331 deletions
+154 -128
View File
@@ -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
+73
View File
@@ -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
}
+16 -14
View File
@@ -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
+17 -16
View File
@@ -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
+18 -15
View File
@@ -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
+9 -8
View File
@@ -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
+21 -19
View File
@@ -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
+3 -1
View File
@@ -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[@]}" \
)
+5 -4
View File
@@ -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
+15 -14
View File
@@ -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
+9 -8
View File
@@ -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
+2 -2
View File
@@ -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
+32 -31
View File
@@ -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
+9 -7
View File
@@ -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
@@ -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
+11 -9
View File
@@ -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
+15 -13
View File
@@ -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
+1 -2
View File
@@ -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" \
-2
View File
@@ -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"
+2 -2
View File
@@ -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
+1
View File
@@ -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() {
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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
+10 -4
View File
@@ -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
+6 -8
View File
@@ -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() {
+7 -11
View File
@@ -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"