Nexus-Mods / Vortex

Vortex Development
GNU General Public License v3.0
921 stars 136 forks source link

Official Lutris Installer (for Linux) #10686

Closed Mumrik93 closed 1 year ago

Mumrik93 commented 2 years ago

So this is an alternative to This Request. I've been a proponent for a Linux Version of Vortex for quite a while but I've also had to described to me why it's a much better idea to run Vortex through Wine instead, since most of the games Vortex mods also has to be run through Wine (and/or Proton). I've installed Vortex using a Lutris-install script before, but it was an older version and I had to turn off the auto-updates.

When I attempted to install Vortex recently however, it just didn't work, Wine pretty much froze when I tried to start Vortex after the install. I attempted to install the official (and most recent) version of Vortex straight from Nexus, same problem. Lastly I attempted to switch computer that ran a different distro, but still same problem with both versions of Vortex.

So I pretty much request that a Official Lutris Install Script to be made available, so that Linux users can utilize the Vortex Mod manager, without having to make a native Linux version of the manager.

Continous commented 2 years ago

I think the ideal situation is Linux support, but the far easier and still perfectly fine solution is to simply support WINE. Targeting WINE as opposed to simply targeting Windows theoretically would help with any future platform switches as WINE is far more likely to be ported than the Windows-specific APIs themselves. IE, if we target .Net 6 we need .Net 6. If we target WINE's implementation of .Net/Mono, we only need the user to have a relatively recent WINE version.

Of course, targeting WINE introduces a new plethora of issues. To make an off-hand list;

  1. WINE is a moving target. If Vortex had targeted WINE from the start, Vortex would be multiple major versions behind by now.
  2. WINE is technically not officially supported by anyone. This means that theoretically, WINE could become a dead end that Vortex is stuck in.
  3. WINE supports a lot of platforms, but not all of them, and is not some silver bullet to fix cross-platform functionality.
  4. Third party programs will still be outside of Vortex's control, and there's no way to easily distinguish between Vortex being incompatible with the tool, or WINE being incompatible with it, without user investigation.
  5. While there may be a very few number of changes necessary to support WINE, there could very well be massive changes necessary.
  6. WINE should work fine on Windows, but that does not mean that there will not be platform-specific issues anymore.

I think the best plan is still to just make Vortex's codebase entirely platform agnostic, if possible. It's not entirely impossible that in the next decade or so that Linux gains a significant market share.

nicman23 commented 2 years ago

you can always target proton instead but that makes you rely on Valve.. You can also not support all releases and target specific versions.

IsraPerez98 commented 2 years ago

You could consider bundling a specific version of Wine with Flatpak/Snap , that way it's not a "moving target" anymore, something like Winepak applications, this would also make it compatible with every linux distro, including the Steam Deck

Auravendill commented 2 years ago

Correct me, if I am wrong, but wouldn't it be possible to upload Vortex to Steam, target a specific Proton version and have Steam download that one by default?

Since even small Indie developers get their games on Steam, getting Vortex on there shouldn't be impossible, right?

This way the first two concerns would be solved:

It would also help to get Nexus Mods faster on all those shiny new Steamdecks, before someone else fills that gap.

NicBOMB commented 2 years ago

I have made a Lutris installer for Vortex latest (1.5.13) which automatically detects over 45 games with the relevant extensions installed (and likely more games that I don't personally own). It should be able to find games installed in ANY STEAM LIBRARY FOLDER.

Lutris Installer is listed at the bottom of this comment!

I uploaded this installer to the Lutris page for Vortex mod manager, however they are still awaiting moderation.

This may be the best form of Steam Deck support for Vortex available now, as I don't recommend the outdated installers hosted on the Lutris website or the other repo. I do not have a Steam Deck and Steam OS 3 is still not officially available as a standalone distro. I test this installer on a system following Valve's recommended Dev-Kit-less development environment recommendations. https://partner.steamgames.com/doc/steamdeck/testing All feedback about the installer, or configuring Vortex for WINE, or desktop integration improvements, really anything is welcome and appreciated, be it on Valve's first-party hardware or a personal system on a distro Lutris is already packaged for.

On the Old Proton Dependent Installers: I tested the below installer with the latest wine release from Lutris and the wine-ge-proton builds and was putting both versions here previously. However, only the latest default version will be supported into the future. Though wine-ge-proton builds work, they provide no fixes or improvements to Vortex explicitly and are not recommended since they are updated and removed consistently to fix issues with other launchers and games. Vortex appears to run on any Wine version including the default shipped with most distros, Lutris, and the latest or bleeding edge builds. It's really everything else my script does to automate installing, setting up the desktop environment, and fixing the desktop entry to enable launching and downloading mods which makes Vortex convenient enough for end-users. Tying the Lutris installer to a specific wine version will only cause more issue reports into the future, so I removed it sooner than later. tldr: [Use whatever wine version you want](https://lutris.net/faq#wine-versions). Proton-ified builds made no visible difference to Vortex in my testing. Your results may vary.
For Vortex Extension Authors: All of the proton games which I have not gotten to be automatically manageable in Vortex via Wine/Proton SHOULD be automatically detectable but are being expressly rejected by the game detection code of each respective Vortex Extension I indicated has bugs earlier. Extensions are plagued with '.exe' *ONLY* requirements, typically ignoring any valid Linux native executable files. See recommends below. My script already handles linking prefixes to the expected directories on a normal windows machine, so extension code that relies only on Windows program files in the regular steam installation location works as expected when managing SteamPlay/Proton games. Though those are detected more readily than native titles, it is typically only the statically defined executable naming which prevents game detection. I recommend extension authors review the [steamdb](https://steamdb.info/) and add appropriate code to switch between each valid executable it should be expected to handle. Also, refrain from using registry keys of game installation (or uninstallation) to detect the correct file path, as that is the hardest part to add to the Lutris installers right now since the keys *must be statically defined* (more on this below) and take forever to add since each command runs one at a time by starting the regeditor for the prefix, adding the key, then closing the regeditor before the next key is added. On Registry Keys: Now some of the keys being used to detect games are stored in the plaintext registry file in the game's proton prefix, so finding each key isn't always impossible, however this still adds another nondeterministic/random element since it's up to game developers to include relevant markers like the steamappid, installdir, or game name in the registry key for their game. Most newer games also don't add their keys to the proton prefix registry at all. Take ELDEN RING for example: `HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ELDEN RING_is1` `_is1` isn't already programmatically deterministic in any files my scripts read from and that key wasn't even in any of the `.reg` files of the proton prefix after I launched the game and reached the EULA either. Instead I translated that key from the ELDEN RING Extension's findGame code to get the game detected. Contrasted with DARKSOULS: `HKEY_LOCAL_MACHINE\Software\Wow6432Node\NAMCO BANDAI GAMES\DARK SOULS` This key uses a substring of the exact game title ("DARK SOULS™: Prepare To Die Edition") and was installed to the proton prefix when launching for the first time. This is still not easily detectable without raising concerns about conflicting with other titles, like all the other DARK SOULS games which obviously feature strikingly similar titles. The vortex provided api's are the best option to locate games correctly. This Lutris installer is already written and working with numerous extensions using either the required developer generated registry key, steam appid registry key, steam app manifest path, or some combination of both. I am so confident this could be solved better in Vortex I would remove all the registry key adding tasks if the extension bugs were fixed or Vortex itself were made minimally more responsible for automatically detecting Steam games if not all games. tldr: Include the vortex api's steam game path detection as a valid location AFTER any/all static Windows locations FAIL or don't use registry keys at all for Steam games! Recommended Game Detection Preference Order with Examples Linked: [Appid's/manifests from the steam store vortex api](https://github.com/Nexus-Mods/vortex-games/blob/master/game-darksouls2/index.js#L23) [installdir detection](https://github.com/Nexus-Mods/vortex-games/blob/master/game-darkestdungeon/index.js#L44) [developer install/uninstall keys](https://github.com/Nexus-Mods/vortex-games/blob/master/game-witcher2/index.js#L11-L14) [wildly guessing at the game's path](https://github.com/Nexus-Mods/vortex-games/blob/master/game-stardewvalley/index.js#L63-L76) (there was an attempt, :star: ) If all extensions stopped relying on registry keys or a valid substitute for Lutris' wine runner task for regedits were implemented, this script could be converted directly into a standalone bash installer, dropping Lutris as a dependency.

There are now 45+ games automatically detected! Vortex Extensions contributed by other community members must be downloaded and installed in-app or manually. Contributed Extensions are also indicated in the lists below.

Supported: Automatically Detected and Known Moddable Games - Fallout 3 - Fallout 3 Game of the Year Edition - Fallout 4 - Fallout New Vegas - Morrowind - Oblivion - Skyrim - Skyrim Special Edition - Skyrim VR
Untested: Automatically detected and managable but modding status/capability unknown - BATTLETECH (PROTON ONLY) - Bayonetta - Borderlands 2 (PROTON ONLY) - Bloodstained: Ritual of the Night - Bluefire - Control - DARK SOULS: Prepare to Die Edition - DARK SOULS REMASTERED - DARK SOULS II - DARK SOULS II Scholar of the First Sin - Darkest Dungeon - Divinity: Original Sin 2 Definitive Edition - Divinity: Original Sin 2 Original Edition - Don't Starve Together (NATIVE) (Patched! WIP for better executable detection) - DOOM (2016) - DOOM Eternal - Dragon Age: Origins - ELDEN RING - Fallout 4 VR - Halo: The Master Chief Collection - Into the Breach (PROTON ONLY) - Kerbal Space Program (PROTON ONLY) - Left 4 Dead 2 (NATIVE AND PROTON) - MechWarrior 5: Mercenaries - Monster Hunter Rise - Monster Hunter: World - No Man's Sky - Outward - Portal 2 (NATIVE) - Project Wingman - Sekiro: Shadows Die Twice - Slime Rancher (NATIVE AND PROTON) - Star Wars: KOTOR - Starbound (NATIVE AND PROTON) - Stardew Valley (NATIVE) (Default extension guesses at the location on linux but detection is not guaranteed. Another Stardew Valley 64bit extension appears to detect NATIVE?) - Stardew Valley (PROTON) - Subnautica - Subnautica: Below Zero - The Elder Scrolls: Arena - The Witcher - The Witcher 2 (PROTON ONLY) - The Witcher 3 - Valheim (PROTON ONLY)
Vortex Extension Issues/Bugs: Vortex's Officially Supported Extensions: - [BATTLETECH](https://github.com/Nexus-Mods/vortex-games/tree/master/game-battletech) (NATIVE) - Extension always requires a .exe! No NATIVE linux launcher/executable detection - [Kerbal Space Program](https://github.com/Nexus-Mods/vortex-games/tree/master/game-kerbalspaceprogram) (NATIVE) - looks like it should work, but doesn't - [missing hash files?](https://github.com/Nexus-Mods/vortex-games/blob/master/game-kerbalspaceprogram/index.js#L32) - [Shadowrun Returns](https://github.com/Nexus-Mods/vortex-games/tree/master/game-shadowrunreturns) (NATIVE) - Extension always requires a .exe! No NATIVE linux launcher/executable detection - [Star Wars: KOTOR II](https://github.com/Nexus-Mods/vortex-games/tree/master/game-sw-kotor) (NATIVE) - Extension always requires a .exe! No NATIVE linux launcher/executable detection - [Team Fortress 2](https://github.com/Nexus-Mods/vortex-games/tree/master/game-teamfortress2) (NATIVE) - Extension always requires a .exe! No NATIVE linux launcher/executable detection - [The Elder Scrolls Online](https://github.com/Nexus-Mods/vortex-games/tree/master/game-teso) - To Be Determined - [The Witcher 2](https://github.com/Nexus-Mods/vortex-games/tree/master/game-witcher2) (NATIVE) - [this despite also containing seemingly appropriate switches for the linux launcher filenames](https://github.com/Nexus-Mods/vortex-games/commit/50444c1e1e8645b4664d94476c06d912049f2962#diff-7aa88eee769cbdb39d3d0123036d30230be20ceefb841d95c1a8a2a11c8c160dR10-R12) - [War Thunder](https://github.com/Nexus-Mods/vortex-games/blob/master/game-warthunder/) - Extension always requires a .exe! No NATIVE linux launcher/executable detection - [XCOM 2](https://github.com/Nexus-Mods/vortex-games/tree/master/game-xcom2) (NATIVE) - The file and folder naming appears to not be identical to a Windows install minus .exe extensions Contributed/Third Party Extensions: - [Borderlands 2](https://www.nexusmods.com/site/mods/138?tab=bugs) (NATIVE) - Extension always requires a .exe! No NATIVE linux launcher/executable detection - [Cities: Skylines](https://www.nexusmods.com/site/mods/231?tab=bugs) (NATIVE) - Extension always requires a .exe! No NATIVE linux launcher/executable detection - [Counter-Strike: Source](https://www.nexusmods.com/site/mods/135?tab=bugs) (NATIVE) - Extension always requires a .exe! No NATIVE linux launcher/executable detection - [DARK SOULS III](https://www.nexusmods.com/site/mods/194?tab=bugs) - incorrect folder structure required - [Fallout 76](https://www.nexusmods.com/site/mods/110?tab=bugs) - has many bugs pending already - [Half-Life 2](https://www.nexusmods.com/site/mods/80?tab=bugs) (NATIVE) - Extension always requires a .exe! No NATIVE linux launcher/executable detection - [Half-Life 2 Deathmatch](https://www.nexusmods.com/site/mods/136?tab=bugs) (NATIVE) - Extension always requires a .exe! No NATIVE linux launcher/executable detection - [Half-Life 2: Update](https://www.nexusmods.com/site/mods/128?tab=bugs) (NATIVE) - Extension always requires a .exe! No NATIVE linux launcher/executable detection - [Into The Breach](https://www.nexusmods.com/site/mods/176?tab=bugs) (NATIVE) - Extension always requires a .exe! No NATIVE linux launcher/executable detection - [Middle Earth: Shadow of War](https://www.nexusmods.com/site/mods/375?tab=bugs) - 'bink2w64_.dll' doesn't exist in my install and removing that one required file from the array enabled detection - [PAYDAY 2](https://www.nexusmods.com/site/mods/239?tab=posts) (NATIVE) - Extension always requires a .exe! No NATIVE linux launcher/executable detection - No bug reporting page for what is literally a piece of code, smh - [Valheim](https://www.nexusmods.com/site/mods/210?tab=bugs) (NATIVE) - Extension always requires a .exe! No NATIVE linux launcher/executable detection

This Lutris installer IS flatpak/Steam Deck COMPATIBLE!

vortex-lutris-flatpak-installer.yml **STEAM DECK USERS** This installer is for you! FIRST: Run the following command to determine if all native requirements are installed! ```sh which bash dirname find grep ln mkdir printf realpath sed sh sqlite3 steam unlink xdg-mime && echo "All Required Binaries are Installed! Success!" || echo "Missing Some Required Binaries!" ``` NEXT: Use the add game plus icon in Lutris and select the YML installer option using the below file! ```yml name: 'Vortex Mod Manager' game_slug: 'vortex-mod-manager' year: 2016 version: 'wine' slug: 'vortex-mod-manager-wine' runner: 'wine' description: 'A Wine prefix installer for Vortex mod manager! Includes full Steam Library detection across any mount points. Steam Deck compatible!' notes: 'Games installed in any detected steam library will be linked. Games not supported by any Vortex Extension will still be linked. Doesn''t include support for Lutris'' WINE Steam, only native. Includes a manual script which adds any games to the Vortex prefix WITHOUT REINSTALLING. This installer requires the following: Vortex https://www.nexusmods.com/about/vortex/ Steam https://store.steampowered.com/about/ bash https://www.gnu.org/software/bash/ sed https://www.gnu.org/software/sed/ grep https://www.gnu.org/software/grep/ sqlite3 https://www.sqlite.org/ xdg-utils https://freedesktop.org/wiki/Software/xdg-utils/ coreutils https://www.gnu.org/software/coreutils/ findutils https://www.gnu.org/software/findutils/' credits: 'GitHub https://github.com/Nexus-Mods/Vortex/issues/10686' script: files: - setup: "https://github.com/Nexus-Mods/Vortex/releases/download/v1.5.13/vortex-setup-1.5.13.exe" game: exe: "drive_c/Program Files/Black Tree Gaming Ltd/Vortex/Vortex.exe" args: "-d" install_complete_text: 'Vortex was installed successfully! RECOMMENDED: Use the "Execute script" context menu option to remove unnecessary files added by wine during setup. OPTIONAL: Close Vortex, then Move/Copy your %APPDATA%/Vortex folder from a previous install into the appropriate location. This will launch Vortex with your previous preferences including your nexus account, game extensions, themes, and storage locations. Only attempt this if Vortex launches and closes correctly during installation, you know the correct location, and you want to get adventurous with your file manager. QUESTIONS & ANSWERS: Q: Can I use the Lutris or Steam shortcuts provided by Lutris? A: Yes! Steam will track when Lutris closes. Launching using these methods also appears to track Vortex processes for playtime/up-time more accurately too. Q: How do I add new Steam games to Vortex? A: This installer includes three bash scripts. They can be triggered from within Lutris via the "Execute script" context menu option. vortex-prefix-updater.sh launches the next two scripts and writes their output to the install.log file. vortex-steam-symlinker.sh will update your games list. Newly added steam games will be linked to Vortex. vortex-entry-writer.sh will update your link handler and set it as the default for nxm: links. All scripts can be run outside of Lutris safely by launching them from your file manager or on the command line. Q: Can I move Vortex via its game directory configuration in Lutris? A: Yes, though you should use the updater script immediately after the move to fix the download handler. Q: Where are my files when browsing within Vortex? A: The "Z:" drive points to "/", the root of your filesystem. Q: Can I make changes to the Vortex Lutris configuration? A: DO NOT CHANGE "Prefix Command" or "Manual Script" in the advanced options of the Lutris configuration for Vortex. Gamemode has been tested and does work with Vortex, though is likely unnecessary. All other options are untested and may have no affect on Vortex due to the Prefix Command completely overriding normal command execution. Q: Can I use Symlink Deployment or Move Deployment? A: Only Hardlink Deployment has been tested. Some untested game extensions may automatically select other deployment strategies. See this issue comment for more information: https://github.com/Nexus-Mods/Vortex/issues/9629#issuecomment-1013658187 Q: Vortex is running but Lutris thinks it has stopped? A: Lutris detects the restart of a monitored process as Vortex stopping when a Vortex download link is handled while Vortex is already running. Q: How does the url get to Vortex? A: This installer creates a hidden launcher to handle nxm links for Lutris. Q: Why is the url so slow to open in Vortex? A: The hidden launcher has to open the Lutris sqlite game database twice and write the url to a file before even launching Lutris. Unless Lutris is enhanced to allow passing arguments directly to the executable from the command line instead of only from its configuration file, this will remain the fastest method which integrates with Lutris and Steam. The link handler may speed up when opening subsequent links (as in after the first link). Q: Why not make the scripts strictly sh POSIX compliant? A: I wanted to, and nearly did. However, Bash is provided by the Lutris runtime and required by Steam. Arrays also greatly simplify the symlinker script. Q: Hello I represent the desktop entry escape character parser. A: sed -E -n "122635s/(.*)/\u\1/;122635p;122635x;122635s/^([^\n]+)\n([^\n]+)/\2\n\1/p;72676x;72676H;108137x;108137H;66763x;66763H;2608s/(.*)/\1!/;2608h;" /usr/share/dict/american-english ' installer: - task: name: 'winetricks' prefix: '$GAMEDIR' app: 'win10 dotnet48 corefonts' description: 'Installing .NET 4.8 and Corefonts via winetricks' - task: description: 'Adding Steam to the Wine Prefix Registry 1/2' key: 'SteamPath' name: 'set_regedit' path: 'HKEY_CURRENT_USER\Software\Valve\Steam' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam' - task: description: 'Adding Steam to the Wine Prefix Registry 2/2' key: 'SteamExe' name: 'set_regedit' path: 'HKEY_CURRENT_USER\Software\Valve\Steam' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\Steam.exe' - task: description: 'Adding DARK SOULS to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\NAMCO BANDAI GAMES\DARK SOULS' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls Prepare to Die Edition' - task: description: 'Adding DARK SOULS to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\211420' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls Prepare to Die Edition' - task: description: 'Adding DARK SOULS REMASTERED to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\570940' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\DARK SOULS REMASTERED' - task: description: 'Adding DARK SOULS II to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\236430' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls II' - task: description: 'Adding DARK SOULS II Scholar of the First Sin to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\335300' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls II Scholar of the First Sin' - task: description: 'Adding DARK SOULS III to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\374320' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\DARK SOULS III' - task: description: 'Adding ELDEN RING to the Wine Prefix Registry 1/2' key: 'InstallLocation' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ELDEN RING_is1' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\ELDEN RING' - task: description: 'Adding ELDEN RING to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\1245620' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\ELDEN RING' - task: description: 'Adding Fallout 3 to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 3' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3' - task: description: 'Adding Fallout 3 to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22300' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3' - task: description: 'Adding Fallout 3 Game of the Year Edition to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 3 goty' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 goty' - task: description: 'Adding Fallout 3 Game of the Year Edition to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22370' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 goty' - task: description: 'Adding Fallout 4 to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout4' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4' - task: description: 'Adding Fallout 4 to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\377160' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4' - task: description: 'Adding Fallout 4 VR to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 4 VR' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 VR' - task: description: 'Adding Fallout 4 VR to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\611660' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 VR' - task: description: 'Adding Fallout 76 to the Wine Prefix Registry 1/2' key: 'Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Fallout 76' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout76' - task: description: 'Adding Fallout 76 to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\1151340' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout76' - task: description: 'Adding Fallout New Vegas to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\FalloutNV' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout New Vegas' - task: description: 'Adding Fallout New Vegas to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22380' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout New Vegas' - task: description: 'Adding Kerbal Space Program to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\220200' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Kerbal Space Program' - task: description: 'Adding MechWarrior 5: Mercenaries to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\784080' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\MechWarrior 5 Mercenaries' - task: description: 'Adding Middle Earth: Shadow of War to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\356190' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\ShadowOfWar' - task: description: 'Adding Monster Hunter: World to the Wine Prefix Registry 1/2' key: 'InstallLocation' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 582010' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Monster Hunter World' - task: description: 'Adding Monster Hunter: World to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\582010' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Monster Hunter World' - task: description: 'Adding Morrowind to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Morrowind' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Morrowind' - task: description: 'Adding Morrowind to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22320' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Morrowind' - task: description: 'Adding Oblivion to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\oblivion' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Oblivion' - task: description: 'Adding Oblivion to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22330' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Oblivion' - task: description: 'Adding Sekiro: Shadows Die Twice to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\814380' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Sekiro' - task: description: 'Adding Skyrim to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim' - task: description: 'Adding Skyrim to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\72850' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim' - task: description: 'Adding Skyrim Special Edition to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim Special Edition' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim Special Edition' - task: description: 'Adding Skyrim Special Edition to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\489830' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim Special Edition' - task: description: 'Adding Skyrim VR to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim VR' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\SkyrimVR' - task: description: 'Adding Skyrim VR to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\611670' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\SkyrimVR' - task: description: 'Adding Stardew Valley to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\413150' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Stardew Valley' - task: description: 'Adding The Witcher to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\CD Project Red\Witcher' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher Enhanced Edition' - task: description: 'Adding The Witcher to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\20900' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher Enhanced Edition' - task: description: 'Adding The Witcher 2 to the Wine Prefix Registry 1/1' key: 'InstallFolder' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\CD Project Red\The Witcher 2' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\the witcher 2' - task: description: 'Adding The Witcher 3 to the Wine Prefix Registry 1/2' key: 'InstallFolder' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\CD Project Red\The Witcher 3' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher 3' - task: description: 'Adding The Witcher 3 to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\209230' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher 3' - task: description: 'Adding Valheim to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\892970' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Valheim' - write_file: content: '#!/usr/bin/bash if [ ! -d "$VORTEX_PREFIX" ]; then VORTEX_PREFIX="$PWD"; fi; if [ ! -d "$VORTEX_PREFIX" ]; then VORTEX_PREFIX="$(realpath "$(dirname "$0";)";)"; fi; if [ -d "$VORTEX_PREFIX" ]; then printf "%s\n" "INFO: Using Vortex prefix at \"$VORTEX_PREFIX\""; else printf "%s\n" "EROR: Invalid Vortex prefix at \"$VORTEX_PREFIX\""; exit 1; fi; DESKTOP=~/Desktop; DESKTOP_FNAME="vortex-downloads-handler.desktop"; DESKTOP_APPLS=~/.local/share/applications/; DESKTOP_FPATH="$DESKTOP_APPLS$DESKTOP_FNAME"; LUTRIS_DB_PATH=~/.local/share/lutris/pga.db; LUTRIS_CONFIGS=~/.config/lutris/games/; if [ -f "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd/Vortex.desktop" ]; then rm -f "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd/Vortex.desktop"; rmdir --ignore-fail-on-non-empty -p "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd"; fi; if [ -f "$DESKTOP_FPATH" ]; then rm -f "$DESKTOP_FPATH"; fi; printf "%s\n" "INFO: Updating nxm link handling for Vortex!"; printf "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n\n" \ "[Desktop Entry]" \ "Categories=Game;Network;" \ "Comment[en_US]=NXM Protocol Download Handler" \ "Comment=NXM Protocol Download Handler" \ "Exec=sh -c \"CONFIGPATH=\$(sqlite3 \\\\\"$LUTRIS_DB_PATH\\\\\" \\\\\"select configpath from games where installer_slug = \\\\\\\\\\\\\"vortex-mod-manager-wine\\\\\\\\\\\\\" order by id asc limit 1;\\\\\");sed -i \\\\\"s/^ args:.*$/ args: -d \$(printf \\\\\"%%s\\\\\\\\\\\\\\\\n\\\\\" \\\\\"%u\\\\\" | sed \\\\\"s/^''//;s/''$//;s/\\\\//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//g;s/\\\\\\\\\\\\\\\\&/\\\\\\\\\\\\\\\\\\\\&/g\\\\\")/\\\\\" \\\\\"$LUTRIS_CONFIGS\$CONFIGPATH.yml\\\\\";env LUTRIS_SKIP_INIT=1 lutris lutris:rungameid/\$(sqlite3 \\\\\"$LUTRIS_DB_PATH\\\\\" \\\\\"select id from games where installer_slug = \\\\\\\\\\\\\"vortex-mod-manager-wine\\\\\\\\\\\\\" order by id asc limit 1;\\\\\")\"" \ "GenericName[en_US]=Writes the provided nxm url as an argument to Vortex by editing the Lutris game config for Vortex twice before launching." \ "GenericName=Writes the provided nxm url as an argument to Vortex by editing the Lutris game config for Vortex twice before launching." \ "Icon=lutris_vortex-mod-manager" \ "MimeType=x-scheme-handler/nxm-protocol;x-scheme-handler/nxm;" \ "Name[en_US]=Vortex" \ "Name=Vortex" \ "NoDisplay=true" \ "Path=$VORTEX_PREFIX" \ "StartupNotify=true" \ "Terminal=false" \ "Type=Application" \ > "$DESKTOP_FPATH"; xdg-mime default "$DESKTOP_FPATH" x-scheme-handler/nxm x-scheme-handler/nxm-protocol; fix_mimetypes(){ if [ -f "$1" ]; then printf "%s\n" "INFO: Fixing mimetype association of nxm: links in \"$1\""; sed -E -i "s/x-scheme-handler\/nxm=[^[=$=]]\+/x-scheme-handler\/nxm=$DESKTOP_FNAME;/" "$1"; check="$(grep -a -o -e "x-scheme-handler/nxm=$DESKTOP_FNAME;" "$1")"; if [ -z "$check" ]; then printf "%s\n" "x-scheme-handler/nxm=$DESKTOP_FNAME;" >> "$1"; fi; sed -E -i "s/x-scheme-handler\/nxm-protocol=[^[=$=]]\+/x-scheme-handler\/nxm-protocol=$DESKTOP_FNAME;/" "$1"; check="$(grep -a -o -e "x-scheme-handler/nxm-protocol=$DESKTOP_FNAME;" "$1")" if [ -z "$check" ]; then printf "%s\n" "x-scheme-handler/nxm-protocol=$DESKTOP_FNAME;" >> "$1"; fi; else printf "%s\n%s\n%s\n\n" "$2" "x-scheme-handler/nxm=$DESKTOP_FNAME;" "x-scheme-handler/nxm-protocol=$DESKTOP_FNAME;" > "$1"; fi; }; fix_mimetypes "$DESKTOP_APPLS"mimeinfo.cache "[MIME Cache]"; fix_mimetypes "$DESKTOP_APPLS"defaults.list "[Default Applications]"; printf "%s\n" "DONE: Made a desktop entry for Vortex at \"$DESKTOP_FPATH\""; ' description: "Writing vortex-entry-writer.sh to the Vortex Prefix 1/3" file: '$GAMEDIR/vortex-entry-writer.sh' - chmodx: '$GAMEDIR/vortex-entry-writer.sh' - write_file: content: '#!/usr/bin/bash if [ ! -d "$VORTEX_PREFIX" ]; then VORTEX_PREFIX="$PWD"; fi; if [ ! -d "$VORTEX_PREFIX" ]; then VORTEX_PREFIX="$(realpath "$(dirname "$0";)";)"; fi; if [ -d "$VORTEX_PREFIX" ]; then printf "%s\n" \ "INFO: Using Vortex prefix at \"$VORTEX_PREFIX\""; else printf "%s\n" \ "EROR: Invalid Vortex prefix at \"$VORTEX_PREFIX\""; exit 1; fi; rmlink(){ if [ -h "$1" ]; then unlink "$1"; fi; } mklink(){ rmlink "$2"; ln -s -T "$1" "$2"; } manifest_attribute(){ grep -a -o -e "\"$2\"[[:space:]]*\".*\"$" "$1" \ | sed "s/\"$2\"[[:space:]]*\"//;s/\"$//"; }; manifest_userconfig_attribute(){ manifest_attribute \ <(grep \ -a -o -P -z \ "\"UserConfig\"\s*{(\s*[^}]*\s*)*}" \ "$1"\ ) "$2"; }; manifest_mountedconfig_attribute(){ manifest_attribute \ <(grep \ -a -o -P -z \ "\"MountedConfig\"\s*{(\s*[^}]*\s*)*}" \ "$1"\ ) "$2"; }; link_sub_targets(){ TARGET=""; DIR_LS=("$2"/*); for TARGET in "${DIR_LS[@]}"; do foldername="$(basename "$TARGET")"; checklink="$1/$foldername"; rmlink "$checklink"; if [ "$foldername" != "Vortex" ] && \ [ "$foldername" != "openvr" ] && \ [ "$foldername" != "Microsoft" ] && \ [ -d "$TARGET" ]; then ln -s "$TARGET" "$1/"; fi; done; }; mkdir -p \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming" \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local" \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/LocalLow" \ "$VORTEX_PREFIX/drive_c/users/$USER/Documents/My Games" \ "$VORTEX_PREFIX/drive_c/users/$USER/Local Settings" \ "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common" \ "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/config"; mklink \ "$VORTEX_PREFIX/drive_c/users/$USER/Documents" \ "$VORTEX_PREFIX/drive_c/users/$USER/My Documents"; mklink \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming" \ "$VORTEX_PREFIX/drive_c/users/$USER/Application Data"; mklink \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local" \ "$VORTEX_PREFIX/drive_c/users/$USER/Local Settings/Application Data"; sed "s/\"\/.*\"$/\"C:\\\\\\\\Program Files \(x86\)\\\\\\\\Steam\"/g" < \ ~/.steam/steam/steamapps/libraryfolders.vdf |& tee \ "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/libraryfolders.vdf" \ "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/config/libraryfolders.vdf" \ 1>/dev/null; STEAM_LIBRARY_PATHS=(); while read -r library; do rmdir --ignore-fail-on-non-empty "$library"/steamapps/common/* 2>/dev/null; if [ -d "$library" ] && [ -d "$library/steamapps/common" ]; then if [ -d "$library/steamapps/compatdata/" ]; then STEAM_COMPATDATA=("$(find "$library/steamapps/compatdata/" -type d -name "pfx")"); for compatdata in "${STEAM_COMPATDATA[@]}"; do rmdir --ignore-fail-on-non-empty "$compatdata" 2>/dev/null; done; fi; STEAM_LIBRARY_PATHS+=("$library"); fi; done < <(grep -a -o -e "/[^\"]*" ~/.steam/steam/steamapps/libraryfolders.vdf); for library in "${STEAM_LIBRARY_PATHS[@]}"; do printf "%s\n" "INFO: Found Steam Library at \"$library\"! Linking all games in the library:"; MANIFESTS=(); readarray -t MANIFESTS < <(find "$library/steamapps" -mindepth 1 -maxdepth 1 -type f -name "appmanifest_*\.acf"); for CURRENT_APPMANIFEST in "${MANIFESTS[@]}"; do CURRENT_APPID="$(manifest_attribute "$CURRENT_APPMANIFEST" "appid")"; CURRENT_GAME="$(manifest_attribute "$CURRENT_APPMANIFEST" "name")"; CURRENT_INSTALLDIR="$(manifest_attribute "$CURRENT_APPMANIFEST" "installdir")"; printf "%s\n" \ "INFO: \ CURRENT_APPID=\"$CURRENT_APPID\" \ CURRENT_GAME=\"$CURRENT_GAME\" \ CURRENT_INSTALLDIR=\"$CURRENT_INSTALLDIR\"\ "; checkdir="$(\ printf "%s" "$CURRENT_APPMANIFEST" | \ sed "s/\/steamapps\/.\+/\/steamapps\/common\//"\ )$CURRENT_INSTALLDIR"; if [ -d "$checkdir" ]; then CURRENT_INSTALL_PATH="$checkdir"; checkdir="$(\ printf "%s" "$CURRENT_APPMANIFEST" | \ sed "s/\/steamapps\/.\+/\/steamapps\/compatdata\/$CURRENT_APPID\/pfx/"\ )"; printf "%s\n" \ "GOOD: Found $CURRENT_GAME installation at \"$CURRENT_INSTALL_PATH\""; if [ "$(manifest_userconfig_attribute \ "$CURRENT_APPMANIFEST" \ "platform_override_dest"\ )" == "linux" ] && \ [ "$(manifest_userconfig_attribute \ "$CURRENT_APPMANIFEST" \ "platform_override_source"\ )" == "windows" ]; then printf "%s\n" \ "INFO: platform_override_dest: \ \"$(manifest_userconfig_attribute \ "$CURRENT_APPMANIFEST" \ "platform_override_dest"\ )\" platform_override_source: \ \"$(manifest_userconfig_attribute \ "$CURRENT_APPMANIFEST" \ "platform_override_source"\ )\"\ "; if [ -d "$checkdir" ]; then CURRENT_PREFIX_PATH="$checkdir"; printf "%s\n" \ "GOOD: Found $CURRENT_GAME \ Proton Prefix at \ \"$CURRENT_PREFIX_PATH\"\ "; else checkdir="${STEAM_LIBRARY_PATHS[0]}/steamapps/compatdata/$CURRENT_APPID/pfx/"; printf "%s\n%s\n" \ "INFO: Proton Prefix for \ $CURRENT_GAME not found at \"$checkdir\"." \ "INFO: Trying \"$checkdir\" instead!"; if [ -d "$checkdir" ]; then CURRENT_PREFIX_PATH="$checkdir"; printf "%s\n%s\n" \ "GOOD: Found $CURRENT_GAME Proton Prefix \ in default Steam Library at \ \"$CURRENT_PREFIX_PATH\"" \ "WARN: This feature should only be \ automatically used on a Steam Deck!"; else CURRENT_PREFIX_PATH=""; printf "%s\n%s\n%s\n" \ "WARN: $CURRENT_GAME is configured for Proton but no Prefix was found!" \ "WARN: Its Proton Prefix is missing or has not been run yet!" \ "WARN: Launch the game with Proton via Steam before modding!"; fi; fi; elif [ -d "$checkdir" ]; then CURRENT_PREFIX_PATH="$checkdir"; printf "%s\n%s\n" \ "WARN: $CURRENT_GAME isn''t configured for Proton but a Prefix was found!" \ "GOOD: Found $CURRENT_GAME Proton Prefix at \"$CURRENT_PREFIX_PATH\""; else CURRENT_PREFIX_PATH=""; printf "%s\n" "INFO: No Proton Prefix for $CURRENT_GAME found!"; fi; else CURRENT_INSTALL_PATH=""; CURRENT_PREFIX_PATH=""; checkdir="$CURRENT_INSTALL_PATH/steamapps/compatdata/$CURRENT_APPID/pfx"; if [ -d "$checkdir" ]; then printf "%s\n%s\n" \ "WARN: A Proton Prefix for $CURRENT_GAME exists at \"$checkdir\" but no installation was detected!" \ "WARN: If $CURRENT_GAME was uninstalled, Steam may have left behind files, like save data it syncs with the Steam Cloud."; else printf "%s\n" "INFO: No installation or Proton Prefix of $CURRENT_GAME found!"; fi; fi; if [ -d "$CURRENT_INSTALL_PATH" ]; then checkdir="$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common/$CURRENT_INSTALLDIR"; rmlink "$checkdir"; checkdir="$CURRENT_INSTALL_PATH"; if [ -d "$checkdir" ]; then ln -s "$checkdir" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common/"; fi; checkdir="$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/appmanifest_$CURRENT_APPID.acf"; rmlink "$checkdir"; checkdir="$CURRENT_APPMANIFEST"; if [ -f "$checkdir" ]; then ln -s "$checkdir" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/"; fi; fi; if [ -d "$CURRENT_PREFIX_PATH" ]; then link_sub_targets \ "$VORTEX_PREFIX/drive_c/users/$USER/My Documents/My Games" \ "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/My Documents/My Games"; link_sub_targets \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming" \ "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/Roaming"; link_sub_targets \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local" \ "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/Local"; link_sub_targets \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/LocalLow" \ "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/LocalLow"; fi; done; done; printf "%s\n" "DONE: Finished linking all detected Steam Library folders!"; ' description: "Writing vortex-steam-symlinker.sh to the Vortex Prefix 2/3" file: '$GAMEDIR/vortex-steam-symlinker.sh' - chmodx: '$GAMEDIR/vortex-steam-symlinker.sh' - write_file: content: '#!/usr/bin/sh if [ ! -d "$VORTEX_PREFIX" ]; then VORTEX_PREFIX="$PWD"; fi; if [ ! -d "$VORTEX_PREFIX" ]; then VORTEX_PREFIX="$(realpath "$(dirname "$0";)";)"; fi; if [ -d "$VORTEX_PREFIX" ]; then printf "%s\n" \ "INFO: Using Vortex prefix at \"$VORTEX_PREFIX\"" \ | tee install.log; else printf "%s\n" \ "EROR: Invalid Vortex prefix at \"$VORTEX_PREFIX\"" \ | tee install.log; exit 1; fi; "$VORTEX_PREFIX"/vortex-steam-symlinker.sh 2>&1 | tee -a install.log; "$VORTEX_PREFIX"/vortex-entry-writer.sh 2>&1 | tee -a install.log; ' description: "Writing vortex-prefix-updater.sh to the Vortex Prefix 3/3" file: '$GAMEDIR/vortex-prefix-updater.sh' - chmodx: '$GAMEDIR/vortex-prefix-updater.sh' - execute: command: './vortex-prefix-updater.sh' description: "Updating the Vortex Download Handler\nUpdating Symbolic Links Targeting Known Game Locations" working_dir: '$GAMEDIR' - task: description: "After vortex-setup finishes in logger below with\nInitial process has exited (return code: 0)\nClose Vortex to finish installing!" executable: 'setup' name: 'wineexec' prefix: '$GAMEDIR' system: manual_command: '$GAMEDIR/vortex-prefix-updater.sh' prefix_command: sh -c "\"$WINE\" \"$1\" $(CONFIGPATH=$(sqlite3 \"$HOME/.local/share/lutris/pga.db\" \"select configpath from games where installer_slug = \\\"vortex-mod-manager-wine\\\" order by id asc limit 1;\");sed -n \"/args:.*$/s/^ args://;T;p;Q\" \"$HOME/.config/lutris/games/$CONFIGPATH.yml\";NOYAML=\" -d\";sed -i \"s/^ args:.*$/ args:$NOYAML/\" \"$HOME/.config/lutris/games/$CONFIGPATH.yml\";) >/dev/null 2>&1;" variables: VERSION: '1.5.13' HOME: '$HOME' USER: '$USER' ```

This Lutris installer is compatible ONLY with Lutris NATIVE! NOT flatpak Lutris!

vortex-lutris-native-installer.yml

**LUTRIS NATIVE USERS** This installer is for you! A link to the testing version of this installer can be found here: `lutris:vortex-mod-manager?revision=90249` If the installer gets published on the Lutris website, this comment will be updated again! Below is the actual file being developed. ```yml name: 'Vortex Mod Manager' game_slug: 'vortex-mod-manager' year: 2016 version: 'wine' slug: 'vortex-mod-manager-wine' runner: 'wine' description: 'A Wine prefix installer for Vortex mod manager! Includes full Steam Library detection across any mount points. Steam Deck compatible!' notes: 'Games installed in any detected steam library will be linked. Games not supported by any Vortex Extension will still be linked. Doesn''t include support for Lutris'' WINE Steam, only native. Includes a manual script which adds any games to the Vortex prefix WITHOUT REINSTALLING. This installer requires the following: Vortex https://www.nexusmods.com/about/vortex/ Steam https://store.steampowered.com/about/ bash https://www.gnu.org/software/bash/ sed https://www.gnu.org/software/sed/ grep https://www.gnu.org/software/grep/ sqlite3 https://www.sqlite.org/ xdg-utils https://freedesktop.org/wiki/Software/xdg-utils/ coreutils https://www.gnu.org/software/coreutils/ findutils https://www.gnu.org/software/findutils/' credits: 'GitHub https://github.com/Nexus-Mods/Vortex/issues/10686' script: files: - setup: "https://github.com/Nexus-Mods/Vortex/releases/download/v1.5.13/vortex-setup-1.5.13.exe" game: exe: "drive_c/Program Files/Black Tree Gaming Ltd/Vortex/Vortex.exe" args: "-d" install_complete_text: 'Vortex was installed successfully! RECOMMENDED: Use the "Execute script" context menu option to remove unnecessary files added by wine during setup. OPTIONAL: Close Vortex, then Move/Copy your %APPDATA%/Vortex folder from a previous install into the appropriate location. This will launch Vortex with your previous preferences including your nexus account, game extensions, themes, and storage locations. Only attempt this if Vortex launches and closes correctly during installation, you know the correct location, and you want to get adventurous with your file manager. QUESTIONS & ANSWERS: Q: Can I use the Lutris or Steam shortcuts provided by Lutris? A: Yes! Steam will track when Lutris closes. Launching using these methods also appears to track Vortex processes for playtime/up-time more accurately too. Q: How do I add new Steam games to Vortex? A: This installer includes three bash scripts. They can be triggered from within Lutris via the "Execute script" context menu option. vortex-prefix-updater.sh launches the next two scripts and writes their output to the install.log file. vortex-steam-symlinker.sh will update your games list. Newly added steam games will be linked to Vortex. vortex-entry-writer.sh will update your link handler and set it as the default for nxm: links. All scripts can be run outside of Lutris safely by launching them from your file manager or on the command line. Q: Can I move Vortex via its game directory configuration in Lutris? A: Yes, though you should use the updater script immediately after the move to fix the download handler. Q: Where are my files when browsing within Vortex? A: The "Z:" drive points to "/", the root of your filesystem. Q: Can I make changes to the Vortex Lutris configuration? A: DO NOT CHANGE "Prefix Command" or "Manual Script" in the advanced options of the Lutris configuration for Vortex. Gamemode has been tested and does work with Vortex, though is likely unnecessary. All other options are untested and may have no affect on Vortex due to the Prefix Command completely overriding normal command execution. Q: Can I use Symlink Deployment or Move Deployment? A: Only Hardlink Deployment has been tested. Some untested game extensions may automatically select other deployment strategies. See this issue comment for more information: https://github.com/Nexus-Mods/Vortex/issues/9629#issuecomment-1013658187 Q: Vortex is running but Lutris thinks it has stopped? A: Lutris detects the restart of a monitored process as Vortex stopping when a Vortex download link is handled while Vortex is already running. Q: How does the url get to Vortex? A: This installer creates a hidden launcher to handle nxm links for Lutris. Q: Why is the url so slow to open in Vortex? A: The hidden launcher has to open the Lutris sqlite game database twice and write the url to a file before even launching Lutris. Unless Lutris is enhanced to allow passing arguments directly to the executable from the command line instead of only from its configuration file, this will remain the fastest method which integrates with Lutris and Steam. The link handler may speed up when opening subsequent links (as in after the first link). Q: Why not make the scripts strictly sh POSIX compliant? A: I wanted to, and nearly did. However, Bash is provided by the Lutris runtime and required by Steam. Arrays also greatly simplify the symlinker script. Q: Hello I represent the desktop entry escape character parser. A: sed -E -n "122635s/(.*)/\u\1/;122635p;122635x;122635s/^([^\n]+)\n([^\n]+)/\2\n\1/p;72676x;72676H;108137x;108137H;66763x;66763H;2608s/(.*)/\1!/;2608h;" /usr/share/dict/american-english ' installer: - task: name: 'winetricks' prefix: '$GAMEDIR' app: 'win10 dotnet48 corefonts' description: 'Installing .NET 4.8 and Corefonts via winetricks' - task: description: 'Adding Steam to the Wine Prefix Registry 1/2' key: 'SteamPath' name: 'set_regedit' path: 'HKEY_CURRENT_USER\Software\Valve\Steam' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam' - task: description: 'Adding Steam to the Wine Prefix Registry 2/2' key: 'SteamExe' name: 'set_regedit' path: 'HKEY_CURRENT_USER\Software\Valve\Steam' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\Steam.exe' - task: description: 'Adding DARK SOULS to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\NAMCO BANDAI GAMES\DARK SOULS' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls Prepare to Die Edition' - task: description: 'Adding DARK SOULS to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\211420' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls Prepare to Die Edition' - task: description: 'Adding DARK SOULS REMASTERED to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\570940' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\DARK SOULS REMASTERED' - task: description: 'Adding DARK SOULS II to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\236430' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls II' - task: description: 'Adding DARK SOULS II Scholar of the First Sin to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\335300' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls II Scholar of the First Sin' - task: description: 'Adding DARK SOULS III to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\374320' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\DARK SOULS III' - task: description: 'Adding ELDEN RING to the Wine Prefix Registry 1/2' key: 'InstallLocation' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ELDEN RING_is1' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\ELDEN RING' - task: description: 'Adding ELDEN RING to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\1245620' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\ELDEN RING' - task: description: 'Adding Fallout 3 to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 3' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3' - task: description: 'Adding Fallout 3 to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22300' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3' - task: description: 'Adding Fallout 3 Game of the Year Edition to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 3 goty' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 goty' - task: description: 'Adding Fallout 3 Game of the Year Edition to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22370' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 goty' - task: description: 'Adding Fallout 4 to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout4' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4' - task: description: 'Adding Fallout 4 to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\377160' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4' - task: description: 'Adding Fallout 4 VR to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 4 VR' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 VR' - task: description: 'Adding Fallout 4 VR to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\611660' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 VR' - task: description: 'Adding Fallout 76 to the Wine Prefix Registry 1/2' key: 'Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Fallout 76' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout76' - task: description: 'Adding Fallout 76 to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\1151340' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout76' - task: description: 'Adding Fallout New Vegas to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\FalloutNV' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout New Vegas' - task: description: 'Adding Fallout New Vegas to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22380' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout New Vegas' - task: description: 'Adding Kerbal Space Program to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\220200' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Kerbal Space Program' - task: description: 'Adding MechWarrior 5: Mercenaries to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\784080' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\MechWarrior 5 Mercenaries' - task: description: 'Adding Middle Earth: Shadow of War to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\356190' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\ShadowOfWar' - task: description: 'Adding Monster Hunter: World to the Wine Prefix Registry 1/2' key: 'InstallLocation' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 582010' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Monster Hunter World' - task: description: 'Adding Monster Hunter: World to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\582010' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Monster Hunter World' - task: description: 'Adding Morrowind to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Morrowind' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Morrowind' - task: description: 'Adding Morrowind to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22320' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Morrowind' - task: description: 'Adding Oblivion to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\oblivion' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Oblivion' - task: description: 'Adding Oblivion to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22330' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Oblivion' - task: description: 'Adding Sekiro: Shadows Die Twice to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\814380' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Sekiro' - task: description: 'Adding Skyrim to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim' - task: description: 'Adding Skyrim to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\72850' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim' - task: description: 'Adding Skyrim Special Edition to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim Special Edition' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim Special Edition' - task: description: 'Adding Skyrim Special Edition to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\489830' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim Special Edition' - task: description: 'Adding Skyrim VR to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim VR' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\SkyrimVR' - task: description: 'Adding Skyrim VR to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\611670' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\SkyrimVR' - task: description: 'Adding Stardew Valley to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\413150' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Stardew Valley' - task: description: 'Adding The Witcher to the Wine Prefix Registry 1/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\CD Project Red\Witcher' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher Enhanced Edition' - task: description: 'Adding The Witcher to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\20900' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher Enhanced Edition' - task: description: 'Adding The Witcher 2 to the Wine Prefix Registry 1/1' key: 'InstallFolder' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\CD Project Red\The Witcher 2' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\the witcher 2' - task: description: 'Adding The Witcher 3 to the Wine Prefix Registry 1/2' key: 'InstallFolder' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\CD Project Red\The Witcher 3' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher 3' - task: description: 'Adding The Witcher 3 to the Wine Prefix Registry 2/2' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\209230' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher 3' - task: description: 'Adding Valheim to the Wine Prefix Registry 1/1' key: 'Installed Path' name: 'set_regedit' path: 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\892970' prefix: '$GAMEDIR' type: 'REG_SZ' value: 'C:\\Program Files (x86)\\Steam\\steamapps\\common\\Valheim' - write_file: content: '#!/usr/bin/bash if [ ! -d "$VORTEX_PREFIX" ]; then VORTEX_PREFIX="$PWD"; fi; if [ ! -d "$VORTEX_PREFIX" ]; then VORTEX_PREFIX="$(realpath "$(dirname "$0";)";)"; fi; if [ -d "$VORTEX_PREFIX" ]; then printf "%s\n" "INFO: Using Vortex prefix at \"$VORTEX_PREFIX\""; else printf "%s\n" "EROR: Invalid Vortex prefix at \"$VORTEX_PREFIX\""; exit 1; fi; DESKTOP=~/Desktop; DESKTOP_FNAME="vortex-downloads-handler.desktop"; DESKTOP_APPLS=~/.local/share/applications/; DESKTOP_FPATH="$DESKTOP_APPLS$DESKTOP_FNAME"; LUTRIS_DB_PATH=~/.local/share/lutris/pga.db; LUTRIS_CONFIGS=~/.config/lutris/games/; if [ -f "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd/Vortex.desktop" ]; then rm -f "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd/Vortex.desktop"; rmdir --ignore-fail-on-non-empty -p "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd"; fi; if [ -f "$DESKTOP_FPATH" ]; then rm -f "$DESKTOP_FPATH"; fi; printf "%s\n" "INFO: Updating nxm link handling for Vortex!"; printf "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n\n" \ "[Desktop Entry]" \ "Categories=Game;Network;" \ "Comment[en_US]=NXM Protocol Download Handler" \ "Comment=NXM Protocol Download Handler" \ "Exec=sh -c \"CONFIGPATH=\$(sqlite3 \\\\\"$LUTRIS_DB_PATH\\\\\" \\\\\"select configpath from games where installer_slug = \\\\\\\\\\\\\"vortex-mod-manager-wine\\\\\\\\\\\\\" order by id asc limit 1;\\\\\");sed -i \\\\\"s/^ args:.*$/ args: -d \$(printf \\\\\"%%s\\\\\\\\\\\\\\\\n\\\\\" \\\\\"%u\\\\\" | sed \\\\\"s/^''//;s/''$//;s/\\\\//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//g;s/\\\\\\\\\\\\\\\\&/\\\\\\\\\\\\\\\\\\\\&/g\\\\\")/\\\\\" \\\\\"$LUTRIS_CONFIGS\$CONFIGPATH.yml\\\\\";env LUTRIS_SKIP_INIT=1 lutris lutris:rungameid/\$(sqlite3 \\\\\"$LUTRIS_DB_PATH\\\\\" \\\\\"select id from games where installer_slug = \\\\\\\\\\\\\"vortex-mod-manager-wine\\\\\\\\\\\\\" order by id asc limit 1;\\\\\")\"" \ "GenericName[en_US]=Writes the provided nxm url as an argument to Vortex by editing the Lutris game config for Vortex twice before launching." \ "GenericName=Writes the provided nxm url as an argument to Vortex by editing the Lutris game config for Vortex twice before launching." \ "Icon=lutris_vortex-mod-manager" \ "MimeType=x-scheme-handler/nxm-protocol;x-scheme-handler/nxm;" \ "Name[en_US]=Vortex" \ "Name=Vortex" \ "NoDisplay=true" \ "Path=$VORTEX_PREFIX" \ "StartupNotify=true" \ "Terminal=false" \ "Type=Application" \ > "$DESKTOP_FPATH"; xdg-mime default "$DESKTOP_FPATH" x-scheme-handler/nxm x-scheme-handler/nxm-protocol; fix_mimetypes(){ if [ -f "$1" ]; then printf "%s\n" "INFO: Fixing mimetype association of nxm: links in \"$1\""; sed -E -i "s/x-scheme-handler\/nxm=[^[=$=]]\+/x-scheme-handler\/nxm=$DESKTOP_FNAME;/" "$1"; check="$(grep -a -o -e "x-scheme-handler/nxm=$DESKTOP_FNAME;" "$1")"; if [ -z "$check" ]; then printf "%s\n" "x-scheme-handler/nxm=$DESKTOP_FNAME;" >> "$1"; fi; sed -E -i "s/x-scheme-handler\/nxm-protocol=[^[=$=]]\+/x-scheme-handler\/nxm-protocol=$DESKTOP_FNAME;/" "$1"; check="$(grep -a -o -e "x-scheme-handler/nxm-protocol=$DESKTOP_FNAME;" "$1")" if [ -z "$check" ]; then printf "%s\n" "x-scheme-handler/nxm-protocol=$DESKTOP_FNAME;" >> "$1"; fi; else printf "%s\n%s\n%s\n\n" "$2" "x-scheme-handler/nxm=$DESKTOP_FNAME;" "x-scheme-handler/nxm-protocol=$DESKTOP_FNAME;" > "$1"; fi; }; fix_mimetypes "$DESKTOP_APPLS"mimeinfo.cache "[MIME Cache]"; fix_mimetypes "$DESKTOP_APPLS"defaults.list "[Default Applications]"; printf "%s\n" "DONE: Made a desktop entry for Vortex at \"$DESKTOP_FPATH\""; ' description: "Writing vortex-entry-writer.sh to the Vortex Prefix 1/3" file: '$GAMEDIR/vortex-entry-writer.sh' - chmodx: '$GAMEDIR/vortex-entry-writer.sh' - write_file: content: '#!/usr/bin/bash if [ ! -d "$VORTEX_PREFIX" ]; then VORTEX_PREFIX="$PWD"; fi; if [ ! -d "$VORTEX_PREFIX" ]; then VORTEX_PREFIX="$(realpath "$(dirname "$0";)";)"; fi; if [ -d "$VORTEX_PREFIX" ]; then printf "%s\n" \ "INFO: Using Vortex prefix at \"$VORTEX_PREFIX\""; else printf "%s\n" \ "EROR: Invalid Vortex prefix at \"$VORTEX_PREFIX\""; exit 1; fi; rmlink(){ if [ -h "$1" ]; then unlink "$1"; fi; } mklink(){ rmlink "$2"; ln -s -T "$1" "$2"; } manifest_attribute(){ grep -a -o -e "\"$2\"[[:space:]]*\".*\"$" "$1" \ | sed "s/\"$2\"[[:space:]]*\"//;s/\"$//"; }; manifest_userconfig_attribute(){ manifest_attribute \ <(grep \ -a -o -P -z \ "\"UserConfig\"\s*{(\s*[^}]*\s*)*}" \ "$1"\ ) "$2"; }; manifest_mountedconfig_attribute(){ manifest_attribute \ <(grep \ -a -o -P -z \ "\"MountedConfig\"\s*{(\s*[^}]*\s*)*}" \ "$1"\ ) "$2"; }; link_sub_targets(){ TARGET=""; DIR_LS=("$2"/*); for TARGET in "${DIR_LS[@]}"; do foldername="$(basename "$TARGET")"; checklink="$1/$foldername"; rmlink "$checklink"; if [ "$foldername" != "Vortex" ] && \ [ "$foldername" != "openvr" ] && \ [ "$foldername" != "Microsoft" ] && \ [ -d "$TARGET" ]; then ln -s "$TARGET" "$1/"; fi; done; }; mkdir -p \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming" \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local" \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/LocalLow" \ "$VORTEX_PREFIX/drive_c/users/$USER/Documents/My Games" \ "$VORTEX_PREFIX/drive_c/users/$USER/Local Settings" \ "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common" \ "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/config"; mklink \ "$VORTEX_PREFIX/drive_c/users/$USER/Documents" \ "$VORTEX_PREFIX/drive_c/users/$USER/My Documents"; mklink \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming" \ "$VORTEX_PREFIX/drive_c/users/$USER/Application Data"; mklink \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local" \ "$VORTEX_PREFIX/drive_c/users/$USER/Local Settings/Application Data"; sed "s/\"\/.*\"$/\"C:\\\\\\\\Program Files \(x86\)\\\\\\\\Steam\"/g" < \ ~/.steam/steam/steamapps/libraryfolders.vdf |& tee \ "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/libraryfolders.vdf" \ "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/config/libraryfolders.vdf" \ 1>/dev/null; STEAM_LIBRARY_PATHS=(); while read -r library; do rmdir --ignore-fail-on-non-empty "$library"/steamapps/common/* 2>/dev/null; if [ -d "$library" ] && [ -d "$library/steamapps/common" ]; then if [ -d "$library/steamapps/compatdata/" ]; then STEAM_COMPATDATA=("$(find "$library/steamapps/compatdata/" -type d -name "pfx")"); for compatdata in "${STEAM_COMPATDATA[@]}"; do rmdir --ignore-fail-on-non-empty "$compatdata" 2>/dev/null; done; fi; STEAM_LIBRARY_PATHS+=("$library"); fi; done < <(grep -a -o -e "/[^\"]*" ~/.steam/steam/steamapps/libraryfolders.vdf); for library in "${STEAM_LIBRARY_PATHS[@]}"; do printf "%s\n" "INFO: Found Steam Library at \"$library\"! Linking all games in the library:"; MANIFESTS=(); readarray -t MANIFESTS < <(find "$library/steamapps" -mindepth 1 -maxdepth 1 -type f -name "appmanifest_*\.acf"); for CURRENT_APPMANIFEST in "${MANIFESTS[@]}"; do CURRENT_APPID="$(manifest_attribute "$CURRENT_APPMANIFEST" "appid")"; CURRENT_GAME="$(manifest_attribute "$CURRENT_APPMANIFEST" "name")"; CURRENT_INSTALLDIR="$(manifest_attribute "$CURRENT_APPMANIFEST" "installdir")"; printf "%s\n" \ "INFO: \ CURRENT_APPID=\"$CURRENT_APPID\" \ CURRENT_GAME=\"$CURRENT_GAME\" \ CURRENT_INSTALLDIR=\"$CURRENT_INSTALLDIR\"\ "; checkdir="$(\ printf "%s" "$CURRENT_APPMANIFEST" | \ sed "s/\/steamapps\/.\+/\/steamapps\/common\//"\ )$CURRENT_INSTALLDIR"; if [ -d "$checkdir" ]; then CURRENT_INSTALL_PATH="$checkdir"; checkdir="$(\ printf "%s" "$CURRENT_APPMANIFEST" | \ sed "s/\/steamapps\/.\+/\/steamapps\/compatdata\/$CURRENT_APPID\/pfx/"\ )"; printf "%s\n" \ "GOOD: Found $CURRENT_GAME installation at \"$CURRENT_INSTALL_PATH\""; if [ "$(manifest_userconfig_attribute \ "$CURRENT_APPMANIFEST" \ "platform_override_dest"\ )" == "linux" ] && \ [ "$(manifest_userconfig_attribute \ "$CURRENT_APPMANIFEST" \ "platform_override_source"\ )" == "windows" ]; then printf "%s\n" \ "INFO: platform_override_dest: \ \"$(manifest_userconfig_attribute \ "$CURRENT_APPMANIFEST" \ "platform_override_dest"\ )\" platform_override_source: \ \"$(manifest_userconfig_attribute \ "$CURRENT_APPMANIFEST" \ "platform_override_source"\ )\"\ "; if [ -d "$checkdir" ]; then CURRENT_PREFIX_PATH="$checkdir"; printf "%s\n" \ "GOOD: Found $CURRENT_GAME \ Proton Prefix at \ \"$CURRENT_PREFIX_PATH\"\ "; else checkdir="${STEAM_LIBRARY_PATHS[0]}/steamapps/compatdata/$CURRENT_APPID/pfx/"; printf "%s\n%s\n" \ "INFO: Proton Prefix for \ $CURRENT_GAME not found at \"$checkdir\"." \ "INFO: Trying \"$checkdir\" instead!"; if [ -d "$checkdir" ]; then CURRENT_PREFIX_PATH="$checkdir"; printf "%s\n%s\n" \ "GOOD: Found $CURRENT_GAME Proton Prefix \ in default Steam Library at \ \"$CURRENT_PREFIX_PATH\"" \ "WARN: This feature should only be \ automatically used on a Steam Deck!"; else CURRENT_PREFIX_PATH=""; printf "%s\n%s\n%s\n" \ "WARN: $CURRENT_GAME is configured for Proton but no Prefix was found!" \ "WARN: Its Proton Prefix is missing or has not been run yet!" \ "WARN: Launch the game with Proton via Steam before modding!"; fi; fi; elif [ -d "$checkdir" ]; then CURRENT_PREFIX_PATH="$checkdir"; printf "%s\n%s\n" \ "WARN: $CURRENT_GAME isn''t configured for Proton but a Prefix was found!" \ "GOOD: Found $CURRENT_GAME Proton Prefix at \"$CURRENT_PREFIX_PATH\""; else CURRENT_PREFIX_PATH=""; printf "%s\n" "INFO: No Proton Prefix for $CURRENT_GAME found!"; fi; else CURRENT_INSTALL_PATH=""; CURRENT_PREFIX_PATH=""; checkdir="$CURRENT_INSTALL_PATH/steamapps/compatdata/$CURRENT_APPID/pfx"; if [ -d "$checkdir" ]; then printf "%s\n%s\n" \ "WARN: A Proton Prefix for $CURRENT_GAME exists at \"$checkdir\" but no installation was detected!" \ "WARN: If $CURRENT_GAME was uninstalled, Steam may have left behind files, like save data it syncs with the Steam Cloud."; else printf "%s\n" "INFO: No installation or Proton Prefix of $CURRENT_GAME found!"; fi; fi; if [ -d "$CURRENT_INSTALL_PATH" ]; then checkdir="$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common/$CURRENT_INSTALLDIR"; rmlink "$checkdir"; checkdir="$CURRENT_INSTALL_PATH"; if [ -d "$checkdir" ]; then ln -s "$checkdir" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common/"; fi; checkdir="$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/appmanifest_$CURRENT_APPID.acf"; rmlink "$checkdir"; checkdir="$CURRENT_APPMANIFEST"; if [ -f "$checkdir" ]; then ln -s "$checkdir" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/"; fi; fi; if [ -d "$CURRENT_PREFIX_PATH" ]; then link_sub_targets \ "$VORTEX_PREFIX/drive_c/users/$USER/My Documents/My Games" \ "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/My Documents/My Games"; link_sub_targets \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming" \ "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/Roaming"; link_sub_targets \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local" \ "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/Local"; link_sub_targets \ "$VORTEX_PREFIX/drive_c/users/$USER/AppData/LocalLow" \ "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/LocalLow"; fi; done; done; printf "%s\n" "DONE: Finished linking all detected Steam Library folders!"; ' description: "Writing vortex-steam-symlinker.sh to the Vortex Prefix 2/3" file: '$GAMEDIR/vortex-steam-symlinker.sh' - chmodx: '$GAMEDIR/vortex-steam-symlinker.sh' - write_file: content: '#!/usr/bin/sh if [ ! -d "$VORTEX_PREFIX" ]; then VORTEX_PREFIX="$PWD"; fi; if [ ! -d "$VORTEX_PREFIX" ]; then VORTEX_PREFIX="$(realpath "$(dirname "$0";)";)"; fi; if [ -d "$VORTEX_PREFIX" ]; then printf "%s\n" \ "INFO: Using Vortex prefix at \"$VORTEX_PREFIX\"" \ | tee install.log; else printf "%s\n" \ "EROR: Invalid Vortex prefix at \"$VORTEX_PREFIX\"" \ | tee install.log; exit 1; fi; "$VORTEX_PREFIX"/vortex-steam-symlinker.sh 2>&1 | tee -a install.log; "$VORTEX_PREFIX"/vortex-entry-writer.sh 2>&1 | tee -a install.log; ' description: "Writing vortex-prefix-updater.sh to the Vortex Prefix 3/3" file: '$GAMEDIR/vortex-prefix-updater.sh' - chmodx: '$GAMEDIR/vortex-prefix-updater.sh' - execute: command: './vortex-prefix-updater.sh' description: "Updating the Vortex Download Handler\nUpdating Symbolic Links Targeting Known Game Locations" working_dir: '$GAMEDIR' - task: description: "After vortex-setup finishes in logger below with\nInitial process has exited (return code: 0)\nClose Vortex to finish installing!" executable: 'setup' name: 'wineexec' prefix: '$GAMEDIR' require-binaries: bash, dirname, find, grep, ln, mkdir, printf, realpath, sed, sh, sqlite3, steam, unlink, xdg-mime system: manual_command: '$GAMEDIR/vortex-prefix-updater.sh' prefix_command: sh -c "\"$WINE\" \"$1\" $(CONFIGPATH=$(sqlite3 \"$HOME/.local/share/lutris/pga.db\" \"select configpath from games where installer_slug = \\\"vortex-mod-manager-wine\\\" order by id asc limit 1;\");sed -n \"/args:.*$/s/^ args://;T;p;Q\" \"$HOME/.config/lutris/games/$CONFIGPATH.yml\";NOYAML=\" -d\";sed -i \"s/^ args:.*$/ args:$NOYAML/\" \"$HOME/.config/lutris/games/$CONFIGPATH.yml\";) >/dev/null 2>&1;" variables: VERSION: '1.5.13' HOME: '$HOME' USER: '$USER' ```

Yu-457 commented 2 years ago

@NicBOMB hey, thanks a lot for this installer. Ive been trying it today. So my experience so far is that the installation went quite smooth, i tried the proton one, everything went trough. i managed to install vortex and it runs. So thanks a lot for this, nice work!! :) Sadly it doesnt work with the game i wanted to manage yet. Thats more a vortex issue i fear after reading your article. Ive been trying to manage my already modded stardew valley installation. Its not found though and keeps forcing me to select a *.exe file. I didnt do much further testing there yet, but so far i didnt manage to load it up. Might be a game specific issue though. I noticed that darkest dungeon was found and and is shown as managable game. So that seems to work (didnt try modding it though)

Edit 1: i managed to get it discovered by faking some *.exe file into the folder. It doesnt manage to recognize any mods though. It sees the folders with all installed mods but fails to recognize anything.

Ill update this post if i find anything noteworthy.

Thanks a lot!

NicBOMB commented 2 years ago

@NicBOMB hey, thanks a lot for this installer. Ive been trying it today. So my experience so far is that the installation went quite smooth, i tried the proton one, everything went trough. i managed to install vortex and it runs. So thanks a lot for this, nice work!! :)

Awesome! I'm glad Vortex is working.

Sadly it doesnt work with the game i wanted to manage yet. Thats more a vortex issue i fear after reading your article. Ive been trying to manage my already modded stardew valley installation. Its not found though and keeps forcing me to select a *.exe file. I didnt do much further testing there yet, but so far i didnt manage to load it up. Might be a game specific issue though. I noticed that darkest dungeon was found and and is shown as managable game. So that seems to work (didnt try modding it though)

Edit 1: i managed to get it discovered by faking some *.exe file into the folder. It doesnt manage to recognize any mods though. It sees the folders with all installed mods but fails to recognize anything.

Ill update this post if i find anything noteworthy.

Thanks a lot!

Yeah, that is a Vortex extension bug, not anything wrong with your Vortex install. Specifically regarding Stardew Valley try the 64 bit extension as well. The NATIVE game path and executable was automatically detected by this extension on my install, unlike the default extension download. When installed, you may see 2 Stardew Valley titles listed in the games tab.

Since it's a NATIVE game, have you also tried running Stardew Valley modded in Proton using the Force the use of a specific Steam Play compatibility tool in Steam? That will probably resolve the extension related issues, though it may require you to move or reinstall your current mods.

This issue is also my bug report for all of those extensions which don't work in Vortex under Wine/Proton. If the extension I recommended doesn't work as well, I will add a bug report to their nexus mods page since it's separate from the default vortex extension.

Yu-457 commented 2 years ago

@NicBOMB hey, thanks for the quick reply :) i didnt even expect more help. Thats really nice of you! I will try your ideas and report back :)

Yu-457 commented 2 years ago

@NicBOMB okay, soo ive been doing some testing. sadly not very successfully. The install of the 64 bit extension did the trick. now the game is recognized (twice). thanks for this!

Ive encountered an issue with vortex itself tho which i didnt manage to work around. I cant open links in vortex.

First issue i had, in case anyone else needs this ever, was that steam set the default browser to chrome. which led to vortex not being able to open links. Ive set the default to firefox. so now vortex can open external links in firefox.

Second issue, i didnt figure out yet is that i cant open links from the vortex website. Once i go to a mod and click the "download in vortex" (tested with stardew and darkest dungeon) the link doesnt get passed trough. firefox gives me the option to select vortex and vortex-proton. Neither works. I went and selected the vortex *exe manually from the c drive installation path. neither option manages to pass the link trough. Do you have any idea what could cause this?

I tested with the vortex open and closed. it doesnt trigger anything

Do you have any idea what could cause this?

NicBOMB commented 2 years ago

Ive encountered an issue with vortex itself tho which i didnt manage to work around. I cant open links in vortex.

That is common. Your browser needs to be configured correctly.

First issue i had, in case anyone else needs this ever, was that steam set the default browser to chrome. which led to vortex not being able to open links. Ive set the default to firefox. so now vortex can open external links in firefox.

I only use firefox, sorry about that. I don't know the exact setting in chrome, but you should be able to change how nxm links are handled as well.

Second issue, i didnt figure out yet is that i cant open links from the vortex website. Once i go to a mod and click the "download in vortex" (tested with stardew and darkest dungeon) the link doesnt get passed trough. firefox gives me the option to select vortex and vortex-proton. Neither works. I went and selected the vortex *exe manually from the c drive installation path. neither option manages to pass the link trough. Do you have any idea what could cause this?

I tested with the vortex open and closed. it doesnt trigger anything

Do you have any idea what could cause this?

Yes, this happens frequently to me since I uninstall and reinstall 3 to 4 different Vortex prefixes constantly during testing. (5 including the one from the Lutris website) The steps I use to get links in Vortex working again are as follows:

  1. Close your browser and Vortex

  2. Run the linker to create an appropriate desktop entry. If you already have the correct Vortex desktop entry, you can simply run the following

    xdg-mime default ~/.local/share/applications/vortex-proton-downloads-handler.desktop x-scheme-handler/nxm
    xdg-mime default ~/.local/share/applications/vortex-proton-downloads-handler.desktop x-scheme-handler/nxm-protocol

    Change the filename in that command to vortex-wine-downloads-handler.desktop if using the wine prefix. In either case, if the file wasn't found by that command, you should just run the appropriate symlinker.

  3. Relaunch your browser and select the Vortex Proton or Vortex Wine handler after clicking an nxm link. You need to use the desktop entry provided as it has the necessary arguments to launch the prefix correctly, specifies download launch flag for Vortex, and passes the received url to Vortex.

image

I don't recommend manually selecting the desktop entry in your browser, though I have tested that does work so long as you don't make a new desktop entry. If the desktop entry changes, your browser may stop using the manually selected file. If your browser doesn't detect the correct app automatically or the links still aren't being handled, I also recommend a quick logout and back into your desktop environment as that should update your application lists as well. The default handler list in Firefox should look like this with the Vortex Proton desktop entry automatically detected.

image

If using the wine installer and symlinker, it will say Vortex Wine.

Yu-457 commented 2 years ago

@NicBOMB hey, thanks a lot again for this really great and detailed answer! I really appreciate it

I did try all the steps, including restarts, logoffs and running the proton symlink manually. Still the same behaviour though. I double checked the firefox links too. it looked like on your screenshot I did try to open the download link with the desktop link too, this one doesnt work neither.

Is there any log that could give us further insights? Could the desktop entry be faulty? Ive been only using the proton scripts.

image

I hope im not causing too much work for you, I dont want to cause too much of a hassle. 😅 I managed to get all the mods i wanted up and running for now without vortex. For now at least

NicBOMB commented 2 years ago

@NicBOMB hey, thanks a lot again for this really great and detailed answer! I really appreciate it

I did try all the steps, including restarts, logoffs and running the proton symlink manually. Still the same behaviour though. I double checked the firefox links too. it looked like on your screenshot I did try to open the download link with the desktop link too, this one doesnt work neither.

Is there any log that could give us further insights? Could the desktop entry be faulty? Ive been only using the proton scripts.

Yes, you can see how Firefox handles the link by launching it from a CLI and following stdout. You will get something like this, without my #comments though:

❯ firefox
Missing chrome or resource URL: resource://gre/modules/UpdateListener.jsm
#I click the nxm link
wineserver: using server-side synchronization.
wine: RLIMIT_NICE is <= 20, unable to use setpriority safely
002c:fixme:winediag:LdrInitializeThunk wine-staging 7.0 is a testing version containing experimental patches.
002c:fixme:winediag:LdrInitializeThunk Please mention your exact version when filing bug reports on winehq.org.
ATTENTION: default value of option mesa_glthread overridden by environment.
ATTENTION: default value of option mesa_glthread overridden by environment.
#Vortex continues logging to stdout and stderr when not fd redirected

I really wanted to avoid running a shell just to complete the fd redirection, but it seems that's the only reasonable method. Considering I was able to replicate your desktop entry issues on another device again, I'll add this fix to the entry as well. You can wrap your current exec line in a shell manually like this Exec=sh -c "env ... 1>/dev/null 2>/dev/null"

I hope im not causing too much work for you, I dont want to cause too much of a hassle. sweat_smile I managed to get all the mods i wanted up and running for now without vortex. For now at least

I will add the above fix to the installers and symlinkers then edit my comment above again shortly. I have other edits to include for that post anyways. The goal is to put in some work now so anyone wanting to mod doesn't have to. :ok_hand:

Yu-457 commented 2 years ago

@NicBOMB thanks a lot! Its really cool youre creating this for the community!

Good to hear that you were able to reproduce it. I think ill wait till you got the new installers and then test with those :) Im not too familiar with linux commands (yet) so its really great youre adding those to the installer.

Thanks a lot

NicBOMB commented 2 years ago

@NicBOMB thanks a lot! Its really cool youre creating this for the community!

Good to hear that you were able to reproduce it. I think ill wait till you got the new installers and then test with those :)

@Yu-457 The installers and symlinkers are already updated. You can see when I edited my reply above and compare with older versions as well. I'd really like to move this to a PR so that people can get notified of changes though.

MPritsch commented 2 years ago

@NicBOMB Thank you for all the effort! I was able to install Vortex via your Lutris yaml on the steam deck and use it for modding. I'm not sure if this is an separate issue or part of the installation/setup: The game I mod is installed on the sd card. Vortex modifies the compdata folder of the steam on the sd card to write the plugins.txt. However the game launches with the compdata folder located on the base drive. This effectively means that any mods that Vortex tries to activate aren't, because the wrong plugins.txt is used. I worked around this by symlinking the folder which contains the plugins.txt on the sd card. This might just be a limitation with proton, but I'm not sure. What do you think?

NicBOMB commented 2 years ago

@NicBOMB Thank you for all the effort! I was able to install Vortex via your Lutris yaml on the steam deck and use it for modding.

@MPritsch First Steam Deck feedback! Excellent news.

I'm not sure if this is an separate issue or part of the installation/setup: The game I mod is installed on the sd card. Vortex modifies the compdata folder of the steam on the sd card to write the plugins.txt. However the game launches with the compdata folder located on the base drive. This effectively means that any mods that Vortex tries to activate aren't, because the wrong plugins.txt is used.

That's an interesting issue. On my system the compatdata folder is stored in each respective drive with the associated game. I have been checking the game's appmanifest file to determine if it's a proton game, then look for and symlink the appropriate compatdata folder. Are you saying there are multiple valid compatdata folders for one game, or is it using a default compatdata folder? I expected there should only be one compatdata folder for each game unless the game was moved or reinstalled to a different steam library folder by the user.

I worked around this by symlinking the folder which contains the plugins.txt on the sd card. This might just be a limitation with proton, but I'm not sure. What do you think?

I could troubleshoot this with some more information:

  1. Name of the game you are modding.
  2. install.log written by my installer to your Vortex prefix.
  3. The appmanifest_#.acf file of the game. It is located in the SteamLibrary/steamapps/appmanifest_#.acf folder of either of the two Steam Library folders I expect exist on the main drive and sd card respectively. They should be entirely separate, but what you described indicates they are being configured to work together, or at least differently than a regular Steam install on Linux. My best guess is that each game is told what compatdata folder path to use in its configuration stored there.
MPritsch commented 2 years ago

That's an interesting issue. On my system the compatdata folder is stored in each respective drive with the associated game. I have been checking the game's appmanifest file to determine if it's a proton game, then look for and symlink the appropriate compatdata folder. Are you saying there are multiple valid compatdata folders for one game, or is it using a default compatdata folder? I expected there should only be one compatdata folder for each game unless the game was moved or reinstalled to a different steam library folder by the user.

I initially moved the game from base drive to sd-card. The compdata folder seem to always exist on the base drive for steam-os. I have games installed on both sd card and base drive, but the only game with a compdata folder on the sd-card is oblivion. I assumed this was due to Vortex creating the folder when setting up. Although my working theory is that it has to do with me trying to use Mod Organizer 2 beforehand and it creating that folder, because I found a ModOrganizer folder on there. In the install.log below it looks like the folder on the sd-card was already present beforehand, which supports this theory. EDIT: I just discovered when moving a game between drives that steam leaves behind the compdata folder on the base drive and creates a new one on the sd card. Deleting the one on the base drive still ignores the one on the sd-card and creates a new one upon being launched. This looks like a bug with steam/steam-os? EDIT 2: Launching a game which was originally installed on the sd-card creates a compdata folder on the base drive. This means that there should never be a compdata folder on the sd-card. However the moving process seems to be broken in this regard. Not sure what vortex could do about that :/ Maybe a warning that there are multiple compdata folders?

The question that remains is how to tell Vortex to pick a different compdata folder for a game?

  • Name of the game you are modding.

Oblivion

  • install.log written by my installer to your Vortex prefix.
INFO: Using Vortex prefix at "/home/deck/Games/vortex-mod-manager"
INFO: Steam Libraries:
/home/deck/.local/share/Steam
/run/media/mmcblk0p1
INFO: Will attempt linking on the following detected games:
Proton 7.0
The Binding of Isaac: Rebirth
Proton 6.3
Skater XL
Steam Linux Runtime
Steam Linux Runtime - Soldier
TrackMania Nations Forever
Enter the Gungeon
Steamworks Common Redistributables
The Elder Scrolls IV: Oblivion 
Terraria
Transistor
Super Meat Boy
Grand Theft Auto: San Andreas
The Witcher 3: Wild Hunt
INFO: CURRENT_APPID="1887720" CURRENT_GAME="Proton 7.0" CURRENT_INSTALLDIR="Proton 7.0"
GOOD: Found Proton 7.0 installation at /home/deck/.local/share/Steam/steamapps/common/Proton 7.0
WARN: Proton 7.0 isn't configured for Proton but a Prefix was found!
GOOD: Found Proton 7.0 Proton Prefix at /home/deck/.local/share/Steam/steamapps/compatdata/1887720/pfx
INFO: CURRENT_APPID="250900" CURRENT_GAME="The Binding of Isaac: Rebirth" CURRENT_INSTALLDIR="The Binding of Isaac Rebirth"
GOOD: Found The Binding of Isaac: Rebirth installation at /home/deck/.local/share/Steam/steamapps/common/The Binding of Isaac Rebirth
INFO: platform_override_dest: "linux" platform_override_source: "windows"
GOOD: Found The Binding of Isaac: Rebirth Proton Prefix at /home/deck/.local/share/Steam/steamapps/compatdata/250900/pfx
INFO: CURRENT_APPID="1580130" CURRENT_GAME="Proton 6.3" CURRENT_INSTALLDIR="Proton 6.3"
GOOD: Found Proton 6.3 installation at /home/deck/.local/share/Steam/steamapps/common/Proton 6.3
WARN: Proton 6.3 isn't configured for Proton but a Prefix was found!
GOOD: Found Proton 6.3 Proton Prefix at /home/deck/.local/share/Steam/steamapps/compatdata/1580130/pfx
INFO: CURRENT_APPID="962730" CURRENT_GAME="Skater XL" CURRENT_INSTALLDIR="Skater XL"
GOOD: Found Skater XL installation at /home/deck/.local/share/Steam/steamapps/common/Skater XL
INFO: platform_override_dest: "linux" platform_override_source: "windows"
GOOD: Found Skater XL Proton Prefix at /home/deck/.local/share/Steam/steamapps/compatdata/962730/pfx
INFO: CURRENT_APPID="1070560" CURRENT_GAME="Steam Linux Runtime" CURRENT_INSTALLDIR="SteamLinuxRuntime"
GOOD: Found Steam Linux Runtime installation at /home/deck/.local/share/Steam/steamapps/common/SteamLinuxRuntime
INFO: No Proton Prefix for Steam Linux Runtime found!
INFO: CURRENT_APPID="1391110" CURRENT_GAME="Steam Linux Runtime - Soldier" CURRENT_INSTALLDIR="SteamLinuxRuntime_soldier"
GOOD: Found Steam Linux Runtime - Soldier installation at /home/deck/.local/share/Steam/steamapps/common/SteamLinuxRuntime_soldier
INFO: No Proton Prefix for Steam Linux Runtime - Soldier found!
INFO: CURRENT_APPID="11020" CURRENT_GAME="TrackMania Nations Forever" CURRENT_INSTALLDIR="TrackMania Nations Forever"
GOOD: Found TrackMania Nations Forever installation at /home/deck/.local/share/Steam/steamapps/common/TrackMania Nations Forever
INFO: platform_override_dest: "linux" platform_override_source: "windows"
GOOD: Found TrackMania Nations Forever Proton Prefix at /home/deck/.local/share/Steam/steamapps/compatdata/11020/pfx
INFO: CURRENT_APPID="311690" CURRENT_GAME="Enter the Gungeon" CURRENT_INSTALLDIR="Enter the Gungeon"
GOOD: Found Enter the Gungeon installation at /home/deck/.local/share/Steam/steamapps/common/Enter the Gungeon
INFO: No Proton Prefix for Enter the Gungeon found!
INFO: CURRENT_APPID="228980" CURRENT_GAME="Steamworks Common Redistributables" CURRENT_INSTALLDIR="Steamworks Shared"
GOOD: Found Steamworks Common Redistributables installation at /home/deck/.local/share/Steam/steamapps/common/Steamworks Shared
INFO: No Proton Prefix for Steamworks Common Redistributables found!
INFO: CURRENT_APPID="22330" CURRENT_GAME="The Elder Scrolls IV: Oblivion " CURRENT_INSTALLDIR="Oblivion"
GOOD: Found The Elder Scrolls IV: Oblivion  installation at /run/media/mmcblk0p1/steamapps/common/Oblivion
INFO: platform_override_dest: "linux" platform_override_source: "windows"
GOOD: Found The Elder Scrolls IV: Oblivion  Proton Prefix at /run/media/mmcblk0p1/steamapps/compatdata/22330/pfx
INFO: CURRENT_APPID="105600" CURRENT_GAME="Terraria" CURRENT_INSTALLDIR="Terraria"
GOOD: Found Terraria installation at /run/media/mmcblk0p1/steamapps/common/Terraria
INFO: No Proton Prefix for Terraria found!
INFO: CURRENT_APPID="237930" CURRENT_GAME="Transistor" CURRENT_INSTALLDIR="Transistor"
GOOD: Found Transistor installation at /run/media/mmcblk0p1/steamapps/common/Transistor
INFO: No Proton Prefix for Transistor found!
INFO: CURRENT_APPID="40800" CURRENT_GAME="Super Meat Boy" CURRENT_INSTALLDIR="Super Meat Boy"
GOOD: Found Super Meat Boy installation at /run/media/mmcblk0p1/steamapps/common/Super Meat Boy
INFO: No Proton Prefix for Super Meat Boy found!
INFO: CURRENT_APPID="12120" CURRENT_GAME="Grand Theft Auto: San Andreas" CURRENT_INSTALLDIR="Grand Theft Auto San Andreas"
GOOD: Found Grand Theft Auto: San Andreas installation at /run/media/mmcblk0p1/steamapps/common/Grand Theft Auto San Andreas
INFO: platform_override_dest: "linux" platform_override_source: "windows"
WARN: Grand Theft Auto: San Andreas is configured for Proton but no Prefix was found!
WARN: Its Proton Prefix is missing or has not been run yet!
WARN: Launch the game with Proton via Steam before modding!
INFO: CURRENT_APPID="292030" CURRENT_GAME="The Witcher 3: Wild Hunt" CURRENT_INSTALLDIR="The Witcher 3"
GOOD: Found The Witcher 3: Wild Hunt installation at /run/media/mmcblk0p1/steamapps/common/The Witcher 3
INFO: platform_override_dest: "linux" platform_override_source: "windows"
WARN: The Witcher 3: Wild Hunt is configured for Proton but no Prefix was found!
WARN: Its Proton Prefix is missing or has not been run yet!
WARN: Launch the game with Proton via Steam before modding!
INFO: Using Vortex prefix at "/home/deck/Games/vortex-mod-manager"
INFO: Making an entry for Vortex at "/home/deck/.local/share/applications/vortex-proton-downloads-handler.desktop"
  • The appmanifest_#.acf file of the game. It is located in the SteamLibrary/steamapps/appmanifest_#.acf folder of either of the two Steam Library folders I expect exist on the main drive and sd card respectively. They should be entirely separate, but what you described indicates they are being configured to work together, or at least differently than a regular Steam install on Linux. My best guess is that each game is told what compatdata folder path to use in its configuration stored there.
    "AppState"
    {
    "appid"     "22330"
    "universe"      "1"
    "name"      "The Elder Scrolls IV: Oblivion "
    "StateFlags"        "4"
    "installdir"        "Oblivion"
    "LastUpdated"       "1656582074"
    "SizeOnDisk"        "5987389233"
    "StagingSize"       "0"
    "buildid"       "1510065"
    "LastOwner"     "76561198047483623"
    "UpdateResult"      "0"
    "BytesToDownload"       "0"
    "BytesDownloaded"       "0"
    "BytesToStage"      "0"
    "BytesStaged"       "0"
    "TargetBuildID"     "0"
    "AutoUpdateBehavior"        "0"
    "AllowOtherDownloadsWhileRunning"       "0"
    "ScheduledAutoUpdate"       "0"
    "InstalledDepots"
    {
    "22331"
    {
    "manifest"      "7977703601170745652"
    "size"      "5931321158"
    }
    "22333"
    {
    "manifest"      "5078222966915536366"
    "size"      "56068380"
    "dlcappid"      "22333"
    }
    }
    "UserConfig"
    {
    "platform_override_dest"        "linux"
    "platform_override_source"      "windows"
    "language"      "english"
    }
    "MountedConfig"
    {
    "platform_override_dest"        "linux"
    "platform_override_source"      "windows"
    "language"      "english"
    }
    }
NicBOMB commented 2 years ago

That's an interesting issue. On my system the compatdata folder is stored in each respective drive with the associated game. I have been checking the game's appmanifest file to determine if it's a proton game, then look for and symlink the appropriate compatdata folder. Are you saying there are multiple valid compatdata folders for one game, or is it using a default compatdata folder? I expected there should only be one compatdata folder for each game unless the game was moved or reinstalled to a different steam library folder by the user.

The compdata folder seem to always exist on the base drive for steam-os. I have games installed on both sd card and base drive, but the only game with a compdata folder on the sd-card is oblivion. I assumed this was due to Vortex creating the folder when setting up. Although my working theory is that it has to do with me trying to use Mod Organizer 2 beforehand and it creating that folder, because I found a ModOrganizer folder on there. In the install.log below it looks like the folder on the sd-card was already present beforehand, which supports this theory.

So, I would like you to move or delete all Oblivion content and reinstall if that's okay. I concur with your assessment; it was probably MO2 doing the reasonable thing and creating files in the most likely valid prefix necessary for Oblivion in a regular environment.

The question that remains is how to tell Vortex to pick a different compdata folder for a game?

Don't worry about that, I have already thought of the solution for this situation exactly. I'm going to check the primary location, which should fail on a Steam Deck, then also check the default Steam Library's compatdata folder since that cannot be removed. My best guess is that Valve keeps the compatdata folder on the Steam Deck's main drive to allow your game saves to be backed up to the Steam Cloud even if the sd card is ejected. Entirely reasonable IMO. The actual size of the compatdata necessary for your games should also be very small anyways.

  • Name of the game you are modding.

Oblivion

  • install.log written by my installer to your Vortex prefix.
INFO: Using Vortex prefix at "/home/deck/Games/vortex-mod-manager"
INFO: Steam Libraries:
/home/deck/.local/share/Steam
/run/media/mmcblk0p1
INFO: Will attempt linking on the following detected games:
The Elder Scrolls IV: Oblivion
INFO: CURRENT_APPID="22330" CURRENT_GAME="The Elder Scrolls IV: Oblivion " CURRENT_INSTALLDIR="Oblivion"
GOOD: Found The Elder Scrolls IV: Oblivion  installation at /run/media/mmcblk0p1/steamapps/common/Oblivion
INFO: platform_override_dest: "linux" platform_override_source: "windows"
GOOD: Found The Elder Scrolls IV: Oblivion  Proton Prefix at /run/media/mmcblk0p1/steamapps/compatdata/22330/pfx

Excellent. That's exactly what I expected on a Steam Deck. Only surprise was the valid compatdata being elsewhere.

  • The appmanifest_#.acf file of the game.

The appmanifest you sent has no different fields or values than what I expected, so the configuration wasn't specified there.

Try the following symlinker Lutris extension corresponding to the installer you used AFTER cleaning Oblivion's files. If this works, it may also enable Vortex to detect the other games you have already installed, played once, and which I indicated are listed in the Supported or Untested categories above, like The Witcher 3.

vortex-proton-symlinker.yml

```yml name: Vortex Mod Manager Proton Linker game_slug: vortex-mod-manager year: 2016 version: "1.5.13" slug: vortex-mod-manager-ge-proton runner: wine description: | The File Linker for the Vortex mod manager app in Proton. notes: | This extension will add new games to the already installed Vortex prefix WITHOUT REINSTALLING Vortex. It also includes other optional scripts to assist in cleaning the Vortex prefix. Games installed outside of Steam will not be detected. Dropped support for Lutris' WINE Steam. DO NOT install Mono if/when prompted by WINE. Wine Mono will be removed automatically regardless of your answer. DO NOT use the Play button provided by Lutris to launch Vortex! DO NOT use the Play button provided by Vortex to launch titles! DO NOT CREATE A desktop shortcut, application menu shortcut, or steam shortcut ON THE NEXT PAGE! Supported: - Fallout 3 - Fallout 3 Game of the Year Edition - Fallout 4 - Fallout New Vegas - Morrowind - Oblivion - Skyrim - Skyrim Special Edition - Skyrim VR Untested: - BATTLETECH (NON-NATIVE ONLY) - Bayonetta - Borderlands 2 (NON-NATIVE ONLY) - Bloodstained: Ritual of the Night - Bluefire - Control - DARK SOULS: Prepare to Die Edition - DARK SOULS REMASTERED - DARK SOULS II - DARK SOULS II Scholar of the First Sin - DARK SOULS III - Darkest Dungeon - Divinity: Original Sin 2 Definitive Edition - Divinity: Original Sin 2 Original Edition - Don't Starve Together (NATIVE) (Patched! WIP for better executable detection) - DOOM (2016) - DOOM Eternal - Dragon Age: Origins - ELDEN RING - Fallout 4 VR - Halo: The Master Chief Collection - Into the Breach (NON-NATIVE ONLY) - Kerbal Space Program (NON-NATIVE ONLY) - Left 4 Dead 2 (NATIVE AND NON-NATIVE) - MechWarrior 5: Mercenaries - Monster Hunter Rise - Monster Hunter: World - No Man's Sky - Outward - Portal 2 (NATIVE) - Project Wingman - Sekiro: Shadows Die Twice - Star Wars: KOTOR - Starbound (NATIVE AND NON-NATIVE) - Stardew Valley (NATIVE) (Default extension guesses at the location on linux but detection is not guaranteed. Another Stardew Valley 64bit extension appears to detect NATIVE?) - Stardew Valley (NON-NATIVE) - Subnautica - Subnautica: Below Zero - The Elder Scrolls: Arena - The Witcher - The Witcher 2 (NON-NATIVE ONLY) - The Witcher 3 - Valheim (NON-NATIVE ONLY) Extension Bugs: Extension always requires a .exe! No NATIVE linux launcher/executable detection: - BATTLETECH (NATIVE) - Borderlands 2 (NATIVE) - Cities: Skylines (NATIVE) - Half-Life 2 (NATIVE) - Half-Life 2 Deathmatch (NATIVE) - Half-Life 2: Update (NATIVE) - Into The Breach (NATIVE) - PAYDAY 2 (NATIVE) - Shadowrun Returns (NATIVE) - Team Fortress 2 (NATIVE) - Valheim (NATIVE) Extension rejects any detection attempt on a non-windows environment: - The Witcher 2 (NATIVE) (this despite containing seemingly appropriate switches for the linux launcher filenames) Invalid detection requirements: - DARK SOULS III (Manually adding 2 symbolic links resolves the detection issue. No fix is included in this version of the installer as a bug report is pending.) - Middle Earth: Shadow of War ('bink2w64_.dll' doesn't exist in my install and removing that one required file from the requirements enabled detection) - XCOM 2 (NATIVE) (The file and folder naming appears to not be identical to a Windows install minus .exe extensions) Other: - Counter-Strike: Source (NATIVE) - Fallout 76 (has many bugs pending) - Kerbal Space Program (NATIVE) (looks like it should work, but doesn't) - Star Wars: KOTOR II (NATIVE) - The Elder Scrolls Online - War Thunder script: extends: vortex-mod-manager-ge-proton files: - ignored: | N/A:Select any file. It will be ignored by the scripts. Lutris may temporarily cache the file (copy it) to $HOME/.cache/lutris/installer/vortex-mod-manager until the installer closes. Adding a file requirement makes Lutris run the installer. Without this the included scripts would be skipped. You may also cancel here before any automated changes are made to the filesystem. game: exe: drive_c/Program Files/Black Tree Gaming Ltd/Vortex/Vortex.exe installer: ############### PROMPT FOR CLEARING LOG ############### - input_menu: description: | Would you like to clean the install.log file from the Vortex prefix? This file is automatically generated by NicBOMB's Vortex Lutris installers. This option is included for easy removal and RECOMMENDED. The file may get very large, as these installers have no verbosity controls. id: INSTALL options: - DOIT: "Clear the install.log" - SKIP: "Skip" preselect: DOIT - execute: description: Clearing install.log working_dir: $GAMEDIR env: INPUT_INSTALL: $INPUT_INSTALL command: | ## if [ "$INPUT_INSTALL" != "SKIP" ]; then echo "Cleared install.log" | tee install.log fi ############# PROMPT FOR SHORTCUT OPTIONS ############# - input_menu: description: | Since shortcuts created by Lutris do not work, this installer will write the desktop entries. Select how you would like to launch Vortex: id: DESKTOP options: - SKIP: "Skip creating ANY desktop entries anywhere." - LINK: "Create a link to the desktop entry in your applications folder on your Desktop." - COPY: "Create a copy of the desktop entry in your applications folder and Desktop folder." - LESS: "Create only a single desktop entry in your applications folder." preselect: SKIP ########## PROMPT FOR VORTEX BACKUP REMOVAL ########### - input_menu: description: | Would you like to remove all files ending in `.vortex_backup` from all game installation folders? These are created automatically by vortex and can interfere with some modding tools. This is normally unnecessary, but is included as an easy removal option. Only use this option if you are certain you don't need backups from ANY GAMES. id: BACKUPS options: - SKIP: "Skip deleting ANY files." - LOUD: "Create a text file logging what files were deleted." - MUTE: "Delete the files silently." preselect: SKIP - execute: description: working_dir: $GAMEDIR env: INPUT_BACKUPS: $INPUT_BACKUPS command: | #################### BEGIN SCRIPT ##################### echo "$( #################### VORTEX PREFIX #################### if [ "$VORTEX_PREFIX" == "" ]; then VORTEX_PREFIX="$PWD" fi if [ ! -d "$VORTEX_PREFIX" ]; then echo "ERROR: Invalid Vortex prefix \"$VORTEX_PREFIX\"" exit -1 else echo "INFO: Using Vortex prefix at \"$VORTEX_PREFIX\"" fi ####################################################### #################### DELETE FILES ##################### if [ "$INPUT_BACKUPS" != "SKIP" ]; then if [ -d "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common" ]; then echo "INFO: Located Steam directory \"$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common\"" if [ "$INPUT_BACKUPS" == "MUTE" ]; then find -L "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common" -type f -name "*.vortex_backup" -delete fi if [ "$INPUT_BACKUPS" == "LOUD" ]; then echo "INFO: Deleted the following .vortex_backup files:" find -L "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common" -type f -name "*.vortex_backup" -print -delete fi else echo "EROR: Invalid Steam directory \"$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common\"" fi fi ####################################################### )" |& tee -a install.log ##################### END SCRIPT ###################### #################### BEGIN LINKING #################### - execute: description: Creating Symbolic Links Targeting Known Game Locations working_dir: $GAMEDIR env: INPUT_GAMESLS: $INPUT_GAMESLS command: | ## ## requires: ## bash https://www.gnu.org/software/bash/ ## coreutils https://www.gnu.org/software/coreutils/ ## findutils https://www.gnu.org/software/findutils/ ## sed https://www.gnu.org/software/sed/ ## xdg-mime https://freedesktop.org/wiki/Software/xdg-utils/ #################### BEGIN SCRIPT ##################### echo "$( #################### VORTEX PREFIX #################### if [ "$VORTEX_PREFIX" == "" ]; then VORTEX_PREFIX="$PWD" fi if [ ! -d "$VORTEX_PREFIX" ]; then echo "ERROR: Invalid Vortex prefix \"$VORTEX_PREFIX\"" exit -1 else echo "INFO: Using Vortex prefix at \"$VORTEX_PREFIX\"" fi ####################################################### ########### CREATE NECESSARY VORTEX FOLDERS ########### mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming" mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local" mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/AppData/LocalLow" mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/Documents/My Games" mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/Local Settings" ln -s -T "$VORTEX_PREFIX/drive_c/users/$USER/Documents" "$VORTEX_PREFIX/drive_c/users/$USER/My Documents" 2>/dev/null ln -s -T "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming" "$VORTEX_PREFIX/drive_c/users/$USER/Application Data" 2>/dev/null ln -s -T "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local" "$VORTEX_PREFIX/drive_c/users/$USER/Local Settings/Application Data" 2>/dev/null mkdir -p "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common" mkdir -p "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/config" cat "$HOME/.steam/steam/steamapps/libraryfolders.vdf" | sed "s/\"\/.*\"$/\"C:\\\\\\\\Program Files \(x86\)\\\\\\\\Steam\"/g" | tee "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/libraryfolders.vdf" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/config/libraryfolders.vdf" 1>/dev/null ####################################################### ################ FUNCTION DECLARATIONS ################ game_attribute(){ declare -p ${1}\_${2} | grep -a -o ${1}\_${2}.* | sed "s/${1}\_${2}=//;s/\"//;s/\"$//" } library_apps(){ grep -a -o -e "\"apps\"[[:space:]]*{.*}$" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/config/libraryfolders.vdf" | grep -a -o -e "\".*\"[[:space:]]*\".*\"$" | sed "s/\"[[:space:]]*\".*\"$//;s/\"//" } manifest_attribute(){ grep -a -o -e "\"${2}\"[[:space:]]*\".*\"$" "${1}" | sed "s/\"${2}\"[[:space:]]*\"//;s/\"$//" } manifest_userconfig_attribute(){ manifest_attribute <(grep -a -o -P -z "\"UserConfig\"\s*{(\s*[^}]*\s*)*}" "${1}") "${2}" } manifest_mountedconfig_attribute(){ manifest_attribute <(grep -a -o -P -z "\"MountedConfig\"\s*{(\s*[^}]*\s*)*}" "${1}") "${2}" } find_appmanifests(){ STEAM_APPMANIFEST_PATHS=() # shadow with locals to prevent bad input local library="" local manifest="" local MANIFEST_LIST=() echo "INFO: Will attempt linking on the following detected games:" for library in "${STEAM_LIBRARY_PATHS[@]}"; do MANIFEST_LIST+=($(find "$library/steamapps" -mindepth 1 -maxdepth 1 -type f -name "appmanifest_*\.acf")) done for manifest in "${MANIFEST_LIST[@]}"; do echo "$(manifest_attribute "$manifest" "name")" STEAM_APPMANIFEST_PATHS+=($(echo "$manifest")) done } find_current_game_paths(){ local checkdir="$(echo "$CURRENT_APPMANIFEST" | sed "s/\/steamapps\/.\+/\/steamapps\/common\//")$CURRENT_INSTALLDIR" if [ -d "$checkdir" ]; then CURRENT_INSTALL_PATH="$checkdir" checkdir="$(echo "$CURRENT_APPMANIFEST" | sed "s/\/steamapps\/.\+/\/steamapps\/compatdata\/$CURRENT_APPID\/pfx/")" echo "GOOD: Found $CURRENT_GAME installation at $CURRENT_INSTALL_PATH" if [ "$(manifest_userconfig_attribute "$CURRENT_APPMANIFEST" "platform_override_dest")" == "linux" ] && [ "$(manifest_userconfig_attribute "$CURRENT_APPMANIFEST" "platform_override_source")" == "windows" ]; then echo "INFO: platform_override_dest: \"$(manifest_userconfig_attribute "$CURRENT_APPMANIFEST" "platform_override_dest")\" platform_override_source: \"$(manifest_userconfig_attribute "$CURRENT_APPMANIFEST" "platform_override_source")\"" if [ -d "$checkdir" ]; then CURRENT_PREFIX_PATH="$checkdir" echo "GOOD: Found $CURRENT_GAME Proton Prefix at $CURRENT_PREFIX_PATH" else echo "INFO: Proton Prefix for $CURRENT_GAME not found at $checkdir" checkdir="${STEAM_LIBRARY_PATHS[0]}/steamapps/compatdata/$CURRENT_APPID/pfx/" echo "INFO: Trying $checkdir instead!" if [ -d "$checkdir" ]; then CURRENT_PREFIX_PATH="$checkdir" echo "GOOD: Found $CURRENT_GAME Proton Prefix in default Steam Library at $CURRENT_PREFIX_PATH" echo "WARN: This feature should only be automatically used for Steam Deck!" else CURRENT_PREFIX_PATH="" echo "WARN: $CURRENT_GAME is configured for Proton but no Prefix was found!" echo "WARN: Its Proton Prefix is missing or has not been run yet!" echo "WARN: Launch the game with Proton via Steam before modding!" fi fi elif [ -d "$checkdir" ]; then CURRENT_PREFIX_PATH="$checkdir" echo "WARN: $CURRENT_GAME isn't configured for Proton but a Prefix was found!" echo "GOOD: Found $CURRENT_GAME Proton Prefix at $CURRENT_PREFIX_PATH" else CURRENT_PREFIX_PATH="" echo "INFO: No Proton Prefix for $CURRENT_GAME found!" fi else CURRENT_INSTALL_PATH="" CURRENT_PREFIX_PATH="" checkdir="$CURRENT_INSTALL_PATH/steamapps/compatdata/$CURRENT_APPID/pfx" if [ -d "$checkdir" ]; then echo "WARN: A Proton Prefix for $CURRENT_GAME exists at $checkdir but no installation was detected!" echo "WARN: If $CURRENT_GAME was uninstalled, Steam may have left behind files, like save data it syncs with the Steam Cloud." else echo "INFO: No installation or Proton Prefix of $CURRENT_GAME found!" fi fi } link_sub_targets(){ local TARGET="" local checklink="" local DIR_LS=("${2}"/*) for TARGET in "${DIR_LS[@]}"; do local foldername="$(basename "$TARGET")" checklink="${1}/$foldername" if [ -h "$checklink" ]; then unlink "$checklink" fi if [ "$foldername" != "Vortex" ] && [ "$foldername" != "openvr" ] && [ "$foldername" != "Microsoft" ] && [ -d "$TARGET" ]; then ln -s "$TARGET" "${1}/" fi done } create_current_game_symlinks(){ if [ -d "$CURRENT_INSTALL_PATH" ]; then local check="$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common/$CURRENT_INSTALLDIR" if [ -h "$check" ]; then unlink "$check" fi check="$CURRENT_INSTALL_PATH" if [ -d "$check" ]; then ln -s "$check" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common/" fi check="$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/appmanifest_$CURRENT_APPID.acf" if [ -h "$check" ]; then unlink "$check" fi check="$CURRENT_APPMANIFEST" if [ -f "$check" ]; then ln -s "$check" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/" fi fi if [ -d "$CURRENT_PREFIX_PATH" ]; then link_sub_targets "$VORTEX_PREFIX/drive_c/users/$USER/My Documents/My Games" "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/My Documents/My Games" link_sub_targets "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming" "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/Roaming" link_sub_targets "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local" "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/Local" link_sub_targets "$VORTEX_PREFIX/drive_c/users/$USER/AppData/LocalLow" "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/LocalLow" fi } ####################################################### ################### PATH CANDIDATES ################### IFS=$'\n' STEAM_LIBRARY_PATHS=() echo "INFO: Steam Libraries:" for library in $(grep -a -o "/[^\"]*" $HOME/.steam/steam/steamapps/libraryfolders.vdf); do if [ -d "$library" ] && [ -d "$library/steamapps/common" ]; then # remove any installdir or compatdata directories uninstalled games rmdir --ignore-fail-on-non-empty $library/steamapps/common/* 2>/dev/null if [ -d "$library/steamapps/compatdata/" ]; then STEAM_COMPATDATA=("$(find "$library/steamapps/compatdata/" -type d -name "pfx")") for compatdata in ${STEAM_COMPATDATA}; do rmdir --ignore-fail-on-non-empty "$compatdata" 2>/dev/null done fi STEAM_LIBRARY_PATHS+=("$library") echo "$library" fi done ####################################################### ################### CREATE SYMLINKS ################### find_appmanifests for CURRENT_APPMANIFEST in "${STEAM_APPMANIFEST_PATHS[@]}"; do CURRENT_APPID="$(manifest_attribute "$CURRENT_APPMANIFEST" "appid")" CURRENT_GAME="$(manifest_attribute "$CURRENT_APPMANIFEST" "name")" CURRENT_INSTALLDIR="$(manifest_attribute "$CURRENT_APPMANIFEST" "installdir")" echo "INFO: CURRENT_APPID=\"$CURRENT_APPID\" CURRENT_GAME=\"$CURRENT_GAME\" CURRENT_INSTALLDIR=\"$CURRENT_INSTALLDIR\"" find_current_game_paths create_current_game_symlinks done ####################################################### )" |& tee -a install.log ##################### END SCRIPT ###################### ##################### END LINKING ##################### ################### BEGIN REGEDITS #################### ######################## STEAM ######################## - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_CURRENT_USER\Software\Valve\Steam type: REG_SZ key: "SteamPath" value: C:\\Program Files (x86)\\Steam description: "Adding Steam to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_CURRENT_USER\Software\Valve\Steam type: REG_SZ key: "SteamExe" value: C:\\Program Files (x86)\\Steam\\Steam.exe description: "Adding Steam to the Proton Prefix Registry 2/2" ##################### DARK SOULS ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\NAMCO BANDAI GAMES\DARK SOULS type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls Prepare to Die Edition description: "Adding DARK SOULS to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\211420 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls Prepare to Die Edition description: "Adding DARK SOULS to the Proton Prefix Registry 2/2" ################ DARK SOULS REMASTERED ################ - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\570940 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\DARK SOULS REMASTERED description: "Adding DARK SOULS REMASTERED to the Proton Prefix Registry 1/1" #################### Dark Souls II #################### - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\236430 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls II description: "Adding DARK SOULS II to the Proton Prefix Registry 1/1" ####### Dark Souls II Scholar of the First Sin ######## - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\335300 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls II Scholar of the First Sin description: "Adding DARK SOULS II Scholar of the First Sin to the Proton Prefix Registry 1/1" ################### DARK SOULS III #################### - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\374320 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\DARK SOULS III description: "Adding DARK SOULS III to the Proton Prefix Registry 1/1" ##################### ELDEN RING ###################### - task: # Developer uninstall path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ELDEN RING_is1 type: REG_SZ key: "InstallLocation" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\ELDEN RING description: "Adding ELDEN RING to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\1245620 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\ELDEN RING description: "Adding ELDEN RING to the Proton Prefix Registry 2/2" ###################### Fallout 3 ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 3 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 description: "Adding Fallout 3 to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22300 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 description: "Adding Fallout 3 to the Proton Prefix Registry 2/2" ######### Fallout 3 Game of the Year Edition ########## - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 3 goty type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 goty description: "Adding Fallout 3 Game of the Year Edition to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22370 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 goty description: "Adding Fallout 3 Game of the Year Edition to the Proton Prefix Registry 2/2" ###################### Fallout 4 ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout4 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 description: "Adding Fallout 4 to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\377160 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 description: "Adding Fallout 4 to the Proton Prefix Registry 2/2" #################### Fallout 4 VR ##################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 4 VR type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 VR description: "Adding Fallout 4 VR to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\611660 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 VR description: "Adding Fallout 4 VR to the Proton Prefix Registry 2/2" ##################### Fallout 76 ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Fallout 76 type: REG_SZ key: "Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout76 description: "Adding Fallout 76 to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\1151340 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout76 description: "Adding Fallout 76 to the Proton Prefix Registry 2/2" ################## Fallout New Vegas ################## - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\FalloutNV type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout New Vegas description: "Adding Fallout New Vegas to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22380 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout New Vegas description: "Adding Fallout New Vegas to the Proton Prefix Registry 2/2" ################ Kerbal Space Program ################# - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\220200 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Kerbal Space Program description: "Adding Kerbal Space Program to the Proton Prefix Registry 1/1" ############# MechWarrior 5: Mercenaries ############## - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\784080 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\MechWarrior 5 Mercenaries description: "Adding MechWarrior 5: Mercenaries to the Proton Prefix Registry 1/1" ############# Middle Earth: Shadow of War ############# - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\356190 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\ShadowOfWar description: "Adding Middle Earth: Shadow of War to the Proton Prefix Registry 1/1" ################ Monster Hunter: World ################ - task: # Developer uninstall path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 582010 type: REG_SZ key: "InstallLocation" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Monster Hunter World description: "Adding Monster Hunter: World to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\582010 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Monster Hunter World description: "Adding Monster Hunter: World to the Proton Prefix Registry 2/2" ###################### Morrowind ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Morrowind type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Morrowind description: "Adding Morrowind to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22320 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Morrowind description: "Adding Morrowind to the Proton Prefix Registry 2/2" ###################### Oblivion ####################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Oblivion type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Oblivion description: "Adding Oblivion to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22330 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Oblivion description: "Adding Oblivion to the Proton Prefix Registry 2/2" ####################### Sekiro ######################## - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\814380 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Sekiro description: "Adding Sekiro: Shadows Die Twice to the Proton Prefix Registry 1/1" ####################### Skyrim ######################## - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim description: "Adding Skyrim to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\72850 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim description: "Adding Skyrim to the Proton Prefix Registry 2/2" ############### Skyrim Special Edition ################ - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim Special Edition type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim Special Edition description: "Adding Skyrim Special Edition to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\489830 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim Special Edition description: "Adding Skyrim Special Edition to the Proton Prefix Registry 2/2" ###################### Skyrim VR ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim VR type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\SkyrimVR description: "Adding Skyrim VR to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\611670 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\SkyrimVR description: "Adding Skyrim VR to the Proton Prefix Registry 2/2" ################### Stardew Valley #################### - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\413150 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Stardew Valley description: "Adding Stardew Valley to the Proton Prefix Registry 1/1" ##################### The Witcher ##################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\CD Project Red\Witcher type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher Enhanced Edition description: "Adding The Witcher to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\20900 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher Enhanced Edition description: "Adding The Witcher to the Proton Prefix Registry 2/2" ###################### The Witcher 2 ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\CD Project Red\The Witcher 2 type: REG_SZ key: "InstallFolder" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\the witcher 2 description: "Adding The Witcher 2 to the Proton Prefix Registry 1/1" ###################### The Witcher 3 ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\CD Project Red\The Witcher 3 type: REG_SZ key: "InstallFolder" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher 3 description: "Adding The Witcher 3 to the Proton Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\209230 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher 3 description: "Adding The Witcher 3 to the Proton Prefix Registry 2/2" ####################### Valheim ####################### - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\892970 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Valheim description: "Adding Valheim to the Proton Prefix Registry 1/1" #################### END REGEDITS ##################### - execute: description: Deploying Selected Desktop Entry Choice working_dir: $GAMEDIR env: INPUT_DESKTOP: $INPUT_DESKTOP command: | ## #################### BEGIN SCRIPT ##################### echo "$( #################### VORTEX PREFIX #################### if [ "$VORTEX_PREFIX" == "" ]; then VORTEX_PREFIX="$PWD" fi if [ ! -d "$VORTEX_PREFIX" ]; then echo "ERROR: Invalid Vortex prefix \"$VORTEX_PREFIX\"" exit -1 else echo "INFO: Using Vortex prefix at \"$VORTEX_PREFIX\"" fi ####################################################### ################ CREATE DESKTOP ENTRY ################# WINE_BIN_PATH="$(dirname "$WINEBIN")" DESKTOP="$HOME/Desktop" DESKTOP_FNAME="vortex-proton-downloads-handler.desktop" DESKTOP_APPLS="$HOME/.local/share/applications/" DESKTOP_FPATH="$DESKTOP_APPLS$DESKTOP_FNAME" DESKTOP_ENTRY=$(cat << END [Desktop Entry] Type=Application Categories=Game;Network; Path=/drive_c/Program Files/Black Tree Gaming Ltd/Vortex Exec=sh -c "env WINEPREFIX="" PATH=":\$PATH" wine Vortex.exe -d %u 1>/dev/null 2>/dev/null" Name=Vortex Proton Comment=Vortex Launcher and NXM Protocol Download Handler Icon=lutris_vortex-mod-manager MimeType=x-scheme-handler/nxm;x-scheme-handler/nxm-protocol END ) if [ -f "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd/Vortex.desktop" ]; then rm -f "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd/Vortex.desktop" rmdir -p "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd" fi if [ "$INPUT_DESKTOP" != "SKIP" ] && [ "$INPUT_DESKTOP" != "" ]; then echo "INFO: Making an entry for Vortex at \"$DESKTOP_FPATH\"" if [ -f "$DESKTOP_FPATH" ]; then rm -f "$DESKTOP_FPATH" fi ESCAPED_VORTEX_PREFIX=$(echo $VORTEX_PREFIX | sed 's/\//\\\//g') ESCAPED_WINE_BIN_PATH=$(echo $WINE_BIN_PATH | sed 's/\//\\\//g') echo "$DESKTOP_ENTRY" | sed "s//$ESCAPED_VORTEX_PREFIX/g; s//$ESCAPED_WINE_BIN_PATH/g" > "$DESKTOP_FPATH" xdg-mime default "$DESKTOP_FPATH" x-scheme-handler/nxm xdg-mime default "$DESKTOP_FPATH" x-scheme-handler/nxm-protocol if [ "$INPUT_DESKTOP" == "COPY|LINK" ] && [ -f "$DESKTOP/$DESKTOP_FNAME" ]; then rm -f "$DESKTOP/$DESKTOP_FNAME" fi if [ "$INPUT_DESKTOP" == "COPY" ]; then cp "$DESKTOP_FNAME" "$DESKTOP" fi if [ "$INPUT_DESKTOP" == "LINK" ]; then ln -s -f "$DESKTOP_FPATH" "$DESKTOP" fi fi ####################################################### )" |& tee -a install.log ##################### END SCRIPT ###################### ####################################################### ######################## DONE ######################### install_complete_text: | You can install games to any drive and use Hardlink Deployment! The VFS (Virtual File System) has all drives mounted to directories which exist in the Z: drive (points to '/'). Use the Vortex suggestion or make a folder to substitute for the mod staging folder on ANY drive. Only Hardlink Deployment has been tested. Some untested games will automatically select other deployment strategies. See this issue comment for more information: https://github.com/Nexus-Mods/Vortex/issues/9629#issuecomment-1013658187 Uninstalling Vortex in Lutris will leave the desktop entry. DO NOT use the Play button provided by Lutris to launch Vortex! DO NOT use the Play button provided by Vortex to launch titles! DO NOT USE THE LAUNCH BUTTON BELOW THIS TEXT ####################################################### wine: dxvk: true version: lutris-GE-Proton7-16-x86_64 ```

vortex-wine-symlinker.yml

```yml name: Vortex Mod Manager Wine Linker game_slug: vortex-mod-manager year: 2016 version: "1.5.13" slug: vortex-mod-manager-wine runner: wine description: | The File Linker for the Vortex mod manager app in Proton. notes: | This extension will add new games to the already installed Vortex prefix WITHOUT REINSTALLING Vortex. It also includes other optional scripts to assist in cleaning the Vortex prefix. Games installed outside of Steam will not be detected. Dropped support for Lutris' WINE Steam. DO NOT install Mono if/when prompted by WINE. Wine Mono will be removed automatically regardless of your answer. DO NOT use the Play button provided by Lutris to launch Vortex! DO NOT use the Play button provided by Vortex to launch titles! DO NOT CREATE A desktop shortcut, application menu shortcut, or steam shortcut ON THE NEXT PAGE! Supported: - Fallout 3 - Fallout 3 Game of the Year Edition - Fallout 4 - Fallout New Vegas - Morrowind - Oblivion - Skyrim - Skyrim Special Edition - Skyrim VR Untested: - BATTLETECH (NON-NATIVE ONLY) - Bayonetta - Borderlands 2 (NON-NATIVE ONLY) - Bloodstained: Ritual of the Night - Bluefire - Control - DARK SOULS: Prepare to Die Edition - DARK SOULS REMASTERED - DARK SOULS II - DARK SOULS II Scholar of the First Sin - DARK SOULS III - Darkest Dungeon - Divinity: Original Sin 2 Definitive Edition - Divinity: Original Sin 2 Original Edition - Don't Starve Together (NATIVE) (Patched! WIP for better executable detection) - DOOM (2016) - DOOM Eternal - Dragon Age: Origins - ELDEN RING - Fallout 4 VR - Halo: The Master Chief Collection - Into the Breach (NON-NATIVE ONLY) - Kerbal Space Program (NON-NATIVE ONLY) - Left 4 Dead 2 (NATIVE AND NON-NATIVE) - MechWarrior 5: Mercenaries - Monster Hunter Rise - Monster Hunter: World - No Man's Sky - Outward - Portal 2 (NATIVE) - Project Wingman - Sekiro: Shadows Die Twice - Star Wars: KOTOR - Starbound (NATIVE AND NON-NATIVE) - Stardew Valley (NATIVE) (Default extension guesses at the location on linux but detection is not guaranteed. Another Stardew Valley 64bit extension appears to detect NATIVE?) - Stardew Valley (NON-NATIVE) - Subnautica - Subnautica: Below Zero - The Elder Scrolls: Arena - The Witcher - The Witcher 2 (NON-NATIVE ONLY) - The Witcher 3 - Valheim (NON-NATIVE ONLY) Extension Bugs: Extension always requires a .exe! No NATIVE linux launcher/executable detection: - BATTLETECH (NATIVE) - Borderlands 2 (NATIVE) - Cities: Skylines (NATIVE) - Half-Life 2 (NATIVE) - Half-Life 2 Deathmatch (NATIVE) - Half-Life 2: Update (NATIVE) - Into The Breach (NATIVE) - PAYDAY 2 (NATIVE) - Shadowrun Returns (NATIVE) - Team Fortress 2 (NATIVE) - Valheim (NATIVE) Extension rejects any detection attempt on a non-windows environment: - The Witcher 2 (NATIVE) (this despite containing seemingly appropriate switches for the linux launcher filenames) Invalid detection requirements: - DARK SOULS III (Manually adding 2 symbolic links resolves the detection issue. No fix is included in this version of the installer as a bug report is pending.) - Middle Earth: Shadow of War ('bink2w64_.dll' doesn't exist in my install and removing that one required file from the requirements enabled detection) - XCOM 2 (NATIVE) (The file and folder naming appears to not be identical to a Windows install minus .exe extensions) Other: - Counter-Strike: Source (NATIVE) - Fallout 76 (has many bugs pending) - Kerbal Space Program (NATIVE) (looks like it should work, but doesn't) - Star Wars: KOTOR II (NATIVE) - The Elder Scrolls Online - War Thunder script: extends: vortex-mod-manager-wine files: - ignored: | N/A:Select any file. It will be ignored by the scripts. Lutris may temporarily cache the file (copy it) to $HOME/.cache/lutris/installer/vortex-mod-manager until the installer closes. Adding a file requirement makes Lutris run the installer. Without this the included scripts would be skipped. You may also cancel here before any automated changes are made to the filesystem. game: exe: drive_c/Program Files/Black Tree Gaming Ltd/Vortex/Vortex.exe installer: ############### PROMPT FOR CLEARING LOG ############### - input_menu: description: | Would you like to clean the install.log file from the Vortex prefix? This file is automatically generated by NicBOMB's Vortex Lutris installers. This option is included for easy removal and RECOMMENDED. The file may get very large, as these installers have no verbosity controls. id: INSTALL options: - DOIT: "Clear the install.log" - SKIP: "Skip" preselect: DOIT - execute: description: Clearing install.log working_dir: $GAMEDIR env: INPUT_INSTALL: $INPUT_INSTALL command: | ## if [ "$INPUT_INSTALL" != "SKIP" ]; then echo "Cleared install.log" | tee install.log fi ############# PROMPT FOR SHORTCUT OPTIONS ############# - input_menu: description: | Since shortcuts created by Lutris do not work, this installer will write the desktop entries. Select how you would like to launch Vortex: id: DESKTOP options: - SKIP: "Skip creating ANY desktop entries anywhere." - LINK: "Create a link to the desktop entry in your applications folder on your Desktop." - COPY: "Create a copy of the desktop entry in your applications folder and Desktop folder." - LESS: "Create only a single desktop entry in your applications folder." preselect: SKIP ########## PROMPT FOR VORTEX BACKUP REMOVAL ########### - input_menu: description: | Would you like to remove all files ending in `.vortex_backup` from all game installation folders? These are created automatically by vortex and can interfere with some modding tools. This is normally unnecessary, but is included as an easy removal option. Only use this option if you are certain you don't need backups from ANY GAMES. id: BACKUPS options: - SKIP: "Skip deleting ANY files." - LOUD: "Create a text file logging what files were deleted." - MUTE: "Delete the files silently." preselect: SKIP - execute: description: working_dir: $GAMEDIR env: INPUT_BACKUPS: $INPUT_BACKUPS command: | #################### BEGIN SCRIPT ##################### echo "$( #################### VORTEX PREFIX #################### if [ "$VORTEX_PREFIX" == "" ]; then VORTEX_PREFIX="$PWD" fi if [ ! -d "$VORTEX_PREFIX" ]; then echo "ERROR: Invalid Vortex prefix \"$VORTEX_PREFIX\"" exit -1 else echo "INFO: Using Vortex prefix at \"$VORTEX_PREFIX\"" fi ####################################################### #################### DELETE FILES ##################### if [ "$INPUT_BACKUPS" != "SKIP" ]; then if [ -d "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common" ]; then echo "INFO: Located Steam directory \"$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common\"" if [ "$INPUT_BACKUPS" == "MUTE" ]; then find -L "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common" -type f -name "*.vortex_backup" -delete fi if [ "$INPUT_BACKUPS" == "LOUD" ]; then echo "INFO: Deleted the following .vortex_backup files:" find -L "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common" -type f -name "*.vortex_backup" -print -delete fi else echo "EROR: Invalid Steam directory \"$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common\"" fi fi ####################################################### )" |& tee -a install.log ##################### END SCRIPT ###################### #################### BEGIN LINKING #################### - execute: description: Creating Symbolic Links Targeting Known Game Locations working_dir: $GAMEDIR env: INPUT_GAMESLS: $INPUT_GAMESLS command: | ## ## requires: ## bash https://www.gnu.org/software/bash/ ## coreutils https://www.gnu.org/software/coreutils/ ## findutils https://www.gnu.org/software/findutils/ ## sed https://www.gnu.org/software/sed/ ## xdg-mime https://freedesktop.org/wiki/Software/xdg-utils/ #################### BEGIN SCRIPT ##################### echo "$( #################### VORTEX PREFIX #################### if [ "$VORTEX_PREFIX" == "" ]; then VORTEX_PREFIX="$PWD" fi if [ ! -d "$VORTEX_PREFIX" ]; then echo "ERROR: Invalid Vortex prefix \"$VORTEX_PREFIX\"" exit -1 else echo "INFO: Using Vortex prefix at \"$VORTEX_PREFIX\"" fi ####################################################### ########### CREATE NECESSARY VORTEX FOLDERS ########### mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming" mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local" mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/AppData/LocalLow" mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/Documents/My Games" mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/Local Settings" ln -s -T "$VORTEX_PREFIX/drive_c/users/$USER/Documents" "$VORTEX_PREFIX/drive_c/users/$USER/My Documents" 2>/dev/null ln -s -T "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming" "$VORTEX_PREFIX/drive_c/users/$USER/Application Data" 2>/dev/null ln -s -T "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local" "$VORTEX_PREFIX/drive_c/users/$USER/Local Settings/Application Data" 2>/dev/null mkdir -p "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common" mkdir -p "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/config" cat "$HOME/.steam/steam/steamapps/libraryfolders.vdf" | sed "s/\"\/.*\"$/\"C:\\\\\\\\Program Files \(x86\)\\\\\\\\Steam\"/g" | tee "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/libraryfolders.vdf" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/config/libraryfolders.vdf" 1>/dev/null ####################################################### ################ FUNCTION DECLARATIONS ################ game_attribute(){ declare -p ${1}\_${2} | grep -a -o ${1}\_${2}.* | sed "s/${1}\_${2}=//;s/\"//;s/\"$//" } library_apps(){ grep -a -o -e "\"apps\"[[:space:]]*{.*}$" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/config/libraryfolders.vdf" | grep -a -o -e "\".*\"[[:space:]]*\".*\"$" | sed "s/\"[[:space:]]*\".*\"$//;s/\"//" } manifest_attribute(){ grep -a -o -e "\"${2}\"[[:space:]]*\".*\"$" "${1}" | sed "s/\"${2}\"[[:space:]]*\"//;s/\"$//" } manifest_userconfig_attribute(){ manifest_attribute <(grep -a -o -P -z "\"UserConfig\"\s*{(\s*[^}]*\s*)*}" "${1}") "${2}" } manifest_mountedconfig_attribute(){ manifest_attribute <(grep -a -o -P -z "\"MountedConfig\"\s*{(\s*[^}]*\s*)*}" "${1}") "${2}" } find_appmanifests(){ STEAM_APPMANIFEST_PATHS=() # shadow with locals to prevent bad input local library="" local manifest="" local MANIFEST_LIST=() echo "INFO: Will attempt linking on the following detected games:" for library in "${STEAM_LIBRARY_PATHS[@]}"; do MANIFEST_LIST+=($(find "$library/steamapps" -mindepth 1 -maxdepth 1 -type f -name "appmanifest_*\.acf")) done for manifest in "${MANIFEST_LIST[@]}"; do echo "$(manifest_attribute "$manifest" "name")" STEAM_APPMANIFEST_PATHS+=($(echo "$manifest")) done } find_current_game_paths(){ local checkdir="$(echo "$CURRENT_APPMANIFEST" | sed "s/\/steamapps\/.\+/\/steamapps\/common\//")$CURRENT_INSTALLDIR" if [ -d "$checkdir" ]; then CURRENT_INSTALL_PATH="$checkdir" checkdir="$(echo "$CURRENT_APPMANIFEST" | sed "s/\/steamapps\/.\+/\/steamapps\/compatdata\/$CURRENT_APPID\/pfx/")" echo "GOOD: Found $CURRENT_GAME installation at $CURRENT_INSTALL_PATH" if [ "$(manifest_userconfig_attribute "$CURRENT_APPMANIFEST" "platform_override_dest")" == "linux" ] && [ "$(manifest_userconfig_attribute "$CURRENT_APPMANIFEST" "platform_override_source")" == "windows" ]; then echo "INFO: platform_override_dest: \"$(manifest_userconfig_attribute "$CURRENT_APPMANIFEST" "platform_override_dest")\" platform_override_source: \"$(manifest_userconfig_attribute "$CURRENT_APPMANIFEST" "platform_override_source")\"" if [ -d "$checkdir" ]; then CURRENT_PREFIX_PATH="$checkdir" echo "GOOD: Found $CURRENT_GAME Proton Prefix at $CURRENT_PREFIX_PATH" else echo "INFO: Proton Prefix for $CURRENT_GAME not found at $checkdir." checkdir="${STEAM_LIBRARY_PATHS[0]}/steamapps/compatdata/$CURRENT_APPID/pfx/" echo "INFO: Trying $checkdir instead!" if [ -d "$checkdir" ]; then CURRENT_PREFIX_PATH="$checkdir" echo "GOOD: Found $CURRENT_GAME Proton Prefix in default Steam Library at $CURRENT_PREFIX_PATH" echo "WARN: This feature should only be automatically used for Steam Deck!" else CURRENT_PREFIX_PATH="" echo "WARN: $CURRENT_GAME is configured for Proton but no Prefix was found!" echo "WARN: Its Proton Prefix is missing or has not been run yet!" echo "WARN: Launch the game with Proton via Steam before modding!" fi fi elif [ -d "$checkdir" ]; then CURRENT_PREFIX_PATH="$checkdir" echo "WARN: $CURRENT_GAME isn't configured for Proton but a Prefix was found!" echo "GOOD: Found $CURRENT_GAME Proton Prefix at $CURRENT_PREFIX_PATH" else CURRENT_PREFIX_PATH="" echo "INFO: No Proton Prefix for $CURRENT_GAME found!" fi else CURRENT_INSTALL_PATH="" CURRENT_PREFIX_PATH="" checkdir="$CURRENT_INSTALL_PATH/steamapps/compatdata/$CURRENT_APPID/pfx" if [ -d "$checkdir" ]; then echo "WARN: A Proton Prefix for $CURRENT_GAME exists at $checkdir but no installation was detected!" echo "WARN: If $CURRENT_GAME was uninstalled, Steam may have left behind files, like save data it syncs with the Steam Cloud." else echo "INFO: No installation or Proton Prefix of $CURRENT_GAME found!" fi fi } link_sub_targets(){ local TARGET="" local checklink="" local DIR_LS=("${2}"/*) for TARGET in "${DIR_LS[@]}"; do local foldername="$(basename "$TARGET")" checklink="${1}/$foldername" if [ -h "$checklink" ]; then unlink "$checklink" fi if [ "$foldername" != "Vortex" ] && [ "$foldername" != "openvr" ] && [ "$foldername" != "Microsoft" ] && [ -d "$TARGET" ]; then ln -s "$TARGET" "${1}/" fi done } create_current_game_symlinks(){ if [ -d "$CURRENT_INSTALL_PATH" ]; then local check="$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common/$CURRENT_INSTALLDIR" if [ -h "$check" ]; then unlink "$check" fi check="$CURRENT_INSTALL_PATH" if [ -d "$check" ]; then ln -s "$check" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common/" fi check="$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/appmanifest_$CURRENT_APPID.acf" if [ -h "$check" ]; then unlink "$check" fi check="$CURRENT_APPMANIFEST" if [ -f "$check" ]; then ln -s "$check" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/" fi fi if [ -d "$CURRENT_PREFIX_PATH" ]; then link_sub_targets "$VORTEX_PREFIX/drive_c/users/$USER/My Documents/My Games" "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/My Documents/My Games" link_sub_targets "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming" "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/Roaming" link_sub_targets "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local" "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/Local" link_sub_targets "$VORTEX_PREFIX/drive_c/users/$USER/AppData/LocalLow" "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/LocalLow" fi } ####################################################### ################### PATH CANDIDATES ################### IFS=$'\n' STEAM_LIBRARY_PATHS=() echo "INFO: Steam Libraries:" for library in $(grep -a -o "/[^\"]*" $HOME/.steam/steam/steamapps/libraryfolders.vdf); do if [ -d "$library" ] && [ -d "$library/steamapps/common" ]; then # remove any installdir or compatdata directories uninstalled games rmdir --ignore-fail-on-non-empty $library/steamapps/common/* 2>/dev/null if [ -d "$library/steamapps/compatdata/" ]; then STEAM_COMPATDATA=("$(find "$library/steamapps/compatdata/" -type d -name "pfx")") for compatdata in ${STEAM_COMPATDATA}; do rmdir --ignore-fail-on-non-empty "$compatdata" 2>/dev/null done fi STEAM_LIBRARY_PATHS+=("$library") echo "$library" fi done ####################################################### ################### CREATE SYMLINKS ################### find_appmanifests for CURRENT_APPMANIFEST in "${STEAM_APPMANIFEST_PATHS[@]}"; do CURRENT_APPID="$(manifest_attribute "$CURRENT_APPMANIFEST" "appid")" CURRENT_GAME="$(manifest_attribute "$CURRENT_APPMANIFEST" "name")" CURRENT_INSTALLDIR="$(manifest_attribute "$CURRENT_APPMANIFEST" "installdir")" echo "INFO: CURRENT_APPID=\"$CURRENT_APPID\" CURRENT_GAME=\"$CURRENT_GAME\" CURRENT_INSTALLDIR=\"$CURRENT_INSTALLDIR\"" find_current_game_paths create_current_game_symlinks done ####################################################### )" |& tee -a install.log ##################### END SCRIPT ###################### ##################### END LINKING ##################### ################### BEGIN REGEDITS #################### ######################## STEAM ######################## - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_CURRENT_USER\Software\Valve\Steam type: REG_SZ key: "SteamPath" value: C:\\Program Files (x86)\\Steam description: "Adding Steam to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_CURRENT_USER\Software\Valve\Steam type: REG_SZ key: "SteamExe" value: C:\\Program Files (x86)\\Steam\\Steam.exe description: "Adding Steam to the Wine Prefix Registry 2/2" ##################### DARK SOULS ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\NAMCO BANDAI GAMES\DARK SOULS type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls Prepare to Die Edition description: "Adding DARK SOULS to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\211420 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls Prepare to Die Edition description: "Adding DARK SOULS to the Wine Prefix Registry 2/2" ################ DARK SOULS REMASTERED ################ - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\570940 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\DARK SOULS REMASTERED description: "Adding DARK SOULS REMASTERED to the Wine Prefix Registry 1/1" #################### Dark Souls II #################### - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\236430 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls II description: "Adding DARK SOULS II to the Wine Prefix Registry 1/1" ####### Dark Souls II Scholar of the First Sin ######## - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\335300 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls II Scholar of the First Sin description: "Adding DARK SOULS II Scholar of the First Sin to the Wine Prefix Registry 1/1" ################### DARK SOULS III #################### - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\374320 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\DARK SOULS III description: "Adding DARK SOULS III to the Wine Prefix Registry 1/1" ##################### ELDEN RING ###################### - task: # Developer uninstall path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ELDEN RING_is1 type: REG_SZ key: "InstallLocation" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\ELDEN RING description: "Adding ELDEN RING to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\1245620 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\ELDEN RING description: "Adding ELDEN RING to the Wine Prefix Registry 2/2" ###################### Fallout 3 ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 3 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 description: "Adding Fallout 3 to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22300 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 description: "Adding Fallout 3 to the Wine Prefix Registry 2/2" ######### Fallout 3 Game of the Year Edition ########## - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 3 goty type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 goty description: "Adding Fallout 3 Game of the Year Edition to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22370 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 goty description: "Adding Fallout 3 Game of the Year Edition to the Wine Prefix Registry 2/2" ###################### Fallout 4 ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout4 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 description: "Adding Fallout 4 to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\377160 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 description: "Adding Fallout 4 to the Wine Prefix Registry 2/2" #################### Fallout 4 VR ##################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 4 VR type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 VR description: "Adding Fallout 4 VR to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\611660 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 VR description: "Adding Fallout 4 VR to the Wine Prefix Registry 2/2" ##################### Fallout 76 ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Fallout 76 type: REG_SZ key: "Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout76 description: "Adding Fallout 76 to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\1151340 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout76 description: "Adding Fallout 76 to the Wine Prefix Registry 2/2" ################## Fallout New Vegas ################## - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\FalloutNV type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout New Vegas description: "Adding Fallout New Vegas to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22380 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout New Vegas description: "Adding Fallout New Vegas to the Wine Prefix Registry 2/2" ################ Kerbal Space Program ################# - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\220200 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Kerbal Space Program description: "Adding Kerbal Space Program to the Wine Prefix Registry 1/1" ############# MechWarrior 5: Mercenaries ############## - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\784080 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\MechWarrior 5 Mercenaries description: "Adding MechWarrior 5: Mercenaries to the Wine Prefix Registry 1/1" ############# Middle Earth: Shadow of War ############# - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\356190 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\ShadowOfWar description: "Adding Middle Earth: Shadow of War to the Wine Prefix Registry 1/1" ################ Monster Hunter: World ################ - task: # Developer uninstall path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 582010 type: REG_SZ key: "InstallLocation" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Monster Hunter World description: "Adding Monster Hunter: World to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\582010 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Monster Hunter World description: "Adding Monster Hunter: World to the Wine Prefix Registry 2/2" ###################### Morrowind ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Morrowind type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Morrowind description: "Adding Morrowind to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22320 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Morrowind description: "Adding Morrowind to the Wine Prefix Registry 2/2" ###################### Oblivion ####################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Oblivion type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Oblivion description: "Adding Oblivion to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22330 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Oblivion description: "Adding Oblivion to the Wine Prefix Registry 2/2" ####################### Sekiro ######################## - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\814380 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Sekiro description: "Adding Sekiro: Shadows Die Twice to the Wine Prefix Registry 1/1" ####################### Skyrim ######################## - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim description: "Adding Skyrim to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\72850 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim description: "Adding Skyrim to the Wine Prefix Registry 2/2" ############### Skyrim Special Edition ################ - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim Special Edition type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim Special Edition description: "Adding Skyrim Special Edition to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\489830 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim Special Edition description: "Adding Skyrim Special Edition to the Wine Prefix Registry 2/2" ###################### Skyrim VR ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim VR type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\SkyrimVR description: "Adding Skyrim VR to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\611670 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\SkyrimVR description: "Adding Skyrim VR to the Wine Prefix Registry 2/2" ################### Stardew Valley #################### - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\413150 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Stardew Valley description: "Adding Stardew Valley to the Wine Prefix Registry 1/1" ##################### The Witcher ##################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\CD Project Red\Witcher type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher Enhanced Edition description: "Adding The Witcher to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\20900 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher Enhanced Edition description: "Adding The Witcher to the Wine Prefix Registry 2/2" ###################### The Witcher 2 ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\CD Project Red\The Witcher 2 type: REG_SZ key: "InstallFolder" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\the witcher 2 description: "Adding The Witcher 2 to the Wine Prefix Registry 1/1" ###################### The Witcher 3 ###################### - task: # Developer install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\CD Project Red\The Witcher 3 type: REG_SZ key: "InstallFolder" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher 3 description: "Adding The Witcher 3 to the Wine Prefix Registry 1/2" - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\209230 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher 3 description: "Adding The Witcher 3 to the Wine Prefix Registry 2/2" ####################### Valheim ####################### - task: # Steam install path name: set_regedit prefix: $GAMEDIR path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\892970 type: REG_SZ key: "Installed Path" value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Valheim description: "Adding Valheim to the Wine Prefix Registry 1/1" #################### END REGEDITS ##################### - execute: description: Deploying Selected Desktop Entry Choice working_dir: $GAMEDIR env: INPUT_DESKTOP: $INPUT_DESKTOP command: | ## #################### BEGIN SCRIPT ##################### echo "$( #################### VORTEX PREFIX #################### if [ "$VORTEX_PREFIX" == "" ]; then VORTEX_PREFIX="$PWD" fi if [ ! -d "$VORTEX_PREFIX" ]; then echo "ERROR: Invalid Vortex prefix \"$VORTEX_PREFIX\"" exit -1 else echo "INFO: Using Vortex prefix at \"$VORTEX_PREFIX\"" fi ####################################################### ################ CREATE DESKTOP ENTRY ################# WINE_BIN_PATH="$(dirname "$WINEBIN")" DESKTOP="$HOME/Desktop" DESKTOP_FNAME="vortex-wine-downloads-handler.desktop" DESKTOP_APPLS="$HOME/.local/share/applications/" DESKTOP_FPATH="$DESKTOP_APPLS$DESKTOP_FNAME" DESKTOP_ENTRY=$(cat << END [Desktop Entry] Type=Application Categories=Game;Network; Path=/drive_c/Program Files/Black Tree Gaming Ltd/Vortex Exec=sh -c "env WINEPREFIX="" PATH=":\$PATH" wine Vortex.exe -d %u 1>/dev/null 2>/dev/null" Name=Vortex Wine Comment=Vortex Launcher and NXM Protocol Download Handler Icon=lutris_vortex-mod-manager MimeType=x-scheme-handler/nxm;x-scheme-handler/nxm-protocol END ) if [ -f "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd/Vortex.desktop" ]; then rm -f "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd/Vortex.desktop" rmdir -p "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd" fi if [ "$INPUT_DESKTOP" != "SKIP" ] && [ "$INPUT_DESKTOP" != "" ]; then echo "INFO: Making an entry for Vortex at \"$DESKTOP_FPATH\"" if [ -f "$DESKTOP_FPATH" ]; then rm -f "$DESKTOP_FPATH" fi ESCAPED_VORTEX_PREFIX=$(echo $VORTEX_PREFIX | sed 's/\//\\\//g') ESCAPED_WINE_BIN_PATH=$(echo $WINE_BIN_PATH | sed 's/\//\\\//g') echo "$DESKTOP_ENTRY" | sed "s//$ESCAPED_VORTEX_PREFIX/g; s//$ESCAPED_WINE_BIN_PATH/g" > "$DESKTOP_FPATH" xdg-mime default "$DESKTOP_FPATH" x-scheme-handler/nxm xdg-mime default "$DESKTOP_FPATH" x-scheme-handler/nxm-protocol if [ "$INPUT_DESKTOP" == "COPY|LINK" ] && [ -f "$DESKTOP/$DESKTOP_FNAME" ]; then rm -f "$DESKTOP/$DESKTOP_FNAME" fi if [ "$INPUT_DESKTOP" == "COPY" ]; then cp "$DESKTOP_FNAME" "$DESKTOP" fi if [ "$INPUT_DESKTOP" == "LINK" ]; then ln -s -f "$DESKTOP_FPATH" "$DESKTOP" fi fi ####################################################### )" |& tee -a install.log ##################### END SCRIPT ###################### ####################################################### ######################## DONE ######################### install_complete_text: | You can install games to any drive and use Hardlink Deployment! The VFS (Virtual File System) has all drives mounted to directories which exist in the Z: drive (points to '/'). Use the Vortex suggestion or make a folder to substitute for the mod staging folder on ANY drive. Only Hardlink Deployment has been tested. Some untested games will automatically select other deployment strategies. See this issue comment for more information: https://github.com/Nexus-Mods/Vortex/issues/9629#issuecomment-1013658187 Uninstalling Vortex in Lutris will leave the desktop entry. DO NOT use the Play button provided by Lutris to launch Vortex! DO NOT use the Play button provided by Vortex to launch titles! DO NOT USE THE LAUNCH BUTTON BELOW THIS TEXT ####################################################### wine: dxvk: true version: lutris-7.2-x86_64 ```

If that didn't work I would also request your libraryfolders.vdf. I make a modified copy of that file into your Vortex installation prefix at VORTEX-PREFIX/drive_c/Program Files (x86)/Steam/steamapps/. If you installed in the default location replace VORTEX-PREFIX with vortex-mod-manager. This may be where Steam tells all games on a drive to use a different compatdata path.

MPritsch commented 2 years ago

So, I would like you to move or delete all Oblivion content and reinstall if that's okay. I concur with your assessment; it was probably MO2 doing the reasonable thing and creating files in the most likely valid prefix necessary for Oblivion in a regular environment.

I just transfered a different game from the base storage to sd-card. The compdata folder was copied to the sd-card, but still exists on the base storage. When I manually delete the one on the base-drive, it creates a new one on the base-drive. There is also no symlink to the sd-card. Which means the one on the sd-card is completely pointless as steam does not use it -> this looks like a bug. With another game which was solely installed on the sd-card, the compdata folder was created on the base storage. I don't think ModOrganizer 2 was the problem here, just happens to find the same folder as vortex.

Don't worry about that, I have already thought of the solution for this situation exactly. I'm going to check the primary location, which should fail on a Steam Deck, then also check the default Steam Library's compatdata folder since that cannot be removed. My best guess is that Valve keeps the compatdata folder on the Steam Deck's main drive to allow your game saves to be backed up to the Steam Cloud even if the sd card is ejected. Entirely reasonable IMO. The actual size of the compatdata necessary for your games should also be very small anyways.

Looking forward to an easy working solution :)

Try the following symlinker Lutris extension corresponding to the installer you used AFTER cleaning Oblivion's files. If this works, it may also enable Vortex to detect the other games you have already installed, played once, and which I indicated are listed in the Supported or Untested categories above, like The Witcher 3.

Will do tomorrow

NicBOMB commented 2 years ago

~I assumed this was due to Vortex creating the folder when setting up. Although my working theory is that it has to do with me trying to use Mod Organizer 2 beforehand and it creating that folder, because I found a ModOrganizer folder on there. In the install.log below it looks like the folder on the sd-card was already present beforehand, which supports this theory.~

@MPritsch I just saw your edits after making my reply. I actually expected and saw for myself some of the behavior from Steam you're describing on my own system. I already added warning about some of these in previous versions of my installer, but opted to remove some to cleanup my logging.

EDIT: I just discovered when moving a game between drives that steam leaves behind the compdata folder on the base drive and creates a new one on the sd card. Deleting the one on the base drive still ignores the one on the sd-card and creates a new one upon being launched. This looks like a bug with steam/steam-os?

I believe it's related to how Steam tries to keep your game save files for Proton games untouched on a non-removable disk to guarantee it can be backed up. When you say, "creates a new one upon being launched." does that mean a new folder is created on the SD card library's compatdata directory or the default library's compatdata directory?

EDIT 2: Launching a game which was originally installed on the sd-card creates a compdata folder on the base drive. This means that there should never be a compdata folder on the sd-card. However the moving process seems to be broken in this regard. Not sure what vortex could do about that :/ Maybe a warning that there are multiple compdata folders?

That's tricky. I have refrained from using any file deleting commands which were not strictly necessary, and especially avoided touching any game or compatdata files directly. AFAIK Steam only cleans what it doesn't need to backup to the cloud, even if the save data in the game's compatdata directory has already been backed up or a new compatdata folder exists.

So, I would like you to move or delete all Oblivion content and reinstall if that's okay. I concur with your assessment; it was probably MO2 doing the reasonable thing and creating files in the most likely valid prefix necessary for Oblivion in a regular environment.

I just transfered a different game from the base storage to sd-card. The compdata folder was copied to the sd-card, but still exists on the base storage. When I manually delete the one on the base-drive, it creates a new one on the base-drive. There is also no symlink to the sd-card. Which means the one on the sd-card is completely pointless as steam does not use it -> this looks like a bug. With another game which was solely installed on the sd-card, the compdata folder was created on the base storage. I don't think ModOrganizer 2 was the problem here, just happens to find the same folder as vortex.

I'm not sure if it's a bug or intentional to support Steam Cloud saves/data. I think the best option is to ask users if they are on a Steam Deck and remove compatdata folders from the SD Card's library whenever they are detected, since as you indicated and I expected, those folders will only exist if you move a game onto the SD Card. Even installing directly to the SD Card won't make a compatdata folder for the game on the SD Card since that only happens on game launch, which will prompt Steam to make a folder on the main storage regardless. However I don't want to try deleting entire compatdata folders on any drives just yet. I will instead add a static warning message about games moved from the internal to removable storage. Really this issue hits the most difficult aspect of supporting the Steam Deck; handling the removable drive slot. I hadn't actually considered what that meant seriously till now. ~oops~ It is already stated above and in the installer you need to run the linker every time a new game is installed, however the removable drive slot adds a new condition. For example, if you have multiple SD Cards used to store games, each one needs to be mounted and have the linker run once to add the games installed to it to the Vortex prefix. If you add a game to it and want to mod it in Vortex, you need to run the linker again. For now that's tedious, but reasonable. There may be more answers to the drive configuration and/or potential for automation based on the libraryfolders.vdf if it has more fields than a regular Steam install as well.

Thanks for the feedback!

MPritsch commented 2 years ago

So, I would like you to move or delete all Oblivion content and reinstall if that's okay.

Try the following symlinker Lutris extension corresponding to the installer you used AFTER cleaning Oblivion's files. If this works, it may also enable Vortex to detect the other games you have already installed, played once, and which I indicated are listed in the Supported or Untested categories above, like The Witcher 3.

@NicBOMB Instead of deleting I just renamed the common folder and the compdata folder on both internal storage and sd-card. After that I uninstalled Oblivion via Steam and reinstalled it. After the download I ran the symlinker and looked at the install.log:

GOOD: Found The Elder Scrolls IV: Oblivion  installation at /run/media/mmcblk0p1/steamapps/common/Oblivion
INFO: platform_override_dest: "linux" platform_override_source: "windows"
INFO: Proton Prefix for The Elder Scrolls IV: Oblivion  not found at /run/media/mmcblk0p1/steamapps/compatdata/22330/pfx
INFO: Trying /home/deck/.local/share/Steam/steamapps/compatdata/22330/pfx/ instead!
GOOD: Found The Elder Scrolls IV: Oblivion  Proton Prefix in default Steam Library at /home/deck/.local/share/Steam/steamapps/compatdata/22330/pfx/

Looks like the correct folder was found after first searching on the sd-card.

I made a mistake because I then launched vortex. It complained about not being able to find the correct loot path. Also it shows all plugins as disabled, probably because the plugins.txt is missing in the default compdata configuration. So I moved the compdata folder and relaunched vortex but the error persisted.

Rerunning the symlinker again fixed it though.

NicBOMB commented 2 years ago

@NicBOMB Instead of deleting I just renamed the common folder and the compdata folder on both internal storage and sd-card. After that I uninstalled Oblivion via Steam and reinstalled it. After the download I ran the symlinker and looked at the install.log:

GOOD: Found The Elder Scrolls IV: Oblivion  installation at /run/media/mmcblk0p1/steamapps/common/Oblivion
INFO: platform_override_dest: "linux" platform_override_source: "windows"
INFO: Proton Prefix for The Elder Scrolls IV: Oblivion  not found at /run/media/mmcblk0p1/steamapps/compatdata/22330/pfx
INFO: Trying /home/deck/.local/share/Steam/steamapps/compatdata/22330/pfx/ instead!
GOOD: Found The Elder Scrolls IV: Oblivion  Proton Prefix in default Steam Library at /home/deck/.local/share/Steam/steamapps/compatdata/22330/pfx/

Looks like the correct folder was found after first searching on the sd-card.

All that looks great!

I made a mistake because I then launched vortex. It complained about not being able to find the correct loot path. Also it shows all plugins as disabled, probably because the plugins.txt is missing in the default compdata configuration. So I moved the compdata folder and relaunched vortex but the error persisted.

Rerunning the symlinker again fixed it though.

Where exactly did you move Oblivion's compatdata folder to? It should remain in the default /home/deck/.local/share/Steam/steamapps/compatdata/22330/ now. If it was still in the SD Card, then moving it to the compatdata folder alone would have resolved the issue. The links were already pointing there, although running the linker multiple times won't break anything.

MPritsch commented 2 years ago

Where exactly did you move Oblivion's compatdata folder to? It should remain in the default /home/deck/.local/share/Steam/steamapps/compatdata/22330/ now. If it was still in the SD Card, then moving it to the compatdata folder alone would have resolved the issue. The links were already pointing there, although running the linker multiple times won't break anything.

I copied them to the internal storage. The sd-card now has no compdata folder for the game.

NicBOMB commented 2 years ago

Where exactly did you move Oblivion's compatdata folder to?

I copied them to the internal storage. The sd-card now has no compdata folder for the game.

Prefect, that's exactly what I'd expect and recommend. Right now we are waiting on updates to the steam-for-linux issue I mentioned this issue in a few days ago.

Planned Workaround

I will add a script to move all game compatdata folders detected on the SD Card back to the internal storage for Steam Deck users. It will be another option like the Vortex Backup removal toggle in the current symlinker. If Valve wants the compatdata to remain on the internal storage only and/or implements my suggestion in that thread about linking the expected compatdata folder location in the removable drive to the file's location on the internal storage, the script will be relevant until the bug about moving the game to a library folder on a removable drive is resolved. If Valve wants the compatdata to follow the game's steam library location exactly, as is done currently when moving the game to another steam library folder, then the script will be immediately obsoleted.

NicBOMB commented 2 years ago

Ive been trying to manage my already modded stardew valley installation.

@Yu-457 were you able to manage mods (download, install, deploy, remove, and uninstall) with Vortex in both Stardew Valley NATIVE and PROTON?

Yu-457 commented 2 years ago

@NicBOMB Hey, not yet. I had a busy week and no time to try it yet. I will do this week(end) and give you a headsup. All my tests so far were only for the proton version

Yu-457 commented 2 years ago

Ive been trying to manage my already modded stardew valley installation.

@Yu-457 were you able to manage mods (download, install, deploy, remove, and uninstall) with Vortex in both Stardew Valley NATIVE and PROTON?

Hey, so i managed to do some testing. and its been only partly succesfull. I did a reinstall of the whole proton setup. (i didnt uninstall anything before tho, idk how to do that under linux ^^°) after the reinstall the config file contained the new commands you mentioned as well. I did not manage to get it consistently to work. Overall the whole behaviour seemed to be weirdly inconsitent. thats what i tried ->

I tried to get the first mod from nexus, nothing happend. I changed firefox back to "always ask" and tried to figure out which proton link was the working one. After some clicking i got it to download once. I saved that option so firefox would not ask anymore. tried with a mod collection - nothing. Tried with a normal mod - nothing. set it back to always ask and tried again - worked. tried it again with another mod - stopped working again.

so in the end i managed to download and depoy smapi, but nothing else apart. sorry

im kinda done with stardew and might start the witcher 3 soonish. i can do some fresh testing with an unmodded game there. Maybe its the stardew installation thats kinda botched too already.

NicBOMB commented 2 years ago

Hey, so i managed to do some testing. and its been only partly succesfull. I did a reinstall of the whole proton setup. (i didnt uninstall anything before tho, idk how to do that under linux ^^°)

How to Uninstall

Uninstall from Lutris and/or delete the prefix directory Vortex was installed to. This will sufficiently delete the app (unless Lutris decides not to delete anything). You may have some lingering desktop entries in your apps folder, however they will fail when used. For example, if on the plasma desktop (ie. steamdeck) the desktop environment itself should prompt for entry removal when trying an entry with a missing target. Since the literal `Path=` to Vortex is gone, the entry shouldn't execute. No cleanup script should be needed. Uninstall via Lutris or deleting Vortex manually then things will get cleaned up as they do. No files are ever moved by installing Vortex. Links are simply created in the Vortex directory. However, if installing mods then uninstalling Vortex, the mods _may_ remain. Specifically, if using the symlink deployment strategy, the mods may be deleted with Vortex depending on the mod downloads and staging folder locations (user specified). Mods installed via Hardlink deployment were unaffected by uninstalling in my experience.

after the reinstall the config file contained the new commands you mentioned as well. I did not manage to get it consistently to work. Overall the whole behaviour seemed to be weirdly inconsitent. thats what i tried ->

I tried to get the first mod from nexus, nothing happend. I changed firefox back to "always ask" and tried to figure out which proton link was the working one. After some clicking i got it to download once. I saved that option so firefox would not ask anymore. tried with a mod collection - nothing. Tried with a normal mod - nothing. set it back to always ask and tried again - worked. tried it again with another mod - stopped working again.

More Optional Instructions

I strongly recommend setting Firefox to "always ask", then either re-login or `killall firefox` and try downloading and selecting when prompted again. If that doesn't work then I also recommend checking `~/.local/share/applications/mimeinfo.cache` It should have lines containing something like the following depending on the installer: ``` x-scheme-handler/nxm=vortex-proton-downloads-handler.desktop;vortex-wine-downloads-handler.desktop; x-scheme-handler/nxm-protocol=vortex-proton-downloads-handler.desktop;vortex-wine-downloads-handler.desktop; ``` The proton installer sets `vortex-proton-downloads-handler.desktop`. The wine installer sets `vortex-wine-downloads-handler.desktop`. If you install both, each will appear as a selectable option in the default applications list in your browser (like firefox). Make sure those are set correctly. I know you already saw it but I will link back to the earlier steps also mentioned to [fix downloading previously](https://github.com/Nexus-Mods/Vortex/issues/10686#issuecomment-1166563906), for those who haven't read that earlier comment.

so in the end i managed to download and depoy smapi, but nothing else apart. sorry

That is exactly what I needed! The default application configuration is a bit cumbersome when moving from one install to another, but it does download mods and install them. It's okay if you aren't doing further modding, that's still good to know for others who want to try deploying mods to Stardew Valley.

im kinda done with stardew and might start the witcher 3 soonish. i can do some fresh testing with an unmodded game there. Maybe its the stardew installation thats kinda botched too already.

Yeah, Stardew Valley requires two extensions for some reason?!? Feels like an extension problem. Nothing appears wrong with the Vortex setup. @Yu-457 Lmk how Witcher 3 goes too!

FederAndInk commented 2 years ago

Is this ready to be published on lutris.net yet? It could be great if it could be published.

FederAndInk commented 2 years ago

I get this when trying your script

Screenshot_20220720_135355

NicBOMB commented 2 years ago

I get this when trying your script

Screenshot_20220720_135355

That should be included with the Lutris runtime AFAIK. Make sure to add the runner from the list in your wine runner settings for Lutris if it's not being downloaded automatically. I will make a version ready to publish rn. My script is already Steam Deck tested and is ready for general testing. Hopefully publishing a beta build will get more replies about mod deployment.

FederAndInk commented 2 years ago

I get this when trying your script Screenshot_20220720_135355

That should be included with the Lutris runtime AFAIK. Make sure to add the runner from the list in your wine runner settings for Lutris if it's not being downloaded automatically. I will make a version ready to publish rn. My script is already Steam Deck tested and is ready for general testing. Hopefully publishing a beta build will get more replies about mod deployment.

The runner is installed, but this version isn't available, it worked with lutris-GE-Proton7-22 though

I don't know why I don't have a lot of wine/proton/proton-GE available

NicBOMB commented 2 years ago

The runner is installed, but this version isn't available, it worked with lutris-GE-Proton7-22 though

I expected it to be safe to update the runner version more frequently, especially since Vortex appears to run on most any Wine version included by default with most distros, Lutris, AND latest. It's really everything else my script does to automate installing which makes Vortex convenient enough for end-users.

It seems other installers were affected by this exact same issue about lutris-GE-Proton7-16-x86_64 as well.

Thankfully we already know the wine installer is working and that version won't be outdated anytime soon so I'll get that uploaded. Users can manually select a specific wine runner version if they'd prefer to prevent any further updates. There's no downside to removing the version requirement altogether. The installer will continue running latest lutris wine instead.

NicBOMB commented 2 years ago

I just submitted my script to the Vortex Mod Manager Lutris page after testing it. I had to flatten the bash scripts into one line each so the installer's execute tasks look awful now, but at least it installs. If there were a better strategy for easily setting up a wine prefix with the necessary registry keys or extensions didn't require such keys, then a simple bash script to install Vortex without Lutris would be a better solution.

Submitted script:

```yaml files: - setup: https://github.com/Nexus-Mods/Vortex/releases/download/v1.5.13/vortex-setup-1.5.13.exe game: exe: drive_c/Program Files/Black Tree Gaming Ltd/Vortex/Vortex.exe install_complete_text: 'Vortex was installed successfully! You can install games to any drive and use Hardlink Deployment by creating a staging folder in the "Z:" drive! All mounted drives should exist in the "Z:" drive (points to "/"). Use the Vortex suggestion or make a folder to substitute for the mod staging folder if prompted. Only Hardlink Deployment has been tested. Some untested games will automatically select other deployment strategies. Uninstalling Vortex will leave the desktop entry. It can be removed manually. DO NOT use the Play button provided by Lutris to launch Vortex! DO NOT use the Play button provided by Vortex to launch titles! DO NOT USE THE LAUNCH BUTTON BELOW THIS TEXT' installer: - input_menu: description: 'DO NOT CREATE A desktop shortcut, application menu shortcut, or steam shortcut! You can safely cancel installation and restart installation without those options, now. Since shortcuts created by Lutris will not work, this installer will write the desktop entries. Select how you would like to launch Vortex: ' id: DESKTOP options: - LINK: Create a link to the desktop entry in your applications folder on your Desktop. - COPY: Create a copy of the desktop entry in your applications folder and Desktop folder. - LESS: Create only a single desktop entry in your applications folder. preselect: LINK - task: app: win10 dotnet48 corefonts description: Installing .NET 4.8 and Corefonts via winetricks name: winetricks prefix: $GAMEDIR - execute: command: 'echo "$(if [ "$VORTEX_PREFIX" == "" ];then VORTEX_PREFIX="$PWD";fi;if [ ! -d "$VORTEX_PREFIX" ];then echo "ERROR: Invalid Vortex prefix \"$VORTEX_PREFIX\"";exit -1;else echo "INFO: Using Vortex prefix at \"$VORTEX_PREFIX\"";fi;mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming";mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local";mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/AppData/LocalLow";mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/Documents/My Games";mkdir -p "$VORTEX_PREFIX/drive_c/users/$USER/Local Settings";ln -s -T "$VORTEX_PREFIX/drive_c/users/$USER/Documents" "$VORTEX_PREFIX/drive_c/users/$USER/My Documents" 2>/dev/null;ln -s -T "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming" "$VORTEX_PREFIX/drive_c/users/$USER/Application Data" 2>/dev/null;ln -s -T "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local" "$VORTEX_PREFIX/drive_c/users/$USER/Local Settings/Application Data" 2>/dev/null;mkdir -p "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common";mkdir -p "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/config";cat "$HOME/.steam/steam/steamapps/libraryfolders.vdf" | sed "s/\"\/.*\"$/\"C:\\\\\\\\Program Files \(x86\)\\\\\\\\Steam\"/g" | tee "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/libraryfolders.vdf" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/config/libraryfolders.vdf" 1>/dev/null;game_attribute(){ declare -p ${1}\_${2} | grep -a -o ${1}\_${2}.* | sed "s/${1}\_${2}=//;s/\"//;s/\"$//";};library_apps(){ grep -a -o -e "\"apps\"[[:space:]]*{.*}$" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/config/libraryfolders.vdf" | grep -a -o -e "\".*\"[[:space:]]*\".*\"$" | sed "s/\"[[:space:]]*\".*\"$//;s/\"//";};manifest_attribute(){ grep -a -o -e "\"${2}\"[[:space:]]*\".*\"$" "${1}" | sed "s/\"${2}\"[[:space:]]*\"//;s/\"$//";};manifest_userconfig_attribute(){ manifest_attribute <(grep -a -o -P -z "\"UserConfig\"\s*{(\s*[^}]*\s*)*}" "${1}") "${2}";};manifest_mountedconfig_attribute(){ manifest_attribute <(grep -a -o -P -z "\"MountedConfig\"\s*{(\s*[^}]*\s*)*}" "${1}") "${2}";};find_appmanifests(){ STEAM_APPMANIFEST_PATHS=();local library="";local manifest="";local MANIFEST_LIST=();echo "INFO: Will attempt linking on the following detected games:";for library in "${STEAM_LIBRARY_PATHS[@]}";do MANIFEST_LIST+=($(find "$library/steamapps" -mindepth 1 -maxdepth 1 -type f -name "appmanifest_*\.acf"));done;for manifest in "${MANIFEST_LIST[@]}";do echo "$(manifest_attribute "$manifest" "name")";STEAM_APPMANIFEST_PATHS+=($(echo "$manifest"));done;};find_current_game_paths(){ local checkdir="$(echo "$CURRENT_APPMANIFEST" | sed "s/\/steamapps\/.\+/\/steamapps\/common\//")$CURRENT_INSTALLDIR";if [ -d "$checkdir" ];then CURRENT_INSTALL_PATH="$checkdir";checkdir="$(echo "$CURRENT_APPMANIFEST" | sed "s/\/steamapps\/.\+/\/steamapps\/compatdata\/$CURRENT_APPID\/pfx/")";echo "GOOD: Found $CURRENT_GAME installation at $CURRENT_INSTALL_PATH";if [ "$(manifest_userconfig_attribute "$CURRENT_APPMANIFEST" "platform_override_dest")" == "linux" ] && [ "$(manifest_userconfig_attribute "$CURRENT_APPMANIFEST" "platform_override_source")" == "windows" ];then echo "INFO: platform_override_dest: \"$(manifest_userconfig_attribute "$CURRENT_APPMANIFEST" "platform_override_dest")\" platform_override_source: \"$(manifest_userconfig_attribute "$CURRENT_APPMANIFEST" "platform_override_source")\"";if [ -d "$checkdir" ];then CURRENT_PREFIX_PATH="$checkdir";echo "GOOD: Found $CURRENT_GAME Proton Prefix at $CURRENT_PREFIX_PATH";else echo "INFO: Proton Prefix for $CURRENT_GAME not found at $checkdir";checkdir="${STEAM_LIBRARY_PATHS[0]}/steamapps/compatdata/$CURRENT_APPID/pfx/"; echo "INFO: Trying $checkdir instead!"; if [ -d "$checkdir" ];then CURRENT_PREFIX_PATH="$checkdir"; echo "GOOD: Found $CURRENT_GAME Proton Prefix in default Steam Library at $CURRENT_PREFIX_PATH";echo "WARN: This feature should only be automatically used for Steam Deck!";else CURRENT_PREFIX_PATH="";echo "WARN: $CURRENT_GAME is configured for Proton but no Prefix was found!";echo "WARN: Its Proton Prefix is missing or has not been run yet!";echo "WARN: Launch the game with Proton via Steam before modding!";fi;fi;elif [ -d "$checkdir" ];then CURRENT_PREFIX_PATH="$checkdir";echo "WARN: $CURRENT_GAME isn''t configured for Proton but a Prefix was found!";echo "GOOD: Found $CURRENT_GAME Proton Prefix at $CURRENT_PREFIX_PATH";else CURRENT_PREFIX_PATH="";echo "INFO: No Proton Prefix for $CURRENT_GAME found!";fi;else CURRENT_INSTALL_PATH="";CURRENT_PREFIX_PATH="";checkdir="$CURRENT_INSTALL_PATH/steamapps/compatdata/$CURRENT_APPID/pfx";if [ -d "$checkdir" ];then echo "WARN: A Proton Prefix for $CURRENT_GAME exists at $checkdir but no installation was detected!";echo "WARN: If $CURRENT_GAME was uninstalled, Steam may have left behind files, like save data it syncs with the Steam Cloud.";else echo "INFO: No installation or Proton Prefix of $CURRENT_GAME found!";fi;fi;};link_sub_targets(){ local TARGET="";local checklink="";local DIR_LS=("${2}"/*);for TARGET in "${DIR_LS[@]}"; do local foldername="$(basename "$TARGET")";checklink="${1}/$foldername";if [ -h "$checklink" ];then unlink "$checklink";fi;if [ "$foldername" != "Vortex" ] && [ "$foldername" != "openvr" ] && [ "$foldername" != "Microsoft" ] && [ -d "$TARGET" ];then ln -s "$TARGET" "${1}/";fi;done;};create_current_game_symlinks(){ if [ -d "$CURRENT_INSTALL_PATH" ];then local check="$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common/$CURRENT_INSTALLDIR"; if [ -h "$check" ];then unlink "$check";fi;check="$CURRENT_INSTALL_PATH";if [ -d "$check" ];then ln -s "$check" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/common/";fi;check="$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/appmanifest_$CURRENT_APPID.acf";if [ -h "$check" ];then unlink "$check";fi;check="$CURRENT_APPMANIFEST";if [ -f "$check" ];then ln -s "$check" "$VORTEX_PREFIX/drive_c/Program Files (x86)/Steam/steamapps/";fi;fi;if [ -d "$CURRENT_PREFIX_PATH" ];then link_sub_targets "$VORTEX_PREFIX/drive_c/users/$USER/My Documents/My Games" "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/My Documents/My Games";link_sub_targets "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Roaming" "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/Roaming";link_sub_targets "$VORTEX_PREFIX/drive_c/users/$USER/AppData/Local" "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/Local";link_sub_targets "$VORTEX_PREFIX/drive_c/users/$USER/AppData/LocalLow" "$CURRENT_PREFIX_PATH/drive_c/users/steamuser/AppData/LocalLow";fi;};IFS=$''\n'';STEAM_LIBRARY_PATHS=();echo "INFO: Steam Libraries:";for library in $(grep -a -o "/[^\"]*" $HOME/.steam/steam/steamapps/libraryfolders.vdf); do if [ -d "$library" ] && [ -d "$library/steamapps/common" ];then rmdir --ignore-fail-on-non-empty $library/steamapps/common/* 2>/dev/null;if [ -d "$library/steamapps/compatdata/" ];then STEAM_COMPATDATA=("$(find "$library/steamapps/compatdata/" -type d -name "pfx")");for compatdata in ${STEAM_COMPATDATA}; do rmdir --ignore-fail-on-non-empty "$compatdata" 2>/dev/null;done;fi;STEAM_LIBRARY_PATHS+=("$library");echo "$library";fi;done;find_appmanifests;for CURRENT_APPMANIFEST in "${STEAM_APPMANIFEST_PATHS[@]}"; do CURRENT_APPID="$(manifest_attribute "$CURRENT_APPMANIFEST" "appid")";CURRENT_GAME="$(manifest_attribute "$CURRENT_APPMANIFEST" "name")";CURRENT_INSTALLDIR="$(manifest_attribute "$CURRENT_APPMANIFEST" "installdir")";echo "INFO: CURRENT_APPID=\"$CURRENT_APPID\" CURRENT_GAME=\"$CURRENT_GAME\" CURRENT_INSTALLDIR=\"$CURRENT_INSTALLDIR\"";find_current_game_paths;create_current_game_symlinks;done)" |& tee -a install.log' description: Creating Symbolic Links Targeting Known Game Locations env: INPUT_GAMESLS: $INPUT_GAMESLS working_dir: $GAMEDIR - task: description: Adding Steam to the Wine Prefix Registry 1/2 key: SteamPath name: set_regedit path: HKEY_CURRENT_USER\Software\Valve\Steam prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam - task: description: Adding Steam to the Wine Prefix Registry 2/2 key: SteamExe name: set_regedit path: HKEY_CURRENT_USER\Software\Valve\Steam prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\Steam.exe - task: description: Adding DARK SOULS to the Wine Prefix Registry 1/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\NAMCO BANDAI GAMES\DARK SOULS prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls Prepare to Die Edition - task: description: Adding DARK SOULS to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\211420 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls Prepare to Die Edition - task: description: Adding DARK SOULS REMASTERED to the Wine Prefix Registry 1/1 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\570940 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\DARK SOULS REMASTERED - task: description: Adding DARK SOULS II to the Wine Prefix Registry 1/1 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\236430 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls II - task: description: Adding DARK SOULS II Scholar of the First Sin to the Wine Prefix Registry 1/1 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\335300 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Dark Souls II Scholar of the First Sin - task: description: Adding DARK SOULS III to the Wine Prefix Registry 1/1 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\374320 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\DARK SOULS III - task: description: Adding ELDEN RING to the Wine Prefix Registry 1/2 key: InstallLocation name: set_regedit path: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ELDEN RING_is1 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\ELDEN RING - task: description: Adding ELDEN RING to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\1245620 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\ELDEN RING - task: description: Adding Fallout 3 to the Wine Prefix Registry 1/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 3 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 - task: description: Adding Fallout 3 to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22300 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 - task: description: Adding Fallout 3 Game of the Year Edition to the Wine Prefix Registry 1/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 3 goty prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 goty - task: description: Adding Fallout 3 Game of the Year Edition to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22370 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 3 goty - task: description: Adding Fallout 4 to the Wine Prefix Registry 1/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout4 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 - task: description: Adding Fallout 4 to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\377160 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 - task: description: Adding Fallout 4 VR to the Wine Prefix Registry 1/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Fallout 4 VR prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 VR - task: description: Adding Fallout 4 VR to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\611660 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout 4 VR - task: description: Adding Fallout 76 to the Wine Prefix Registry 1/2 key: Path name: set_regedit path: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Fallout 76 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout76 - task: description: Adding Fallout 76 to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\1151340 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout76 - task: description: Adding Fallout New Vegas to the Wine Prefix Registry 1/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\FalloutNV prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout New Vegas - task: description: Adding Fallout New Vegas to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22380 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Fallout New Vegas - task: description: Adding Kerbal Space Program to the Wine Prefix Registry 1/1 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\220200 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Kerbal Space Program - task: description: 'Adding MechWarrior 5: Mercenaries to the Wine Prefix Registry 1/1' key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\784080 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\MechWarrior 5 Mercenaries - task: description: 'Adding Middle Earth: Shadow of War to the Wine Prefix Registry 1/1' key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\356190 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\ShadowOfWar - task: description: 'Adding Monster Hunter: World to the Wine Prefix Registry 1/2' key: InstallLocation name: set_regedit path: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 582010 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Monster Hunter World - task: description: 'Adding Monster Hunter: World to the Wine Prefix Registry 2/2' key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\582010 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Monster Hunter World - task: description: Adding Morrowind to the Wine Prefix Registry 1/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Morrowind prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Morrowind - task: description: Adding Morrowind to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22320 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Morrowind - task: description: Adding Oblivion to the Wine Prefix Registry 1/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\oblivion prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Oblivion - task: description: Adding Oblivion to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\22330 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Oblivion - task: description: 'Adding Sekiro: Shadows Die Twice to the Wine Prefix Registry 1/1' key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\814380 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Sekiro - task: description: Adding Skyrim to the Wine Prefix Registry 1/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim - task: description: Adding Skyrim to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\72850 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim - task: description: Adding Skyrim Special Edition to the Wine Prefix Registry 1/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim Special Edition prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim Special Edition - task: description: Adding Skyrim Special Edition to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\489830 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim Special Edition - task: description: Adding Skyrim VR to the Wine Prefix Registry 1/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Bethesda Softworks\Skyrim VR prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\SkyrimVR - task: description: Adding Skyrim VR to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\611670 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\SkyrimVR - task: description: Adding Stardew Valley to the Wine Prefix Registry 1/1 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\413150 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Stardew Valley - task: description: Adding The Witcher to the Wine Prefix Registry 1/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\CD Project Red\Witcher prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher Enhanced Edition - task: description: Adding The Witcher to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\20900 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher Enhanced Edition - task: description: Adding The Witcher 2 to the Wine Prefix Registry 1/1 key: InstallFolder name: set_regedit path: HKEY_LOCAL_MACHINE\Software\CD Project Red\The Witcher 2 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\the witcher 2 - task: description: Adding The Witcher 3 to the Wine Prefix Registry 1/2 key: InstallFolder name: set_regedit path: HKEY_LOCAL_MACHINE\Software\CD Project Red\The Witcher 3 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher 3 - task: description: Adding The Witcher 3 to the Wine Prefix Registry 2/2 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\209230 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Witcher 3 - task: description: Adding Valheim to the Wine Prefix Registry 1/1 key: Installed Path name: set_regedit path: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Valve\Steam\Apps\892970 prefix: $GAMEDIR type: REG_SZ value: C:\\Program Files (x86)\\Steam\\steamapps\\common\\Valheim - input_menu: description: "The Vortex version indicated earlier in this installer is tested\ \ and guaranteed to run.\n\nREQUIRED MANUAL CHANGE:\n In order to keep Vortex\ \ from updating automatically change\n 'Settings > Vortex > Update' to 'No\ \ automatic updates'.\n\nOPTIONAL:\n Move/Copy your %APPDATA%/Vortex folder\ \ from a previous install into the appropriate location in the Vortex prefix\ \ now.\n This may launch Vortex with your stored preferences, like 'No automatic\ \ updates'.\n Only attempt this if Vortex launches the first time or you\ \ want to get adventurous with your file manager.\n" options: - waiting: Click here after reading the instructions. - proceed: Continue to launch the vortex installer. preselect: waiting - task: executable: setup name: wineexec prefix: $GAMEDIR - execute: command: 'echo "$(if [ "$VORTEX_PREFIX" == "" ]; then VORTEX_PREFIX="$PWD";fi;if [ ! -d "$VORTEX_PREFIX" ]; then echo "ERROR: Invalid Vortex prefix \"$VORTEX_PREFIX\"";exit -1;else echo "INFO: Using Vortex prefix at \"$VORTEX_PREFIX\"";fi;WINE_BIN_PATH="$(dirname "$WINEBIN")";DESKTOP="$HOME/Desktop";DESKTOP_FNAME="vortex-wine-downloads-handler.desktop";DESKTOP_APPLS="$HOME/.local/share/applications/";DESKTOP_FPATH="$DESKTOP_APPLS$DESKTOP_FNAME";DESKTOP_ENTRY="$(echo "[Desktop Entry]";echo "Type=Application";echo "Categories=Game;Network;";echo "Path=/drive_c/Program Files/Black Tree Gaming Ltd/Vortex";echo "Exec=sh -c \"env WINEPREFIX=\"\" PATH=\":\$PATH\" wine Vortex.exe -d %u 1>/dev/null 2>/dev/null\"";echo "Name=Vortex Wine";echo "Comment=Vortex Launcher and NXM Protocol Download Handler";echo "Icon=lutris_vortex-mod-manager";echo "MimeType=x-scheme-handler/nxm;x-scheme-handler/nxm-protocol";)";if [ -f "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd/Vortex.desktop" ]; then rm -f "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd/Vortex.desktop";rmdir -p "$DESKTOP_APPLS/wine/Programs/Black Tree Gaming Ltd";fi;if [ "$INPUT_DESKTOP" != "SKIP" ] && [ "$INPUT_DESKTOP" != "" ]; then echo "INFO: Making an entry for Vortex at \"$DESKTOP_FPATH\"";if [ -f "$DESKTOP_FPATH" ]; then rm -f "$DESKTOP_FPATH";fi;ESClooksAPED_VORTEX_PREFIX=$(echo $VORTEX_PREFIX | sed ''s/\//\\\//g'');ESCAPED_WINE_BIN_PATH=$(echo $WINE_BIN_PATH | sed ''s/\//\\\//g'');echo "$DESKTOP_ENTRY" | sed "s//$ESCAPED_VORTEX_PREFIX/g; s//$ESCAPED_WINE_BIN_PATH/g" > "$DESKTOP_FPATH";xdg-mime default "$DESKTOP_FPATH" x-scheme-handler/nxm;xdg-mime default "$DESKTOP_FPATH" x-scheme-handler/nxm-protocol;if [ "$INPUT_DESKTOP" == "COPY|LINK" ] && [ -f "$DESKTOP/$DESKTOP_FNAME" ]; then rm -f "$DESKTOP/$DESKTOP_FNAME";fi;if [ "$INPUT_DESKTOP" == "COPY" ]; then cp "$DESKTOP_FNAME" "$DESKTOP";fi;if [ "$INPUT_DESKTOP" == "LINK" ]; then ln -s -f "$DESKTOP_FPATH" "$DESKTOP";fi;fi;)" |& tee -a install.log' description: Deploying Selected Desktop Entry Choice env: INPUT_DESKTOP: $INPUT_DESKTOP working_dir: $GAMEDIR ```

GlitchWalker commented 2 years ago

Hi there, I'm really looking forward to getting this working!

Unfortunately I wasn't able to... Trying to install the Wine version kept giving this error:

Screenshot_20220722_185930

I also tried the proton version, but that threw up the same "Failed to retrieve wine" error that was mentioned above, even when I tried running it with lutris-GE-Proton7-22.

I look forward to trying out a newer version whenever it's available!

FederAndInk commented 2 years ago

I also tried the proton version, but that threw up the same "Failed to retrieve wine" error that was mentioned above, even when I tried running it with lutris-GE-Proton7-22.

Look at the wine runner available versions, download a proton one and specify it in the .yaml

NicBOMB commented 2 years ago

Hi there, I'm really looking forward to getting this working!

Unfortunately I wasn't able to... Trying to install the Wine version kept giving this error:

I also tried the proton version, but that threw up the same "Failed to retrieve wine" error that was mentioned above, even when I tried running it with lutris-GE-Proton7-22.

I look forward to trying out a newer version whenever it's available!

I recommend trying the version in the spoiler here. It was updated within the last 2 hours. ;)

Look at the wine runner available versions, download a proton one and specify it in the .yaml

That isn't necessary. The newer installer simply omits the hard version: requirement entirely.

NicBOMB commented 2 years ago

More than two weeks worth of improvements were just added to my installer. I recommend a clean reinstall, removing any old Vortex directory and installing with the latest as it has many feature improvements which may conflict with older installers. A clean install should not be necessary in the future. You may backup your users/$USER/AppData/Roaming/Vortex folder before reinstalling, even for a clean install. Each installation is ~2GB excluding the Vortex folder since it should be migrated between versions and may contain any downloaded mods or in-app settings.

Changes:

I have more changes planned, though they are awaiting a fix I submitted to Lutris.

FederAndInk commented 2 years ago

btw, @NicBOMB, why not make a repository so the changes can be tracked, people can open issues and PRs and all? :)

NicBOMB commented 2 years ago

btw, @NicBOMB, why not make a repository so the changes can be tracked, people can open issues and PRs and all? :)

I was unsure about starting a repository myself since this feature request could actually have some action taken by the Vortex devs if they wanted to host this in something more official, like a Nexus-Mods/ Vortex-Lutris / repository. All my changes are tracked in the edit history of the comment for now, but I agree, this installer is getting very complex very rapidly and could use a separate repo for handling related installation issues and finding workarounds for not immediately resolvable issues, like the terminal colors node module trying to open a pipe to stdout to test if the system supports ANSI color sequences when no stdout even exists.

FederAndInk commented 2 years ago

Right, yeah it could be really cool if it were under Nexus-Mods/Vortex-Lutris, you could have right to push to the repo too maybe?

Is it possible to contact the team maybe?

NicBOMB commented 2 years ago
Steam Library Customization This information may be helpful for Steam Deck users looking to improve visibility in the Steam Library so here's a cool thing you can do with the new Steam shortcut: ![official vortex background image](https://user-images.githubusercontent.com/19939315/183128235-23a46abf-4db8-4ad1-9f14-e91addd53623.png) Custom Background is from the official mod page's background so it fits perfectly. https://www.nexusmods.com/site/mods/1 Custom Logo is from the Vortex wiki. https://wiki.nexusmods.com/index.php/Category:Vortex ![lutris background image](https://user-images.githubusercontent.com/19939315/183124621-0517c7b2-3b36-401a-823b-51c7765acf99.png) custom background is from https://lutris.net/games/vortex-mod-manager/ The background image with the red curtains is from the "Vortex - Beta" page. The original image is no longer available on the Vortex nexus page since the link appears to have broken or the resource was removed. The Wayback Machine has a capture though https://web.archive.org/web/20190519173158/https://staticdelivery.nexusmods.com/mods/2295/images/1/1-1518688908-116949870.jpeg. ![Bonus image mentioning FOSS](https://user-images.githubusercontent.com/19939315/183132790-ba519306-4810-491d-a113-375661a639fc.png) 'open-source' background is from any Vortex site news update, like https://www.nexusmods.com/news/14413 EDIT: Forgot about the below two artwork positions used prominently in the Steam library. There may be more I don't know about too. ![bonus image of various Vortex artwork positions in the steam library](https://user-images.githubusercontent.com/19939315/183222429-caec25e1-f6f4-4f99-a20f-00fb5bac559d.png) Custom artworks are both from the nexus mods site page for Vortex. https://www.nexusmods.com/site/mods/1 ~~Going Under is cool too.~~
Desktop Icon Improvement There is also a very high resolution Vortex logo in svg format on the Vortex landing page https://www.nexusmods.com/about/vortex/ which can replace the desktop icon provided by the Lutris installer. Lutris and Vortex icons are normally 256x256 or smaller. However, the icon on the landing page is 512x512 and in svg format. Since plasma desktop supports svg icons, it provides perfect scaling on the desktop and in dolphin (plasma's default file manager). https://www.nexusmods.com/bootstrap/images/vortex/vortex-logomark.svg ~~This installer lacks those before/after comparison pictures modders tend to include, so this will make up for it.~~ ![icronic](https://user-images.githubusercontent.com/19939315/183226783-86638f7c-da6d-42dc-9c4b-2eced51d607a.png) None of these images are provided automatically by my installer since Steam and Lutris don't accept svg or webp images and links to these images may change or be removed ~~, not to mention lacking express permission to copy art assets~~. EDIT: A license for the icons can be found [here](https://github.com/Nexus-Mods/Vortex/blob/master/assets/images/license_nucleo.txt). This confirmed it was a good idea to not include any. These changes must be manually applied to the Lutris and Steam Library desktop icons separately as well.

Vortex is already 5 pre-releases into v1.6.x and I have no new changes for the installer (any of my latest changes would require my Lutris PR to be merged). If auto-updating fails when the next full Vortex release drops I will make necessary fixes. Otherwise, I expect only version bumps to the installer's download link in the future.

dglavimans commented 2 years ago

Thanks for the time on this @NicBOMB, I am trying to run your installer but when I run the script from Lutris it returns the following: this installer requires steam on your system. Lutris does find my Steam games already

I am trying this script on a Steam Deck also

NicBOMB commented 2 years ago

Thanks for the time on this @NicBOMB, I am trying to run your installer but when I run the script from Lutris it returns the following: this installer requires steam on your system. Lutris does find my Steam games already

I am trying this script on a Steam Deck also

Thanks for trying the installer, and on first party hardware soon too!

If Lutris informs you this installer requires steam on your system then you are probably missing the steam/steam-runtime package. Those are not to be confused for Lutris' WINE steam. My installer dropped support for WINE steam early on. If the command which steam does not find a steam executable, then you really are missing the steam runtime on your system.

#example commands and expected output
$ which steam
/usr/bin/steam
$ stat /usr/bin/steam
  File: /usr/bin/steam -> /usr/bin/steam-runtime

Lutris steam library integration from your steam account is not used by my installer. The script I include reads the library files generated by Steam (native) directly on your system. Lutris' cli argument for finding Steam Libraries will miss empty ones, which would prevent my script from generating relevant errors about your Proton prefixes in the install.log. I have tested this on 3 devices with steam installed and all of them have not encountered this issue. I added the required-binaries: directive to my installer because my scripts contain commands which are required. Though they are part of the POSIX standard, not all distros install everything POSIX by default. Since steam is a requirement for the installer, I added it as well and don't plan on removing it unless this becomes a persistent issue. More information about your environment is needed before I can make effective changes to the installer about your issue. What distro are you on?

dglavimans commented 2 years ago

Hi @NicBOMB so I am on the Steam Deck, with his native distro on desktop mode. I didn't really tinker with it. I do have an SD card for the games but Steam should still be located on the main memory

Lutris is installed through the Discovery store

FederAndInk commented 2 years ago

I would say, try flatseal? maybe Lutris can't access steam without giving it the rights

dglavimans commented 2 years ago

hi @FederAndInk I installed flatseal and gave Lutris all the directory permissions but still the same error

NicBOMB commented 2 years ago
#example commands and expected output
$ which steam
/usr/bin/steam
$ stat /usr/bin/steam
  File: /usr/bin/steam -> /usr/bin/steam-runtime

Hi @NicBOMB so I am on the Steam Deck, with his native distro on desktop mode. I didn't really tinker with it. I do have an SD card for the games but Steam should still be located on the main memory

Lutris is installed through the Discovery store

@dglavimans did the commands I suggested find the binaries?

NicBOMB commented 2 years ago

hi @FederAndInk I installed flatseal and gave Lutris all the directory permissions but still the same error

You should follow the instructions on the Lutris download information page to install on Steam OS for the Steam Deck. https://lutris.net/downloads

dglavimans commented 2 years ago

@NicBOMB the which steam command does return /usr/bin/steam

but the stat /usr/bin/steam returns:

File: /usr/bin/steam -> /usr/bin/steam-jupiter

File: /usr/bin/steam -> /usr/bin/steam-jupiter Size: 22 Blocks: 8 IO Block: 4096 symbolic link Device: 0,32 Inode: 68037 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2022-07-26 21:42:55.000000000 +0200 Modify: 2022-05-26 22:31:36.000000000 +0200 Change: 2022-07-26 21:44:57.419999993 +0200 Birth: 2022-07-26 21:44:57.419999993 +0200

I also installed Lutris with the link you provided (and needed to do a few steps of the flatpak instructions beneath it to get it discovered in the discovery store)