For Linux gamers who venture into the world of modding, Vortex is an indispensable tool. However, one of its most convenient features—one-click mod downloads from Nexus Mods via nxm:// links—doesn't work out of the box on Linux. Clicking a "Mod Manager Download" button typically does nothing, forcing us into a tedious cycle of manual downloads and imports.
This guide will show you how to fix that. We will create a native protocol handler on your Linux desktop that intercepts nxm:// links and passes them directly to your Vortex instance running under Proton. This makes the modding experience seamless, just as it is on Windows.
This method is universal and should work on any desktop environment (XFCE, GNOME, KDE, etc.) and with any game you manage with Vortex. We will use Skyrim as our primary example.
The Big Picture
The solution involves three key components:
- A Bash Script: A small script that knows how to launch Vortex using the correct Proton version and pass the nxm:// link to it.
- A .desktop File: A standard Linux desktop entry that acts as our protocol handler, telling your system to run our bash script whenever it sees an nxm:// link.
- MIME Type Association: The final step to tell your system that our new .desktop file is the default application for the x-scheme-handler/nxm type.
Prerequisites
- Steam & Proton: You must have Steam installed, along with a recent version of Proton (GE-Proton is highly recommended).
- Vortex Installed via Proton: You must have already installed Vortex inside the Proton prefix of the game you intend to mod. For this guide, we assume you've installed it for Skyrim (AppID 489830).
If you haven't done this, a common way is to run the Vortex installer using the game's Proton environment from the command line.
Step 1: Create the Handler Script
First, we'll create the main script that does the heavy lifting. Create a new file named vortex-nxm-handler.sh in a memorable location. A great spot for local scripts is \~/.local/bin/. If you don't have this directory, create it with mkdir -p \~/.local/bin.
Paste the following code into your vortex-nxm-handler.sh file.
#!/bin/bash
#
# Vortex NXM Link Handler for Linux/Proton
# This script passes nxm:// links from your browser to your Vortex instance.
#
# --- USER CONFIGURATION ---
# IMPORTANT: You MUST change these paths to match YOUR system.
# 1. Steam Compatibility Data Path for the game Vortex is installed for.
# This is where the game's pfx (Proton prefix) is located.
# Default for Skyrim (AppID 489830) is shown. Find yours in your Steam Library.
COMPAT_DATA_PATH="/path/to/your/steamapps/compatdata/489830"
# 2. Path to the Proton executable you use for the game.
# This is often a custom GE-Proton version.
# Find this in your .steam/root/compatibilitytools.d/ directory.
PROTON_PATH="/path/to/your/.steam/steam/compatibilitytools.d/GE-Proton9-27/proton"
# 3. Path to the Vortex executable inside its Proton prefix.
# This will be inside the COMPAT_DATA_PATH you defined above.
VORTEX_PATH="$COMPAT_DATA_PATH/pfx/drive_c/Vortex/Vortex.exe"
# --- END OF USER CONFIGURATION ---
# --- SCRIPT LOGIC ---
# Do not edit below this line unless you know what you are doing.
# Log file for debugging
LOG_FILE=\~/.vortex-nxm-handler.log
echo "---" >> "$LOG_FILE"
echo "[$(date)] - NXM handler script initiated." >> "$LOG_FILE"
echo "[$(date)] - Received NXM Link: $1" >> "$LOG_FILE"
# Check if the required paths exist
if [ ! -d "$COMPAT_DATA_PATH" ]; then
echo "[$(date)] - ERROR: COMPAT_DATA_PATH does not exist: $COMPAT_DATA_PATH" >> "$LOG_FILE"
exit 1
fi
if [ ! -f "$PROTON_PATH" ]; then
echo "[$(date)] - ERROR: PROTON_PATH does not exist: $PROTON_PATH" >> "$LOG_FILE"
exit 1
fi
if [ ! -f "$VORTEX_PATH" ]; then
echo "[$(date)] - ERROR: VORTEX_PATH does not exist: $VORTEX_PATH" >> "$LOG_FILE"
exit 1
fi
# Set the necessary Steam environment variables for Proton
export STEAM_COMPAT_DATA_PATH="$COMPAT_DATA_PATH"
# The client install path is usually found automatically, but can be set if needed.
# export STEAM_COMPAT_CLIENT_INSTALL_PATH="/path/to/your/.steam/steam"
echo "[$(date)] - Launching Vortex with Proton..." >> "$LOG_FILE"
# Run Vortex with the NXM link argument. The '-d' flag is for "download".
"$PROTON_PATH" run "$VORTEX_PATH" -d "$1" &
echo "[$(date)] - Vortex launch command sent." >> "$LOG_FILE"
exit 0
After saving the script, you MUST:
- Edit the User Configuration: Open the script and change the three paths at the top to match your system's configuration.
- Make it Executable: Open a terminal and run:
chmod +x \~/.local/bin/vortex-nxm-handler.sh
Step 2: Create the .desktop File
Now, create the desktop entry that registers our script as an application. Create a new file named vortex-nxm-handler.desktop in \~/.local/share/applications/.
Paste the following content into the file. Make sure the Exec path points to where you saved your script.
[Desktop Entry]
Name=Vortex NXM Handler
Exec=/home/YOUR_USERNAME/.local/bin/vortex-nxm-handler.sh %u
Type=Application
Terminal=false
MimeType=x-scheme-handler/nxm;
Remember to replace YOUR_USERNAME with your actual Linux username.
Step 3: Register, Verify, and Test the Handler
Finally, we update our system's databases and test that everything is working correctly.
- Update the Desktop Database: update-desktop-database \~/.local/share/applications
- Set the Default Handler: xdg-mime default vortex-nxm-handler.desktop x-scheme-handler/nxm
- Verify the Handler: Run xdg-mime query default x-scheme-handler/nxm. The output should be vortex-nxm-handler.desktop.
- Test the Handler: Run xdg-open "nxm://skyrimspecialedition/mods/12345/files/67890". If Vortex starts, it's working!
Post-Setup: Important Considerations
A Note on Updating Proton
When you change the Proton version, you must update it in three places:
- The Main Game: In Steam (Properties... -> Compatibility).
- The Handler Script: Edit the PROTON_PATH variable in \~/.local/bin/vortex-nxm-handler.sh.
- The Modded Game Launcher: In Steam (Properties... -> Compatibility).
Keeping all three in sync is crucial for the whole system to work correctly.
Bonus: Creating a Modded Game Launcher in Steam
To easily launch your modded game (e.g., via SKSE), add the script extender's .exe as a non-Steam game. Then, in its properties, set the "Start In" path to the game's directory and the "Launch Options" to STEAM_COMPAT_DATA_PATH="/path/to/your/compatdata/GAME_APP_ID" gamemoderun %command%. This ensures it uses the correct Proton prefix.
Advanced: Installing Additional Dependencies (.NET, etc.)
Some advanced modding tools, like Pandora, may require dependencies that Vortex doesn't install automatically, such as specific .NET Runtimes. You can install these into the same Proton prefix using a command line terminal.
First, download the required Windows installer (e.g., for .NET 8). Then, run it using this command structure, making sure to use the same paths as you did in the handler script:
STEAM_COMPAT_DATA_PATH="/path/to/your/compatdata/GAME_APP_ID" \
/path/to/your/Proton/proton run '/path/to/your/dependency_installer.exe'
For example, to install the .NET 8 runtime for Skyrim, the command would look something like this:
STEAM_COMPAT_DATA_PATH="/path/to/your/steamapps/compatdata/489830" \
/path/to/your/.steam/steam/compatibilitytools.d/GE-Proton9-27/proton run '/path/to/Downloads/windowsdesktop-runtime-8.0.17-win-x64.exe'
This ensures all your modding tools and their dependencies are installed in the same self-contained Windows environment.
Troubleshooting
If you have issues, try these steps:
- Be Patient: Sometimes there can be a noticeable delay between clicking the link and Vortex responding, especially if Vortex isn't already running. It can seem like it's not working, but the request often comes through eventually. Give it a moment before clicking again.
- Restart Your Browser: It often caches handlers.
- Check the Log File: Look for errors in \~/.vortex-nxm-handler.log.
- Force a Desktop Reload (XFCE): Run xfdesktop --reload.
- Log Out and Log Back In: This is the most reliable way to apply changes system-wide.
You're now ready to enjoy seamless one-click modding on Linux. Happy gaming!

Banshie
GNU+Linux/BSD Adventurer