summary refs log tree commit diff
diff options
context:
space:
mode:
authorV <v@anomalous.eu>2021-06-17 20:05:26 +0200
committerGitHub <noreply@github.com>2021-06-17 14:05:26 -0400
commite8e025516256498d4217086e349e6b4b291e352e (patch)
tree3aaae5aa43ff985d848b5abe7bbefec86eb38ead
parentb26545db7e07e26f2ebacf449400f5aa04ee7f29 (diff)
downloadnixpkgs-e8e025516256498d4217086e349e6b4b291e352e.tar
nixpkgs-e8e025516256498d4217086e349e6b4b291e352e.tar.gz
nixpkgs-e8e025516256498d4217086e349e6b4b291e352e.tar.bz2
nixpkgs-e8e025516256498d4217086e349e6b4b291e352e.tar.lz
nixpkgs-e8e025516256498d4217086e349e6b4b291e352e.tar.xz
nixpkgs-e8e025516256498d4217086e349e6b4b291e352e.tar.zst
nixpkgs-e8e025516256498d4217086e349e6b4b291e352e.zip
obs-studio: add plugin wrapper (#125308)
* obs-studio: tidy things up a little

* obs-studio: add plugin wrapper

This allows users to install plugins into their OBS Studio, like so:

	wrapOBS {
	  plugins = with obs-studio-plugins; [
	    wlrobs
	    obs-multi-rtmp
	    obs-gstreamer
	  ];
	}

* obs-gstreamer: convert to plugin

* obs-move-transition: convert to plugin

* obs-multi-rtmp: convert to plugin

* obs-ndi: convert to plugin

* obs-v4l2sink: remove

The functionality provided by this package is included in the upstream
project as of version 26.1.

Link: https://github.com/CatxFish/obs-v4l2sink/issues/56#issuecomment-753191690
Link: https://github.com/obsproject/obs-studio/releases/tag/26.1.0

* wlrobs: convert to plugin, unstable-2020-06-22 -> unstable-2021-05-13
-rw-r--r--pkgs/applications/video/obs-studio/default.nix10
-rw-r--r--pkgs/applications/video/obs-studio/plugins/default.nix9
-rw-r--r--pkgs/applications/video/obs-studio/plugins/fix-search-path.patch (renamed from pkgs/applications/video/obs-studio/fix-search-path.patch)0
-rw-r--r--pkgs/applications/video/obs-studio/plugins/hardcode-ndi-path.patch (renamed from pkgs/applications/video/obs-studio/hardcode-ndi-path.patch)0
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-gstreamer.nix (renamed from pkgs/applications/video/obs-studio/obs-gstreamer.nix)12
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-move-transition.nix (renamed from pkgs/applications/video/obs-studio/obs-move-transition.nix)12
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-multi-rtmp.nix (renamed from pkgs/applications/video/obs-studio/obs-multi-rtmp.nix)12
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-ndi.nix (renamed from pkgs/applications/video/obs-studio/obs-ndi.nix)7
-rw-r--r--pkgs/applications/video/obs-studio/plugins/rename-obs-move-transition-cmake.patch (renamed from pkgs/applications/video/obs-studio/rename-obs-move-transition-cmake.patch)0
-rw-r--r--pkgs/applications/video/obs-studio/plugins/wlrobs.nix26
-rw-r--r--pkgs/applications/video/obs-studio/v4l2sink.nix57
-rw-r--r--pkgs/applications/video/obs-studio/wlrobs.nix42
-rw-r--r--pkgs/applications/video/obs-studio/wrapper.nix21
-rw-r--r--pkgs/top-level/aliases.nix32
-rw-r--r--pkgs/top-level/all-packages.nix16
15 files changed, 96 insertions, 160 deletions
diff --git a/pkgs/applications/video/obs-studio/default.nix b/pkgs/applications/video/obs-studio/default.nix
index ff56fa1c0fb..d7784279c31 100644
--- a/pkgs/applications/video/obs-studio/default.nix
+++ b/pkgs/applications/video/obs-studio/default.nix
@@ -114,13 +114,13 @@ in mkDerivation rec {
   ];
 
   postInstall = ''
-      wrapProgram $out/bin/obs \
-        --prefix "LD_LIBRARY_PATH" : "${xorg.libX11.out}/lib:${libvlc}/lib"
+    wrapProgram $out/bin/obs \
+      --prefix "LD_LIBRARY_PATH" : "${xorg.libX11.out}/lib:${libvlc}/lib"
   '';
 
   postFixup = lib.optionalString stdenv.isLinux ''
-      addOpenGLRunpath $out/lib/lib*.so
-      addOpenGLRunpath $out/lib/obs-plugins/*.so
+    addOpenGLRunpath $out/lib/lib*.so
+    addOpenGLRunpath $out/lib/obs-plugins/*.so
   '';
 
   meta = with lib; {
@@ -131,7 +131,7 @@ in mkDerivation rec {
       video content, efficiently
     '';
     homepage = "https://obsproject.com";
-    maintainers = with maintainers; [ jb55 MP2E ];
+    maintainers = with maintainers; [ jb55 MP2E V ];
     license = licenses.gpl2;
     platforms = [ "x86_64-linux" "i686-linux" ];
   };
diff --git a/pkgs/applications/video/obs-studio/plugins/default.nix b/pkgs/applications/video/obs-studio/plugins/default.nix
new file mode 100644
index 00000000000..477f0efa3e0
--- /dev/null
+++ b/pkgs/applications/video/obs-studio/plugins/default.nix
@@ -0,0 +1,9 @@
+{ callPackage, libsForQt5 }:
+
+{
+  obs-gstreamer = callPackage ./obs-gstreamer.nix {};
+  obs-move-transition = callPackage ./obs-move-transition.nix {};
+  obs-multi-rtmp = libsForQt5.callPackage ./obs-multi-rtmp.nix {};
+  obs-ndi = libsForQt5.callPackage ./obs-ndi.nix {};
+  wlrobs = callPackage ./wlrobs.nix {};
+}
diff --git a/pkgs/applications/video/obs-studio/fix-search-path.patch b/pkgs/applications/video/obs-studio/plugins/fix-search-path.patch
index 4503447ff5d..4503447ff5d 100644
--- a/pkgs/applications/video/obs-studio/fix-search-path.patch
+++ b/pkgs/applications/video/obs-studio/plugins/fix-search-path.patch
diff --git a/pkgs/applications/video/obs-studio/hardcode-ndi-path.patch b/pkgs/applications/video/obs-studio/plugins/hardcode-ndi-path.patch
index caef96c381f..caef96c381f 100644
--- a/pkgs/applications/video/obs-studio/hardcode-ndi-path.patch
+++ b/pkgs/applications/video/obs-studio/plugins/hardcode-ndi-path.patch
diff --git a/pkgs/applications/video/obs-studio/obs-gstreamer.nix b/pkgs/applications/video/obs-studio/plugins/obs-gstreamer.nix
index e32ec7575b2..d21d78c42b2 100644
--- a/pkgs/applications/video/obs-studio/obs-gstreamer.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-gstreamer.nix
@@ -22,18 +22,6 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ pkg-config meson ninja ];
   buildInputs = [ gst_all_1.gstreamermm obs-studio ];
 
-  # obs-studio expects the shared object to be located in bin/32bit or bin/64bit
-  # https://github.com/obsproject/obs-studio/blob/d60c736cb0ec0491013293c8a483d3a6573165cb/libobs/obs-nix.c#L48
-  postInstall = let
-    pluginPath = {
-      i686-linux = "bin/32bit";
-      x86_64-linux = "bin/64bit";
-    }.${stdenv.targetPlatform.system} or (throw "Unsupported system: ${stdenv.targetPlatform.system}");
-  in ''
-    mkdir -p $out/share/obs/obs-plugins/obs-gstreamer/${pluginPath}
-    ln -s $out/lib/obs-plugins/obs-gstreamer.so $out/share/obs/obs-plugins/obs-gstreamer/${pluginPath}
-  '';
-
   meta = with lib; {
     description = "An OBS Studio source, encoder and video filter plugin to use GStreamer elements/pipelines in OBS Studio";
     homepage = "https://github.com/fswoch/obs-gstreamer";
diff --git a/pkgs/applications/video/obs-studio/obs-move-transition.nix b/pkgs/applications/video/obs-studio/plugins/obs-move-transition.nix
index 9a896c7320a..befc27dd5dc 100644
--- a/pkgs/applications/video/obs-studio/obs-move-transition.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-move-transition.nix
@@ -39,18 +39,6 @@ stdenv.mkDerivation rec {
     substituteInPlace audio-move.c --replace '<../UI/obs-frontend-api/obs-frontend-api.h>' '<obs-frontend-api.h>'
   '';
 
-  # obs-studio expects the shared object to be located in bin/32bit or bin/64bit
-  # https://github.com/obsproject/obs-studio/blob/d60c736cb0ec0491013293c8a483d3a6573165cb/libobs/obs-nix.c#L48
-  postInstall = let
-    pluginPath = {
-      i686-linux = "bin/32bit";
-      x86_64-linux = "bin/64bit";
-    }.${stdenv.targetPlatform.system} or (throw "Unsupported system: ${stdenv.targetPlatform.system}");
-  in ''
-    mkdir -p $out/share/obs/obs-plugins/move-transition/${pluginPath}
-    ln -s $out/lib/obs-plugins/move-transition.so $out/share/obs/obs-plugins/move-transition/${pluginPath}
-  '';
-
   meta = with lib; {
     description = "Plugin for OBS Studio to move source to a new position during scene transition";
     homepage = "https://github.com/exeldro/obs-move-transition";
diff --git a/pkgs/applications/video/obs-studio/obs-multi-rtmp.nix b/pkgs/applications/video/obs-studio/plugins/obs-multi-rtmp.nix
index f716d93a360..0122cba0f3d 100644
--- a/pkgs/applications/video/obs-studio/obs-multi-rtmp.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-multi-rtmp.nix
@@ -20,18 +20,6 @@ stdenv.mkDerivation rec {
 
   dontWrapQtApps = true;
 
-  # obs-studio expects the shared object to be located in bin/32bit or bin/64bit
-  # https://github.com/obsproject/obs-studio/blob/d60c736cb0ec0491013293c8a483d3a6573165cb/libobs/obs-nix.c#L48
-  postInstall = let
-    pluginPath = {
-      i686-linux = "bin/32bit";
-      x86_64-linux = "bin/64bit";
-    }.${stdenv.targetPlatform.system} or (throw "Unsupported system: ${stdenv.targetPlatform.system}");
-  in ''
-    mkdir -p $out/share/obs/obs-plugins/obs-multi-rtmp/${pluginPath}
-    ln -s $out/lib/obs-plugins/obs-multi-rtmp.so $out/share/obs/obs-plugins/obs-multi-rtmp/${pluginPath}
-  '';
-
   meta = with lib; {
     homepage = "https://github.com/sorayuki/obs-multi-rtmp/";
     changelog = "https://github.com/sorayuki/obs-multi-rtmp/releases/tag/${version}";
diff --git a/pkgs/applications/video/obs-studio/obs-ndi.nix b/pkgs/applications/video/obs-studio/plugins/obs-ndi.nix
index b35398d65b5..1e2abb45a5b 100644
--- a/pkgs/applications/video/obs-studio/obs-ndi.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-ndi.nix
@@ -1,10 +1,3 @@
-# We don't have a wrapper which can supply obs-studio plugins so you have to
-# somewhat manually install this:
-
-# nix-env -f "<nixpkgs>" -iA obs-ndi
-# mkdir -p ~/.config/obs-studio/plugins/bin
-# ln -s ~/.nix-profile/lib/obs-plugins/obs-ndi.so ~/.config/obs-studio/plugins/bin/
-
 { lib, stdenv, fetchFromGitHub, obs-studio, cmake, qtbase, ndi }:
 
 stdenv.mkDerivation rec {
diff --git a/pkgs/applications/video/obs-studio/rename-obs-move-transition-cmake.patch b/pkgs/applications/video/obs-studio/plugins/rename-obs-move-transition-cmake.patch
index ed6df1d565d..ed6df1d565d 100644
--- a/pkgs/applications/video/obs-studio/rename-obs-move-transition-cmake.patch
+++ b/pkgs/applications/video/obs-studio/plugins/rename-obs-move-transition-cmake.patch
diff --git a/pkgs/applications/video/obs-studio/plugins/wlrobs.nix b/pkgs/applications/video/obs-studio/plugins/wlrobs.nix
new file mode 100644
index 00000000000..adae03036f8
--- /dev/null
+++ b/pkgs/applications/video/obs-studio/plugins/wlrobs.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchhg
+, meson, pkg-config, ninja
+, wayland, obs-studio, libX11
+}:
+
+stdenv.mkDerivation {
+  pname = "wlrobs";
+  version = "unstable-2021-05-13";
+
+  src = fetchhg {
+    url = "https://hg.sr.ht/~scoopta/wlrobs";
+    rev = "4184a4a8ea7dc054c993efa16007f3a75b2c6f51";
+    sha256 = "146xirzd3nw1sd216y406v1riky9k08b6a0j4kwxrif5zyqa3adc";
+  };
+
+  nativeBuildInputs = [ meson pkg-config ninja ];
+  buildInputs = [ wayland obs-studio libX11 ];
+
+  meta = with lib; {
+    description = "An obs-studio plugin that allows you to screen capture on wlroots based wayland compositors";
+    homepage = "https://hg.sr.ht/~scoopta/wlrobs";
+    maintainers = with maintainers; [ grahamc V ];
+    license = licenses.gpl3Plus;
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/pkgs/applications/video/obs-studio/v4l2sink.nix b/pkgs/applications/video/obs-studio/v4l2sink.nix
deleted file mode 100644
index 2716120682e..00000000000
--- a/pkgs/applications/video/obs-studio/v4l2sink.nix
+++ /dev/null
@@ -1,57 +0,0 @@
-{ lib
-, stdenv
-, fetchFromGitHub
-, fetchpatch
-, cmake
-, qtbase
-, obs-studio
-}:
-
-stdenv.mkDerivation rec {
-  pname = "obs-v4l2sink";
-  version = "0.1.0-12-g1ec3c8a";
-
-  src = fetchFromGitHub {
-    owner = "CatxFish";
-    repo = "obs-v4l2sink";
-    rev = version;
-    sha256 = "03ah91cm1qz26k90mfx51l0d598i9bcmw39lkikjs1msm4c9dfxx";
-  };
-
-  nativeBuildInputs = [ cmake ];
-  buildInputs = [ qtbase obs-studio ];
-
-  dontWrapQtApps = true;
-
-  patches = [
-    # Fixes the segfault when stopping the plugin
-    (fetchpatch {
-      url = "https://github.com/CatxFish/obs-v4l2sink/commit/6604f01796d1b84a95714730ea51a6b8ac0e450b.diff";
-      sha256 = "0crcvw02dj0aqy7hnhizjdsnhiw03zmg6cbdkasxz2mrrbyc3s88";
-    })
-  ];
-
-  cmakeFlags = with lib; [
-    "-DLIBOBS_INCLUDE_DIR=${obs-studio.src}/libobs"
-  ];
-
-  # obs-studio expects the shared object to be located in bin/32bit or bin/64bit
-  # https://github.com/obsproject/obs-studio/blob/d60c736cb0ec0491013293c8a483d3a6573165cb/libobs/obs-nix.c#L48
-  postInstall = let
-    pluginPath = {
-      i686-linux = "bin/32bit";
-      x86_64-linux = "bin/64bit";
-    }.${stdenv.targetPlatform.system} or (throw "Unsupported system: ${stdenv.targetPlatform.system}");
-  in ''
-    mkdir -p $out/share/obs/obs-plugins/v4l2sink/${pluginPath}
-    ln -s $out/lib/obs-plugins/v4l2sink.so $out/share/obs/obs-plugins/v4l2sink/${pluginPath}
-  '';
-
-  meta = with lib; {
-    description = "obs studio output plugin for Video4Linux2 device";
-    homepage = "https://github.com/CatxFish/obs-v4l2sink";
-    maintainers = with maintainers; [ colemickens peelz ];
-    license = licenses.gpl2;
-    platforms = [ "x86_64-linux" "i686-linux" ];
-  };
-}
diff --git a/pkgs/applications/video/obs-studio/wlrobs.nix b/pkgs/applications/video/obs-studio/wlrobs.nix
deleted file mode 100644
index 47f6ea9e5dd..00000000000
--- a/pkgs/applications/video/obs-studio/wlrobs.nix
+++ /dev/null
@@ -1,42 +0,0 @@
-# (the following is somewhat lifted from ./linuxbrowser.nix)
-# We don't have a wrapper which can supply obs-studio plugins so you have to
-# somewhat manually install this:
-
-# nix-env -f . -iA obs-wlrobs
-# mkdir -p ~/.config/obs-studio/plugins/wlrobs/bin/64bit
-# ln -s ~/.nix-profile/share/obs/obs-plugins/wlrobs/bin/64bit/libwlrobs.so ~/.config/obs-studio/plugins/wlrobs/bin/64bit
-{ stdenv, fetchhg, wayland, obs-studio
-, meson, ninja, pkg-config, libX11
-, dmabufSupport ? false, libdrm ? null, libGL ? null, lib}:
-
-assert dmabufSupport -> libdrm != null && libGL != null;
-
-stdenv.mkDerivation {
-  pname = "obs-wlrobs";
-  version = "20200622";
-
-  src = fetchhg {
-    url = "https://hg.sr.ht/~scoopta/wlrobs";
-    rev = "1d3acaaf64049da3da9721aa8b9b47582fe0081b";
-    sha256 = "0qrcf8024r4ynfjw0zx8vn59ygx9q5rb196s6nyxmy3gkv2lfxlq";
-  };
-
-  buildInputs = [ libX11 libGL libdrm meson ninja pkg-config wayland obs-studio ];
-
-  installPhase = ''
-    mkdir -p $out/share/obs/obs-plugins/wlrobs/bin/64bit
-    cp ./libwlrobs.so $out/share/obs/obs-plugins/wlrobs/bin/64bit/
-  '';
-
-  mesonFlags = [
-    "-Duse_dmabuf=${lib.boolToString dmabufSupport}"
-  ];
-
-  meta = with lib; {
-    description = "An obs-studio plugin that allows you to screen capture on wlroots based wayland compositors";
-    homepage = "https://hg.sr.ht/~scoopta/wlrobs";
-    maintainers = with maintainers; [ grahamc ];
-    license = licenses.gpl3;
-    platforms = [ "x86_64-linux" ];
-  };
-}
diff --git a/pkgs/applications/video/obs-studio/wrapper.nix b/pkgs/applications/video/obs-studio/wrapper.nix
new file mode 100644
index 00000000000..3871151bbb2
--- /dev/null
+++ b/pkgs/applications/video/obs-studio/wrapper.nix
@@ -0,0 +1,21 @@
+{ obs-studio, symlinkJoin, makeWrapper }:
+
+{ plugins ? [] }:
+
+symlinkJoin {
+  name = "wrapped-${obs-studio.name}";
+
+  nativeBuildInputs = [ makeWrapper ];
+  paths = [ obs-studio ] ++ plugins;
+
+  postBuild = ''
+    wrapProgram $out/bin/obs \
+      --set OBS_PLUGINS_PATH      "$out/lib/obs-plugins" \
+      --set OBS_PLUGINS_DATA_PATH "$out/share/obs/obs-plugins"
+  '';
+
+  inherit (obs-studio) meta;
+  passthru = obs-studio.passthru // {
+    passthru.unwrapped = obs-studio;
+  };
+}
diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix
index ed0f82e9404..c4e214ab6cb 100644
--- a/pkgs/top-level/aliases.nix
+++ b/pkgs/top-level/aliases.nix
@@ -1018,6 +1018,38 @@ mapAliases ({
     & maintenance is abandoned by upstream.
   '';
 
+  # Added 2021-06-01
+  obs-gstreamer = throw ''
+    obs-gstreamer has been converted into a plugin for use with wrapOBS.
+    Its new location is obs-studio-plugins.obs-gstreamer.
+  '';
+
+  # Added 2021-06-01
+  obs-move-transition = throw ''
+    obs-move-transition has been converted into a plugin for use with wrapOBS.
+    Its new location is obs-studio-plugins.obs-move-transition.
+  '';
+
+  # Added 2021-06-01
+  obs-multi-rtmp = throw ''
+    obs-multi-rtmp has been converted into a plugin for use with wrapOBS.
+    Its new location is obs-studio-plugins.obs-multi-rtmp.
+  '';
+
+  # Added 2021-06-01
+  obs-ndi = throw ''
+    obs-ndi has been converted into a plugin for use with wrapOBS.
+    Its new location is obs-studio-plugins.obs-ndi.
+  '';
+
+  obs-v4l2sink = throw "obs-v4l2sink is integrated into upstream OBS since version 26.1";  # Added 2021-06-01
+
+  # Added 2021-06-01
+  obs-wlrobs = throw ''
+    wlrobs has been converted into a plugin for use with wrapOBS.
+    Its new location is obs-studio-plugins.wlrobs.
+  '';
+
   /* If these are in the scope of all-packages.nix, they cause collisions
   between mixed versions of qt. See:
   https://github.com/NixOS/nixpkgs/pull/101369 */
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 45423ab1491..59ebd860a11 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -25819,19 +25819,9 @@ in
 
   oberon-risc-emu = callPackage ../misc/emulators/oberon-risc-emu { };
 
-  obs-studio = libsForQt5.callPackage ../applications/video/obs-studio { };
-
-  obs-wlrobs = callPackage ../applications/video/obs-studio/wlrobs.nix { };
-
-  obs-gstreamer = callPackage ../applications/video/obs-studio/obs-gstreamer.nix { };
-
-  obs-move-transition = callPackage ../applications/video/obs-studio/obs-move-transition.nix { };
-
-  obs-multi-rtmp = libsForQt5.callPackage ../applications/video/obs-studio/obs-multi-rtmp.nix { };
-
-  obs-v4l2sink = libsForQt5.callPackage ../applications/video/obs-studio/v4l2sink.nix { };
-
-  obs-ndi = libsForQt5.callPackage ../applications/video/obs-studio/obs-ndi.nix { };
+  obs-studio = libsForQt5.callPackage ../applications/video/obs-studio {};
+  obs-studio-plugins = callPackage ../applications/video/obs-studio/plugins {};
+  wrapOBS = callPackage ../applications/video/obs-studio/wrapper.nix {};
 
   obsidian = callPackage ../applications/misc/obsidian { };