xrizer

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 using WiVRn, or if you are manually setting up Monado instead of using Envision, you can download xrizer at the following sources:

Arch Linux #

xrizer (latest release) and xrizer-git (latest development build / nightly) are available on the AUR.

GitHub release or CI jobs (for other distributions without a distro package) #

See the xrizer README for instructions.

Envision #

Edit your profile and change the ‘OpenVR Compatibility Type’ to xrizer.

Using full body trackers #

Currently xrizer does not support full body tracking, however there is a fork by Sapphire, with patches by RinLovesYou with support while using Monado. You should report issues encountered when running this branch to Sapphire (@sapphiwe on Discord), unless reproducible on the upstream main branch.

To use the above fork, follow these steps:

Envision #

  • 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
  • Clean build your profile from the menu at the top right, or use the Ctrl+F5 keybind.

NixOS #

Apply an overlay over nixpkgs to override the xrizer src:

{
  nixpkgs.overlays = [
    (final: prev: {
      xrizer = prev.xrizer.overrideAttrs {
        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 = "";
        };
      };
    })
  ];
}

Or reference the source using flakes (so that it updates with the nix flake update command):

# flake.nix
{
  inputs.xrizer-fbt = {
    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-fbt;
      };
    })
  ];
}

Rebinding controls #

The process is mostly the same as OpenComposite, however there are a few things different:

  • The default directory name is xrizer, not OpenComposite
  • You can override the location of the custom bindings directory using the environment variable XRIZER_CUSTOM_BINDINGS_DIR
  • The name of the .json file will be the internal name of the controller type, but lowercase (e.g. oculustouch.json)