The Linux game configuration toolkit.
Steam, Heroic and Lutris in one library. Gamescope, MangoHud and ScopeBuddy
in one editor. One native desktop app. No terminal gymnastics, no JSON spelunking.
Why · Install · Features · Architecture · Development · License · Website
Linux gaming finally works. The configuration around it still doesn't.
You end up with launch options in Steam, Heroic JSON files for the same game
in another launcher, MangoHud.conf hand-edited in nano, gamescope flags
pasted from a Reddit comment, scb.conf for ScopeBuddy, environment.d/*.conf
for system-wide tuning, and a ~/.steam/steam/steamapps/compatdata/<appid>
folder you're afraid to touch.
ProtonShift gathers all of that into one place: a native Linux desktop app — Qt Quick (QML) UI driven from Python via PySide6, no Electron, no bundled browser, no backend server to run or secure — that gives every one of those tools a sensible UI.
There's no packaged release yet. The Flatpak local build
is the current supported path, and a Flathub submission is in prep (see
flatpak/flathub/).
flatpak install -y flathub org.flatpak.Builder org.freedesktop.Sdk//24.08
flatpak run org.flatpak.Builder --user --install --force-clean \
build-dir flatpak/io.github.i4ctime.protonshift.yml
flatpak run io.github.i4ctime.protonshiftTagged GitHub releases also attach a prebuilt .flatpak bundle — see
Releases. Full build
variants and options are in flatpak/README.md.
Pulls games from Steam, Heroic (Epic + GOG), and Lutris into one searchable list, with per-source counts and one-click launch, install-folder, and Wine-prefix access.
Edit per-game launch options directly, or toggle common snippets without memorizing them: GameMode, force-NVIDIA-dGPU offload, MangoHud, Proton debug logging, and a ScopeBuddy wrapper. Each preset greys out with an install hint if the underlying tool isn't found.
Pick a Proton or Wine build from a dropdown — Steam's compatibilitytools.d
and built-in tools, or Heroic's tools/wine and tools/proton — instead of
hunting through config files.
Esync/Fsync, DXVK/VKD3D auto-install, MangoHud, GameMode, and NVIDIA Prime offload for Heroic games, saved straight to Heroic's per-game config.
Build a full gamescope invocation visually: output/game resolution with
quick presets, FPS limit, FSR upscaling with sharpness, integer scaling, HDR,
and window mode, plus a free-text field for extra arguments — with a live
command preview to copy or paste into launch options. Can also emit a
ScopeBuddy override (SCB_AUTO_* env vars + scb --) instead of a raw
command.
A dedicated editor for ScopeBuddy's
scb.conf — global config and per-app overrides under scb.conf.d/, plus
reusable environment-variable snippets. Comments and existing bash structure
in the file are preserved on write.
Visual editing for global (~/.config/MangoHud/MangoHud.conf) and per-game
(wine-<game>.conf) configs — metrics grouped by category, overlay position,
toggle hotkey, and log folder, with presets to get started fast.
Manage environment variables persisted to
~/.config/environment.d/70-protonshift.conf, with presets for common
GPU/Proton/Wayland tuning.
Per-game prefix size and detected DXVK/VKD3D-Proton versions with one-click delete; per-game shader cache size with clear; and save-file backup/restore via timestamped ZIPs.
Save a game's launch options, compatibility tool, environment variables, and power profile as a named profile, then reapply it later — to the same game or a different one.
A built-in, extensible database of known fixes (environment variables and/or
launch arguments) matched per App ID or applied universally, with one-click
apply. User-contributed fixes live under ~/.config/protonshift/fixes/.
Run Protontricks without leaving the app — open its GUI for a game, or quick-run common verbs. Supports native and Flatpak Protontricks installs.
GPU detection (NVIDIA via nvidia-smi, AMD/Intel via sysfs) with live temps,
power-profile switching (system76-power, power-profiles-daemon), and
per-monitor resolution/refresh-rate control over xrandr, wlr-randr, or
kscreen-doctor, depending on your session.
Detects connected controllers, generates an SDL_GAMECONTROLLERCONFIG
mapping string, and includes a live tester — every button and axis in real
time, plus a rumble test to confirm haptics before you launch a game.
Six built-in palettes, switchable in-app, including a "system" option that follows your OS light/dark preference. See ARCHITECTURE.md for how the design-system tokens work.
./run.shFirst run creates a .venv, installs the app in editable mode (PySide6 +
vdf), and launches. Re-run any time — it re-syncs dependencies and is
near-instant once the venv is current. Or manually:
python3 -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
python -m protonshiftruff check protonshift
pytestCI (.github/workflows/ci.yml) runs the same ruff check and pytest, plus
pyside6-qmllint over protonshift/qml, on Python 3.11 and 3.12.
See ARCHITECTURE.md for the project layout, the PySide6/QML threading pattern, and the release process, and CLAUDE.md for contributor/agent conventions.
AGPL-3.0 — copyleft for the network era. If you ship a modified version of ProtonShift (even as a hosted service), the source has to stay open.