mirror of
https://github.com/stornic56/debianito-post-install.git
synced 2026-07-16 05:49:49 +00:00
Broadcom, Utils & Headless Fixes
- Removed dead Broadcom hardware IDs (4357/4358/4360/4727) from `_is_broadcom_b43`, retaining only valid ID 4352 to eliminate false positives in the case statement. - Added a guard in `_handle_wireless` Level 3 to verify `linux-headers` availability via `apt-cache policy`. Skips DKMS compilation if headers are missing, preventing transaction failures during installation. - Implemented Broadcom combo card detection (WiFi + Bluetooth) by scanning `PCI_BT_DEVS`. Automatically writes `/etc/modprobe.d/broadcom-combo.conf` with `softdep wl post: btusb` and warns users about potential reboot requirements. - Enhanced Level 2 (`firmware-b43-installer`) with post-installation validation for `/lib/firmware/b43`. Provides clear recovery instructions via `sudo dpkg-reconfigure firmware-b43-installer` if the directory is empty or missing after installation. - Created a new helper `_msg_red()` in `utils.sh` to handle critical error messages with colored Whiptail output, replacing standard alerts for migration warnings and failures. - Updated `repos/migrate.sh` to use `_msg_red()` for branch migration warnings and failure states, ensuring visibility of critical issues while keeping completion messages informative. - Verified headless mode guards across 16 separate extras files (`office.sh`, `fetch.sh`, `cursors.sh`, etc.), preventing unnecessary package installations on servers without display environments. - Completed syntax verification (`bash -n`) across all core and extra modules, ensuring no errors in the updated logic for firmware, gaming, swap, or repository management scripts. - update readme.md
This commit is contained in:
@@ -50,15 +50,17 @@ After running the script:
|
|||||||
| **1** | [System Info](/docs/system_info.md) | Show detected OS, CPU, RAM, GPU and hardware details |
|
| **1** | [System Info](/docs/system_info.md) | Show detected OS, CPU, RAM, GPU and hardware details |
|
||||||
| **2** | [User Privileges & Feedback](/docs/user_priv_feed.md) | Configure sudo group membership, enable passwordless sudo for frequent tasks, repair home directory ownership issues, and toggle visual password feedback (asterisks) in terminal |
|
| **2** | [User Privileges & Feedback](/docs/user_priv_feed.md) | 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](/docs/repos_config.md) | Setup official repos with non-free/contrib options, optional Backports support and Deb822/classic format injection.|
|
| **3** | [Configure Repositories](/docs/repos_config.md) | Setup official repos with non-free/contrib options, optional Backports support and Deb822/classic format injection.|
|
||||||
| **4** | [Firmware & Wireless Drivers](/docs/firmware.md) | Install essential firmware for GPUs and wireless|
|
| **4** | [Firmware, Wireless & Bluetooth](/docs/firmware.md) | Install essential firmware for GPUs and wireless|
|
||||||
| **5** | [Graphics Drivers & Mesa Stack](/docs/gpu.md) | Configure AMD/Intel/NVIDIA drivers and Mesa graphics stack + monitoring tools |
|
| **5** | [Graphics Drivers & Mesa Stack](/docs/gpu.md) | Configure AMD/Intel/NVIDIA drivers and Mesa graphics stack + monitoring tools |
|
||||||
| **6** | [Backports Kernel](/docs/kernel.md) | Install latest kernel from Debian backports|
|
| **6** | [Backports Kernel](/docs/kernel.md) | Install latest kernel from Debian backports|
|
||||||
| **7** | [Gaming Setup and Performance](/docs/gaming.md)| Steam, Heroic Games Launcher, [RetroArch](/docs/retroarch.md) GameMode, MangoHud, OpenRGB, Java JRE (Temurin 8/17/21) |
|
| **7** | [Gaming Setup ](/docs/gaming.md)| Steam, Heroic Games Launcher, [RetroArch](/docs/retroarch.md) GameMode, MangoHud, OpenRGB, Java JRE (Temurin 8/17/21) |
|
||||||
| **8** | [Install ZRAM](/docs/zram.md)| Configure compressed RAM for memory optimization|
|
| **8** | [ZRAM](/docs/zram.md)| Configure compressed RAM for memory optimization|
|
||||||
| **9** | Install Programs and Software | Selection from several categories (Development, Themes, System, etc.) |
|
| **9** | Swap Management| Manage swap file or partition size and enable/disable swap space for system stability|
|
||||||
| **10** | Exit | Return to terminal |
|
| **10** | Install Programs and Software | Browse and install packages by category (Development, Themes, System Tools, etc.) using APT |
|
||||||
|
| **11** | Boot Rescue & Repair| Fix GRUB bootloader issues, chroot repair, or restore system boot configuration|
|
||||||
|
| **12** | Exit | Return to terminal |
|
||||||
|
|
||||||
### Install Programs and Software (Option 9)
|
### Install Programs and Software (Option 10)
|
||||||
|
|
||||||
The submenu offers the next categories:
|
The submenu offers the next categories:
|
||||||
|
|
||||||
@@ -67,7 +69,7 @@ The submenu offers the next categories:
|
|||||||
| **0** | Essential Pack | Quick install of common tools (compression, system info, VLC, MS fonts)|
|
| **0** | Essential Pack | Quick install of common tools (compression, system info, VLC, MS fonts)|
|
||||||
| **1** | Customization System | Desktop themes, icon themes, cursor themes, and fonts |
|
| **1** | Customization System | Desktop themes, icon themes, cursor themes, and fonts |
|
||||||
| **2** | Download & Network | Downloaders (aria2, ytdlp, FileZilla) + Torrent clients (qBittorrent, Deluge, Transmission) |
|
| **2** | Download & Network | Downloaders (aria2, ytdlp, FileZilla) + Torrent clients (qBittorrent, Deluge, Transmission) |
|
||||||
| **3** | Internet (Browsers, Email Clients, VPN Tools) | Web browsers (Firefox/Mozilla, LibreWolf, Floorp, Chromium, Brave, Tor), email clients (Thunderbird), and VPN tools including Riseup |
|
| **3** | Internet (Browsers, Email Clients, VPN) | Web browsers (Firefox/Mozilla, LibreWolf, Floorp, Chromium, Brave, Tor), email client (Thunderbird), and VPN tools (RiseUp, Proton, Mullvad)|
|
||||||
| **4** | Media Players | Multimedia playback with VLC media player and MPV for advanced video/audio support |
|
| **4** | Media Players | Multimedia playback with VLC media player and MPV for advanced video/audio support |
|
||||||
| **5** | Multimedia & Design | image editing (GIMP), video editing (Kdenlive, HandBrake), 3D modeling (Blender), audio recording (Audacity), and graphics design (Inkscape) |
|
| **5** | Multimedia & Design | image editing (GIMP), video editing (Kdenlive, HandBrake), 3D modeling (Blender), audio recording (Audacity), and graphics design (Inkscape) |
|
||||||
| **6** | Code Editors & IDEs | vim, vim-gtk3, Neovim, Helix, nano, Emacs, Kate, Mousepad, Gedit, Geany, GNOME Text Editor, and VSCodium (VS Code open-source) |
|
| **6** | Code Editors & IDEs | vim, vim-gtk3, Neovim, Helix, nano, Emacs, Kate, Mousepad, Gedit, Geany, GNOME Text Editor, and VSCodium (VS Code open-source) |
|
||||||
@@ -84,9 +86,42 @@ The submenu offers the next categories:
|
|||||||
|
|
||||||
| 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, kernel, gaming, zram. |
|
| `docs/` | Documentation directory containing Markdown files for each module. |
|
||||||
| `/modules/extras/` | Split-by-category sub-modules for the "Install Programs and Software" menu (Option 9). |
|
| `modules/` | Core modular scripts organized by category: repos, gpu, gaming, kernel, firmware, zram, etc. |
|
||||||
|
| `modules/bullseye/` | Legacy Debian 11 (Bullseye) specific modules: `extras.sh`, `legacy.sh`, `repos.sh`. |
|
||||||
|
| `modules/extras/` | Software installer sub-modules split by category (themes, downloaders, internet, dev tools, etc.). |
|
||||||
|
| `modules/gaming/` | Gaming launcher and optimization scripts: Steam, Heroic, Lutris, performance tools. |
|
||||||
|
| `modules/gpu/` | GPU driver installation scripts for AMD and NVIDIA with architecture detection. |
|
||||||
|
| `modules/repos/` | Repository management scripts: migration tool (`migrate.sh`) and format detection (`repo_detect.sh`). |
|
||||||
|
| `modules/extras/design/` | Multimedia & design tools installer (Blender, GIMP, Kdenlive, OBS). |
|
||||||
|
| `modules/extras/dev/` | Development tools installer with special handling for Jellyfin and Java. |
|
||||||
|
| `modules/extras/download/` | Download tools installer (aria2, FileZilla) and torrent clients (qBittorrent, Transmission). |
|
||||||
|
| `modules/extras/essential/` | Essential package installer for basic system utilities on older Debian versions. |
|
||||||
|
| `modules/extras/fetch/` | System information fetcher tools (neofetch, screenfetch, linuxlogo). |
|
||||||
|
| `modules/extras/internet/` | Internet tools installer: browsers, email clients, download managers. |
|
||||||
|
| `modules/extras/java.sh` | Java runtime installer for Minecraft and development (Temurin 8/17/21). |
|
||||||
|
| `modules/extras/office/` | Office productivity suite installer (LibreOffice, GIMP alternatives). |
|
||||||
|
| `modules/extras/players/` | Media player installer (MPV, VLC) with codec support. |
|
||||||
|
| `modules/extras/programming/` | Code editors and IDEs installer (Vim, Neovim, Emacs, Kate). |
|
||||||
|
| `modules/extras/security/` | Security tools installer: ClamAV, Fail2Ban, UFW, Wireshark. |
|
||||||
|
| `modules/extras/system/` | System utilities installer with software center options (GNOME Software, Discover). |
|
||||||
|
| `modules/extras/themes/` | Desktop customization installer: themes, icons, cursors, fonts. |
|
||||||
|
| `modules/gaming/_helpers.sh` | Shared helper functions for gaming modules (32-bit support, Mesa drivers). |
|
||||||
|
| `modules/gpu/amd_intel.sh` | AMD and Intel GPU firmware + monitoring tools (radeontop, nvtop, vainfo). |
|
||||||
|
| `modules/gpu/_helpers.sh` | Shared helper functions for GPU detection (NVIDIA architecture checks). |
|
||||||
|
| `modules/nvidia.sh` | NVIDIA driver installer with multi-architecture support (Kepler, Fermi, Maxwell, Pascal, Blackwell). |
|
||||||
|
| `modules/amd_intel.sh` | AMD and Intel GPU firmware + monitoring tools installation. |
|
||||||
|
| `modules/kernel.sh` | Kernel management: backports kernel installation and detection. |
|
||||||
|
| `modules/repos/migrate.sh` | Branch migration tool for Debian stable → testing/SID with backup/rollback. |
|
||||||
|
| `modules/repos/repo_detect.sh` | Repository format detection (DEB822 vs classic) for idempotent configuration. |
|
||||||
|
| `modules/rescue.sh` | Boot rescue and repair tools: GRUB fix, chroot repair, system restore. |
|
||||||
|
| `modules/sudo_config.sh` | Sudo configuration: group membership, passwordless sudo, home directory ownership. |
|
||||||
|
| `modules/swap.sh` | Swap management: file/partition size configuration and enable/disable swap space. |
|
||||||
|
| `modules/sysinfo.sh` | System information detection and display (OS, CPU, RAM, GPU, storage). |
|
||||||
|
| `modules/utils.sh` | Utility functions shared across modules (color codes, confirmation dialogs, installation helpers). |
|
||||||
|
| `modules/zram.sh` | ZRAM configuration for compressed RAM optimization. |
|
||||||
|
| `README.md` | Project documentation and usage instructions. |
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
├── debianito.sh
|
├── debianito.sh
|
||||||
@@ -158,15 +193,17 @@ The submenu offers the next categories:
|
|||||||
│ ├── gpu.sh
|
│ ├── gpu.sh
|
||||||
│ ├── kernel.sh
|
│ ├── kernel.sh
|
||||||
│ ├── repos
|
│ ├── repos
|
||||||
|
│ │ ├── migrate.sh
|
||||||
│ │ └── repo_detect.sh
|
│ │ └── repo_detect.sh
|
||||||
│ ├── repos.sh
|
│ ├── repos.sh
|
||||||
|
│ ├── rescue.sh
|
||||||
│ ├── sudo_config.sh
|
│ ├── sudo_config.sh
|
||||||
|
│ ├── swap.sh
|
||||||
│ ├── sysinfo.sh
|
│ ├── sysinfo.sh
|
||||||
│ ├── utils.sh
|
│ ├── utils.sh
|
||||||
│ └── zram.sh
|
│ └── zram.sh
|
||||||
└── README.md
|
└── README.md
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> 🤖 **AI-Assisted Development Note**
|
> 🤖 **AI-Assisted Development Note**
|
||||||
|
|||||||
+10
-2
@@ -51,6 +51,8 @@ main_menu() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
|
sudo -v >/dev/null 2>&1 || true
|
||||||
|
local STATE_REFRESHED=false
|
||||||
local choice
|
local choice
|
||||||
choice=$(_menu "DEBIANITO — simple configurator script" "" \
|
choice=$(_menu "DEBIANITO — simple configurator script" "" \
|
||||||
$TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
$TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
||||||
@@ -78,6 +80,7 @@ main_menu() {
|
|||||||
else
|
else
|
||||||
configure_repos || true
|
configure_repos || true
|
||||||
fi
|
fi
|
||||||
|
STATE_REFRESHED=true
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
if [ "$DEBIAN_VERSION" = "11" ] && type install_firmware_bullseye &>/dev/null; then
|
if [ "$DEBIAN_VERSION" = "11" ] && type install_firmware_bullseye &>/dev/null; then
|
||||||
@@ -86,7 +89,7 @@ main_menu() {
|
|||||||
install_firmware || true
|
install_firmware || true
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
5) install_gpu_drivers || true ;;
|
5) install_gpu_drivers || true; STATE_REFRESHED=true ;;
|
||||||
6)
|
6)
|
||||||
if [ "$DEBIAN_VERSION" = "11" ]; then
|
if [ "$DEBIAN_VERSION" = "11" ]; then
|
||||||
_msg "Not Available" \
|
_msg "Not Available" \
|
||||||
@@ -96,6 +99,7 @@ kernels. Use the stable kernel provided by Bullseye." 10 60
|
|||||||
else
|
else
|
||||||
install_kernel_backports || true
|
install_kernel_backports || true
|
||||||
fi
|
fi
|
||||||
|
STATE_REFRESHED=true
|
||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
if [ "$DEBIAN_VERSION" = "11" ] && type install_gaming_bullseye &>/dev/null; then
|
if [ "$DEBIAN_VERSION" = "11" ] && type install_gaming_bullseye &>/dev/null; then
|
||||||
@@ -103,9 +107,10 @@ kernels. Use the stable kernel provided by Bullseye." 10 60
|
|||||||
else
|
else
|
||||||
install_gaming || true
|
install_gaming || true
|
||||||
fi
|
fi
|
||||||
|
STATE_REFRESHED=true
|
||||||
;;
|
;;
|
||||||
8) install_zram || true ;;
|
8) install_zram || true ;;
|
||||||
9) manage_swap || true ;;
|
9) manage_swap || true; STATE_REFRESHED=true ;;
|
||||||
10)
|
10)
|
||||||
if [ "$DEBIAN_VERSION" = "11" ] && type install_extras_bullseye &>/dev/null; then
|
if [ "$DEBIAN_VERSION" = "11" ] && type install_extras_bullseye &>/dev/null; then
|
||||||
install_extras_bullseye || true
|
install_extras_bullseye || true
|
||||||
@@ -116,6 +121,9 @@ kernels. Use the stable kernel provided by Bullseye." 10 60
|
|||||||
11) rescue_boot || true ;;
|
11) rescue_boot || true ;;
|
||||||
12) echo "Exiting."; exit 0 ;;
|
12) echo "Exiting."; exit 0 ;;
|
||||||
esac
|
esac
|
||||||
|
if $STATE_REFRESHED; then
|
||||||
|
refresh_system_state
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,11 @@
|
|||||||
_cat_design() {
|
_cat_design() {
|
||||||
local headless=false
|
local headless=false
|
||||||
_is_headless && headless=true
|
_is_headless && headless=true
|
||||||
|
local -a items=()
|
||||||
|
if ! $headless; then
|
||||||
local audacity_state; audacity_state=$(_state "audacity")
|
local audacity_state; audacity_state=$(_state "audacity")
|
||||||
local ardour_state; ardour_state=$(_state "ardour")
|
local ardour_state; ardour_state=$(_state "ardour")
|
||||||
local blender_state; blender_state=$(_state "blender")
|
local blender_state; blender_state=$(_state "blender")
|
||||||
local ffmpeg_state; ffmpeg_state=$(_state "ffmpeg")
|
|
||||||
local gimp_state; gimp_state=$(_state "gimp")
|
local gimp_state; gimp_state=$(_state "gimp")
|
||||||
local handbrake_state; handbrake_state=$(_state "handbrake")
|
local handbrake_state; handbrake_state=$(_state "handbrake")
|
||||||
local inkscape_state; inkscape_state=$(_state "inkscape")
|
local inkscape_state; inkscape_state=$(_state "inkscape")
|
||||||
@@ -17,34 +18,32 @@ _cat_design() {
|
|||||||
local openshot_state; openshot_state=$(_state "openshot-qt")
|
local openshot_state; openshot_state=$(_state "openshot-qt")
|
||||||
local scribus_state; scribus_state=$(_state "scribus")
|
local scribus_state; scribus_state=$(_state "scribus")
|
||||||
local shotcut_state; shotcut_state=$(_state "shotcut")
|
local shotcut_state; shotcut_state=$(_state "shotcut")
|
||||||
|
items+=(
|
||||||
|
"audacity" "Audio editor/recorder$(_inst audacity)" "$audacity_state"
|
||||||
|
"ardour" "Digital audio workstation$(_inst ardour)" "$ardour_state"
|
||||||
|
"blender" "3D modeling/animation suite$(_inst blender)" "$blender_state"
|
||||||
|
"gimp" "Image editor (Photoshop alternative)$(_inst gimp)" "$gimp_state"
|
||||||
|
"handbrake" "Video transcoder (DVD ripper)$(_inst handbrake)" "$handbrake_state"
|
||||||
|
"inkscape" "Vector graphics editor$(_inst inkscape)" "$inkscape_state"
|
||||||
|
"kdenlive" "Video editor (KDE)$(_inst kdenlive)" "$kdenlive_state"
|
||||||
|
"krita" "Digital painting/illustration$(_inst krita)" "$krita_state"
|
||||||
|
"obs-studio" "Screen recording/streaming$(_inst obs-studio)" "$obs_state"
|
||||||
|
"openshot-qt" "Video editor (simple)$(_inst openshot-qt)" "$openshot_state"
|
||||||
|
"scribus" "Desktop publishing (DTP)$(_inst scribus)" "$scribus_state"
|
||||||
|
"shotcut" "Video editor (cross-platform)$(_inst shotcut)" "$shotcut_state"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
local ffmpeg_state; ffmpeg_state=$(_state "ffmpeg")
|
||||||
|
items+=("ffmpeg" "Multimedia framework (CLI)$(_inst ffmpeg)" "$ffmpeg_state")
|
||||||
|
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Multimedia & Design" "Select multimedia and design tools${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
choices=$(_checklist "Multimedia & Design" "Select multimedia and design tools${SCROLL_HINT}:" \
|
||||||
"audacity" "Audio editor/recorder$(_inst audacity)" "$audacity_state" \
|
$TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA "${items[@]}")
|
||||||
"ardour" "Digital audio workstation$(_inst ardour)" "$ardour_state" \
|
|
||||||
"blender" "3D modeling/animation suite$(_inst blender)" "$blender_state" \
|
|
||||||
"ffmpeg" "Multimedia framework (CLI)$(_inst ffmpeg)" "$ffmpeg_state" \
|
|
||||||
"gimp" "Image editor (Photoshop alternative)$(_inst gimp)" "$gimp_state" \
|
|
||||||
"handbrake" "Video transcoder (DVD ripper)$(_inst handbrake)" "$handbrake_state" \
|
|
||||||
"inkscape" "Vector graphics editor$(_inst inkscape)" "$inkscape_state" \
|
|
||||||
"kdenlive" "Video editor (KDE)$(_inst kdenlive)" "$kdenlive_state" \
|
|
||||||
"krita" "Digital painting/illustration$(_inst krita)" "$krita_state" \
|
|
||||||
"obs-studio" "Screen recording/streaming$(_inst obs-studio)" "$obs_state" \
|
|
||||||
"openshot-qt" "Video editor (simple)$(_inst openshot-qt)" "$openshot_state" \
|
|
||||||
"scribus" "Desktop publishing (DTP)$(_inst scribus)" "$scribus_state" \
|
|
||||||
"shotcut" "Video editor (cross-platform)$(_inst shotcut)" "$shotcut_state" \
|
|
||||||
)
|
|
||||||
clear
|
clear
|
||||||
|
|
||||||
[ -z "$choices" ] && return
|
[ -z "$choices" ] && return
|
||||||
|
|
||||||
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
|
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
|
||||||
|
|
||||||
for pkg in $cleaned; do
|
for pkg in $cleaned; do
|
||||||
if $headless; then
|
|
||||||
echo "Skipping $pkg (headless mode)"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if ! is_installed "$pkg"; then
|
if ! is_installed "$pkg"; then
|
||||||
_run_install "$pkg"
|
_run_install "$pkg"
|
||||||
else
|
else
|
||||||
|
|||||||
+19
-15
@@ -4,6 +4,7 @@
|
|||||||
_cat_dev() {
|
_cat_dev() {
|
||||||
local headless=false
|
local headless=false
|
||||||
_is_headless && headless=true
|
_is_headless && headless=true
|
||||||
|
local -a items=()
|
||||||
local apache_state; apache_state=$(_state "apache2")
|
local apache_state; apache_state=$(_state "apache2")
|
||||||
local build_state; build_state=$(_state "build-essential")
|
local build_state; build_state=$(_state "build-essential")
|
||||||
local certbot_state; certbot_state=$(_state "certbot")
|
local certbot_state; certbot_state=$(_state "certbot")
|
||||||
@@ -19,25 +20,28 @@ _cat_dev() {
|
|||||||
local sqlite_state; sqlite_state=$(_state "sqlite3")
|
local sqlite_state; sqlite_state=$(_state "sqlite3")
|
||||||
local jdk_desc; jdk_desc=$(_any_jdk_installed_desc)
|
local jdk_desc; jdk_desc=$(_any_jdk_installed_desc)
|
||||||
local jdk_state; jdk_state=$(_any_jdk_state)
|
local jdk_state; jdk_state=$(_any_jdk_state)
|
||||||
|
items+=(
|
||||||
|
"apache2" "Apache web server$(_inst apache2)" "$apache_state"
|
||||||
|
"build-essential" "C/C++ build tools (gcc, make)$(_inst build-essential)" "$build_state"
|
||||||
|
"certbot" "Let's Encrypt TLS certificates$(_inst certbot)" "$certbot_state"
|
||||||
|
"docker" "Docker + docker-compose$(_inst docker.io)" "$docker_state"
|
||||||
|
"mariadb-server" "MariaDB database server$(_inst mariadb-server)" "$mariadb_state"
|
||||||
|
"netcat-openbsd" "TCP/IP networking utility$(_inst netcat-openbsd)" "$netcat_state"
|
||||||
|
"nginx" "Nginx web server$(_inst nginx)" "$nginx_state"
|
||||||
|
"openssh-server" "SSH server$(_inst openssh-server)" "$ssh_state"
|
||||||
|
"openssl" "OpenSSL cryptography toolkit$(_inst openssl)" "$openssl_state"
|
||||||
|
"postgresql" "PostgreSQL database server$(_inst postgresql)" "$pg_state"
|
||||||
|
"python3-pip" "Python 3 pip + venv + dev$(_inst python3-pip)" "$pip_state"
|
||||||
|
"redis-server" "Redis key-value store$(_inst redis-server)" "$redis_state"
|
||||||
|
"sqlite3" "SQLite database engine$(_inst sqlite3)" "$sqlite_state"
|
||||||
|
"jellyfin" "Jellyfin Media Server (Web GUI on port 8096)$(_inst jellyfin)" OFF
|
||||||
|
"openjdk-dev-env" "Adoptium Temurin JDK (17, 21, 25 LTS)${jdk_desc}" "${jdk_state}"
|
||||||
|
)
|
||||||
|
|
||||||
local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6))
|
local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Development & Servers" "Select development tools and servers${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \
|
choices=$(_checklist "Development & Servers" "Select development tools and servers${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \
|
||||||
"apache2" "Apache web server$(_inst apache2)" "$apache_state" \
|
"${items[@]}" \
|
||||||
"build-essential" "C/C++ build tools (gcc, make)$(_inst build-essential)" "$build_state" \
|
|
||||||
"certbot" "Let's Encrypt TLS certificates$(_inst certbot)" "$certbot_state" \
|
|
||||||
"docker" "Docker + docker-compose$(_inst docker.io)" "$docker_state" \
|
|
||||||
"mariadb-server" "MariaDB database server$(_inst mariadb-server)" "$mariadb_state" \
|
|
||||||
"netcat-openbsd" "TCP/IP networking utility$(_inst netcat-openbsd)" "$netcat_state" \
|
|
||||||
"nginx" "Nginx web server$(_inst nginx)" "$nginx_state" \
|
|
||||||
"openssh-server" "SSH server$(_inst openssh-server)" "$ssh_state" \
|
|
||||||
"openssl" "OpenSSL cryptography toolkit$(_inst openssl)" "$openssl_state" \
|
|
||||||
"postgresql" "PostgreSQL database server$(_inst postgresql)" "$pg_state" \
|
|
||||||
"python3-pip" "Python 3 pip + venv + dev$(_inst python3-pip)" "$pip_state" \
|
|
||||||
"redis-server" "Redis key-value store$(_inst redis-server)" "$redis_state" \
|
|
||||||
"sqlite3" "SQLite database engine$(_inst sqlite3)" "$sqlite_state" \
|
|
||||||
"jellyfin" "Jellyfin Media Server (Web GUI on port 8096)$(_inst jellyfin)" OFF \
|
|
||||||
"openjdk-dev-env" "Adoptium Temurin JDK (17, 21, 25 LTS)${jdk_desc}" "${jdk_state}" \
|
|
||||||
)
|
)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
|
|||||||
@@ -4,40 +4,53 @@
|
|||||||
_cat_download() {
|
_cat_download() {
|
||||||
local headless=false
|
local headless=false
|
||||||
_is_headless && headless=true
|
_is_headless && headless=true
|
||||||
|
local -a items1=()
|
||||||
|
local -a items2=()
|
||||||
local aria2_state; aria2_state=$(_state "aria2")
|
local aria2_state; aria2_state=$(_state "aria2")
|
||||||
local filezilla_state; filezilla_state=$(_state "filezilla")
|
|
||||||
local ytdlp_state; ytdlp_state=$(_state "yt-dlp")
|
local ytdlp_state; ytdlp_state=$(_state "yt-dlp")
|
||||||
local ytdlp_gui_state; ytdlp_gui_state=$(_state "youtubedl-gui")
|
|
||||||
|
|
||||||
local deluge_state; deluge_state=$(_state "deluge")
|
|
||||||
local deluged_state; deluged_state=$(_state "deluged")
|
local deluged_state; deluged_state=$(_state "deluged")
|
||||||
local mktorrent_state; mktorrent_state=$(_state "mktorrent")
|
local mktorrent_state; mktorrent_state=$(_state "mktorrent")
|
||||||
local qbit_state; qbit_state=$(_state "qbittorrent")
|
|
||||||
local qbitnox_state; qbitnox_state=$(_state "qbittorrent-nox")
|
local qbitnox_state; qbitnox_state=$(_state "qbittorrent-nox")
|
||||||
local tr_cli_state; tr_cli_state=$(_state "transmission-cli")
|
local tr_cli_state; tr_cli_state=$(_state "transmission-cli")
|
||||||
|
items1+=(
|
||||||
|
"aria2" "Multiprotocol downloader (CLI)$(_inst aria2)" "$aria2_state"
|
||||||
|
"yt-dlp" "Video downloader CLI$(_inst yt-dlp)" "$ytdlp_state"
|
||||||
|
)
|
||||||
|
items2+=(
|
||||||
|
"deluged" "BitTorrent daemon/server$(_inst deluged)" "$deluged_state"
|
||||||
|
"mktorrent" "Torrent metainfo creator (CLI)$(_inst mktorrent)" "$mktorrent_state"
|
||||||
|
"qbittorrent-nox" "BitTorrent WebUI/CLI$(_inst qbittorrent-nox)" "$qbitnox_state"
|
||||||
|
"transmission-cli" "BitTorrent client (CLI)$(_inst transmission-cli)" "$tr_cli_state"
|
||||||
|
)
|
||||||
|
if ! $headless; then
|
||||||
|
local filezilla_state; filezilla_state=$(_state "filezilla")
|
||||||
|
local ytdlp_gui_state; ytdlp_gui_state=$(_state "youtubedl-gui")
|
||||||
|
local deluge_state; deluge_state=$(_state "deluge")
|
||||||
|
local qbit_state; qbit_state=$(_state "qbittorrent")
|
||||||
local tr_gtk_state; tr_gtk_state=$(_state "transmission-gtk")
|
local tr_gtk_state; tr_gtk_state=$(_state "transmission-gtk")
|
||||||
local tr_qt_state; tr_qt_state=$(_state "transmission-qt")
|
local tr_qt_state; tr_qt_state=$(_state "transmission-qt")
|
||||||
|
items1+=(
|
||||||
|
"filezilla" "FTP/SFTP client (GUI)$(_inst filezilla)" "$filezilla_state"
|
||||||
|
"youtubedl-gui" "GUI for yt-dlp$(_inst youtubedl-gui)" "$ytdlp_gui_state"
|
||||||
|
)
|
||||||
|
items2+=(
|
||||||
|
"deluge" "BitTorrent client (GTK)$(_inst deluge)" "$deluge_state"
|
||||||
|
"qbittorrent" "BitTorrent client (Qt)$(_inst qbittorrent)" "$qbit_state"
|
||||||
|
"transmission-gtk" "BitTorrent client (GTK)$(_inst transmission-gtk)" "$tr_gtk_state"
|
||||||
|
"transmission-qt" "BitTorrent client (Qt)$(_inst transmission-qt)" "$tr_qt_state"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6))
|
local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6))
|
||||||
local choices1 choices2=""
|
local choices1 choices2=""
|
||||||
|
|
||||||
choices1=$(_checklist "Downloaders" "Select download tools:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \
|
choices1=$(_checklist "Downloaders" "Select download tools:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \
|
||||||
"aria2" "Multiprotocol downloader (CLI)$(_inst aria2)" "$aria2_state" \
|
"${items1[@]}" \
|
||||||
"filezilla" "FTP/SFTP client (GUI)$(_inst filezilla)" "$filezilla_state" \
|
|
||||||
"yt-dlp" "Video downloader CLI$(_inst yt-dlp)" "$ytdlp_state" \
|
|
||||||
"youtubedl-gui" "GUI for yt-dlp$(_inst youtubedl-gui)" "$ytdlp_gui_state" \
|
|
||||||
)
|
)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
choices2=$(_checklist "Torrent Clients" "Select torrent clients:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
choices2=$(_checklist "Torrent Clients" "Select torrent clients:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
||||||
"deluge" "BitTorrent client (GTK)$(_inst deluge)" "$deluge_state" \
|
"${items2[@]}" \
|
||||||
"deluged" "BitTorrent daemon/server$(_inst deluged)" "$deluged_state" \
|
|
||||||
"mktorrent" "Torrent metainfo creator (CLI)$(_inst mktorrent)" "$mktorrent_state" \
|
|
||||||
"qbittorrent" "BitTorrent client (Qt)$(_inst qbittorrent)" "$qbit_state" \
|
|
||||||
"qbittorrent-nox" "BitTorrent WebUI/CLI$(_inst qbittorrent-nox)" "$qbitnox_state" \
|
|
||||||
"transmission-cli" "BitTorrent client (CLI)$(_inst transmission-cli)" "$tr_cli_state" \
|
|
||||||
"transmission-gtk" "BitTorrent client (GTK)$(_inst transmission-gtk)" "$tr_gtk_state" \
|
|
||||||
"transmission-qt" "BitTorrent client (Qt)$(_inst transmission-qt)" "$tr_qt_state" \
|
|
||||||
)
|
)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
@@ -58,10 +71,6 @@ _cat_download() {
|
|||||||
install_backports_or_stable qbittorrent-nox
|
install_backports_or_stable qbittorrent-nox
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
if $headless; then
|
|
||||||
echo "Skipping $pkg (headless mode)"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if ! is_installed "$pkg"; then
|
if ! is_installed "$pkg"; then
|
||||||
_run_install "$pkg"
|
_run_install "$pkg"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -10,12 +10,13 @@ _quick_install() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
_msg "Essential Pack" \
|
_msg "Essential Pack" \
|
||||||
"Install basic programs:\n\n - Compression (zip, unrar, 7z)\n - System tools (htop, inxi, ${fetch_pkg})\n - VLC media player\n - Microsoft fonts" 13 60
|
"Install basic programs:\n\n - Compression (zip, unrar, 7z)\n - System tools (htop, inxi, ${fetch_pkg}, $(_is_headless || echo "VLC"))\n - Microsoft fonts" 13 60
|
||||||
|
|
||||||
local quick_pkgs=(
|
local quick_pkgs=(
|
||||||
zip unzip rar unrar p7zip-full p7zip-rar
|
zip unzip rar unrar p7zip-full p7zip-rar
|
||||||
"$fetch_pkg" htop vlc inxi ttf-mscorefonts-installer
|
"$fetch_pkg" htop inxi ttf-mscorefonts-installer
|
||||||
)
|
)
|
||||||
|
_is_headless || quick_pkgs+=(vlc)
|
||||||
_run_install_batch "${quick_pkgs[@]}"
|
_run_install_batch "${quick_pkgs[@]}"
|
||||||
echo -e "${GREEN}Essential Pack installed.${NC}"
|
echo -e "${GREEN}Essential Pack installed.${NC}"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ _cat_fetch() {
|
|||||||
hyfetch_state=$(_state "hyfetch")
|
hyfetch_state=$(_state "hyfetch")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local items=()
|
local -a items=()
|
||||||
|
|
||||||
if [ "$fetch_pkg" = "fastfetch" ]; then
|
if [ "$fetch_pkg" = "fastfetch" ]; then
|
||||||
items+=("fastfetch" "System info fetcher$(_inst fastfetch)" "$fetch_state")
|
items+=("fastfetch" "System info fetcher$(_inst fastfetch)" "$fetch_state")
|
||||||
|
|||||||
@@ -117,9 +117,10 @@ install_protonvpn() {
|
|||||||
_cat_internet() {
|
_cat_internet() {
|
||||||
local headless=false
|
local headless=false
|
||||||
_is_headless && headless=true
|
_is_headless && headless=true
|
||||||
|
local -a items=()
|
||||||
|
if ! $headless; then
|
||||||
local chromium_state; chromium_state=$(_state "chromium")
|
local chromium_state; chromium_state=$(_state "chromium")
|
||||||
local dillo_state; dillo_state=$(_state "dillo")
|
local dillo_state; dillo_state=$(_state "dillo")
|
||||||
local elinks_state; elinks_state=$(_state "elinks")
|
|
||||||
local epiphany_state; epiphany_state=$(_state "epiphany-browser")
|
local epiphany_state; epiphany_state=$(_state "epiphany-browser")
|
||||||
local falkon_state; falkon_state=$(_state "falkon")
|
local falkon_state; falkon_state=$(_state "falkon")
|
||||||
local firefox_state="OFF"
|
local firefox_state="OFF"
|
||||||
@@ -134,38 +135,45 @@ _cat_internet() {
|
|||||||
local palemoon_state; palemoon_state=$(_state "palemoon")
|
local palemoon_state; palemoon_state=$(_state "palemoon")
|
||||||
local privacybrowser_state; privacybrowser_state=$(_state "privacybrowser")
|
local privacybrowser_state; privacybrowser_state=$(_state "privacybrowser")
|
||||||
local qutebrowser_state; qutebrowser_state=$(_state "qutebrowser")
|
local qutebrowser_state; qutebrowser_state=$(_state "qutebrowser")
|
||||||
local riseupvpn_state; riseupvpn_state=$(_state "riseup-vpn")
|
|
||||||
local thunderbird_state; thunderbird_state=$(_state "thunderbird")
|
local thunderbird_state; thunderbird_state=$(_state "thunderbird")
|
||||||
local torbrowser_state; torbrowser_state=$(_state "torbrowser-launcher")
|
local torbrowser_state; torbrowser_state=$(_state "torbrowser-launcher")
|
||||||
|
local mullvadbrowser_state; mullvadbrowser_state=$(_state "mullvad-browser")
|
||||||
|
local protonvpn_state; protonvpn_state=$(_state "protonvpn")
|
||||||
|
items+=(
|
||||||
|
"chromium" "Chromium web browser$(_inst chromium)" "$chromium_state"
|
||||||
|
"dillo" "Lightweight graphical browser$(_inst dillo)" "$dillo_state"
|
||||||
|
"epiphany-browser" "GNOME web browser$(_inst epiphany-browser)" "$epiphany_state"
|
||||||
|
"falkon" "KDE web browser (QtWebEngine)$(_inst falkon)" "$falkon_state"
|
||||||
|
"firefox" "Firefox from Mozilla (replaces ESR)" "$firefox_state"
|
||||||
|
"firefox-esr" "Firefox ESR (official Debian + locale auto)" "$firefox_esr_state"
|
||||||
|
"floorp" "Firefox-based browser (extrepo)$(_inst floorp)" "$floorp_state"
|
||||||
|
"konqueror" "KDE file manager / web browser$(_inst konqueror)" "$konqueror_state"
|
||||||
|
"librewolf" "Privacy-focused Firefox fork (extrepo)$(_inst librewolf)" "$librewolf_state"
|
||||||
|
"palemoon" "Classic Firefox-derived browser (extrepo)" "$palemoon_state"
|
||||||
|
"privacybrowser" "Privacy-focused web browser$(_inst privacybrowser)" "$privacybrowser_state"
|
||||||
|
"qutebrowser" "Keyboard-driven browser (Qt)$(_inst qutebrowser)" "$qutebrowser_state"
|
||||||
|
"thunderbird" "Email client$(_inst thunderbird)" "$thunderbird_state"
|
||||||
|
"torbrowser-launcher" "Tor Browser launcher$(_inst torbrowser-launcher)" "$torbrowser_state"
|
||||||
|
"mullvad-browser" "Mullvad privacy browser$(_inst mullvad-browser)" "$mullvadbrowser_state"
|
||||||
|
"protonvpn" "ProtonVPN client$(_inst protonvpn)" "$protonvpn_state"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
local elinks_state; elinks_state=$(_state "elinks")
|
||||||
|
local riseupvpn_state; riseupvpn_state=$(_state "riseup-vpn")
|
||||||
local w3m_state; w3m_state=$(_state "w3m")
|
local w3m_state; w3m_state=$(_state "w3m")
|
||||||
local tailscale_state; tailscale_state=$(_state "tailscale")
|
local tailscale_state; tailscale_state=$(_state "tailscale")
|
||||||
local mullvad_state; mullvad_state=$(_state "mullvad-vpn")
|
local mullvad_state; mullvad_state=$(_state "mullvad-vpn")
|
||||||
local mullvadbrowser_state; mullvadbrowser_state=$(_state "mullvad-browser")
|
items+=(
|
||||||
local protonvpn_state; protonvpn_state=$(_state "protonvpn")
|
"elinks" "Text-mode web browser$(_inst elinks)" "$elinks_state"
|
||||||
|
"riseup-vpn" "Riseup VPN client$(_inst riseup-vpn)" "$riseupvpn_state"
|
||||||
|
"w3m" "Text-mode browser + deps (w3m-img)$(_inst w3m)" "$w3m_state"
|
||||||
|
"tailscale" "Zero-config VPN & mesh networking$(_inst tailscale)" "$tailscale_state"
|
||||||
|
"mullvad-vpn" "Mullvad VPN client (WireGuard)$(_inst mullvad-vpn)" "$mullvad_state"
|
||||||
|
)
|
||||||
|
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Internet" "Select browsers, email, and VPN tools${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
choices=$(_checklist "Internet" "Select browsers, email, and VPN tools${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
||||||
"chromium" "Chromium web browser$(_inst chromium)" "$chromium_state" \
|
"${items[@]}" \
|
||||||
"dillo" "Lightweight graphical browser$(_inst dillo)" "$dillo_state" \
|
|
||||||
"elinks" "Text-mode web browser$(_inst elinks)" "$elinks_state" \
|
|
||||||
"epiphany-browser" "GNOME web browser$(_inst epiphany-browser)" "$epiphany_state" \
|
|
||||||
"falkon" "KDE web browser (QtWebEngine)$(_inst falkon)" "$falkon_state" \
|
|
||||||
"firefox" "Firefox from Mozilla (replaces ESR)" "$firefox_state" \
|
|
||||||
"firefox-esr" "Firefox ESR (official Debian + locale auto)" "$firefox_esr_state" \
|
|
||||||
"floorp" "Firefox-based browser (extrepo)$(_inst floorp)" "$floorp_state" \
|
|
||||||
"konqueror" "KDE file manager / web browser$(_inst konqueror)" "$konqueror_state" \
|
|
||||||
"librewolf" "Privacy-focused Firefox fork (extrepo)$(_inst librewolf)" "$librewolf_state" \
|
|
||||||
"palemoon" "Classic Firefox-derived browser (extrepo)" "$palemoon_state" \
|
|
||||||
"privacybrowser" "Privacy-focused web browser$(_inst privacybrowser)" "$privacybrowser_state" \
|
|
||||||
"qutebrowser" "Keyboard-driven browser (Qt)$(_inst qutebrowser)" "$qutebrowser_state" \
|
|
||||||
"riseup-vpn" "Riseup VPN client$(_inst riseup-vpn)" "$riseupvpn_state" \
|
|
||||||
"thunderbird" "Email client$(_inst thunderbird)" "$thunderbird_state" \
|
|
||||||
"torbrowser-launcher" "Tor Browser launcher$(_inst torbrowser-launcher)" "$torbrowser_state" \
|
|
||||||
"w3m" "Text-mode browser + deps (w3m-img)$(_inst w3m)" "$w3m_state" \
|
|
||||||
"tailscale" "Zero-config VPN & mesh networking$(_inst tailscale)" "$tailscale_state" \
|
|
||||||
"mullvad-vpn" "Mullvad VPN client (WireGuard)$(_inst mullvad-vpn)" "$mullvad_state" \
|
|
||||||
"mullvad-browser" "Mullvad privacy browser$(_inst mullvad-browser)" "$mullvadbrowser_state" \
|
|
||||||
"protonvpn" "ProtonVPN client$(_inst protonvpn)" "$protonvpn_state" \
|
|
||||||
)
|
)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
@@ -233,10 +241,6 @@ _cat_internet() {
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
if $headless; then
|
|
||||||
echo "Skipping $pkg (headless mode)"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if ! is_installed "$pkg"; then
|
if ! is_installed "$pkg"; then
|
||||||
_run_install "$pkg"
|
_run_install "$pkg"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -60,10 +60,19 @@ install_libreoffice_bpo() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_cat_office() {
|
_cat_office() {
|
||||||
|
local headless=false
|
||||||
|
_is_headless && headless=true
|
||||||
|
local -a items=()
|
||||||
|
if ! $headless; then
|
||||||
|
items+=(
|
||||||
|
"onlyoffice" "OnlyOffice Desktop Editors (extrepo)" OFF
|
||||||
|
"libreoffice" "LibreOffice (backports on Bookworm/Trixie)" OFF
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Office & Productivity" "Select office applications${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
choices=$(_checklist "Office & Productivity" "Select office applications${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
||||||
"onlyoffice" "OnlyOffice Desktop Editors (extrepo)" OFF \
|
"${items[@]}" \
|
||||||
"libreoffice" "LibreOffice (backports on Bookworm/Trixie)" OFF \
|
|
||||||
)
|
)
|
||||||
|
|
||||||
[ -z "$choices" ] && return
|
[ -z "$choices" ] && return
|
||||||
|
|||||||
@@ -4,14 +4,20 @@
|
|||||||
_cat_players() {
|
_cat_players() {
|
||||||
local headless=false
|
local headless=false
|
||||||
_is_headless && headless=true
|
_is_headless && headless=true
|
||||||
|
local -a items=()
|
||||||
|
if ! $headless; then
|
||||||
local mpv_state; mpv_state=$(_state "mpv")
|
local mpv_state; mpv_state=$(_state "mpv")
|
||||||
local vlc_state; vlc_state=$(_state "vlc")
|
local vlc_state; vlc_state=$(_state "vlc")
|
||||||
|
items+=(
|
||||||
|
"mpv" "Lightweight media player$(_inst mpv)" "$mpv_state"
|
||||||
|
"vlc" "VLC media player$(_inst vlc)" "$vlc_state"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6))
|
local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Media Players" "Select media players:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \
|
choices=$(_checklist "Media Players" "Select media players:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \
|
||||||
"mpv" "Lightweight media player$(_inst mpv)" "$mpv_state" \
|
"${items[@]}" \
|
||||||
"vlc" "VLC media player$(_inst vlc)" "$vlc_state" \
|
|
||||||
)
|
)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
@@ -20,10 +26,6 @@ _cat_players() {
|
|||||||
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
|
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
|
||||||
|
|
||||||
for pkg in $cleaned; do
|
for pkg in $cleaned; do
|
||||||
if $headless; then
|
|
||||||
echo "Skipping $pkg (headless mode)"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if ! is_installed "$pkg"; then
|
if ! is_installed "$pkg"; then
|
||||||
_run_install "$pkg"
|
_run_install "$pkg"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -4,12 +4,21 @@
|
|||||||
_cat_programming() {
|
_cat_programming() {
|
||||||
local headless=false
|
local headless=false
|
||||||
_is_headless && headless=true
|
_is_headless && headless=true
|
||||||
|
local -a items=()
|
||||||
local vim_state; vim_state=$(_state "vim")
|
local vim_state; vim_state=$(_state "vim")
|
||||||
local vimgtk_state; vimgtk_state=$(_state "vim-gtk3")
|
|
||||||
local neovim_state; neovim_state=$(_state "neovim")
|
local neovim_state; neovim_state=$(_state "neovim")
|
||||||
local hx_state; hx_state=$(_state "hx")
|
local hx_state; hx_state=$(_state "hx")
|
||||||
local nano_state; nano_state=$(_state "nano")
|
local nano_state; nano_state=$(_state "nano")
|
||||||
local emacs_state; emacs_state=$(_state "emacs")
|
local emacs_state; emacs_state=$(_state "emacs")
|
||||||
|
items+=(
|
||||||
|
"vim" "Classic terminal editor$(_inst vim)" "$vim_state"
|
||||||
|
"neovim" "Modern vim fork$(_inst neovim)" "$neovim_state"
|
||||||
|
"hx" "Helix modal editor (Rust)$(_inst hx)" "$hx_state"
|
||||||
|
"nano" "Simple terminal editor$(_inst nano)" "$nano_state"
|
||||||
|
"emacs" "Extensible editor / IDE$(_inst emacs)" "$emacs_state"
|
||||||
|
)
|
||||||
|
if ! $headless; then
|
||||||
|
local vimgtk_state; vimgtk_state=$(_state "vim-gtk3")
|
||||||
local kate_state; kate_state=$(_state "kate")
|
local kate_state; kate_state=$(_state "kate")
|
||||||
local mousepad_state; mousepad_state=$(_state "mousepad")
|
local mousepad_state; mousepad_state=$(_state "mousepad")
|
||||||
local gedit_state; gedit_state=$(_state "gedit")
|
local gedit_state; gedit_state=$(_state "gedit")
|
||||||
@@ -19,22 +28,21 @@ _cat_programming() {
|
|||||||
if command -v codium &>/dev/null; then
|
if command -v codium &>/dev/null; then
|
||||||
codium_state="ON"
|
codium_state="ON"
|
||||||
fi
|
fi
|
||||||
|
items+=(
|
||||||
|
"vim-gtk3" "Vim with GTK3 GUI$(_inst vim-gtk3)" "$vimgtk_state"
|
||||||
|
"kate" "KDE advanced text editor$(_inst kate)" "$kate_state"
|
||||||
|
"mousepad" "Xfce text editor$(_inst mousepad)" "$mousepad_state"
|
||||||
|
"gedit" "GNOME text editor$(_inst gedit)" "$gedit_state"
|
||||||
|
"geany" "Lightweight IDE$(_inst geany)" "$geany_state"
|
||||||
|
"gnome-text-editor" "GNOME modern text editor$(_inst gnome-text-editor)" "$gte_state"
|
||||||
|
"vscodium" "VS Code open-source (extrepo)$(_inst codium)" "$codium_state"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6))
|
local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Programming Applications" "Select editors and IDEs${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \
|
choices=$(_checklist "Programming Applications" "Select editors and IDEs${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \
|
||||||
"vim" "Classic terminal editor$(_inst vim)" "$vim_state" \
|
"${items[@]}" \
|
||||||
"vim-gtk3" "Vim with GTK3 GUI$(_inst vim-gtk3)" "$vimgtk_state" \
|
|
||||||
"neovim" "Modern vim fork$(_inst neovim)" "$neovim_state" \
|
|
||||||
"hx" "Helix modal editor (Rust)$(_inst hx)" "$hx_state" \
|
|
||||||
"nano" "Simple terminal editor$(_inst nano)" "$nano_state" \
|
|
||||||
"emacs" "Extensible editor / IDE$(_inst emacs)" "$emacs_state" \
|
|
||||||
"kate" "KDE advanced text editor$(_inst kate)" "$kate_state" \
|
|
||||||
"mousepad" "Xfce text editor$(_inst mousepad)" "$mousepad_state" \
|
|
||||||
"gedit" "GNOME text editor$(_inst gedit)" "$gedit_state" \
|
|
||||||
"geany" "Lightweight IDE$(_inst geany)" "$geany_state" \
|
|
||||||
"gnome-text-editor" "GNOME modern text editor$(_inst gnome-text-editor)" "$gte_state" \
|
|
||||||
"vscodium" "VS Code open-source (extrepo)$(_inst codium)" "$codium_state" \
|
|
||||||
)
|
)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
@@ -48,10 +56,6 @@ _cat_programming() {
|
|||||||
install_vscodium
|
install_vscodium
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
if $headless; then
|
|
||||||
echo "Skipping $pkg (headless mode)"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if ! is_installed "$pkg"; then
|
if ! is_installed "$pkg"; then
|
||||||
_run_install "$pkg"
|
_run_install "$pkg"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -4,22 +4,30 @@
|
|||||||
_cat_security() {
|
_cat_security() {
|
||||||
local headless=false
|
local headless=false
|
||||||
_is_headless && headless=true
|
_is_headless && headless=true
|
||||||
|
local -a items=()
|
||||||
|
if ! $headless; then
|
||||||
local wireshark_state; wireshark_state=$(_state "wireshark")
|
local wireshark_state; wireshark_state=$(_state "wireshark")
|
||||||
local tcpdump_state; tcpdump_state=$(_state "tcpdump")
|
|
||||||
local zenmap_state; zenmap_state=$(_state "zenmap")
|
local zenmap_state; zenmap_state=$(_state "zenmap")
|
||||||
|
items+=(
|
||||||
|
"wireshark" "Network protocol analyzer (GUI)$(_inst wireshark)" "$wireshark_state"
|
||||||
|
"zenmap" "Network scanner GUI (Nmap frontend)$(_inst zenmap)" "$zenmap_state"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
local tcpdump_state; tcpdump_state=$(_state "tcpdump")
|
||||||
local fail2ban_state; fail2ban_state=$(_state "fail2ban")
|
local fail2ban_state; fail2ban_state=$(_state "fail2ban")
|
||||||
local ufw_state; ufw_state=$(_state "ufw")
|
local ufw_state; ufw_state=$(_state "ufw")
|
||||||
local clamav_state; clamav_state=$(_state "clamav")
|
local clamav_state; clamav_state=$(_state "clamav")
|
||||||
|
items+=(
|
||||||
|
"tcpdump" "Command-line packet analyzer$(_inst tcpdump)" "$tcpdump_state"
|
||||||
|
"fail2ban" "Brute-force protection daemon$(_inst fail2ban)" "$fail2ban_state"
|
||||||
|
"ufw" "Uncomplicated firewall$(_inst ufw)" "$ufw_state"
|
||||||
|
"clamav" "Antivirus engine (ClamAV)$(_inst clamav)" "$clamav_state"
|
||||||
|
)
|
||||||
|
|
||||||
local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6))
|
local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Security & Networking" "Select security and networking tools${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \
|
choices=$(_checklist "Security & Networking" "Select security and networking tools${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \
|
||||||
"wireshark" "Network protocol analyzer (GUI)$(_inst wireshark)" "$wireshark_state" \
|
"${items[@]}" \
|
||||||
"tcpdump" "Command-line packet analyzer$(_inst tcpdump)" "$tcpdump_state" \
|
|
||||||
"zenmap" "Network scanner GUI (Nmap frontend)$(_inst zenmap)" "$zenmap_state" \
|
|
||||||
"fail2ban" "Brute-force protection daemon$(_inst fail2ban)" "$fail2ban_state" \
|
|
||||||
"ufw" "Uncomplicated firewall$(_inst ufw)" "$ufw_state" \
|
|
||||||
"clamav" "Antivirus engine (ClamAV)$(_inst clamav)" "$clamav_state" \
|
|
||||||
)
|
)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
# software_centers.sh — Standalone Software Center installer
|
# software_centers.sh — Standalone Software Center installer
|
||||||
|
|
||||||
_cat_software_centers() {
|
_cat_software_centers() {
|
||||||
|
local headless=false
|
||||||
|
_is_headless && headless=true
|
||||||
|
if $headless; then
|
||||||
|
echo "Software centers require a GUI — skipping."
|
||||||
|
return
|
||||||
|
fi
|
||||||
local de_type
|
local de_type
|
||||||
de_type=$(_detect_desktop_type)
|
de_type=$(_detect_desktop_type)
|
||||||
local sc_choice
|
local sc_choice
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ _detect_desktop_type() {
|
|||||||
_cat_general() {
|
_cat_general() {
|
||||||
local headless=false
|
local headless=false
|
||||||
_is_headless && headless=true
|
_is_headless && headless=true
|
||||||
local alacritty_state; alacritty_state=$(_state "alacritty")
|
local -a items=()
|
||||||
local btop_state; btop_state=$(_state "btop")
|
local btop_state; btop_state=$(_state "btop")
|
||||||
local compress_state
|
local compress_state
|
||||||
if is_installed "zip" && is_installed "unzip" && is_installed "p7zip-full"; then
|
if is_installed "zip" && is_installed "unzip" && is_installed "p7zip-full"; then
|
||||||
@@ -27,8 +27,6 @@ _cat_general() {
|
|||||||
else
|
else
|
||||||
compress_state="OFF"
|
compress_state="OFF"
|
||||||
fi
|
fi
|
||||||
local conky_state; conky_state=$(_state "conky")
|
|
||||||
local corectrl_state; corectrl_state=$(_state "corectrl")
|
|
||||||
local cpufetch_state; cpufetch_state=$(_state "cpufetch")
|
local cpufetch_state; cpufetch_state=$(_state "cpufetch")
|
||||||
local cpu_x_state; cpu_x_state=$(_state "cpu-x")
|
local cpu_x_state; cpu_x_state=$(_state "cpu-x")
|
||||||
local curl_wget_state
|
local curl_wget_state
|
||||||
@@ -37,60 +35,70 @@ _cat_general() {
|
|||||||
else
|
else
|
||||||
curl_wget_state="OFF"
|
curl_wget_state="OFF"
|
||||||
fi
|
fi
|
||||||
local dcgtk_state; dcgtk_state=$(_state "doublecmd-gtk")
|
|
||||||
local dcqt_state; dcqt_state=$(_state "doublecmd-qt")
|
|
||||||
local extrepo_state; extrepo_state=$(_state "extrepo")
|
local extrepo_state; extrepo_state=$(_state "extrepo")
|
||||||
local flatpak_state; flatpak_state=$(_state "flatpak")
|
local flatpak_state; flatpak_state=$(_state "flatpak")
|
||||||
local fwupd_state; fwupd_state=$(_state "fwupd")
|
local fwupd_state; fwupd_state=$(_state "fwupd")
|
||||||
local disks_state; disks_state=$(_state "gnome-disk-utility")
|
|
||||||
local gparted_state; gparted_state=$(_state "gparted")
|
|
||||||
local hardinfo_state; hardinfo_state=$(_state "hardinfo")
|
|
||||||
local htop_state; htop_state=$(_state "htop")
|
local htop_state; htop_state=$(_state "htop")
|
||||||
local inxi_state; inxi_state=$(_state "inxi")
|
local inxi_state; inxi_state=$(_state "inxi")
|
||||||
local kitty_state; kitty_state=$(_state "kitty")
|
|
||||||
local kvm_state; kvm_state=$(_state "virt-manager")
|
local kvm_state; kvm_state=$(_state "virt-manager")
|
||||||
local lshw_state; lshw_state=$(_state "lshw")
|
local lshw_state; lshw_state=$(_state "lshw")
|
||||||
local mc_state; mc_state=$(_state "mc")
|
local mc_state; mc_state=$(_state "mc")
|
||||||
local nala_state; nala_state=$(_state "nala")
|
local nala_state; nala_state=$(_state "nala")
|
||||||
local ncdu_state; ncdu_state=$(_state "ncdu")
|
local ncdu_state; ncdu_state=$(_state "ncdu")
|
||||||
local psensor_state; psensor_state=$(_state "psensor")
|
|
||||||
local timeshift_state; timeshift_state=$(_state "timeshift")
|
|
||||||
local tmux_state; tmux_state=$(_state "tmux")
|
local tmux_state; tmux_state=$(_state "tmux")
|
||||||
local wine_state; wine_state=$(_state "wine")
|
local wine_state; wine_state=$(_state "wine")
|
||||||
local nvme_state; nvme_state=$(_state "nvme-cli")
|
local nvme_state; nvme_state=$(_state "nvme-cli")
|
||||||
|
items+=(
|
||||||
|
"btop" "Resource monitor (fancy top)$(_inst btop)" "$btop_state"
|
||||||
|
"compress" "Compression tools (zip, unrar, 7z)$(_inst zip)" "$compress_state"
|
||||||
|
"cpufetch" "CPU info fetcher$(_inst cpufetch)" "$cpufetch_state"
|
||||||
|
"cpu-x" "CPU-X (alternative to CPU-Z)$(_inst cpu-x)" "$cpu_x_state"
|
||||||
|
"curl-wget" "HTTP transfer tools (curl, wget)$(_inst curl)" "$curl_wget_state"
|
||||||
|
"extrepo" "External repository manager$(_inst extrepo)" "$extrepo_state"
|
||||||
|
"flatpak" "Flatpak sandbox + Flathub$(_inst flatpak)" "$flatpak_state"
|
||||||
|
"fwupd" "Firmware update daemon$(_inst fwupd)" "$fwupd_state"
|
||||||
|
"htop" "Interactive process viewer$(_inst htop)" "$htop_state"
|
||||||
|
"inxi" "System information tool$(_inst inxi)" "$inxi_state"
|
||||||
|
"kvm" "QEMU/KVM virtualization$(_inst virt-manager)" "$kvm_state"
|
||||||
|
"lshw" "List hardware details$(_inst lshw)" "$lshw_state"
|
||||||
|
"mc" "Midnight Commander (file manager)$(_inst mc)" "$mc_state"
|
||||||
|
"nala" "APT frontend (parallel downloads)$(_inst nala)" "$nala_state"
|
||||||
|
"ncdu" "Disk usage analyzer (ncurses)$(_inst ncdu)" "$ncdu_state"
|
||||||
|
"nvme-cli" "NVMe SSD health monitoring$(_inst nvme-cli)" "$nvme_state"
|
||||||
|
"tmux" "Terminal multiplexer$(_inst tmux)" "$tmux_state"
|
||||||
|
"wine" "Windows compatibility layer$(_inst wine)" "$wine_state"
|
||||||
|
)
|
||||||
|
if ! $headless; then
|
||||||
|
local alacritty_state; alacritty_state=$(_state "alacritty")
|
||||||
|
local conky_state; conky_state=$(_state "conky")
|
||||||
|
local corectrl_state; corectrl_state=$(_state "corectrl")
|
||||||
|
local dcgtk_state; dcgtk_state=$(_state "doublecmd-gtk")
|
||||||
|
local dcqt_state; dcqt_state=$(_state "doublecmd-qt")
|
||||||
|
local disks_state; disks_state=$(_state "gnome-disk-utility")
|
||||||
|
local gparted_state; gparted_state=$(_state "gparted")
|
||||||
|
local hardinfo_state; hardinfo_state=$(_state "hardinfo")
|
||||||
|
local kitty_state; kitty_state=$(_state "kitty")
|
||||||
|
local psensor_state; psensor_state=$(_state "psensor")
|
||||||
|
local timeshift_state; timeshift_state=$(_state "timeshift")
|
||||||
|
items+=(
|
||||||
|
"alacritty" "GPU-accelerated terminal$(_inst alacritty)" "$alacritty_state"
|
||||||
|
"conky" "System monitor for desktop$(_inst conky)" "$conky_state"
|
||||||
|
"corectrl" "AMD GPU control (CoreCtrl)$(_inst corectrl)" "$corectrl_state"
|
||||||
|
"doublecmd-gtk" "Dual-panel file manager (GTK)$(_inst doublecmd-gtk)" "$dcgtk_state"
|
||||||
|
"doublecmd-qt" "Dual-panel file manager (Qt)$(_inst doublecmd-qt)" "$dcqt_state"
|
||||||
|
"gnome-disk-utility" "Disk management GUI$(_inst gnome-disk-utility)" "$disks_state"
|
||||||
|
"gparted" "GNOME partition editor$(_inst gparted)" "$gparted_state"
|
||||||
|
"hardinfo" "Graphical system profiler$(_inst hardinfo)" "$hardinfo_state"
|
||||||
|
"kitty" "GPU-based terminal emulator$(_inst kitty)" "$kitty_state"
|
||||||
|
"psensor" "Hardware temperature monitor$(_inst psensor)" "$psensor_state"
|
||||||
|
"timeshift" "System restore snapshots$(_inst timeshift)" "$timeshift_state"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6))
|
local TUI_ANCHO_REFORZADO=$((TUI_ANCHO + 6))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "System Tools" "Select system utilities to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \
|
choices=$(_checklist "System Tools" "Select system utilities to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO_REFORZADO $TUI_ALTO_LISTA \
|
||||||
"alacritty" "GPU-accelerated terminal$(_inst alacritty)" "$alacritty_state" \
|
"${items[@]}" \
|
||||||
"btop" "Resource monitor (fancy top)$(_inst btop)" "$btop_state" \
|
|
||||||
"compress" "Compression tools (zip, unrar, 7z)$(_inst zip)" "$compress_state" \
|
|
||||||
"conky" "System monitor for desktop$(_inst conky)" "$conky_state" \
|
|
||||||
"corectrl" "AMD GPU control (CoreCtrl)$(_inst corectrl)" "$corectrl_state" \
|
|
||||||
"cpufetch" "CPU info fetcher$(_inst cpufetch)" "$cpufetch_state" \
|
|
||||||
"cpu-x" "CPU-X (alternative to CPU-Z)$(_inst cpu-x)" "$cpu_x_state" \
|
|
||||||
"curl-wget" "HTTP transfer tools (curl, wget)$(_inst curl)" "$curl_wget_state" \
|
|
||||||
"doublecmd-gtk" "Dual-panel file manager (GTK)$(_inst doublecmd-gtk)" "$dcgtk_state" \
|
|
||||||
"doublecmd-qt" "Dual-panel file manager (Qt)$(_inst doublecmd-qt)" "$dcqt_state" \
|
|
||||||
"extrepo" "External repository manager$(_inst extrepo)" "$extrepo_state" \
|
|
||||||
"flatpak" "Flatpak sandbox + Flathub$(_inst flatpak)" "$flatpak_state" \
|
|
||||||
"fwupd" "Firmware update daemon$(_inst fwupd)" "$fwupd_state" \
|
|
||||||
"gnome-disk-utility" "Disk management GUI$(_inst gnome-disk-utility)" "$disks_state" \
|
|
||||||
"gparted" "GNOME partition editor$(_inst gparted)" "$gparted_state" \
|
|
||||||
"hardinfo" "Graphical system profiler$(_inst hardinfo)" "$hardinfo_state" \
|
|
||||||
"htop" "Interactive process viewer$(_inst htop)" "$htop_state" \
|
|
||||||
"inxi" "System information tool$(_inst inxi)" "$inxi_state" \
|
|
||||||
"kitty" "GPU-based terminal emulator$(_inst kitty)" "$kitty_state" \
|
|
||||||
"kvm" "QEMU/KVM virtualization$(_inst virt-manager)" "$kvm_state" \
|
|
||||||
"lshw" "List hardware details$(_inst lshw)" "$lshw_state" \
|
|
||||||
"mc" "Midnight Commander (file manager)$(_inst mc)" "$mc_state" \
|
|
||||||
"nvme-cli" "NVMe SSD health monitoring$(_inst nvme-cli)" "$nvme_state" \
|
|
||||||
"nala" "APT frontend (parallel downloads)$(_inst nala)" "$nala_state" \
|
|
||||||
"ncdu" "Disk usage analyzer (ncurses)$(_inst ncdu)" "$ncdu_state" \
|
|
||||||
"psensor" "Hardware temperature monitor$(_inst psensor)" "$psensor_state" \
|
|
||||||
"timeshift" "System restore snapshots$(_inst timeshift)" "$timeshift_state" \
|
|
||||||
"tmux" "Terminal multiplexer$(_inst tmux)" "$tmux_state" \
|
|
||||||
"wine" "Windows compatibility layer$(_inst wine)" "$wine_state" \
|
|
||||||
)
|
)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
@@ -256,10 +264,6 @@ _cat_general() {
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
if $headless; then
|
|
||||||
echo "Skipping $pkg (headless mode)"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if ! is_installed "$pkg"; then
|
if ! is_installed "$pkg"; then
|
||||||
_run_install "$pkg"
|
_run_install "$pkg"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -2,21 +2,29 @@
|
|||||||
# cursors.sh — Cursor themes
|
# cursors.sh — Cursor themes
|
||||||
|
|
||||||
_cat_cursors() {
|
_cat_cursors() {
|
||||||
|
local headless=false
|
||||||
|
_is_headless && headless=true
|
||||||
|
local -a items=()
|
||||||
|
if ! $headless; then
|
||||||
local bibata_state; bibata_state=$(_state "bibata-cursor-theme")
|
local bibata_state; bibata_state=$(_state "bibata-cursor-theme")
|
||||||
local breeze_state; breeze_state=$(_state "breeze-cursor-theme")
|
local breeze_state; breeze_state=$(_state "breeze-cursor-theme")
|
||||||
local chameleon_state; chameleon_state=$(_state "chameleon-cursor-theme")
|
local chameleon_state; chameleon_state=$(_state "chameleon-cursor-theme")
|
||||||
local dmz_state; dmz_state=$(_state "dmz-cursor-theme")
|
local dmz_state; dmz_state=$(_state "dmz-cursor-theme")
|
||||||
local xcursor_state; xcursor_state=$(_state "xcursor-themes")
|
local xcursor_state; xcursor_state=$(_state "xcursor-themes")
|
||||||
local oxygen_state; oxygen_state=$(_state "oxygencursors")
|
local oxygen_state; oxygen_state=$(_state "oxygencursors")
|
||||||
|
items+=(
|
||||||
|
"bibata-cursor-theme" "Bibata cursors$(_inst bibata-cursor-theme)" "$bibata_state"
|
||||||
|
"breeze-cursor-theme" "Breeze cursors (KDE)$(_inst breeze-cursor-theme)" "$breeze_state"
|
||||||
|
"chameleon-cursor-theme" "Chameleon cursors$(_inst chameleon-cursor-theme)" "$chameleon_state"
|
||||||
|
"dmz-cursor-theme" "DMZ cursors$(_inst dmz-cursor-theme)" "$dmz_state"
|
||||||
|
"xcursor-themes" "X11 base cursors$(_inst xcursor-themes)" "$xcursor_state"
|
||||||
|
"oxygencursors" "Oxygen cursors (KDE legacy)$(_inst oxygencursors)" "$oxygen_state"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Cursor Themes" "Select cursor themes to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
choices=$(_checklist "Cursor Themes" "Select cursor themes to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
||||||
"bibata-cursor-theme" "Bibata cursors$(_inst bibata-cursor-theme)" "$bibata_state" \
|
"${items[@]}" \
|
||||||
"breeze-cursor-theme" "Breeze cursors (KDE)$(_inst breeze-cursor-theme)" "$breeze_state" \
|
|
||||||
"chameleon-cursor-theme" "Chameleon cursors$(_inst chameleon-cursor-theme)" "$chameleon_state" \
|
|
||||||
"dmz-cursor-theme" "DMZ cursors$(_inst dmz-cursor-theme)" "$dmz_state" \
|
|
||||||
"xcursor-themes" "X11 base cursors$(_inst xcursor-themes)" "$xcursor_state" \
|
|
||||||
"oxygencursors" "Oxygen cursors (KDE legacy)$(_inst oxygencursors)" "$oxygen_state" \
|
|
||||||
)
|
)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
_cat_themes() {
|
_cat_themes() {
|
||||||
local headless=false
|
local headless=false
|
||||||
_is_headless && headless=true
|
_is_headless && headless=true
|
||||||
|
local -a items=()
|
||||||
|
if ! $headless; then
|
||||||
local arc_state; arc_state=$(_state "arc-theme")
|
local arc_state; arc_state=$(_state "arc-theme")
|
||||||
local blackbird_state; blackbird_state=$(_state "blackbird-gtk-theme")
|
local blackbird_state; blackbird_state=$(_state "blackbird-gtk-theme")
|
||||||
local bluebird_state; bluebird_state=$(_state "bluebird-gtk-theme")
|
local bluebird_state; bluebird_state=$(_state "bluebird-gtk-theme")
|
||||||
@@ -11,16 +13,20 @@ _cat_themes() {
|
|||||||
local greybird_state; greybird_state=$(_state "greybird-gtk-theme")
|
local greybird_state; greybird_state=$(_state "greybird-gtk-theme")
|
||||||
local numix_gtk_state; numix_gtk_state=$(_state "numix-gtk-theme")
|
local numix_gtk_state; numix_gtk_state=$(_state "numix-gtk-theme")
|
||||||
local orchis_state; orchis_state=$(_state "orchis-gtk-theme")
|
local orchis_state; orchis_state=$(_state "orchis-gtk-theme")
|
||||||
|
items+=(
|
||||||
|
"arc-theme" "Arc GTK theme$(_inst arc-theme)" "$arc_state"
|
||||||
|
"blackbird-gtk-theme" "Blackbird GTK theme$(_inst blackbird-gtk-theme)" "$blackbird_state"
|
||||||
|
"bluebird-gtk-theme" "Bluebird GTK theme$(_inst bluebird-gtk-theme)" "$bluebird_state"
|
||||||
|
"breeze-gtk-theme" "Breeze GTK theme (KDE port)$(_inst breeze-gtk-theme)" "$breeze_gtk_state"
|
||||||
|
"greybird-gtk-theme" "Greybird GTK theme$(_inst greybird-gtk-theme)" "$greybird_state"
|
||||||
|
"numix-gtk-theme" "Numix GTK theme$(_inst numix-gtk-theme)" "$numix_gtk_state"
|
||||||
|
"orchis-gtk-theme" "Orchis GTK theme$(_inst orchis-gtk-theme)" "$orchis_state"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Desktop Themes (GTK/KDE)" "Select desktop themes to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
choices=$(_checklist "Desktop Themes (GTK/KDE)" "Select desktop themes to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
||||||
"arc-theme" "Arc GTK theme$(_inst arc-theme)" "$arc_state" \
|
"${items[@]}" \
|
||||||
"blackbird-gtk-theme" "Blackbird GTK theme$(_inst blackbird-gtk-theme)" "$blackbird_state" \
|
|
||||||
"bluebird-gtk-theme" "Bluebird GTK theme$(_inst bluebird-gtk-theme)" "$bluebird_state" \
|
|
||||||
"breeze-gtk-theme" "Breeze GTK theme (KDE port)$(_inst breeze-gtk-theme)" "$breeze_gtk_state" \
|
|
||||||
"greybird-gtk-theme" "Greybird GTK theme$(_inst greybird-gtk-theme)" "$greybird_state" \
|
|
||||||
"numix-gtk-theme" "Numix GTK theme$(_inst numix-gtk-theme)" "$numix_gtk_state" \
|
|
||||||
"orchis-gtk-theme" "Orchis GTK theme$(_inst orchis-gtk-theme)" "$orchis_state" \
|
|
||||||
)
|
)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
@@ -29,10 +35,6 @@ _cat_themes() {
|
|||||||
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
|
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
|
||||||
|
|
||||||
for pkg in $cleaned; do
|
for pkg in $cleaned; do
|
||||||
if $headless; then
|
|
||||||
echo "Skipping $pkg (headless mode)"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if ! is_installed "$pkg"; then
|
if ! is_installed "$pkg"; then
|
||||||
_run_install "$pkg"
|
_run_install "$pkg"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
# fonts.sh — Fonts
|
# fonts.sh — Fonts
|
||||||
|
|
||||||
_cat_fonts() {
|
_cat_fonts() {
|
||||||
|
local headless=false
|
||||||
|
_is_headless && headless=true
|
||||||
|
local -a items=()
|
||||||
|
if ! $headless; then
|
||||||
local bebas_state; bebas_state=$(_state "fonts-bebas-neue")
|
local bebas_state; bebas_state=$(_state "fonts-bebas-neue")
|
||||||
local anon_state; anon_state=$(_state "fonts-anonymous-pro")
|
local anon_state; anon_state=$(_state "fonts-anonymous-pro")
|
||||||
local verana_state; verana_state=$(_state "fonts-adf-verana")
|
local verana_state; verana_state=$(_state "fonts-adf-verana")
|
||||||
@@ -10,17 +14,21 @@ _cat_fonts() {
|
|||||||
local mscore_state; mscore_state=$(_state "ttf-mscorefonts-installer")
|
local mscore_state; mscore_state=$(_state "ttf-mscorefonts-installer")
|
||||||
local ubuntu_state; ubuntu_state=$(_state "fonts-ubuntu")
|
local ubuntu_state; ubuntu_state=$(_state "fonts-ubuntu")
|
||||||
local recommended_state; recommended_state=$(_state "fonts-recommended")
|
local recommended_state; recommended_state=$(_state "fonts-recommended")
|
||||||
|
items+=(
|
||||||
|
"fonts-bebas-neue" "Bebas Neue (display)$(_inst fonts-bebas-neue)" "$bebas_state"
|
||||||
|
"fonts-anonymous-pro" "Anonymous Pro (monospace)$(_inst fonts-anonymous-pro)" "$anon_state"
|
||||||
|
"fonts-adf-verana" "ADF Verana (sans-serif)$(_inst fonts-adf-verana)" "$verana_state"
|
||||||
|
"fonts-3270" "IBM 3270 terminal font$(_inst fonts-3270)" "$f3270_state"
|
||||||
|
"fonts-liberation" "Liberation (MS-compatible)$(_inst fonts-liberation)" "$liberation_state"
|
||||||
|
"ttf-mscorefonts-installer" "Microsoft fonts (EULA required)$(_inst ttf-mscorefonts-installer)" "$mscore_state"
|
||||||
|
"fonts-ubuntu" "Ubuntu font family$(_inst fonts-ubuntu)" "$ubuntu_state"
|
||||||
|
"fonts-recommended" "Debian recommended fonts$(_inst fonts-recommended)" "$recommended_state"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Fonts" "Select fonts to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
choices=$(_checklist "Fonts" "Select fonts to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
||||||
"fonts-bebas-neue" "Bebas Neue (display)$(_inst fonts-bebas-neue)" "$bebas_state" \
|
"${items[@]}" \
|
||||||
"fonts-anonymous-pro" "Anonymous Pro (monospace)$(_inst fonts-anonymous-pro)" "$anon_state" \
|
|
||||||
"fonts-adf-verana" "ADF Verana (sans-serif)$(_inst fonts-adf-verana)" "$verana_state" \
|
|
||||||
"fonts-3270" "IBM 3270 terminal font$(_inst fonts-3270)" "$f3270_state" \
|
|
||||||
"fonts-liberation" "Liberation (MS-compatible)$(_inst fonts-liberation)" "$liberation_state" \
|
|
||||||
"ttf-mscorefonts-installer" "Microsoft fonts (EULA required)$(_inst ttf-mscorefonts-installer)" "$mscore_state" \
|
|
||||||
"fonts-ubuntu" "Ubuntu font family$(_inst fonts-ubuntu)" "$ubuntu_state" \
|
|
||||||
"fonts-recommended" "Debian recommended fonts$(_inst fonts-recommended)" "$recommended_state" \
|
|
||||||
)
|
)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
_cat_icons() {
|
_cat_icons() {
|
||||||
local headless=false
|
local headless=false
|
||||||
_is_headless && headless=true
|
_is_headless && headless=true
|
||||||
|
local -a items=()
|
||||||
|
if ! $headless; then
|
||||||
local breeze_state; breeze_state=$(_state "breeze-icon-theme")
|
local breeze_state; breeze_state=$(_state "breeze-icon-theme")
|
||||||
local deepin_state; deepin_state=$(_state "deepin-icon-theme")
|
local deepin_state; deepin_state=$(_state "deepin-icon-theme")
|
||||||
local ele_state; ele_state=$(_state "elementary-icon-theme")
|
local ele_state; ele_state=$(_state "elementary-icon-theme")
|
||||||
@@ -17,13 +19,11 @@ _cat_icons() {
|
|||||||
local suru_state; suru_state=$(_state "suru-icon-theme")
|
local suru_state; suru_state=$(_state "suru-icon-theme")
|
||||||
|
|
||||||
local kf6_state="OFF"
|
local kf6_state="OFF"
|
||||||
local has_kf6=false
|
|
||||||
if [ "$DEBIAN_CODENAME" = "trixie" ]; then
|
if [ "$DEBIAN_CODENAME" = "trixie" ]; then
|
||||||
kf6_state=$(_state "kf6-breeze-icon-theme")
|
kf6_state=$(_state "kf6-breeze-icon-theme")
|
||||||
has_kf6=true
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local items=(
|
items=(
|
||||||
"breeze-icon-theme" "Breeze icon theme$(_inst breeze-icon-theme)" "$breeze_state"
|
"breeze-icon-theme" "Breeze icon theme$(_inst breeze-icon-theme)" "$breeze_state"
|
||||||
"deepin-icon-theme" "Deepin icon theme$(_inst deepin-icon-theme)" "$deepin_state"
|
"deepin-icon-theme" "Deepin icon theme$(_inst deepin-icon-theme)" "$deepin_state"
|
||||||
"elementary-icon-theme" "Elementary icon theme$(_inst elementary-icon-theme)" "$ele_state"
|
"elementary-icon-theme" "Elementary icon theme$(_inst elementary-icon-theme)" "$ele_state"
|
||||||
@@ -36,9 +36,10 @@ _cat_icons() {
|
|||||||
"paper-icon-theme" "Paper icon theme$(_inst paper-icon-theme)" "$paper_state"
|
"paper-icon-theme" "Paper icon theme$(_inst paper-icon-theme)" "$paper_state"
|
||||||
"suru-icon-theme" "Suru icon theme$(_inst suru-icon-theme)" "$suru_state"
|
"suru-icon-theme" "Suru icon theme$(_inst suru-icon-theme)" "$suru_state"
|
||||||
)
|
)
|
||||||
if $has_kf6; then
|
if [ "$DEBIAN_CODENAME" = "trixie" ]; then
|
||||||
items+=("kf6-breeze-icon-theme" "KF6 Breeze icon theme$(_inst kf6-breeze-icon-theme)" "$kf6_state")
|
items+=("kf6-breeze-icon-theme" "KF6 Breeze icon theme$(_inst kf6-breeze-icon-theme)" "$kf6_state")
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Icon Themes" "Select icon themes to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
choices=$(_checklist "Icon Themes" "Select icon themes to install${SCROLL_HINT}:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
||||||
@@ -51,10 +52,6 @@ _cat_icons() {
|
|||||||
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
|
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
|
||||||
|
|
||||||
for pkg in $cleaned; do
|
for pkg in $cleaned; do
|
||||||
if $headless; then
|
|
||||||
echo "Skipping $pkg (headless mode)"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if ! is_installed "$pkg"; then
|
if ! is_installed "$pkg"; then
|
||||||
_run_install "$pkg"
|
_run_install "$pkg"
|
||||||
else
|
else
|
||||||
|
|||||||
+74
-5
@@ -130,7 +130,7 @@ _is_broadcom_b43() {
|
|||||||
local dec=$((16#$id))
|
local dec=$((16#$id))
|
||||||
if [ "$dec" -ge $((16#4301)) ] && [ "$dec" -le $((16#4331)) ]; then return 0; fi
|
if [ "$dec" -ge $((16#4301)) ] && [ "$dec" -le $((16#4331)) ]; then return 0; fi
|
||||||
if [ "$dec" -ge $((16#4336)) ] && [ "$dec" -le $((16#4338)) ]; then return 0; fi
|
if [ "$dec" -ge $((16#4336)) ] && [ "$dec" -le $((16#4338)) ]; then return 0; fi
|
||||||
case "$id" in 4352|4357|4358|4360|4727) return 0 ;; esac
|
case "$id" in 4352) return 0 ;; esac
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,8 +255,22 @@ _handle_wireless() {
|
|||||||
fi
|
fi
|
||||||
installed_any=true
|
installed_any=true
|
||||||
elif _is_broadcom_b43 "$dev_id"; then
|
elif _is_broadcom_b43 "$dev_id"; then
|
||||||
|
if ! dpkg -l firmware-b43-installer >/dev/null 2>&1; then
|
||||||
_run_install_pkg firmware-b43-installer
|
_run_install_pkg firmware-b43-installer
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d /lib/firmware/b43 ] || [ -z "$(ls -A /lib/firmware/b43 2>/dev/null)" ]; then
|
||||||
|
_msg "b43 Firmware Warning" \
|
||||||
|
"The firmware-b43-installer package was installed, but the\n\
|
||||||
|
proprietary firmware download appears to have failed\n\
|
||||||
|
(no files found in /lib/firmware/b43).\n\n\
|
||||||
|
To fix this, connect a wired network and run:\n\
|
||||||
|
sudo dpkg-reconfigure firmware-b43-installer\n\n\
|
||||||
|
After the firmware is downloaded, reboot the system." 14 75
|
||||||
|
_pause
|
||||||
|
else
|
||||||
installed_any=true
|
installed_any=true
|
||||||
|
fi
|
||||||
elif _is_broadcom_b43legacy "$dev_id"; then
|
elif _is_broadcom_b43legacy "$dev_id"; then
|
||||||
_run_install_pkg firmware-b43legacy-installer
|
_run_install_pkg firmware-b43legacy-installer
|
||||||
installed_any=true
|
installed_any=true
|
||||||
@@ -264,9 +278,34 @@ _handle_wireless() {
|
|||||||
local bcm_ver header_ver
|
local bcm_ver header_ver
|
||||||
bcm_ver=$(apt-cache policy broadcom-sta-dkms 2>/dev/null | awk 'NR==3 {print $2; exit}')
|
bcm_ver=$(apt-cache policy broadcom-sta-dkms 2>/dev/null | awk 'NR==3 {print $2; exit}')
|
||||||
header_ver=$(apt-cache policy linux-headers-$(uname -r) 2>/dev/null | awk 'NR==3 {print $2; exit}')
|
header_ver=$(apt-cache policy linux-headers-$(uname -r) 2>/dev/null | awk 'NR==3 {print $2; exit}')
|
||||||
|
|
||||||
|
if ! apt-cache policy "linux-headers-$(uname -r)" 2>/dev/null | grep -q "Candidate: [^ (none)]"; then
|
||||||
|
_msg "Broadcom Error" \
|
||||||
|
"linux-headers-$(uname -r) not available.\n\nCannot compile broadcom-sta-dkms without kernel headers." 10 60
|
||||||
|
_pause
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
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
|
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 DEBIAN_FRONTEND=noninteractive apt install -y linux-headers-$(uname -r) broadcom-sta-dkms" \
|
_run_cmd "Broadcom" "sudo DEBIAN_FRONTEND=noninteractive apt install -y linux-headers-$(uname -r) broadcom-sta-dkms" \
|
||||||
"Installing Broadcom driver..."
|
"Installing Broadcom driver..."
|
||||||
|
|
||||||
|
local has_broadcom_bt=false
|
||||||
|
for btdev in "${PCI_BT_DEVS[@]}"; do
|
||||||
|
if echo "$btdev" | grep -qi 'broadcom'; then
|
||||||
|
has_broadcom_bt=true
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if $has_broadcom_bt; then
|
||||||
|
echo -e "${YELLOW}Broadcom combo card (WiFi + Bluetooth) detected.${NC}"
|
||||||
|
cat > /etc/modprobe.d/broadcom-combo.conf <<'EOF'
|
||||||
|
# Broadcom combo: ensure btusb loads after wl
|
||||||
|
softdep wl post: btusb
|
||||||
|
EOF
|
||||||
|
echo -e "${YELLOW}A reboot may be required for Bluetooth to work correctly.${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Broadcom proprietary driver installed. A reboot may be required."
|
echo "Broadcom proprietary driver installed. A reboot may be required."
|
||||||
_pause
|
_pause
|
||||||
installed_any=true
|
installed_any=true
|
||||||
@@ -286,14 +325,44 @@ _handle_wireless() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ── Ensure non-free repository is enabled ──
|
||||||
|
_ensure_nonfree_repo() {
|
||||||
|
local nonfree_found=false
|
||||||
|
if [ -f /etc/apt/sources.list ] && grep -Eq '^[^#]*\bnon-free\b' /etc/apt/sources.list 2>/dev/null; then
|
||||||
|
nonfree_found=true
|
||||||
|
fi
|
||||||
|
if ! $nonfree_found && [ -d /etc/apt/sources.list.d ]; then
|
||||||
|
if grep -qr 'Components:.*\bnon-free\b' /etc/apt/sources.list.d/*.sources 2>/dev/null; then
|
||||||
|
nonfree_found=true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if $nonfree_found; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if _confirm "non-free Repository" "Component 'non-free' (and 'non-free-firmware') is required for WiFi/Bluetooth/GPU firmware.\n\nAdd them to your APT repositories?"; then
|
||||||
|
if [ -f /etc/apt/sources.list ]; then
|
||||||
|
sudo sed -i '/^deb / { /non-free/! s/\(main[^ ]*\)/\1 non-free non-free-firmware/ }' /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:/ { /non-free/! s/$/ non-free non-free-firmware/ }' "$f"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
sudo apt update
|
||||||
|
echo -e "${GREEN}non-free repository enabled.${NC}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
# ── Main entry point ──
|
# ── Main entry point ──
|
||||||
install_firmware() {
|
install_firmware() {
|
||||||
echo -e "${YELLOW}Base firmware check...${NC}"
|
echo -e "${YELLOW}Base firmware check...${NC}"
|
||||||
|
|
||||||
if ! grep -qr "non-free" /etc/apt/sources.list /etc/apt/sources.list.d/ 2>/dev/null; then
|
if ! _ensure_nonfree_repo; then
|
||||||
_msg "Error" "Error: No 'non-free' repositories were detected.\n\
|
_msg "Error" "No 'non-free' repositories were enabled and the user declined to add them.\nPlease enable non-free manually or accept the prompt in the Firmware option." 10 65
|
||||||
Please first run the 'Configure repositories' option in the\n\
|
|
||||||
main menu to install proprietary firmwares." 10 65
|
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ _write_deb822_branch() {
|
|||||||
|
|
||||||
_branch_migration() {
|
_branch_migration() {
|
||||||
# ── Screen 1: Risk warning ──
|
# ── Screen 1: Risk warning ──
|
||||||
_msg "WARNING: Branch Migration" \
|
_msg_red "WARNING: Branch Migration" \
|
||||||
"Migrating from Debian Stable to Testing or SID is a\n\
|
"Migrating from Debian Stable to Testing or SID is a\n\
|
||||||
MAJOR change and CAN make your system UNBOOTABLE.\n\n\
|
MAJOR change and CAN make your system UNBOOTABLE.\n\n\
|
||||||
Risks include:\n\
|
Risks include:\n\
|
||||||
@@ -71,7 +71,7 @@ Risks include:\n\
|
|||||||
• Some packages may be removed or replaced\n\
|
• Some packages may be removed or replaced\n\
|
||||||
• SID (unstable) receives NO security updates\n\n\
|
• SID (unstable) receives NO security updates\n\n\
|
||||||
A full persistent backup will be saved to /var/backups/\n\
|
A full persistent backup will be saved to /var/backups/\n\
|
||||||
so you can restore if things go wrong." 16 70 || true
|
so you can restore if things go wrong." 16 70
|
||||||
|
|
||||||
if ! _confirm "Branch Migration" "Do you want to proceed with the migration?"; then
|
if ! _confirm "Branch Migration" "Do you want to proceed with the migration?"; then
|
||||||
echo "Migration cancelled."
|
echo "Migration cancelled."
|
||||||
@@ -89,7 +89,7 @@ so you can restore if things go wrong." 16 70 || true
|
|||||||
plan+=" 7. Run: apt autoremove -y\n\n"
|
plan+=" 7. Run: apt autoremove -y\n\n"
|
||||||
plan+="If apt update fails, the backup is restored immediately."
|
plan+="If apt update fails, the backup is restored immediately."
|
||||||
|
|
||||||
_msg "Migration Plan" "$plan" 16 70 || true
|
_msg_red "Migration Plan" "$plan" 16 70
|
||||||
|
|
||||||
if ! _confirm "Migration Plan" "Proceed with the plan?"; then
|
if ! _confirm "Migration Plan" "Proceed with the plan?"; then
|
||||||
echo "Migration cancelled."
|
echo "Migration cancelled."
|
||||||
@@ -145,7 +145,7 @@ so you can restore if things go wrong." 16 70 || true
|
|||||||
if ! sudo apt update; then
|
if ! sudo apt update; then
|
||||||
echo -e "${RED}apt update failed. Restoring backup...${NC}"
|
echo -e "${RED}apt update failed. Restoring backup...${NC}"
|
||||||
_restore_backup
|
_restore_backup
|
||||||
_msg "Migration Failed" \
|
_msg_red "Migration Failed" \
|
||||||
"apt update failed. Backup has been restored from:\n\
|
"apt update failed. Backup has been restored from:\n\
|
||||||
$_MIGRATE_BACKUP\n\n\
|
$_MIGRATE_BACKUP\n\n\
|
||||||
Your system should be back to its previous state.\n\
|
Your system should be back to its previous state.\n\
|
||||||
|
|||||||
+15
-3
@@ -550,6 +550,10 @@ _msg() {
|
|||||||
whiptail --title "$1" --msgbox "$2" "${3:-10}" "${4:-65}" || true
|
whiptail --title "$1" --msgbox "$2" "${3:-10}" "${4:-65}" || true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_msg_red() {
|
||||||
|
whiptail --colors --title "\Z1$1\Zn" --msgbox "\Z1$2\Zn" "${3:-12}" "${4:-70}" || true
|
||||||
|
}
|
||||||
|
|
||||||
_menu() {
|
_menu() {
|
||||||
local title="$1" text="$2" h="$3" w="$4" lh="$5"; shift 5
|
local title="$1" text="$2" h="$3" w="$4" lh="$5"; shift 5
|
||||||
whiptail --title "$title" --menu "$text" "$h" "$w" "$lh" "$@" 3>&1 1>&2 2>&3 || true
|
whiptail --title "$title" --menu "$text" "$h" "$w" "$lh" "$@" 3>&1 1>&2 2>&3 || true
|
||||||
@@ -582,9 +586,8 @@ _validate_sudoers() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_pause() {
|
_pause() {
|
||||||
echo ""
|
local msg="${1:-Presiona OK para continuar.}"
|
||||||
echo "Press [ENTER] to continue..."
|
whiptail --title "Continuar" --msgbox "$msg" 8 50 3>&1 1>&2 2>&3 || true
|
||||||
read -r
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Blocks 2-4: clear → run → pause
|
# Blocks 2-4: clear → run → pause
|
||||||
@@ -715,6 +718,7 @@ _check_network() {
|
|||||||
_configure_lightdm() {
|
_configure_lightdm() {
|
||||||
command -v lightdm &>/dev/null || return 0
|
command -v lightdm &>/dev/null || return 0
|
||||||
|
|
||||||
|
if _confirm "LightDM" "Configure LightDM to show the user list on the login screen?\n\nThis disables greeter-hide-users."; then
|
||||||
if ! is_installed lightdm-gtk-greeter-settings; then
|
if ! is_installed lightdm-gtk-greeter-settings; then
|
||||||
echo -e "${YELLOW}Installing lightdm-gtk-greeter-settings...${NC}"
|
echo -e "${YELLOW}Installing lightdm-gtk-greeter-settings...${NC}"
|
||||||
sudo DEBIAN_FRONTEND=noninteractive apt install -y lightdm-gtk-greeter-settings
|
sudo DEBIAN_FRONTEND=noninteractive apt install -y lightdm-gtk-greeter-settings
|
||||||
@@ -730,4 +734,12 @@ _configure_lightdm() {
|
|||||||
sudo mkdir -p "$conf_dir"
|
sudo mkdir -p "$conf_dir"
|
||||||
printf '[Seat:*]\ngreeter-hide-users=false\n' | sudo tee "$conf_file" > /dev/null
|
printf '[Seat:*]\ngreeter-hide-users=false\n' | sudo tee "$conf_file" > /dev/null
|
||||||
echo -e "${GREEN}LightDM configured to show user list.${NC}"
|
echo -e "${GREEN}LightDM configured to show user list.${NC}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ── Lazy system state refresh ──
|
||||||
|
refresh_system_state() {
|
||||||
|
detect_debian_version
|
||||||
|
detect_gpu
|
||||||
|
detect_cpu_ram
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user