Compare commits

..

No commits in common. "main" and "v3.9.6" have entirely different histories.
main ... v3.9.6

9 changed files with 904 additions and 3525 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +0,0 @@
[Desktop Entry]
Comment[en_US]=
Comment=
Exec=/bin/bash -c 'export logged_in_home=$(eval echo "~$(whoami)"); curl -Ls https://raw.githubusercontent.com/moraroy/NonSteamLaunchers-On-Steam-Deck/refs/heads/main/NSLPluginInstaller.sh | nohup /bin/bash'
GenericName[en_US]=
GenericName=
Icon=uav
MimeType=
Name[en_US]=NSL Decky Plugin
Name=NSL Decky Plugin
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=
X-KDE-SubstituteUID=false
X-KDE-Username=

View File

@ -1,172 +0,0 @@
#!/bin/bash
# ENVIRONMENT VARIABLES
# $USER
logged_in_user=$(logname 2>/dev/null || whoami)
# $HOME
logged_in_home=$(eval echo "~${logged_in_user}")
# Function to switch to Game Mode
switch_to_game_mode() {
echo "Switching to Game Mode..."
rm -rf ${logged_in_home}/.config/systemd/user/nslgamescanner.service
unlink ${logged_in_home}/.config/systemd/user/default.target.wants/nslgamescanner.service
systemctl --user daemon-reload
qdbus org.kde.Shutdown /Shutdown org.kde.Shutdown.logout
}
# Function to display a Zenity message
show_message() {
zenity --notification --text="$1" --timeout=1
}
# Function to show the update message in Zenity notification
show_update_message() {
zenity --notification --text="Updating from $1 to $2..." --timeout=5
}
# Set the remote repository URL
REPO_URL="https://github.com/moraroy/NonSteamLaunchersDecky/archive/refs/heads/main.zip"
# Set the local directory path
LOCAL_DIR="${logged_in_home}/homebrew/plugins/NonSteamLaunchers"
# Check if the Decky Loader and NSL Plugin exist
DECKY_LOADER_EXISTS=false
NSL_PLUGIN_EXISTS=false
if [ -d "${logged_in_home}/homebrew/plugins" ]; then
DECKY_LOADER_EXISTS=true
fi
if [ -d "$LOCAL_DIR" ] && [ -n "$(ls -A $LOCAL_DIR)" ]; then
NSL_PLUGIN_EXISTS=true
fi
# Set version check variables
GITHUB_URL="https://raw.githubusercontent.com/moraroy/NonSteamLaunchersDecky/refs/heads/main/package.json"
# Function to fetch GitHub package.json
fetch_github_version() {
response=$(curl -s "$GITHUB_URL")
github_version=$(echo "$response" | jq -r '.version')
if [ "$github_version" != "null" ]; then
echo "$github_version"
else
echo "Error: Could not fetch or parse GitHub version"
return 1
fi
}
# Function to fetch the local package.json version
fetch_local_version() {
if [ -f "$LOCAL_DIR/package.json" ]; then
local_version=$(jq -r '.version' "$LOCAL_DIR/package.json")
if [ "$local_version" != "null" ]; then
echo "$local_version"
else
echo "Error: Failed to parse local version"
return 1
fi
else
echo "Error: Local package.json not found!"
return 1
fi
}
# Function to compare versions
compare_versions() {
# Only compare versions if both local and GitHub versions are available
if [ ! -d "$LOCAL_DIR" ] || [ ! -f "$LOCAL_DIR/package.json" ]; then
echo "Local plugin not found or no package.json. Skipping version comparison."
return 1 # Skip version comparison and proceed to install/update
fi
# Fetch local and GitHub versions
local_version=$(fetch_local_version)
github_version=$(fetch_github_version)
if [ "$local_version" == "Error:" ] || [ "$github_version" == "Error:" ]; then
echo "Error: Could not fetch version information"
return 1
fi
echo "Local Version: $local_version, GitHub Version: $github_version"
if [ "$local_version" == "$github_version" ]; then
echo "Status: Up-to-date"
return 0
else
echo "Status: Update available"
return 1
fi
}
set +x
if $DECKY_LOADER_EXISTS; then
while true; do
USER_INPUT=$(zenity --forms --title="Authentication Required" --text="Decky Loader detected! $(if $NSL_PLUGIN_EXISTS; then echo 'NSL Plugin also detected and will be updated to the latest version 🚀.'; else echo 'But no NSL plugin :( This is not an ERROR. Would you like to inject it and go to Game Mode?'; fi) Please enter your sudo password to proceed:" --separator="|" --add-password="Password")
USER_PASSWORD=$(echo $USER_INPUT | cut -d'|' -f1)
if [ -z "$USER_PASSWORD" ]; then
zenity --error --text="No password entered. Exiting." --timeout=5
exit 1
fi
echo "$USER_PASSWORD" | sudo -S echo "Password accepted" 2>/dev/null
if [ $? -eq 0 ]; then
break
else
zenity --error --text="Incorrect password. Please try again."
fi
done
else
zenity --error --text="This is not an error but Decky Loader was not detected. Please download and install it from their website first and re-run this script to get the NSL Plugin."
rm -rf "$download_dir"
exit 1
fi
# Compare versions before proceeding with installation
compare_versions
if [ $? -eq 0 ]; then
echo "No update needed. The plugin is already up-to-date."
show_message "No update needed. The plugin is already up-to-date."
else
# Get local and GitHub versions
local_version=$(fetch_local_version)
github_version=$(fetch_github_version)
# Show update message in Zenity notification
show_update_message "$local_version" "$github_version"
if $NSL_PLUGIN_EXISTS; then
show_message "NSL Plugin detected. Deleting and updating..."
echo "Plugin directory exists. Removing..."
echo "$USER_PASSWORD" | sudo -S rm -rf "$LOCAL_DIR"
fi
sudo systemctl stop plugin_loader.service
show_message "Creating base directory and setting permissions..."
echo "$USER_PASSWORD" | sudo -S mkdir -p "$LOCAL_DIR"
echo "$USER_PASSWORD" | sudo -S chmod -R u+rw "$LOCAL_DIR"
echo "$USER_PASSWORD" | sudo -S chown -R $USER:$USER "$LOCAL_DIR"
echo "Downloading and extracting the repository..."
curl -L "$REPO_URL" -o /tmp/NonSteamLaunchersDecky.zip
echo "$USER_PASSWORD" | sudo -S unzip -o /tmp/NonSteamLaunchersDecky.zip -d /tmp/
echo "$USER_PASSWORD" | sudo -S cp -r /tmp/NonSteamLaunchersDecky-main/* "$LOCAL_DIR"
echo "$USER_PASSWORD" | sudo -S rm -rf /tmp/NonSteamLaunchersDecky*
fi
set -x
cd "$LOCAL_DIR"
show_message "Plugin installed. Switching to Game Mode..."
switch_to_game_mode
sudo systemctl restart plugin_loader.service

File diff suppressed because it is too large Load Diff

151
README.md
View File

@ -1,16 +1,3 @@
<p align="center"><em>“Who hath ascended up into heaven, or descended? who hath gathered the wind in his fists? who hath bound the waters in a garment? who hath established all the ends of the earth? what is his name, and what is his son's name, if thou canst tell?”</em><br><em>- Proverbs 30:4 (KJV)</em></p>
<p align="center"><em>“For God so loved the world, that he gave his only begotten Son, that whosoever believeth in him should not perish, but have everlasting life.”</em><br><em>“For God sent not his Son into the world to condemn the world; but that the world through him might be saved.”</em><br><em>- John 3:16-17 (KJV)</em></p>
<p align="center">
<img src="https://github-readme-stats.vercel.app/api?username=moraroy&theme=transparent&show_icons=true&hide_border=true&count_private=true" width="48%" />
<img src="https://github-readme-streak-stats.herokuapp.com/?user=moraroy&theme=transparent&hide_border=true" width="48%" />
<img src="https://github-readme-stats.vercel.app/api/top-langs/?username=moraroy&theme=transparent&show_icons=true&hide_border=true&layout=compact" width="48%" />
</p>
<p align="center">
<img src="https://github.com/cchrkk/NSLOSD-DL/raw/main/logo.svg" width=40% height=auto
@ -20,9 +7,9 @@
NonSteamLaunchers 🚀
</h1>
This script installs the latest UMU & GE-Proton and 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.
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 you're using the launchers). Obviously, certain anticheat games will not work on linux enviroments; this is on a game to game basis.
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 ✅
@ -40,106 +27,31 @@ Features ✅
- Command Line Ready, you can call it from online, heres an example of 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"' ```
- NSL can in fact be installed on many linux distros, feel free to try, here are some examples of some... Ubuntu LTS, ChimeraOS, Nobara and Arch Linux as well as any KDE Environments such as this opensuse - tumbleweed - wayland , if for any reason you find that NonSteamLaunchers installs perfectly or not, let me know!
- NSL can in fact be installed on many linux distros, feel free to try, here are some examples of some... ChimeraOS, Nobara and Arch Linux as well as any KDE Environments such as this opensuse - tumbleweed - wayland , if for any reason you find that NonSteamLaunchers installs perfectly or not, let me know!
- RemotePlayWhatever is also bundled with NSL to allow for local and co-op play between non steam games, this is created by m4Engi, here is the repo [here](https://github.com/m4dEngi/RemotePlayWhatever)
- Ludusavi is also pre-installed and setup for NSL for your games save backups. Not all games will work with this yet so bare this in mind when deleted or uninstalling games that are arent backed up yet, here is the repo [here](https://github.com/mtkennerly/ludusavi)
- [UMU Launcher](https://github.com/Open-Wine-Components/umu-launcher) is automatically used and is processed for each game and Launcher. Proton GE will be used where necessary.
### Notes
- With NSL youre able to send notes to each other and communicate to other NSL users via a hashtag in your note at the beginning, write #nsl and leave a space, and then type your actual note. The script will then look for that note and send it through the api and spit it back out for that non-steam game. Everyone who uses NSL will then receive it and it will be added to the "NSL Community Note". This is to allow people to have first hand information about their games right in front of them from others! Currently you can participate only if you send a note! Once you created a note, open up NonSteamLaunchers and press the ❤️. This is an expiremental feature so keep that in mind!
# As Seen on
just to name a few!...there are much more videos and articles out there just wanted to share some resources on how to install and how the program works.
## Videos
- [Linus Tech Tips](https://www.youtube.com/watch?v=tdR-bxvQKN8&t=885s) (starting at 14:45)
- [GameTechPlanet](https://www.youtube.com/watch?v=jE1qD3yzrks)
- [NerdZap](https://www.youtube.com/watch?v=t2EzbKkbS1Q)
- [Joserra y sus cosicas](https://www.youtube.com/watch?v=6ETxmbzRODQ)
- [Steam Deck In Hand](https://www.youtube.com/watch?v=_j3HV6yyGjI)
- [Steam Deck Gaming](https://www.youtube.com/watch?v=svOj4MTEAVc)
- [BakaKuma](https://www.youtube.com/watch?v=QluZ3UGYoKo)
- [SteamFlow](https://www.youtube.com/watch?v=aud5F6iwA0s)
- [Hooandee - 6 Hour Video](https://www.youtube.com/watch?v=OGmwtSS-zoE&t=7023s) (starting at 1:57:23)
## Articles
- [Gaming On Linux - Non-Steam Launchers Tool for Installing Popular Game Stores](https://www.gamingonlinux.com/2025/01/nonsteamlaunchers-tool-for-installing-popular-game-stores-working-on-better-desktop-linux-support/)
- [Steam Deck HQ - Non-Steam Launchers New Update Community Notes](https://steamdeckhq.com/news/nonsteamlaunchers-new-update-community-notes/)
- [Windows Central - How to Install Decky Loader on Steam Deck](https://www.windowscentral.com/gaming/how-to-install-decky-loader-on-steam-deck)
- [Dexerto - Non-Steam Launchers on Steam Deck](https://www.dexerto.com/tech/nonsteamlaunchers-steam-deck-2808063/)
- [MSN - Steam Deck: How to Install Epic Games Launcher with Decky Loader](https://www.msn.com/en-ca/news/technology/steam-deck-how-to-install-epic-games-launcher-with-decky-loader/ar-BB1pW1Ht)
- [PCMAG - How to Install Third-Party Game Launchers on Steam Deck](https://www.pcmag.com/how-to/steam-deck-install-third-party-game-launchers)
<p align="center">
▶️ **YouTube Tutorial** 🡺🡺🡺 <a href="https://youtu.be/sxMmI8I9G_g">Watch here</a> 🡸🡸🡸 ▶️
</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">
Currently Working On 👷‍♂️
</h1>
* Decky Loader Plugin is available [here](https://github.com/moraroy/NonSteamLaunchersDecky) and the pull request for it [here](https://github.com/SteamDeckHomebrew/decky-plugin-database/pull/677) and can be installed with this big button, only press this button if you have Decky Loader installed already
* Working on Flatpak version
* Decky Loader Plugin is available [here](https://github.com/moraroy/NonSteamLaunchersDecky) and the pull request for it [here](https://github.com/SteamDeckHomebrew/decky-plugin-database/pull/677)
<p align="center">
<a name="download button" href="https://github.com/moraroy/NonSteamLaunchers-On-Steam-Deck/releases/download/v3.9.6/NSLPlugin.desktop"><img src="https://user-images.githubusercontent.com/98482469/242361563-33f31d3d-9a69-4fca-a928-207a5d17a98f.png" alt="Download NSL Decky Plugin" width="350px" style="padding-top: 15px;"></a>
---
**Windows Installation Steps**:
1. **Sign in to GitHub** and go to this [link](https://github.com/SteamDeckHomebrew/decky-loader/actions/workflows/build-win.yml).
2. Choose the latest link or whichever version works for you.
3. Scroll down to **"Artifacts"** and download **"PluginLoader Win"**. This is a zip file that you need to extract on your Windows machine. Make sure you're signed in to see the download link.
4. Download **NSLPluginWindows.exe** from [here](https://github.com/moraroy/NonSteamLaunchersDecky/releases).
5. Run **NSLPluginWindows.exe** first. This will also create the necessary cef debugging file for Decky Loader.
6. Run either **No_console.exe** or **Plugin Loader.exe**, depending on your preference.
7. Go into **Game Mode** or **Big Picture Mode** to see the Decky Loader plugin and NonSteamLaunchers.
This setup will automatically add all your non-Steam games with artwork, correctly formatted for Windows. Only scanning will work; nothing else will function, so you can either auto-scan or manually scan your games.
<h1 align="center">
How to Install the Desktop Version 🔧
</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>
▶️ YouTube Tutorial 🡺🡺🡺 https://youtu.be/sxMmI8I9G_g 🡸🡸🡸 ▶️
</p>
<!--- Thanks https://github.com/Heus-Sueh -->
* Go to desktop mode, click the download button above and it should download the .desktop file in your Downloads folder.
* Go to your downloads folder, click the NonSteamLaunchers icon, it will download and run the latest NonSteamLaunchers.sh from this repository and run it.
* You will simply have to choose which launcher to install and let the script handle the rest. 💻 No files are left in your "Downloads" they are deleted after installation.
* After running the script, launch Steam on your Steam Deck. You'll find the new launchers in your library under the non-steam tab. Click a launcher to see your installed games from that store, and launch them directly from Steam! If you have downloaded a game inside of your launcher, restart your Deck or quit and reopen Steam and the NSLGameScanner.service should add it to your library, even in gamemode! 🥳
<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>
- Unreal Engine (via Epic Games) ✔️
- Amazon Games Launcher ✔️
- Battle.net ✔️
- EA App ✔️
@ -156,17 +68,6 @@ Supported Stores 🛍
- VK Play ✔️
- HoYoPlay ✔️
- Nexon Launcher ✔️
- Game Jolt Client ✔️
- Artix Game Launcher ✔️
- ARC Launcher ✔️
- Pokémon Trading Card Game Live ✔️
- Minecraft Launcher(Legacy) (Java Edition doesnt work but its for Dungeons) ✔️
- PURPLE Launcher ✔️
- Plarium Play ✔️
- VFUN Launcher ✔️
- Tempo Launcher ✔️
- Antstream Arcade ✔️
- RemotePlayWhatever ✔️
<h1 align="center">
Supported Streaming Sites for games and as well as any website. 🌐
@ -174,33 +75,15 @@ Supported Streaming Sites for games and as well as any website. 🌐
- Website Shortcut Creator ✔️
- Fortnite ✔️
- Venge ✔️
- PokéRogue ✔️
- Xbox Game Pass ✔️
- Better xCloud ✔️
- GeForce Now ✔️
- Amazon Luna ✔️
- Boosteroid Cloud Gaming ✔️
- Stim.io ✔️
- WebRcade ✔️
- WebRcade Editor ✔️
- Afterplay.io ✔️
- OnePlay ✔️
- AirGPU ✔️
- CloudDeck ✔️
- JioGamesCloud ✔️
- WatchParty ✔️
- Rocketcrab ✔️
- Netflix ✔️
- Amazon Prime Video ✔️
- Disney+ ✔️
- Hulu ✔️
- Tubi ✔️
- Youtube ✔️
- Twitch ✔️
- Plex ✔️
- Apple TV+ ✔️
- Crunchyroll ✔️
<h1 align="left">
Finds Games Automatically
@ -208,21 +91,29 @@ Finds Games Automatically
"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:
- Epic Games 🎮 💾 Full SD Card Support
- Ubisoft Connect 🎮 💾 Full SD Card Support
- EA App 🎮 💾 Full SD Card Support not sure
- Ubisoft Connect 🎮
- EA App 🎮
- Gog Galaxy 🎮 💾 Full SD Card Support
- Battle.net 🎮
- Amazon Games 🎮 💾 Full SD Card Support
- Itch.io 🎮
- Legacy Games 🎮
- VK Play 🎮 💾 Full SD Card Support
- HoYoPlay 🎮 💾 Full SD Card Support
- Game Jolt Client 🎮 💾 Full SD Card Support
- Minecraft Launcher 🎮
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 -->
* Go to desktop mode, click the download button above and it should download the .desktop file in your Downloads folder.
* Go to your downloads folder, click the NonSteamLaunchers icon, it will download and run the latest NonSteamLaunchers.sh from this repository and run it.
* You will simply have to choose which launcher to install and let the script handle the rest. 💻 No files are left in your "Downloads" they are deleted after installation.
* After running the script, launch Steam on your Steam Deck. You'll find the new launchers in your library under the non-steam tab. Click a launcher to see your installed games from that store, and launch them directly from Steam! If you have downloaded a game inside of your launcher, restart your Deck or quit and reopen Steam and the NSLGameScanner.service should add it to your library, even in gamemode! 🥳
<!--- TODO: handful of broken icons (cf. 🡺🡺🡺 ); probably should remove or replace them with more common font to handle unicode-->

View File

@ -128,10 +128,8 @@ flavor_mapping = {
"StarCraft": "S1",
"Warcraft Arclight Rumble": "GRY",
"Warcraft II: Battle.net Edition": "W2",
"Warcraft II: Remastered": "W2R",
"Warcraft III: Reforged": "W3",
"Warcraft: Orcs & Humans": "W1",
"Warcraft I: Remastered": "W1R",
"World of Warcraft Classic": "WoWC",
"World of Warcraft": "WoW",
}

681
poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -20,15 +20,15 @@ vdf = "^3.4"
coverage = "^7.3.2"
hypothesis = {extras = ["cli"], version = "^6.88.4"}
icecream = "^2.1.3"
ipython = "^9.0.2"
ipython = "^8.17.2"
poetry-plugin-export = "^1.6.0"
pytest = "^8.0.2"
pytest-asyncio = "^0.26.0"
pytest-cov = "^6.0.0"
pytest-asyncio = "^0.24.0"
pytest-cov = "^5.0.0"
pytest-datafiles = "^3.0.0"
pytest-xdist = "^3.4.0"
rich = "^14.0.0"
ruff = "^0.11.0"
rich = "^13.6.0"
ruff = "^0.6.1"
[tool.ruff]
# Enable pycodestyle (`E`) and Pyflakes (`F`) codes by default.

View File

@ -1,8 +1,8 @@
certifi==2025.1.31 ; python_version >= "3.11" and python_version < "3.13"
charset-normalizer==3.4.1 ; python_version >= "3.11" and python_version < "3.13"
idna==3.10 ; python_version >= "3.11" and python_version < "3.13"
certifi==2024.2.2 ; python_version >= "3.11" and python_version < "3.13"
charset-normalizer==3.3.2 ; python_version >= "3.11" and python_version < "3.13"
idna==3.6 ; python_version >= "3.11" and python_version < "3.13"
python-decouple==3.8 ; python_version >= "3.11" and python_version < "3.13"
python-steamgriddb==1.0.5 ; python_version >= "3.11" and python_version < "3.13"
requests==2.32.3 ; python_version >= "3.11" and python_version < "3.13"
urllib3==2.4.0 ; python_version >= "3.11" and python_version < "3.13"
requests==2.31.0 ; python_version >= "3.11" and python_version < "3.13"
urllib3==2.2.1 ; python_version >= "3.11" and python_version < "3.13"
vdf==3.4 ; python_version >= "3.11" and python_version < "3.13"