about summary refs log tree commit diff
path: root/pkgs/applications/video
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/video')
-rw-r--r--pkgs/applications/video/ani-cli/default.nix4
-rw-r--r--pkgs/applications/video/celluloid/default.nix6
-rw-r--r--pkgs/applications/video/epgstation/default.nix8
-rw-r--r--pkgs/applications/video/epgstation/update.nix6
-rw-r--r--pkgs/applications/video/f1viewer/default.nix4
-rw-r--r--pkgs/applications/video/ffmpeg-normalize/default.nix4
-rw-r--r--pkgs/applications/video/handbrake/default.nix4
-rw-r--r--pkgs/applications/video/hdhomerun-config-gui/default.nix4
-rw-r--r--pkgs/applications/video/kodi/add-KODI_WEBSERVER_EXTRA_WHITELIST.patch88
-rw-r--r--pkgs/applications/video/kodi/unwrapped.nix15
-rw-r--r--pkgs/applications/video/kodi/wrapper.nix6
-rw-r--r--pkgs/applications/video/mirakurun/default.nix10
-rw-r--r--pkgs/applications/video/mirakurun/update.nix10
-rw-r--r--pkgs/applications/video/mpv/scripts/autocrop.nix19
-rw-r--r--pkgs/applications/video/mpv/scripts/autodeint.nix19
-rw-r--r--pkgs/applications/video/obs-studio/default.nix4
-rw-r--r--pkgs/applications/video/obs-studio/plugins/default.nix1
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-vkcapture.nix35
-rw-r--r--pkgs/applications/video/pitivi/default.nix8
-rw-r--r--pkgs/applications/video/quvi/library.nix1
-rw-r--r--pkgs/applications/video/quvi/scripts.nix1
-rw-r--r--pkgs/applications/video/quvi/tool.nix1
-rw-r--r--pkgs/applications/video/webcamoid/default.nix13
-rw-r--r--pkgs/applications/video/webtorrent_desktop/default.nix155
24 files changed, 287 insertions, 139 deletions
diff --git a/pkgs/applications/video/ani-cli/default.nix b/pkgs/applications/video/ani-cli/default.nix
index 6883587b4b810..720df51a34ef5 100644
--- a/pkgs/applications/video/ani-cli/default.nix
+++ b/pkgs/applications/video/ani-cli/default.nix
@@ -12,13 +12,13 @@
 
 stdenvNoCC.mkDerivation rec {
   pname = "ani-cli";
-  version = "1.9";
+  version = "2.1";
 
   src = fetchFromGitHub {
     owner = "pystardust";
     repo = "ani-cli";
     rev = "v${version}";
-    sha256 = "sha256-oYiq3Mnuhba5NELJXqVN3gY/d0RfQIqW13YtdcmYKK4=";
+    sha256 = "sha256-A1c7YdBh2VOhw/xTvhNV50j9n+SELyRTHI5w+AeiWDs=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/applications/video/celluloid/default.nix b/pkgs/applications/video/celluloid/default.nix
index 291b4b9ebfc64..98495ca5affb7 100644
--- a/pkgs/applications/video/celluloid/default.nix
+++ b/pkgs/applications/video/celluloid/default.nix
@@ -18,13 +18,13 @@
 
 stdenv.mkDerivation rec {
   pname = "celluloid";
-  version = "0.22";
+  version = "0.23";
 
   src = fetchFromGitHub {
     owner = "celluloid-player";
     repo = "celluloid";
     rev = "v${version}";
-    hash = "sha256-QGN8YLtyb9YVNDK2ZDQwHJVg6UTIQssfNK9lQqxMNKQ=";
+    hash = "sha256-YKDud/UJJx9ko5k+Oux8mUUme0MXaRMngESE14Hhxv8=";
   };
 
   nativeBuildInputs = [
@@ -46,8 +46,6 @@ stdenv.mkDerivation rec {
 
   postPatch = ''
     patchShebangs meson-post-install.py src/generate-authors.py
-    # Remove this for next release
-    substituteInPlace meson-post-install.py --replace "gtk-update-icon-cache" "gtk4-update-icon-cache"
   '';
 
   doCheck = true;
diff --git a/pkgs/applications/video/epgstation/default.nix b/pkgs/applications/video/epgstation/default.nix
index 77510ae153deb..b89193617274f 100644
--- a/pkgs/applications/video/epgstation/default.nix
+++ b/pkgs/applications/video/epgstation/default.nix
@@ -1,8 +1,7 @@
 { lib
 , stdenv
 , fetchFromGitHub
-, common-updater-scripts
-, genericUpdater
+, gitUpdater
 , writers
 , makeWrapper
 , bash
@@ -115,7 +114,7 @@ let
       ln -sfT /var/lib/epgstation/thumbnail thumbnail
 
       makeWrapper ${nodejs}/bin/npm $out/bin/epgstation \
-       --run "cd $out/lib/node_modules/epgstation" \
+       --chdir "$out/lib/node_modules/epgstation" \
        --prefix PATH : ${lib.makeBinPath runtimeDeps} \
        --set APP_ROOT_PATH "$out/lib/node_modules/epgstation"
 
@@ -130,8 +129,7 @@ let
       inherit
         pname
         version
-        common-updater-scripts
-        genericUpdater
+        gitUpdater
         writers
         jq
         yq;
diff --git a/pkgs/applications/video/epgstation/update.nix b/pkgs/applications/video/epgstation/update.nix
index 5eb23be6c52b6..387fbe0db62d2 100644
--- a/pkgs/applications/video/epgstation/update.nix
+++ b/pkgs/applications/video/epgstation/update.nix
@@ -2,19 +2,17 @@
 , version
 , homepage
 , lib
-, common-updater-scripts
-, genericUpdater
+, gitUpdater
 , writers
 , jq
 , yq
 }:
 
 let
-  updater = genericUpdater {
+  updater = gitUpdater {
     inherit pname version;
     attrPath = lib.toLower pname;
     rev-prefix = "v";
-    versionLister = "${common-updater-scripts}/bin/list-git-tags --url=${homepage}";
   };
   updateScript = builtins.elemAt updater 0;
   updateArgs = map (lib.escapeShellArg) (builtins.tail updater);
diff --git a/pkgs/applications/video/f1viewer/default.nix b/pkgs/applications/video/f1viewer/default.nix
index c241dd8a7458f..2620142fb11e9 100644
--- a/pkgs/applications/video/f1viewer/default.nix
+++ b/pkgs/applications/video/f1viewer/default.nix
@@ -2,13 +2,13 @@
 
 buildGoModule rec {
   pname = "f1viewer";
-  version = "2.6.2";
+  version = "2.7.0";
 
   src = fetchFromGitHub {
     owner = "SoMuchForSubtlety";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-Z6rnkHypk7r9NnYwqZpWQOuGPbWn/EppS+46PQHIdDM=";
+    sha256 = "sha256-jXC2dENXuqicNQqTHyZKsjibDvjta/npQmf3+uivjX0=";
   };
 
   vendorSha256 = "sha256-UNeH3zxgssXxFpJws6nAL8EgXt0DRyAQfmlJWz/qyDg=";
diff --git a/pkgs/applications/video/ffmpeg-normalize/default.nix b/pkgs/applications/video/ffmpeg-normalize/default.nix
index a2f802c6e87bb..9331471c747e6 100644
--- a/pkgs/applications/video/ffmpeg-normalize/default.nix
+++ b/pkgs/applications/video/ffmpeg-normalize/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonApplication rec {
   pname = "ffmpeg-normalize";
-  version = "1.22.8";
+  version = "1.22.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-vxiq6q8fPh8ZLKnxYdIN591UQW73FWsoke1PvKTkko8=";
+    sha256 = "sha256-RBrCIDinPXbXKqrrhqVf3rV4rfi+2PttIaYxUKOk7hs=";
   };
 
   propagatedBuildInputs = [ ffmpeg ffmpeg-progress-yield ];
diff --git a/pkgs/applications/video/handbrake/default.nix b/pkgs/applications/video/handbrake/default.nix
index 841604399ed36..3c73e7f59944b 100644
--- a/pkgs/applications/video/handbrake/default.nix
+++ b/pkgs/applications/video/handbrake/default.nix
@@ -11,7 +11,7 @@
 , lib
 , fetchFromGitHub
   # For tests
-, testVersion
+, testers
 , runCommand
 , fetchurl
   # Main build tools
@@ -230,7 +230,7 @@ let self = stdenv.mkDerivation rec {
         HandBrakeCLI -i ${testMkv} -o test.mkv -e x264 -q 20 -B 160
         test -e test.mkv
       '';
-    version = testVersion { package = self; command = "HandBrakeCLI --version"; };
+    version = testers.testVersion { package = self; command = "HandBrakeCLI --version"; };
   };
 
   meta = with lib; {
diff --git a/pkgs/applications/video/hdhomerun-config-gui/default.nix b/pkgs/applications/video/hdhomerun-config-gui/default.nix
index 62726dff41123..32f4267d9fcc1 100644
--- a/pkgs/applications/video/hdhomerun-config-gui/default.nix
+++ b/pkgs/applications/video/hdhomerun-config-gui/default.nix
@@ -16,7 +16,9 @@ stdenv.mkDerivation rec {
   makeFlags = [ "SUBDIRS=src" ];
 
   installPhase = ''
-    install -vDm 755 src/hdhomerun_config_gui $out/usr/bin/hdhomerun_config_gui
+    runHook preInstall
+    install -vDm 755 src/hdhomerun_config_gui $out/bin/hdhomerun_config_gui
+    runHook postInstall
   '';
 
   meta = with lib; {
diff --git a/pkgs/applications/video/kodi/add-KODI_WEBSERVER_EXTRA_WHITELIST.patch b/pkgs/applications/video/kodi/add-KODI_WEBSERVER_EXTRA_WHITELIST.patch
new file mode 100644
index 0000000000000..ae221eff60450
--- /dev/null
+++ b/pkgs/applications/video/kodi/add-KODI_WEBSERVER_EXTRA_WHITELIST.patch
@@ -0,0 +1,88 @@
+From 620c3eb38f0dbea6e877e37e97508513e87a0732 Mon Sep 17 00:00:00 2001
+From: Jeremy Fleischman <jeremyfleischman@gmail.com>
+Date: Sun, 27 Mar 2022 00:44:52 -0700
+Subject: [PATCH] Add new KODI_WEBSERVER_EXTRA_WHITELIST cmake var to allow
+ access to more directories
+
+(This is a backport of
+https://github.com/xbmc/xbmc/commit/a6dedce7ba1f03bdd83b019941d1e369a06f7888
+to Kodi 19.4 Matrix)
+
+This is useful for NixOS, which often ends up creating a `KODI_HOME`
+with symlinks to other files (including the chorus2 interface). Kodi's
+webserver cautiously refuses to follow these symlinks, and you end up
+getting 404s rather than the web page.
+
+See https://forum.kodi.tv/showthread.php?tid=366338&pid=3079493 for a
+discussion of this on the Kodi forum.
+---
+ CMakeLists.txt           | 1 +
+ xbmc/CompileInfo.cpp.in  | 5 +++++
+ xbmc/CompileInfo.h       | 1 +
+ xbmc/utils/FileUtils.cpp | 6 +++++-
+ 4 files changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2d5369798df23..d5ef6d9390ef0 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -243,6 +243,7 @@ add_custom_command(OUTPUT ${CORE_BUILD_DIR}/xbmc/CompileInfo.cpp
+                                             -DAPP_BUILD_DATE=${APP_BUILD_DATE}
+                                             -DAPP_SHARED_LIBRARY_SUFFIX="${APP_SHARED_LIBRARY_SUFFIX}"
+                                             -Dprefix=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}
++                                            -DKODI_WEBSERVER_EXTRA_WHITELIST="${KODI_WEBSERVER_EXTRA_WHITELIST}"
+                                             -P ${CMAKE_SOURCE_DIR}/cmake/scripts/common/GenerateVersionedFiles.cmake
+                    DEPENDS ${CMAKE_SOURCE_DIR}/version.txt
+                            export-files
+diff --git a/xbmc/CompileInfo.cpp.in b/xbmc/CompileInfo.cpp.in
+index f81fe77902236..4f19203a89cde 100644
+--- a/xbmc/CompileInfo.cpp.in
++++ b/xbmc/CompileInfo.cpp.in
+@@ -105,3 +105,8 @@ std::vector<std::string> CCompileInfo::GetAvailableWindowSystems()
+ {
+   return StringUtils::Split("@CORE_PLATFORM_NAME_LC@", ' ');
+ }
++
++const std::vector<std::string> CCompileInfo::GetWebserverExtraWhitelist()
++{
++  return StringUtils::Split("@KODI_WEBSERVER_EXTRA_WHITELIST@", ',');
++}
+diff --git a/xbmc/CompileInfo.h b/xbmc/CompileInfo.h
+index 553a0194ee77f..e2521324e6576 100644
+--- a/xbmc/CompileInfo.h
++++ b/xbmc/CompileInfo.h
+@@ -32,4 +32,5 @@ class CCompileInfo
+   static const char* GetVersionCode();
+   static std::vector<std::string> GetAvailableWindowSystems();
+   static std::vector<ADDON::RepoInfo> LoadOfficialRepoInfos();
++  static const std::vector<std::string> GetWebserverExtraWhitelist();
+ };
+diff --git a/xbmc/utils/FileUtils.cpp b/xbmc/utils/FileUtils.cpp
+index e51f3d631c256..fc717c9608098 100644
+--- a/xbmc/utils/FileUtils.cpp
++++ b/xbmc/utils/FileUtils.cpp
+@@ -6,6 +6,7 @@
+  *  See LICENSES/README.md for more information.
+  */
+ 
++#include "CompileInfo.h"
+ #include "FileUtils.h"
+ #include "ServiceBroker.h"
+ #include "guilib/GUIKeyboardFactory.h"
+@@ -261,12 +262,15 @@ bool CFileUtils::CheckFileAccessAllowed(const std::string &filePath)
+     "/.ssh/",
+   };
+   // ALLOW kodi paths
+-  const std::vector<std::string> whitelist = {
++  std::vector<std::string> whitelist = {
+     CSpecialProtocol::TranslatePath("special://home"),
+     CSpecialProtocol::TranslatePath("special://xbmc"),
+     CSpecialProtocol::TranslatePath("special://musicartistsinfo")
+   };
+ 
++  auto kodiExtraWhitelist = CCompileInfo::GetWebserverExtraWhitelist();
++  whitelist.insert(whitelist.end(), kodiExtraWhitelist.begin(), kodiExtraWhitelist.end());
++
+   // image urls come in the form of image://... sometimes with a / appended at the end
+   // and can be embedded in a music or video file image://music@...
+   // strip this off to get the real file path
diff --git a/pkgs/applications/video/kodi/unwrapped.nix b/pkgs/applications/video/kodi/unwrapped.nix
index 18319468eae90..47f3e0a9d996b 100644
--- a/pkgs/applications/video/kodi/unwrapped.nix
+++ b/pkgs/applications/video/kodi/unwrapped.nix
@@ -107,6 +107,15 @@ in stdenv.mkDerivation {
 
     src = kodi_src;
 
+    # This is a backport of
+    # https://github.com/xbmc/xbmc/commit/a6dedce7ba1f03bdd83b019941d1e369a06f7888
+    # to Kodi 19.4 Matrix.
+    # This can be removed once a new release of Kodi comes out and we upgrade
+    # to it.
+    patches = [
+      ./add-KODI_WEBSERVER_EXTRA_WHITELIST.patch
+    ];
+
     buildInputs = [
       gnutls libidn libtasn1 nasm p11-kit
       libxml2 python3Packages.python
@@ -185,6 +194,12 @@ in stdenv.mkDerivation {
       "-DSWIG_EXECUTABLE=${buildPackages.swig}/bin/swig"
       "-DFLATBUFFERS_FLATC_EXECUTABLE=${buildPackages.flatbuffers}/bin/flatc"
       "-DPYTHON_EXECUTABLE=${buildPackages.python3Packages.python}/bin/python"
+      # When wrapped KODI_HOME will likely contain symlinks to static assets
+      # that Kodi's built in webserver will cautiously refuse to serve up
+      # (because their realpaths are outside of KODI_HOME and the other
+      # whitelisted directories). This adds the entire nix store to the Kodi
+      # webserver whitelist to avoid this problem.
+      "-DKODI_WEBSERVER_EXTRA_WHITELIST=${builtins.storeDir}"
     ] ++ lib.optional waylandSupport [
       "-DWAYLANDPP_SCANNER=${buildPackages.waylandpp}/bin/wayland-scanner++"
     ];
diff --git a/pkgs/applications/video/kodi/wrapper.nix b/pkgs/applications/video/kodi/wrapper.nix
index 2380d0023d576..52b7679a325ea 100644
--- a/pkgs/applications/video/kodi/wrapper.nix
+++ b/pkgs/applications/video/kodi/wrapper.nix
@@ -35,11 +35,5 @@ buildEnv {
           (lib.concatMap
             (plugin: plugin.extraRuntimeDependencies or []) addons)}"
     done
-
-    # makeWrapper just created webinterface.default as a symlink. However,
-    # kodi's webserver carefully refuses to follow symlinks, so we need to copy
-    # these assets instead.
-    rm $out/share/kodi/addons/webinterface.default
-    cp -r ${kodi}/share/kodi/addons/webinterface.default/ $out/share/kodi/addons/webinterface.default
   '';
 }
diff --git a/pkgs/applications/video/mirakurun/default.nix b/pkgs/applications/video/mirakurun/default.nix
index 3987e12528444..d0d52ade25ad9 100644
--- a/pkgs/applications/video/mirakurun/default.nix
+++ b/pkgs/applications/video/mirakurun/default.nix
@@ -6,9 +6,8 @@
 { lib
 , stdenvNoCC
 , bash
-, common-updater-scripts
 , fetchFromGitHub
-, genericUpdater
+, gitUpdater
 , jq
 , makeWrapper
 , mkYarnPackage
@@ -61,7 +60,7 @@ stdenvNoCC.mkDerivation rec {
       mkdir -p $out/bin
 
       makeWrapper ${mirakurun}/bin/mirakurun-epgdump $out/bin/mirakurun-epgdump \
-        --run "cd ${mirakurun}/libexec/mirakurun/node_modules/mirakurun" \
+        --chdir "${mirakurun}/libexec/mirakurun/node_modules/mirakurun" \
         --prefix PATH : ${lib.makeBinPath runtimeDeps}
 
       # XXX: The original mirakurun command uses PM2 to manage the Mirakurun
@@ -70,7 +69,7 @@ stdenvNoCC.mkDerivation rec {
       # unique to PM2 is currently being used.
       makeWrapper ${yarn}/bin/yarn $out/bin/mirakurun-start \
         --add-flags "start" \
-        --run "cd ${mirakurun}/libexec/mirakurun/node_modules/mirakurun" \
+        --chdir "${mirakurun}/libexec/mirakurun/node_modules/mirakurun" \
         --prefix PATH : ${lib.makeBinPath runtimeDeps}
     '';
 
@@ -80,8 +79,7 @@ stdenvNoCC.mkDerivation rec {
     inherit
       pname
       version
-      common-updater-scripts
-      genericUpdater
+      gitUpdater
       writers
       jq
       yarn
diff --git a/pkgs/applications/video/mirakurun/update.nix b/pkgs/applications/video/mirakurun/update.nix
index 18a4d0ab25629..6fd13f81b87ad 100644
--- a/pkgs/applications/video/mirakurun/update.nix
+++ b/pkgs/applications/video/mirakurun/update.nix
@@ -2,8 +2,7 @@
 , version
 , homepage
 , lib
-, common-updater-scripts
-, genericUpdater
+, gitUpdater
 , writers
 , jq
 , yarn
@@ -11,15 +10,12 @@
 }:
 
 let
-  updater = genericUpdater {
+  updater = gitUpdater {
     inherit pname version;
     attrPath = lib.toLower pname;
 
     # exclude prerelease versions
-    versionLister = writers.writeBash "list-mirakurun-versions" ''
-      ${common-updater-scripts}/bin/list-git-tags --url=${homepage} \
-        | grep '^[0-9]\+\.[0-9]\+\.[0-9]\+$'
-    '';
+    ignoredVersions = "-";
   };
   updateScript = builtins.elemAt updater 0;
   updateArgs = map (lib.escapeShellArg) (builtins.tail updater);
diff --git a/pkgs/applications/video/mpv/scripts/autocrop.nix b/pkgs/applications/video/mpv/scripts/autocrop.nix
new file mode 100644
index 0000000000000..645a4dd16899f
--- /dev/null
+++ b/pkgs/applications/video/mpv/scripts/autocrop.nix
@@ -0,0 +1,19 @@
+{ stdenvNoCC, mpv-unwrapped, lib }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "mpv-autocrop";
+  version = mpv-unwrapped.version;
+  src = "${mpv-unwrapped.src.outPath}/TOOLS/lua/autocrop.lua";
+  dontBuild = true;
+  dontUnpack = true;
+  installPhase = ''
+    install -Dm644 ${src} $out/share/mpv/scripts/autocrop.lua
+  '';
+  passthru.scriptName = "autocrop.lua";
+
+  meta = {
+    description = "This script uses the lavfi cropdetect filter to automatically insert a crop filter with appropriate parameters for the currently playing video.";
+    homepage = "https://github.com/mpv-player/mpv/blob/master/TOOLS/lua/autocrop.lua";
+    license = lib.licenses.gpl2Plus;
+  };
+}
diff --git a/pkgs/applications/video/mpv/scripts/autodeint.nix b/pkgs/applications/video/mpv/scripts/autodeint.nix
new file mode 100644
index 0000000000000..b5369b748faf6
--- /dev/null
+++ b/pkgs/applications/video/mpv/scripts/autodeint.nix
@@ -0,0 +1,19 @@
+{ stdenvNoCC, mpv-unwrapped, lib }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "mpv-autodeint";
+  version = mpv-unwrapped.version;
+  src = "${mpv-unwrapped.src.outPath}/TOOLS/lua/autodeint.lua";
+  dontBuild = true;
+  dontUnpack = true;
+  installPhase = ''
+    install -Dm644 ${src} $out/share/mpv/scripts/autodeint.lua
+  '';
+  passthru.scriptName = "autodeint.lua";
+
+  meta = {
+    description = "This script uses the lavfi idet filter to automatically insert the appropriate deinterlacing filter based on a short section of the currently playing video.";
+    homepage = "https://github.com/mpv-player/mpv/blob/master/TOOLS/lua/autodeint.lua";
+    license = lib.licenses.gpl2Plus;
+  };
+}
diff --git a/pkgs/applications/video/obs-studio/default.nix b/pkgs/applications/video/obs-studio/default.nix
index 22c206dfe0378..83514923331ab 100644
--- a/pkgs/applications/video/obs-studio/default.nix
+++ b/pkgs/applications/video/obs-studio/default.nix
@@ -46,13 +46,13 @@ let
 in
 mkDerivation rec {
   pname = "obs-studio";
-  version = "27.2.1";
+  version = "27.2.4";
 
   src = fetchFromGitHub {
     owner = "obsproject";
     repo = "obs-studio";
     rev = version;
-    sha256 = "sha256-RHPzSw7wjnAHk90N7g53LyIH3ozO/hyZV5hVZpZe+Ow=";
+    sha256 = "sha256-OiSejQovSmhItrnrQlcVp9PCDRgAhuxTinSpXbH8bo0=";
     fetchSubmodules = true;
   };
 
diff --git a/pkgs/applications/video/obs-studio/plugins/default.nix b/pkgs/applications/video/obs-studio/plugins/default.nix
index 95b41c1c86f13..844d4a50b8526 100644
--- a/pkgs/applications/video/obs-studio/plugins/default.nix
+++ b/pkgs/applications/video/obs-studio/plugins/default.nix
@@ -9,4 +9,5 @@
   wlrobs = callPackage ./wlrobs.nix {};
   looking-glass-obs = callPackage ./looking-glass-obs.nix {};
   obs-nvfbc = callPackage ./obs-nvfbc.nix {};
+  obs-vkcapture = callPackage ./obs-vkcapture.nix {};
 }
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-vkcapture.nix b/pkgs/applications/video/obs-studio/plugins/obs-vkcapture.nix
new file mode 100644
index 0000000000000..bd74feb3bcc9f
--- /dev/null
+++ b/pkgs/applications/video/obs-studio/plugins/obs-vkcapture.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, ninja
+, wayland
+, obs-studio
+, libX11
+, vulkan-headers
+, vulkan-loader
+, libGL
+}:
+
+stdenv.mkDerivation rec {
+  pname = "obs-vkcapture";
+  version = "1.1.3";
+
+  src = fetchFromGitHub {
+    owner = "nowrep";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-iIV9ke2yPEt2Lf4bwiEHFip4tLhMS4raWGyCWpao74w=";
+  };
+
+  nativeBuildInputs = [ cmake ninja ];
+  buildInputs = [ libGL libX11 obs-studio vulkan-headers vulkan-loader wayland ];
+
+  meta = with lib; {
+    description = "OBS Linux Vulkan/OpenGL game capture";
+    homepage = "https://github.com/nowrep/obs-vkcapture";
+    maintainers = with maintainers; [ atila ];
+    license = licenses.gpl2Only;
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/pkgs/applications/video/pitivi/default.nix b/pkgs/applications/video/pitivi/default.nix
index 7ae463b987300..1b97fa9b7c665 100644
--- a/pkgs/applications/video/pitivi/default.nix
+++ b/pkgs/applications/video/pitivi/default.nix
@@ -1,5 +1,6 @@
 { lib
 , fetchurl
+, fetchpatch
 , pkg-config
 , gettext
 , itstool
@@ -36,6 +37,13 @@ python3Packages.buildPythonApplication rec {
     # and saves them to the generated binary. This would make the build-time
     # dependencies part of the closure so we remove it.
     ./prevent-closure-contamination.patch
+
+    # Fix build with meson 0.61
+    # https://gitlab.gnome.org/GNOME/pitivi/-/merge_requests/414
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/pitivi/-/commit/ddf2369d1fc6fddd63f676cc905a8b8e96291a4c.patch";
+      sha256 = "MC4naGnqhrYlFBFHZaSzbOzrqaNK5/Xv5jBmCu0fLQE=";
+    })
   ];
 
   nativeBuildInputs = [
diff --git a/pkgs/applications/video/quvi/library.nix b/pkgs/applications/video/quvi/library.nix
index 071e67a172116..548b3d7f9724d 100644
--- a/pkgs/applications/video/quvi/library.nix
+++ b/pkgs/applications/video/quvi/library.nix
@@ -18,5 +18,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.lgpl21Plus;
     platforms = lib.platforms.linux;
     maintainers = [ ];
+    broken = true; # missing glibc-2.34 support, no upstream activity
   };
 }
diff --git a/pkgs/applications/video/quvi/scripts.nix b/pkgs/applications/video/quvi/scripts.nix
index 676d073900c52..a31ef6e72ae6a 100644
--- a/pkgs/applications/video/quvi/scripts.nix
+++ b/pkgs/applications/video/quvi/scripts.nix
@@ -17,5 +17,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.lgpl21Plus;
     platforms = lib.platforms.linux;
     maintainers = [ ];
+    broken = true; # missing glibc-2.34 support, no upstream activity
   };
 }
diff --git a/pkgs/applications/video/quvi/tool.nix b/pkgs/applications/video/quvi/tool.nix
index 87c8066a976c5..ad6233cbd0012 100644
--- a/pkgs/applications/video/quvi/tool.nix
+++ b/pkgs/applications/video/quvi/tool.nix
@@ -21,5 +21,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.lgpl21Plus;
     platforms = lib.platforms.linux;
     maintainers = [ ];
+    broken = true; # missing glibc-2.34 support, no upstream activity
   };
 }
diff --git a/pkgs/applications/video/webcamoid/default.nix b/pkgs/applications/video/webcamoid/default.nix
index 63f1e885af309..b9c21b7ad7d17 100644
--- a/pkgs/applications/video/webcamoid/default.nix
+++ b/pkgs/applications/video/webcamoid/default.nix
@@ -1,13 +1,13 @@
-{ lib, fetchFromGitHub, pkg-config, libxcb, mkDerivation, qmake
+{ lib, fetchFromGitHub, pkg-config, libxcb, mkDerivation, cmake
 , qtbase, qtdeclarative, qtquickcontrols, qtquickcontrols2
 , ffmpeg-full, gst_all_1, libpulseaudio, alsa-lib, jack2
 , v4l-utils }:
 mkDerivation rec {
   pname = "webcamoid";
-  version = "8.8.0";
+  version = "9.0.0";
 
   src = fetchFromGitHub {
-    sha256 = "0a8M9GQ6Ea9jBCyfbORVyB6HC/O6jdcIZruQZj9Aai4=";
+    sha256 = "sha256-NV1BmG+fgy+ZcvHl+05VX5J1BAz8PxKiZ3z9BxjhMU0=";
     rev = version;
     repo = "webcamoid";
     owner = "webcamoid";
@@ -22,12 +22,7 @@ mkDerivation rec {
     v4l-utils
   ];
 
-  nativeBuildInputs = [ pkg-config qmake ];
-
-  qmakeFlags = [
-    "Webcamoid.pro"
-    "INSTALLQMLDIR=${placeholder "out"}/lib/qt/qml"
-  ];
+  nativeBuildInputs = [ pkg-config cmake ];
 
   meta = with lib; {
     description = "Webcam Capture Software";
diff --git a/pkgs/applications/video/webtorrent_desktop/default.nix b/pkgs/applications/video/webtorrent_desktop/default.nix
index b4f8af61fca5e..8f1353fa83e48 100644
--- a/pkgs/applications/video/webtorrent_desktop/default.nix
+++ b/pkgs/applications/video/webtorrent_desktop/default.nix
@@ -1,95 +1,76 @@
+## FIXME: see ../../../servers/code-server/ for a proper yarn packaging
+##  - export ELECTRON_SKIP_BINARY_DOWNLOAD=1
+##  - jq "del(.scripts.preinstall)" node_modules/shellcheck/package.json | sponge node_modules/shellcheck/package.json
 {
-  alsa-lib, atk, cairo, cups, dbus, dpkg, expat, fetchurl, fetchzip, fontconfig, freetype,
-  gdk-pixbuf, glib, gtk3, libX11, libXScrnSaver, libXcomposite, libXcursor,
-  libXdamage, libXext, libXfixes, libXi, libXrandr, libXrender, libXtst,
-  libxcb, nspr, nss, lib, stdenv, udev, libuuid, pango, at-spi2-atk, at-spi2-core
+  lib, stdenv, buildFHSUserEnvBubblewrap, runCommand, writeScript, fetchurl, fetchzip
 }:
+let
+  pname = "webtorrent-desktop";
+  version = "0.21.0";
+in
+runCommand "${pname}-${version}" rec {
+  inherit (stdenv) shell;
+  inherit pname version;
+  src =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      fetchzip {
+        url = "https://github.com/webtorrent/webtorrent-desktop/releases/download/v${version}/WebTorrent-v${version}-linux.zip";
+        sha256 = "13gd8isq2l10kibsc1bsc15dbgpnwa7nw4cwcamycgx6pfz9a852";
+      }
+    else
+      throw "Webtorrent is not currently supported on ${stdenv.hostPlatform.system}";
 
-  let
-    rpath = lib.makeLibraryPath ([
-    alsa-lib
-    atk
-    at-spi2-core
-    at-spi2-atk
-    cairo
-    cups
-    dbus
-    expat
-    fontconfig
-    freetype
-    gdk-pixbuf
-    glib
-    gtk3
-    pango
-    libuuid
-    libX11
-    libXScrnSaver
-    libXcomposite
-    libXcursor
-    libXdamage
-    libXext
-    libXfixes
-    libXi
-    libXrandr
-    libXrender
-    libXtst
-    libxcb
-    nspr
-    nss
-    stdenv.cc.cc
-    udev
-    ]);
-  in stdenv.mkDerivation rec {
-    pname = "webtorrent-desktop";
-    version = "0.21.0";
+  fhs = buildFHSUserEnvBubblewrap rec {
+    name = "fhsEnterWebTorrent";
+    runScript = "${src}/WebTorrent";
+    ## use the trampoline, if you need to shell into the fhsenv
+    # runScript = writeScript "trampoline" ''
+    #   #!/bin/sh
+    #   exec "$@"
+    # '';
+    targetPkgs = pkgs: with pkgs; with xorg; [
+      alsa-lib atk at-spi2-core at-spi2-atk cairo cups dbus expat
+      fontconfig freetype gdk-pixbuf glib gtk3 pango libuuid libX11
+      libXScrnSaver libXcomposite libXcursor libXdamage libXext
+      libXfixes libXi libXrandr libXrender libXtst libxcb nspr nss
+      stdenv.cc.cc udev
+    ];
+    # extraBwrapArgs = [
+    #   "--ro-bind /run/user/$(id -u)/pulse /run/user/$(id -u)/pulse"
+    # ];
+  };
 
-    src =
-      if stdenv.hostPlatform.system == "x86_64-linux" then
-        fetchzip {
-          url = "https://github.com/webtorrent/webtorrent-desktop/releases/download/v${version}/WebTorrent-v${version}-linux.zip";
-          sha256 = "13gd8isq2l10kibsc1bsc15dbgpnwa7nw4cwcamycgx6pfz9a852";
-        }
-        else
-          throw "Webtorrent is not currently supported on ${stdenv.hostPlatform.system}";
-    desktopFile = fetchurl {
-      url = "https://raw.githubusercontent.com/webtorrent/webtorrent-desktop/v${version}/static/linux/share/applications/webtorrent-desktop.desktop";
-      sha256 = "1v16dqbxqds3cqg3xkzxsa5fyd8ssddvjhy9g3i3lz90n47916ca";
-    };
-    icon256File = fetchurl {
-      url = "https://raw.githubusercontent.com/webtorrent/webtorrent-desktop/v${version}/static/linux/share/icons/hicolor/256x256/apps/webtorrent-desktop.png";
-      sha256 = "1dapxvvp7cx52zhyaby4bxm4rll9xc7x3wk8k0il4g3mc7zzn3yk";
-    };
-    icon48File = fetchurl {
-      url = "https://raw.githubusercontent.com/webtorrent/webtorrent-desktop/v${version}/static/linux/share/icons/hicolor/48x48/apps/webtorrent-desktop.png";
-      sha256 = "00y96w9shbbrdbf6xcjlahqd08154kkrxmqraik7qshiwcqpw7p4";
-    };
-    nativeBuildInputs = [ dpkg ];
-    installPhase = ''
-      mkdir -p $out/share/{applications,icons/hicolor/{48x48,256x256}/apps}
-      cp -R . $out/libexec
+  desktopFile = fetchurl {
+    url = "https://raw.githubusercontent.com/webtorrent/webtorrent-desktop/v${version}/static/linux/share/applications/webtorrent-desktop.desktop";
+    sha256 = "1v16dqbxqds3cqg3xkzxsa5fyd8ssddvjhy9g3i3lz90n47916ca";
+  };
+  icon256File = fetchurl {
+    url = "https://raw.githubusercontent.com/webtorrent/webtorrent-desktop/v${version}/static/linux/share/icons/hicolor/256x256/apps/webtorrent-desktop.png";
+    sha256 = "1dapxvvp7cx52zhyaby4bxm4rll9xc7x3wk8k0il4g3mc7zzn3yk";
+  };
+  icon48File = fetchurl {
+    url = "https://raw.githubusercontent.com/webtorrent/webtorrent-desktop/v${version}/static/linux/share/icons/hicolor/48x48/apps/webtorrent-desktop.png";
+    sha256 = "00y96w9shbbrdbf6xcjlahqd08154kkrxmqraik7qshiwcqpw7p4";
+  };
 
-      # Patch WebTorrent
-      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
-               --set-rpath ${rpath}:$out/libexec $out/libexec/WebTorrent
+  meta = with lib; {
+    description = "Streaming torrent app for Mac, Windows, and Linux";
+    homepage = "https://webtorrent.io/desktop";
+    license = licenses.mit;
+    maintainers = [ maintainers.flokli maintainers.bendlas ];
+    platforms = [
+      "x86_64-linux"
+    ];
+  };
 
-      # Symlink to bin
-      mkdir -p $out/bin
-      ln -s $out/libexec/WebTorrent $out/bin/WebTorrent
+} ''
+  mkdir -p $out/{bin,share/{applications,icons/hicolor/{48x48,256x256}/apps}}
 
-      cp $icon48File $out/share/icons/hicolor/48x48/apps/webtorrent-desktop.png
-      cp $icon256File $out/share/icons/hicolor/256x256/apps/webtorrent-desktop.png
-      ## Fix the desktop link
-      substitute $desktopFile $out/share/applications/webtorrent-desktop.desktop \
-        --replace /opt/webtorrent-desktop $out/libexec
-    '';
+  cp $fhs/bin/fhsEnterWebTorrent $out/bin/WebTorrent
 
-    meta = with lib; {
-      description = "Streaming torrent app for Mac, Windows, and Linux";
-      homepage = "https://webtorrent.io/desktop";
-      license = licenses.mit;
-      maintainers = [ maintainers.flokli ];
-      platforms = [
-        "x86_64-linux"
-      ];
-    };
-  }
+  cp $icon48File $out/share/icons/hicolor/48x48/apps/webtorrent-desktop.png
+  cp $icon256File $out/share/icons/hicolor/256x256/apps/webtorrent-desktop.png
+  ## Fix the desktop link
+  substitute $desktopFile $out/share/applications/webtorrent-desktop.desktop \
+    --replace /opt/webtorrent-desktop $out/libexec
+''