diff --git a/README.md b/README.md index 0cb560e..0233949 100644 --- a/README.md +++ b/README.md @@ -49,20 +49,35 @@ The script will perform initial checks, detect your system information (CPU, RAM After running the script: -1. **Select Option:** Use arrow keys or type `1-8`. -2. **Confirm Actions:** For installation steps, you'll see a confirmation prompt (`whiptail`). +1. **Select Option:** Use arrow keys or type `1-9`. +2. **Confirm Actions:** For installation steps, you'll see a confirmation prompt (`whiptail`/`dialog`). 3. **Review System Info:** The header displays your detected Debian version and hardware summary before each action. 4. **Repeat as Needed:** Return to the main menu at any time or exit when done. -|Menu Option|What it does| -|-------------|------------------------------------------------------------------------------| -|User Privileges & Feedback|Add user to sudo group + password feedback| -|Repository Configuration|Setup official repos with/without backports| -|Wireless Support|Install WiFi firmware for Broadcom, Intel, etc.| -|Graphics Stack and Tools|AMD/Intel/NVIDIA drivers + monitoring tools (nvtop/radeontop)| -|Update Kernel to Backports|Installs a newer kernel version available in Debian's "Backports" repository| -|Gaming Setup|Steam installation + performance tools (gamemode/mangohud)| -|Extra Applications|Select system utilities like htop, btop, neofetch| +| Option | Description | What it does | +|--------|-------------|--------------| +| **1** | User Privileges & Feedback | Add user to sudo group, enable password feedback (`pwfeedback`) | +| **2** | Configure Repositories | Setup official repos with/without backports (deb822 or classic format) | +| **3** | Setup Wireless & Firmware | Install WiFi firmware for Broadcom, Intel, and other chipsets | +| **4** | Configure Graphics Stack | AMD/Intel/NVIDIA drivers + monitoring tools (`nvtop`, `radeontop`) | +| **5** | Update Kernel to Backports | Install latest stable kernel from Debian backports (6.19+) | +| **6** | Gaming Setup and Performance | Steam, GameMode, MangoHud, Heroic Games Launcher | +| **7** | Install ZRAM (compressed swap) | Configure compressed RAM for memory optimization | +| **8** | Install Extra Applications | Select from 10+ categories: System Tools, Development, Media Players, Web Browsers, GTK/Icon Themes, Downloaders, Design Software | +| **9** | Exit | Return to terminal | + +### Extra Applications Categories (Option 8) + +- **System Tools:** htop, btop, ncdu, timeshift, tmux, flatpak, virtualization tools +- **Development & Servers:** Docker, Nginx/Apache, PostgreSQL/MariaDB, SSH server, fail2ban +- **Media Players:** VLC, MPV, HandBrake +- **Web Browsers:** Firefox (Mozilla), LibreWolf, Floorp, Chromium, Thunderbird +- **GTK Themes:** Arc, Numix, Breeze, Bluebird, Blackbird, Greybird, Orchis +- **Icon Themes:** Papirus, Numix, Elementary, Deepin, Suru, Obsidian +- **Fetch Tools:** Neofetch/Fastfetch, Linux logo, Screenfetch +- **Downloaders:** aria2, ytdlp, FileZilla, Riseup VPN +- **Torrent Clients:** qBittorrent, Deluge, Transmission, mktorrent +- **Multimedia & Design:** GIMP, Kdenlive, Blender, OBS Studio, Audacity, Inkscape --- @@ -74,15 +89,17 @@ After running the script: | `/modules/` | Modular scripts for specific tasks: `sudo_config`, `repos`, `firmware`, `gpu`, etc. | ```bash -├── ./debianito.sh # Main script & menu logic +├── debianito.sh # Main entry point; handles menu navigation and system detection └── modules/ - ├── utils.sh # System info helpers + ├── utils.sh # System info helpers (CPU/RAM/GPU/WiFi detection) ├── sudo_config.sh # User group + pwfeedback setup - ├── repos.sh # Repository configuration (classic/deb822) + ├── repos.sh # Repository configuration (classic/deb822 format) ├── firmware.sh # WiFi microcode and chipset-specific support ├── gpu.sh # AMD, Intel, NVIDIA driver/firmware handling - ├── kernel.sh # Update Kernel to Backports - └── gaming.sh # Steam installation & performance tools + ├── kernel.sh # Update Kernel to Backports with NVIDIA warnings + ├── gaming.sh # Steam installation & performance tools (MangoHud/GameMode) + ├── extras.sh # Extra applications installer with 10+ categories + └── zram.sh # ZRAM compressed swap configuration and optimization ``` > 🤖 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. diff --git a/modules/extras.sh b/modules/extras.sh index a670275..09b2ba5 100644 --- a/modules/extras.sh +++ b/modules/extras.sh @@ -44,88 +44,95 @@ install_extras() { while true; do local cat_choice cat_choice=$(dialog --title "Extra Software" --menu \ - "Select a category:" 16 60 7 \ + "Select a category:" 20 68 9 \ "1" "System Tools" \ "2" "Development & Servers" \ - "3" "Media & Browsers" \ - "4" "GTK Themes" \ - "5" "Icon Themes" \ - "6" "Fetch / System Info" \ - "7" "Back to main menu" \ + "3" "Media Players" \ + "4" "Web Browsers" \ + "5" "GTK Themes" \ + "6" "Icon Themes" \ + "7" "Fetch / System Info" \ + "8" "Download & Network" \ + "9" "Multimedia & Design" \ + "10" "Back to main menu" \ 3>&1 1>&2 2>&3) [ -z "$cat_choice" ] && return - clear + tput reset 2>/dev/null || clear case "$cat_choice" in 1) _cat_general ;; 2) _cat_dev ;; - 3) _cat_media ;; - 4) _cat_themes ;; - 5) _cat_icons ;; - 6) _cat_fetch ;; - 7) return ;; + 3) _cat_players ;; + 4) _cat_browsers ;; + 5) _cat_themes ;; + 6) _cat_icons ;; + 7) _cat_fetch ;; + 8) _cat_download ;; + 9) _cat_design ;; + 10) return ;; esac clear done } _cat_general() { - local htop_state="OFF"; is_installed "htop" && htop_state="ON" + local alacritty_state="OFF"; is_installed "alacritty" && alacritty_state="ON" local btop_state="OFF"; is_installed "btop" && btop_state="ON" - local tmux_state="OFF"; is_installed "tmux" && tmux_state="ON" - local ncdu_state="OFF"; is_installed "ncdu" && ncdu_state="ON" - local mc_state="OFF"; is_installed "mc" && mc_state="ON" - local psensor_state="OFF"; is_installed "psensor" && psensor_state="ON" + local compress_state="OFF"; is_installed "zip" && is_installed "unzip" && is_installed "p7zip-full" && compress_state="ON" local conky_state="OFF"; is_installed "conky" && conky_state="ON" + local corectrl_state="OFF"; is_installed "corectrl" && corectrl_state="ON" local cpufetch_state="OFF"; is_installed "cpufetch" && cpufetch_state="ON" local cpu_x_state="OFF"; is_installed "cpu-x" && cpu_x_state="ON" - local lshw_state="OFF"; is_installed "lshw" && lshw_state="ON" - local inxi_state="OFF"; is_installed "inxi" && inxi_state="ON" - local hardinfo_state="OFF"; is_installed "hardinfo" && hardinfo_state="ON" - local nala_state="OFF"; is_installed "nala" && nala_state="ON" - local fwupd_state="OFF"; is_installed "fwupd" && fwupd_state="ON" - local gparted_state="OFF"; is_installed "gparted" && gparted_state="ON" - local disks_state="OFF"; is_installed "gnome-disk-utility" && disks_state="ON" - local timeshift_state="OFF"; is_installed "timeshift" && timeshift_state="ON" - local compress_state="OFF"; is_installed "zip" && is_installed "unzip" && is_installed "p7zip-full" && compress_state="ON" local curl_wget_state="OFF"; is_installed "curl" && is_installed "wget" && curl_wget_state="ON" local flatpak_state="OFF"; is_installed "flatpak" && flatpak_state="ON" - - local alacritty_state="OFF"; is_installed "alacritty" && alacritty_state="ON" + local fonts_state="OFF"; is_installed "fonts-ubuntu" && fonts_state="ON" + local fwupd_state="OFF"; is_installed "fwupd" && fwupd_state="ON" + local disks_state="OFF"; is_installed "gnome-disk-utility" && disks_state="ON" + local gparted_state="OFF"; is_installed "gparted" && gparted_state="ON" + local hardinfo_state="OFF"; is_installed "hardinfo" && hardinfo_state="ON" + local htop_state="OFF"; is_installed "htop" && htop_state="ON" + local inxi_state="OFF"; is_installed "inxi" && inxi_state="ON" local kitty_state="OFF"; is_installed "kitty" && kitty_state="ON" local kvm_state="OFF"; is_installed "virt-manager" && kvm_state="ON" + local lshw_state="OFF"; is_installed "lshw" && lshw_state="ON" + local mc_state="OFF"; is_installed "mc" && mc_state="ON" + local nala_state="OFF"; is_installed "nala" && nala_state="ON" + local ncdu_state="OFF"; is_installed "ncdu" && ncdu_state="ON" + local psensor_state="OFF"; is_installed "psensor" && psensor_state="ON" + local timeshift_state="OFF"; is_installed "timeshift" && timeshift_state="ON" + local tmux_state="OFF"; is_installed "tmux" && tmux_state="ON" local ttf_state="OFF"; is_installed "ttf-mscorefonts-installer" && ttf_state="ON" - local fonts_state="OFF"; is_installed "fonts-ubuntu" && fonts_state="ON" local choices choices=$(dialog --title "System Tools" --checklist \ - "Select system utilities to install:" 30 72 25 \ - "htop" "Interactive process viewer$(_inst htop)" "$htop_state" \ - "btop" "Resource monitor (fancy top)$(_inst btop)" "$btop_state" \ - "tmux" "Terminal multiplexer$(_inst tmux)" "$tmux_state" \ - "ncdu" "Disk usage analyzer (ncurses)$(_inst ncdu)" "$ncdu_state" \ - "mc" "Midnight Commander (file manager)$(_inst mc)" "$mc_state" \ - "psensor" "Hardware temperature monitor$(_inst psensor)" "$psensor_state" \ - "conky" "System monitor for desktop$(_inst conky)" "$conky_state" \ - "cpufetch" "CPU info fetcher$(_inst cpufetch)" "$cpufetch_state" \ - "cpu-x" "CPU-X (alternative to CPU-Z)$(_inst cpu-x)" "$cpu_x_state" \ - "lshw" "List hardware details$(_inst lshw)" "$lshw_state" \ - "inxi" "System information tool$(_inst inxi)" "$inxi_state" \ - "hardinfo" "Graphical system profiler$(_inst hardinfo)" "$hardinfo_state" \ - "nala" "APT frontend (parallel downloads)$(_inst nala)" "$nala_state" \ - "fwupd" "Firmware update daemon$(_inst fwupd)" "$fwupd_state" \ - "gparted" "GNOME partition editor$(_inst gparted)" "$gparted_state" \ - "gnome-disk-utility" "Disk management GUI$(_inst gnome-disk-utility)" "$disks_state" \ - "timeshift" "System restore snapshots$(_inst timeshift)" "$timeshift_state" \ - "alacritty" "GPU-accelerated terminal$(_inst alacritty)" "$alacritty_state" \ - "kitty" "GPU-based terminal emulator$(_inst kitty)" "$kitty_state" \ - "kvm" "QEMU/KVM virtualization$(_inst virt-manager)" "$kvm_state" \ - "compress" "Compression tools (zip, unrar, 7z)$(_inst zip)" "$compress_state" \ - "curl-wget" "HTTP transfer tools (curl, wget)$(_inst curl)" "$curl_wget_state" \ - "flatpak" "Flatpak sandbox + Flathub$(_inst flatpak)" "$flatpak_state" \ + "Select system utilities to install:" 30 72 26 \ + "alacritty" "GPU-accelerated terminal$(_inst alacritty)" "$alacritty_state" \ + "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" \ + "flatpak" "Flatpak sandbox + Flathub$(_inst flatpak)" "$flatpak_state" \ + "fonts-ubuntu" "Ubuntu font family$(_inst fonts-ubuntu)" "$fonts_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" \ + "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" \ "ttf-mscorefonts-installer" "Microsoft fonts (Times, Arial)$(_inst ttf-mscorefonts-installer)" "$ttf_state" \ - "fonts-ubuntu" "Ubuntu font family$(_inst fonts-ubuntu)" "$fonts_state" \ 3>&1 1>&2 2>&3) clear @@ -205,44 +212,46 @@ _cat_general() { } _cat_dev() { - local build_state="OFF"; is_installed "build-essential" && build_state="ON" - local pip_state="OFF"; is_installed "python3-pip" && pip_state="ON" - local docker_state="OFF"; is_installed "docker.io" && docker_state="ON" local apache_state="OFF"; is_installed "apache2" && apache_state="ON" - local nginx_state="OFF"; is_installed "nginx" && nginx_state="ON" - local mariadb_state="OFF"; is_installed "mariadb-server" && mariadb_state="ON" - local pg_state="OFF"; is_installed "postgresql" && pg_state="ON" - local sqlite_state="OFF"; is_installed "sqlite3" && sqlite_state="ON" - local redis_state="OFF"; is_installed "redis-server" && redis_state="ON" - local extrepo_state="OFF"; is_installed "extrepo" && extrepo_state="ON" - local props_state="OFF"; is_installed "software-properties-common" && props_state="ON" - local openssl_state="OFF"; is_installed "openssl" && openssl_state="ON" - local netcat_state="OFF"; is_installed "netcat-openbsd" && netcat_state="ON" + local build_state="OFF"; is_installed "build-essential" && build_state="ON" local certbot_state="OFF"; is_installed "certbot" && certbot_state="ON" - local ufw_state="OFF"; is_installed "ufw" && ufw_state="ON" + local docker_state="OFF"; is_installed "docker.io" && docker_state="ON" + local extrepo_state="OFF"; is_installed "extrepo" && extrepo_state="ON" local fail2ban_state="OFF"; is_installed "fail2ban" && fail2ban_state="ON" + local mariadb_state="OFF"; is_installed "mariadb-server" && mariadb_state="ON" + local netcat_state="OFF"; is_installed "netcat-openbsd" && netcat_state="ON" + local nginx_state="OFF"; is_installed "nginx" && nginx_state="ON" local ssh_state="OFF"; is_installed "openssh-server" && ssh_state="ON" + local openssl_state="OFF"; is_installed "openssl" && openssl_state="ON" + local pg_state="OFF"; is_installed "postgresql" && pg_state="ON" + local pip_state="OFF"; is_installed "python3-pip" && pip_state="ON" + local redis_state="OFF"; is_installed "redis-server" && redis_state="ON" + local props_state="OFF"; is_installed "software-properties-common" && props_state="ON" + local sqlite_state="OFF"; is_installed "sqlite3" && sqlite_state="ON" + local ufw_state="OFF"; is_installed "ufw" && ufw_state="ON" + local zenmap_state="OFF"; is_installed "zenmap" && zenmap_state="ON" local choices choices=$(dialog --title "Development & Servers" --checklist \ - "Select development tools and servers:" 26 72 17 \ - "build-essential" "C/C++ build tools (gcc, make)$(_inst build-essential)" "$build_state" \ - "python3-pip" "Python 3 pip + venv + dev$(_inst python3-pip)" "$pip_state" \ - "docker" "Docker + docker-compose$(_inst docker.io)" "$docker_state" \ + "Select development tools and servers:" 26 72 18 \ "apache2" "Apache web server$(_inst apache2)" "$apache_state" \ - "nginx" "Nginx web server$(_inst nginx)" "$nginx_state" \ - "mariadb-server" "MariaDB database server$(_inst mariadb-server)" "$mariadb_state" \ - "postgresql" "PostgreSQL database server$(_inst postgresql)" "$pg_state" \ - "sqlite3" "SQLite database engine$(_inst sqlite3)" "$sqlite_state" \ - "redis-server" "Redis key-value store$(_inst redis-server)" "$redis_state" \ - "extrepo" "External repository manager$(_inst extrepo)" "$extrepo_state" \ - "software-properties-common" "Repository management (PPA)$(_inst software-properties-common)" "$props_state" \ - "openssl" "OpenSSL cryptography toolkit$(_inst openssl)" "$openssl_state" \ - "netcat-openbsd" "TCP/IP networking utility$(_inst netcat-openbsd)" "$netcat_state" \ + "build-essential" "C/C++ build tools (gcc, make)$(_inst build-essential)" "$build_state" \ "certbot" "Let's Encrypt TLS certificates$(_inst certbot)" "$certbot_state" \ - "ufw" "Uncomplicated firewall$(_inst ufw)" "$ufw_state" \ + "docker" "Docker + docker-compose$(_inst docker.io)" "$docker_state" \ + "extrepo" "External repository manager$(_inst extrepo)" "$extrepo_state" \ "fail2ban" "Brute-force protection$(_inst fail2ban)" "$fail2ban_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" \ + "software-properties-common" "Repository management (PPA)$(_inst software-properties-common)" "$props_state" \ + "sqlite3" "SQLite database engine$(_inst sqlite3)" "$sqlite_state" \ + "ufw" "Uncomplicated firewall$(_inst ufw)" "$ufw_state" \ + "zenmap" "Network scanner GUI (Nmap frontend)$(_inst zenmap)" "$zenmap_state" \ 3>&1 1>&2 2>&3) clear @@ -275,6 +284,9 @@ _cat_dev() { echo "Docker already installed." fi ;; + zenmap) + install_backports_or_stable zenmap + ;; *) if ! is_installed "$pkg"; then sudo apt install -y "$pkg" @@ -288,26 +300,71 @@ _cat_dev() { echo -e "${GREEN}Development tools and servers installed.${NC}" } -_cat_media() { - local vlc_state="OFF"; is_installed "vlc" && vlc_state="ON" - local mpv_state="OFF"; is_installed "mpv" && mpv_state="ON" +_cat_players() { + local handbrake_state="OFF"; is_installed "handbrake" && handbrake_state="ON" + local mpv_state="OFF"; is_installed "mpv" && mpv_state="ON" + local vlc_state="OFF"; is_installed "vlc" && vlc_state="ON" + + local choices + choices=$(dialog --title "Media Players" --checklist \ + "Select media players:" 12 72 3 \ + "handbrake" "Video transcoder (DVD ripper)$(_inst handbrake)" "$handbrake_state" \ + "mpv" "Lightweight media player$(_inst mpv)" "$mpv_state" \ + "vlc" "VLC media player$(_inst vlc)" "$vlc_state" \ + 3>&1 1>&2 2>&3) + clear + + [ -z "$choices" ] && return + + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + + for pkg in $cleaned; do + if ! is_installed "$pkg"; then + sudo apt install -y "$pkg" + else + echo "$pkg already installed." + fi + done + + echo -e "${GREEN}Media players installed.${NC}" +} + +_cat_browsers() { local chromium_state="OFF"; is_installed "chromium" && chromium_state="ON" - local thunderbird_state="OFF"; is_installed "thunderbird" && thunderbird_state="ON" + local dillo_state="OFF"; is_installed "dillo" && dillo_state="ON" + local elinks_state="OFF"; is_installed "elinks" && elinks_state="ON" + local epiphany_state="OFF"; is_installed "epiphany-browser" && epiphany_state="ON" + local falkon_state="OFF"; is_installed "falkon" && falkon_state="ON" local firefox_state="OFF" if command -v firefox &>/dev/null && ! command -v firefox-esr &>/dev/null; then firefox_state="ON" fi + local floorp_state="OFF"; is_installed "floorp" && floorp_state="ON" + local konqueror_state="OFF"; is_installed "konqueror" && konqueror_state="ON" local librewolf_state="OFF"; is_installed "librewolf" && librewolf_state="ON" + local privacybrowser_state="OFF"; is_installed "privacybrowser" && privacybrowser_state="ON" + local qutebrowser_state="OFF"; is_installed "qutebrowser" && qutebrowser_state="ON" + local thunderbird_state="OFF"; is_installed "thunderbird" && thunderbird_state="ON" + local torbrowser_state="OFF"; is_installed "torbrowser-launcher" && torbrowser_state="ON" + local w3m_state="OFF"; is_installed "w3m" && w3m_state="ON" local choices - choices=$(dialog --title "Media & Browsers" --checklist \ - "Select media players and browsers:" 16 72 6 \ - "vlc" "VLC media player$(_inst vlc)" "$vlc_state" \ - "mpv" "Lightweight media player$(_inst mpv)" "$mpv_state" \ - "chromium" "Chromium web browser$(_inst chromium)" "$chromium_state" \ - "firefox" "Firefox from Mozilla (replaces ESR)" "$firefox_state" \ - "thunderbird" "Email client$(_inst thunderbird)" "$thunderbird_state" \ - "librewolf" "Privacy-focused Firefox fork$(_inst librewolf)" "$librewolf_state" \ + choices=$(dialog --title "Web Browsers" --checklist \ + "Select web browsers:" 24 72 14 \ + "chromium" "Chromium web browser$(_inst chromium)" "$chromium_state" \ + "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" \ + "floorp" "Firefox-based browser (external repo)" "$floorp_state" \ + "konqueror" "KDE file manager / web browser$(_inst konqueror)" "$konqueror_state" \ + "librewolf" "Privacy-focused Firefox fork$(_inst librewolf)" "$librewolf_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" \ + "w3m" "Text-mode browser + deps (w3m-img)$(_inst w3m)" "$w3m_state" \ 3>&1 1>&2 2>&3) clear @@ -320,6 +377,28 @@ _cat_media() { firefox) install_firefox_mozilla ;; + floorp) + if ! is_installed "floorp"; then + echo "Setting up Floorp repository..." + ! is_installed "curl" && sudo apt install -y curl + ! is_installed "gpg" && sudo apt install -y gpg + sudo install -d -m 0755 /etc/apt/keyrings + curl -fsSL https://ppa.floorp.app/KEY.gpg | \ + sudo gpg --dearmor -o /usr/share/keyrings/Floorp.gpg + sudo curl -sS --compressed -o /etc/apt/sources.list.d/Floorp.list \ + 'https://ppa.floorp.app/Floorp.list' + sudo tee /etc/apt/preferences.d/floorp > /dev/null << EOF +Package: * +Pin: origin ppa.floorp.app +Pin-Priority: 1000 +EOF + sudo apt update + sudo apt install -y floorp + echo -e "${GREEN}Floorp installed.${NC}" + else + echo "Floorp already installed." + fi + ;; librewolf) if ! is_installed "librewolf"; then echo "Installing LibreWolf..." @@ -332,6 +411,19 @@ _cat_media() { echo "LibreWolf already installed." fi ;; + w3m) + local need=() + ! is_installed "w3m" && need+=("w3m") + ! is_installed "w3m-img" && need+=("w3m-img") + ! is_installed "ca-certificates" && need+=("ca-certificates") + ! is_installed "xsel" && need+=("xsel") + if [ ${#need[@]} -gt 0 ]; then + echo "Installing w3m and dependencies..." + sudo apt install -y "${need[@]}" + else + echo "w3m already installed." + fi + ;; *) if ! is_installed "$pkg"; then sudo apt install -y "$pkg" @@ -342,28 +434,28 @@ _cat_media() { esac done - echo -e "${GREEN}Media & browsers installed.${NC}" + echo -e "${GREEN}Web browsers installed.${NC}" } _cat_themes() { local arc_state="OFF"; is_installed "arc-theme" && arc_state="ON" - local orchis_state="OFF"; is_installed "orchis-gtk-theme" && orchis_state="ON" - local numix_gtk_state="OFF"; is_installed "numix-gtk-theme" && numix_gtk_state="ON" - local breeze_gtk_state="OFF"; is_installed "breeze-gtk-theme" && breeze_gtk_state="ON" local blackbird_state="OFF"; is_installed "blackbird-gtk-theme" && blackbird_state="ON" local bluebird_state="OFF"; is_installed "bluebird-gtk-theme" && bluebird_state="ON" + local breeze_gtk_state="OFF"; is_installed "breeze-gtk-theme" && breeze_gtk_state="ON" local greybird_state="OFF"; is_installed "greybird-gtk-theme" && greybird_state="ON" + local numix_gtk_state="OFF"; is_installed "numix-gtk-theme" && numix_gtk_state="ON" + local orchis_state="OFF"; is_installed "orchis-gtk-theme" && orchis_state="ON" local choices choices=$(dialog --title "GTK Themes" --checklist \ "Select GTK themes to install:" 16 72 7 \ "arc-theme" "Arc GTK theme$(_inst arc-theme)" "$arc_state" \ - "orchis-gtk-theme" "Orchis GTK theme$(_inst orchis-gtk-theme)" "$orchis_state" \ - "numix-gtk-theme" "Numix GTK theme$(_inst numix-gtk-theme)" "$numix_gtk_state" \ - "breeze-gtk-theme" "Breeze GTK theme$(_inst breeze-gtk-theme)" "$breeze_gtk_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$(_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" \ 3>&1 1>&2 2>&3) clear @@ -383,17 +475,17 @@ _cat_themes() { } _cat_icons() { - local papirus_state="OFF"; is_installed "papirus-icon-theme" && papirus_state="ON" - local numix_state="OFF"; is_installed "numix-icon-theme" && numix_state="ON" - local numix_c_state="OFF"; is_installed "numix-icon-theme-circle" && numix_c_state="ON" local breeze_state="OFF"; is_installed "breeze-icon-theme" && breeze_state="ON" local deepin_state="OFF"; is_installed "deepin-icon-theme" && deepin_state="ON" local ele_state="OFF"; is_installed "elementary-icon-theme" && ele_state="ON" local ele_xfce_state="OFF"; is_installed "elementary-xfce-icon-theme" && ele_xfce_state="ON" local moka_state="OFF"; is_installed "moka-icon-theme" && moka_state="ON" + local numix_state="OFF"; is_installed "numix-icon-theme" && numix_state="ON" + local numix_c_state="OFF"; is_installed "numix-icon-theme-circle" && numix_c_state="ON" + local obsidian_state="OFF"; is_installed "obsidian-icon-theme" && obsidian_state="ON" + local papirus_state="OFF"; is_installed "papirus-icon-theme" && papirus_state="ON" local paper_state="OFF"; is_installed "paper-icon-theme" && paper_state="ON" local suru_state="OFF"; is_installed "suru-icon-theme" && suru_state="ON" - local obsidian_state="OFF"; is_installed "obsidian-icon-theme" && obsidian_state="ON" local kf6_state="OFF" local has_kf6=false @@ -403,24 +495,24 @@ _cat_icons() { fi local height=18 - local list_height=12 + local list_height=11 local items=( - "papirus-icon-theme" "Papirus icon theme$(_inst papirus-icon-theme)" "$papirus_state" - "numix-icon-theme" "Numix icon theme$(_inst numix-icon-theme)" "$numix_state" - "numix-icon-theme-circle" "Numix Circle icon theme$(_inst numix-icon-theme-circle)" "$numix_c_state" "breeze-icon-theme" "Breeze icon theme$(_inst breeze-icon-theme)" "$breeze_state" "deepin-icon-theme" "Deepin icon theme$(_inst deepin-icon-theme)" "$deepin_state" "elementary-icon-theme" "Elementary icon theme$(_inst elementary-icon-theme)" "$ele_state" "elementary-xfce-icon-theme" "Elementary Xfce icons$(_inst elementary-xfce-icon-theme)" "$ele_xfce_state" "moka-icon-theme" "Moka icon theme$(_inst moka-icon-theme)" "$moka_state" + "numix-icon-theme" "Numix icon theme$(_inst numix-icon-theme)" "$numix_state" + "numix-icon-theme-circle" "Numix Circle icon theme$(_inst numix-icon-theme-circle)" "$numix_c_state" + "obsidian-icon-theme" "Obsidian icon theme$(_inst obsidian-icon-theme)" "$obsidian_state" + "papirus-icon-theme" "Papirus icon theme$(_inst papirus-icon-theme)" "$papirus_state" "paper-icon-theme" "Paper icon theme$(_inst paper-icon-theme)" "$paper_state" "suru-icon-theme" "Suru icon theme$(_inst suru-icon-theme)" "$suru_state" - "obsidian-icon-theme" "Obsidian icon theme$(_inst obsidian-icon-theme)" "$obsidian_state" ) if $has_kf6; then items+=("kf6-breeze-icon-theme" "KF6 Breeze icon theme$(_inst kf6-breeze-icon-theme)" "$kf6_state") height=20 - list_height=13 + list_height=12 fi local choices @@ -454,23 +546,34 @@ _cat_fetch() { fi local fetch_state="OFF"; is_installed "$fetch_pkg" && fetch_state="ON" - local screenfetch_state="OFF"; is_installed "screenfetch" && screenfetch_state="ON" local linuxlogo_state="OFF"; is_installed "linuxlogo" && linuxlogo_state="ON" + local screenfetch_state="OFF"; is_installed "screenfetch" && screenfetch_state="ON" - local items=( - "${fetch_pkg}" "System info fetcher$(_inst $fetch_pkg)" "$fetch_state" - "screenfetch" "System info (BSD/Linux)$(_inst screenfetch)" "$screenfetch_state" - "linuxlogo" "Linux logo + system info$(_inst linuxlogo)" "$linuxlogo_state" - ) + local hyfetch_state="OFF" + if [ "$DEBIAN_CODENAME" = "trixie" ]; then + is_installed "hyfetch" && hyfetch_state="ON" + fi + local items=() local height=14 local list_height=3 - if [ "$DEBIAN_CODENAME" = "trixie" ]; then - local hyfetch_state="OFF"; is_installed "hyfetch" && hyfetch_state="ON" - items+=("hyfetch" "Neofetch with pride flags$(_inst hyfetch)" "$hyfetch_state") - height=16 - list_height=4 + + if [ "$fetch_pkg" = "fastfetch" ]; then + items+=("fastfetch" "System info fetcher$(_inst fastfetch)" "$fetch_state") + if [ "$DEBIAN_CODENAME" = "trixie" ]; then + items+=("hyfetch" "Neofetch with pride flags$(_inst hyfetch)" "$hyfetch_state") + height=16; list_height=4 + fi fi + items+=("linuxlogo" "Linux logo + system info$(_inst linuxlogo)" "$linuxlogo_state") + if [ "$fetch_pkg" = "neofetch" ]; then + items+=("neofetch" "System info fetcher$(_inst neofetch)" "$fetch_state") + if [ "$DEBIAN_CODENAME" = "trixie" ]; then + items+=("hyfetch" "Neofetch with pride flags$(_inst hyfetch)" "$hyfetch_state") + height=16; list_height=4 + fi + fi + items+=("screenfetch" "System info (BSD/Linux)$(_inst screenfetch)" "$screenfetch_state") local choices choices=$(dialog --title "Fetch Tools" --checklist \ @@ -505,6 +608,126 @@ _cat_fetch() { echo -e "${GREEN}Fetch tools installed.${NC}" } +_cat_download() { + local aria2_state="OFF"; is_installed "aria2" && aria2_state="ON" + local filezilla_state="OFF"; is_installed "filezilla" && filezilla_state="ON" + local riseupvpn_state="OFF"; is_installed "riseup-vpn" && riseupvpn_state="ON" + local ytdlp_state="OFF"; is_installed "yt-dlp" && ytdlp_state="ON" + local ytdlp_gui_state="OFF"; is_installed "youtubedl-gui" && ytdlp_gui_state="ON" + + local deluge_state="OFF"; is_installed "deluge" && deluge_state="ON" + local deluged_state="OFF"; is_installed "deluged" && deluged_state="ON" + local mktorrent_state="OFF"; is_installed "mktorrent" && mktorrent_state="ON" + local qbit_state="OFF"; is_installed "qbittorrent" && qbit_state="ON" + local qbitnox_state="OFF"; is_installed "qbittorrent-nox" && qbitnox_state="ON" + local tr_cli_state="OFF"; is_installed "transmission-cli" && tr_cli_state="ON" + local tr_gtk_state="OFF"; is_installed "transmission-gtk" && tr_gtk_state="ON" + local tr_qt_state="OFF"; is_installed "transmission-qt" && tr_qt_state="ON" + + local choices1 choices2="" + + choices1=$(dialog --title "Download & Network — Downloaders" --checklist \ + "Select download tools:" 16 72 5 \ + "aria2" "Multiprotocol downloader (CLI)$(_inst aria2)" "$aria2_state" \ + "filezilla" "FTP/SFTP client (GUI)$(_inst filezilla)" "$filezilla_state" \ + "riseup-vpn" "Riseup VPN client$(_inst riseup-vpn)" "$riseupvpn_state" \ + "yt-dlp" "Video downloader CLI$(_inst yt-dlp)" "$ytdlp_state" \ + "youtubedl-gui" "GUI for yt-dlp$(_inst youtubedl-gui)" "$ytdlp_gui_state" \ + 3>&1 1>&2 2>&3) + clear + + choices2=$(dialog --title "Download & Network — Torrent Clients" --checklist \ + "Select torrent clients:" 18 72 8 \ + "deluge" "BitTorrent client (GTK)$(_inst deluge)" "$deluge_state" \ + "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" \ + 3>&1 1>&2 2>&3) + clear + + local cleaned + cleaned=$(echo "$choices1 $choices2" | tr -d '"') + + [ -z "$cleaned" ] && { echo "No download tools selected."; return; } + + for pkg in $cleaned; do + case $pkg in + riseup-vpn) + install_backports_or_stable riseup-vpn + ;; + yt-dlp) + install_backports_or_stable yt-dlp + ;; + qbittorrent) + install_backports_or_stable qbittorrent + ;; + qbittorrent-nox) + install_backports_or_stable qbittorrent-nox + ;; + *) + if ! is_installed "$pkg"; then + sudo apt install -y "$pkg" + else + echo "$pkg already installed." + fi + ;; + esac + done + + echo -e "${GREEN}Download & network tools installed.${NC}" +} + +_cat_design() { + local audacity_state="OFF"; is_installed "audacity" && audacity_state="ON" + local ardour_state="OFF"; is_installed "ardour" && ardour_state="ON" + local blender_state="OFF"; is_installed "blender" && blender_state="ON" + local ffmpeg_state="OFF"; is_installed "ffmpeg" && ffmpeg_state="ON" + local gimp_state="OFF"; is_installed "gimp" && gimp_state="ON" + local inkscape_state="OFF"; is_installed "inkscape" && inkscape_state="ON" + local kdenlive_state="OFF"; is_installed "kdenlive" && kdenlive_state="ON" + local krita_state="OFF"; is_installed "krita" && krita_state="ON" + local obs_state="OFF"; is_installed "obs-studio" && obs_state="ON" + local openshot_state="OFF"; is_installed "openshot-qt" && openshot_state="ON" + local scribus_state="OFF"; is_installed "scribus" && scribus_state="ON" + local shotcut_state="OFF"; is_installed "shotcut" && shotcut_state="ON" + + local choices + choices=$(dialog --title "Multimedia & Design" --checklist \ + "Select multimedia and design tools:" 20 72 12 \ + "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" \ + "ffmpeg" "Multimedia framework (CLI)$(_inst ffmpeg)" "$ffmpeg_state" \ + "gimp" "Image editor (Photoshop alternative)$(_inst gimp)" "$gimp_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" \ + 3>&1 1>&2 2>&3) + clear + + [ -z "$choices" ] && return + + local cleaned; cleaned=$(echo "$choices" | tr -d '"') + + for pkg in $cleaned; do + if ! is_installed "$pkg"; then + sudo apt install -y "$pkg" + else + echo "$pkg already installed." + fi + done + + echo -e "${GREEN}Multimedia & design tools installed.${NC}" +} + install_firefox_mozilla() { if command -v firefox &>/dev/null && ! command -v firefox-esr &>/dev/null; then echo "Firefox (Mozilla) is already installed." diff --git a/modules/firmware.sh b/modules/firmware.sh index 4725ace..f60bbb6 100644 --- a/modules/firmware.sh +++ b/modules/firmware.sh @@ -1,8 +1,19 @@ #!/usr/bin/env bash install_firmware() { - local fw_pkgs - fw_pkgs=$(pkg_versions firmware-linux-nonfree) + local fw_pkgs="" + local fw_bpo + fw_bpo=$(apt-cache madison firmware-linux-nonfree 2>/dev/null | \ + grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1) + if [ -n "$fw_bpo" ]; then + local fw_stable + fw_stable=$(apt-cache policy firmware-linux-nonfree 2>/dev/null | awk 'NR==3 {print $2; exit}') + fw_pkgs=" - firmware-linux-nonfree ${fw_bpo} (backports) / ${fw_stable} (stable)\n" + else + local fw_ver + fw_ver=$(apt-cache policy firmware-linux-nonfree 2>/dev/null | awk 'NR==3 {print $2; exit}') + fw_pkgs=" - firmware-linux-nonfree ${fw_ver}\n" + fi if ! whiptail --title "Base Firmware" --yesno \ "Install the following package?\n\n${fw_pkgs}\nProvides firmware for various hardware components.\n\nProceed?" 14 65; then echo "Skipping base firmware." @@ -11,13 +22,8 @@ install_firmware() { echo -e "${YELLOW}Installing base firmware...${NC}" local pkg="firmware-linux-nonfree" - if [ "$(is_backports_enabled)" == true ]; then - if whiptail --title "Firmware Backports" \ - --yesno "Backports is enabled.\nInstall firmware-linux-nonfree from backports (newer version)?" 10 60; then - sudo apt install -y -t "${DEBIAN_CODENAME}-backports" $pkg - else - sudo apt install -y $pkg - fi + if [ "$(is_backports_enabled)" == true ] && [ -n "$fw_bpo" ]; then + sudo apt install -y -t "${DEBIAN_CODENAME}-backports" $pkg else sudo apt install -y $pkg fi diff --git a/modules/gpu.sh b/modules/gpu.sh index a812ff9..28328a4 100644 --- a/modules/gpu.sh +++ b/modules/gpu.sh @@ -14,10 +14,19 @@ install_gpu_drivers() { esac if [ "$GPU_TYPE" != "nvidia" ] && [ "$(is_backports_enabled)" == true ]; then - local mesa_pkgs - mesa_pkgs=$(pkg_versions libgl1-mesa-dri mesa-vulkan-drivers) + local mesa_pkgs="" + for mpkg in libgl1-mesa-dri mesa-vulkan-drivers; 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 + mesa_pkgs+=" - ${mpkg} ${bpo_ver} (backports)\n" + else + mesa_pkgs+=" - ${mpkg} (from stable)\n" + fi + done if whiptail --title "Mesa Backports" --yesno \ - "Install newer Mesa GPU drivers from backports?\n\n${mesa_pkgs}\n\nRecommended for better GPU performance and gaming." 14 65; then + "Install newer Mesa GPU drivers from backports?\n\n${mesa_pkgs}\nRecommended for better GPU performance and gaming." 14 65; then echo "Installing Mesa from backports..." sudo apt install -y -t "${DEBIAN_CODENAME}-backports" libgl1-mesa-dri mesa-vulkan-drivers fi diff --git a/modules/repos.sh b/modules/repos.sh index 3a3a7fb..0f23728 100644 --- a/modules/repos.sh +++ b/modules/repos.sh @@ -100,6 +100,8 @@ configure_repos() { sudo apt-mark hold tzdata 2>/dev/null || true sudo apt upgrade -y sudo apt-mark unhold tzdata 2>/dev/null || true + sudo apt autoremove -y + sudo apt autoclean echo -e "${GREEN}System upgraded.${NC}" else echo "Skipping upgrade." diff --git a/modules/utils.sh b/modules/utils.sh index 9cf8957..8426ad8 100644 --- a/modules/utils.sh +++ b/modules/utils.sh @@ -247,6 +247,41 @@ is_backports_enabled() { } +install_backports_or_stable() { + local pkg="$1" + + local bpo_ver="" + if [ "$(is_backports_enabled)" == true ]; then + bpo_ver=$(apt-cache madison "$pkg" 2>/dev/null | \ + grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1) + fi + + if is_installed "$pkg"; then + if [ -n "$bpo_ver" ]; then + local current_ver + current_ver=$(dpkg -l "$pkg" 2>/dev/null | awk '/^ii/{print $3}') + if whiptail --title "Backports: ${pkg}" --yesno \ + "${pkg} is installed (${current_ver}).\n\nUpgrade to backports version ${bpo_ver}?" 12 62; then + sudo apt install -y -t "${DEBIAN_CODENAME}-backports" "$pkg" + return + fi + fi + echo "$pkg already installed." + return + fi + + if [ -n "$bpo_ver" ]; then + local stable_ver + stable_ver=$(apt-cache policy "$pkg" 2>/dev/null | awk 'NR==3 {print $2; exit}') + if whiptail --title "Backports: ${pkg}" --yesno \ + "Install ${pkg} from backports?\n\nBackports: ${bpo_ver}\nStable: ${stable_ver:-N/A}\n\nChoose Yes for backports, No for stable." 12 62; then + sudo apt install -y -t "${DEBIAN_CODENAME}-backports" "$pkg" + return + fi + fi + sudo apt install -y "$pkg" +} + get_backports_kernel_version() { local ver ver=$(apt-cache policy linux-image-amd64 2>/dev/null | \