Home

Awesome

<p align="center"> <img src="https://github.com/cchrkk/NSLOSD-DL/raw/main/logo.svg" width=40% height=auto </p> <h1 align="center"> NonSteamLaunchers ๐Ÿš€ </h1>

This script installs the latest GE-Proton, installs NonSteamLaunchers under one unique Proton prefix folder in your compatdata folder path called "NonSteamLaunchers" and adds them to your Steam Library. It will also add the games automatically on every steam restart. So you can use them on Desktop or in Game Mode. Local Saves and Cloud saves are supported, as well as multiplayer/online support (because youre using the launchers). Obviously, certain anticheat games will not work on linux enviroments; this is on a game to game basis.

<h1 align="center"> Features โœ… </h1> <h1 align="center"> Currently Working On ๐Ÿ‘ทโ€โ™‚๏ธ </h1> <p align="center"> โ–ถ๏ธ YouTube Tutorial ๐Ÿกบ๐Ÿกบ๐Ÿกบ https://youtu.be/sxMmI8I9G_g ๐Ÿกธ๐Ÿกธ๐Ÿกธ โ–ถ๏ธ </p> <p align="center"> ๐Ÿ“– Step-by-step Article ๐Ÿกบ๐Ÿกบ๐Ÿกบ <a href="https://steamdeckhq.com/news/nonsteamlaunchers-adds-scan-support-launchers">here</a> ๐Ÿกธ๐Ÿกธ๐Ÿกธ ๐Ÿ“– </p> <h1 align="center"> Supported Stores ๐Ÿ› </h1> <h1 align="center"> Supported Streaming Sites for games and as well as any website. ๐ŸŒ </h1> <h1 align="left"> Finds Games Automatically </h1>

"NSLGameScanner.service" is also live when you use this script and continues after the script is closed and even works after your Steam Deck has restarted. This works in the background as a service file to automatically add your games to your library on every Steam restart. Currently adds:

To stop the NSLGameScanner.service, open up NSL and hit "Stop NSLGameScanner" it will then ask you if you want to restart it, click no, and that's it.

<h1 align="center"> How to Install ๐Ÿ”ง </h1> <p align="center"> <a name="download button" href="https://github.com/moraroy/NonSteamLaunchers-On-Steam-Deck/releases/download/v3.9.1/NonSteamLaunchers.desktop"><img src="https://user-images.githubusercontent.com/98482469/242361563-33f31d3d-9a69-4fca-a928-207a5d17a98f.png" alt="Download NonSteamLaunchers" width="350px" style="padding-top: 15px;"></a> </p> <!--- Thanks https://github.com/Heus-Sueh --> <!--- TODO: handful of broken icons (cf. ๐Ÿกบ๐Ÿกบ๐Ÿกบ ); probably should remove or replace them with more common font to handle unicode--> <h1 align="center"> How to Uninstall ๐Ÿ—‘ </h1> <h1 align="center"> Command Lines ๐Ÿซก </h1> The NSL script can be called from online via bash, heres an example of it installing a launcher

/bin/bash -c 'curl -Ls https://raw.githubusercontent.com/moraroy/NonSteamLaunchers-On-Steam-Deck/main/NonSteamLaunchers.sh | nohup /bin/bash -s -- "Epic Games"'

/bin/bash -c 'curl -Ls https://raw.githubusercontent.com/moraroy/NonSteamLaunchers-On-Steam-Deck/main/NonSteamLaunchers.sh | nohup /bin/bash -s -- "Move to SD Card" "EpicGamesLauncher"

/bin/bash -c 'curl -Ls https://raw.githubusercontent.com/moraroy/NonSteamLaunchers-On-Steam-Deck/main/NonSteamLaunchers.sh | nohup /bin/bash -s -- "Move to SD Card" "NonSteamLaunchers"

<h1 align="center"> Contributing ๐Ÿค </h1>

If you have any suggestions or improvements for this script, feel free to open an issue or submit a pull request.

You can donate to me on ko-fi, liberapay, or sponsor me on github or patreon

Development Environment

Dev Container

Install Docker. Once installed, a clean dev environment with a Docker container native to VSCode is spun up automatically.

VSCode Extensions (Dev Container)

Manual Docker Instance

If VSCode isn't present or only the python portion (cf. __init__.py) is being worked on, it's possible to just run a Docker container on its own. The container installs the correct version of python and any dependencies (e.g., ipython, rich) in requirements.txt.

# navigate to directory with Dockerfile
cd .devcontainer/

# build image
docker build -t nonsteamlaunchers .

# run container
docker run -it --rm --name=mynonsteamlaunchers --workdir=/app -v $(pwd):/app nonsteamlaunchers bash

# exit container
exit

Python virtual environment

Useful for the python module(s), but extra compared to the dev container portion that covers the core shell script.

# create virtual environment
python -m venv .venv

# activate virtual environment
source .venv/bin/activate

# install dependencies
python -m pip install -r requirements.txt 

Pre-commit hooks

Pre-commit hooks are installed via pre-commit and are run automatically on git commit.

Most importantly, ruff is used to lint all python code.

Conventional Commits

While not currently enforced, by using conventional commits, it's possible to automatically generate changelogs and version numbers via release-please.

To help with that, the commitizen tool can be installed.

Usage

# install cz
npm install -g commitizen cz-conventional-changelog

# make repo cz friendly
commitizen init cz-conventional-changelog --save-dev --save-exact
npm install

# add file to commit
git add .gitignore

# run cz
ฮป git cz
cz-cli@4.3.0, cz-conventional-changelog@3.3.0

? Select the type of change that you're committing: chore:    Other changes that don't modify src or test files
? What is the scope of this change (e.g. component or file name): (press enter to skip) .gitignore
? Write a short, imperative tense description of the change (max 81 chars):
 (17) update .gitignore
? Provide a longer description of the change: (press enter to skip)

? Are there any breaking changes? No
? Does this change affect any open issues? No
[main 0a9920d] chore(.gitignore): update .gitignore
 1 file changed, 131 insertions(+)

ฮป git push

Formatting

TL;DR: The Ruff formatter is an extremely fast Python formatter, written in Rust. Itโ€™s over 30x faster than Black and 100x faster than YAPF, formatting large-scale Python projects in milliseconds โ€” all while achieving >99.9% Black compatibility.

Additional tooling

TODO

asdf

shellcheck

.shellcheckrc excludes various bash language rules. Useful to control noise vs. legitimate warnings/errors when using the shellcheck extension.

<h1 align="center"> License ๐Ÿ“ </h1>

This project is licensed under the MIT License. See the LICENSE file for more information.