-
Notifications
You must be signed in to change notification settings - Fork 0
Project Overview
dlucca1986 edited this page May 6, 2026
·
41 revisions
This page outlines the modular framework for configuring Arch Linux as a dedicated gaming system.
-
Distribution: Arch Linux or Arch-based distributions (e.g., EndeavourOS) using
systemd. -
Graphics Stack: 100% Open Source Drivers (Mesa).
- AMD: RADV (Mesa) - Recommended
- Intel: ANV (Mesa)
-
NVIDIA: NVK (via
vulkan-nouveau/ Mesa)
Important
NVK is currently in active development; users may experience varying compatibility compared to proprietary drivers.
-
Display Manager: None. The system manages session handovers via a
systemdservice on TTY1. - Desktop Environment: KDE Plasma 6.x (Wayland).
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
notifyengine manages visual feedback during session swaps, suppressing raw TTY output.
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_atomicprotocol (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.waitevent. If a session (Gamescope or Plasma) crashes or fails to stabilize within theVALIDATION_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_sessionvariable defined in the global configuration, ensuring System-wide consistency across the entire DIY stack.
Acts as a bridge between user configuration and the compositor:
-
Argument Translation: The engine parses
config.yamland 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.
Utility for automated game execution and environment setup:
-
Profile Lookup: Searches the directory tree for specific
.yamlconfigurations based onSteamAppIdor directory names. - Environment Injection: Applies per-game environment variables and wrappers (e.g., GameMode).
Separates system-wide logic from user-specific preferences:
-
System Level (SSoT) (
/etc/default/steamos_diy.conf): Defines core system identity, user context, global binary paths, and log levels. -
User Level (
~/.config/steamos_diy/config.yaml): The primary interface for users to define Gamescope parameters and global environment variables.
-
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)
- 🚀 Gamescope: Valve's micro-compositor for Wayland.
- 🎮 Steam: Running in
-gamepaduimode. - 📊 MangoHud: Vulkan/OpenGL performance overlay.
- ⚡ GameMode: Feral Interactive’s system optimizer.
- 🖥️ PyQt6: Powers the Control Center dashboard.
- 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.
If you love this project, feel free to join and help me make it better!