{
  pkgs,
  lib,
  osConfig,
  ...
}:
let
  withCuda = osConfig.system.name == "gunter";

  onnxruntime-gpu = (pkgs.onnxruntime.override { cudaSupport = withCuda; }).overrideAttrs (old: {
    # TODO: Remove when fixed in nixpkgs
    # https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/development/libraries/onnxruntime/default.nix#L154
    buildInputs = old.buildInputs ++ [ pkgs.cudaPackages.nccl ];
  });

  obs-backgrounremoval-gpu = (
    (pkgs.obs-studio-plugins.obs-backgroundremoval.override { onnxruntime = onnxruntime-gpu; })
    .overrideAttrs
      (old: {
        version = "1.1.14-beta";
        src = pkgs.fetchFromGitHub {
          owner = "occ-ai";
          repo = "obs-backgroundremoval";
          rev = "94be8c35fe077be93a6f5ef347a802295a36dddd";
          hash = "sha256-qnxDNeTWQYiRMqT6jNp8GC8ef6aaAAY+OXAak54dVc8=";
        };
        cmakeFlags =
          if withCuda then
            (lib.lists.remove "-DDISABLE_ONNXRUNTIME_GPU=ON" old.cmakeFlags)
          else
            old.cmakeFlags;
      })
  );
in
{
  programs.obs-studio = {
    enable = true;
    plugins =
      with pkgs.obs-studio-plugins;
      [
        obs-pipewire-audio-capture
        obs-shaderfilter
      ]
      ++ lib.optionals withCuda [ obs-backgrounremoval-gpu ];
  };
}