Files
debianito-post-install/modules/bullseye/extras.sh
T
stornic56 f043c130a8 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"
2026-07-11 22:05:35 -05:00

624 lines
28 KiB
Bash

#!/usr/bin/env bash
# extras.sh — Bullseye: software purgado / solo repos oficiales
# License GPL v3
# ── Essential Pack (Bullseye) ──
_quick_install_bullseye() {
_msg "Essential Pack — Bullseye" \
"Install basic programs:\n\n\
- Compression (zip, unrar, p7zip-full)\n\
- System tools (htop, inxi, neofetch, bpytop)\n\
- VLC media player\n\
- Microsoft fonts" 13 60
local quick_pkgs=(
zip unzip rar unrar p7zip-full p7zip-rar
neofetch bpytop htop inxi vlc
ttf-mscorefonts-installer
)
_run_install_batch "${quick_pkgs[@]}"
echo -e "${GREEN}Essential Pack installed.${NC}"
}
# ── Firmware (Bullseye) ──
install_firmware_bullseye() {
echo -e "${YELLOW}Installing firmware-linux-nonfree (Bullseye)...${NC}"
# ── Safeguard: non-free repos must be enabled ──
if ! grep -qr "non-free" /etc/apt/sources.list /etc/apt/sources.list.d/ 2>/dev/null; then
_msg "Error" "Error: No 'non-free' repositories were detected.\n\
Please first run the 'Configure repositories' option in the\n\
main menu to install proprietary firmwares." 10 65
return 1
fi
if is_installed "firmware-linux-nonfree"; then
echo "firmware-linux-nonfree already installed."
return
fi
local fw_ver
fw_ver=$(apt-cache policy firmware-linux-nonfree 2>/dev/null | awk 'NR==3 {print $2; exit}')
if _confirm "Firmware" \
"firmware-linux-nonfree proporciona drivers para:\n\
WiFi, Bluetooth, GPU, audio, webcams, etc.\n\n\
Version: ${fw_ver:-unknown}\n\n\
Instalar?"; then
_run_cmd "Firmware" "sudo apt install -y firmware-linux-nonfree" \
"Installing firmware-linux-nonfree..."
echo -e "${GREEN}Firmware installed.${NC}"
fi
type _handle_wireless &>/dev/null && _handle_wireless
}
# ======================================================================
# EXTRA SOFTWARE CATEGORIES — Bullseye versions (purged/whitelisted)
# Only packages available in Debian 11 official repos.
# ======================================================================
_cat_customization_bullseye() {
local sub
sub=$(_menu "Customization (Bullseye)" "Select type:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
"1" "Desktop Themes (GTK/KDE)" \
"2" "Icon Themes" \
"3" "Cursor Themes" \
"4" "Fonts" \
)
[ -z "$sub" ] && return
case $sub in
1) _cat_themes_bullseye ;;
2) _cat_icons_bullseye ;;
3) _cat_cursors_bullseye ;;
4) _cat_fonts_bullseye ;;
esac
}
_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 $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
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
for pkg in $cleaned; do
! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed."
done
echo -e "${GREEN}Desktop themes installed.${NC}"
}
_cat_icons_bullseye() {
local items=(
"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 $lista_alto \
"${items[@]}" )
clear
[ -z "$choices" ] && return
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
for pkg in $cleaned; do
! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed."
done
echo -e "${GREEN}Icon themes installed.${NC}"
}
_cat_cursors_bullseye() {
local 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 $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
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
for pkg in $cleaned; do
! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed."
done
echo -e "${GREEN}Cursor themes installed.${NC}"
}
_cat_fonts_bullseye() {
local 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 $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
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
for pkg in $cleaned; do
! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed."
done
echo -e "${GREEN}Fonts installed.${NC}"
}
_cat_download_bullseye() {
local choices1 choices2=""
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
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
local cleaned
cleaned=$(echo "$choices1 $choices2" | tr -d '"')
[ -z "$cleaned" ] && { echo "No download tools selected."; return; }
for pkg in $cleaned; do
if ! is_installed "$pkg"; then
_run_install "$pkg"
else
echo "$pkg already installed."
fi
done
echo -e "${GREEN}Download & network tools installed.${NC}"
}
_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 $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
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
for pkg in $cleaned; do
case $pkg in
w3m)
local need=()
! is_installed "w3m" && need+=("w3m")
! is_installed "w3m-img" && need+=("w3m-img")
! is_installed "ca-certificates" && need+=("ca-certificates")
! is_installed "xsel" && need+=("xsel")
[ ${#need[@]} -gt 0 ] && _run_install_batch "${need[@]}" || echo "Already installed."
;;
*)
if ! is_installed "$pkg"; then
_run_install "$pkg"
else
echo "$pkg already installed."
fi
;;
esac
done
echo -e "${GREEN}Internet tools installed.${NC}"
}
_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 $lista_alto \
"mpv" "Lightweight media player" "$(_state mpv)" \
"vlc" "VLC media player" "$(_state vlc)" \
)
clear
[ -z "$choices" ] && return
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
for pkg in $cleaned; do
if ! is_installed "$pkg"; then
_run_install "$pkg"
else
echo "$pkg already installed."
fi
done
echo -e "${GREEN}Media players installed.${NC}"
}
_cat_design_bullseye() {
local 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 $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
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
for pkg in $cleaned; do
if ! is_installed "$pkg"; then
_run_install "$pkg"
else
echo "$pkg already installed."
fi
done
echo -e "${GREEN}Multimedia & design tools installed.${NC}"
}
_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 $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
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
for pkg in $cleaned; do
if ! is_installed "$pkg"; then
_run_install "$pkg"
else
echo "$pkg already installed."
fi
done
echo -e "${GREEN}Code editors & IDEs installed.${NC}"
}
_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 $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
[ -z "$choices" ] && return
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
for pkg in $cleaned; do
case $pkg in
docker)
local need=()
! is_installed "docker.io" && need+=("docker.io")
! is_installed "docker-compose" && need+=("docker-compose")
if [ ${#need[@]} -gt 0 ]; then
_run_install_batch "${need[@]}"
else
echo "Docker already installed."
fi
;;
python3-pip)
local need=()
! is_installed "python3-pip" && need+=("python3-pip")
! is_installed "python3-venv" && need+=("python3-venv")
! is_installed "python3-dev" && need+=("python3-dev")
if [ ${#need[@]} -gt 0 ]; then
_run_install_batch "${need[@]}"
else
echo "Python 3 tools already installed."
fi
;;
jellyfin)
install_jellyfin
;;
openjdk-dev-env)
_install_dev_java
;;
*)
if ! is_installed "$pkg"; then
_run_install "$pkg"
else
echo "$pkg already installed."
fi
;;
esac
done
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 $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
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
for pkg in $cleaned; do
case $pkg in
clamav)
_install_clamav
;;
*)
if ! is_installed "$pkg"; then
_run_install "$pkg"
else
echo "$pkg already installed."
fi
;;
esac
done
echo -e "${GREEN}Security & networking tools installed.${NC}"
}
_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 $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
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
for pkg in $cleaned; do
case $pkg in
compress)
local need=()
! is_installed "zip" && need+=("zip")
! is_installed "unzip" && need+=("unzip")
! is_installed "rar" && need+=("rar")
! is_installed "unrar" && need+=("unrar")
! is_installed "p7zip-full" && need+=("p7zip-full")
! is_installed "p7zip-rar" && need+=("p7zip-rar")
[ ${#need[@]} -gt 0 ] && _run_install_batch "${need[@]}"
;;
curl-wget)
local need=()
! is_installed "curl" && need+=("curl")
! is_installed "wget" && need+=("wget")
[ ${#need[@]} -gt 0 ] && _run_install_batch "${need[@]}" || echo "Already installed."
;;
kvm)
if ! is_installed "virt-manager"; then
_run_cmd "KVM" "sudo apt install -y qemu-system-x86 qemu-utils libvirt-daemon-system libvirt-clients bridge-utils virt-manager" "Installing KVM..."
sudo adduser "$USER" libvirt 2>/dev/null || true
sudo adduser "$USER" kvm 2>/dev/null || true
else
echo "QEMU/KVM already installed."
fi
;;
flatpak)
if ! is_installed "flatpak"; then
_run_cmd "Flatpak" "sudo apt install -y flatpak" "Installing Flatpak..."
flatpak remote-add --if-not-exists flathub \
https://dl.flathub.org/repo/flathub.flatpakrepo
echo -e "${GREEN}Flatpak + Flathub installed.${NC}"
else
echo "Flatpak already installed."
fi
;;
wine)
if ! is_installed "wine64"; then
_run_cmd "Wine" "sudo apt install -y --no-install-recommends wine64 fonts-wine" "Installing Wine (64-bit only)..."
local wine_ver
wine_ver=$(wine --version 2>/dev/null)
if [ -n "$wine_ver" ]; then
echo -e "${GREEN}Wine (64-bit) installed: ${wine_ver}${NC}"
else
echo -e "${YELLOW}Wine installed but version check failed.${NC}"
fi
else
echo "Wine64 already installed."
fi
;;
fwupd)
if ! is_installed "fwupd"; then
_run_cmd "fwupd" "sudo apt install -y fwupd" "Installing fwupd..."
fi
if _confirm "Firmware Scan" "Scan for firmware updates now?"; then
sudo fwupdmgr refresh --force 2>/dev/null || true
sudo fwupdmgr get-updates 2>&1 || true
_pause
fi
;;
nvme-cli)
_run_install "nvme-cli"
;;
*)
if ! is_installed "$pkg"; then
_run_install "$pkg"
else
echo "$pkg already installed."
fi
;;
esac
done
echo -e "${GREEN}System tools installed.${NC}"
_pause
}
_cat_fetch_bullseye() {
local items=(
"neofetch" "System info fetcher" "$(_state neofetch)"
"screenfetch" "System info (BSD/Linux)" "$(_state screenfetch)"
"linuxlogo" "Linux logo + system info" "$(_state linuxlogo)"
)
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 $lista_alto \
"${items[@]}" )
clear
[ -z "$choices" ] && return
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
for pkg in $cleaned; do
if ! is_installed "$pkg"; then
_run_install "$pkg"
else
echo "$pkg already installed."
fi
done
echo -e "${GREEN}Fetch tools installed.${NC}"
}
# ======================================================================
# master installer — replaces install_extras() on Bullseye
# ======================================================================
install_extras_bullseye() {
echo -e "${YELLOW}Extra software — Bullseye mode (official repos only).${NC}"
_load_extras
while true; do
local cat_choice
cat_choice=$(_menu "Extra Software — Bullseye" "Select a category${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
"0" "Essential Pack" \
"1" "Customization System" \
"2" "Download & Network" \
"3" "Internet (Browsers, Email)" \
"4" "Media Players" \
"5" "Multimedia & Design" \
"6" "Code Editors & IDEs" \
"7" "Servers & Dev Tools" \
"8" "Security & Networking" \
"9" "Software Centers" \
"10" "System Tools" \
"11" "Fetch / System Info" \
"12" "Back to main menu" \
)
[ -z "$cat_choice" ] && return
clear
case "$cat_choice" in
0) _quick_install_bullseye ;;
1) _cat_customization_bullseye ;;
2) _cat_download_bullseye ;;
3) _cat_internet_bullseye ;;
4) _cat_players_bullseye ;;
5) _cat_design_bullseye ;;
6) _cat_programming_bullseye ;;
7) _cat_dev_bullseye ;;
8) _cat_security_bullseye ;;
9) _cat_software_centers_bullseye ;;
10) _cat_general_bullseye ;;
11) _cat_fetch_bullseye ;;
12) return ;;
esac
clear
done
}
_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" \
"plasma-discover" "Software manager for Plasma" \
)
[ -z "$sc_choice" ] && return
_run_cmd "Install" "sudo apt install -y $sc_choice" "Installing ${sc_choice}..."
if _confirm "Flatpak Support" "Do you want to enable Flatpak support for this software center?"; then
local bpkg
if [ "$sc_choice" = "gnome-software" ]; then
bpkg="gnome-software-plugin-flatpak"
else
bpkg="plasma-discover-backend-flatpak"
fi
if ! is_installed "flatpak"; then
_run_cmd "Flatpak" "sudo apt install -y flatpak" "Installing Flatpak..."
fi
_run_cmd "Plugin" "sudo apt install -y $bpkg" "Installing $bpkg..."
flatpak remote-add --if-not-exists flathub \
https://dl.flathub.org/repo/flathub.flatpakrepo
echo "Flathub repository added."
fi
echo -e "${GREEN}Software store installed.${NC}"
}