Modular post-install automation script for Fedora (dnf5, SCX scheduler, entry point fedora-setup-modular.sh)
  • Shell 56.3%
  • Python 43.7%
Find a file
truediff 33d83aa0d8 docs: consolidate four drifted docs into one verified reference
docs/ARCHITECTURE.md, FAQ.md, GPU_SUPPORT.md and TROUBLESHOOTING.md —
2,375 lines across four heavily overlapping files — are replaced by a single
379-line docs/reference.md.

They had drifted past the point of being worth repairing:

  - ARCHITECTURE.md documented SCRIPT_VERSION="4.0" and described Lutris, an
    OBS built from source, and DBeaver/Bottles/Gear Lever Flatpaks. Some had
    been removed; some the script never installed at all.
  - TROUBLESHOOTING.md still carried ML4W/Hyprland/Sway setup instructions for
    desktop-environment installation, removed in v5.0.0 — two majors ago.
  - FAQ.md quoted the "~800MB / ~4.5GB" figures nobody ever measured.
  - GPU_SUPPORT.md promised supergfxctl, which is not in Fedora's repositories.

The replacement documents only what the code does, and names the command that
verifies each claim rather than asserting it. All twelve commands in its
verification table were executed against this Fedora 44 machine before the
doc was committed.

Newly written down, because it is hard-won and easy to get wrong: the gamemode
group requirement and that it needs a re-login; GameMode's two-file config
layout and that [gpu] is ignored outside /etc/gamemode.ini; why NVIDIA [gpu]
tuning cannot work on Wayland (Coolbits needs an Xorg config); and why
LIBVA_DRIVER_NAME is deliberately not set on Optimus laptops.

Time and download-size estimates are gone rather than re-guessed. dnf5 history
info gives the real number per machine.

Also: supergfxctl is now requested only when pkg_available confirms it
resolves, so its absence stops being reported as a package failure on every
Optimus laptop. switcheroo-control is installed regardless.

CLAUDE.md gains a Documentation section recording the rule, and loses the same
unmeasured size figures it had inherited.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CmHz4x7DDfhSx8L33y98Me
2026-08-29 16:31:52 +03:00
assets/fonts Enhancement: Implement custom font configuration (Aka-Acid-SciFly for UI, Fira Code for Terminal) 2025-12-27 16:59:47 -05:00
config fix!: resolve scope contradiction, fix eval injection in read_with_timeout 2026-08-29 16:26:04 +03:00
docs docs: consolidate four drifted docs into one verified reference 2026-08-29 16:31:52 +03:00
gui fix!: resolve scope contradiction, fix eval injection in read_with_timeout 2026-08-29 16:26:04 +03:00
lib docs: consolidate four drifted docs into one verified reference 2026-08-29 16:31:52 +03:00
modules fix!: resolve scope contradiction, fix eval injection in read_with_timeout 2026-08-29 16:26:04 +03:00
modules.d fix!: resolve scope contradiction, fix eval injection in read_with_timeout 2026-08-29 16:26:04 +03:00
.gitignore refactor!: strip personal tooling, add user extension points (6.0.0) 2026-08-29 16:19:43 +03:00
CHANGELOG.md docs: consolidate four drifted docs into one verified reference 2026-08-29 16:31:52 +03:00
CLAUDE.md docs: consolidate four drifted docs into one verified reference 2026-08-29 16:31:52 +03:00
fedora-setup-modular.sh fix!: resolve scope contradiction, fix eval injection in read_with_timeout 2026-08-29 16:26:04 +03:00
LICENSE docs: standardize repository structure (LICENSE, CODE_OF_CONDUCT, README updates) 2025-12-20 08:32:06 +02:00
README.md docs: consolidate four drifted docs into one verified reference 2026-08-29 16:31:52 +03:00

Fedora 43/44 Gaming & Development Setup Script

Fedora 43/44 Gaming Development License

A comprehensive, modular setup script for Fedora 43 and 44, focused on gaming utilities and development tools.

Features • Quick Start • Gaming Setup • Documentation


Project Goals

This project provides a comprehensive, modular post-installation setup script for Fedora 43 and Fedora 44 installations. The modular architecture is designed for easier contribution, maintenance, and customization.

Primary focus: Gaming utilities + development tools for users who have already installed their desktop environment (GNOME, KDE, etc.)

What this script does:

  • Install gaming utilities (Steam, Wine, Heroic, MangoHud, GameMode)
  • Set up development environment (Python 3.14, PostgreSQL, data science tools)
  • Optimize system for gaming and development workloads
  • Configure GPU drivers (NVIDIA, AMD, Intel)

What this script does NOT do:

  • Install desktop environments (assumes GNOME/KDE/your DE is already installed)
  • Provide a graphical stack on a bare minimal/server install — a working desktop session, including its audio stack and portals, is a prerequisite, not something this script bootstraps
  • Install window managers or compositors
  • Configure display managers

Features

Core Capabilities

  • Modular Architecture - Easy to maintain, test, and contribute to
  • Profile-Based Installation - Minimal or Complete profiles for different use cases
  • Intelligent GPU Detection - Automatically detects NVIDIA, AMD, Intel, and hybrid graphics
  • Smart Package Management - Handles installation failures gracefully with fallback mechanisms
  • Comprehensive Logging - Detailed logs for troubleshooting and debugging
  • Interactive & Automatic Modes - Choose your preferred installation method
  • System Backup - Automatically backs up configuration files before modifications
  • Configurable - Control what gets installed via config files or environment variables
  • Desktop-Agnostic - Works with GNOME, KDE, Xfce, Sway, and any desktop environment

What Gets Installed

System & Development Tools

  • Base CLI: Bash (configured), git, curl, wget, btop
  • Development Toolchain: GCC (15 on F43, 16 on F44), glibc, Python 3.14, Node.js, Git
  • Container Tools: Podman, Buildah, Skopeo

Multimedia & Graphics

  • Codecs: Full H.264/H.265 support via mesa-va-drivers-freeworld, ffmpeg (replaces ffmpeg-free), libavcodec-freeworld
  • Hardware Acceleration: VA-API and VDPAU via freeworld mesa builds; nvidia-vaapi-driver for NVIDIA Wayland HW decode
  • GPU Drivers: NVIDIA proprietary, AMD open-source, Intel optimizations
  • Hybrid Graphics: NVIDIA Optimus and AMD switchable graphics support

Data Science (Python 3.14)

  • Core Libraries: NumPy, Pandas, Matplotlib, Seaborn, SciPy, Scikit-learn
  • Visualization: Plotly, Statsmodels
  • Jupyter: JupyterLab, IPython
  • Database: SQLAlchemy, psycopg2-binary

Gaming

  • Platforms: Steam, Wine, Winetricks, Heroic Games Launcher
    • Heroic: Epic Games Store, GOG, and Amazon Games support
  • Performance: GameMode (incl. gamemode group membership), MangoHud, Gamescope
  • Utilities: ProtonPlus (Proton-GE manager, Flatpak)
  • Kernel Tweaks: vm.max_map_count, ZRAM-aware vm.swappiness/vm.page-cluster, kernel.nmi_watchdog via /etc/sysctl.d/99-gaming.conf; THP set to madvise mode via systemd
  • GPU Optimization: Automatic NVIDIA/AMD/Intel driver installation

Database

  • PostgreSQL 17: Latest PostgreSQL with automatic configuration

System Optimizations

  • ZRAM: Automatic swap compression
  • Font Rendering: COLRv1 Noto Color Emoji support
  • SSD Optimization: Automatic TRIM scheduling
  • Gaming Kernel Params: vm.max_map_count=2147483642, vm.swappiness=100 + vm.page-cluster=0 (ZRAM-aware), kernel.nmi_watchdog=0
  • THP: Transparent Hugepages set to madvise mode (reduces fragmentation without stalls)

Quick Start

Prerequisites

Required:

  • Fedora 43 (Workstation, KDE Spin, Minimal + your DE, etc.)
  • Desktop environment already installed (GNOME, KDE, Xfce, etc.)
  • Active internet connection
  • Sudo/root access

Recommended:

  • Fresh Fedora 43 installation (but works on existing systems too)
  • 20+ GB free disk space
  • Fast internet connection (will download 2-5GB depending on profile)

Installation

  1. Clone the repository:

    git clone https://git.truediff.dev/truediff/fedora-script-repo.git
    cd fedora-script-repo
    
  2. Choose your installation profile:

    Minimal Profile:

    ./fedora-setup-modular.sh minimal
    
    • Core system utilities
    • No gaming, no dev tools, no database
    • Perfect for lightweight setups

    Complete Profile:

    ./fedora-setup-modular.sh complete
    
    • All gaming utilities (Steam, Wine, Heroic, MangoHud, GameMode)
    • Full development stack (Python 3.14, PostgreSQL 17)
    • Data science environment (Jupyter, pandas, numpy, scikit-learn)
    • Freeworld codecs (H.264/H.265 VA-API, full FFmpeg)
    • Gaming kernel tweaks (sysctl, THP madvise)
    • SCX schedulers (scx_lavd) from Fedora official repos
    • Flatpak applications (ProtonPlus; add your own via config/packages.local)

    Interactive Mode (choose components):

    ./fedora-setup-modular.sh complete --interactive
    
  3. Customize with environment variables:

    # Gaming only
    INSTALL_GAMING=true INSTALL_POSTGRESQL=false INSTALL_DATA_SCIENCE=false \
      ./fedora-setup-modular.sh complete
    
    # Development only
    INSTALL_GAMING=false INSTALL_POSTGRESQL=true INSTALL_DATA_SCIENCE=true \
      ./fedora-setup-modular.sh complete
    
  4. Reboot after installation:

    sudo reboot
    

Desktop Environment Support

This script works with any desktop environment you have installed:

  • GNOME (Fedora Workstation default)
  • KDE Plasma (Fedora KDE Spin)
  • Xfce (Fedora Xfce Spin)
  • Sway, Hyprland, i3 (window managers)
  • MATE, Cinnamon, LXQt (community spins)

Don't have a desktop environment? Install one first:

# GNOME (Fedora default)
sudo dnf groupinstall "Fedora Workstation"

# KDE Plasma
sudo dnf install @kde-desktop

# Xfce (lightweight)
sudo dnf install @xfce-desktop

See docs/reference.md for more.

Additional Requirements

Supported Fedora 43 installations:

  • Fedora Workstation (GNOME)
  • Fedora KDE Spin
  • Fedora Minimal install
  • Fedora Server install

System requirements:

  • Minimum 4GB RAM (8GB+ recommended for gaming/data science)
  • Minimum 25GB free disk space (50GB+ recommended)
  • Active internet connection
  • Sudo privileges

Note: For system foundation only, use minimal install.

Connecting to WiFi (Minimal Install)

IMPORTANT: Minimal installations often lack WiFi firmware, causing WiFi hardware to be undetected.

Solution: Use Ethernet or USB Tethering

Since minimal installs don't include WiFi firmware, you'll need internet access to download it:

Option 1: Ethernet Cable

  • Simply connect an Ethernet cable
  • Then clone and run this script - it will automatically install WiFi firmware

Option 2: USB Tethering from Your Phone

  • Connect your phone via USB cable
  • Android: Settings → Network → Hotspot & Tethering → USB Tethering
  • iPhone: Settings → Personal Hotspot → Enable
  • Your computer should get internet automatically
  • Then clone and run this script - it will automatically install WiFi firmware

Once Connected to Internet:

# Clone this repository
git clone https://git.truediff.dev/truediff/fedora-script-repo.git
cd fedora-script-repo

# Run the script
# WiFi firmware will be installed automatically during system updates (Step 5)
./fedora-setup-modular.sh

# After the script completes, connect to WiFi:
nmcli radio wifi on
nmcli device wifi list
nmcli device wifi connect "NETWORK_NAME" password "YOUR_PASSWORD"

Alternative WiFi connection method:

nmtui  # Text-based UI for NetworkManager

Note: If you need WiFi working from a fresh install without any cables, consider using Fedora Workstation instead of Minimal - it includes WiFi firmware out of the box.


Installation Profiles

Choose an installation profile based on your needs:

Profile Description Includes
minimal System foundation only Core system, codecs, GPU drivers
complete Foundation + all capability modules Adds dev tools, databases, data science, gaming

Profile Details

Minimal

Core system setup without desktop environment:

  • Multimedia codecs and hardware acceleration
  • Base CLI tools (git, curl, wget, btop)
  • Shell configuration (Bash with aliases and completion)
  • System optimizations (ZRAM, TRIM)

Use case: Headless systems, servers, or custom desktop environment installations

Complete

Everything in Minimal, plus:

  • Development Tools: GCC, CMake, Node.js, Go, Python 3.14 development environment
  • Container Tools: Podman, Buildah, Skopeo
  • PostgreSQL 17: Database server
  • Data Science: NumPy, Pandas, Jupyter, Scikit-learn
  • Gaming: Steam, Wine, GameMode, MangoHud, Gamescope, Heroic, SCX schedulers (scx_lavd)
  • Flatpak Applications: ProtonPlus

Use case: Full workstation setup

Usage Examples

# Minimal system foundation (no DE)
./fedora-setup-modular.sh minimal

# Complete workstation
./fedora-setup-modular.sh complete

# Minimal with specific features
INSTALL_CORE_PACKAGES_DEV=true ./fedora-setup-modular.sh minimal

# Complete with interactive prompts
./fedora-setup-modular.sh complete --interactive

Migration from v3.0 Profiles

If you used development or production profiles in v3.0, they're now removed but auto-migrate:

  • development → minimal + dev tools enabled
  • production → complete with data science enabled

See CHANGELOG.md for full migration guide.


Adding Your Own Tools

This script is a foundation, not a curated toolbox. It installs hardware enablement (GPU drivers, codecs, VA-API), system correctness (zram, sysctl, TRIM, fonts, services) and a set of opt-in capability modules — and deliberately ships no "nice to have" package list. Editors, terminals, shell prompts, icon themes and monitoring tools are personal choices, so they're yours to add.

The test applied to every package: is it hard, risky or system-scoped — or is it one dnf install away? NVIDIA drivers with Secure Boot enrolment stay. cava doesn't.

config/packages.local

One entry per line; # comments and blank lines ignored. An entry containing two or more dots is treated as a Flatpak ID, anything else as an RPM.

cp config/packages.local.example config/packages.local
ripgrep
fd-find
kitty
com.obsproject.Studio        # flatpak

Installed after every built-in module. The file is gitignored, so it survives git pull and never conflicts with upstream.

modules.d/*.sh

When a package list isn't enough — you need a COPR, a service enabled, or a config file written. Each file is sourced after the built-ins; a file named foo.sh may define install_foo(), which is called automatically.

# modules.d/mytools.sh
install_mytools() {
  print_section "My extras"
  enable_copr_repo "atim/starship" "Starship prompt"
  install_packages "My Tools" starship ripgrep
  verify_installed starship || print_warning "starship missing"
}

Everything in lib/common.sh is available: install_packages, verify_installed, pkg_available, backup_file, enable_copr_repo, print_*. Also gitignored (except its README).

What was removed in 6.0.0

Personal tooling that used to be installed unconditionally — ripgrep, fzf, bat, kitty, fastfetch, papirus-icon-theme, the monitoring suite, gh/git-lfs, goverlay, nine OBS Flatpak plugins — plus the dotfiles and KDE theming modules, and the install_nerd_font / starship / lazygit binary installers. See CHANGELOG.md. Re-add anything you want with the two mechanisms above.


Architecture

Modular Structure

The project separates functionality into logical components:

fedora-script-repo/
├── fedora-setup-modular.sh      # Main orchestrator
├── lib/                           # Core library functions
│   ├── common.sh                  # Logging, error handling, utilities
│   ├── system-checks.sh           # System requirements validation
│   ├── repositories.sh            # DNF5, RPM Fusion, COPR management
│   └── gpu.sh                     # GPU detection and driver installation
├── modules/                       # Installation modules
│   ├── core-packages.sh           # Core utilities and development tools
│   ├── multimedia.sh              # Freeworld codecs, full FFmpeg, VA-API acceleration
│   ├── databases.sh               # PostgreSQL / MariaDB / Redis
│   ├── data-science.sh            # Python data science environment
│   ├── gaming.sh                  # Gaming utilities and optimizations
│   ├── flatpak.sh                 # Flatpak applications (ProtonPlus + your list)
│   ├── shell.sh                   # Bash configuration
│   ├── optimizations.sh           # System tweaks, gaming sysctl, THP service
├── config/                        # Configuration files
│   ├── defaults.conf              # Default settings
│   └── profiles/                  # Installation profiles
│       ├── minimal.conf           # Minimal system foundation
│       └── complete.conf          # All features enabled
├── docs/                          # Documentation
│   └── reference.md              # GPU support, verification, troubleshooting
└── README.md                      # This file

Command-Line Options

Modular Script

./fedora-setup-modular.sh [PROFILE] [OPTIONS]

Profiles:
  minimal      System foundation only
  complete     Foundation + all capability modules (default)

Options:
  --interactive   Prompt for component selection
  --test-gpu      Test GPU detection without installing
  --debug         Enable verbose debugging output
  --help, -h      Show help message

Configuration

Via Environment Variables

# Optional Components
export INSTALL_GAMING=true          # Gaming utilities
export INSTALL_POSTGRESQL=true      # PostgreSQL 17
export INSTALL_DATA_SCIENCE=true    # Python 3.14 data science
export INSTALL_FLATPAKS=true        # Flatpak applications
export SKIP_BROKEN_PACKAGES=true    # Skip packages that fail

./fedora-setup-modular.sh

Via Config File

Edit config/defaults.conf:

# config/defaults.conf

# Components
INSTALL_GAMING=true
INSTALL_POSTGRESQL=true
INSTALL_DATA_SCIENCE=true
INSTALL_FLATPAKS=true
SKIP_BROKEN_PACKAGES=true
INTERACTIVE_MODE=--auto

GPU Support

Automatic Detection & Configuration

The script automatically detects and configures:

NVIDIA GPUs

  • Proprietary drivers via RPM Fusion (akmod-nvidia)
  • Wayland support with DRM kernel mode setting
  • Optimus laptop support (hybrid graphics)
  • Power management for laptops
  • CUDA support and VA-API acceleration
  • Secure Boot compatible (MOK enrollment)

AMD GPUs

  • Mesa drivers with RADV Vulkan support
  • VA-API hardware acceleration
  • Performance optimizations for gaming
  • CoreCtrl for GPU management

Intel Graphics

  • Intel Media Driver
  • VA-API hardware acceleration
  • Vulkan support via ANV driver

Hybrid Graphics

  • Automatic detection of multi-GPU systems
  • GPU switching utilities (supergfxctl, switcheroo-control)
  • Power management optimization

Test GPU Detection

./fedora-setup-modular.sh --test-gpu

Documentation

  • Reference — running it, GPU support per vendor, GameMode, how to verify each step actually worked, and troubleshooting
  • Changelog — version history and migration notes
  • modules.d/README.md — writing a drop-in module

Roadmap

Completed

  • Modular architecture
  • Readonly variable fixes and improved error handling
  • Freeworld codec support (H.264/H.265 VA-API, full FFmpeg)
  • Gaming kernel parameters (sysctl, THP madvise service)
  • Dropped CachyOS kernel — SCX schedulers (scx_lavd) cover scheduling needs from Fedora official repos without kernel swap risk

Planned

  • Custom package list support
  • Configuration validation before execution
  • Better network interruption recovery
  • Rollback functionality (config restore on failure)
  • Fedora Silverblue variant support (immutable OS architecture)

License

This project is licensed under the GNU General Public License v3.0.

See LICENSE for full details.


Acknowledgments

  • Fedora Project - Amazing Linux distribution
  • RPM Fusion - Multimedia codec repositories
  • Open Source Community - All the amazing tools we use

Support


Made with love for the Fedora community

Optimized for performance and snappiness

Star this repo if it helped you!

⬆ Back to Top