Compare commits

..

2 Commits

Author SHA1 Message Date
stornic56 72032f2916 Update README.md 2026-06-09 23:04:15 -05:00
stornic56 af8fac4ac4 Add files via upload 2026-06-09 23:03:30 -05:00
13 changed files with 1021 additions and 285 deletions
+76 -69
View File
@@ -2,7 +2,7 @@
<div align="center"> <div align="center">
Debianito is a user-friendly post-installation automation script for Debian 12 (Bookworm) and Debian 13 (Trixie). It streamlines system configuration, driver installation, repository setup, gaming tools integration, and more with an interactive menu-driven interface. Debianito is a user-friendly post-installation automation script for Debian 12 (Bookworm) and Debian 13 (Trixie). It streamlines system configuration, driver installation (including NVIDIA drivers), repository setup with backports support, gaming tools integration, and more with an interactive menu-driven interface.
[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-red.svg?style=for-the-badge&logo=gnu&logoColor=white)](https://github.com/stornic56/debianito-post-install/blob/main/LICENSE) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-red.svg?style=for-the-badge&logo=gnu&logoColor=white)](https://github.com/stornic56/debianito-post-install/blob/main/LICENSE)
@@ -15,15 +15,15 @@ Debianito is a user-friendly post-installation automation script for Debian 12 (
| Requirement | Specification | | Requirement | Specification |
|-------------|---------------| |-------------|---------------|
| **OS** | Debian 12 (Bookworm), Debian 13 (Trixie) | | **OS** | Debian 12 (Bookworm), Debian 13 (Trixie) |
| **Privileges** | Script must be run with `sudo` privileges by a normal user | | **Privileges** | Normal user with `sudo` access, script validates root/sudo in `utils.sh`|
| **Terminal** | Any modern terminal emulator that supports ANSI colors and UTF-8 box-drawing characters | | **Terminal** | Any modern terminal emulator supporting ANSI colors and UTF-8 box-drawing characters |
| **Dependencies** | Standard Debian packages; script will install missing dependencies (e.g., `whiptail`, `lsb-release`) where necessary. | | **Dependencies** | Standard Debian packages (`whiptail`, `lsb-release`); auto-installed if missing |
--- ---
## Installation Instructions ## Installation Instructions
### Step 1: Clone or Download the Repository Clone the repository, make the script executable, and run it:
```bash ```bash
git clone https://github.com/stornic56/debianito-post-install git clone https://github.com/stornic56/debianito-post-install
@@ -31,17 +31,7 @@ cd debianito-post-install
chmod +x debianito.sh && ./debianito.sh chmod +x debianito.sh && ./debianito.sh
``` ```
If you downloaded manually, ensure all `.sh` files are in their respective directories. > ⚠️ **Do not run as root.** The script checks for non-root execution and requires sudo privileges.
### Step 2: Run the Script with Sudo Privileges
> **Do not run this script as root.** Use a normal user account and authorize via `sudo`.
```bash
./debianito.sh
```
The script will perform initial checks, detect your system information (CPU, RAM, GPU), then present an interactive menu.
--- ---
@@ -49,39 +39,41 @@ The script will perform initial checks, detect your system information (CPU, RAM
After running the script: After running the script:
1. **Select Option:** Use arrow keys or type `1-9`. 1. **Select Option:** Use arrow keys or type `1-10`.
2. **Confirm Actions:** For installation steps, you'll see a confirmation prompt (`whiptail`/`dialog`). 2. **Confirm Actions:** Installation prompts use `whiptail` for TUI confirmations.
3. **Review System Info:** The header displays your detected Debian version and hardware summary before each action. 3. **Review System Info:** Header displays detected Debian version `DEBIAN_CODENAME`, `DEBIAN_VERSION` and hardware summary before each action.
4. **Repeat as Needed:** Return to the main menu at any time or exit when done. 4. **Repeat as Needed:** Return to main menu at any time or exit when done.
| Option | Description | What it does | | Option | Description | What it does |
|--------|-------------|--------------| |--------|-------------|--------------|
| **1** | System Info | Show detected hardware and OS details | | **1** | System Info | Show detected Os, CPU, RAM, GPU and others |
| **2** | User Privileges & Feedback | Add user to sudo group, enable password feedback (`pwfeedback`) | | **2** | User Privileges & Feedback | Add user to sudo group, enable `pwfeedback` for password visibility |
| **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)|
| **4** | Setup Wireless & Firmware | Install WiFi firmware for Broadcom, Intel, and other chipsets | | **4** | Setup Wireless & Firmware | Install WiFi firmware for Broadcom, Intel, and other chipsets|
| **5** | Configure Graphics Stack | AMD/Intel/NVIDIA drivers + monitoring tools (`nvtop`, `radeontop`) | | **5** | Configure Graphics Stack | AMD/Intel/NVIDIA drivers + monitoring tools |
| **6** | Update Kernel to Backports | Install latest stable kernel from Debian backports (7.0+) | | **6** | Update Kernel to Backports | Install latest stable kernel from Debian backports|
| **7** | Gaming Setup and Performance | Steam, GameMode, MangoHud, Heroic Games Launcher | | **7** | Gaming Setup and Performance | Steam, Heroic Games Launcher, GameMode, MangoHud and others|
| **8** | Install ZRAM (compressed swap) | Configure compressed RAM for memory optimization | | **8** | Install ZRAM (compressed swap) | Configure compressed RAM for memory optimization|
| **9** | Install Programs and Software | 10 categories: Essential, System, Dev, Players, Internet, Customization, Fetch, Download, Design | | **9** | Install Programs and Software | Selection across 10 categories (Dev, Themes, System, etc.) |
| **10** | Exit | Return to terminal | | **10** | Exit | Return to terminal |
### Extra Applications Categories (Option 9) ### Extra Applications Categories (Option 9)
- **Essential Pack:** Quick install of common tools (compression, system info, VLC, MS fonts) The submenu offers 11 categories:
- **System Tools:** htop, btop, ncdu, timeshift, tmux, flatpak, extrepo, virtualization tools
- **Development & Servers:** Docker, Nginx/Apache, PostgreSQL/MariaDB, SSH server, fail2ban, Python | Option | Category | Description |
- **Media Players:** VLC, MPV |--------|----------|-------------|
- **Internet:** Firefox (Mozilla), LibreWolf, Floorp, Chromium, Thunderbird, Riseup VPN, Tor Browser | **0** | Essential Pack | Quick install of common tools (compression, system info, VLC, MS fonts) |
- **Customization Desktop Themes (GTK/KDE):** Arc, Numix, Breeze GTK, Bluebird, Blackbird, Greybird, Orchis | **1** | Customization System | Desktop themes, icon themes, cursor themes, and fonts|
- **Customization → Icon Themes:** Papirus, Numix, Elementary, Deepin, Suru, Obsidian, Breeze, Moka | **2** | Download & Network | Downloaders (aria2, ytdlp, FileZilla) + Torrent clients (qBittorrent, Deluge, Transmission)|
- **Customization → Cursor Themes:** Bibata, Breeze, Chameleon, DMZ, XCursor, Oxygen | **3** | Internet | Browsers (Firefox/Mozilla, LibreWolf, Floorp, Chromium), email clients, VPN tools|
- **Customization → Fonts:** Bebas Neue, Anonymous Pro, ADF Verana, 3270, Liberation, MS Core, Ubuntu, Recommended | **4** | Media Players | VLC and MPV|
- **Fetch Tools:** Neofetch/Fastfetch, hyfetch, Linux logo, Screenfetch | **5** | Multimedia & Design | GIMP, Kdenlive, Blender, OBS Studio, Audacity, Inkscape and HandBrake|
- **Downloaders:** aria2, ytdlp, FileZilla | **6** | Programming Applications | Development tools (Docker, Nginx/Apache, PostgreSQL/MariaDB, SSH, fail2ban, Python)|
- **Torrent Clients:** qBittorrent, Deluge, Transmission, mktorrent | **7** | Security & Networking | Additional security and networking utilities |
- **Multimedia & Design:** GIMP, Kdenlive, Blender, OBS Studio, Audacity, Inkscape, HandBrake | **8** | System Tools | htop, btop, ncdu, timeshift, tmux, flatpak, extrepo and virtualization tools|
| **9** | Fetch / System Info | Fastfetch/Neofetch, hyfetch, Linux logo and Screenfetch |
| **10** | Back to main menu | Return to the main script menu |
--- ---
@@ -90,37 +82,52 @@ After running the script:
| Directory/File | Description | | Directory/File | Description |
|----------------|-------------| |----------------|-------------|
| `./debianito.sh` | Main entry point; handles menu navigation and system detection. | | `./debianito.sh` | Main entry point; handles menu navigation and system detection. |
| `/modules/` | Modular scripts for specific tasks: `sudo_config`, `repos`, `firmware`, `gpu`, etc. | | `/modules/` | Modular scripts for specific tasks: sudo config, repos, firmware, gpu, kernel, gaming, zram. |
| `/modules/extras/` | Split-by-category sub-modules for the "Install Programs and Software" menu. | | `/modules/extras/` | Split-by-category sub-modules for the "Install Programs and Software" menu (Option 9). |
```bash ```bash
├── debianito.sh # Main entry point; menu + system detection ├── debianito.sh # Main entry point; TUI menu + system detection
└── modules/ └── modules/
├── utils.sh # System info helpers (CPU/RAM/GPU/WiFi detection) ├── utils.sh # System info helpers: CPU/RAM/GPU/WiFi detection, Debian version check ([`detect_debian_version()`](utils.sh#L79))
├── sudo_config.sh # User group + pwfeedback setup ├── sudo_config.sh # User group + pwfeedback setup
├── repos.sh # Repository configuration (classic/deb822 format) ├── repos.sh # Repository configuration (deb822/classic format) with backup/restore
├── firmware.sh # WiFi microcode and chipset-specific support ├── firmware.sh # WiFi microcode and chipset-specific support via [`firmware-linux-nonfree`](modules/firmware.sh)
├── gpu.sh # AMD, Intel, NVIDIA driver/firmware handling ├── gpu.sh # AMD/Intel/NVIDIA driver handling ([`detect_gpu()`](utils.sh#L168)); NVIDIA Kepler/Turing detection veto (line 203+)
├── kernel.sh # Update Kernel to Backports with NVIDIA warnings ├── kernel.sh # Update Kernel to Backports with NVIDIA compatibility warnings
├── gaming.sh # Steam installation & performance tools ├── gaming.sh # Steam, GameMode, MangoHud, Heroic Games Launcher
├── extras.sh # Dispatcher for the "Extras" submenu ├── extras.sh # Dispatcher for the "Extras" submenu (Option 9)
├── extras/ # Category modules (one folder per category) ├── zram.sh # ZRAM compressed swap configuration
│ ├── _helpers.sh # _inst() / _state() shared helpers └── extras/ # Category modules organized by function
├── essential/essential.sh # One-click essentials pack ├── _helpers.sh # Shared helpers: [`_inst()`](utils.sh#L418), [`_state()`] for package management
├── system/system.sh # System Tools (25 items) ├── essential/ # Essential Pack (compression, system info, VLC, MS fonts)
── dev/dev.sh # Development & Servers (15 items) ── essential.sh # One-click essentials installation
├── players/players.sh # Media Players (mpv, vlc) ├── system/ # System Tools (htop, btop, ncdu, timeshift, tmux, flatpak, extrepo, virtualization tools)
── internet/internet.sh # Browsers, Email, VPN (incl. Mozilla/Floorp/LibreWolf) ── system.sh # 25+ system utility packages
├── themes/ # Customization submenu (4 options) ├── dev/ # Development & Servers (Docker, Nginx/Apache, PostgreSQL/MariaDB, SSH, fail2ban, Python)
── themes.sh # Submenu dispatcher ── dev.sh # 15 development/server tools
│ │ ├── desktop-themes/desktop-themes.sh # GTK/KDE themes (7) ├── players/ # Media Players (VLC, MPV)
── icons/icons.sh # Icon themes (11-12) ── players.sh # Video player packages
│ │ ├── cursors/cursors.sh # Cursor themes (6) ├── internet/ # Internet: Firefox (Mozilla), LibreWolf, Floorp, Chromium, Thunderbird, Riseup VPN, Tor Browser
│ └── fonts/fonts.sh # Fonts (8) │ └── internet.sh # Browsers, email clients, VPN tools
├── fetch/fetch.sh # System info tools (neofetch/fastfetch/hyfetch) ├── themes/ # Customization submenu with 4 options
│ ├── download/download.sh # Downloaders + Torrent clients │ ├── themes.sh # Submenu dispatcher for customization categories
── design/design.sh # Multimedia & Design (12+ items) ── desktop-themes/ # Desktop Themes (GTK/KDE): Arc, Numix, Breeze GTK, Bluebird, Blackbird, Greybird, Orchis
└── zram.sh # ZRAM compressed swap configuration │ │ └── desktop-themes.sh
│ ├── icons/ # Icon Themes: Papirus, Numix, Elementary, Deepin, Suru, Obsidian, Breeze, Moka
│ │ └── icons.sh # 11-12 icon theme packages
│ ├── cursors/ # Cursor Themes: Bibata, Breeze, Chameleon, DMZ, XCursor, Oxygen
│ │ └── cursors.sh # 6 cursor theme packages
│ └── fonts/ # Fonts: Bebas Neue, Anonymous Pro, ADF Verana, 3270, Liberation, MS Core, Ubuntu, Recommended
│ └── fonts.sh # 8 font packages including MS Core fonts
├── fetch/ # Fetch Tools (Neofetch/Fastfetch, hyfetch, Linux logo, Screenfetch)
│ └── fetch.sh # System info display tools
├── download/ # Downloaders & Torrent Clients: aria2, ytdlp, FileZilla, qBittorrent, Deluge, Transmission, mktorrent
│ └── download.sh # Download manager + torrent client packages
└── design/ # Multimedia & Design (GIMP, Kdenlive, Blender, OBS Studio, Audacity, Inkscape, HandBrake)
└── design.sh # 12+ creative applications
``` ```
> 🤖 **AI-Assisted Development Note**
> This project was developed with assistance from large language models for code generation, documentation and testing suggestions. The author takes full responsibility for the accuracy of all scripts included in this repository. All modifications have been reviewed manually before inclusion to ensure compatibility with Debian systems.
> 🤖 AI-Assisted Development Note > 🤖 AI-Assisted Development Note
This project was developed with assistance from large language models for code generation, documentation and testing suggestions. The author takes full responsibility for the accuracy of all scripts included in this repository. All modifications have been reviewed manually before inclusion to ensure compatibility with Debian systems. This project was developed with assistance from large language models for code generation, documentation and testing suggestions. The author takes full responsibility for the accuracy of all scripts included in this repository. All modifications have been reviewed manually before inclusion to ensure compatibility with Debian systems.
+1
View File
@@ -96,6 +96,7 @@ Network: ${network_info}" 13 65
check_root check_root
check_sudo check_sudo
check_system_time
detect_debian_version detect_debian_version
detect_cpu_ram detect_cpu_ram
+41 -22
View File
@@ -1,34 +1,50 @@
#!/usr/bin/env bash #!/usr/bin/env bash
install_firmware() { install_firmware() {
local fw_pkgs="" echo -e "${YELLOW}Base firmware check...${NC}"
local fw_pkg="firmware-linux-nonfree"
local fw_bpo local fw_bpo
fw_bpo=$(apt-cache madison firmware-linux-nonfree 2>/dev/null | \ fw_bpo=$(apt-cache madison "$fw_pkg" 2>/dev/null | \
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1) grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
if [ -n "$fw_bpo" ]; then
local fw_stable local fw_stable
fw_stable=$(apt-cache policy firmware-linux-nonfree 2>/dev/null | awk 'NR==3 {print $2; exit}') fw_stable=$(apt-cache policy "$fw_pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}')
fw_pkgs=" - firmware-linux-nonfree ${fw_bpo} (backports) / ${fw_stable} (stable)\n"
else if is_installed "$fw_pkg"; then
local fw_ver if [ -n "$fw_bpo" ]; then
fw_ver=$(apt-cache policy firmware-linux-nonfree 2>/dev/null | awk 'NR==3 {print $2; exit}') local current_ver
fw_pkgs=" - firmware-linux-nonfree ${fw_ver}\n" current_ver=$(dpkg -l "$fw_pkg" 2>/dev/null | awk '/^ii/{print $3}')
fi if _confirm "Firmware" "firmware-linux-nonfree ${current_ver} already installed.\n\nUpgrade to backports version ${fw_bpo}?\n\nBackports often includes newer hardware support."; then
if ! _confirm "Base Firmware" "Install firmware?\n\n${fw_pkgs}"; then _run_cmd "Firmware" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports $fw_pkg" "Upgrading firmware..."
echo "Skipping base firmware." fi
else
echo "$fw_pkg already installed."
fi
handle_wifi_firmware
return return
fi fi
echo -e "${YELLOW}Installing base firmware...${NC}" local msg="firmware-linux-nonfree provides hardware drivers for:\n"
local pkg="firmware-linux-nonfree" msg+=" WiFi, Bluetooth, GPU, audio, webcams, and more.\n\n"
if [ "$(is_backports_enabled)" == true ] && [ -n "$fw_bpo" ]; then if [ -n "$fw_bpo" ]; then
_run_cmd "Firmware" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports $pkg" "Installing firmware from backports..." msg+=" Backports: ${fw_bpo} (newer, recommended)\n"
msg+=" Stable: ${fw_stable}\n\n"
msg+="Choose version:"
if _confirm_custom "Firmware" "$msg" "Backports" "Stable"; then
_run_cmd "Firmware" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports $fw_pkg" "Installing firmware from backports..."
else
_run_cmd "Firmware" "sudo apt install -y $fw_pkg" "Installing firmware from stable..."
fi
else else
_run_cmd "Firmware" "sudo apt install -y $pkg" "Installing firmware..." msg+=" Version: ${fw_stable}\n\n"
msg+="Install it?"
if _confirm "Firmware" "$msg"; then
_run_cmd "Firmware" "sudo apt install -y $fw_pkg" "Installing firmware..."
fi
fi fi
echo -e "${GREEN}Base firmware installed.${NC}" echo -e "${GREEN}Base firmware installed.${NC}"
handle_wifi_firmware handle_wifi_firmware
} }
@@ -55,11 +71,14 @@ handle_wifi_firmware() {
device_id=$(echo "$broadcom_id" | cut -d: -f2) device_id=$(echo "$broadcom_id" | cut -d: -f2)
if echo "$supported_ids" | grep -qw "$device_id"; then if echo "$supported_ids" | grep -qw "$device_id"; then
echo "Chipset supported by firmware-brcm80211. Installing..." _run_install_pkg firmware-brcm80211
_run_cmd "WiFi" "sudo apt install -y firmware-brcm80211" "Installing Broadcom firmware..."
else else
# Offer to install broadcom-sta-dkms for older chips # Offer to install broadcom-sta-dkms for older chips
if _confirm "Broadcom WiFi" "Install broadcom-sta-dkms?\n\nRequired for this Broadcom chipset.\nCompiles a kernel module (needs linux-headers)."; then local bcm_ver
bcm_ver=$(apt-cache policy broadcom-sta-dkms 2>/dev/null | awk 'NR==3 {print $2; exit}')
local header_ver
header_ver=$(apt-cache policy linux-headers-$(uname -r) 2>/dev/null | awk 'NR==3 {print $2; exit}')
if _confirm "Broadcom WiFi" "Install Broadcom driver?\n\nRequired for this chipset. Compiles a kernel module.\n\n broadcom-sta-dkms ${bcm_ver:-unknown}\n linux-headers-$(uname -r) ${header_ver:-unknown}\n\nProceed?"; then
_run_cmd "Broadcom" "sudo apt install -y linux-headers-$(uname -r) broadcom-sta-dkms" "Installing Broadcom driver..." _run_cmd "Broadcom" "sudo apt install -y linux-headers-$(uname -r) broadcom-sta-dkms" "Installing Broadcom driver..."
echo "Broadcom proprietary driver installed. A reboot may be required." echo "Broadcom proprietary driver installed. A reboot may be required."
else else
+111 -35
View File
@@ -1,12 +1,57 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Install gaming tools (Steam, gamemode, mangohud, etc.) # Gaming dispatcher — sources submodules and provides install_gaming()
_GAMING_DIR="${MODULES_DIR}/gaming"
source "${_GAMING_DIR}/_helpers.sh"
source "${_GAMING_DIR}/steam.sh"
source "${_GAMING_DIR}/heroic.sh"
source "${_GAMING_DIR}/tools.sh"
# Check if 'contrib' component is enabled; offer to add if missing
ensure_contrib_repo() {
local contrib_found=false
if [ -f /etc/apt/sources.list ]; then
if grep -Eq '^[^#]*\bcontrib\b' /etc/apt/sources.list 2>/dev/null; then
contrib_found=true
fi
fi
if ! $contrib_found && [ -d /etc/apt/sources.list.d ]; then
if grep -qr 'Components:.*\bcontrib\b' /etc/apt/sources.list.d/*.sources 2>/dev/null; then
contrib_found=true
fi
fi
if $contrib_found; then
return 0
fi
if _confirm "contrib Repository" "Component 'contrib' is required for Steam.\n\nAdd 'contrib' to your APT repositories?"; then
if [ -f /etc/apt/sources.list ]; then
sudo sed -i '/^deb / { /contrib/! s/main/main contrib/ }' /etc/apt/sources.list
fi
if [ -d /etc/apt/sources.list.d ]; then
for f in /etc/apt/sources.list.d/*.sources; do
[ -f "$f" ] || continue
sudo sed -i '/^Components:/ { /contrib/! s/$/ contrib/ }' "$f"
done
fi
sudo apt update
echo -e "${GREEN}contrib repository enabled.${NC}"
return 0
fi
echo -e "${YELLOW}contrib repository not enabled. Steam installation may fail.${NC}"
return 1
}
install_gaming() { install_gaming() {
echo -e "${YELLOW}Gaming setup...${NC}" echo -e "${YELLOW}Gaming setup...${NC}"
# 1. 32-bit support prompt FIRST # 1. 32-bit support prompt FIRST
local enable_32bit=false local enable_32bit=false
if _confirm "32-bit Support" "Enable i386 for 32-bit games?\n\nRequired by Steam/Proton.\nInstalls matching 32-bit graphics drivers."; then if _confirm "32-bit Support" "Enable i386 architecture for 32-bit games?\n\nRequired by Steam/Proton for 32-bit games.\nInstalls matching 32-bit graphics drivers."; then
enable_32bit=true enable_32bit=true
fi fi
@@ -19,9 +64,59 @@ install_gaming() {
echo "Installing 32-bit graphics drivers..." echo "Installing 32-bit graphics drivers..."
if [ "$GPU_TYPE" = "nvidia" ]; then if [ "$GPU_TYPE" = "nvidia" ]; then
_run_cmd "32-bit" "sudo apt install -y nvidia-driver-libs:i386" "Installing 32-bit NVIDIA drivers..." case "${NVIDIA_DRIVER_MODE:-stable}" in
cuda-repo)
_msg "NVIDIA 32-bit" \
"32-bit NVIDIA CUDA libraries already deployed.\n\nThe complete multiarch stack was installed\nwith the v590 driver from the official CUDA repo." 10 70
;;
backports)
local nv32_pkg="nvidia-driver-libs:i386"
local nv32_ver
nv32_ver=$(apt-cache policy "$nv32_pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}')
local msg="Source: Debian ${DEBIAN_CODENAME^}-Backports\n"
msg+="NVIDIA 32-bit Libraries ${nv32_ver:-unknown}\n\n"
msg+="[+] nvidia-driver-libs:i386"
if _confirm "NVIDIA 32-bit" "$msg" 12 70; then
_run_cmd "32-bit NVIDIA" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports ${nv32_pkg}" \
"Installing 32-bit NVIDIA drivers from backports..."
fi
;;
stable)
local nv32_pkg="nvidia-driver-libs:i386"
local nv32_ver
nv32_ver=$(apt-cache policy "$nv32_pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}')
local use_bpo32=false
if [ "$(is_backports_enabled)" == "true" ]; then
local bpo_nv32_ver
bpo_nv32_ver=$(apt-cache madison "$nv32_pkg" 2>/dev/null | \
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
if [ -n "$bpo_nv32_ver" ]; then
local msg="Source: Debian ${DEBIAN_CODENAME^} (Backports available)\n"
msg+="NVIDIA 32-bit Libraries: ${nv32_pkg}\n\n"
msg+=" Backports: ${bpo_nv32_ver}\n"
msg+=" Stable: ${nv32_ver:-unknown}\n\n"
msg+="Choose version:"
if _confirm_custom "NVIDIA 32-bit" "$msg" "Backports" "Stable" 14 70; then
use_bpo32=true
fi
fi
fi
if $use_bpo32; then
_run_cmd "32-bit NVIDIA" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports ${nv32_pkg}" \
"Installing 32-bit NVIDIA drivers from backports..."
else
local msg="Source: Debian ${DEBIAN_CODENAME^} Stable\n"
msg+="NVIDIA 32-bit Libraries ${nv32_ver:-unknown}\n\n"
msg+="[+] nvidia-driver-libs:i386"
if _confirm "NVIDIA 32-bit" "$msg" 12 70; then
_run_cmd "32-bit NVIDIA" "sudo apt install -y ${nv32_pkg}" \
"Installing 32-bit NVIDIA drivers..."
fi
fi
;;
esac
else else
_run_cmd "32-bit" "sudo apt install -y mesa-vulkan-drivers libglx-mesa0:i386 mesa-vulkan-drivers:i386 libgl1-mesa-dri:i386" "Installing 32-bit Mesa drivers..." _install_mesa_32bit
fi fi
fi fi
@@ -29,10 +124,10 @@ install_gaming() {
local choices local choices
choices=$(whiptail --title "Gaming Setup" --checklist \ choices=$(whiptail --title "Gaming Setup" --checklist \
"Select gaming packages to install:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \ "Select gaming packages to install:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
"steam" "Steam (official .deb, needs 32-bit)" ON \ "steam" "Steam (requires 32-bit support)" ON \
"gamemode" "Game performance optimization" ON \ "gamemode" "Game performance optimization" ON \
"mangohud" "Performance overlay (Vulkan/GL)" ON \ "mangohud" "Performance overlay (Vulkan/OpenGL)" ON \
"heroic" "Heroic Launcher (Epic/GOG) .deb" OFF \ "heroic" "Heroic Launcher (Epic/GOG)" OFF \
"goverlay" "MangoHud config GUI" ON \ "goverlay" "MangoHud config GUI" ON \
"lutris" "Game launcher/manager" OFF \ "lutris" "Game launcher/manager" OFF \
3>&1 1>&2 2>&3) 3>&1 1>&2 2>&3)
@@ -55,37 +150,18 @@ install_gaming() {
for pkg in $cleaned; do for pkg in $cleaned; do
case $pkg in case $pkg in
steam) steam)
local steam_deb="/tmp/steam_latest.deb" if ensure_contrib_repo; then
_run_cmd "Steam" "wget -O $steam_deb https://cdn.fastly.steamstatic.com/client/installer/steam.deb" "Downloading Steam..." install_steam
_run_cmd "Steam" "sudo apt install -y $steam_deb" "Installing Steam..."
echo -e "${GREEN}Steam installed.${NC}"
;;
mangohud)
_run_cmd "MangoHud" "sudo apt install -y mangohud" "Installing MangoHud..."
if $enable_32bit; then
echo "Installing 32-bit MangoHud..."
_run_cmd "MangoHud" "sudo apt install -y mangohud:i386" "Installing 32-bit MangoHud..."
fi
;;
heroic)
local heroic_deb="/tmp/heroic.deb"
_run_cmd "Heroic" "sudo apt install -y curl wget" "Installing dependencies..."
local gh_url
gh_url=$(curl -s --connect-timeout 10 https://api.github.com/repos/Heroic-Games-Launcher/\
HeroicGamesLauncher/releases/latest | \
grep -oP 'https://[^"]+amd64\.deb' | head -1)
if [ -z "$gh_url" ]; then
echo -e "${RED}Could not determine latest Heroic release.${NC}"
else else
_run_cmd "Heroic" "wget -O $heroic_deb $gh_url" "Downloading Heroic..." echo -e "${YELLOW}Skipping Steam installation (contrib repository not enabled).${NC}"
_run_cmd "Heroic" "sudo apt install -y $heroic_deb" "Installing Heroic..."
rm -f "$heroic_deb"
echo -e "${GREEN}Heroic Games Launcher installed.${NC}"
fi fi
;; ;;
*) heroic) install_heroic ;;
_run_install "$pkg" mangohud) install_mangohud ;;
;; gamemode) install_gamemode ;;
goverlay) install_goverlay ;;
lutris) install_lutris ;;
*) _run_install "$pkg" ;;
esac esac
done done
+67
View File
@@ -0,0 +1,67 @@
#!/usr/bin/env bash
# Shared helpers for gaming submodules
_install_mesa_32bit() {
local mesa_pkgs=(
"mesa-vulkan-drivers" "mesa-vulkan-drivers:i386"
"libgl1-mesa-dri" "libgl1-mesa-dri:i386"
"libglx-mesa0" "libglx-mesa0:i386"
"libegl-mesa0" "libegl-mesa0:i386"
"mesa-va-drivers" "mesa-va-drivers:i386"
)
local ref_ver
ref_ver=$(apt-cache policy mesa-vulkan-drivers:i386 2>/dev/null | awk 'NR==3 {print $2; exit}')
local ref_bpo_ver
ref_bpo_ver=$(apt-cache madison mesa-vulkan-drivers:i386 2>/dev/null | \
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
local comp_line="Components: Vulkan:i386, OpenGL:i386, GLX:i386, EGL:i386, VA-API:i386"
if [ "$(is_backports_enabled)" == "true" ] && [ -n "$ref_bpo_ver" ]; then
local bpo_pkgs=()
local stable_pkgs=()
for mpkg in "${mesa_pkgs[@]}"; do
local bpo_ver
bpo_ver=$(apt-cache madison "$mpkg" 2>/dev/null | \
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
if [ -n "$bpo_ver" ]; then
bpo_pkgs+=("$mpkg")
else
stable_pkgs+=("$mpkg")
fi
done
local src_label="Debian ${DEBIAN_CODENAME^}-Backports"
[ ${#stable_pkgs[@]} -gt 0 ] && src_label+=" + Stable"
local msg="Mesa 32-bit drivers required for gaming.\n\n"
msg+="Source: ${src_label}\n"
msg+="Mesa ${ref_bpo_ver:-$ref_ver}\n"
msg+="${comp_line}\n\n"
[ ${#stable_pkgs[@]} -gt 0 ] && msg+="Some packages only available in stable.\n"
msg+="Choose version:"
if _confirm_custom "Mesa 32-bit" "$msg" "Backports" "Stable" 14 70; then
_run_cmd "Mesa 32-bit" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports ${bpo_pkgs[*]}" \
"Installing 32-bit Mesa from backports..."
if [ ${#stable_pkgs[@]} -gt 0 ]; then
_run_cmd "Mesa 32-bit" "sudo apt install -y ${stable_pkgs[*]}" \
"Installing remaining 32-bit Mesa from stable..."
fi
else
_run_cmd "Mesa 32-bit" "sudo apt install -y ${mesa_pkgs[*]}" \
"Installing 32-bit Mesa from stable..."
fi
else
local msg="Mesa 32-bit drivers required for gaming.\n\n"
msg+="Source: Debian Stable\n"
msg+="Mesa ${ref_ver}\n"
msg+="${comp_line}\n\n"
msg+="Install Mesa 32-bit drivers?"
if _confirm "Mesa 32-bit" "$msg" 14 70; then
_run_cmd "Mesa 32-bit" "sudo apt install -y ${mesa_pkgs[*]}" \
"Installing 32-bit Mesa..."
fi
fi
}
+19
View File
@@ -0,0 +1,19 @@
#!/usr/bin/env bash
# Heroic Games Launcher installation from GitHub releases
install_heroic() {
local heroic_deb="/tmp/heroic.deb"
_run_cmd "Heroic" "sudo apt install -y curl wget" "Installing dependencies..."
local gh_url
gh_url=$(curl -s --connect-timeout 10 https://api.github.com/repos/Heroic-Games-Launcher/\
HeroicGamesLauncher/releases/latest | \
grep -oP 'https://[^"]+amd64\.deb' | head -1)
if [ -z "$gh_url" ]; then
echo -e "${RED}Could not determine latest Heroic release.${NC}"
else
_run_cmd "Heroic" "wget -O $heroic_deb $gh_url" "Downloading Heroic..."
_run_cmd "Heroic" "sudo apt install -y $heroic_deb" "Installing Heroic..."
rm -f "$heroic_deb"
echo -e "${GREEN}Heroic Games Launcher installed.${NC}"
fi
}
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
# Steam installation from Debian repos
install_steam() {
_run_cmd "Steam" "sudo apt install -y steam-installer" "Installing Steam from Debian repos..."
echo -e "${GREEN}Steam installed.${NC}"
}
+22
View File
@@ -0,0 +1,22 @@
#!/usr/bin/env bash
# Gaming performance tools installation
install_mangohud() {
_run_cmd "MangoHud" "sudo apt install -y mangohud" "Installing MangoHud..."
if dpkg --print-foreign-architectures | grep -q i386; then
echo "Installing 32-bit MangoHud..."
_run_cmd "MangoHud" "sudo apt install -y mangohud:i386" "Installing 32-bit MangoHud..."
fi
}
install_gamemode() {
_run_install gamemode
}
install_goverlay() {
_run_install goverlay
}
install_lutris() {
_run_install lutris
}
+105 -152
View File
@@ -1,164 +1,117 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Detects and installs GPU firmwares for AMD, Intel, and NVIDIA # Graphics Stack — sources submodules and provides install_gpu_drivers()
_GPU_DIR="${MODULES_DIR}/gpu"
source "${_GPU_DIR}/_helpers.sh"
source "${_GPU_DIR}/amd_intel.sh"
source "${_GPU_DIR}/nvidia.sh"
# Consumed by gaming.sh to know which NVIDIA driver path was taken
NVIDIA_DRIVER_MODE=""
install_gpu_drivers() { install_gpu_drivers() {
case "$GPU_TYPE" in # Step 1: Info banner
amd) install_amd ;; local info="This section installs the latest Mesa graphics stack\n"
intel) install_intel ;; info+="from Debian backports (or stable), plus GPU firmware\n"
nvidia) install_nvidia ;; info+="and monitoring tools tailored to your hardware.\n\n"
*) info+="Components:\n"
_msg "GPU" "No dedicated GPU detected.\n\nIf you are in a virtual machine, GPU acceleration\ndepends on VM configuration (SPICE, VirtIO).\n\nNo additional drivers will be installed." 12 60 info+=" Mesa (OpenGL / Vulkan / VA-API)\n"
return if [ "$GPU_TYPE" != "unknown" ]; then
;; info+=" GPU firmware for ${GPU_DESC}\n"
esac fi
info+=" Monitoring tools (nvtop, vainfo, ...)"
if [ "$GPU_TYPE" != "nvidia" ] && [ "$(is_backports_enabled)" == true ]; then if ! _confirm "Graphics Stack" "$info"; then
local mesa_pkgs="" echo "Skipping Graphics Stack."
for mpkg in libgl1-mesa-dri mesa-vulkan-drivers; do return
local bpo_ver fi
bpo_ver=$(apt-cache madison "$mpkg" 2>/dev/null | \
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1) # Step 2: GPU detected?
if [ -n "$bpo_ver" ]; then if [ "$GPU_TYPE" = "unknown" ] || [ -z "$GPU_TYPE" ]; then
mesa_pkgs+=" - ${mpkg} ${bpo_ver} (backports)\n" # --- BLOQUE B: No GPU / VM (inline, no _install_mesa_backports) ---
local mesa_pkgs=(mesa-vulkan-drivers libgl1-mesa-dri libglx-mesa0 libegl-mesa0 mesa-va-drivers)
local ref_ver
ref_ver=$(apt-cache policy mesa-vulkan-drivers 2>/dev/null | awk 'NR==3 {print $2; exit}')
local ref_bpo_ver
ref_bpo_ver=$(apt-cache madison mesa-vulkan-drivers 2>/dev/null | \
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
local comp_line="Components: Vulkan, OpenGL, GLX, EGL, VA-API (64-bit)"
if [ -n "$ref_bpo_ver" ] && [ "$(is_backports_enabled)" == "true" ]; then
local header="No dedicated GPU was detected (VM or headless).\n"
header+="Install Mesa stack for compute / display acceleration?\n\n"
header+="Source: Debian ${DEBIAN_CODENAME^}-Backports\n"
header+="Mesa ${ref_bpo_ver}\n"
header+="${comp_line}\n\n"
header+="Choose version:"
if _confirm_custom "No GPU Detected" "$header" "Backports" "Stable" 14 70; then
_run_cmd "Mesa" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports ${mesa_pkgs[*]}" \
"Installing Mesa from backports..."
else else
mesa_pkgs+=" - ${mpkg} (from stable)\n" _run_cmd "Mesa" "sudo apt install -y ${mesa_pkgs[*]}" \
"Installing Mesa from stable..."
fi fi
done
if _confirm_custom "Mesa Backports" "Install Mesa?\n${mesa_pkgs}" "Backports" "Stable"; then
_run_cmd "Mesa" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports libgl1-mesa-dri mesa-vulkan-drivers" "Installing Mesa from backports..."
else else
_run_cmd "Mesa" "sudo apt install -y libgl1-mesa-dri mesa-vulkan-drivers" "Installing Mesa from stable..." if _confirm "No GPU Detected" \
fi "No dedicated GPU was detected (VM or headless).\n\nInstall Mesa stack?\n\nSource: Debian Stable\nMesa ${ref_ver}\n${comp_line}" 14 70; then
fi _run_cmd "Mesa" "sudo apt install -y ${mesa_pkgs[*]}" \
"Installing Mesa..."
local tool_pkgs else
tool_pkgs=$(pkg_versions nvtop vainfo) echo "Skipping Mesa installation."
if _confirm "GPU Tools" "Install monitoring tools?\n${tool_pkgs}"; then offer_generic_tools
_run_cmd "GPU Tools" "sudo apt install -y nvtop vainfo" "Installing GPU tools..." return
vainfo
else
echo "Skipping GPU monitoring tools."
fi
echo -e "${GREEN}GPU setup complete.${NC}"
}
# ----------------------------------------------------------------------
# AMD GPU
# ----------------------------------------------------------------------
install_amd() {
local pkgs
pkgs=$(pkg_versions firmware-amd-graphics radeontop)
if ! _confirm "AMD GPU" "Install AMD drivers?\n${pkgs}"; then
echo "Skipping AMD GPU drivers."
return
fi
_run_cmd "AMD" "sudo apt install -y firmware-amd-graphics radeontop" "Installing AMD drivers..."
echo -e "${GREEN}AMD drivers installed.${NC}"
}
# ----------------------------------------------------------------------
# Intel GPU
# ----------------------------------------------------------------------
install_intel() {
local gen
gen=$(get_intel_generation)
local va_driver
if [ "$gen" = "gen7-" ]; then
va_driver="i965-va-driver-shaders"
else
va_driver="intel-media-va-driver-non-free"
fi
local pkgs
pkgs=$(pkg_versions firmware-intel-graphics "$va_driver")
if ! _confirm "Intel GPU" "Install Intel drivers?\n${pkgs}"; then
echo "Skipping Intel GPU drivers."
return
fi
_run_cmd "Intel" "sudo apt install -y firmware-intel-graphics" "Installing Intel firmware..."
echo "Detected Intel GPU generation: $gen"
echo "Installing ${va_driver}..."
_run_cmd "Intel" "sudo apt install -y $va_driver" "Installing Intel VA driver..."
echo -e "${GREEN}Intel GPU drivers installed.${NC}"
}
# ----------------------------------------------------------------------
# NVIDIA GPU
# ----------------------------------------------------------------------
install_nvidia() {
echo -e "${YELLOW}NVIDIA GPU detected.${NC}"
# --- WARNING CHECK: Backports vs NVIDIA ---
if [ "$(is_backports_enabled)" == true ]; then
echo -e "${YELLOW}============================================${NC}"
echo -e "${YELLOW} IMPORTANT: Backports are currently enabled${NC}"
echo -e "${YELLOW}============================================${NC}"
echo ""
echo "If you are using a backports kernel (e.g., 6.19+), the NVIDIA"
echo "driver (especially the 550 series on Debian Trixie) may fail to"
echo "compile via DKMS due to kernel incompatibilities."
echo ""
echo "We strongly recommend using the stable Debian kernel with the"
echo "NVIDIA driver. The script will now install the recommended driver"
echo "from the STABLE repositories only, NOT from backports."
if ! _confirm "NVIDIA + Backports" "Backports kernel (6.19+) may break NVIDIA driver.\nContinue with stable NVIDIA driver?"; then
echo "Skipping NVIDIA driver installation."
return 0
fi
fi
_run_cmd "NVIDIA" "sudo apt install -y nvidia-detect" "Installing nvidia-detect..."
# Run nvidia-detect and parse the recommended package
echo "Detecting recommended NVIDIA driver..."
local recommended
recommended=$(nvidia-detect 2>/dev/null | grep -oP 'nvidia[\w-]+(?= package)')
if [ -z "$recommended" ]; then
echo -e "${RED}nvidia-detect could not determine a suitable driver.${NC}"
echo "Your GPU may not be supported by current Debian packages."
return 1
fi
echo "Recommended driver package: $recommended"
# --- CHECK FOR UNSUPPORTED LEGACY DRIVERS ---
if [[ "$recommended" =~ tesla-470|legacy-390|legacy-340 ]]; then
if [ "$DEBIAN_CODENAME" = "trixie" ]; then
echo -e "${RED}============================================${NC}"
echo -e "${RED} NVIDIA DRIVER NOT AVAILABLE${NC}"
echo -e "${RED}============================================${NC}"
echo ""
echo "Your GPU requires the $recommended driver, which is not available"
echo "in Debian 13 (Trixie)."
echo ""
echo "Options:"
echo " 1. Install Debian 12 (Bookworm) where $recommended is still available"
echo " 2. Use Debian Sid (Unstable) which may still provide $recommended"
echo " 3. Use the open-source Nouveau driver (limited performance)"
echo ""
echo "No driver will be installed."
return 1
else
if [[ "$recommended" =~ legacy-390|legacy-340 ]]; then
echo -e "${RED}Your GPU requires $recommended, which is not available.${NC}"
echo "No driver will be installed."
return 1
fi fi
fi fi
offer_generic_tools
else
# --- BLOQUE A: GPU detectada (AMD / Intel / NVIDIA) ---
local ref_ver
ref_ver=$(apt-cache policy mesa-vulkan-drivers 2>/dev/null | awk 'NR==3 {print $2; exit}')
local ref_bpo_ver
ref_bpo_ver=$(apt-cache madison mesa-vulkan-drivers 2>/dev/null | \
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
local comp_line="Components: Vulkan, OpenGL, GLX, EGL, VA-API (64-bit)"
local src_line="Source: Debian Stable"
[ -n "$ref_bpo_ver" ] && [ "$(is_backports_enabled)" == "true" ] && src_line="Source: Debian ${DEBIAN_CODENAME^}-Backports"
local plan="GPU detected: ${GPU_DESC}\n\n"
plan+="${src_line}\n"
plan+="Mesa ${ref_bpo_ver:-$ref_ver}\n"
plan+="${comp_line}\n"
case "$GPU_TYPE" in
amd) plan+="[+] Firmware: firmware-amd-graphics\n" ;;
intel)
local _gen; _gen=$(get_intel_generation)
local _va; [ "$_gen" = "gen7-" ] && _va="i965-va-driver-shaders" || _va="intel-media-va-driver-non-free"
plan+="[+] Firmware: firmware-intel-graphics + ${_va}\n"
;;
nvidia) plan+="[+] NVIDIA driver (details in next step)\n" ;;
esac
if ! _confirm "Graphics Stack — ${GPU_DESC}" "$plan" 14 70; then
echo "Skipping Graphics Stack."
return
fi
# 3. _run_cmd (via vendor functions — each with its own pkg_versions + _confirm)
case "$GPU_TYPE" in
amd) install_amd_firmware ;;
intel) install_intel_firmware ;;
nvidia) install_nvidia_driver ;;
esac
# Mesa (backports / stable)
_install_mesa_backports
# Vendor-specific tools
case "$GPU_TYPE" in
amd) offer_amd_tools ;;
intel) offer_intel_tools ;;
nvidia) offer_generic_tools ;;
esac
fi fi
local nv_pkgs echo -e "${GREEN}Graphics stack setup complete.${NC}"
nv_pkgs=$(pkg_versions "$recommended" firmware-misc-nonfree nvidia-vaapi-driver)
if ! _confirm "NVIDIA Driver" "Install NVIDIA driver?\n${nv_pkgs}\nReboot required."; then
echo "Skipping NVIDIA driver installation."
return 0
fi
_run_cmd "NVIDIA" "sudo apt install -y $recommended firmware-misc-nonfree nvidia-vaapi-driver" "Installing NVIDIA driver..."
echo -e "${GREEN}NVIDIA drivers installed. Reboot required.${NC}"
} }
+144
View File
@@ -0,0 +1,144 @@
#!/usr/bin/env bash
# Shared helpers for GPU submodules
is_nvidia_kepler() {
local dev_id
dev_id=$(lspci -nn | grep -iE "VGA|3D" | grep -i nvidia | grep -oP '10de:\K[0-9a-fA-F]+' | head -n1)
[ -z "$dev_id" ] && { echo false; return; }
local dev_int
dev_int=$((16#${dev_id,,}))
# Known Kepler device ID ranges (GKxxx)
if [ "$dev_int" -ge $((16#0FC0)) ] && [ "$dev_int" -le $((16#0FCF)) ]; then echo true; return; fi
if [ "$dev_int" -ge $((16#1180)) ] && [ "$dev_int" -le $((16#118F)) ]; then echo true; return; fi
if [ "$dev_int" -ge $((16#11C0)) ] && [ "$dev_int" -le $((16#11CF)) ]; then echo true; return; fi
if [ "$dev_int" -ge $((16#0FE0)) ] && [ "$dev_int" -le $((16#0FEF)) ]; then echo true; return; fi
if [ "$dev_int" -ge $((16#1280)) ] && [ "$dev_int" -le $((16#129F)) ]; then echo true; return; fi
if [ "$dev_int" -ge $((16#0EB0)) ] && [ "$dev_int" -le $((16#0EBF)) ]; then echo true; return; fi
echo false
}
is_nvidia_maxwell() {
local dev_id
dev_id=$(lspci -nn | grep -iE "VGA|3D" | grep -i nvidia | grep -oP '10de:\K[0-9a-fA-F]+' | head -n1)
[ -z "$dev_id" ] && { echo false; return; }
local dev_int
dev_int=$((16#${dev_id,,}))
# GM108 (GT 830M, GT 840M, GT 940M)
if [ "$dev_int" -ge $((16#1340)) ] && [ "$dev_int" -le $((16#134F)) ]; then echo true; return; fi
# GM107 (GTX 750 Ti, GTX 860M)
if [ "$dev_int" -ge $((16#1380)) ] && [ "$dev_int" -le $((16#138F)) ]; then echo true; return; fi
# GM200 (TITAN X, GTX 980 Ti)
if [ "$dev_int" -ge $((16#13C0)) ] && [ "$dev_int" -le $((16#13CF)) ]; then echo true; return; fi
# GM204 (GTX 980, GTX 970)
if [ "$dev_int" -ge $((16#13D0)) ] && [ "$dev_int" -le $((16#13DF)) ]; then echo true; return; fi
# GM206 (GTX 960, GTX 950)
if [ "$dev_int" -ge $((16#1480)) ] && [ "$dev_int" -le $((16#148F)) ]; then echo true; return; fi
echo false
}
is_nvidia_pascal() {
local dev_id
dev_id=$(lspci -nn | grep -iE "VGA|3D" | grep -i nvidia | grep -oP '10de:\K[0-9a-fA-F]+' | head -n1)
[ -z "$dev_id" ] && { echo false; return; }
local dev_int
dev_int=$((16#${dev_id,,}))
# GP100 (Tesla P100, Quadro GP100)
if [ "$dev_int" -ge $((16#15F0)) ] && [ "$dev_int" -le $((16#15FF)) ]; then echo true; return; fi
# GP104 (GTX 1080, GTX 1070)
if [ "$dev_int" -ge $((16#1B00)) ] && [ "$dev_int" -le $((16#1B1F)) ]; then echo true; return; fi
# GP102 (TITAN Xp, GTX 1080 Ti)
if [ "$dev_int" -ge $((16#1B80)) ] && [ "$dev_int" -le $((16#1B8F)) ]; then echo true; return; fi
# GP106 (GTX 1060)
if [ "$dev_int" -ge $((16#1C00)) ] && [ "$dev_int" -le $((16#1C2F)) ]; then echo true; return; fi
# GP107 (GTX 1050 Ti, GTX 1050)
if [ "$dev_int" -ge $((16#1C80)) ] && [ "$dev_int" -le $((16#1C8F)) ]; then echo true; return; fi
# GP108 (GT 1030, GT 1010)
if [ "$dev_int" -ge $((16#1D00)) ] && [ "$dev_int" -le $((16#1DFF)) ]; then echo true; return; fi
echo false
}
_install_mesa_backports() {
if [ "$(is_backports_enabled)" != "true" ]; then
install_mesa_stable
return
fi
local mesa_pkgs=("mesa-vulkan-drivers" "libgl1-mesa-dri" "libglx-mesa0" "libegl-mesa0" "mesa-va-drivers")
local bpo_pkgs=()
local stable_pkgs=()
for mpkg in "${mesa_pkgs[@]}"; do
local bpo_ver
bpo_ver=$(apt-cache madison "$mpkg" 2>/dev/null | \
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
if [ -n "$bpo_ver" ]; then
bpo_pkgs+=("$mpkg")
else
stable_pkgs+=("$mpkg")
fi
done
local ref_ver
ref_ver=$(apt-cache policy mesa-vulkan-drivers 2>/dev/null | awk 'NR==3 {print $2; exit}')
local ref_bpo_ver
ref_bpo_ver=$(apt-cache madison mesa-vulkan-drivers 2>/dev/null | \
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
local comp_line="Components: Vulkan, OpenGL, GLX, EGL, VA-API (64-bit)"
if [ ${#bpo_pkgs[@]} -gt 0 ]; then
local src_label="Debian ${DEBIAN_CODENAME^}-Backports"
[ ${#stable_pkgs[@]} -gt 0 ] && src_label+=" + Stable"
local msg="Mesa provides OpenGL/Vulkan/VA-API acceleration.\n\n"
msg+="Source: ${src_label}\n"
msg+="Mesa ${ref_bpo_ver:-$ref_ver}\n"
msg+="${comp_line}\n\n"
[ ${#stable_pkgs[@]} -gt 0 ] && msg+="Some packages only available in stable.\n"
msg+="Choose version for backports-capable packages:"
if _confirm_custom "Mesa (Graphics)" "$msg" "Backports" "Stable" 14 70; then
_run_cmd "Mesa (backports)" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports ${bpo_pkgs[*]}" \
"Installing Mesa from backports..."
if [ ${#stable_pkgs[@]} -gt 0 ]; then
_run_cmd "Mesa (stable)" "sudo apt install -y ${stable_pkgs[*]}" \
"Installing remaining Mesa packages from stable..."
fi
else
_run_cmd "Mesa" "sudo apt install -y ${mesa_pkgs[*]}" \
"Installing Mesa from stable..."
fi
else
local msg="Mesa provides OpenGL/Vulkan/VA-API acceleration.\n\n"
msg+="Source: Debian Stable\n"
msg+="Mesa ${ref_ver}\n"
msg+="${comp_line}\n\n"
msg+="Install Mesa from available repositories?"
if _confirm "Mesa (Graphics)" "$msg" 14 70; then
_run_cmd "Mesa" "sudo apt install -y ${mesa_pkgs[*]}" \
"Installing Mesa..."
fi
fi
}
install_mesa_stable() {
local mesa_pkgs=("mesa-vulkan-drivers" "libgl1-mesa-dri" "libglx-mesa0" "libegl-mesa0" "mesa-va-drivers")
_run_cmd "Mesa" "sudo apt install -y ${mesa_pkgs[*]}" "Installing Mesa from stable..."
}
offer_generic_tools() {
local tool_pkgs
tool_pkgs=$(pkg_versions nvtop vainfo)
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
else
echo "Skipping GPU monitoring tools."
fi
}
+95
View File
@@ -0,0 +1,95 @@
#!/usr/bin/env bash
# AMD and Intel GPU firmware + tools
install_amd_firmware() {
local fw_info
fw_info=$(pkg_versions firmware-amd-graphics)
if _confirm "AMD Firmware" "Install AMD GPU firmware?\n\n${fw_info}"; then
_run_cmd "AMD" "sudo apt install -y firmware-amd-graphics" "Installing AMD GPU firmware..."
fi
}
offer_amd_tools() {
local amd_tools=("radeontop")
local corectrl_available=false
if [ "$DEBIAN_CODENAME" = "trixie" ]; then
corectrl_available=true
elif [ "$(is_backports_enabled)" = "true" ] && apt-cache madison corectrl 2>/dev/null | grep -q "bookworm-backports"; then
corectrl_available=true
fi
local pkgs
pkgs=$(pkg_versions "${amd_tools[@]}" nvtop vainfo)
if $corectrl_available; then
local ctrl_ver
ctrl_ver=$(apt-cache policy corectrl 2>/dev/null | awk 'NR==3 {print $2; exit}')
pkgs+=" - corectrl ${ctrl_ver}\n"
fi
if ! _confirm "AMD Tools" "Install AMD monitoring and control tools?\n\n${pkgs}"; then
echo "Skipping AMD tools."
return
fi
_run_cmd "AMD Tools" "sudo apt install -y ${amd_tools[*]} nvtop vainfo" "Installing AMD tools..."
vainfo
if $corectrl_available; then
if [ "$DEBIAN_CODENAME" = "trixie" ]; then
_run_cmd "corectrl" "sudo apt install -y corectrl" "Installing corectrl..."
else
_run_cmd "corectrl" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports corectrl" "Installing corectrl from backports..."
fi
fi
echo -e "${GREEN}AMD tools installed.${NC}"
}
install_intel_firmware() {
local gen
gen=$(get_intel_generation)
local va_driver
if [ "$gen" = "gen7-" ]; then
va_driver="i965-va-driver-shaders"
else
va_driver="intel-media-va-driver-non-free"
fi
local fw_info
fw_info=$(pkg_versions firmware-intel-graphics "$va_driver")
if _confirm "Intel Firmware" "Install Intel GPU firmware?\n\n${fw_info}"; then
_run_cmd "Intel" "sudo apt install -y firmware-intel-graphics $va_driver" "Installing Intel GPU firmware..."
fi
}
offer_intel_tools() {
local driver_info=""
local has_xe=false
local has_i915=false
local pkg_list=()
local pkg_info=""
[ -d "/sys/bus/pci/drivers/xe" ] && has_xe=true
[ -d "/sys/bus/pci/drivers/i915" ] && has_i915=true
if $has_xe; then
driver_info="Modern Intel GPU detected (Xe driver).\nintel-gpu-tools is NOT compatible with Xe.\nOnly nvtop will be offered."
pkg_list=("nvtop")
elif $has_i915; then
driver_info="Classic Intel GPU detected (i915 driver).\nintel-gpu-tools is compatible and will be offered."
pkg_list=("intel-gpu-tools" "nvtop")
else
driver_info="Intel GPU driver not identified.\nOffering nvtop as a safe default."
pkg_list=("nvtop")
fi
pkg_info=$(pkg_versions "${pkg_list[@]}" vainfo)
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
else
echo "Skipping Intel monitoring tools."
fi
}
+276
View File
@@ -0,0 +1,276 @@
#!/usr/bin/env bash
# NVIDIA GPU driver installation — 3-CASE dispatch
#
# CASE A : Trixie + backports kernel → Official NVIDIA CUDA Repo (Pinned v590)
# CASE B : Bookworm + backports kernel → Debian backports (-t bookworm-backports)
# CASE C : Kernel stable (any distro) → Debian stable (optional backports)
install_nvidia_driver() {
echo -e "${YELLOW}NVIDIA GPU detected.${NC}"
NVIDIA_DRIVER_MODE=""
local is_bpo_kernel; is_bpo_kernel=$(is_backports_kernel)
local is_kepler; is_kepler=$(is_nvidia_kepler)
local is_maxwell; is_maxwell=$(is_nvidia_maxwell)
local is_pascal; is_pascal=$(is_nvidia_pascal)
# ── Veto: Kepler en Trixie no tiene driver disponible ──
if [ "$is_kepler" = "true" ] && [ "$DEBIAN_CODENAME" = "trixie" ]; then
_msg "NVIDIA Kepler" \
"Your GPU is NVIDIA Kepler architecture.\n\nThe nvidia-tesla-470 driver is not available\nin Debian 13 (Trixie).\n\nNo NVIDIA driver will be installed." 14 65
return 1
fi
# ── Bloqueo: Maxwell/Pascal no son compatibles con v590 ──
if [ "$DEBIAN_CODENAME" = "trixie" ] && [ "$is_bpo_kernel" = "true" ]; then
if [ "$is_maxwell" = "true" ] || [ "$is_pascal" = "true" ]; then
local gpu_gen="Maxwell"
[ "$is_pascal" = "true" ] && gpu_gen="Pascal"
local block_msg="INCOMPATIBILITY DETECTED: Your NVIDIA ${gpu_gen} GPU\n"
block_msg+="is NOT supported by the modern v590 driver.\n\n"
block_msg+="To run NVIDIA safely on Debian 13 (Trixie), you MUST use\n"
block_msg+="the official Debian v550 driver, which requires the\n"
block_msg+="standard STABLE Kernel.\n\n"
block_msg+="The script will automatically downgrade your path to\n"
block_msg+="Stable Kernel mode for NVIDIA."
_msg "NVIDIA — Trixie + Backports" "$block_msg" 14 70
is_bpo_kernel=false
fi
fi
# ── Dispatch por casos ──
if [ "$DEBIAN_CODENAME" = "trixie" ] && [ "$is_bpo_kernel" = "true" ]; then
_install_nvidia_cuda_repo
elif [ "$DEBIAN_CODENAME" = "bookworm" ] && [ "$is_bpo_kernel" = "true" ]; then
_install_nvidia_bookworm_bpo
else
_install_nvidia_standard
fi
}
# -------------------------------------------------------------------
# CASE A: Trixie + Backports Kernel → Official CUDA Repo (Pinned v590)
# -------------------------------------------------------------------
_install_nvidia_cuda_repo() {
local i386_active=false
dpkg --print-foreign-architectures | grep -q i386 && i386_active=true
local warn="WARNING: Official Debian NVIDIA driver (v550)\n"
warn+="fails to compile on Trixie Backports Kernels.\n\n"
warn+="The script will configure the official NVIDIA CUDA\n"
warn+="repository and force-install the stable production\n"
warn+="branch v590.48.01 on your system.\n\n"
warn+="Source: Official NVIDIA CUDA Repo (Pinned v590.*)\n"
warn+="Driver: Production Branch 590.48.01 (Kernel 7.0+ Compliant)\n"
warn+="[+] Full 64-bit Core & Compute Stack (DKMS)\n"
if $i386_active; then
warn+="[+] 32-bit Gaming Multiarch Libraries\n"
fi
warn+="[+] APT Pinning + Package Hold will be applied\n\n"
warn+="Do you want to proceed at your own risk?"
if ! _confirm_custom "NVIDIA Driver — Trixie + Backports" "$warn" "Proceed" "Abort" 18 70; then
echo -e "${YELLOW}NVIDIA installation aborted by user.${NC}"
return 1
fi
# Step 1: Download & install CUDA keyring
_run_cmd "CUDA Keyring" \
"wget -q https://developer.download.nvidia.com/compute/cuda/repos/debian13/x86_64/cuda-keyring_1.1-1_all.deb -O /tmp/cuda-keyring.deb && sudo dpkg -i /tmp/cuda-keyring.deb && rm -f /tmp/cuda-keyring.deb" \
"Downloading and installing official CUDA keyring..."
# Step 2: Create APT pinning to lock v590
_run_cmd "APT Pinning" \
'printf "%s\n" "Package: *nvidia*" "Package: *cuda*" "Package: libcuda1" "Package: firmware-nvidia-gsp" "Pin: version 590.*" "Pin-Priority: 1001" | sudo tee /etc/apt/preferences.d/block-nvidia > /dev/null' \
"Creating APT pinning to lock NVIDIA to v590 branch..."
# Step 3: Update package lists
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
# Step 4: Build version-locked package list
local pkgs=(
"cuda-drivers=590.48.01-1"
"libcuda1=590.48.01-1"
"nvidia-driver=590.48.01-1"
"nvidia-driver-libs=590.48.01-1"
"firmware-nvidia-gsp=590.48.01-1"
"libegl-nvidia0=590.48.01-1"
"libglx-nvidia0=590.48.01-1"
"libnvidia-eglcore=590.48.01-1"
"libnvidia-glcore=590.48.01-1"
"libnvidia-glvkspirv=590.48.01-1"
"libnvidia-ml1=590.48.01-1"
"nvidia-egl-icd=590.48.01-1"
"nvidia-vulkan-icd=590.48.01-1"
"libnvcuvid1=590.48.01-1"
"libnvidia-encode1=590.48.01-1"
"nvidia-kernel-dkms=590.48.01-1"
"nvidia-settings=590.48.01-1"
"nvidia-smi=590.48.01-1"
)
if $i386_active; then
pkgs+=(
"libcuda1:i386=590.48.01-1"
"nvidia-driver-libs:i386=590.48.01-1"
"libegl-nvidia0:i386=590.48.01-1"
"libglx-nvidia0:i386=590.48.01-1"
"libnvidia-eglcore:i386=590.48.01-1"
"libnvidia-glcore:i386=590.48.01-1"
"libnvidia-glvkspirv:i386=590.48.01-1"
"libnvidia-ml1:i386=590.48.01-1"
"nvidia-egl-icd:i386=590.48.01-1"
"nvidia-vulkan-icd:i386=590.48.01-1"
)
fi
_run_cmd "NVIDIA CUDA" "sudo apt install -y ${pkgs[*]}" \
"Installing NVIDIA Production Driver v590.48.01..."
# Step 5: Hold critical packages
_run_cmd "Package Hold" \
"sudo apt-mark hold cuda-drivers libcuda1 firmware-nvidia-gsp" \
"Locking v590 packages to prevent accidental upgrades..."
NVIDIA_DRIVER_MODE="cuda-repo"
echo -e "${GREEN}NVIDIA Production Driver v590 installed from CUDA repo. Reboot required.${NC}"
}
# -------------------------------------------------------------------
# CASE B: Bookworm + Backports Kernel → Debian backports
# -------------------------------------------------------------------
_install_nvidia_bookworm_bpo() {
local nv_pkg=""
local is_kepler
is_kepler=$(is_nvidia_kepler)
if [ "$is_kepler" = "true" ]; then
nv_pkg="nvidia-tesla-470-driver"
else
local nd_ver
nd_ver=$(apt-cache policy nvidia-detect 2>/dev/null | awk 'NR==3 {print $2; exit}')
if _confirm "NVIDIA Detect" "Install nvidia-detect to determine the correct driver?\n\n nvidia-detect ${nd_ver:-unknown}" 12 70; then
_run_cmd "NVIDIA" "sudo apt install -y nvidia-detect" "Installing nvidia-detect..."
else
echo "Skipping NVIDIA driver detection."
NVIDIA_DRIVER_MODE=""
return 0
fi
local recommended
recommended=$(nvidia-detect 2>/dev/null | grep -oP 'nvidia[\w-]+(?= package)')
if [ -z "$recommended" ]; then
echo -e "${RED}nvidia-detect could not determine a suitable driver.${NC}"
return 1
fi
if [[ "$recommended" =~ legacy-390|legacy-340 ]]; then
echo -e "${RED}Your GPU requires $recommended, which is not available.${NC}"
return 1
fi
nv_pkg="$recommended"
fi
local nv_ver
nv_ver=$(apt-cache policy "$nv_pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}')
local msg="Source: Debian Bookworm-Backports\n"
msg+="NVIDIA Driver: ${nv_pkg} ${nv_ver:-unknown}\n"
msg+=" (Compatible with Kernel v6.12+)\n"
msg+="[+] firmware-misc-nonfree\n"
msg+="[+] nvidia-vaapi-driver"
if ! _confirm "NVIDIA Driver — Backports" "$msg" 14 70; then
echo "Skipping NVIDIA driver installation."
return 0
fi
_run_cmd "NVIDIA" "sudo apt install -y -t bookworm-backports $nv_pkg firmware-misc-nonfree nvidia-vaapi-driver" \
"Installing NVIDIA driver from backports..."
NVIDIA_DRIVER_MODE="backports"
echo -e "${GREEN}NVIDIA driver installed from backports. Reboot required.${NC}"
}
# -------------------------------------------------------------------
# CASE C: Kernel stable (any distro) → Debian stable, optional backports
# -------------------------------------------------------------------
_install_nvidia_standard() {
local nv_pkg=""
local use_bpo=false
local is_kepler
is_kepler=$(is_nvidia_kepler)
if [ "$is_kepler" = "true" ]; then
if [ "$DEBIAN_CODENAME" = "trixie" ]; then
_msg "NVIDIA Kepler" \
"Your GPU is NVIDIA Kepler architecture.\n\nThe nvidia-tesla-470 driver is not available\nin Debian 13 (Trixie).\n\nOptions:\n 1. Use Debian 12 (Bookworm) with nvidia-tesla-470\n 2. Use open-source Nouveau driver (limited)\n\nNo NVIDIA driver will be installed." 14 65
return 1
fi
nv_pkg="nvidia-tesla-470-driver"
echo -e "${YELLOW}Kepler GPU detected. Will use ${nv_pkg}.${NC}"
else
local nd_ver
nd_ver=$(apt-cache policy nvidia-detect 2>/dev/null | awk 'NR==3 {print $2; exit}')
if _confirm "NVIDIA Detect" "Install nvidia-detect to determine the correct driver?\n\n nvidia-detect ${nd_ver:-unknown}" 12 70; then
_run_cmd "NVIDIA" "sudo apt install -y nvidia-detect" "Installing nvidia-detect..."
else
echo "Skipping NVIDIA driver detection."
return 0
fi
local recommended
recommended=$(nvidia-detect 2>/dev/null | grep -oP 'nvidia[\w-]+(?= package)')
if [ -z "$recommended" ]; then
echo -e "${RED}nvidia-detect could not determine a suitable driver.${NC}"
return 1
fi
if [[ "$recommended" =~ legacy-390|legacy-340 ]]; then
echo -e "${RED}Your GPU requires $recommended, which is not available.${NC}"
return 1
fi
nv_pkg="$recommended"
fi
# Check for backports (optional, if repo enabled)
local stable_nv_ver
stable_nv_ver=$(apt-cache policy "$nv_pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}')
if [ "$(is_backports_enabled)" == "true" ]; then
local bpo_nv_ver
bpo_nv_ver=$(apt-cache madison "$nv_pkg" 2>/dev/null | \
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
if [ -n "$bpo_nv_ver" ]; then
local msg="Source: Debian ${DEBIAN_CODENAME^} (Backports available)\n"
msg+="NVIDIA Driver: ${nv_pkg}\n\n"
msg+=" Backports: ${bpo_nv_ver}\n"
msg+=" Stable: ${stable_nv_ver:-unknown}\n\n"
msg+="Choose version:"
if _confirm_custom "NVIDIA Driver" "$msg" "Backports" "Stable" 14 70; then
use_bpo=true
fi
fi
fi
local src_label="Debian ${DEBIAN_CODENAME^} Stable"
$use_bpo && src_label="Debian ${DEBIAN_CODENAME^}-Backports"
local msg="Source: ${src_label}\n"
msg+="NVIDIA Driver: ${nv_pkg} ${stable_nv_ver:-unknown}\n"
msg+="[+] firmware-misc-nonfree\n"
msg+="[+] nvidia-vaapi-driver\n"
msg+="[+] mesa-vdpau-drivers"
if ! _confirm "NVIDIA Driver" "$msg" 14 70; then
echo "Skipping NVIDIA driver installation."
return 0
fi
local extra_pkgs="firmware-misc-nonfree nvidia-vaapi-driver mesa-vdpau-drivers"
if $use_bpo; then
_run_cmd "NVIDIA" "sudo apt install -y -t ${DEBIAN_CODENAME}-backports $nv_pkg $extra_pkgs" \
"Installing NVIDIA driver from backports..."
NVIDIA_DRIVER_MODE="backports"
else
_run_cmd "NVIDIA" "sudo apt install -y $nv_pkg $extra_pkgs" \
"Installing NVIDIA driver from stable..."
NVIDIA_DRIVER_MODE="stable"
fi
echo -e "${GREEN}NVIDIA driver installed. Reboot required.${NC}"
}
+57 -7
View File
@@ -32,8 +32,33 @@ check_sudo() {
} }
# -------------------------------- # --------------------------------
# Time sync before network ops # Time sync detection + NTP
# -------------------------------- # --------------------------------
check_system_time() {
if ! command -v timedatectl &> /dev/null; then
return
fi
local year
year=$(date +%Y)
if [ "$year" -lt 2024 ]; then
echo -e "${YELLOW}System date appears incorrect: $(date '+%Y-%m-%d %H:%M')${NC}"
echo -e "${YELLOW}This can cause apt update to fail with sync/GPG errors.${NC}"
if _confirm "System Date" "The system date is set to $(date '+%Y-%m-%d %H:%M'),\nwhich is before 2024.\n\nSync time via NTP?"; then
sudo timedatectl set-ntp true 2>/dev/null || true
echo -e "${YELLOW}Waiting a few seconds for time sync...${NC}"
sleep 5
local new_year
new_year=$(date +%Y)
if [ "$new_year" -ge 2024 ]; then
echo -e "${GREEN}Time synced: $(date '+%Y-%m-%d %H:%M')${NC}"
else
echo -e "${RED}Could not sync time automatically.${NC}"
echo "You may need to set it manually: sudo date --set \"YYYY-MM-DD HH:MM:SS\""
fi
fi
fi
}
sync_system_time() { sync_system_time() {
if command -v timedatectl &> /dev/null; then if command -v timedatectl &> /dev/null; then
local ntp_active local ntp_active
@@ -41,7 +66,7 @@ sync_system_time() {
if [ "$ntp_active" != "yes" ]; then if [ "$ntp_active" != "yes" ]; then
echo -e "${YELLOW}NTP not active. Attempting to enable time sync...${NC}" echo -e "${YELLOW}NTP not active. Attempting to enable time sync...${NC}"
sudo timedatectl set-ntp true 2>/dev/null || true sudo timedatectl set-ntp true 2>/dev/null || true
sleep 2 sleep 3
fi fi
elif command -v hwclock &> /dev/null && command -v ntpd &> /dev/null; then elif command -v hwclock &> /dev/null && command -v ntpd &> /dev/null; then
sudo hwclock --hctosys 2>/dev/null || true sudo hwclock --hctosys 2>/dev/null || true
@@ -93,6 +118,19 @@ get_ram_summary() {
echo "$RAM_SUMMARY" echo "$RAM_SUMMARY"
} }
# ----------------------------------
# Check if running backports kernel
# ----------------------------------
is_backports_kernel() {
local kver
kver=$(uname -r)
if echo "$kver" | grep -q 'bpo'; then
echo true
else
echo false
fi
}
# ---------------------------------- # ----------------------------------
# Package installed check # Package installed check
# ---------------------------------- # ----------------------------------
@@ -249,6 +287,7 @@ is_backports_enabled() {
install_backports_or_stable() { install_backports_or_stable() {
local pkg="$1" local pkg="$1"
local pkg_desc="${2:-$pkg}"
local bpo_ver="" local bpo_ver=""
if [ "$(is_backports_enabled)" == true ]; then if [ "$(is_backports_enabled)" == true ]; then
@@ -275,19 +314,18 @@ install_backports_or_stable() {
if [ -n "$bpo_ver" ]; then if [ -n "$bpo_ver" ]; then
local stable_ver local stable_ver
stable_ver=$(apt-cache policy "$pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}') stable_ver=$(apt-cache policy "$pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}')
if _confirm_custom "${pkg}" "Install from backports?\n\nBackports: ${bpo_ver}\nStable: ${stable_ver:-N/A}" "Backports" "Stable"; then if _confirm_custom "${pkg}" "Install ${pkg_desc}?\n\n Backports: ${bpo_ver} (newer, recommended for gaming/newer HW)\n Stable: ${stable_ver:-N/A}\n\nChoose version:" "Backports" "Stable"; then
_run_cmd "Backports" \ _run_cmd "Backports" \
"sudo DEBIAN_FRONTEND=noninteractive apt install -y -t ${DEBIAN_CODENAME}-backports $pkg" \ "sudo DEBIAN_FRONTEND=noninteractive apt install -y -t ${DEBIAN_CODENAME}-backports $pkg" \
"Installing $pkg from backports..." "Installing $pkg from backports..."
return return
fi fi
# User chose "Stable" — install stable directly, no re-prompt
_run_cmd "APT" "sudo DEBIAN_FRONTEND=noninteractive apt install -y $pkg" "Installing $pkg from stable..." _run_cmd "APT" "sudo DEBIAN_FRONTEND=noninteractive apt install -y $pkg" "Installing $pkg from stable..."
return return
fi fi
local stable_ver local stable_ver
stable_ver=$(apt-cache policy "$pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}') stable_ver=$(apt-cache policy "$pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}')
if _confirm "Install: ${pkg}" "Install ${pkg} ${stable_ver:-} from stable?"; then if _confirm "Install: ${pkg}" "Install ${pkg} ${stable_ver:-}?"; then
_run_cmd "APT" "sudo DEBIAN_FRONTEND=noninteractive apt install -y $pkg" "Installing $pkg..." _run_cmd "APT" "sudo DEBIAN_FRONTEND=noninteractive apt install -y $pkg" "Installing $pkg..."
fi fi
} }
@@ -297,15 +335,17 @@ install_backports_or_stable() {
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
_confirm() { _confirm() {
whiptail --title "$1" --yes-button "Execute" --no-button "Skip" \ whiptail --title "$1" --yes-button "Yes" --no-button "No" \
--yesno "$2" "${3:-10}" "${4:-65}" --yesno "$2" "${3:-10}" "${4:-65}"
} }
_confirm_custom() { _confirm_custom() {
local title="$1" text="$2" yes_btn="$3" no_btn="$4" local title="$1" text="$2" yes_btn="$3" no_btn="$4"
shift 4 shift 4
local height="${1:-20}"
local width="${2:-78}"
whiptail --title "$title" --yes-button "$yes_btn" --no-button "$no_btn" \ whiptail --title "$title" --yes-button "$yes_btn" --no-button "$no_btn" \
--yesno "$text" "${@:-10 65}" --yesno "$text" "$height" "$width"
} }
_msg() { _msg() {
@@ -365,6 +405,16 @@ _run_install_batch() {
fi fi
} }
_run_install_pkg() {
local pkg="$1"
local ver
ver=$(apt-cache policy "$pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}')
[ -z "$ver" ] && ver="(unknown)"
if _confirm "Install: ${pkg}" "Package: ${pkg}\nVersion: ${ver}\n\nProceed with installation?"; then
_run_cmd "Install" "sudo DEBIAN_FRONTEND=noninteractive apt install -y $pkg" "Installing $pkg..."
fi
}
get_backports_kernel_version() { get_backports_kernel_version() {
local ver local ver
ver=$(apt-cache policy linux-image-amd64 2>/dev/null | \ ver=$(apt-cache policy linux-image-amd64 2>/dev/null | \