NixOS #
General documentation about VR is provided on the NixOS Wiki.
Recommendations #
The recommended way to set up NixOS for VR is by using services.monado or services.wivrn.
You may also want to install opencomposite (or xrizer, currently only available in nixpkgs-xr) and wlx-overlay-s.
For OpenComposite or XRizer, you may want to configure ~/.config/openvr/openvrpaths.vrpath
to point to your OpenComposite or XRizer installation. See below for an example using home-manager.
xdg.configFile."openvr/openvrpaths.vrpath".text = ''
{
"config" :
[
"~/.local/share/Steam/config"
],
"external_drivers" : null,
"jsonid" : "vrpathreg",
"log" :
[
"~/.local/share/Steam/logs"
],
"runtime" :
[
"${pkgs.opencomposite}/lib/opencomposite"
],
"version" : 1
}
'';
If you need to run the latest possible version of any of these pieces of software for whatever reason, above what is packaged in NixOS, you may want to check out Community Overlays at the bottom of this article.
If you need to run a branch of Monado or WiVRn, you can use .overrideAttrs
, see below for an example of doing this for Coreforge’s Monado Pimax fork.
monado = {
enable = true;
defaultRuntime = true;
highPriority = true;
package = (pkgs.monado.overrideAttrs {
pname = "monado-pimax"; # optional but helps distinguishing between packages
src = pkgs.fetchFromGitLab {
domain = "gitlab.freedesktop.org";
owner = "Coreforge";
repo = "monado";
rev = "f858ee5dd8ca7696bd9219e8278f2671df56fe6e";
hash = "sha256-Si56yvG+oSfyUaPAlF1FgB7WJo8td1xuVxYnkJvbu4o=";
};
});
};
Monado #
Monado is supported natively on NixOS using the services.monado since 24.05.
Make sure to follow the official guide as it sets the minimal requirements needed, then, if those aren’t sufficient:
In case of the headset view stuttering, adding U_PACING_COMP_MIN_TIME_MS = "5";
to systemd.user.services.monado.environment
could help. Adjust the value as needed.
Similarly, setting the cpu Niceness value to a higher priority manually with renice -20 -p $(pgrep monado)
could also help. Unfortunately systemd.user.services.monado.serviceConfig.Nice = -20;
does not seem to work.
Once monado is set up the nix way, use systemctl --user start monado.service
to run it and systemctl --user stop monado.service
to stop it.
WiVRn #
WiVRn is also supported natively on NixOS using the services.wivrn since 24.05.
As WiVRn is built around Monado, most, if not all, settings for Monado are also available for WiVRn, however you may need to change things like process and option names appropriately.
You can find WiVRn on the official NixOS wiki.
Steam Games #
To get Steam games working with monado on NixOS, use the env PRESSURE_VESSEL_FILESYSTEMS_RW=$XDG_RUNTIME_DIR/monado_comp_ipc %command%
launch options on steam and, if prompted, choose the SteamVR launch option.
OpenXR apps #
All OpenXR apps should work out of the box, assuming you have a default runtime set.
To set a default OpenXR runtime, you can either use services.monado.defaultRuntime
(the same option is present for WiVRn) or create/modify ~/.config/openxr/1/active_runtime.json
.
SteamVR #
SteamVR works like it does on other distros for the most part. Unfortunately, if it doesn’t work out of the box, troubleshooting it on NixOS can be close to impossible due to NixOS’s structure and SteamVR’s proprietary nature.
Asynchronous reprojection does not work without a kernel patch. However, this patch is only applicable for AMD GPUs. There is no way to get SteamVR asynchronous reprojection working on Nvidia.
setcap doesn’t work but can be done manually.
Envision #
Envision has been packaged in nixos 24.11 but is still in early development and is not recommended. It may also mess with your monado.service
setup in unexpected ways.
Notably, if you try to use Envision on NixOS, by default, binaries will be dynamically linked, not statically linked, which will cause many issues with VR apps. Also, if you try to use Envision with a dedicated PCVR headset (ie, Monado with an Index, Pimax, etc), asynchronous reprojection will not work without an AMD-only kernel patch, for the same reason as SteamVR.
Removing Envision #
In case you did not follow the above advice, and attempted to use Envision on NixOS, you may want to undo the changes it has made to your home folder, so services.monado
, services.wivrn
, opencomposite
and/or xrizer
may work correctly.
You will want to delete or modify ~/.config/openxr/1/active_runtime.json
. Note that this is an override for /etc/xdg/openxr/1/active_runtime.json
, so if you are using services.monado.defaultRuntime = true
(or the WiVRn equivalent) then you can safely delete this file. Otherwise, you’ll want to point it to your Monado installation, which will be somewhere in /nix/store
.
You will also want to modify ~/.config/openvr/openvrpaths.vrpath
. Remove any runtimes that point to Envision’s compiled binaries.
I recommend using home-manager to automate writing these config files, as these paths will change regularly, due to the nature of NixOS.
Community Overlays #
Nixpkgs-xr provides overlays for the exisiting nixpkgs. If the mainline packages are broken for you (whether it be compiling or in function) for any reason, adding this, as described in the readme, might help. It also provides XR-related packages considerably before they are available in NixOS.