Skip to content

Project Overview

dlucca1986 edited this page May 6, 2026 · 41 revisions

Version License: MIT Code Style: PEP8 Language: Python Drivers

This page outlines the modular framework for configuring Arch Linux as a dedicated gaming system.


📍 System Requirements

  • Distribution: Arch Linux or Arch-based distributions (e.g., EndeavourOS) using systemd.
  • Graphics Stack: 100% Open Source Drivers (Mesa).
    • AMD: RADV - Recommended
    • Intel: ANV
    • NVIDIA: NVK
    • Display Manager: None. The system manages session handovers via a systemdservice on TTY1.
    • Desktop Environment: KDE Plasma 6.x (Wayland).

Important

NVK is currently in active development; users may experience varying compatibility compared to proprietary drivers.


🚀 Features

1. Zero-DM & Service-Based Boot

Replaces traditional Display Managers (SDDM/PLM) to eliminate session conflicts and reduce overhead.

  • Direct DRM Access: The session manager runs as a high-priority service, granting Gamescope "DRM Master" status to minimize latency.
  • Visual Transitions: The integrated notify engine manages visual feedback during session swaps, suppressing raw TTY output.

2. Session Management

Transitions between Gaming Mode and Desktop are handled using Atomic Write Operations and Kernel-level Monitoring:

  • State Persistence: State files are updated via the write_atomic protocol (temporary buffer + os.replace). This ensures the system never reads a partial or corrupted state, even after an unexpected power-off.
  • Event-Driven Watchdog: Instead of high-overhead polling, the launcher uses a native proc.wait event. If a session (Gamescope or Plasma) crashes or fails to stabilize within the VALIDATION_TIMEOUT (default: 5s), the system automatically triggers a recovery boot to the Desktop environment to prevent soft-locks.
  • SSoT Integration: All session states are synchronized through the next_session variable defined in the global configuration, ensuring System-wide consistency across the entire DIY stack.

3. Dynamic Parameter Mapping

Acts as a bridge between user configuration and the compositor:

  • Argument Translation: The engine parses config.yaml and maps variables into command-line arguments for Gamescope (e.g., FSR, HDR, Sharpness).
  • Configuration-driven Tuning: Allows modification of rendering behavior and display output through text files without altering the Python source code.

4. Game Wrapper

Utility for automated game execution and environment setup:

  • Profile Lookup: Searches the directory tree for specific .yaml configurations based on SteamAppId or directory names.
  • Environment Injection: Applies per-game environment variables and wrappers (e.g., GameMode).

⚙️ Centralized Configuration

Separates system-wide logic from user-specific preferences:

  1. System Level (SSoT) (/etc/default/steamos_diy.conf): Defines core system identity, user context, global binary paths, and log levels.
  2. User Level (~/.config/steamos_diy/config.yaml): The primary interface for users to define Gamescope parameters and global environment variables.

📁 Directory Structure

  • Core Logic: /usr/local/lib/steamos_diy/ (Binaries and session scripts)
  • User Config: ~/.config/steamos_diy/config.yaml (The "User Manifesto")
  • Game Profiles: ~/.config/steamos_diy/games.d/ (Per-game overrides)
  • State Control: /var/lib/steamos_diy/next_session (Atomic session tracker)

📦 Essential Core Packages

  • 🚀 Gamescope: Valve's micro-compositor for Wayland.
  • 🎮 Steam: Running in -gamepadui mode.
  • 📊 MangoHud: Vulkan/OpenGL performance overlay.
  • GameMode: Feral Interactive’s system optimizer.
  • 🖥️ PyQt6: Powers the Control Center dashboard.

➕ Optional Packages

  • Goverlay: Graphical interface for MangoHud and vkBasalt.
  • LACT: Control your AMD, Nvidia, or Intel GPU.
  • Bottles: Run Windows software and games.
  • ProtonUp-Qt: Manage Proton-GE and Wine-GE versions.
  • Lutris: Central interface for all your game libraries.

⬅️ Back to Home.

Clone this wiki locally