Files
nix-config/modules/hardware/vr.nix
2025-10-30 21:59:31 +01:00

109 lines
2.7 KiB
Nix

{
pkgs,
config,
lib,
...
}:
let
cfg = config.custom.hardware.vr;
# https://wiki.nixos.org/wiki/VR#Patching_AMDGPU_to_allow_high_priority_queues
amdgpu =
{
pkgs,
lib,
kernel ? pkgs.linuxPackages_latest.kernel,
}:
pkgs.stdenv.mkDerivation {
pname = "amdgpu-kernel-module";
inherit (kernel)
src
version
postPatch
nativeBuildInputs
;
kernel_dev = kernel.dev;
kernelVersion = kernel.modDirVersion;
modulePath = "drivers/gpu/drm/amd/amdgpu";
buildPhase = ''
BUILT_KERNEL=$kernel_dev/lib/modules/$kernelVersion/build
cp $BUILT_KERNEL/Module.symvers .
cp $BUILT_KERNEL/.config .
cp $kernel_dev/vmlinux .
make "-j$NIX_BUILD_CORES" modules_prepare
make "-j$NIX_BUILD_CORES" M=$modulePath modules
'';
installPhase = ''
make \
INSTALL_MOD_PATH="$out" \
XZ="xz -T$NIX_BUILD_CORES" \
M="$modulePath" \
modules_install
'';
meta = {
description = "AMD GPU kernel module";
license = lib.licenses.gpl3;
};
};
amdgpu-kernel-module = pkgs.callPackage amdgpu {
# Make sure the module targets the same kernel as your system is using.
kernel = config.boot.kernelPackages.kernel;
};
in
{
options.custom.hardware.vr = {
enable = lib.mkEnableOption "Enables amd gpus";
overdrive = lib.mkEnableOption "Enables overdrive";
rocm.enable = lib.mkEnableOption "Enables rocm";
};
#programs.envision = {
# enable = true;
# openFirewall = true;
#};
# systemctl --user start monado.service
# make sure ~/.config/openxr/1/active_runtime.json doesn't block it
# and ~/.config/openvr/openvrpaths.vrpath
config = lib.mkIf cfg.enable {
services.monado = {
enable = true;
defaultRuntime = true; # Register as default OpenXR runtime
};
environment.systemPackages = with pkgs; [
monado
wlx-overlay-s
wayvr-dashboard
];
systemd.user.services.monado.environment = {
STEAMVR_LH_ENABLE = "1";
XRT_COMPOSITOR_COMPUTE = "1";
WMR_HANDTRACKING = "0";
};
programs.git = {
enable = true;
lfs.enable = true;
};
hardware.steam-hardware.enable = true;
boot.extraModulePackages = [
(amdgpu-kernel-module.overrideAttrs (_: {
patches = [
(pkgs.fetchpatch {
name = "cap_sys_nice_begone.patch";
url = "https://github.com/Frogging-Family/community-patches/raw/master/linux61-tkg/cap_sys_nice_begone.mypatch";
hash = "sha256-Y3a0+x2xvHsfLax/uwycdJf3xLxvVfkfDVqjkxNaYEo=";
})
];
}))
];
};
}