Automate Vortex Mod Manager setup in Linux for Steam & Heroic
VortexTricks is a lightweight, self‑contained Python utility that
- Detects your Steam and Heroic installations
- Resolves duplicate titles between your Steam and GOG libraries
- Creates the necessary WINE prefix(es)
- Registers the games inside Vortex by adding the correct registry keys and
creating save‑game /
AppDatasymlinks - Downloads and installs the latest Vortex release
⚠️ Disclaimer – This project is provided as-is. Use it at your own risk.
- Features
- Prerequisites
- Installation
- Usage
- Manual Post‑Execution Steps
- Extending the Game Registry
- Troubleshooting
- Contributing
- Star History
| Feature | Description |
|---|---|
| Store detection | Automatically locates Steam and Heroic (GOG) installations. |
| Duplicate handling | Prompts you to decide which copy to keep or to use separate bottles. |
| Bottle creation | Creates a default Vortex bottle, or separate ones per store, with the appropriate WINE runner. |
| Registry registration | Adds the required Windows registry entries for each game into the Vortex prefix. |
| Symlink creation | Links the Proton prefix’s My Games & AppData folders into the Vortex WINE prefix so that saves and settings stay in sync. |
| Automatic Vortex install | Downloads the latest Vortex installer from GitHub and installs it into the chosen prefix. |
| Item | Requirement | Notes |
|---|---|---|
| Linux | Any | Tested with Fedora Linux 43 and 44 |
| Python | 3.9+ | Tested with 3.14 |
| Bottles | Required | Required for running Windows binaries |
| Flatpak | Required | Required for Bottles |
| Steam | Optional | Required for Steam games |
| Heroic Games Launcher | Optional | Required for GOG games |
protontricks |
pip package | Used to find Steam |
requests |
pip package | For downloading the Vortex installer |
jsonschema |
pip package | For validating gameinfo.json |
Any game to be modded needs to be ran once before attempting to mod it. Otherwise, missing files may cause errors in Vortex. If you forget to add one of your games or install a new game later, you can just re-run vortextricks.py after initializing the new game.
# Clone the repo
git clone https://github.com/gsquarediv/vortextricks.git
cd vortextricks
# Create a virtual environment (recommended)
python -m venv venv
source venv/bin/activate
# Install dependencies
python -m pip install -r requirements.txtsource venv/bin/activate # if not already activated
./vortextricks.pyUpon execution, this script will:
- Detect Steam and GOG game libraries.
- Prompt you if the same title appears in both libraries.
- Ask whether to use the Steam copy, the GOG copy, or keep both in separate bottles.
- Create the necessary bottles or WINE prefixes.
- Register Windows registry entries for each game to enable auto-detection of the game path in Vortex.
- Create symlinks for
My Games&AppData. - Download and install Vortex if not present.
At the moment the script has no command‑line arguments.
After the script finishes, you may need to perform a few manual steps to complete the setup:
- Mod staging folder
Vortex needs a staging folder where it temporarily stores mods before deploying them. When running Vortex in Bottles (Flatpak), the default suggestions seem to work pretty well. You may be able to simply enable "Automatically use suggested path for staging folder" in Settings and let Vortex handle it. If that does not work, you will have to manually set your staging folder.
The registry of known games is stored in gameinfo.json.
To add a new game:
- Add an entry in the array, e.g.:
{
"name": "Example Game",
"game_id": "examplegame",
"steamapp_ids": ["123456"],
"gog_id": "987654321",
"ms_id": null,
"epic_id": null,
"registry_entries": {
"HKEY_LOCAL_MACHINE\\Software\\ExampleCompany\\ExampleGame": "Installed Path"
},
"override_mygames": "ExampleGame",
"override_appdata": "ExampleGame"
}- Validate the JSON against the schema:
python -c "import jsonschema, json, pathlib; schema = json.load(open('gameinfo.schema.json')); validator = jsonschema.Draft202012Validator(schema); json.load(open('gameinfo.json'))" || echo "Invalid JSON"- Rerun the script – the new game will now be recognized.
Tip – The
registry_entriesdictionary key is the full registry path; the value is the name of the key.vortextricks.pywill insert the game path as the value of the key.
| Symptom | Cause | Fix |
|---|---|---|
| ModuleNotFoundError | Virtual environment not active or requirements not installed | See Installation |
| RuntimeError: Could not locate bottles-cli | Prerequisites not installed. | Install Bottles via flatpak install com.usebottles.bottles |
| Duplicate game prompts not showing | The duplicate detection logic didn’t find overlapping game IDs | Ensure both game IDs are in gameinfo.json |
| Vortex UI is not scaled properly | Your desktop environment has implemented user interface scaling in a retarded way | Try running Vortex with --force-device-scale-factor=2 |
| Vortex window does not render properly | OpenGL errors | Try any of the following:
|
- Fork the repository.
- Create a new branch.
- Commit your changes with descriptive messages.
- Push the branch and open a pull request.
