#!/bin/bash set -euo pipefail ########################## # Color helpers (printf-safe, no tput) ########################## RED="\033[0;31m" GREEN="\033[0;32m" YELLOW="\033[0;33m" CYAN="\033[0;36m" GRAY="\033[0;37m" BOLD="\033[1m" RESET="\033[0m" # Disable colors if output is not a terminal if [ ! -t 1 ]; then RED="" GREEN="" YELLOW="" CYAN="" GRAY="" BOLD="" RESET="" fi say_red() { printf "\n"; printf "%b%s%b\n" "$RED" "$*" "$RESET"; } say_green() { printf "\n"; printf "%b%s%b\n" "$GREEN" "$*" "$RESET"; } say_yellow() { printf "\n"; printf "%b%s%b\n" "$YELLOW" "$*" "$RESET"; } say_cyan() { printf "\n"; printf "%b%s%b\n" "$CYAN" "$*" "$RESET"; } say_gray() { printf "\n"; printf "%b%s%b\n" "$GRAY" "$*" "$RESET"; } say_bold() { printf "\n"; printf "%b%s%b\n" "$BOLD" "$*" "$RESET"; } ########################## # Use exported variables from main detection script ########################## OS="${DETECTED_OS}" DDE="${DETECTED_DE}" DE="${SELECTED_DE:-none}" TWM="${SELECTED_TWM:-none}" INSTALL_LEVEL="${INSTALL_LEVEL:-minimal}" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ########################## # Helper functions ########################## install_packages() { sudo dnf install -y "$@"; } is_package_installed() { rpm -q "$@" &>/dev/null; } # [Note: The Arch-specific kernel removal loop was removed as it uses 'pacman' flags] ########################## # 1. Base Dependencies & Repos ########################## say_cyan "Installing base dependencies..." # dnf-plugins-core is required for COPR install_packages dnf-plugins-core curl wget git flatpak # Enable PeaZip via COPR say_cyan "Installing PeaZip (Qt6) via official RPM..." PZ_VER="11.0.0" PZ_FILE="peazip-${PZ_VER}.LINUX.Qt6-1.x86_64.rpm" PZ_URL="https://github.com/peazip/PeaZip/releases/download/${PZ_VER}/${PZ_FILE}" curl -L "$PZ_URL" -o "/tmp/$PZ_FILE" sudo dnf install -y "/tmp/$PZ_FILE" rm "/tmp/$PZ_FILE" say_green "PeaZip ${PZ_VER} (Qt6) installed successfully." ########################## # 2. Main Package Installation ########################## say_yellow "Installing essential tools..." install_packages \ fastfetch lolcat bash-completion starship alacritty \ hwinfo lshw duf chrony polkit-kde-agent-1 \ man-db tree xdg-user-dirs rsync time bat chromium \ thunar thunar-archive-plugin thunar-volman \ baobab gvfs-smb hddtemp squashfs-tools \ zip gzip p7zip unace unrar file-roller peazip \ feh font-manager dconf-editor hardinfo lsb_release \ powertop inxi acpi plocate nm-connection-editor \ python3-pylint python3-pywal ################################# # 3. Fonts (RobotoMono Nerd Font) ################################# FONT_DIR="$HOME/.local/share/fonts" DOWNLOAD_NAME="RobotoMono" if ! find "$FONT_DIR" -name "*RobotoMonoNerdFont*" | grep -q .; then say_yellow "Installing ${DOWNLOAD_NAME} Nerd Font..." mkdir -p "$FONT_DIR" FONT_ZIP="/tmp/${DOWNLOAD_NAME}.zip" curl -L "https://github.com/ryanoasis/nerd-fonts/releases/latest/download/${DOWNLOAD_NAME}.zip" -o "$FONT_ZIP" unzip -oq "$FONT_ZIP" -d "$FONT_DIR" fc-cache -fv rm "$FONT_ZIP" say_green "${DOWNLOAD_NAME} installed." else say_yellow "RobotoMono Nerd Font already installed." fi ################################# # 4. Chromium Configuration ################################# CONF="$HOME/.config/chromium-flags.conf" mkdir -p "$(dirname "$CONF")" [[ ! -f "$CONF" ]] && touch "$CONF" # Add OAuth IDs for Google Sync # OAUTH_ID="--oauth2-client-id=77185425430.apps.googleusercontent.com" OAUTH_SECRET="--oauth2-client-secret=OTJgUOQcT7lO7GsGZq2G4IlT" grep -qxF -- "$OAUTH_ID" "$CONF" || echo "$OAUTH_ID" >> "$CONF" grep -qxF -- "$OAUTH_SECRET" "$CONF" || echo "$OAUTH_SECRET" >> "$CONF" say_green "Chromium flags configured." ################################# # 5. Enable Services ################################# # Enable basic services say_cyan "Enabling services..." sudo systemctl enable --now fstrim.timer sudo systemctl enable --now chronyd || true say_green "Fedora Minimal setup completed."