From 8eee5f5272ac21df2f2db4b51eed28820c499930 Mon Sep 17 00:00:00 2001
From: j-k <dev@j-k.io>
Date: Sat, 26 Jun 2021 22:29:50 +0100
Subject: [PATCH] obs-studio: use wrapobs and the new plugin layout (#2142)

The packaging in nixpkgs for obs plugins has changed and there's a
wrapOBS function.
The name of the plugins has also changed so the example needed updating
to reflect that.

Related: https://github.com/NixOS/nixpkgs/pull/125308
---
 modules/programs/obs-studio.nix | 33 +++++++++++++--------------------
 1 file changed, 13 insertions(+), 20 deletions(-)

diff --git a/modules/programs/obs-studio.nix b/modules/programs/obs-studio.nix
index 8f2f56466..1ebde7f4b 100644
--- a/modules/programs/obs-studio.nix
+++ b/modules/programs/obs-studio.nix
@@ -6,21 +6,6 @@ let
 
   cfg = config.programs.obs-studio;
 
-  mkPluginEnv = packages:
-    let
-      pluginDirs = map (pkg: "${pkg}/share/obs/obs-plugins") packages;
-      plugins = concatMapStringsSep " " (p: "${p}/*") pluginDirs;
-    in pkgs.runCommand "obs-studio-plugins" {
-      preferLocalBuild = true;
-      allowSubstitutes = false;
-    } ''
-      mkdir $out
-      [[ '${plugins}' ]] || exit 0
-      for plugin in ${plugins}; do
-        ln -s "$plugin" $out/
-      done
-    '';
-
 in {
   meta.maintainers = [ maintainers.adisbladis ];
 
@@ -37,9 +22,16 @@ in {
         '';
       };
 
+      finalPackage = mkOption {
+        type = types.package;
+        visible = false;
+        readOnly = true;
+        description = "Resulting customized OBS Studio package.";
+      };
+
       plugins = mkOption {
         default = [ ];
-        example = literalExample "[ pkgs.obs-linuxbrowser ]";
+        example = literalExample "[ pkgs.obs-studio-plugins.wlrobs ]";
         description = "Optional OBS plugins.";
         type = types.listOf types.package;
       };
@@ -47,9 +39,10 @@ in {
   };
 
   config = mkIf cfg.enable {
-    home.packages = [ cfg.package ];
-
-    xdg.configFile."obs-studio/plugins" =
-      mkIf (cfg.plugins != [ ]) { source = mkPluginEnv cfg.plugins; };
+    home.packages = [ cfg.finalPackage ];
+    programs.obs-studio.finalPackage =
+      pkgs.wrapOBS.override { obs-studio = cfg.package; } {
+        plugins = cfg.plugins;
+      };
   };
 }