My Wabbajack VM Setup - Omni-guides/Wabbajack-Modlist-Linux GitHub Wiki
Introduction
⚠️ ❗ This method is now no longer recommended. We are now able to run Wabbajack via Proton directly from Steam (on both Deck and PC). No more messing with Virtual Machines! I will leave this here for information purposes only. ⚠️ ❗
Quite a few people have asked, so here's a quick rundown of my method for running Wabbajack in a Windows Virtual Machine (VM). This is needed because Wabbajack does not work via Wine/Proton at all. Using the below steps, only Steam and Wabbajack (+dependencies) are installed inside the Windows VM, nothing else. Steam is configured to detect the Steam Library from the Linux Filesystem, and Wabbajack is able to download mods and install Wabbajack Modlists directly to the Linux Filesystem. Using this method, the games such as Skyrim, Fallout etc do not need to be installed inside the VM as well as on Linux, and it also avoids the need for copying the modlist from Windows to Linux after the installation is complete.
I was hesitant to create a guide for this because there are so many possibilities of how to achieve similar, but enough people have asked - so here it is. The method essentially boils down to installing a Windows 10 VM and sharing the Linux Filesystem to it via Samba. Yes, there are other, technically better options for filesharing between a VM and the host, but out of NFS, SSHFS, VirtIOFS, VirtualBox Folder Sharing and so on, Samba was the only one that didn't prove unstable with either Steam detecting the Games Library, Wabbajack detecting the game as being installed, or hangs and crashes while downloading and extracting the modlist via Wabbajack.
I use KVM/virt-manager to run the VM. You could just as easily use VirtualBox or similar. I also chose to stick with Windows 10 as it has a marginally smaller footprint than Windows 11. Also worth mentioning that my Linux username is 'deck' in the screenshots below. This doesn't mean I do this on my Steam Deck, it just makes things easier to testing and writing the other guides for Wabbajack Modlists.
Instructions
Step 1 - Create the VM
Download the Windows 10 ISO from here: https://www.microsoft.com/en-gb/software-download/windows10ISO
As mentioned, I use Virtual Machine Manager (virt-manager) to run the VM. It is available from the Discover store, if your Linux OS supports that. Otherwise it can likely be found in your distro's package manager. Alternatively you can use VirtualBox or whatever you like.
Open up Virt-Manager and click the plus (+) button to create a new VM.
Accept the default "Local Media Install" and click Forward.
Click Browse to select your Windows ISO, and then click "Browse Local".
Navigate to where you downloaded the Windows ISO and select it. Ensure the Detected Windows version is Windows 10, otherwise, uncheck the box for Auto-detection and search for Windows 10, then click Forward.
Set the RAM and vCPU allocation for the VM. This will depend on how many resources you can spare from your main Linux system. For example, I select 8192MB of RAM (8GB) and 8 vCPUs, then click Forward.
According to Microsoft, Windows 10 needs at least 60GB of disk space to install. There are ways to reduce this further by utilising something like Tiny10, but for simplicity in this guide, I'm just going to go with 80GB so I change the Volume size to 80GB and click Forward. This will give us about 20GB free space after install, which should be more than enough while not being a bit too tight. If you're really struggling for disk space, doing this with Tiny10 can be squeezed into about 25GB in total, but that only leaves about 5GB to play with after Windows, and Tiny10 can come with it's own issues.
Give the VM a name and then MAKE SURE YOU CHECK THE BOX TO "CUSTOMIZE CONFIGURATION BEFORE INSTALL", then click Finish.
The reason we need to customise is due to the way that vCPUs are allocated by Virt Manager, and what Windows 10 allows. By default, vCPUs are presented to the VM as a physical CPU, instead of a CPU Core like you get with a modern CPU. Windows, for reasons best know to Microsoft, limit you to two Physical CPUs on Desktop Versions of Windows, so if we accept the default settings, our Windows VM will on see two CPUs, instead of the 8 allocated via Virt Manager. To change this, on the Customisation window, click the CPUs tab on the left, expand "topology" and tick the box for "Manually set CPU topology". I set to 1 CPU with 8 cores, but you could also choose 2 CPUs with 4 cores each, it doesn't make a lot of difference. Click Apply to set the changes, and then click the "Begin Installation" button in the top left of the window.
Step 2 - Install Windows, Steam and Wabbajack
The rest of the Windows install is pretty normal so I won't cover it here. I select "I don't have a product key", and then Windows 10 Pro and then continue with the rest of the Windows install skipping the Windows account and accepting the "limited experience" as normal.
I then set a username that matches my username on Linux, and don't set a password, just to make things easier, but you can do as you wish here. You can then configure Windows as you like, install a different browser etc etc.
Download and install Steam from steampowered.com, and Wabbajack from wabbajack.org. Install Steam as normal, and sign into Steam with your Steam credentials.
I created a new directory at C:\Wabbajack and copied the downloaded Wabbajack.exe file there, this will contain all of the .wabbajack files etc in future. Start Wabbajack and configure your Nexus credentials as normal and if desired, edit the threads available to Wabbajack for downloads and extraction. I just leave them as default.
That's it for Windows just now, we'll come back to it shortly.
Step 3 - Install and configure Samba
Back in Linux, we'll now install and configure Samba. As in the intro, Samba isn't the only option for setting up a fileshare between the two, but in my experience it's proven to be the most stable for this particular use case. How to install Samba will entirely depend on your Linux distro. For me on Nobara (Fedora), it was as simple as running sudo dnf install samba. By default (certainly on Nobara/Fedora), the samba config has a section for 'homes' listed in /etc/samba/smb.conf:
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
There are of course plenty of configuration options for samba, so if you know what you're doing, feel free to edit as required for your environment. If you're just following what I do, then ensure your smb.conf contains the same section as above. Next, enable and start the samba server service with:
sudo systemctl enable --now smb.service
Lastly, we need to set a Samba Password for our user - this will be used when creating the Mapped Network Drive in Step 5.
In a terminal run (replace user-name with the name of your user in Linux), and set a password, remember it.
sudo smbpasswd -a user-name
Restart the smb service and we should be good to go:
sudo systemctl restart smb
Step 4 - Firewall example
Another step that will vary depending on your Linux distribution and Firewall used, will be how to open the ports required for the samba server to be accessible to Windows. One good thing about this being a Linux Host and Windows VM is that we only need to open firewall ports between the two, using the Virtual Network between them, rather than opening the port on our Linux system to the rest of the LAN.
For me on Nobara, I used the Firewall gui application to open the port. There are likely command line methods if you prefer, but you'll have to look them up.
Select 'Permanent' from the Configuration drop down at the top, and then 'libvirt' from the list of Zones in the middle left, followed by ticking the box next to 'samba' in the right hand pane. The changes should be applied as soon as you click the tickbox.
Step 5 - Map network Drive
Back to Windows and it's time to map the Linux FS into the Windows VM using a Mapped Network Drive. Open a File Explorer, right-click "This PC" and click "Map Network Drive".
A new window will appear allowing you to set a Drive Letter and a path. I select the W: Drive letter (for Wabbajack), but you can select as you wish. Enter the Folder path as (replace "user" with your Linux username, the same one you used during the Step 3 smbpasswd stage):
\\192.168.122.1\user
Certaily with KVM/libvirtd/Virt-manager, the IP address of the 'server' is usually 192.168.122.1, with the VM getting another IP address in the 192.168.122.X range. If you use a different application to create and run the VM, then this IP Address may differ, so please amend the above to reflect the IP Address of the Virtual Network Interface from your Linux system (usually called virbr0 or similar).
Ensure "Reconnect at sign-in" and "Connect using different credentials" are both ticked, and then click "Finish". You will be prompted to enter a username and password, so enter as so, with the password being the one you set during Step 3.
Hit OK, and all being well, it should open a new Windows Explorer window showing the files from your Linux Home Directory.
Step 6 - Steam Library switcheroo
The last step involves 'tricking' Steam into detecting your existing games as being installed, by adding a new Steam Library and performing a bit of a switcheroo.
IMPORTANT - As mentioned at the start of this guide - Once you perform this step, Steam will detect the games as if they were installed natively in Windows, and may attempt to update/install games. This is especially a pain for games in your library that have a native Linux version, as it will attempt to 'update' them to the Windows version instead. For this reason, I set Steam to not start on boot (we hopefully won't need it to after this step) and then set the download speed to 1kbps (so I can stop/pause any downloads that sneak through) and lastly set the 'Restrict updates to between' to be some time overnight.
To add a new Library, open Settings in Steam and then select the 'Storage' tab on the left. Click the Drop-down next to "Add Drive" and then select "Add Drive".
All being well, it will have automatically selected your new W: Drive, or whatever you called it. Click Add and that should complete the creation of the new Steam Library, visible on the Linux FS in /home/user/SteamLibrary, or on the W: Drive in Windows.
The next step is where we connect things together. IMPORTANT Close down Steam in Windows fully - make sure that it is not still running in the system try down by the clock.
Back on your Linux system, we're going to delete the new empty SteamLibrary directory Windows created (make sure you don't delete your real Steam Library if it's called something similar!). Replace "user" with your linux username, and alter the path if you set it to something different in Steam on Windows.
rm -rf /home/user/SteamLibrary
As the final piece of the puzzle, we then create a symlink from the REAL Steam Library on Linux, to the Steam Library that Steam in Windows is expecting (replace 'user' with your Linux username)
ln -s /home/user/.local/share/Steam /home/user/SteamLibrary
And that should really be it. Re-open Steam in Windows, and it should now detect all your games as being installed - Pay particular attention to Steam Downloads in case it ignores the above download settings and tries to update/download something. If it does, quickly pause/stop the downloads.
You should be able to see, e.g. Skyrim installed in Steam in Windows now (providing it was installed in Linux).
If so, then you should be all done. Close and exit Steam fully again, as we no longer need it open, and ensure that it's set to not start on boot to avoid any annoying game "updates"; Steam Settings - Interface Tab, uncheck "Run Steam when my computer starts"
Conclusion
With the above all done, you are now free to open Wabbajack and download/Install a modlist. Set the Install Directory to be a path of your choice on the W: Drive (for me this is e.g. W:\Games\Skyrim or W:\Games\Fallout), and set the Download Directory to also be a path on the W: Drive (e.g. W:\WabbajackDownloads\Skyrim or W:\WabbajackDownloads\Fallout).
Personally, I tend to use the same download dir for all modlists of that game that I download, and then occasionally when the WabbajackDownloads directory gets too large, just delete the contents and start again with the next list I download.
This is definitely draft 1 of this guide, so if you spot any issues, typos or something that just doesn't work, then let me know either as an issue on github, or pay me a visit in the #unofficial-linux-help channel of the official Wabbajack Discord - just @ me (@Omni).
Enjoy!