JordanViknar / SimpleSteamTinker

A work-in-progress simple, fast, and modern Adwaita alternative to SteamTinkerLaunch.
Mozilla Public License 2.0
24 stars 3 forks source link
gamemode gamescope gtk gtk4 libadwaita linux lua proton steam steamtinkerlaunch zink

[!WARNING] This project may be deprecated in the future, as I have been recently working on a massive rewrite, avoiding LGI and focusing more on portability and stability this time around.


[!IMPORTANT] SimpleSteamTinker is still in HEAVY development and very unfinished. Expect an incomplete interface and lots of missing/unstable features.

If SteamTinkerLaunch is fast enough for you and fits your needs, you should not use this tool right now.

With that being said, I'd still very much appreciate people testing SimpleSteamTinker and reporting issues or contributing.

SimpleSteamTinker

A work-in-progress simple, fast, and modern Adwaita alternative to SteamTinkerLaunch.



Description

Situation

I like SteamTinkerLaunch. It is for me one of the biggest tools to have ever been created for Linux gaming.

However, it presents many flaws in my eyes : it is slow, impractical to use, and not user-friendly.

I want Linux Gaming to be available to everyone, including any non-technical users. In my opinion, SteamTinkerLaunch's interface is not friendly to newcomers.

Finally, my curiosity once led me to look inside its source code, only to be met with a single, extremely long (26k+ lines) Bash script. At that point, I decided there should be an alternative to it.

And thus came SimpleSteamTinker...

Goal

TL;DR : Simple, Fast, Modern & Friendly

SimpleSteamTinker aims to be only an alternative solution to SteamTinkerLaunch, not to replace it : the more complex features it provides that aren't used by the average user won't be implemented.

Using Lua, a fast and simple language, and Adwaita, a modern user-friendly interface system, the goal of this project is to have a clean and easy but powerful way of launching Steam games with custom options and tools.

It takes inspiration from Bottles and Adwaita applications in general.

Additionally, it is considered SimpleSteamTinker should work with Steam rather than hack/replace its features. Anything that can be easily done through Steam will not be reimplemented (Proton version management for example. If you want to use GE-Proton, ProtonPlus and ProtonUp-Qt are recommended).

And finally, as a side goal : prove that Lua can also be used for developing modern applications, just like for example Python (which I often see in Adwaita apps).

Installation

Arch Linux-based distributions

SimpleSteamTinker can be installed from Arch Linux, Manjaro, and variants through the provided PKGBUILD.

Always download the latest version of the PKGBUILD, then use makepkg in its directory.

It will eventually be made available on the AUR once the program is complete enough.

To enable a game in SimpleSteamTinker with this installation method, use this text as launch options in Steam :

sst %command%

Packaging for other distributions

Here are informations which might be useful to you :

SimpleSteamTinker is meant to be installed in /usr/share/SimpleSteamTinker (except sst which goes into /usr/bin). The system desktop file goes in /usr/share/applications and the icons go in /usr/share/icons like many applications.

Most of the file structure installation steps can be achieved with the Makefile. It is recommended to use it if possible in your packaging system.

It depends on :

And optionally (if they're missing, their related features will simply be disabled) :

GameMode, MangoHud, Mesa (for Zink support), switcheroo-control and Gamescope.

Development

Simply install the project's dependencies described earlier and clone it.

To test the launch of Steam games, insert in their launch options :

/PATH/TO/CLONED/REPO/sst %command%

For example, in my case /PATH/TO/CLONED/REPO/sst is /home/jordan/Programmation/SimpleSteamTinker/sst.

Additionally, if you want to perform UI-related changes, you'll need Blueprint. If, in the future, LGI becomes stable enough with GTK4 to use it directly to generate the UI, Blueprint might be dropped.

Note : A desktop file won't be provided with this method, and icons won't be installed.

Comparison

Development

Development SteamTinkerLaunch SimpleSteamTinker
Language Bash Lua
Code A single file with 26k lines Organised in modules and commented
UI Directly generated by the code (Mostly) done in separate GTK Blueprint files
Interface system yad + GTK3 LGI + GTK4 + libadwaita
License GPL-3.0 MPL-2.0

Interface

Features (interface) SteamTinkerLaunch SimpleSteamTinker
Launch speed (on primary laptop) ❌ (25 seconds) ✅ (1 second)
Game list
Game status
ProtonDB integration
Launch Button
Steam AppID
Notifications
Pre-game launch window (Not implemented to speed up game startup and not get in the user's way. Might change in the future.)
Categories
Custom default game config
Game location ~ (impractical)
Compatdata location
Help pages (ProtonDB, PCGamingWiki, etc.) ~ (impractical)

Tools, settings, etc.

(Note : Native Linux features/tools/settings are prioritized over alternatives designed for Windows.)

Features (tools, settings, etc.) SteamTinkerLaunch SimpleSteamTinker
Non-Steam game support (Bottles recommended)
Proton version management (ProtonPlus recommended)
dGPU management
GameMode
Custom launch system 🚧 (Planned)
Winetricks (Planned ?)
Protontricks (Planned ?)
Proton settings
DXVK settings 🚧 (Planned)
VKD3D settings 🚧 (Planned)
MangoHud
Gamescope
Shader support (ReShade/vkBasalt) 🚧 (Planned)
SDL Wayland video driver
Zink
PulseAudio latency 🚧 (Planned)
Vortex
Mod Organizer 2
HedgeModManager
geo-11 3D Driver
SpecialK
FlawlessWidescreen
Stereo3D
RADV Perftest Options (Cannot test properly due to lack of an AMD GPU)
Steam Linux Runtime toggle
steamwebhelper toggle
obs-gamecapture
Nyrna (Waiting for Wayland support...)
ReplaySorcery (Unmaintaned)
Boxtron (ProtonPlus recommended)
Roberta (ProtonPlus recommended)
Luxtorpeda (ProtonPlus recommended)
Network monitoring and control 🚧 (Planned)
Discord Rich Presence 🚧 (Planned)

Bug Reports / Contributions / Suggestions

You can report bugs or suggest features by making an issue, or you can contribute to this program directly by forking it and then sending a pull request.

Any help will be very much appreciated. Thank you.