- Shell 56.3%
- Python 43.7%
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
|
||
|---|---|---|
| assets/fonts | ||
| config | ||
| docs | ||
| gui | ||
| lib | ||
| modules | ||
| modules.d | ||
| .gitignore | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| fedora-setup-modular.sh | ||
| LICENSE | ||
| README.md | ||
Fedora 43/44 Gaming & Development Setup Script
A comprehensive, modular setup script for Fedora 43 and 44, focused on gaming utilities and development tools.
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(replacesffmpeg-free),libavcodec-freeworld - Hardware Acceleration: VA-API and VDPAU via freeworld mesa builds;
nvidia-vaapi-driverfor 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.
gamemodegroup membership), MangoHud, Gamescope - Utilities: ProtonPlus (Proton-GE manager, Flatpak)
- Kernel Tweaks:
vm.max_map_count, ZRAM-awarevm.swappiness/vm.page-cluster,kernel.nmi_watchdogvia/etc/sysctl.d/99-gaming.conf; THP set tomadvisemode 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
madvisemode (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
-
Clone the repository:
git clone https://git.truediff.dev/truediff/fedora-script-repo.git cd fedora-script-repo -
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 -
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 -
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 enabledproduction→completewith 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
- Report bugs: Forgejo Issues
- Discussions: Forgejo Issues
- Fedora Community: Fedora Discussion
Made with love for the Fedora community
Optimized for performance and snappiness
Star this repo if it helped you!