From 835b6b0040c039b2c2d4a181f81f06788ca7ce9f Mon Sep 17 00:00:00 2001 From: Pathfinder Date: Mon, 2 Nov 2026 16:16:37 +0100 Subject: [PATCH 1/3] Always-packages: p7zip -> 7zip (retired in F44) + resilient loop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit YuKu's expanded always-section died at section 6: p7zip was RETIRED from Fedora 44 (replaced by the official '7zip' package) -> the compression line's transaction failed -> set -e killed the whole install after everything before it had already succeeded. Two changes: - p7zip -> 7zip in the Compression line (unace/unrar verified fine: they live in RPM Fusion, which base enables). - The always-loop now warns in red per failing category line and continues — same resilience contract as the advanced menu. One missing package can no longer abort a 30-minute install at the finish line. Harness: healthy run installs everything incl. 7zip/mpv/wget; a deliberately broken compression line produces the red Failed block, 'finished with failures' summary, exit 0, and later categories (mpv, wget...) still install. --- setup.sh | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/setup.sh b/setup.sh index d690993..f086a63 100755 --- a/setup.sh +++ b/setup.sh @@ -384,7 +384,8 @@ ALWAYS_PACKAGES=( # Internet "wget" # Compression tools - "zip gzip p7zip unace unrar xarchiver" + # (p7zip was RETIRED in Fedora 44; '7zip' is the official replacement) + "zip gzip 7zip unace unrar xarchiver" # Office and Editors "libreoffice" # Multimedia @@ -394,11 +395,21 @@ ALWAYS_PACKAGES=( step "6 Always-installed packages" rule +always_failed="" for category in "${ALWAYS_PACKAGES[@]}"; do # shellcheck disable=SC2086 - install_packages $category + if ! install_packages $category; then + color_red " Failed: $category" + color_red " (a package in this line has no match — the rest of the install continues)" + always_failed="yes" + pause_if_debug + fi done -ok "Always-packages installed." +if [[ -z "$always_failed" ]]; then + ok "Always-packages installed." +else + warn "Always-packages finished with failures (see red lines above)." +fi pause_if_debug #------------------------------------------ From a5e4facf42622f225823ea4b6f7b4c9d81040dd4 Mon Sep 17 00:00:00 2001 From: Pathfinder Date: Mon, 2 Nov 2026 16:19:52 +0100 Subject: [PATCH 2/3] Live progress line: clamp to terminal width MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit YuKu's promised screenshot revealed the real section-6 chaos: the live line 'block + msg + current package' is longer than 80 columns, so every redraw WRAPPED to a new line instead of overwriting — the screen filled with duplicate partial progress lines. The line is now composed once and clamped to $(tput cols) - 2 with an ASCII '..' tail. 80-col pty run: zero wrapped live lines (the only >82-char output left is plain-mode dnf, unchanged by design). --- lib/common.sh | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/lib/common.sh b/lib/common.sh index 219d35b..acfa991 100644 --- a/lib/common.sh +++ b/lib/common.sh @@ -143,19 +143,25 @@ ui_quiet_run() { cur=$(sed -n "$((before+1)),\$p" "$log" 2>/dev/null \ | grep -E '^(Installing|Upgrading|Downgrading|Removing|Verifying|Preparing|Cleanup):' \ | tail -n 1 || true) + # Compose ONCE, then clamp to the terminal width: a live line longer + # than the screen wraps on every redraw and floods the screen with + # duplicate partial lines (VM-proven on the 80-col TTY). + local cols line + cols=$(tput cols 2>/dev/null) + [[ "$cols" =~ ^[0-9]+$ ]] || cols=80 + if [[ -n "$cur" ]]; then + line="$msg: $cur" + else + line="$msg" + fi + if (( ${#line} > cols - 2 )); then + line="${line:0:cols-4}.." + fi if (( depth >= 16 )); then local code="${bg[$(( f % ${#bg[@]} ))]}" - if [[ -n "$cur" ]]; then - printf '\r\033[%sm \033[0m %s: %s' "$code" "$msg" "$cur" >&2 - else - printf '\r\033[%sm \033[0m %s' "$code" "$msg" >&2 - fi + printf '\r\033[%sm \033[0m %s' "$code" "$line" >&2 else - if [[ -n "$cur" ]]; then - printf '\r %s %s: %s' "${ch[$(( f % ${#ch[@]} ))]}" "$msg" "$cur" >&2 - else - printf '\r %s %s' "${ch[$(( f % ${#ch[@]} ))]}" "$msg" >&2 - fi + printf '\r %s %s' "${ch[$(( f % ${#ch[@]} ))]}" "$line" >&2 fi f=$(( f + 1 )) sleep "$tick" From d4f04ac4862a866e7c87a11669fd307414f4bad5 Mon Sep 17 00:00:00 2001 From: Pathfinder Date: Mon, 2 Nov 2026 16:21:59 +0100 Subject: [PATCH 3/3] Always-packages: drop X11-only tools (numlockx, arandr) Both are inert on the niri/Wayland target (numlockx needs X11; arandr drives RandR). numlock at the greeter is SDDM's own setting. --- setup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.sh b/setup.sh index f086a63..235c5bb 100755 --- a/setup.sh +++ b/setup.sh @@ -376,8 +376,8 @@ ALWAYS_PACKAGES=( "ghostty ghostty-bash-completion zsh zsh-syntax-highlighting" # Utilities "fastfetch bash-completion hwinfo lshw duf chrony man-db tree xdg-user-dirs rsync bat hddtemp powertop inxi acpi plocate nm-connection-editor" - "python3-pylint qt6-qtsvg qt6-qtvirtualkeyboard qt6-qtmultimedia arandr catfish galculator NetworkManager network-manager-applet" - "numlockx pipewire pipewire-alsa pipewire-pulse wireplumber pavucontrol playerctl gparted" + "python3-pylint qt6-qtsvg qt6-qtvirtualkeyboard qt6-qtmultimedia catfish galculator NetworkManager network-manager-applet" + "pipewire pipewire-alsa pipewire-pulse wireplumber pavucontrol playerctl gparted" "system-config-printer system-config-printer-applet system-config-printer-libs ripgrep meld btop htop" # File Managers "thunar thunar-archive-plugin thunar-volman baobab gvfs-smb squashfs-tools"