-
Notifications
You must be signed in to change notification settings - Fork 0
Project Overview
SteamMachine-DIY is a lightweight, modular framework designed to transform any Arch Linux-based distribution into a high-performance gaming console, providing an experience identical to SteamOS 3 (Steam Deck).
Unlike other solutions, SteamMachine-DIY does not rely on a traditional Display Manager (like SDDM or GDM). Instead, it manages the session lifecycle directly through systemd and a logic core written entirely in Python.
- Distribution: Arch Linux / EndeavourOS (or any Arch-based rolling release).
-
Graphics Stack: 100% Open Source Drivers (Mesa).
- AMD: RADV (Mesa)
- Intel: ANV (Mesa)
-
NVIDIA: NVK (via
vulkan-nouveau/ Mesa)
- Display Manager: NONE. The system handles the GPU handover directly via a dedicated Systemd Service on TTY1.
- Desktop Environment: KDE Plasma 6.x (Wayland).
SteamMachine-DIY eliminates the overhead and conflicts of display managers like SDDM or GDM.
- Direct DRM Access: The session manager runs as a high-priority systemd service. Gamescope gains exclusive "DRM Master" access, reducing input lag and stuttering.
-
Visual Handover: The integrated
notifyengine provides clean visual banners during transitions, hiding raw TTY output for a seamless experience.
Transitions between Gaming Mode and Desktop are handled using Atomic Write Operations:
-
Corruption Proof: The state file is updated using a temporary buffer and an atomic replace (
os.replace), ensuring the system never reads a partial state even after an unexpected power-off. - Emergency Recovery: The launcher features active monitoring (Watchdog). If a session fails to stabilize within 5 seconds, it automatically triggers a rollback to the Desktop environment to prevent soft-locks.
The launcher removes the need for manual script editing by acting as a dynamic bridge:
-
YAML Translation: The engine parses the
config.yamlmanifesto and automatically maps flags and variables into optimized command-line arguments (FSR, HDR, etc.) on the fly. - Zero-Coding Tuning: Users can modify GPU behavior by editing a simple text file, without touching the Python source code.
The universal sdy wrapper optimizes game execution:
-
Recursive Profile Search: It climbs the directory tree to find specific
.yamlconfigurations. -
Smart Identity: Uses
SteamAppIdor directory names to apply per-game tweaks, environment variables, or custom wrappers (MangoHud, GameMode).
The architecture relies on a strict separation between system-wide logic and user-specific preferences:
-
System Master (SSoT) (
/etc/default/steamos_diy.conf): Defines core system identity, user context, global binary paths, and log levels. -
User Manifesto (
~/.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.
The project isolates all its logic within /usr/local/lib/steamos_diy/. It does not pollute standard system directories, making maintenance straightforward and removal clean. Every component communicates via standard signals and atomic state files, ensuring the system remains "power-loss resilient."
If you love this project, feel free to join and help us make it better!