nixos/obs-studio: nullable package

Allows setting `programs.obs-studio.package = null`, which is useful in
case the user wants the appropriate kernel modules from
`programs.obs-studio.enableVirtualCamera`, but does not wish to install
obs system-wide with nixos (e.g., because they want to install it just
for their user with home-manager or maybe via flatpak).
This commit is contained in:
MithicSpirit 2024-11-17 19:49:32 -05:00
parent 41fce88e6d
commit d14392eaf6
No known key found for this signature in database
GPG Key ID: 0EA043551EBD3C2E

View File

@ -12,10 +12,13 @@ in
options.programs.obs-studio = { options.programs.obs-studio = {
enable = lib.mkEnableOption "Free and open source software for video recording and live streaming"; enable = lib.mkEnableOption "Free and open source software for video recording and live streaming";
package = lib.mkPackageOption pkgs "obs-studio" { example = "obs-studio"; }; package = lib.mkPackageOption pkgs "obs-studio" {
nullable = true;
example = "obs-studio";
};
finalPackage = lib.mkOption { finalPackage = lib.mkOption {
type = lib.types.package; type = lib.types.nullOr lib.types.package;
visible = false; visible = false;
readOnly = true; readOnly = true;
description = "Resulting customized OBS Studio package."; description = "Resulting customized OBS Studio package.";
@ -39,11 +42,16 @@ in
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
programs.obs-studio.finalPackage = pkgs.wrapOBS.override { obs-studio = cfg.package; } { assertions = lib.singleton {
plugins = cfg.plugins; assertion = cfg.package == null -> cfg.plugins == [ ];
message = "Plugins cannot be set if package is null";
}; };
environment.systemPackages = [ cfg.finalPackage ]; programs.obs-studio.finalPackage = lib.mapNullable (
obs-studio: pkgs.wrapOBS.override { inherit obs-studio; } { plugins = cfg.plugins; }
) cfg.package;
environment.systemPackages = lib.optional (cfg.finalPackage != null) cfg.finalPackage;
boot = lib.mkIf cfg.enableVirtualCamera { boot = lib.mkIf cfg.enableVirtualCamera {
kernelModules = [ "v4l2loopback" ]; kernelModules = [ "v4l2loopback" ];