WEM: Wine Environment Manager

WEM Options

This page describes the various options that are offered by WEM.

Env Config File

Env configuration files live in the $HOME/.config/wem directory and are named after what you pass to WEM when doing the init command. Special characters and spaces are stripped out to form the "slug" that makes up the name of the configuration file name.

The example env, tes3, has a cfg file at $HOME/.config/wem/tes3.cfg. This file can be hand-edited if desired, or edited via the wem cfg command.

Variable Expansion

Environment variables such as $HOME will be expanded when used as WEM option values.

InstallExe = "$HOME/games/MyGameInstaller.exe"

Additionally, option values can be used as variables in another value:

# Note the leading period in front of WinePrefix
RunWorkDir = "{{.WinePrefix}}/drive_c/game"

Note that nested variables are supported:

WinePrefix = "$HOME/games/WinePrefixes/SomeCoolGame"
RunWorkDir = "{{.WinePrefix}}/drive_c/game"
RunExe = "{{.RunWorkDir}}/Some Cool Game.exe"

Unset options

Every option argument comes with a --no-ARG variant that can be used to unset a value. Note that unset options take precedence over set options, so if both are used the value will be unset.

Info Options

Date
Date = "2002-05-01"

CLI arg: --info-date 2002-05-01

Optional string that describes a date relating to the thing you're running, possibly a release date.

Name
Name = "The Elder Scrolls III: Morrowind GOTY Edition"

CLI arg: --info-name "The Elder Scrolls III: Morrowind GOTY Edition"

A string that's passed to WEM during the wem init command. It should describe the thing you are trying to run.

Install Options

GogSilentInstall
GogSilentInstall = false

CLI arg: --gog-silent-install

Meant for game installers from GOG.com. This option auto-adds arguments to the InstallExe which:

This does mean that any errors received will be silenced, but in practice most GOG.com installer errors can be disregarded.

InstallArgs
InstallArgs = ["foo", "bar", "baz"]

CLI arg: --install-args foo bar baz

Optional command-line arguments to pass to InstallExe.

InstallExe
InstallExe = "$HOME/games/setup_some-game.exe"

CLI arg: --install-exe $HOME/games/setup_some-game.exe

Optional string that's a path to an executable to run for installation.

InstallExpected
InstallExpected = "{{.WinePrefix}}/drive_c/game/Morrowind.exe"

CLI arg: --install-expected "{{.WinePrefix}}/drive_c/game/Morrowind.exe"

An optional string that is a file which should exist after installation, possibly a game executable.

InstallWorkDir
InstallWorkDir = "$HOME/games"

CLI arg: --install-workdir $HOME/games

Optional string that should be the working directory to use when running InstallExe.

Run Options

QuietRun
QuietRun = false

CLI arg: --quiet-run

Whether or not to supress output from wine and the RunExe.

RunArgs
RunArgs = ["foo", "bar", "baz"]

CLI arg: --run-args foo bar baz

Optional command-line arguments to pass to RunExe.

RunExe
RunExe = "$HOME/games/MyGame/Game.exe"

CLI arg: --run-exe $HOME/games/MyGame/Game.exe

Required string that's a path to an executable to run with wine.

RunPrefix
RunPrefix = "mangohud"

CLI arg: --run-prefix mangohud

Optional string to prepend to the RunExe. Useful for integrating tools like MangoHud.

RunSuffix
RunSuffix = "foobar"

CLI arg: --run-suffix foobar

Optional string to append to the RunExe.

RunPre
RunPre = "mv /tmp/something /tmp/somethingelse"

CLI arg: --run-pre "mv /tmp/something /tmp/somethingelse"

Optional string that is a command to run before running the RunExe, as well as any related args. Must be quoted if args are used.

RunPost
RunPost = "cp some/save.file some/backupdir/"

CLI arg: --run-post "cp some/save.file some/backupdir/"

Optional string that is a command to run after running the RunExe, as well as any related args. Must be quoted if args are used.

RunWorkDir
RunWorkDir = "$HOME/games/SomeGame"

CLI arg: --run-workdir $HOME/games/SomeGame

Optional string that will be the working directory for running the RunExe.

Sandbox
Sandbox = true

CLI arg: --sandbox

Enable sandboxing via Firejail with all supported features (excluding black/whitelisting).

SandboxBlacklist
SandboxBlacklist = ["$HOME/foo", "/bar", "/baz"]

CLI arg: --sandbox-blacklist $HOME/foo /bar /baz

Use the --blacklist firejail flag with the given paths.

SandboxWhitelist
SandboxWhitelist = ["$HOME/foo", "/bar", "/baz"]

CLI arg: --sandbox-whitelist $HOME/foo /bar /baz

Use the --whitelist firejail flag with the given paths.

SandboxCpu
SandboxCpu = 1

CLI arg: --sandbox-cpu 1

Use the --cpu=COUNT firejail flag.

SandboxDns
SandboxDns = "192.168.1.123"

CLI arg: --sandbox-dns 192.168.1.123

Use the --dns=ADDRESS firejail flag.

SandboxIpcNamespace
SandboxIpcNamespace = true

CLI arg: --sandbox-ipc-namespace

Use the --ipc-namespace firejail flag.

SandboxMachineId
SandboxMachineId = true

CLI arg: --sandbox-machine-id

Use the --machine-id firejail flag.

SandboxNetNone
SandboxNetNone = true

CLI arg: --sandbox-net-none

Use the --net=none firejail flag.

SandboxNoDbus
SandboxNoDbus = true

CLI arg: --sandbox-nodbus

Use the --nodbus firejail flag.

SandboxNoPrinters
SandboxNoPrinters = true

CLI arg: --sandbox-noprinters

Use the --noprinters firejail flag.

SandboxNoU2f
SandboxNoU2f = true

CLI arg: --sandbox-nou2f

Use the --nou2f firejail flag.

SandboxPrivateCache
SandboxPrivateCache = true

CLI arg: --sandbox-private-cache

Use the --private-cache firejail flag.

SandboxPrivateCwd
SandboxPrivateCwd = true

CLI arg: --sandbox-private-cwd

Use the --private-cwd firejail flag.

SandboxPrivateTmp
SandboxPrivateTmp = true

CLI arg: --sandbox-private-tmp

Use the --private-tmp firejail flag.

System Options

ReducePulseLatency
ReducePulseLatency = false

CLI arg: --reduce-pulse-latency

Include the PULSE_LATENCY_MSEC=60 environment variable to possibly improve audio quality. This can be helpful if you get audio cracking.

RestartPulse
RestartPulse = false

CLI arg: --restart-pulse

Restart PulseAudio before running the RunExe.

RestoreResolution

CLI arg: --restore-resolution

RestoreResolution = false

Should WEM try to restore your desktop resolution after running the RunExe.

SingleCore
SingleCore = false

CLI arg: --single-core

Should WEM try to run the RunExe on a single core via taskset.

SysEnvVars
SysEnvVars = ["FOO=BAR", "HRISTOS=IS_COOL"]

CLI arg: --sys-env-vars FOO=BAR HRISTOS=IS_COOL

System environment variables to set for running the RunExe.

VulkanIcdLoader
VulkanIcdLoader = "/path/to/file.json"

CLI arg: --vulkan-icd-loader /path/to/file.json

Optional string that's a path to a Vulkan ICD file.

Wine Options

DxvkVersion
DxvkVersion = "1.8.1"

CLI arg: --dxvk-version 1.8.1

Optional string that's a valid DXVK release version to install and use.

Esync
Esync = false

CLI arg: --esync

Enable esync.

Fsync
Fsync = false

CLI arg: --fsync

Enable fsync.

WineArch
WineArch = "win64"

CLI arg: --wine-arch win64

Required string that sets the architecture of the env.

WineArgs
WineArgs = ["foo", "bar"]

CLI arg: --wine-args foo bar

Optional args to pass to WineExe.

WineDllOverrides
WineDllOverrides = "dinput,d3d8=n,b"

CLI arg: --wine-dlloverrides "dinput,d3d8=n,b"

Optional string to pass to WINEDLLOVERRIDES.

WineExe
WineExe = "/bin/wine"

CLI arg: --wine-exe /bin/wine

Required string that is a path to a wine executable.

WinePrefix
WinePrefix = "$HOME/games/WinePrefixes/TES3"

CLI arg: --wine-prefix $HOME/games/WinePrefixes/TES3

Required string that is a path to a wine prefix directory.

VirtualDesktop
VirtualDesktop = "1920x1080"

CLI arg: --virtualdesktop 1920x1080

Optional string that's in the "Xresolution"x"Yresolution" format, that sets the resolution of a wine virtual desktop for the env.

Vkd3dVersion
Vkd3dVersion = "2.2"

CLI arg: --vkd3d-version 2.2

Optional string that's a valid VKD3D-Proton release version to install and use.