xrizer#
xrizer is a reimplementation of OpenVR on top of OpenXR. This enables you to run OpenVR games through any OpenXR runtime without running SteamVR.
Application developers: The OpenVR implementation is incomplete and contains only what’s necessary to run most games for compatibility and may omit certain information - if you plan to implement software, utilize the OpenXR API.
Installation#
If you’re using the Flatpak version of WiVRn, xrizer is already included, however if necessary you can get an updated version from a distribution package or GitHub by following the steps below.
Install xrizer (latest release) or xrizer-git (nightly) from the AUR.
You may also want to install the lib32- version for compatibility with 32-bit games.
Install media-libs/xrizer from Guru.
See the xrizer README for installation instructions.
Edit your profile and change the ‘OpenVR Compatibility Type’ to xrizer.
Using full body trackers#
Support for full body trackers when using Monado has been merged. Make sure you’re using at least v0.4 or the latest nightly (see above).
Fixing VRChat gestures on Index controllers#
When using Index controllers, VRChat uses skeletal summary data to determine the gesture you’re performing, which is not supported by xrizer.
The next branch maintained by Sapphire (@sapphiwe on Discord) contains patches by RinLovesYou to add support for skeletal summary.
To use the above branch:
- Click the three dots next to the profile selector and select ‘Edit profile’
- If a popup asks if you would like to duplicate the profile, click yes.
- Scroll down to ‘OpenVR Compatibility’ and set the following fields:
- OpenVR Compatibility Repo:
https://github.com/ImSapphire/xrizer - OpenVR Compatibility Branch:
next
- OpenVR Compatibility Repo:
- Clean build your profile from the menu at the top right, or use the Ctrl+F5 keybind.
Apply an overlay over nixpkgs to override the xrizer src:
{
nixpkgs.overlays = [
(final: prev: {
xrizer = prev.xrizer.overrideAttrs rec {
src = final.fetchFromGitHub {
owner = "ImSapphire";
repo = "xrizer";
# Fill in the latest commit hash from https://github.com/ImSapphire/xrizer/commits/next (click the Copy full SHA button on the right side)
rev = "";
# Fill with the correct hash from the build error
hash = "";
};
cargoDeps = prev.rustPlatform.importCargoLock {
lockFile = src + "/Cargo.lock";
outputHashes = {
<any other packages that need it>
};
};
};
})
];
}Or reference the source using flakes (so that it updates with the nix flake update command):
# flake.nix
{
inputs.xrizer-next = {
url = "github:ImSapphire/xrizer/next";
flake = false;
};
outputs = {
nixosConfigurations = { nixpkgs, ... } @ inputs: {
<hostname> = {
<...>
specialArgs = { inherit <...> inputs; };
};
};
}
# configuration.nix
{ inputs, ... }:
{
nixpkgs.overlays = [
(final: prev: {
xrizer = prev.xrizer.overrideAttrs {
src = inputs.xrizer-next;
cargoDeps = prev.rustPlatform.importCargoLock {
lockFile = inputs.xrizer-next + "/Cargo.lock";
outputHashes = {
<any other packages that need it>
};
};
};
})
];
}Using controllers / other devices as full-body trackers#
You can use the XRIZER_TRACKER_SERIALS environment variable, documented in the Environment Variables section of the xrizer README, to force devices to be used as full-body trackers.
You can get the serial numbers using motoc’s show subcommand, or by looking at the top of the Monado/WiVRn log.
Rebinding controls#
The process is mostly the same as OpenComposite, however there are a few things different:
- The default directory name is
xrizer, notOpenComposite - You can override the location of the custom bindings directory using the environment variable
XRIZER_CUSTOM_BINDINGS_DIR - The name of the
.jsonfile will be the internal name of the controller type, but lowercase (e.g. oculustouch.json)