diff --git a/pkgs/applications/video/obs-studio/default.nix b/pkgs/applications/video/obs-studio/default.nix index ff56fa1c0fbc..d7784279c315 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 000000000000..477f0efa3e09 --- /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 similarity index 100% rename from pkgs/applications/video/obs-studio/fix-search-path.patch rename to 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 similarity index 100% rename from pkgs/applications/video/obs-studio/hardcode-ndi-path.patch rename to 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 similarity index 57% rename from pkgs/applications/video/obs-studio/obs-gstreamer.nix rename to pkgs/applications/video/obs-studio/plugins/obs-gstreamer.nix index e32ec7575b2d..d21d78c42b2a 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 similarity index 71% rename from pkgs/applications/video/obs-studio/obs-move-transition.nix rename to pkgs/applications/video/obs-studio/plugins/obs-move-transition.nix index 9a896c7320af..befc27dd5dca 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-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 similarity index 59% rename from pkgs/applications/video/obs-studio/obs-multi-rtmp.nix rename to pkgs/applications/video/obs-studio/plugins/obs-multi-rtmp.nix index f716d93a3603..0122cba0f3d8 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 similarity index 77% rename from pkgs/applications/video/obs-studio/obs-ndi.nix rename to pkgs/applications/video/obs-studio/plugins/obs-ndi.nix index b35398d65b5c..1e2abb45a5b3 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 "" -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 similarity index 100% rename from pkgs/applications/video/obs-studio/rename-obs-move-transition-cmake.patch rename to 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 000000000000..adae03036f81 --- /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 2716120682ea..000000000000 --- 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 47f6ea9e5ddb..000000000000 --- 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 000000000000..3871151bbb28 --- /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 ed0f82e9404f..c4e214ab6cbd 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 45423ab14912..59ebd860a11d 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 { };