From dc7bf534349e52e219e9272ed89791cf7a826afa Mon Sep 17 00:00:00 2001 From: Danilo Reyes Date: Sat, 21 Sep 2024 15:33:58 -0600 Subject: [PATCH] updated obs-studio module. --- hosts/workstation/configuration.nix | 8 ++++++ pkgs/obs-studio.nix | 41 ++++++++++++++++++++++------- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/hosts/workstation/configuration.nix b/hosts/workstation/configuration.nix index f11406b..498ff95 100644 --- a/hosts/workstation/configuration.nix +++ b/hosts/workstation/configuration.nix @@ -113,6 +113,14 @@ obs-studio = { enable = true; enableVirtualCamera = true; + plugins = with pkgs.obs-studio-plugins; [ + obs-vkcapture + obs-vaapi + obs-tuna + looking-glass-obs + input-overlay + droidcam-obs + ]; }; }; services = { diff --git a/pkgs/obs-studio.nix b/pkgs/obs-studio.nix index c5dd405..97683a3 100644 --- a/pkgs/obs-studio.nix +++ b/pkgs/obs-studio.nix @@ -1,32 +1,55 @@ { pkgs, lib, config, ... }: + let cfg = config.programs.obs-studio; in { options.programs.obs-studio = { - enable = lib.mkEnableOption "OBS Studio program"; - package = lib.mkOption { + enable = lib.mkEnableOption (lib.mdDoc "obs-studio"); + + package = lib.mkPackageOption pkgs "obs-studio" { example = "obs-studio"; }; + + finalPackage = lib.mkOption { type = lib.types.package; - default = pkgs.obs-studio; - defaultText = "pkgs.obs-studio"; - description = "Set obs-studio package to use."; + visible = false; + readOnly = true; + description = "Resulting customized OBS Studio package."; }; + + plugins = lib.mkOption { + default = [ ]; + example = lib.literalExpression "[ pkgs.obs-studio-plugins.wlrobs ]"; + description = "Optional OBS plugins."; + type = lib.types.listOf lib.types.package; + }; + enableVirtualCamera = lib.mkOption { type = lib.types.bool; default = false; description = '' - Installs and sets up the v4l2loopback kernel module, necesary for OBS + Installs and sets up the v4l2loopback kernel module, necessary for OBS to start a virtual camera. ''; }; }; + config = lib.mkIf cfg.enable { - environment.systemPackages = [ cfg.package ]; + programs.obs-studio.finalPackage = + pkgs.wrapOBS.override { obs-studio = cfg.package; } { + plugins = cfg.plugins; + }; + + environment.systemPackages = [ cfg.finalPackage ]; + boot = lib.mkIf cfg.enableVirtualCamera { - extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ]; + kernelModules = [ "v4l2loopback" ]; + extraModulePackages = [ config.boot.kernelPackages.v4l2loopback ]; + extraModprobeConfig = '' options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1 ''; }; + security.polkit.enable = lib.mkIf cfg.enableVirtualCamera true; }; - meta.maintainers = [ lib.maintainers.CaptainJawZ ]; + + meta.maintainers = with lib.maintainers; [ CaptainJawZ ]; }