mirror of
https://github.com/stornic56/debianito-post-install.git
synced 2026-09-14 06:02:35 +00:00
dual-gpu fix & lspci cache
- Replaced the restrictive Broadcom firmware installation flow with a persistent, step-by-step process in modules/firmware.sh. Now installs dkms, wireless-tools, and linux-headers-amd64 separately, then applies blacklist configuration, updates initramfs, and loads conflicting modules properly. - Fixed conky package name across system.sh and bullseye/extras.sh. Changed from "conky" to "conky-all" with corresponding state variable updates for correct installation via apt. - Corrected broken GRUB sed command in modules/gpu.sh for AMD GCN support. Added grep guard to prevent duplicate parameter insertion and fixed regex pattern for proper cmdline modification. - Added whiptail pre-flight check in debianito.sh. Auto-installs required TUI dependencies if missing before the main menu, preventing runtime failures. - Fixed home directory path resolution bug in modules/sudo_config.sh. Replaced eval echo "~$USER" with getent passwd approach for reliable user home detection across SUDO_USER contexts. - Implemented global lspci output caching across 18+ locations. Single cache population via _init_lspci_cache() before detect_gpu, all subsequent reads use LSPCI_OUTPUT variable to eliminate redundant hardware polling calls. - Added apt update deduplication helper in modules/utils.sh. _ensure_apt_updated() with APT_UPDATED flag bypasses redundant package list refreshes across extras/, gaming/, firmware/, and desktop_display/ modules while preserving transactional rollback paths in repos.sh. - Fixed STATE_REFRESHED logic in debianito.sh main_menu case statement. Added STATE_REFRESHED=true to branches 3, 5, 7, 9, 11, 12, and 13 that mutate system state, ensuring refresh_system_state() triggers correctly after configuration changes. - Removed dead REPOS_CONFIGURED variable from debianito.sh and modules/repos.sh. Variable was written but never read, eliminated to clean up global namespace without affecting repository functionality.
This commit is contained in:
+35
-8
@@ -42,7 +42,6 @@ if [ -d "${MODULES_DIR}/bullseye" ]; then
|
|||||||
[ -f "${MODULES_DIR}/bullseye/extras.sh" ] && source "${MODULES_DIR}/bullseye/extras.sh"
|
[ -f "${MODULES_DIR}/bullseye/extras.sh" ] && source "${MODULES_DIR}/bullseye/extras.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
REPOS_CONFIGURED=false
|
|
||||||
DEBIAN_VERSION=""
|
DEBIAN_VERSION=""
|
||||||
DEBIAN_CODENAME=""
|
DEBIAN_CODENAME=""
|
||||||
|
|
||||||
@@ -80,7 +79,10 @@ main_menu() {
|
|||||||
case "$choice" in
|
case "$choice" in
|
||||||
1) _show_sysinfo ;;
|
1) _show_sysinfo ;;
|
||||||
2) config_sudo || true ;;
|
2) config_sudo || true ;;
|
||||||
3) _system_preferences_menu ;;
|
3)
|
||||||
|
_system_preferences_menu
|
||||||
|
STATE_REFRESHED=true
|
||||||
|
;;
|
||||||
4)
|
4)
|
||||||
if [ "$DEBIAN_VERSION" = "11" ] && type configure_repos_bullseye &>/dev/null; then
|
if [ "$DEBIAN_VERSION" = "11" ] && type configure_repos_bullseye &>/dev/null; then
|
||||||
configure_repos_bullseye || true
|
configure_repos_bullseye || true
|
||||||
@@ -95,6 +97,7 @@ main_menu() {
|
|||||||
else
|
else
|
||||||
install_firmware || true
|
install_firmware || true
|
||||||
fi
|
fi
|
||||||
|
STATE_REFRESHED=true
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
local gpu_sub
|
local gpu_sub
|
||||||
@@ -109,7 +112,10 @@ main_menu() {
|
|||||||
esac
|
esac
|
||||||
STATE_REFRESHED=true
|
STATE_REFRESHED=true
|
||||||
;;
|
;;
|
||||||
7) show_kernel_menu || true ;;
|
7)
|
||||||
|
show_kernel_menu || true
|
||||||
|
STATE_REFRESHED=true
|
||||||
|
;;
|
||||||
8)
|
8)
|
||||||
if [ "$DEBIAN_VERSION" = "11" ] && type install_gaming_bullseye &>/dev/null; then
|
if [ "$DEBIAN_VERSION" = "11" ] && type install_gaming_bullseye &>/dev/null; then
|
||||||
install_gaming_bullseye || true
|
install_gaming_bullseye || true
|
||||||
@@ -118,18 +124,34 @@ main_menu() {
|
|||||||
fi
|
fi
|
||||||
STATE_REFRESHED=true
|
STATE_REFRESHED=true
|
||||||
;;
|
;;
|
||||||
9) zram_menu || true ;;
|
9)
|
||||||
10) manage_swap || true; STATE_REFRESHED=true ;;
|
zram_menu || true
|
||||||
|
STATE_REFRESHED=true
|
||||||
|
;;
|
||||||
|
10)
|
||||||
|
manage_swap || true
|
||||||
|
STATE_REFRESHED=true
|
||||||
|
;;
|
||||||
11)
|
11)
|
||||||
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
|
||||||
else
|
else
|
||||||
install_extras || true
|
install_extras || true
|
||||||
fi
|
fi
|
||||||
|
STATE_REFRESHED=true
|
||||||
|
;;
|
||||||
|
12)
|
||||||
|
rescue_boot || true
|
||||||
|
STATE_REFRESHED=true
|
||||||
|
;;
|
||||||
|
13)
|
||||||
|
manage_desktop_display || true
|
||||||
|
STATE_REFRESHED=true
|
||||||
|
;;
|
||||||
|
14)
|
||||||
|
echo "Exiting."
|
||||||
|
exit 0
|
||||||
;;
|
;;
|
||||||
12) rescue_boot || true ;;
|
|
||||||
13) manage_desktop_display || true ;;
|
|
||||||
14) echo "Exiting."; exit 0 ;;
|
|
||||||
esac
|
esac
|
||||||
if $STATE_REFRESHED; then
|
if $STATE_REFRESHED; then
|
||||||
refresh_system_state
|
refresh_system_state
|
||||||
@@ -139,6 +161,10 @@ main_menu() {
|
|||||||
|
|
||||||
check_root
|
check_root
|
||||||
check_sudo
|
check_sudo
|
||||||
|
if ! command -v whiptail >/dev/null 2>&1; then
|
||||||
|
echo -e "${YELLOW}[+] whiptail not found. Installing required TUI dependencies...${NC}"
|
||||||
|
_ensure_apt_updated && sudo apt-get install -y whiptail
|
||||||
|
fi
|
||||||
if ! _check_network; then
|
if ! _check_network; then
|
||||||
echo -e "${YELLOW}──────────────────────────────────────────${NC}"
|
echo -e "${YELLOW}──────────────────────────────────────────${NC}"
|
||||||
echo -e "${YELLOW} No internet connectivity detected.${NC}"
|
echo -e "${YELLOW} No internet connectivity detected.${NC}"
|
||||||
@@ -152,6 +178,7 @@ _ensure_time_synced
|
|||||||
detect_debian_version
|
detect_debian_version
|
||||||
detect_cpu_ram
|
detect_cpu_ram
|
||||||
detect_kernel
|
detect_kernel
|
||||||
|
_init_lspci_cache
|
||||||
detect_gpu
|
detect_gpu
|
||||||
detect_network
|
detect_network
|
||||||
detect_displayserver
|
detect_displayserver
|
||||||
|
|||||||
+74
-44
@@ -61,12 +61,13 @@ Instalar?"; then
|
|||||||
|
|
||||||
_cat_customization_bullseye() {
|
_cat_customization_bullseye() {
|
||||||
local sub
|
local sub
|
||||||
sub=$(_menu "Customization (Bullseye)" "Select type:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
sub=$(
|
||||||
|
_menu "Customization (Bullseye)" "Select type:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
||||||
"1" "Desktop Themes (GTK/KDE)" \
|
"1" "Desktop Themes (GTK/KDE)" \
|
||||||
"2" "Icon Themes" \
|
"2" "Icon Themes" \
|
||||||
"3" "Cursor Themes" \
|
"3" "Cursor Themes" \
|
||||||
"4" "Fonts" \
|
"4" "Fonts" \
|
||||||
"5" "Terminals" \
|
"5" "Terminals"
|
||||||
)
|
)
|
||||||
[ -z "$sub" ] && return
|
[ -z "$sub" ] && return
|
||||||
case $sub in
|
case $sub in
|
||||||
@@ -82,17 +83,19 @@ _cat_themes_bullseye() {
|
|||||||
local item_count=6
|
local item_count=6
|
||||||
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Desktop Themes (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
choices=$(
|
||||||
|
_checklist "Desktop Themes (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
||||||
"arc-theme" "Arc GTK theme" "$(_state arc-theme)" \
|
"arc-theme" "Arc GTK theme" "$(_state arc-theme)" \
|
||||||
"blackbird-gtk-theme" "Blackbird GTK theme" "$(_state blackbird-gtk-theme)" \
|
"blackbird-gtk-theme" "Blackbird GTK theme" "$(_state blackbird-gtk-theme)" \
|
||||||
"bluebird-gtk-theme" "Bluebird GTK theme" "$(_state bluebird-gtk-theme)" \
|
"bluebird-gtk-theme" "Bluebird GTK theme" "$(_state bluebird-gtk-theme)" \
|
||||||
"breeze-gtk-theme" "Breeze GTK theme (KDE port)" "$(_state breeze-gtk-theme)" \
|
"breeze-gtk-theme" "Breeze GTK theme (KDE port)" "$(_state breeze-gtk-theme)" \
|
||||||
"greybird-gtk-theme" "Greybird GTK theme" "$(_state greybird-gtk-theme)" \
|
"greybird-gtk-theme" "Greybird GTK theme" "$(_state greybird-gtk-theme)" \
|
||||||
"numix-gtk-theme" "Numix GTK theme" "$(_state numix-gtk-theme)" \
|
"numix-gtk-theme" "Numix GTK theme" "$(_state numix-gtk-theme)"
|
||||||
)
|
)
|
||||||
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
|
||||||
! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed."
|
! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed."
|
||||||
done
|
done
|
||||||
@@ -118,7 +121,8 @@ _cat_icons_bullseye() {
|
|||||||
"${items[@]}")
|
"${items[@]}")
|
||||||
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
|
||||||
! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed."
|
! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed."
|
||||||
done
|
done
|
||||||
@@ -129,16 +133,18 @@ _cat_cursors_bullseye() {
|
|||||||
local item_count=5
|
local item_count=5
|
||||||
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Cursor Themes (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
choices=$(
|
||||||
|
_checklist "Cursor Themes (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
||||||
"breeze-cursor-theme" "Breeze cursors (KDE)" "$(_state breeze-cursor-theme)" \
|
"breeze-cursor-theme" "Breeze cursors (KDE)" "$(_state breeze-cursor-theme)" \
|
||||||
"chameleon-cursor-theme" "Chameleon cursors" "$(_state chameleon-cursor-theme)" \
|
"chameleon-cursor-theme" "Chameleon cursors" "$(_state chameleon-cursor-theme)" \
|
||||||
"dmz-cursor-theme" "DMZ cursors" "$(_state dmz-cursor-theme)" \
|
"dmz-cursor-theme" "DMZ cursors" "$(_state dmz-cursor-theme)" \
|
||||||
"oxygencursors" "Oxygen cursors (KDE legacy)" "$(_state oxygencursors)" \
|
"oxygencursors" "Oxygen cursors (KDE legacy)" "$(_state oxygencursors)" \
|
||||||
"xcursor-themes" "X11 base cursors" "$(_state xcursor-themes)" \
|
"xcursor-themes" "X11 base cursors" "$(_state xcursor-themes)"
|
||||||
)
|
)
|
||||||
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
|
||||||
! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed."
|
! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed."
|
||||||
done
|
done
|
||||||
@@ -149,15 +155,17 @@ _cat_fonts_bullseye() {
|
|||||||
local item_count=4
|
local item_count=4
|
||||||
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Fonts (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
choices=$(
|
||||||
|
_checklist "Fonts (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
||||||
"fonts-firacode" "Fira Code monospace font" "$(_state fonts-firacode)" \
|
"fonts-firacode" "Fira Code monospace font" "$(_state fonts-firacode)" \
|
||||||
"fonts-noto" "Noto fonts (Google)" "$(_state fonts-noto)" \
|
"fonts-noto" "Noto fonts (Google)" "$(_state fonts-noto)" \
|
||||||
"fonts-dejavu-core" "DejaVu core fonts" "$(_state fonts-dejavu-core)" \
|
"fonts-dejavu-core" "DejaVu core fonts" "$(_state fonts-dejavu-core)" \
|
||||||
"ttf-mscorefonts-installer" "Microsoft Core Fonts" "$(_state ttf-mscorefonts-installer)" \
|
"ttf-mscorefonts-installer" "Microsoft Core Fonts" "$(_state ttf-mscorefonts-installer)"
|
||||||
)
|
)
|
||||||
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
|
||||||
! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed."
|
! is_installed "$pkg" && _run_install "$pkg" || echo "$pkg already installed."
|
||||||
done
|
done
|
||||||
@@ -169,15 +177,17 @@ _cat_download_bullseye() {
|
|||||||
|
|
||||||
local item_count1=2
|
local item_count1=2
|
||||||
local lista_alto1=$((item_count1 > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count1))
|
local lista_alto1=$((item_count1 > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count1))
|
||||||
choices1=$(_checklist "Downloaders" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto1 \
|
choices1=$(
|
||||||
|
_checklist "Downloaders" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto1 \
|
||||||
"aria2" "Multiprotocol downloader (CLI)" "$(_state aria2)" \
|
"aria2" "Multiprotocol downloader (CLI)" "$(_state aria2)" \
|
||||||
"filezilla" "FTP/SFTP client (GUI)" "$(_state filezilla)" \
|
"filezilla" "FTP/SFTP client (GUI)" "$(_state filezilla)"
|
||||||
)
|
)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
local item_count2=8
|
local item_count2=8
|
||||||
local lista_alto2=$((item_count2 > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count2))
|
local lista_alto2=$((item_count2 > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count2))
|
||||||
choices2=$(_checklist "Torrent Clients" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto2 \
|
choices2=$(
|
||||||
|
_checklist "Torrent Clients" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto2 \
|
||||||
"deluge" "BitTorrent client (GTK)" "$(_state deluge)" \
|
"deluge" "BitTorrent client (GTK)" "$(_state deluge)" \
|
||||||
"deluged" "BitTorrent daemon/server" "$(_state deluged)" \
|
"deluged" "BitTorrent daemon/server" "$(_state deluged)" \
|
||||||
"mktorrent" "Torrent metainfo creator (CLI)" "$(_state mktorrent)" \
|
"mktorrent" "Torrent metainfo creator (CLI)" "$(_state mktorrent)" \
|
||||||
@@ -185,13 +195,16 @@ _cat_download_bullseye() {
|
|||||||
"qbittorrent-nox" "BitTorrent WebUI/CLI" "$(_state qbittorrent-nox)" \
|
"qbittorrent-nox" "BitTorrent WebUI/CLI" "$(_state qbittorrent-nox)" \
|
||||||
"transmission-cli" "BitTorrent client (CLI)" "$(_state transmission-cli)" \
|
"transmission-cli" "BitTorrent client (CLI)" "$(_state transmission-cli)" \
|
||||||
"transmission-gtk" "BitTorrent client (GTK)" "$(_state transmission-gtk)" \
|
"transmission-gtk" "BitTorrent client (GTK)" "$(_state transmission-gtk)" \
|
||||||
"transmission-qt" "BitTorrent client (Qt)" "$(_state transmission-qt)" \
|
"transmission-qt" "BitTorrent client (Qt)" "$(_state transmission-qt)"
|
||||||
)
|
)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
local cleaned
|
local cleaned
|
||||||
cleaned=$(echo "$choices1 $choices2" | tr -d '"')
|
cleaned=$(echo "$choices1 $choices2" | tr -d '"')
|
||||||
[ -z "$cleaned" ] && { echo "No download tools selected."; return; }
|
[ -z "$cleaned" ] && {
|
||||||
|
echo "No download tools selected."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
for pkg in $cleaned; do
|
for pkg in $cleaned; do
|
||||||
if ! is_installed "$pkg"; then
|
if ! is_installed "$pkg"; then
|
||||||
@@ -207,7 +220,8 @@ _cat_internet_bullseye() {
|
|||||||
local item_count=11
|
local item_count=11
|
||||||
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Internet (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
choices=$(
|
||||||
|
_checklist "Internet (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
||||||
"chromium" "Chromium web browser" "$(_state chromium)" \
|
"chromium" "Chromium web browser" "$(_state chromium)" \
|
||||||
"dillo" "Lightweight graphical browser" "$(_state dillo)" \
|
"dillo" "Lightweight graphical browser" "$(_state dillo)" \
|
||||||
"elinks" "Text-mode web browser" "$(_state elinks)" \
|
"elinks" "Text-mode web browser" "$(_state elinks)" \
|
||||||
@@ -218,11 +232,12 @@ _cat_internet_bullseye() {
|
|||||||
"qutebrowser" "Keyboard-driven browser (Qt)" "$(_state qutebrowser)" \
|
"qutebrowser" "Keyboard-driven browser (Qt)" "$(_state qutebrowser)" \
|
||||||
"thunderbird" "Email client" "$(_state thunderbird)" \
|
"thunderbird" "Email client" "$(_state thunderbird)" \
|
||||||
"torbrowser-launcher" "Tor Browser launcher" "$(_state torbrowser-launcher)" \
|
"torbrowser-launcher" "Tor Browser launcher" "$(_state torbrowser-launcher)" \
|
||||||
"w3m" "Text-mode browser + deps" "$(_state w3m)" \
|
"w3m" "Text-mode browser + deps" "$(_state w3m)"
|
||||||
)
|
)
|
||||||
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
|
||||||
case $pkg in
|
case $pkg in
|
||||||
w3m)
|
w3m)
|
||||||
@@ -249,13 +264,15 @@ _cat_players_bullseye() {
|
|||||||
local item_count=2
|
local item_count=2
|
||||||
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Media Players (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
choices=$(
|
||||||
|
_checklist "Media Players (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
||||||
"mpv" "Lightweight media player" "$(_state mpv)" \
|
"mpv" "Lightweight media player" "$(_state mpv)" \
|
||||||
"vlc" "VLC media player" "$(_state vlc)" \
|
"vlc" "VLC media player" "$(_state vlc)"
|
||||||
)
|
)
|
||||||
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 ! is_installed "$pkg"; then
|
if ! is_installed "$pkg"; then
|
||||||
_run_install "$pkg"
|
_run_install "$pkg"
|
||||||
@@ -270,7 +287,8 @@ _cat_design_bullseye() {
|
|||||||
local item_count=13
|
local item_count=13
|
||||||
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Multimedia & Design (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
choices=$(
|
||||||
|
_checklist "Multimedia & Design (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
||||||
"ardour" "Digital audio workstation" "$(_state ardour)" \
|
"ardour" "Digital audio workstation" "$(_state ardour)" \
|
||||||
"audacity" "Audio editor/recorder" "$(_state audacity)" \
|
"audacity" "Audio editor/recorder" "$(_state audacity)" \
|
||||||
"blender" "3D modeling/animation suite" "$(_state blender)" \
|
"blender" "3D modeling/animation suite" "$(_state blender)" \
|
||||||
@@ -283,11 +301,12 @@ _cat_design_bullseye() {
|
|||||||
"obs-studio" "Screen recording/streaming" "$(_state obs-studio)" \
|
"obs-studio" "Screen recording/streaming" "$(_state obs-studio)" \
|
||||||
"openshot-qt" "Video editor (simple)" "$(_state openshot-qt)" \
|
"openshot-qt" "Video editor (simple)" "$(_state openshot-qt)" \
|
||||||
"scribus" "Desktop publishing (DTP)" "$(_state scribus)" \
|
"scribus" "Desktop publishing (DTP)" "$(_state scribus)" \
|
||||||
"shotcut" "Video editor (cross-platform)" "$(_state shotcut)" \
|
"shotcut" "Video editor (cross-platform)" "$(_state shotcut)"
|
||||||
)
|
)
|
||||||
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 ! is_installed "$pkg"; then
|
if ! is_installed "$pkg"; then
|
||||||
_run_install "$pkg"
|
_run_install "$pkg"
|
||||||
@@ -302,7 +321,8 @@ _cat_programming_bullseye() {
|
|||||||
local item_count=9
|
local item_count=9
|
||||||
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Code Editors & IDEs (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
choices=$(
|
||||||
|
_checklist "Code Editors & IDEs (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
||||||
"vim" "Classic terminal editor" "$(_state vim)" \
|
"vim" "Classic terminal editor" "$(_state vim)" \
|
||||||
"vim-gtk3" "Vim with GTK3 GUI" "$(_state vim-gtk3)" \
|
"vim-gtk3" "Vim with GTK3 GUI" "$(_state vim-gtk3)" \
|
||||||
"neovim" "Modern vim fork" "$(_state neovim)" \
|
"neovim" "Modern vim fork" "$(_state neovim)" \
|
||||||
@@ -311,11 +331,12 @@ _cat_programming_bullseye() {
|
|||||||
"kate" "KDE advanced text editor" "$(_state kate)" \
|
"kate" "KDE advanced text editor" "$(_state kate)" \
|
||||||
"mousepad" "Xfce text editor" "$(_state mousepad)" \
|
"mousepad" "Xfce text editor" "$(_state mousepad)" \
|
||||||
"gedit" "GNOME text editor" "$(_state gedit)" \
|
"gedit" "GNOME text editor" "$(_state gedit)" \
|
||||||
"geany" "Lightweight IDE" "$(_state geany)" \
|
"geany" "Lightweight IDE" "$(_state geany)"
|
||||||
)
|
)
|
||||||
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 ! is_installed "$pkg"; then
|
if ! is_installed "$pkg"; then
|
||||||
_run_install "$pkg"
|
_run_install "$pkg"
|
||||||
@@ -330,7 +351,8 @@ _cat_dev_bullseye() {
|
|||||||
local item_count=14
|
local item_count=14
|
||||||
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Servers & Dev Tools (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
choices=$(
|
||||||
|
_checklist "Servers & Dev Tools (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
||||||
"apache2" "Apache web server" "$(_state apache2)" \
|
"apache2" "Apache web server" "$(_state apache2)" \
|
||||||
"build-essential" "C/C++ build tools (gcc, make)" "$(_state build-essential)" \
|
"build-essential" "C/C++ build tools (gcc, make)" "$(_state build-essential)" \
|
||||||
"docker" "Docker container runtime" "$(_state docker.io)" \
|
"docker" "Docker container runtime" "$(_state docker.io)" \
|
||||||
@@ -344,11 +366,12 @@ _cat_dev_bullseye() {
|
|||||||
"redis-server" "Redis key-value store" "$(_state redis-server)" \
|
"redis-server" "Redis key-value store" "$(_state redis-server)" \
|
||||||
"sqlite3" "SQLite database engine" "$(_state sqlite3)" \
|
"sqlite3" "SQLite database engine" "$(_state sqlite3)" \
|
||||||
"jellyfin" "Jellyfin Media Server (Web GUI on port 8096)" OFF \
|
"jellyfin" "Jellyfin Media Server (Web GUI on port 8096)" OFF \
|
||||||
"openjdk-dev-env" "Adoptium Temurin JDK (17, 21, 25 LTS)$(_any_jdk_installed_desc)" "$(_any_jdk_state)" \
|
"openjdk-dev-env" "Adoptium Temurin JDK (17, 21, 25 LTS)$(_any_jdk_installed_desc)" "$(_any_jdk_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
|
||||||
case $pkg in
|
case $pkg in
|
||||||
docker)
|
docker)
|
||||||
@@ -394,16 +417,18 @@ _cat_security_bullseye() {
|
|||||||
local item_count=5
|
local item_count=5
|
||||||
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Security & Networking (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
choices=$(
|
||||||
|
_checklist "Security & Networking (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
||||||
"wireshark" "Network protocol analyzer (GUI)" "$(_state wireshark)" \
|
"wireshark" "Network protocol analyzer (GUI)" "$(_state wireshark)" \
|
||||||
"tcpdump" "Command-line packet analyzer" "$(_state tcpdump)" \
|
"tcpdump" "Command-line packet analyzer" "$(_state tcpdump)" \
|
||||||
"fail2ban" "Brute-force protection daemon" "$(_state fail2ban)" \
|
"fail2ban" "Brute-force protection daemon" "$(_state fail2ban)" \
|
||||||
"ufw" "Uncomplicated firewall" "$(_state ufw)" \
|
"ufw" "Uncomplicated firewall" "$(_state ufw)" \
|
||||||
"clamav" "Antivirus engine (ClamAV)" "$(_state clamav)" \
|
"clamav" "Antivirus engine (ClamAV)" "$(_state clamav)"
|
||||||
)
|
)
|
||||||
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
|
||||||
case $pkg in
|
case $pkg in
|
||||||
clamav)
|
clamav)
|
||||||
@@ -425,9 +450,10 @@ _cat_general_bullseye() {
|
|||||||
local item_count=22
|
local item_count=22
|
||||||
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "System Tools (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
choices=$(
|
||||||
|
_checklist "System Tools (Bullseye)" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
||||||
"compress" "Compression tools (zip, unrar, p7zip)" "$(_state zip)" \
|
"compress" "Compression tools (zip, unrar, p7zip)" "$(_state zip)" \
|
||||||
"conky" "System monitor for desktop" "$(_state conky)" \
|
"conky-all" "System monitor for desktop" "$(_state conky-all)" \
|
||||||
"cpu-x" "CPU-X (alternative to CPU-Z)" "$(_state cpu-x)" \
|
"cpu-x" "CPU-X (alternative to CPU-Z)" "$(_state cpu-x)" \
|
||||||
"curl-wget" "HTTP transfer tools (curl, wget)" "$(_state curl)" \
|
"curl-wget" "HTTP transfer tools (curl, wget)" "$(_state curl)" \
|
||||||
"flatpak" "Flatpak sandbox (Bullseye native)" "$(_state flatpak)" \
|
"flatpak" "Flatpak sandbox (Bullseye native)" "$(_state flatpak)" \
|
||||||
@@ -447,11 +473,12 @@ _cat_general_bullseye() {
|
|||||||
"tmux" "Terminal multiplexer" "$(_state tmux)" \
|
"tmux" "Terminal multiplexer" "$(_state tmux)" \
|
||||||
"wine" "Windows compatibility layer" "$(_state wine)" \
|
"wine" "Windows compatibility layer" "$(_state wine)" \
|
||||||
"bleachbit" "System cleaner (GUI)" "$(_state bleachbit)" \
|
"bleachbit" "System cleaner (GUI)" "$(_state bleachbit)" \
|
||||||
"gdebi" "Install .deb packages with deps (GUI)" "$(_state gdebi)" \
|
"gdebi" "Install .deb packages with deps (GUI)" "$(_state gdebi)"
|
||||||
)
|
)
|
||||||
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
|
||||||
case $pkg in
|
case $pkg in
|
||||||
compress)
|
compress)
|
||||||
@@ -542,7 +569,8 @@ _cat_fetch_bullseye() {
|
|||||||
"${items[@]}")
|
"${items[@]}")
|
||||||
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 ! is_installed "$pkg"; then
|
if ! is_installed "$pkg"; then
|
||||||
_run_install "$pkg"
|
_run_install "$pkg"
|
||||||
@@ -562,7 +590,8 @@ install_extras_bullseye() {
|
|||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
local cat_choice
|
local cat_choice
|
||||||
cat_choice=$(_menu "Extra Software — Bullseye" "Select a category:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
cat_choice=$(
|
||||||
|
_menu "Extra Software — Bullseye" "Select a category:" $TUI_ALTO $TUI_ANCHO $TUI_ALTO_LISTA \
|
||||||
"0" "Essential Pack" \
|
"0" "Essential Pack" \
|
||||||
"1" "Customization System" \
|
"1" "Customization System" \
|
||||||
"2" "Download & Network" \
|
"2" "Download & Network" \
|
||||||
@@ -576,7 +605,7 @@ install_extras_bullseye() {
|
|||||||
"10" "Software Centers" \
|
"10" "Software Centers" \
|
||||||
"11" "System Tools" \
|
"11" "System Tools" \
|
||||||
"12" "Fetch / System Info" \
|
"12" "Fetch / System Info" \
|
||||||
"13" "Back to main menu" \
|
"13" "Back to main menu"
|
||||||
)
|
)
|
||||||
|
|
||||||
[ -z "$cat_choice" ] && return
|
[ -z "$cat_choice" ] && return
|
||||||
@@ -604,10 +633,11 @@ install_extras_bullseye() {
|
|||||||
|
|
||||||
_cat_software_centers_bullseye() {
|
_cat_software_centers_bullseye() {
|
||||||
local sc_choice
|
local sc_choice
|
||||||
sc_choice=$(_menu "Software Centers" "Choose a software store to install:" 12 65 3 \
|
sc_choice=$(
|
||||||
|
_menu "Software Centers" "Choose a software store to install:" 12 65 3 \
|
||||||
"gnome-software" "Software Center for GNOME" \
|
"gnome-software" "Software Center for GNOME" \
|
||||||
"plasma-discover" "Software manager for Plasma" \
|
"plasma-discover" "Software manager for Plasma" \
|
||||||
"synaptic" "Classic APT package manager (GTK)" \
|
"synaptic" "Classic APT package manager (GTK)"
|
||||||
)
|
)
|
||||||
[ -z "$sc_choice" ] && return
|
[ -z "$sc_choice" ] && return
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ check_bullseye_archive_phase() {
|
|||||||
current_year=$(date +%Y)
|
current_year=$(date +%Y)
|
||||||
current_month=$(date +%-m)
|
current_month=$(date +%-m)
|
||||||
|
|
||||||
if [ "$current_year" -gt 2026 ] || \
|
if [ "$current_year" -gt 2026 ] ||
|
||||||
{ [ "$current_year" -eq 2026 ] && [ "$current_month" -ge 9 ]; }; then
|
{ [ "$current_year" -eq 2026 ] && [ "$current_month" -ge 9 ]; }; then
|
||||||
BULLSEYE_USE_ARCHIVE=true
|
BULLSEYE_USE_ARCHIVE=true
|
||||||
fi
|
fi
|
||||||
@@ -33,7 +33,8 @@ No security updates will be available." 12 60
|
|||||||
install_nvidia_bullseye() {
|
install_nvidia_bullseye() {
|
||||||
echo -e "${YELLOW}NVIDIA GPU detected (Bullseye mode).${NC}"
|
echo -e "${YELLOW}NVIDIA GPU detected (Bullseye mode).${NC}"
|
||||||
|
|
||||||
local is_fermi; is_fermi=$(is_nvidia_fermi)
|
local is_fermi
|
||||||
|
is_fermi=$(is_nvidia_fermi)
|
||||||
|
|
||||||
local nv_pkg=""
|
local nv_pkg=""
|
||||||
local gpu_gen=""
|
local gpu_gen=""
|
||||||
@@ -139,7 +140,7 @@ install_gaming_bullseye() {
|
|||||||
if $need_32bit && ! dpkg --print-foreign-architectures 2>/dev/null | grep -q i386; then
|
if $need_32bit && ! dpkg --print-foreign-architectures 2>/dev/null | grep -q i386; then
|
||||||
echo -e "${YELLOW}Enabling i386 architecture...${NC}"
|
echo -e "${YELLOW}Enabling i386 architecture...${NC}"
|
||||||
sudo dpkg --add-architecture i386
|
sudo dpkg --add-architecture i386
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if $need_32bit; then
|
if $need_32bit; then
|
||||||
|
|||||||
@@ -281,7 +281,7 @@ configure_greetd() {
|
|||||||
if [ "$DEBIAN_VERSION" = "12" ]; then
|
if [ "$DEBIAN_VERSION" = "12" ]; then
|
||||||
if [ "$(is_backports_enabled)" != true ]; then
|
if [ "$(is_backports_enabled)" != true ]; then
|
||||||
_write_deb822_backports "bookworm"
|
_write_deb822_backports "bookworm"
|
||||||
sudo apt update -qq
|
_ensure_apt_updated
|
||||||
fi
|
fi
|
||||||
_run_cmd "greetd" "sudo apt install -y -t bookworm-backports tuigreet greetd" "Installing greetd + tuigreet..."
|
_run_cmd "greetd" "sudo apt install -y -t bookworm-backports tuigreet greetd" "Installing greetd + tuigreet..."
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ _install_signal() {
|
|||||||
if [ ! -f /etc/apt/sources.list.d/extrepo_signal.sources ]; then
|
if [ ! -f /etc/apt/sources.list.d/extrepo_signal.sources ]; then
|
||||||
_run_cmd "Signal" "sudo extrepo enable signal" "Enabling Signal repository..."
|
_run_cmd "Signal" "sudo extrepo enable signal" "Enabling Signal repository..."
|
||||||
fi
|
fi
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
if ! is_installed "signal-desktop"; then
|
if ! is_installed "signal-desktop"; then
|
||||||
_run_cmd "Signal" "sudo apt install -y signal-desktop" "Installing Signal..."
|
_run_cmd "Signal" "sudo apt install -y signal-desktop" "Installing Signal..."
|
||||||
echo -e "${GREEN}Signal installed.${NC}"
|
echo -e "${GREEN}Signal installed.${NC}"
|
||||||
@@ -50,9 +50,12 @@ _cat_communication() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
local -a items=()
|
local -a items=()
|
||||||
local signal_state; signal_state=$(_state "signal-desktop")
|
local signal_state
|
||||||
local telegram_state; telegram_state=$(_state "telegram-desktop")
|
signal_state=$(_state "signal-desktop")
|
||||||
local hexchat_state; hexchat_state=$(_state "hexchat")
|
local telegram_state
|
||||||
|
telegram_state=$(_state "telegram-desktop")
|
||||||
|
local hexchat_state
|
||||||
|
hexchat_state=$(_state "hexchat")
|
||||||
items+=(
|
items+=(
|
||||||
"signal-desktop" "Signal Private Messenger (extrepo)" "$signal_state"
|
"signal-desktop" "Signal Private Messenger (extrepo)" "$signal_state"
|
||||||
"telegram-desktop" "Telegram Desktop messaging" "$telegram_state"
|
"telegram-desktop" "Telegram Desktop messaging" "$telegram_state"
|
||||||
@@ -67,7 +70,8 @@ _cat_communication() {
|
|||||||
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
|
||||||
case $pkg in
|
case $pkg in
|
||||||
signal-desktop) _install_signal ;;
|
signal-desktop) _install_signal ;;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ _enable_jellyfin_repo() {
|
|||||||
fi
|
fi
|
||||||
_run_cmd "Jellyfin" "sudo extrepo enable jellyfin" "Enabling Jellyfin repository..."
|
_run_cmd "Jellyfin" "sudo extrepo enable jellyfin" "Enabling Jellyfin repository..."
|
||||||
fi
|
fi
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
}
|
}
|
||||||
|
|
||||||
install_jellyfin() {
|
install_jellyfin() {
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Pin: origin packages.mozilla.org
|
|||||||
Pin-Priority: 1000
|
Pin-Priority: 1000
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
}
|
}
|
||||||
|
|
||||||
_enable_floorp_repo() {
|
_enable_floorp_repo() {
|
||||||
@@ -30,7 +30,7 @@ _enable_floorp_repo() {
|
|||||||
_ensure_extrepo
|
_ensure_extrepo
|
||||||
_run_cmd "Floorp" "sudo extrepo enable floorp" "Enabling Floorp repository..."
|
_run_cmd "Floorp" "sudo extrepo enable floorp" "Enabling Floorp repository..."
|
||||||
fi
|
fi
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
}
|
}
|
||||||
|
|
||||||
install_palemoon() {
|
install_palemoon() {
|
||||||
@@ -60,7 +60,7 @@ install_palemoon() {
|
|||||||
else
|
else
|
||||||
_ensure_extrepo
|
_ensure_extrepo
|
||||||
_run_cmd "Pale Moon" "sudo extrepo enable ${REPO_PALEMOON}" "Enabling ${REPO_PALEMOON}..."
|
_run_cmd "Pale Moon" "sudo extrepo enable ${REPO_PALEMOON}" "Enabling ${REPO_PALEMOON}..."
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! is_installed "palemoon"; then
|
if ! is_installed "palemoon"; then
|
||||||
@@ -76,7 +76,7 @@ _enable_librewolf_repo() {
|
|||||||
_ensure_extrepo
|
_ensure_extrepo
|
||||||
_run_cmd "LibreWolf" "sudo extrepo enable librewolf" "Enabling LibreWolf repository..."
|
_run_cmd "LibreWolf" "sudo extrepo enable librewolf" "Enabling LibreWolf repository..."
|
||||||
fi
|
fi
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
}
|
}
|
||||||
|
|
||||||
_enable_tailscale_repo() {
|
_enable_tailscale_repo() {
|
||||||
@@ -84,7 +84,7 @@ _enable_tailscale_repo() {
|
|||||||
_ensure_extrepo
|
_ensure_extrepo
|
||||||
_run_cmd "Tailscale" "sudo extrepo enable tailscale" "Enabling Tailscale repository..."
|
_run_cmd "Tailscale" "sudo extrepo enable tailscale" "Enabling Tailscale repository..."
|
||||||
fi
|
fi
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
}
|
}
|
||||||
|
|
||||||
_enable_mullvad_repo() {
|
_enable_mullvad_repo() {
|
||||||
@@ -92,14 +92,14 @@ _enable_mullvad_repo() {
|
|||||||
_ensure_extrepo
|
_ensure_extrepo
|
||||||
_run_cmd "Mullvad" "sudo extrepo enable mullvad" "Enabling Mullvad repository..."
|
_run_cmd "Mullvad" "sudo extrepo enable mullvad" "Enabling Mullvad repository..."
|
||||||
fi
|
fi
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
}
|
}
|
||||||
|
|
||||||
install_protonvpn() {
|
install_protonvpn() {
|
||||||
if [ ! -f /etc/apt/sources.list.d/extrepo_protonvpn.sources ]; then
|
if [ ! -f /etc/apt/sources.list.d/extrepo_protonvpn.sources ]; then
|
||||||
_ensure_extrepo
|
_ensure_extrepo
|
||||||
_run_cmd "ProtonVPN" "sudo extrepo enable protonvpn stable" "Enabling ProtonVPN repository (stable suite)..."
|
_run_cmd "ProtonVPN" "sudo extrepo enable protonvpn stable" "Enabling ProtonVPN repository (stable suite)..."
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
else
|
else
|
||||||
echo "ProtonVPN repository already enabled."
|
echo "ProtonVPN repository already enabled."
|
||||||
fi
|
fi
|
||||||
@@ -119,26 +119,40 @@ _cat_internet() {
|
|||||||
_is_headless && headless=true
|
_is_headless && headless=true
|
||||||
local -a items=()
|
local -a items=()
|
||||||
if ! $headless; then
|
if ! $headless; then
|
||||||
local chromium_state; chromium_state=$(_state "chromium")
|
local chromium_state
|
||||||
local dillo_state; dillo_state=$(_state "dillo")
|
chromium_state=$(_state "chromium")
|
||||||
local epiphany_state; epiphany_state=$(_state "epiphany-browser")
|
local dillo_state
|
||||||
local falkon_state; falkon_state=$(_state "falkon")
|
dillo_state=$(_state "dillo")
|
||||||
|
local epiphany_state
|
||||||
|
epiphany_state=$(_state "epiphany-browser")
|
||||||
|
local falkon_state
|
||||||
|
falkon_state=$(_state "falkon")
|
||||||
local firefox_state="OFF"
|
local firefox_state="OFF"
|
||||||
if command -v firefox &>/dev/null && ! is_installed "firefox-esr"; then
|
if command -v firefox &>/dev/null && ! is_installed "firefox-esr"; then
|
||||||
firefox_state="ON"
|
firefox_state="ON"
|
||||||
fi
|
fi
|
||||||
local firefox_esr_state
|
local firefox_esr_state
|
||||||
firefox_esr_state=$(_state "firefox-esr")
|
firefox_esr_state=$(_state "firefox-esr")
|
||||||
local floorp_state; floorp_state=$(_state "floorp")
|
local floorp_state
|
||||||
local konqueror_state; konqueror_state=$(_state "konqueror")
|
floorp_state=$(_state "floorp")
|
||||||
local librewolf_state; librewolf_state=$(_state "librewolf")
|
local konqueror_state
|
||||||
local palemoon_state; palemoon_state=$(_state "palemoon")
|
konqueror_state=$(_state "konqueror")
|
||||||
local privacybrowser_state; privacybrowser_state=$(_state "privacybrowser")
|
local librewolf_state
|
||||||
local qutebrowser_state; qutebrowser_state=$(_state "qutebrowser")
|
librewolf_state=$(_state "librewolf")
|
||||||
local thunderbird_state; thunderbird_state=$(_state "thunderbird")
|
local palemoon_state
|
||||||
local torbrowser_state; torbrowser_state=$(_state "torbrowser-launcher")
|
palemoon_state=$(_state "palemoon")
|
||||||
local mullvadbrowser_state; mullvadbrowser_state=$(_state "mullvad-browser")
|
local privacybrowser_state
|
||||||
local protonvpn_state; protonvpn_state=$(_state "protonvpn")
|
privacybrowser_state=$(_state "privacybrowser")
|
||||||
|
local qutebrowser_state
|
||||||
|
qutebrowser_state=$(_state "qutebrowser")
|
||||||
|
local thunderbird_state
|
||||||
|
thunderbird_state=$(_state "thunderbird")
|
||||||
|
local torbrowser_state
|
||||||
|
torbrowser_state=$(_state "torbrowser-launcher")
|
||||||
|
local mullvadbrowser_state
|
||||||
|
mullvadbrowser_state=$(_state "mullvad-browser")
|
||||||
|
local protonvpn_state
|
||||||
|
protonvpn_state=$(_state "protonvpn")
|
||||||
items+=(
|
items+=(
|
||||||
"chromium" "Chromium web browser" "$chromium_state"
|
"chromium" "Chromium web browser" "$chromium_state"
|
||||||
"dillo" "Lightweight graphical browser" "$dillo_state"
|
"dillo" "Lightweight graphical browser" "$dillo_state"
|
||||||
@@ -158,11 +172,16 @@ _cat_internet() {
|
|||||||
"protonvpn" "ProtonVPN client" "$protonvpn_state"
|
"protonvpn" "ProtonVPN client" "$protonvpn_state"
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
local elinks_state; elinks_state=$(_state "elinks")
|
local elinks_state
|
||||||
local riseupvpn_state; riseupvpn_state=$(_state "riseup-vpn")
|
elinks_state=$(_state "elinks")
|
||||||
local w3m_state; w3m_state=$(_state "w3m")
|
local riseupvpn_state
|
||||||
local tailscale_state; tailscale_state=$(_state "tailscale")
|
riseupvpn_state=$(_state "riseup-vpn")
|
||||||
local mullvad_state; mullvad_state=$(_state "mullvad-vpn")
|
local w3m_state
|
||||||
|
w3m_state=$(_state "w3m")
|
||||||
|
local tailscale_state
|
||||||
|
tailscale_state=$(_state "tailscale")
|
||||||
|
local mullvad_state
|
||||||
|
mullvad_state=$(_state "mullvad-vpn")
|
||||||
items+=(
|
items+=(
|
||||||
"elinks" "Text-mode web browser" "$elinks_state"
|
"elinks" "Text-mode web browser" "$elinks_state"
|
||||||
"riseup-vpn" "Riseup VPN client" "$riseupvpn_state"
|
"riseup-vpn" "Riseup VPN client" "$riseupvpn_state"
|
||||||
@@ -174,14 +193,16 @@ _cat_internet() {
|
|||||||
local item_count=${#items[@]}
|
local item_count=${#items[@]}
|
||||||
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Internet" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
choices=$(
|
||||||
"${items[@]}" \
|
_checklist "Internet" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
||||||
|
"${items[@]}"
|
||||||
)
|
)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
[ -z "$choices" ] && return
|
[ -z "$choices" ] && return
|
||||||
|
|
||||||
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
|
local cleaned
|
||||||
|
cleaned=$(echo "$choices" | tr -d '"')
|
||||||
|
|
||||||
local has_firefox=false
|
local has_firefox=false
|
||||||
local has_firefox_esr=false
|
local has_firefox_esr=false
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ _enable_temurin_repo() {
|
|||||||
_run_cmd "extrepo" "sudo apt install -y extrepo" "Installing extrepo..."
|
_run_cmd "extrepo" "sudo apt install -y extrepo" "Installing extrepo..."
|
||||||
fi
|
fi
|
||||||
_run_cmd "Temurin" "sudo extrepo enable temurin" "Enabling Adoptium Temurin repository..."
|
_run_cmd "Temurin" "sudo extrepo enable temurin" "Enabling Adoptium Temurin repository..."
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
}
|
}
|
||||||
|
|
||||||
install_minecraft_java() {
|
install_minecraft_java() {
|
||||||
@@ -21,7 +21,10 @@ install_minecraft_java() {
|
|||||||
"17" "Java 17 — Minecraft 1.17 to 1.20.4" ON \
|
"17" "Java 17 — Minecraft 1.17 to 1.20.4" ON \
|
||||||
"21" "Java 21 — Modern Minecraft >= 1.20.5 & 1.21+" OFF \
|
"21" "Java 21 — Modern Minecraft >= 1.20.5 & 1.21+" OFF \
|
||||||
"25" "Java 25 — Minecraft 26+" OFF)
|
"25" "Java 25 — Minecraft 26+" OFF)
|
||||||
[ -z "$choices" ] && { echo "No Java version selected."; return; }
|
[ -z "$choices" ] && {
|
||||||
|
echo "No Java version selected."
|
||||||
|
return
|
||||||
|
}
|
||||||
_enable_temurin_repo
|
_enable_temurin_repo
|
||||||
local cleaned
|
local cleaned
|
||||||
cleaned=$(echo "$choices" | tr -d '"')
|
cleaned=$(echo "$choices" | tr -d '"')
|
||||||
@@ -38,7 +41,10 @@ _install_dev_java() {
|
|||||||
"17" "Java 17 LTS Development Kit" \
|
"17" "Java 17 LTS Development Kit" \
|
||||||
"21" "Java 21 LTS Development Kit" \
|
"21" "Java 21 LTS Development Kit" \
|
||||||
"25" "Java 25 LTS Development Kit")
|
"25" "Java 25 LTS Development Kit")
|
||||||
[ -z "$ver" ] && { echo "No JDK version selected."; return; }
|
[ -z "$ver" ] && {
|
||||||
|
echo "No JDK version selected."
|
||||||
|
return
|
||||||
|
}
|
||||||
_enable_temurin_repo
|
_enable_temurin_repo
|
||||||
_run_install "temurin-${ver}-jdk"
|
_run_install "temurin-${ver}-jdk"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ _enable_onlyoffice_repo() {
|
|||||||
fi
|
fi
|
||||||
_run_cmd "OnlyOffice" "sudo extrepo enable onlyoffice-desktopeditors" "Enabling OnlyOffice repository..."
|
_run_cmd "OnlyOffice" "sudo extrepo enable onlyoffice-desktopeditors" "Enabling OnlyOffice repository..."
|
||||||
fi
|
fi
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
}
|
}
|
||||||
|
|
||||||
install_onlyoffice() {
|
install_onlyoffice() {
|
||||||
@@ -36,7 +36,7 @@ install_joplin() {
|
|||||||
if [ ! -f /etc/apt/sources.list.d/extrepo_joplin.sources ]; then
|
if [ ! -f /etc/apt/sources.list.d/extrepo_joplin.sources ]; then
|
||||||
_run_cmd "Joplin" "sudo extrepo enable joplin" "Enabling Joplin repository..."
|
_run_cmd "Joplin" "sudo extrepo enable joplin" "Enabling Joplin repository..."
|
||||||
fi
|
fi
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
if ! is_installed "joplin"; then
|
if ! is_installed "joplin"; then
|
||||||
_run_cmd "Joplin" "sudo apt install -y joplin" "Installing Joplin..."
|
_run_cmd "Joplin" "sudo apt install -y joplin" "Installing Joplin..."
|
||||||
echo -e "${GREEN}Joplin installed.${NC}"
|
echo -e "${GREEN}Joplin installed.${NC}"
|
||||||
@@ -97,12 +97,14 @@ _cat_office() {
|
|||||||
local item_count=${#items[@]}
|
local item_count=${#items[@]}
|
||||||
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Office & Productivity" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
choices=$(
|
||||||
"${items[@]}" \
|
_checklist "Office & Productivity" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
||||||
|
"${items[@]}"
|
||||||
)
|
)
|
||||||
|
|
||||||
[ -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
|
||||||
case $pkg in
|
case $pkg in
|
||||||
|
|||||||
@@ -5,11 +5,16 @@ _cat_programming() {
|
|||||||
local headless=false
|
local headless=false
|
||||||
_is_headless && headless=true
|
_is_headless && headless=true
|
||||||
local -a items=()
|
local -a items=()
|
||||||
local vim_state; vim_state=$(_state "vim")
|
local vim_state
|
||||||
local neovim_state; neovim_state=$(_state "neovim")
|
vim_state=$(_state "vim")
|
||||||
local hx_state; hx_state=$(_state "hx")
|
local neovim_state
|
||||||
local nano_state; nano_state=$(_state "nano")
|
neovim_state=$(_state "neovim")
|
||||||
local emacs_state; emacs_state=$(_state "emacs")
|
local hx_state
|
||||||
|
hx_state=$(_state "hx")
|
||||||
|
local nano_state
|
||||||
|
nano_state=$(_state "nano")
|
||||||
|
local emacs_state
|
||||||
|
emacs_state=$(_state "emacs")
|
||||||
items+=(
|
items+=(
|
||||||
"vim" "Classic terminal editor" "$vim_state"
|
"vim" "Classic terminal editor" "$vim_state"
|
||||||
"neovim" "Modern vim fork" "$neovim_state"
|
"neovim" "Modern vim fork" "$neovim_state"
|
||||||
@@ -18,12 +23,18 @@ _cat_programming() {
|
|||||||
"emacs" "Extensible editor / IDE" "$emacs_state"
|
"emacs" "Extensible editor / IDE" "$emacs_state"
|
||||||
)
|
)
|
||||||
if ! $headless; then
|
if ! $headless; then
|
||||||
local vimgtk_state; vimgtk_state=$(_state "vim-gtk3")
|
local vimgtk_state
|
||||||
local kate_state; kate_state=$(_state "kate")
|
vimgtk_state=$(_state "vim-gtk3")
|
||||||
local mousepad_state; mousepad_state=$(_state "mousepad")
|
local kate_state
|
||||||
local gedit_state; gedit_state=$(_state "gedit")
|
kate_state=$(_state "kate")
|
||||||
local geany_state; geany_state=$(_state "geany")
|
local mousepad_state
|
||||||
local gte_state; gte_state=$(_state "gnome-text-editor")
|
mousepad_state=$(_state "mousepad")
|
||||||
|
local gedit_state
|
||||||
|
gedit_state=$(_state "gedit")
|
||||||
|
local geany_state
|
||||||
|
geany_state=$(_state "geany")
|
||||||
|
local gte_state
|
||||||
|
gte_state=$(_state "gnome-text-editor")
|
||||||
local codium_state="OFF"
|
local codium_state="OFF"
|
||||||
if command -v codium &>/dev/null; then
|
if command -v codium &>/dev/null; then
|
||||||
codium_state="ON"
|
codium_state="ON"
|
||||||
@@ -42,14 +53,16 @@ _cat_programming() {
|
|||||||
local item_count=${#items[@]}
|
local item_count=${#items[@]}
|
||||||
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "Programming Applications" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
choices=$(
|
||||||
"${items[@]}" \
|
_checklist "Programming Applications" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
||||||
|
"${items[@]}"
|
||||||
)
|
)
|
||||||
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
|
||||||
case $pkg in
|
case $pkg in
|
||||||
@@ -76,7 +89,7 @@ _enable_vscodium_repo() {
|
|||||||
fi
|
fi
|
||||||
_run_cmd "VSCodium" "sudo extrepo enable vscodium" "Enabling VSCodium repository..."
|
_run_cmd "VSCodium" "sudo extrepo enable vscodium" "Enabling VSCodium repository..."
|
||||||
fi
|
fi
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
}
|
}
|
||||||
|
|
||||||
install_vscodium() {
|
install_vscodium() {
|
||||||
|
|||||||
@@ -8,9 +8,13 @@ _detect_desktop_type() {
|
|||||||
|
|
||||||
case "$desktop" in
|
case "$desktop" in
|
||||||
*kde* | *lxqt* | *razor* | *plasma*)
|
*kde* | *lxqt* | *razor* | *plasma*)
|
||||||
echo "qt"; return ;;
|
echo "qt"
|
||||||
|
return
|
||||||
|
;;
|
||||||
*gnome* | *xfce* | *cinnamon* | *mate* | *lxde* | *budgie* | *sway* | *hyprland* | *i3* | *bspwm* | *openbox* | *fluxbox*)
|
*gnome* | *xfce* | *cinnamon* | *mate* | *lxde* | *budgie* | *sway* | *hyprland* | *i3* | *bspwm* | *openbox* | *fluxbox*)
|
||||||
echo "gtk"; return ;;
|
echo "gtk"
|
||||||
|
return
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo "gtk"
|
echo "gtk"
|
||||||
@@ -20,34 +24,50 @@ _cat_general() {
|
|||||||
local headless=false
|
local headless=false
|
||||||
_is_headless && headless=true
|
_is_headless && headless=true
|
||||||
local -a items=()
|
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
|
||||||
compress_state="ON"
|
compress_state="ON"
|
||||||
else
|
else
|
||||||
compress_state="OFF"
|
compress_state="OFF"
|
||||||
fi
|
fi
|
||||||
local cpufetch_state; cpufetch_state=$(_state "cpufetch")
|
local cpufetch_state
|
||||||
local cpu_x_state; cpu_x_state=$(_state "cpu-x")
|
cpufetch_state=$(_state "cpufetch")
|
||||||
|
local cpu_x_state
|
||||||
|
cpu_x_state=$(_state "cpu-x")
|
||||||
local curl_wget_state
|
local curl_wget_state
|
||||||
if is_installed "curl" && is_installed "wget"; then
|
if is_installed "curl" && is_installed "wget"; then
|
||||||
curl_wget_state="ON"
|
curl_wget_state="ON"
|
||||||
else
|
else
|
||||||
curl_wget_state="OFF"
|
curl_wget_state="OFF"
|
||||||
fi
|
fi
|
||||||
local extrepo_state; extrepo_state=$(_state "extrepo")
|
local extrepo_state
|
||||||
local fwupd_state; fwupd_state=$(_state "fwupd")
|
extrepo_state=$(_state "extrepo")
|
||||||
local htop_state; htop_state=$(_state "htop")
|
local fwupd_state
|
||||||
local inxi_state; inxi_state=$(_state "inxi")
|
fwupd_state=$(_state "fwupd")
|
||||||
local jq_state; jq_state=$(_state "jq")
|
local htop_state
|
||||||
local kvm_state; kvm_state=$(_state "virt-manager")
|
htop_state=$(_state "htop")
|
||||||
local lshw_state; lshw_state=$(_state "lshw")
|
local inxi_state
|
||||||
local mc_state; mc_state=$(_state "mc")
|
inxi_state=$(_state "inxi")
|
||||||
local nala_state; nala_state=$(_state "nala")
|
local jq_state
|
||||||
local ncdu_state; ncdu_state=$(_state "ncdu")
|
jq_state=$(_state "jq")
|
||||||
local tmux_state; tmux_state=$(_state "tmux")
|
local kvm_state
|
||||||
local wine_state; wine_state=$(_state "wine")
|
kvm_state=$(_state "virt-manager")
|
||||||
local nvme_state; nvme_state=$(_state "nvme-cli")
|
local lshw_state
|
||||||
|
lshw_state=$(_state "lshw")
|
||||||
|
local mc_state
|
||||||
|
mc_state=$(_state "mc")
|
||||||
|
local nala_state
|
||||||
|
nala_state=$(_state "nala")
|
||||||
|
local ncdu_state
|
||||||
|
ncdu_state=$(_state "ncdu")
|
||||||
|
local tmux_state
|
||||||
|
tmux_state=$(_state "tmux")
|
||||||
|
local wine_state
|
||||||
|
wine_state=$(_state "wine")
|
||||||
|
local nvme_state
|
||||||
|
nvme_state=$(_state "nvme-cli")
|
||||||
items+=(
|
items+=(
|
||||||
"btop" "Resource monitor (fancy top)" "$btop_state"
|
"btop" "Resource monitor (fancy top)" "$btop_state"
|
||||||
"compress" "Compression tools (zip, unrar, 7z)" "$compress_state"
|
"compress" "Compression tools (zip, unrar, 7z)" "$compress_state"
|
||||||
@@ -69,20 +89,31 @@ _cat_general() {
|
|||||||
"wine" "Windows compatibility layer" "$wine_state"
|
"wine" "Windows compatibility layer" "$wine_state"
|
||||||
)
|
)
|
||||||
if ! $headless; then
|
if ! $headless; then
|
||||||
local bleachbit_state; bleachbit_state=$(_state "bleachbit")
|
local bleachbit_state
|
||||||
local conky_state; conky_state=$(_state "conky")
|
bleachbit_state=$(_state "bleachbit")
|
||||||
local gdebi_state; gdebi_state=$(_state "gdebi")
|
local conky_state
|
||||||
local corectrl_state; corectrl_state=$(_state "corectrl")
|
conky_state=$(_state "conky-all")
|
||||||
local dcgtk_state; dcgtk_state=$(_state "doublecmd-gtk")
|
local gdebi_state
|
||||||
local dcqt_state; dcqt_state=$(_state "doublecmd-qt")
|
gdebi_state=$(_state "gdebi")
|
||||||
local disks_state; disks_state=$(_state "gnome-disk-utility")
|
local corectrl_state
|
||||||
local gparted_state; gparted_state=$(_state "gparted")
|
corectrl_state=$(_state "corectrl")
|
||||||
local hardinfo_state; hardinfo_state=$(_state "hardinfo")
|
local dcgtk_state
|
||||||
local psensor_state; psensor_state=$(_state "psensor")
|
dcgtk_state=$(_state "doublecmd-gtk")
|
||||||
local timeshift_state; timeshift_state=$(_state "timeshift")
|
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 psensor_state
|
||||||
|
psensor_state=$(_state "psensor")
|
||||||
|
local timeshift_state
|
||||||
|
timeshift_state=$(_state "timeshift")
|
||||||
items+=(
|
items+=(
|
||||||
"bleachbit" "System cleaner (GUI)" "$bleachbit_state"
|
"bleachbit" "System cleaner (GUI)" "$bleachbit_state"
|
||||||
"conky" "System monitor for desktop" "$conky_state"
|
"conky-all" "System monitor for desktop" "$conky_state"
|
||||||
"gdebi" "Install .deb packages with deps" "$gdebi_state"
|
"gdebi" "Install .deb packages with deps" "$gdebi_state"
|
||||||
"corectrl" "AMD GPU control (CoreCtrl)" "$corectrl_state"
|
"corectrl" "AMD GPU control (CoreCtrl)" "$corectrl_state"
|
||||||
"doublecmd-gtk" "Dual-panel file manager (GTK)" "$dcgtk_state"
|
"doublecmd-gtk" "Dual-panel file manager (GTK)" "$dcgtk_state"
|
||||||
@@ -98,14 +129,16 @@ _cat_general() {
|
|||||||
local item_count=${#items[@]}
|
local item_count=${#items[@]}
|
||||||
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
local lista_alto=$((item_count > TUI_ALTO_LISTA ? TUI_ALTO_LISTA : item_count))
|
||||||
local choices
|
local choices
|
||||||
choices=$(_checklist "System Tools" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
choices=$(
|
||||||
"${items[@]}" \
|
_checklist "System Tools" "Check [*] the packages you want installed/updated on your system.\n" $TUI_ALTO $TUI_ANCHO $lista_alto \
|
||||||
|
"${items[@]}"
|
||||||
)
|
)
|
||||||
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
|
||||||
case $pkg in
|
case $pkg in
|
||||||
@@ -240,4 +273,3 @@ _cat_general() {
|
|||||||
echo -e "${GREEN}System tools installed.${NC}"
|
echo -e "${GREEN}System tools installed.${NC}"
|
||||||
_pause
|
_pause
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+32
-22
@@ -17,7 +17,7 @@ _detect_all_network_devices() {
|
|||||||
PCI_NET_DEVS=()
|
PCI_NET_DEVS=()
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
PCI_NET_DEVS+=("$line")
|
PCI_NET_DEVS+=("$line")
|
||||||
done < <(timeout 2 lspci -nn 2>/dev/null | grep -iE 'network controller|ethernet controller' || true)
|
done < <(echo "$LSPCI_OUTPUT" | grep -iE 'network controller|ethernet controller' || true)
|
||||||
|
|
||||||
USB_WIFI_DEVS=()
|
USB_WIFI_DEVS=()
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
@@ -29,7 +29,7 @@ _detect_all_network_devices() {
|
|||||||
PCI_BT_DEVS=()
|
PCI_BT_DEVS=()
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
PCI_BT_DEVS+=("$line")
|
PCI_BT_DEVS+=("$line")
|
||||||
done < <(timeout 2 lspci -nn 2>/dev/null | grep -i 'Bluetooth controller' || true)
|
done < <(echo "$LSPCI_OUTPUT" | grep -i 'Bluetooth controller' || true)
|
||||||
|
|
||||||
USB_BT_DEVS=()
|
USB_BT_DEVS=()
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
@@ -153,7 +153,8 @@ _build_firmware_plan() {
|
|||||||
if ! $has_bt; then
|
if ! $has_bt; then
|
||||||
for dev in "${USB_WIFI_DEVS[@]}"; do
|
for dev in "${USB_WIFI_DEVS[@]}"; do
|
||||||
if echo "$dev" | grep -qi 'bluetooth'; then
|
if echo "$dev" | grep -qi 'bluetooth'; then
|
||||||
has_bt=true; break
|
has_bt=true
|
||||||
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
@@ -166,7 +167,8 @@ _build_firmware_plan() {
|
|||||||
plan+=" [+] bluez + bluez-tools + bluez-obexd (base stack)\n"
|
plan+=" [+] bluez + bluez-tools + bluez-obexd (base stack)\n"
|
||||||
fi
|
fi
|
||||||
case "${DESKTOP_ENV:-other}" in
|
case "${DESKTOP_ENV:-other}" in
|
||||||
kde) plan+=" [+] bluedevil (KDE applet)\n"
|
kde)
|
||||||
|
plan+=" [+] bluedevil (KDE applet)\n"
|
||||||
if [ "${AUDIO_SERVER:-}" = "pipewire" ]; then
|
if [ "${AUDIO_SERVER:-}" = "pipewire" ]; then
|
||||||
plan+=" → pipewire-pulse + wireplumber (if missing)\n"
|
plan+=" → pipewire-pulse + wireplumber (if missing)\n"
|
||||||
fi
|
fi
|
||||||
@@ -224,25 +226,35 @@ _handle_wireless() {
|
|||||||
[ -z "$bcm_id" ] && continue
|
[ -z "$bcm_id" ] && continue
|
||||||
dev_id=$(echo "$bcm_id" | cut -d: -f2 | tr '[:upper:]' '[:lower:]')
|
dev_id=$(echo "$bcm_id" | cut -d: -f2 | tr '[:upper:]' '[:lower:]')
|
||||||
|
|
||||||
# --- Verificación de headers ---
|
# --- Dependencies verification ---
|
||||||
if ! apt-cache policy linux-headers-amd64 2>/dev/null | grep -q "Candidate: [^ (none)]"; then
|
if ! is_installed "linux-headers-amd64" || ! is_installed "dkms"; then
|
||||||
_msg "Broadcom Error" "linux-headers-amd64 is not available. Cannot compile Broadcom driver.\n\nEnsure non-free repositories are enabled and run:\n sudo apt install linux-headers-amd64"
|
if ! apt-cache show linux-headers-amd64 dkms >/dev/null 2>&1; then
|
||||||
|
_msg "Broadcom Error" "linux-headers-amd64 or dkms are not available in your repositories. Cannot compile Broadcom driver.\n\nEnsure repositories are enabled and run:\n sudo apt install linux-headers-amd64 dkms"
|
||||||
_pause
|
_pause
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# --- Confirmación ---
|
# --- Confirmation ---
|
||||||
local bcm_ver header_ver
|
if ! _confirm "Broadcom WiFi" "Detected Broadcom wireless device.\n\nInstall broadcom-sta-dkms, dkms, and wireless-tools?"; then
|
||||||
bcm_ver=$(apt-cache policy broadcom-sta-dkms 2>/dev/null | awk 'NR==3 {print $2}')
|
|
||||||
header_ver=$(apt-cache policy linux-headers-amd64 2>/dev/null | awk 'NR==3 {print $2}')
|
|
||||||
if ! _confirm "Broadcom WiFi" "Detected Broadcom wireless device.\n\nInstall broadcom-sta-dkms ${bcm_ver} + linux-headers-amd64 ${header_ver}?"; then
|
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --- Instalación ---
|
# --- Step-by-step installation ---
|
||||||
_run_cmd "Broadcom" "sudo DEBIAN_FRONTEND=noninteractive apt install -y linux-headers-amd64 broadcom-sta-dkms" || true
|
_run_cmd "Broadcom Deps" "sudo DEBIAN_FRONTEND=noninteractive apt install -y dkms wireless-tools linux-headers-amd64" || true
|
||||||
|
_run_cmd "Broadcom Driver" "sudo DEBIAN_FRONTEND=noninteractive apt install -y broadcom-sta-dkms" || true
|
||||||
|
|
||||||
# --- Combo BT (sin cambios respecto al código actual) ---
|
# --- Persist blacklist of conflicting modules ---
|
||||||
|
local blacklist_conf="/etc/modprobe.d/blacklist-broadcom.conf"
|
||||||
|
local blacklist_content="blacklist b43\nblacklist b43legacy\nblacklist brcmsmac\nblacklist bcma\nblacklist ssb"
|
||||||
|
echo -e "$blacklist_content" | sudo tee "$blacklist_conf" >/dev/null
|
||||||
|
|
||||||
|
# --- Update initramfs and load module ---
|
||||||
|
_run_cmd "Initramfs" "sudo update-initramfs -u" || true
|
||||||
|
_run_cmd "Modprobe" "sudo modprobe -r b43 b43legacy b44 bcma brcmsmac brcmfmac ssb wl 2>/dev/null || true" "Removing conflicting modules" || true
|
||||||
|
_run_cmd "Modprobe" "sudo modprobe wl" || true
|
||||||
|
|
||||||
|
# --- Combo BT (unchanged) ---
|
||||||
local has_broadcom_bt=false
|
local has_broadcom_bt=false
|
||||||
local btdev
|
local btdev
|
||||||
for btdev in "${PCI_BT_DEVS[@]}"; do
|
for btdev in "${PCI_BT_DEVS[@]}"; do
|
||||||
@@ -258,13 +270,12 @@ _handle_wireless() {
|
|||||||
echo -e "${YELLOW} A reboot may be required for Bluetooth support.${NC}"
|
echo -e "${YELLOW} A reboot may be required for Bluetooth support.${NC}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --- Post-DKMS verification (Fix 5, sin cambios) ---
|
# --- Post-DKMS verification (Fix 5, unchanged) ---
|
||||||
if ! ls /lib/modules/$(uname -r)/updates/dkms/wl.ko* 2>/dev/null | grep -q .; then
|
if ! ls /lib/modules/$(uname -r)/updates/dkms/wl.ko* 2>/dev/null | grep -q .; then
|
||||||
_msg "Broadcom DKMS Build Failed" "The wl module was not built by DKMS.\n\nPossible causes:\n- Missing build tools (build-essential, dkms)\n- Kernel update without headers\n- Incompatible kernel version\n\nTry: sudo dpkg-reconfigure broadcom-sta-dkms"
|
_msg "Broadcom DKMS Build Failed" "The wl module was not built by DKMS.\n\nPossible causes:\n- Missing build tools (build-essential, dkms)\n- Kernel update without headers\n- Incompatible kernel version\n\nTry: sudo dpkg-reconfigure broadcom-sta-dkms"
|
||||||
if _confirm "Broadcom" "Rebuild the Broadcom driver now?"; then
|
if _confirm "Broadcom" "Rebuild the Broadcom driver now?"; then
|
||||||
_run_cmd "Broadcom" "sudo dpkg-reconfigure broadcom-sta-dkms" || true
|
_run_cmd "Broadcom" "sudo dpkg-reconfigure broadcom-sta-dkms" || true
|
||||||
if ls /lib/modules/$(uname -r)/updates/dkms/wl.ko* 2>/dev/null | grep -q .; then
|
if ls /lib/modules/$(uname -r)/updates/dkms/wl.ko* 2>/dev/null | grep -q .; then
|
||||||
# wl.ko existe tras reconfigure → continuar a limpieza/carga
|
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
local dmesg_out
|
local dmesg_out
|
||||||
@@ -280,7 +291,6 @@ _handle_wireless() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --- Limpieza de módulos conflictivos + carga wl (patrón Mint) ---
|
|
||||||
sudo modprobe -r b43 b43legacy b44 bcma brcmsmac brcmfmac ssb wl 2>/dev/null || true
|
sudo modprobe -r b43 b43legacy b44 bcma brcmsmac brcmfmac ssb wl 2>/dev/null || true
|
||||||
sudo modprobe wl 2>/dev/null
|
sudo modprobe wl 2>/dev/null
|
||||||
|
|
||||||
@@ -297,7 +307,7 @@ _handle_wireless() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# --- USB Broadcom (sin cambios) ---
|
# --- USB Broadcom (unchanged) ---
|
||||||
local usb_dev
|
local usb_dev
|
||||||
for usb_dev in "${USB_WIFI_DEVS[@]}"; do
|
for usb_dev in "${USB_WIFI_DEVS[@]}"; do
|
||||||
if echo "$usb_dev" | grep -qi '0a5c'; then
|
if echo "$usb_dev" | grep -qi '0a5c'; then
|
||||||
@@ -306,7 +316,7 @@ _handle_wireless() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# --- Mensaje final (sin cambios) ---
|
# --- Mensaje final (unchanged) ---
|
||||||
if ! $installed_any && ! $wl_build_failed; then
|
if ! $installed_any && ! $wl_build_failed; then
|
||||||
echo "No special WiFi firmware needed -- base firmware-linux-nonfree covers this system."
|
echo "No special WiFi firmware needed -- base firmware-linux-nonfree covers this system."
|
||||||
_pause
|
_pause
|
||||||
@@ -387,7 +397,7 @@ _ensure_nonfree_repo() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sudo apt update
|
_ensure_apt_updated
|
||||||
echo -e "${GREEN}non-free repository enabled.${NC}"
|
echo -e "${GREEN}non-free repository enabled.${NC}"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -419,7 +429,7 @@ install_firmware() {
|
|||||||
# 4. Install base firmware meta-package (unchanged logic)
|
# 4. Install base firmware meta-package (unchanged logic)
|
||||||
local fw_pkg="firmware-linux-nonfree"
|
local fw_pkg="firmware-linux-nonfree"
|
||||||
local fw_bpo
|
local fw_bpo
|
||||||
fw_bpo=$(apt-cache madison "$fw_pkg" 2>/dev/null | \
|
fw_bpo=$(apt-cache madison "$fw_pkg" 2>/dev/null |
|
||||||
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
|
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
|
||||||
|
|
||||||
local fw_stable
|
local fw_stable
|
||||||
|
|||||||
+2
-2
@@ -60,7 +60,7 @@ ensure_contrib_repo() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sudo apt update
|
_ensure_apt_updated
|
||||||
echo -e "${GREEN}contrib repository enabled.${NC}"
|
echo -e "${GREEN}contrib repository enabled.${NC}"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -108,7 +108,7 @@ install_gaming() {
|
|||||||
if $need_32bit && ! dpkg --print-foreign-architectures 2>/dev/null | grep -q i386; then
|
if $need_32bit && ! dpkg --print-foreign-architectures 2>/dev/null | grep -q i386; then
|
||||||
echo -e "${YELLOW}Enabling i386 architecture (required by selection)...${NC}"
|
echo -e "${YELLOW}Enabling i386 architecture (required by selection)...${NC}"
|
||||||
sudo dpkg --add-architecture i386
|
sudo dpkg --add-architecture i386
|
||||||
_run_cmd "APT Update" "sudo apt update" "Updating package lists..."
|
_ensure_apt_updated
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 4. Install 32-bit graphics drivers only if 32-bit is needed
|
# 4. Install 32-bit graphics drivers only if 32-bit is needed
|
||||||
|
|||||||
+10
-6
@@ -33,7 +33,7 @@ _install_amd_intel_stack() {
|
|||||||
local ref_ver
|
local ref_ver
|
||||||
ref_ver=$(apt-cache policy mesa-vulkan-drivers 2>/dev/null | awk 'NR==3 {print $2; exit}')
|
ref_ver=$(apt-cache policy mesa-vulkan-drivers 2>/dev/null | awk 'NR==3 {print $2; exit}')
|
||||||
local ref_bpo_ver
|
local ref_bpo_ver
|
||||||
ref_bpo_ver=$(apt-cache madison mesa-vulkan-drivers 2>/dev/null | \
|
ref_bpo_ver=$(apt-cache madison mesa-vulkan-drivers 2>/dev/null |
|
||||||
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
|
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
|
||||||
local comp_line="Components: Vulkan, OpenGL, GLX, EGL, VA-API (64-bit)"
|
local comp_line="Components: Vulkan, OpenGL, GLX, EGL, VA-API (64-bit)"
|
||||||
|
|
||||||
@@ -79,11 +79,13 @@ _install_amd_intel_stack() {
|
|||||||
local desc
|
local desc
|
||||||
desc=$(echo "$gpu_line" | sed -E 's/.*: //; s/ *\(rev.*//')
|
desc=$(echo "$gpu_line" | sed -E 's/.*: //; s/ *\(rev.*//')
|
||||||
plan+=" GPU ${gpu_count}: ${desc}\n"
|
plan+=" GPU ${gpu_count}: ${desc}\n"
|
||||||
done < <(timeout 2 lspci -nn | grep -E "VGA|3D" || true)
|
done < <(echo "$LSPCI_OUTPUT" | grep -E "VGA|3D" || true)
|
||||||
plan+="\nPlanned components:\n"
|
plan+="\nPlanned components:\n"
|
||||||
if $HAS_INTEL; then
|
if $HAS_INTEL; then
|
||||||
local _gen; _gen=$(get_intel_generation)
|
local _gen
|
||||||
local _va; [ "$_gen" = "gen7-" ] && _va="i965-va-driver-shaders" || _va="intel-media-va-driver-non-free"
|
_gen=$(get_intel_generation)
|
||||||
|
local _va
|
||||||
|
[ "$_gen" = "gen7-" ] && _va="i965-va-driver-shaders" || _va="intel-media-va-driver-non-free"
|
||||||
plan+=" [+] Intel firmware + ${_va}\n"
|
plan+=" [+] Intel firmware + ${_va}\n"
|
||||||
fi
|
fi
|
||||||
if $HAS_AMD; then
|
if $HAS_AMD; then
|
||||||
@@ -154,7 +156,9 @@ _apply_amd_gcn_grub_fix() {
|
|||||||
|
|
||||||
sudo cp "$file" "$backup"
|
sudo cp "$file" "$backup"
|
||||||
|
|
||||||
sudo sed -i "/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"$*/${params}&/" "$file"
|
if ! sudo grep -q "amdgpu.si_support=1" "$file"; then
|
||||||
|
sudo sed -i -E "/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"([^\"]*)\"/\"${params} \1\"/" "$file"
|
||||||
|
fi
|
||||||
|
|
||||||
if _confirm "AMD GCN — GRUB" "Parameters added:\n\n ${params}\n\nRun update-grub now?" 12 65; then
|
if _confirm "AMD GCN — GRUB" "Parameters added:\n\n ${params}\n\nRun update-grub now?" 12 65; then
|
||||||
if sudo update-grub >/dev/null 2>&1; then
|
if sudo update-grub >/dev/null 2>&1; then
|
||||||
@@ -183,7 +187,7 @@ _install_nvidia_stack() {
|
|||||||
local desc
|
local desc
|
||||||
desc=$(echo "$gpu_line" | sed -E 's/.*: //; s/ *\(rev.*//')
|
desc=$(echo "$gpu_line" | sed -E 's/.*: //; s/ *\(rev.*//')
|
||||||
plan+=" GPU ${gpu_count}: ${desc}\n"
|
plan+=" GPU ${gpu_count}: ${desc}\n"
|
||||||
done < <(timeout 2 lspci -nn | grep -E "VGA|3D" || true)
|
done < <(echo "$LSPCI_OUTPUT" | grep -E "VGA|3D" || true)
|
||||||
plan+="\nPlanned:\n [+] NVIDIA proprietary driver"
|
plan+="\nPlanned:\n [+] NVIDIA proprietary driver"
|
||||||
|
|
||||||
_msg "NVIDIA Stack — Plan" "$plan" 14 65
|
_msg "NVIDIA Stack — Plan" "$plan" 14 65
|
||||||
|
|||||||
+13
-7
@@ -23,7 +23,10 @@ declare -A NVIDIA_FAMILY_MAP=(
|
|||||||
)
|
)
|
||||||
|
|
||||||
detect_nvidia_arch() {
|
detect_nvidia_arch() {
|
||||||
[ -z "$1" ] && { echo "unknown"; return; }
|
[ -z "$1" ] && {
|
||||||
|
echo "unknown"
|
||||||
|
return
|
||||||
|
}
|
||||||
local pci_id="${1^^}"
|
local pci_id="${1^^}"
|
||||||
local prefix="${pci_id:0:2}"
|
local prefix="${pci_id:0:2}"
|
||||||
echo "${NVIDIA_FAMILY_MAP[$prefix]:-unknown}"
|
echo "${NVIDIA_FAMILY_MAP[$prefix]:-unknown}"
|
||||||
@@ -69,8 +72,11 @@ is_nvidia_blackwell(){ [ -n "$NVIDIA_GPU_DEVICE_ID" ] && [[ "$(detect_nvidia_arc
|
|||||||
|
|
||||||
is_amd_legacy_gcn() {
|
is_amd_legacy_gcn() {
|
||||||
local dev_id
|
local dev_id
|
||||||
dev_id=$(timeout 2 lspci -nn | grep -iE "VGA|3D" | grep -i amd | grep -oP '1002:\K[0-9a-fA-F]{4}' | head -n1)
|
dev_id=$(echo "$LSPCI_OUTPUT" | grep -iE "VGA|3D" | grep -i amd | grep -oP '1002:\K[0-9a-fA-F]{4}' | head -n1)
|
||||||
[ -z "$dev_id" ] && { echo false; return; }
|
[ -z "$dev_id" ] && {
|
||||||
|
echo false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
local legacy_ids
|
local legacy_ids
|
||||||
legacy_ids="6660|6664|6665|6667|6780|6784|6788|678a|6798|679a|679e|679f|3000|3001|6808|6809|6810|6811|6816|6817|6818|6819|6828|6829|682b|682c|6835|6837|683d|683f|6608|6609|6610|6611|6613|6617|1dcf|983d|6646|6649|664d|6650|6651|6658|665c|665d|67a0|67a1|67a2|67a8|67a9|67aa|67b0|67b1|67b8|67be|9830|9831|9832|9833|9834|9835|9836|9837|9838|9839|1304|1305|1306|1307|1309|130a|130b|130c|130d|130e|130f|1310|1311|1312|1313|1315|1316|1317|1318|131b|131c|131d|9850|9851|9852|9853|9854|9855|9856|9857|9858|9859|985a|985b|985c|985d|985e|985f"
|
legacy_ids="6660|6664|6665|6667|6780|6784|6788|678a|6798|679a|679e|679f|3000|3001|6808|6809|6810|6811|6816|6817|6818|6819|6828|6829|682b|682c|6835|6837|683d|683f|6608|6609|6610|6611|6613|6617|1dcf|983d|6646|6649|664d|6650|6651|6658|665c|665d|67a0|67a1|67a2|67a8|67a9|67aa|67b0|67b1|67b8|67be|9830|9831|9832|9833|9834|9835|9836|9837|9838|9839|1304|1305|1306|1307|1309|130a|130b|130c|130d|130e|130f|1310|1311|1312|1313|1315|1316|1317|1318|131b|131c|131d|9850|9851|9852|9853|9854|9855|9856|9857|9858|9859|985a|985b|985c|985d|985e|985f"
|
||||||
@@ -94,7 +100,7 @@ _install_mesa_backports() {
|
|||||||
|
|
||||||
for mpkg in "${mesa_pkgs[@]}"; do
|
for mpkg in "${mesa_pkgs[@]}"; do
|
||||||
local bpo_ver
|
local bpo_ver
|
||||||
bpo_ver=$(apt-cache madison "$mpkg" 2>/dev/null | \
|
bpo_ver=$(apt-cache madison "$mpkg" 2>/dev/null |
|
||||||
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
|
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
|
||||||
if [ -n "$bpo_ver" ]; then
|
if [ -n "$bpo_ver" ]; then
|
||||||
bpo_pkgs+=("$mpkg")
|
bpo_pkgs+=("$mpkg")
|
||||||
@@ -114,7 +120,7 @@ _install_mesa_backports() {
|
|||||||
local ref_ver
|
local ref_ver
|
||||||
ref_ver=$(apt-cache policy mesa-vulkan-drivers 2>/dev/null | awk 'NR==3 {print $2; exit}')
|
ref_ver=$(apt-cache policy mesa-vulkan-drivers 2>/dev/null | awk 'NR==3 {print $2; exit}')
|
||||||
local ref_bpo_ver
|
local ref_bpo_ver
|
||||||
ref_bpo_ver=$(apt-cache madison mesa-vulkan-drivers 2>/dev/null | \
|
ref_bpo_ver=$(apt-cache madison mesa-vulkan-drivers 2>/dev/null |
|
||||||
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
|
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
|
||||||
local comp_line="Components: Vulkan, OpenGL, GLX, EGL, VA-API (64-bit)"
|
local comp_line="Components: Vulkan, OpenGL, GLX, EGL, VA-API (64-bit)"
|
||||||
|
|
||||||
@@ -176,12 +182,12 @@ offer_generic_tools() {
|
|||||||
|
|
||||||
_is_hybrid_laptop() {
|
_is_hybrid_laptop() {
|
||||||
local gpu_count nvidia_count chassis
|
local gpu_count nvidia_count chassis
|
||||||
gpu_count=$(lspci -nn 2>/dev/null | grep -ciE "VGA compatible|3D controller") || true
|
gpu_count=$(echo "$LSPCI_OUTPUT" | grep -ciE "VGA compatible|3D controller") || true
|
||||||
[ "$gpu_count" -lt 2 ] && return 1
|
[ "$gpu_count" -lt 2 ] && return 1
|
||||||
|
|
||||||
# Defensa en profundidad: si TODAS las GPUs son NVIDIA (SLI o
|
# Defensa en profundidad: si TODAS las GPUs son NVIDIA (SLI o
|
||||||
# dual-GPU desktop), no hay iGPU Intel/AMD → no es híbrida.
|
# dual-GPU desktop), no hay iGPU Intel/AMD → no es híbrida.
|
||||||
nvidia_count=$(lspci -nn 2>/dev/null | grep -iE "VGA compatible|3D controller" | grep -c "10de:") || true
|
nvidia_count=$(echo "$LSPCI_OUTPUT" | grep -iE "VGA compatible|3D controller" | grep -c "10de:") || true
|
||||||
[ "$nvidia_count" -ge "$gpu_count" ] && return 1
|
[ "$nvidia_count" -ge "$gpu_count" ] && return 1
|
||||||
|
|
||||||
chassis=$(cat /sys/class/dmi/id/chassis_type 2>/dev/null || echo "0")
|
chassis=$(cat /sys/class/dmi/id/chassis_type 2>/dev/null || echo "0")
|
||||||
|
|||||||
+13
-10
@@ -154,7 +154,7 @@ _write_deb822_backports() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# If backports were formerly embedded in debian.sources, clean them
|
# If backports were formerly embedded in debian.sources, clean them
|
||||||
grep -qE "^Suites:.*${codename}-backports\b" /etc/apt/sources.list.d/debian.sources 2>/dev/null && \
|
grep -qE "^Suites:.*${codename}-backports\b" /etc/apt/sources.list.d/debian.sources 2>/dev/null &&
|
||||||
_clean_embedded_backports_deb822 "$codename" || true
|
_clean_embedded_backports_deb822 "$codename" || true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,7 +172,7 @@ _remove_deb822_backports() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Also clean any embedded backports in main debian.sources
|
# Also clean any embedded backports in main debian.sources
|
||||||
grep -qE "^Suites:.*${codename}-backports\b" /etc/apt/sources.list.d/debian.sources 2>/dev/null && \
|
grep -qE "^Suites:.*${codename}-backports\b" /etc/apt/sources.list.d/debian.sources 2>/dev/null &&
|
||||||
_clean_embedded_backports_deb822 "$codename"
|
_clean_embedded_backports_deb822 "$codename"
|
||||||
|
|
||||||
# Clean embedded backports from classic file too (safety net)
|
# Clean embedded backports from classic file too (safety net)
|
||||||
@@ -248,7 +248,7 @@ _write_classic_backports() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# If backports were formerly embedded in sources.list, clean them
|
# If backports were formerly embedded in sources.list, clean them
|
||||||
grep -qE "^[^#]*${codename}-backports\b" /etc/apt/sources.list 2>/dev/null && \
|
grep -qE "^[^#]*${codename}-backports\b" /etc/apt/sources.list 2>/dev/null &&
|
||||||
_clean_embedded_backports_classic "$codename" || true
|
_clean_embedded_backports_classic "$codename" || true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -266,7 +266,7 @@ _remove_classic_backports() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Also clean any embedded backports in main sources.list
|
# Also clean any embedded backports in main sources.list
|
||||||
grep -qE "^[^#]*${codename}-backports\b" /etc/apt/sources.list 2>/dev/null && \
|
grep -qE "^[^#]*${codename}-backports\b" /etc/apt/sources.list 2>/dev/null &&
|
||||||
_clean_embedded_backports_classic "$codename"
|
_clean_embedded_backports_classic "$codename"
|
||||||
|
|
||||||
# Clean embedded backports from deb822 file too (safety net)
|
# Clean embedded backports from deb822 file too (safety net)
|
||||||
@@ -410,9 +410,15 @@ Adding deb.debian.org may duplicate your current mirror configuration. Continue?
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if $use_deb822; then
|
if $use_deb822; then
|
||||||
_write_deb822 "$DEBIAN_CODENAME" "write" "$bp_enabled" "$bp_location" "$components" || { cleanup_repo_backup; return 1; }
|
_write_deb822 "$DEBIAN_CODENAME" "write" "$bp_enabled" "$bp_location" "$components" || {
|
||||||
|
cleanup_repo_backup
|
||||||
|
return 1
|
||||||
|
}
|
||||||
else
|
else
|
||||||
_write_classic "$DEBIAN_CODENAME" "write" "$bp_enabled" "$bp_location" "$components" || { cleanup_repo_backup; return 1; }
|
_write_classic "$DEBIAN_CODENAME" "write" "$bp_enabled" "$bp_location" "$components" || {
|
||||||
|
cleanup_repo_backup
|
||||||
|
return 1
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Tidy: with deb822 chosen, an empty classic file is no longer needed
|
# Tidy: with deb822 chosen, an empty classic file is no longer needed
|
||||||
@@ -425,7 +431,6 @@ Adding deb.debian.org may duplicate your current mirror configuration. Continue?
|
|||||||
|
|
||||||
echo "Updating package lists..."
|
echo "Updating package lists..."
|
||||||
if sudo apt update; then
|
if sudo apt update; then
|
||||||
REPOS_CONFIGURED=true
|
|
||||||
cleanup_repo_backup
|
cleanup_repo_backup
|
||||||
echo -e "${GREEN}Repository components configured.${NC}"
|
echo -e "${GREEN}Repository components configured.${NC}"
|
||||||
return 0
|
return 0
|
||||||
@@ -514,7 +519,6 @@ Writing debian.sources may duplicate your configuration. Continue?" 10 65; then
|
|||||||
|
|
||||||
echo "Updating package lists..."
|
echo "Updating package lists..."
|
||||||
if sudo apt update; then
|
if sudo apt update; then
|
||||||
REPOS_CONFIGURED=true
|
|
||||||
cleanup_repo_backup
|
cleanup_repo_backup
|
||||||
echo -e "${GREEN}Repository components configured.${NC}"
|
echo -e "${GREEN}Repository components configured.${NC}"
|
||||||
_repos_offer_upgrade
|
_repos_offer_upgrade
|
||||||
@@ -558,7 +562,6 @@ _repos_migrate_format() {
|
|||||||
|
|
||||||
echo "Updating package lists..."
|
echo "Updating package lists..."
|
||||||
if sudo apt update; then
|
if sudo apt update; then
|
||||||
REPOS_CONFIGURED=true
|
|
||||||
cleanup_repo_backup
|
cleanup_repo_backup
|
||||||
echo -e "${GREEN}Repository format migrated to DEB822.${NC}"
|
echo -e "${GREEN}Repository format migrated to DEB822.${NC}"
|
||||||
else
|
else
|
||||||
@@ -589,7 +592,7 @@ Answer NO to disable or remove backports if they are currently enabled." 16 70;
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Nothing to do — already in desired state
|
# Nothing to do — already in desired state
|
||||||
if { $enable_backports && [ "$bp_status" = "enabled" ]; } || \
|
if { $enable_backports && [ "$bp_status" = "enabled" ]; } ||
|
||||||
{ ! $enable_backports && [ "$bp_status" = "disabled" ]; }; then
|
{ ! $enable_backports && [ "$bp_status" = "disabled" ]; }; then
|
||||||
echo "Backports are already configured as requested."
|
echo "Backports are already configured as requested."
|
||||||
_pause
|
_pause
|
||||||
|
|||||||
@@ -73,8 +73,12 @@ Useful for automation but reduces security." 14 70; then
|
|||||||
"power" "Shutdown, reboot, halt" ON)
|
"power" "Shutdown, reboot, halt" ON)
|
||||||
clear
|
clear
|
||||||
|
|
||||||
[ -z "$choices" ] && { echo "No commands selected."; return; }
|
[ -z "$choices" ] && {
|
||||||
local cleaned; cleaned=$(echo "$choices" | tr -d '"')
|
echo "No commands selected."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
local cleaned
|
||||||
|
cleaned=$(echo "$choices" | tr -d '"')
|
||||||
|
|
||||||
local content=""
|
local content=""
|
||||||
for cmd in $cleaned; do
|
for cmd in $cleaned; do
|
||||||
@@ -91,7 +95,8 @@ Useful for automation but reduces security." 14 70; then
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
local content_str; content_str=$(echo -e "$content")
|
local content_str
|
||||||
|
content_str=$(echo -e "$content")
|
||||||
if _validate_sudoers "$content_str" "$nopasswd_file"; then
|
if _validate_sudoers "$content_str" "$nopasswd_file"; then
|
||||||
echo -e "${GREEN}Passwordless sudo configured for selected commands.${NC}"
|
echo -e "${GREEN}Passwordless sudo configured for selected commands.${NC}"
|
||||||
else
|
else
|
||||||
@@ -103,7 +108,7 @@ Useful for automation but reduces security." 14 70; then
|
|||||||
# ── Option 3: Repair Home Directory Ownership ──
|
# ── Option 3: Repair Home Directory Ownership ──
|
||||||
_repair_home_ownership() {
|
_repair_home_ownership() {
|
||||||
local home
|
local home
|
||||||
home=$(eval echo "~$USER")
|
home=$(getent passwd "${SUDO_USER:-$USER}" | cut -d: -f6)
|
||||||
|
|
||||||
if [ ! -d "$home" ]; then
|
if [ ! -d "$home" ]; then
|
||||||
_msg "Home Directory" "Home directory '$home' does not exist." 8 60
|
_msg "Home Directory" "Home directory '$home' does not exist." 8 60
|
||||||
|
|||||||
+4
-4
@@ -37,7 +37,7 @@ _show_sysinfo() {
|
|||||||
msg+="GPU ${gpu_count}: ${desc}\n"
|
msg+="GPU ${gpu_count}: ${desc}\n"
|
||||||
msg+=" Driver: ${mesa_ver:+Mesa }${mesa_ver:-unknown}\n"
|
msg+=" Driver: ${mesa_ver:+Mesa }${mesa_ver:-unknown}\n"
|
||||||
fi
|
fi
|
||||||
done < <(timeout 2 lspci -nn | grep -E "VGA|3D" || true)
|
done < <(echo "$LSPCI_OUTPUT" | grep -E "VGA|3D" || true)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! $found_gpu; then
|
if ! $found_gpu; then
|
||||||
@@ -52,13 +52,13 @@ _show_sysinfo() {
|
|||||||
declare -a pci_eth_lines=()
|
declare -a pci_eth_lines=()
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
pci_eth_lines+=("$line")
|
pci_eth_lines+=("$line")
|
||||||
done < <(timeout 2 lspci -d ::0200 2>/dev/null || true)
|
done < <(echo "$LSPCI_OUTPUT" | grep -i 'ethernet controller' || true)
|
||||||
|
|
||||||
# ── 2. Detect ALL WiFi chipsets (class 0x0280 + vendor fallbacks) ──
|
# ── 2. Detect ALL WiFi chipsets (class 0x0280 + vendor fallbacks) ──
|
||||||
declare -a pci_wifi_lines=()
|
declare -a pci_wifi_lines=()
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
pci_wifi_lines+=("$line")
|
pci_wifi_lines+=("$line")
|
||||||
done < <(timeout 2 lspci -d ::0280 2>/dev/null || true)
|
done < <(echo "$LSPCI_OUTPUT" | grep -i 'network controller' || true)
|
||||||
|
|
||||||
# Broadcom vendor-ID fallback (14e4) — include only if not already captured
|
# Broadcom vendor-ID fallback (14e4) — include only if not already captured
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
@@ -69,7 +69,7 @@ _show_sysinfo() {
|
|||||||
done
|
done
|
||||||
! $already && pci_wifi_lines+=("$line")
|
! $already && pci_wifi_lines+=("$line")
|
||||||
fi
|
fi
|
||||||
done < <(timeout 2 lspci -nn 2>/dev/null || true)
|
done < <(echo "$LSPCI_OUTPUT" || true)
|
||||||
|
|
||||||
# USB WiFi fallback
|
# USB WiFi fallback
|
||||||
local usb_wifi_lines=()
|
local usb_wifi_lines=()
|
||||||
|
|||||||
+61
-15
@@ -22,6 +22,12 @@ WIFI_CHIPSET=""
|
|||||||
DESKTOP_ENV=""
|
DESKTOP_ENV=""
|
||||||
AUDIO_SERVER=""
|
AUDIO_SERVER=""
|
||||||
|
|
||||||
|
# APT update deduplication flag (set to 1 after the first successful apt-get update)
|
||||||
|
APT_UPDATED=0
|
||||||
|
|
||||||
|
# Cached output of `lspci -nn` for the whole session (populated once via _init_lspci_cache)
|
||||||
|
LSPCI_OUTPUT=""
|
||||||
|
|
||||||
# --------------------------
|
# --------------------------
|
||||||
# Pre-flight checks
|
# Pre-flight checks
|
||||||
# --------------------------
|
# --------------------------
|
||||||
@@ -225,12 +231,23 @@ detect_kernel() {
|
|||||||
KERNEL_VERSION=$(uname -r)
|
KERNEL_VERSION=$(uname -r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ----------------------------------
|
||||||
|
# lspci output cache
|
||||||
|
# ----------------------------------
|
||||||
|
# Populates LSPCI_OUTPUT once per session. `lspci -nn` includes the textual PCI
|
||||||
|
# class (VGA/3D/Ethernet/Network/Bluetooth controller) and the device IDs
|
||||||
|
# (e.g. 14e4:), so a single capture covers every grep used across modules.
|
||||||
|
_init_lspci_cache() {
|
||||||
|
[ -n "${LSPCI_OUTPUT:-}" ] && return
|
||||||
|
LSPCI_OUTPUT=$(timeout 2 lspci -nn 2>/dev/null || true)
|
||||||
|
}
|
||||||
|
|
||||||
# ----------------------------------
|
# ----------------------------------
|
||||||
# GPU detection
|
# GPU detection
|
||||||
# ----------------------------------
|
# ----------------------------------
|
||||||
detect_gpu() {
|
detect_gpu() {
|
||||||
local gpu_lines
|
local gpu_lines
|
||||||
gpu_lines=$(timeout 2 lspci -nn | grep -E "VGA|3D") || true
|
gpu_lines=$(echo "$LSPCI_OUTPUT" | grep -E "VGA|3D") || true
|
||||||
if [ -z "$gpu_lines" ]; then
|
if [ -z "$gpu_lines" ]; then
|
||||||
GPU_TYPE="unknown"
|
GPU_TYPE="unknown"
|
||||||
GPU_DESC="No GPU detected"
|
GPU_DESC="No GPU detected"
|
||||||
@@ -322,21 +339,21 @@ declare -a WIFI_SSIDS=()
|
|||||||
|
|
||||||
detect_network() {
|
detect_network() {
|
||||||
local eth_line
|
local eth_line
|
||||||
eth_line=$(timeout 2 lspci -nn | grep -i 'Ethernet controller' | head -n1) || true
|
eth_line=$(echo "$LSPCI_OUTPUT" | grep -i 'Ethernet controller' | head -n1) || true
|
||||||
if [ -n "$eth_line" ]; then
|
if [ -n "$eth_line" ]; then
|
||||||
ETH_DESC=$(echo "$eth_line" | sed -E 's/^.*\]: //; s/ \[[0-9a-fA-F]{4}:[0-9a-fA-F]{4}\]//; s/ \(rev [0-9a-fA-F]+\)//')
|
ETH_DESC=$(echo "$eth_line" | sed -E 's/^.*\]: //; s/ \[[0-9a-fA-F]{4}:[0-9a-fA-F]{4}\]//; s/ \(rev [0-9a-fA-F]+\)//')
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local wifi_line
|
local wifi_line
|
||||||
# Layer 1: grep by PCI class description text
|
# Layer 1: grep by PCI class description text
|
||||||
wifi_line=$(timeout 2 lspci -nn 2>/dev/null | grep -iE 'network controller|wireless|wi-fi|wlan|802\.11' | head -n1) || true
|
wifi_line=$(echo "$LSPCI_OUTPUT" | grep -iE 'network controller|wireless|wi-fi|wlan|802\.11' | head -n1) || true
|
||||||
# Layer 2: grep by exact PCI class code 0x0280 (Network controller)
|
# Layer 2: grep by exact PCI class code 0x0280 (Network controller)
|
||||||
if [ -z "$wifi_line" ]; then
|
if [ -z "$wifi_line" ]; then
|
||||||
wifi_line=$(timeout 2 lspci -d ::0280 2>/dev/null | head -n1) || true
|
wifi_line=$(echo "$LSPCI_OUTPUT" | grep -i 'network controller' | head -n1) || true
|
||||||
fi
|
fi
|
||||||
# Layer 3: Broadcom vendor ID fallback (14e4)
|
# Layer 3: Broadcom vendor ID fallback (14e4)
|
||||||
if [ -z "$wifi_line" ]; then
|
if [ -z "$wifi_line" ]; then
|
||||||
wifi_line=$(timeout 2 lspci -nn 2>/dev/null | grep -i '14e4:' | head -n1) || true
|
wifi_line=$(echo "$LSPCI_OUTPUT" | grep -i '14e4:' | head -n1) || true
|
||||||
fi
|
fi
|
||||||
if [ -n "$wifi_line" ]; then
|
if [ -n "$wifi_line" ]; then
|
||||||
WIFI_CHIPSET="$wifi_line"
|
WIFI_CHIPSET="$wifi_line"
|
||||||
@@ -498,37 +515,42 @@ get_intel_generation() {
|
|||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
is_backports_enabled() {
|
is_backports_enabled() {
|
||||||
local codename="${DEBIAN_CODENAME:-}"
|
local codename="${DEBIAN_CODENAME:-}"
|
||||||
[ -z "$codename" ] && { echo false; return; }
|
[ -z "$codename" ] && {
|
||||||
|
echo false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
local c_pattern="^[^#]*${codename}-backports[[:space:]]+"
|
local c_pattern="^[^#]*${codename}-backports[[:space:]]+"
|
||||||
local d_pattern="Suites:.*${codename}-backports"
|
local d_pattern="Suites:.*${codename}-backports"
|
||||||
|
|
||||||
# Classic embedded (sources.list)
|
# Classic embedded (sources.list)
|
||||||
if [ -f /etc/apt/sources.list ] && grep -Eq "$c_pattern" /etc/apt/sources.list 2>/dev/null; then
|
if [ -f /etc/apt/sources.list ] && grep -Eq "$c_pattern" /etc/apt/sources.list 2>/dev/null; then
|
||||||
echo true; return
|
echo true
|
||||||
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Classic standalone (any .list file in sources.list.d)
|
# Classic standalone (any .list file in sources.list.d)
|
||||||
if [ -d /etc/apt/sources.list.d ] && grep -qrE "$c_pattern" /etc/apt/sources.list.d/*.list 2>/dev/null; then
|
if [ -d /etc/apt/sources.list.d ] && grep -qrE "$c_pattern" /etc/apt/sources.list.d/*.list 2>/dev/null; then
|
||||||
echo true; return
|
echo true
|
||||||
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Deb822 any .sources file
|
# Deb822 any .sources file
|
||||||
if [ -d /etc/apt/sources.list.d ] && grep -qr "$d_pattern" /etc/apt/sources.list.d/*.sources 2>/dev/null; then
|
if [ -d /etc/apt/sources.list.d ] && grep -qr "$d_pattern" /etc/apt/sources.list.d/*.sources 2>/dev/null; then
|
||||||
echo true; return
|
echo true
|
||||||
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo false
|
echo false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
install_backports_or_stable() {
|
install_backports_or_stable() {
|
||||||
local pkg="$1"
|
local pkg="$1"
|
||||||
local pkg_desc="${2:-$pkg}"
|
local pkg_desc="${2:-$pkg}"
|
||||||
|
|
||||||
local bpo_ver=""
|
local bpo_ver=""
|
||||||
if [ "$(is_backports_enabled)" == true ]; then
|
if [ "$(is_backports_enabled)" == true ]; then
|
||||||
bpo_ver=$(apt-cache madison "$pkg" 2>/dev/null | \
|
bpo_ver=$(apt-cache madison "$pkg" 2>/dev/null |
|
||||||
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
|
grep "${DEBIAN_CODENAME}-backports" | awk '{print $3}' | head -1)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -594,17 +616,20 @@ _msg_red() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_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
|
||||||
}
|
}
|
||||||
|
|
||||||
_checklist() {
|
_checklist() {
|
||||||
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" --ok-button "Apply" --checklist "$text" "$h" "$w" "$lh" "$@" 3>&1 1>&2 2>&3 || true
|
whiptail --title "$title" --ok-button "Apply" --checklist "$text" "$h" "$w" "$lh" "$@" 3>&1 1>&2 2>&3 || true
|
||||||
}
|
}
|
||||||
|
|
||||||
_radiolist() {
|
_radiolist() {
|
||||||
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" --ok-button "Install" --radiolist "$text" "$h" "$w" "$lh" "$@" 3>&1 1>&2 2>&3 || true
|
whiptail --title "$title" --ok-button "Install" --radiolist "$text" "$h" "$w" "$lh" "$@" 3>&1 1>&2 2>&3 || true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -701,7 +726,7 @@ _run_install_pkg() {
|
|||||||
|
|
||||||
get_backports_kernel_version() {
|
get_backports_kernel_version() {
|
||||||
local ver
|
local ver
|
||||||
ver=$(apt-cache policy linux-image-amd64 2>/dev/null | \
|
ver=$(apt-cache policy linux-image-amd64 2>/dev/null |
|
||||||
grep -E '^[[:space:]]+[0-9]+\.[0-9]+\.[0-9]+.*~bpo' | head -n1 | awk '{print $1}')
|
grep -E '^[[:space:]]+[0-9]+\.[0-9]+\.[0-9]+.*~bpo' | head -n1 | awk '{print $1}')
|
||||||
if [ -n "$ver" ]; then
|
if [ -n "$ver" ]; then
|
||||||
echo "$ver"
|
echo "$ver"
|
||||||
@@ -759,6 +784,25 @@ _check_network() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ----------------------------------
|
||||||
|
# APT update deduplication
|
||||||
|
# ----------------------------------
|
||||||
|
# Runs `apt-get update` at most once per session. Subsequent calls bypass the
|
||||||
|
# network refresh. Returns 0 on success, 1 if apt-get update fails.
|
||||||
|
_ensure_apt_updated() {
|
||||||
|
if [ "$APT_UPDATED" -eq 1 ]; then
|
||||||
|
echo -e "${GREEN}[+]${NC} APT package lists already refreshed this session."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
echo -e "${GREEN}[+]${NC} Refreshing APT package lists..."
|
||||||
|
if sudo apt-get update; then
|
||||||
|
APT_UPDATED=1
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
echo -e "${RED}[-]${NC} apt-get update failed."
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
# ----------------------------------
|
# ----------------------------------
|
||||||
# LightDM configuration
|
# LightDM configuration
|
||||||
# ----------------------------------
|
# ----------------------------------
|
||||||
@@ -792,4 +836,6 @@ refresh_system_state() {
|
|||||||
detect_debian_version
|
detect_debian_version
|
||||||
detect_gpu
|
detect_gpu
|
||||||
detect_cpu_ram
|
detect_cpu_ram
|
||||||
|
detect_network
|
||||||
|
detect_desktop_environment
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user