From 23301f98b345d992faa498e5cfeffa2b295323c3 Mon Sep 17 00:00:00 2001 From: stornic56 <71296607+stornic56@users.noreply.github.com> Date: Sun, 14 Jun 2026 22:01:56 -0500 Subject: [PATCH] fix backports and system modules - Refactored `is_backports_enabled()` to dynamically detect backports using `DEBIAN_CODENAME` instead of hardcoded strings, improving script portability. - Added support for standalone classic backports files (`/etc/apt/sources.list.d/debian-backports.list`) and deb822 format (`*.sources`) to ensure consistent detection across different repository configurations. - Resolved Mesa and Kernel backports detection bugs, ensuring correct dialogue prompts and preventing false error messages during installation. - Implemented smart rounding for zram memory allocation to the nearest Gigabyte for optimized performance. - Enhanced Whiptail manual input validation for zram to block empty, non-numeric, or zero values. - Introduced a dedicated `software_centers.sh` module for the modular and clean installation of GNOME Software and Plasma Discover. - Added smart desktop environment detection (GTK/QT) to automatically suggest and install the optimal software center. - Implemented a two-phase installation flow for software centers (Base Store -> Optional Flatpak support) with static consistency warnings based on the detected desktop environment. - update README.md --- README.md | 19 +++++---- modules/bullseye/extras.sh | 44 +++++++++++++++++--- modules/extras.sh | 14 ++++--- modules/extras/system/software_centers.sh | 40 ++++++++++++++++++ modules/extras/system/system.sh | 49 +++++++++++++++++++---- modules/utils.sh | 34 ++++++++-------- modules/zram.sh | 6 +-- 7 files changed, 161 insertions(+), 45 deletions(-) create mode 100644 modules/extras/system/software_centers.sh diff --git a/README.md b/README.md index 0c9e467..fe4763b 100644 --- a/README.md +++ b/README.md @@ -49,16 +49,16 @@ After running the script: |--------|-------------|--------------| | **1** | System Info | Show detected OS, CPU, RAM, GPU and hardware details | | **2** | [User Privileges & Feedback](#user-privileges--feedback) | Configure sudo group membership, enable passwordless sudo for frequent tasks, repair home directory ownership issues, and toggle visual password feedback (asterisks) in terminal | -| **3** | Configure Repositories | Setup official repos with/without backports (deb822 or classic format)| +| **3** | Configure Repositories | Setup official repos with/without backports (deb822 or classic format) and non-free/contrib| | **4** | Setup Wireless & Firmware | Install WiFi firmware for Broadcom, Intel, and other chipsets| | **5** | Configure Graphics Stack | AMD/Intel/NVIDIA drivers + monitoring tools | -| **6** | Update Kernel to Backports | Install latest stable kernel from Debian backports| +| **6** | Update Kernel to Backports | Install latest kernel from Debian backports| | **7** | Gaming Setup and Performance | Steam, Heroic Games Launcher, GameMode, MangoHud, Java JRE (Temurin 8/17/21) | | **8** | Install ZRAM (compressed swap) | Configure compressed RAM for memory optimization| -| **9** | Install Programs and Software | Selection across 10 categories (Dev, Themes, System, etc.) | +| **9** | Install Programs and Software | Selection from several categories (Development, Themes, System, etc.) | | **10** | Exit | Return to terminal | -### Extra Applications Categories (Option 9) +### Install Programs and Software (Option 9) The submenu offers the next categories: @@ -73,9 +73,10 @@ The submenu offers the next categories: | **6** | Code Editors & IDEs | vim, vim-gtk3, Neovim, Helix, nano, Emacs, Kate, Mousepad, Gedit, Geany, GNOME Text Editor, and VSCodium (VS Code open-source) | | **7** | Servers & Dev Tools | Web servers (Nginx/Apache), databases (PostgreSQL/MariaDB), Java Development Kit (Temurin 17/21/25 JDK), Docker, Python, SSH tools, fail2ban, and essential utilities | | **8** | Security & Networking | Wireshark, tcpdump, Zenmap, ClamAV, UFW, Fail2ban | -| **9** | System Tools | htop/btop, ncdu, Timeshift, tmux/screen, Flatpak support, extension repository manager, and qemu/virtmanager | -| **10** | Fetch / System Info | fastfetch/neofetch, hyfetch, Linux logo and screenfetch | -| **11** | Back to Main Menu | Return directly to the main Debianito menu (exit submenu) | +| **9** | Software Centers | Choose a software store to install | +| **10** | System Tools | htop/btop, ncdu, Timeshift, tmux/screen, Flatpak support, extension repository manager, and qemu/virtmanager | +| **11** | Fetch / System Info | fastfetch/neofetch, hyfetch, Linux logo and screenfetch | +| **12** | Back to Main Menu | Return directly to the main Debianito menu (exit submenu) | --- @@ -135,6 +136,7 @@ By default, Debian’s terminal hides your password (no asterisks or feedback). │   │   ├── security │   │   │   └── security.sh │   │   ├── system +│   │   │   ├── software_centers.sh │   │   │   └── system.sh │   │   └── themes │   │   ├── cursors @@ -160,11 +162,14 @@ By default, Debian’s terminal hides your password (no asterisks or feedback). │   │   └── nvidia.sh │   ├── gpu.sh │   ├── kernel.sh +│   ├── repos +│   │   └── repo_detect.sh │   ├── repos.sh │   ├── sudo_config.sh │   ├── utils.sh │   └── zram.sh └── README.md + ``` --- diff --git a/modules/bullseye/extras.sh b/modules/bullseye/extras.sh index 9691d4a..3293bdc 100644 --- a/modules/bullseye/extras.sh +++ b/modules/bullseye/extras.sh @@ -534,9 +534,10 @@ install_extras_bullseye() { "6" "Code Editors & IDEs" \ "7" "Servers & Dev Tools" \ "8" "Security & Networking" \ - "9" "System Tools" \ - "10" "Fetch / System Info" \ - "11" "Back to main menu" \ + "9" "Software Centers" \ + "10" "System Tools" \ + "11" "Fetch / System Info" \ + "12" "Back to main menu" \ 3>&1 1>&2 2>&3) [ -z "$cat_choice" ] && return @@ -552,10 +553,41 @@ install_extras_bullseye() { 6) _cat_programming_bullseye ;; 7) _cat_dev_bullseye ;; 8) _cat_security_bullseye ;; - 9) _cat_general_bullseye ;; - 10) _cat_fetch_bullseye ;; - 11) return ;; + 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=$(whiptail --title "Software Centers" --menu \ + "Choose a software store to install:" 12 65 2 \ + "gnome-software" "Software Center for GNOME" \ + "plasma-discover" "Software manager for Plasma" \ + 3>&1 1>&2 2>&3) + [ -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}" +} diff --git a/modules/extras.sh b/modules/extras.sh index 7d4052c..f7488be 100644 --- a/modules/extras.sh +++ b/modules/extras.sh @@ -38,9 +38,10 @@ install_extras() { "6" "Code Editors & IDEs" \ "7" "Servers & Dev Tools" \ "8" "Security & Networking" \ - "9" "System Tools" \ - "10" "Fetch / System Info" \ - "11" "Back to main menu" \ + "9" "Software Centers" \ + "10" "System Tools" \ + "11" "Fetch / System Info" \ + "12" "Back to main menu" \ 3>&1 1>&2 2>&3) [ -z "$cat_choice" ] && return @@ -56,9 +57,10 @@ install_extras() { 6) _cat_programming ;; 7) _cat_dev ;; 8) _cat_security ;; - 9) _cat_general ;; - 10) _cat_fetch ;; - 11) return ;; + 9) _cat_software_centers ;; + 10) _cat_general ;; + 11) _cat_fetch ;; + 12) return ;; esac clear done diff --git a/modules/extras/system/software_centers.sh b/modules/extras/system/software_centers.sh new file mode 100644 index 0000000..f1af513 --- /dev/null +++ b/modules/extras/system/software_centers.sh @@ -0,0 +1,40 @@ +# software_centers.sh — Standalone Software Center installer + +_cat_software_centers() { + local de_type + de_type=$(_detect_desktop_type) + local sc_choice + sc_choice=$(whiptail --title "Software Centers" --menu \ + "Choose a software store to install:" 12 65 2 \ + "gnome-software" "Software Center for GNOME" \ + "plasma-discover" "Software manager for Plasma" \ + 3>&1 1>&2 2>&3) + [ -z "$sc_choice" ] && return + + if { [ "$de_type" = "qt" ] && [ "$sc_choice" = "gnome-software" ]; } || \ + { [ "$de_type" = "gtk" ] && [ "$sc_choice" = "plasma-discover" ]; }; then + _msg "Warning" "Warning: This store requires extra background libraries \ +and may look visually inconsistent with your current desktop environment." + ! _confirm "Continue?" "Install anyway?" && return + fi + + _run_cmd "Install" "sudo apt install -y $sc_choice" "Installing ${sc_choice}..." + + if _confirm "Flatpak Support" "Do you want to enable Flatpak support for this software center?"; then + 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}" +} diff --git a/modules/extras/system/system.sh b/modules/extras/system/system.sh index f7461cf..1b8a200 100644 --- a/modules/extras/system/system.sh +++ b/modules/extras/system/system.sh @@ -1,6 +1,21 @@ #!/usr/bin/env bash # system.sh — System Tools (extrepo moved here from Dev & Servers) +_detect_desktop_type() { + local desktop + desktop="${XDG_CURRENT_DESKTOP:-${DESKTOP_SESSION:-}}" + desktop="${desktop,,}" + + case "$desktop" in + *kde*|*lxqt*|*razor*|*plasma*) + echo "qt"; return ;; + *gnome*|*xfce*|*cinnamon*|*mate*|*lxde*|*budgie*|*sway*|*hyprland*|*i3*|*bspwm*|*openbox*|*fluxbox*) + echo "gtk"; return ;; + esac + + echo "gtk" +} + _cat_general() { local headless=false _is_headless && headless=true @@ -113,19 +128,38 @@ _cat_general() { flatpak) if ! is_installed "flatpak"; then _run_cmd "Flatpak" "sudo apt install -y flatpak" "Installing Flatpak..." - if command -v plasma-discover &>/dev/null; then - _run_cmd "Flatpak" "sudo apt install -y plasma-discover-backend-flatpak" "Installing Flatpak backend..." - echo "Flatpak backend for Discover installed." - elif command -v gnome-software &>/dev/null; then - _run_cmd "Flatpak" "sudo apt install -y gnome-software-plugin-flatpak" "Installing Flatpak plugin..." - echo "Flatpak plugin for GNOME Software installed." - fi else echo "Flatpak already installed." fi flatpak remote-add --if-not-exists flathub \ https://dl.flathub.org/repo/flathub.flatpakrepo echo "Flathub repository added." + + if command -v plasma-discover &>/dev/null; then + if ! is_installed "plasma-discover-backend-flatpak" 2>/dev/null; then + if _confirm "Discover Backend" "Install Flatpak backend for Plasma Discover?"; then + _run_cmd "Backend" "sudo apt install -y plasma-discover-backend-flatpak" "Installing Flatpak backend..." + fi + fi + elif command -v gnome-software &>/dev/null; then + if ! is_installed "gnome-software-plugin-flatpak" 2>/dev/null; then + if _confirm "GNOME Plugin" "Install Flatpak plugin for GNOME Software?"; then + _run_cmd "Plugin" "sudo apt install -y gnome-software-plugin-flatpak" "Installing Flatpak plugin..." + fi + fi + else + local de_type + de_type=$(_detect_desktop_type) + if [ "$de_type" = "qt" ]; then + if _confirm "Software Center" "Install Plasma Discover for Flatpak management?"; then + _run_cmd "Discover" "sudo apt install -y plasma-discover plasma-discover-backend-flatpak" "Installing Discover..." + fi + else + if _confirm "Software Center" "Install GNOME Software for Flatpak management?"; then + _run_cmd "GNOME Software" "sudo apt install -y gnome-software gnome-software-plugin-flatpak" "Installing GNOME Software..." + fi + fi + fi echo -e "${GREEN}A reboot is recommended.${NC}" ;; fwupd) @@ -191,3 +225,4 @@ _cat_general() { echo -e "${GREEN}System tools installed.${NC}" } + diff --git a/modules/utils.sh b/modules/utils.sh index 77dcb57..9648cce 100644 --- a/modules/utils.sh +++ b/modules/utils.sh @@ -265,24 +265,26 @@ get_intel_generation() { # Check if backports repository is enabled (active line without #) # ---------------------------------------------------------------------- is_backports_enabled() { - # Check classic sources.list - if [ -f /etc/apt/sources.list ]; then - if grep -Eq '^[^#]*[ \t]+bookworm-backports[ \t]+' /etc/apt/sources.list 2>/dev/null; then - echo true - return - fi - if grep -Eq '^[^#]*[ \t]+trixie-backports[ \t]+' /etc/apt/sources.list 2>/dev/null; then - echo true - return - fi + local codename="${DEBIAN_CODENAME:-}" + [ -z "$codename" ] && { echo false; return; } + + local c_pattern="^[^#]*${codename}-backports[[:space:]]+" + local d_pattern="Suites:.*${codename}-backports" + + # Classic embedded (sources.list) + if [ -f /etc/apt/sources.list ] && grep -Eq "$c_pattern" /etc/apt/sources.list 2>/dev/null; then + echo true; return fi - # Check deb822 .sources files - if [ -d /etc/apt/sources.list.d ]; then - if grep -qr 'Suites:.*-backports' /etc/apt/sources.list.d/*.sources 2>/dev/null; then - echo true - return - fi + # Classic standalone (new — debian-backports.list) + if [ -f /etc/apt/sources.list.d/debian-backports.list ] && \ + grep -Eq "$c_pattern" /etc/apt/sources.list.d/debian-backports.list 2>/dev/null; then + echo true; return + fi + + # Deb822 any .sources file + if grep -qr "$d_pattern" /etc/apt/sources.list.d/*.sources 2>/dev/null; then + echo true; return fi echo false diff --git a/modules/zram.sh b/modules/zram.sh index 167c807..e97685b 100644 --- a/modules/zram.sh +++ b/modules/zram.sh @@ -9,7 +9,7 @@ install_zram() { return 1 fi - local half_ram_mb=$((RAM_KB / 2 / 1024)) + local half_ram_mb=$(( ((RAM_KB / 1024 / 1024 + 1) / 2) * 1024 )) local algo algo=$(whiptail --title "ZRAM Compression" --menu \ @@ -31,12 +31,12 @@ Choose compression algorithm:" \ fi local zram_size - if _confirm "ZRAM Size" "Use 50% of RAM for ZRAM? (${half_ram_mb} MB out of ${RAM_SUMMARY})"; then + if _confirm "ZRAM Size" "Use recommended size for ZRAM? (${half_ram_mb} MB out of ${RAM_SUMMARY})"; then zram_size=$half_ram_mb else zram_size=$(whiptail --title "ZRAM Size" --inputbox \ "Enter ZRAM size in MB:" 8 60 "$half_ram_mb" 3>&1 1>&2 2>&3) - if [ -z "$zram_size" ] || ! [[ "$zram_size" =~ ^[0-9]+$ ]]; then + if [ -z "$zram_size" ] || ! [[ "$zram_size" =~ ^[0-9]+$ ]] || [ "$zram_size" -eq 0 ]; then echo "ZRAM configuration cancelled." return 0 fi