#!/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 color_yellow() { printf '%b' "$YELLOW"; } color_cyan() { printf '%b' "$CYAN"; } color_red() { printf '%b' "$RED"; } color_green() { printf '%b' "$GREEN"; } color_gray() { printf '%b' "$GRAY"; } color_reset() { printf '%b' "$RESET"; } #------------------------------------------ # Use exported variables from main detection script #------------------------------------------ OS="${DETECTED_OS:-unknown}" DDE="${DETECTED_DE:-unknown}" DE="${SELECTED_DE:-none}" TWM="${SELECTED_TWM:-none}" SYS_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; } #------------------------------------------ # 1. Base Dependencies & Repos #------------------------------------------ color_cyan; echo "Installing base dependencies..."; color_reset # dnf-plugins-core is required for COPR install_packages dnf-plugins-core wget #------------------------------------------ # 2. Main Package Installation #------------------------------------------ color_yellow; echo "Installing essential tools..."; color_reset # 1. Install universal base packages (minus the polkit agent) install_packages \ fastfetch bash-completion alacritty \ hwinfo lshw duf chrony \ man-db tree xdg-user-dirs rsync time bat \ thunar thunar-archive-plugin thunar-volman \ baobab gvfs-smb hddtemp squashfs-tools \ zip gzip p7zip unace unrar xarchiver \ feh gnome-font-viewer dconf-editor hardinfo2 lsb_release \ powertop inxi acpi plocate nm-connection-editor \ python3-pylint qt6-qtsvg qt6-qtvirtualkeyboard qt6-qtmultimedia # 2. Inject the correct Polkit agent & PeaZip based on environment color_cyan; echo "Tailoring toolkits for $DE / $TWM..."; color_reset if [[ "$DE" == "plasma" || "$TWM" == "hyprland" ]]; then install_packages polkit-kde-agent-1 peazip-common peazip-qt6 else # XFCE, GNOME, Niri, CHADWM (Uses lightweight generic toolkits) install_packages xfce-polkit peazip-common peazip-gtk3 fi if ! command -v starship &> /dev/null; then color_cyan; echo "Installing Starship shell prompt..."; color_reset curl -sS https://starship.rs/install.sh | sh -s -- -y fi #------------------------------------------ # 3. Fonts (RobotoMono Nerd Font) #------------------------------------------ FONT_DIR="$HOME/.local/share/fonts" DOWNLOAD_NAME="RobotoMono" if ! find "$FONT_DIR" -name "*RobotoMonoNerdFont*" | grep -q .; then color_yellow; echo "Installing ${DOWNLOAD_NAME} Nerd Font..."; color_reset 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" color_green; echo "${DOWNLOAD_NAME} installed."; color_reset else color_yellow; echo "RobotoMono Nerd Font already installed."; color_reset fi #------------------------------------------ # 4. Enable Services #------------------------------------------ color_cyan; echo "Enabling services..."; color_reset sudo systemctl enable --now fstrim.timer sudo systemctl enable --now chronyd || true color_green; echo "Fedora Minimal setup completed."; color_reset