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/adl/default.nix33
-rw-r--r--pkgs/applications/video/ani-cli/default.nix2
-rw-r--r--pkgs/applications/video/anilibria-winmaclinux/default.nix4
-rw-r--r--pkgs/applications/video/animdl/default.nix18
-rw-r--r--pkgs/applications/video/anime-downloader/default.nix2
-rw-r--r--pkgs/applications/video/bombono/default.nix6
-rw-r--r--pkgs/applications/video/byzanz/default.nix4
-rw-r--r--pkgs/applications/video/clapper/default.nix2
-rw-r--r--pkgs/applications/video/cutecapture/default.nix2
-rw-r--r--pkgs/applications/video/davinci-resolve/default.nix42
-rw-r--r--pkgs/applications/video/deface/default.nix28
-rw-r--r--pkgs/applications/video/devede/default.nix4
-rw-r--r--pkgs/applications/video/dmlive/default.nix2
-rw-r--r--pkgs/applications/video/dra-cla/default.nix2
-rw-r--r--pkgs/applications/video/dvdbackup/default.nix2
-rw-r--r--pkgs/applications/video/dvdstyler/default.nix6
-rw-r--r--pkgs/applications/video/electronplayer/electronplayer.nix2
-rw-r--r--pkgs/applications/video/entangle/default.nix4
-rw-r--r--pkgs/applications/video/filebot/default.nix2
-rw-r--r--pkgs/applications/video/flowblade/default.nix8
-rw-r--r--pkgs/applications/video/freetube/default.nix6
-rw-r--r--pkgs/applications/video/glaxnimate/default.nix2
-rw-r--r--pkgs/applications/video/gnome-mplayer/default.nix4
-rw-r--r--pkgs/applications/video/gnomecast/default.nix6
-rw-r--r--pkgs/applications/video/go2tv/default.nix12
-rw-r--r--pkgs/applications/video/gpu-screen-recorder/default.nix18
-rw-r--r--pkgs/applications/video/gpu-screen-recorder/gpu-screen-recorder-gtk.nix6
-rw-r--r--pkgs/applications/video/handbrake/default.nix94
-rw-r--r--pkgs/applications/video/haruna/default.nix4
-rw-r--r--pkgs/applications/video/hyperion-ng/default.nix2
-rw-r--r--pkgs/applications/video/hypnotix/default.nix8
-rw-r--r--pkgs/applications/video/imagination/default.nix4
-rw-r--r--pkgs/applications/video/jellyfin-media-player/default.nix15
-rw-r--r--pkgs/applications/video/jellyfin-media-player/disable-update-notifications.patch8
-rw-r--r--pkgs/applications/video/jellyfin-media-player/fix-web-path.patch28
-rw-r--r--pkgs/applications/video/jellyfin-mpv-shim/default.nix8
-rw-r--r--pkgs/applications/video/kazam/default.nix6
-rw-r--r--pkgs/applications/video/kodi/addons/archive_tool/default.nix2
-rw-r--r--pkgs/applications/video/kodi/addons/controller-topology-project/default.nix8
-rw-r--r--pkgs/applications/video/kodi/addons/formula1/default.nix29
-rw-r--r--pkgs/applications/video/kodi/addons/future/default.nix6
-rw-r--r--pkgs/applications/video/kodi/addons/infotagger/default.nix4
-rw-r--r--pkgs/applications/video/kodi/addons/inputstream-adaptive/default.nix8
-rw-r--r--pkgs/applications/video/kodi/addons/inputstreamhelper/default.nix2
-rw-r--r--pkgs/applications/video/kodi/addons/invidious/default.nix5
-rw-r--r--pkgs/applications/video/kodi/addons/jellycon/default.nix2
-rw-r--r--pkgs/applications/video/kodi/addons/jellyfin/default.nix6
-rw-r--r--pkgs/applications/video/kodi/addons/joystick/default.nix2
-rw-r--r--pkgs/applications/video/kodi/addons/keymap/default.nix2
-rw-r--r--pkgs/applications/video/kodi/addons/orftvthek/default.nix6
-rw-r--r--pkgs/applications/video/kodi/addons/osmc-skin/default.nix2
-rw-r--r--pkgs/applications/video/kodi/addons/pdfreader/default.nix2
-rw-r--r--pkgs/applications/video/kodi/addons/plugin-cache/default.nix26
-rw-r--r--pkgs/applications/video/kodi/addons/pvr-hdhomerun/default.nix4
-rw-r--r--pkgs/applications/video/kodi/addons/pvr-hts/default.nix4
-rw-r--r--pkgs/applications/video/kodi/addons/pvr-iptvsimple/default.nix4
-rw-r--r--pkgs/applications/video/kodi/addons/pvr-vdr-vnsi/default.nix4
-rw-r--r--pkgs/applications/video/kodi/addons/raiplay/default.nix30
-rw-r--r--pkgs/applications/video/kodi/addons/routing/default.nix2
-rw-r--r--pkgs/applications/video/kodi/addons/simplecache/default.nix26
-rw-r--r--pkgs/applications/video/kodi/addons/skyvideoitalia/default.nix31
-rw-r--r--pkgs/applications/video/kodi/addons/sponsorblock/default.nix2
-rw-r--r--pkgs/applications/video/kodi/addons/steam-controller/default.nix2
-rw-r--r--pkgs/applications/video/kodi/addons/upnext/default.nix26
-rw-r--r--pkgs/applications/video/kodi/addons/visualization-projectm/default.nix4
-rw-r--r--pkgs/applications/video/kodi/addons/websocket/default.nix2
-rw-r--r--pkgs/applications/video/kodi/addons/youtube/default.nix9
-rw-r--r--pkgs/applications/video/lbry/default.nix6
-rw-r--r--pkgs/applications/video/lightworks/default.nix6
-rw-r--r--pkgs/applications/video/losslesscut-bin/build-from-appimage.nix2
-rw-r--r--pkgs/applications/video/losslesscut-bin/build-from-dmg.nix13
-rw-r--r--pkgs/applications/video/losslesscut-bin/build-from-windows.nix13
-rw-r--r--pkgs/applications/video/losslesscut-bin/default.nix12
-rw-r--r--pkgs/applications/video/makemkv/default.nix6
-rw-r--r--pkgs/applications/video/media-downloader/default.nix50
-rw-r--r--pkgs/applications/video/memento/default.nix2
-rw-r--r--pkgs/applications/video/minitube/default.nix2
-rw-r--r--pkgs/applications/video/mkvtoolnix/default.nix6
-rw-r--r--pkgs/applications/video/mlv-app/default.nix4
-rw-r--r--pkgs/applications/video/mplayer/default.nix2
-rw-r--r--pkgs/applications/video/mpv-shim-default-shaders/default.nix2
-rw-r--r--pkgs/applications/video/mpv/0001-fix-darwin-build.patch29
-rw-r--r--pkgs/applications/video/mpv/darwin-sigtool-no-deep.patch13
-rw-r--r--pkgs/applications/video/mpv/default.nix511
-rw-r--r--pkgs/applications/video/mpv/scripts/autosubsync-mpv.nix38
-rw-r--r--pkgs/applications/video/mpv/scripts/buildLua.nix147
-rw-r--r--pkgs/applications/video/mpv/scripts/chapterskip.nix24
-rw-r--r--pkgs/applications/video/mpv/scripts/convert.nix33
-rw-r--r--pkgs/applications/video/mpv/scripts/cutter.nix14
-rw-r--r--pkgs/applications/video/mpv/scripts/default.nix220
-rw-r--r--pkgs/applications/video/mpv/scripts/dynamic-crop.nix15
-rw-r--r--pkgs/applications/video/mpv/scripts/evafast.nix28
-rw-r--r--pkgs/applications/video/mpv/scripts/inhibit-gnome.nix19
-rw-r--r--pkgs/applications/video/mpv/scripts/manga-reader.nix2
-rw-r--r--pkgs/applications/video/mpv/scripts/memo.nix13
-rw-r--r--pkgs/applications/video/mpv/scripts/modernx-zydezu.nix22
-rw-r--r--pkgs/applications/video/mpv/scripts/modernx.nix13
-rw-r--r--pkgs/applications/video/mpv/scripts/mpris.nix21
-rw-r--r--pkgs/applications/video/mpv/scripts/mpv-cheatsheet.nix16
-rw-r--r--pkgs/applications/video/mpv/scripts/mpv-notify-send.nix24
-rw-r--r--pkgs/applications/video/mpv/scripts/mpv-osc-modern.nix11
-rw-r--r--pkgs/applications/video/mpv/scripts/mpv-playlistmanager.nix14
-rw-r--r--pkgs/applications/video/mpv/scripts/mpv-slicing.nix2
-rw-r--r--pkgs/applications/video/mpv/scripts/mpv-webm.nix17
-rw-r--r--pkgs/applications/video/mpv/scripts/mpv.nix41
-rw-r--r--pkgs/applications/video/mpv/scripts/mpvacious.nix31
-rw-r--r--pkgs/applications/video/mpv/scripts/occivink.nix68
-rw-r--r--pkgs/applications/video/mpv/scripts/quack.nix18
-rw-r--r--pkgs/applications/video/mpv/scripts/quality-menu.nix17
-rw-r--r--pkgs/applications/video/mpv/scripts/reload.nix18
-rw-r--r--pkgs/applications/video/mpv/scripts/simple-mpv-webui.nix24
-rw-r--r--pkgs/applications/video/mpv/scripts/sponsorblock-minimal.nix12
-rw-r--r--pkgs/applications/video/mpv/scripts/sponsorblock.nix17
-rw-r--r--pkgs/applications/video/mpv/scripts/thumbfast.nix15
-rw-r--r--pkgs/applications/video/mpv/scripts/thumbnail.nix16
-rw-r--r--pkgs/applications/video/mpv/scripts/uosc.nix16
-rw-r--r--pkgs/applications/video/mpv/scripts/videoclip.nix39
-rw-r--r--pkgs/applications/video/mpv/scripts/visualizer.nix4
-rw-r--r--pkgs/applications/video/mpv/scripts/vr-reversal.nix16
-rw-r--r--pkgs/applications/video/mpv/scripts/webtorrent-mpv-hook.nix17
-rw-r--r--pkgs/applications/video/mpv/scripts/youtube-upnext.nix12
-rw-r--r--pkgs/applications/video/mpv/wrapper.nix18
-rw-r--r--pkgs/applications/video/multiviewer-for-f1/default.nix6
-rw-r--r--pkgs/applications/video/mythtv/default.nix2
-rw-r--r--pkgs/applications/video/obs-studio/default.nix4
-rw-r--r--pkgs/applications/video/obs-studio/plugins/advanced-scene-switcher/default.nix6
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-command-source.nix2
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-composite-blur.nix2
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-gstreamer.nix2
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-move-transition.nix4
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-mute-filter.nix4
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-ndi/default.nix4
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-rgb-levels-filter.nix2
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-shaderfilter.nix2
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-teleport/default.nix8
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-text-pthread.nix4
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-transition-table.nix2
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-vertical-canvas.nix4
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-vintage-filter.nix2
-rw-r--r--pkgs/applications/video/obs-studio/plugins/obs-webkitgtk.nix4
-rw-r--r--pkgs/applications/video/obs-studio/plugins/wlrobs.nix2
-rw-r--r--pkgs/applications/video/omxplayer/default.nix2
-rw-r--r--pkgs/applications/video/open-in-mpv/default.nix4
-rw-r--r--pkgs/applications/video/openshot-qt/default.nix4
-rw-r--r--pkgs/applications/video/p2pvc/default.nix2
-rw-r--r--pkgs/applications/video/peek/default.nix4
-rw-r--r--pkgs/applications/video/pipe-viewer/default.nix10
-rw-r--r--pkgs/applications/video/pitivi/default.nix4
-rw-r--r--pkgs/applications/video/plex-mpv-shim/default.nix4
-rw-r--r--pkgs/applications/video/prism/default.nix2
-rw-r--r--pkgs/applications/video/pyca/default.nix2
-rw-r--r--pkgs/applications/video/qarte/default.nix2
-rw-r--r--pkgs/applications/video/qmediathekview/default.nix2
-rw-r--r--pkgs/applications/video/recapp/default.nix4
-rw-r--r--pkgs/applications/video/rtabmap/default.nix9
-rw-r--r--pkgs/applications/video/screenkey/default.nix8
-rw-r--r--pkgs/applications/video/shotcut/default.nix2
-rw-r--r--pkgs/applications/video/showmethekey/default.nix51
-rw-r--r--pkgs/applications/video/simplescreenrecorder/default.nix23
-rw-r--r--pkgs/applications/video/simplescreenrecorder/fix-paths.patch35
-rw-r--r--pkgs/applications/video/smplayer/default.nix62
-rw-r--r--pkgs/applications/video/streamlink-twitch-gui/bin.nix4
-rw-r--r--pkgs/applications/video/streamlink/default.nix11
-rw-r--r--pkgs/applications/video/stremio/default.nix2
-rw-r--r--pkgs/applications/video/subdl/default.nix2
-rw-r--r--pkgs/applications/video/subtitleedit/default.nix4
-rw-r--r--pkgs/applications/video/subtitleeditor/default.nix4
-rw-r--r--pkgs/applications/video/tartube/default.nix6
-rw-r--r--pkgs/applications/video/timelens/default.nix6
-rw-r--r--pkgs/applications/video/ustreamer/default.nix50
-rw-r--r--pkgs/applications/video/vdr/plugins.nix4
-rw-r--r--pkgs/applications/video/vdr/softhddevice/default.nix4
-rw-r--r--pkgs/applications/video/vdr/streamdev/default.nix2
-rw-r--r--pkgs/applications/video/vivictpp/default.nix2
-rw-r--r--pkgs/applications/video/w_scan2/default.nix2
-rw-r--r--pkgs/applications/video/webtorrent_desktop/default.nix16
-rw-r--r--pkgs/applications/video/xine/lib.nix2
-rw-r--r--pkgs/applications/video/xine/ui.nix1
-rw-r--r--pkgs/applications/video/xplayer/default.nix6
-rw-r--r--pkgs/applications/video/youtube-tui/default.nix2
180 files changed, 1631 insertions, 1240 deletions
diff --git a/pkgs/applications/video/adl/default.nix b/pkgs/applications/video/adl/default.nix
index 6bf36cc375b82..46e2bc492a87b 100644
--- a/pkgs/applications/video/adl/default.nix
+++ b/pkgs/applications/video/adl/default.nix
@@ -1,21 +1,32 @@
-{ lib, stdenv, fetchFromGitHub, pkgs, makeWrapper, ... }:
-
-stdenv.mkDerivation rec {
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, makeWrapper
+, animdl
+, frece
+, fzf
+, mpv
+, perl
+, trackma
+, ueberzug
+, ...
+}:
+stdenvNoCC.mkDerivation rec {
   pname = "adl";
-  version = "3.0.1";
+  version = "3.2.8";
 
   src = fetchFromGitHub {
     owner = "RaitaroH";
     repo = "adl";
-    rev = "65f68e1dcae4c0caa52668d3a854269e7d226f7c";
-    sha256 = "sha256-huGpDtkWrhZyKDNKXat8T3qtAyMjBaq8HFd1w1ThUVk=";
+    rev = "a40f31454de856d9e9235d6216eaf8f4296111c4";
+    hash = "sha256-Kg/iGyEdWJyoPn5lVqRCJX2eqdP1xwZqNU2RvTrhZko=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
 
   # https://github.com/RaitaroH/adl#requirements
-  buildInputs = with pkgs; [
-    anime-downloader
+  buildInputs = [
+    animdl
     frece
     fzf
     mpv
@@ -35,10 +46,10 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     homepage = "https://github.com/RaitaroH/adl";
-    description = "popcorn anime-downloader + trackma wrapper";
-    license = licenses.gpl3Plus;
+    description = "Popcorn anime scraper/downloader + trackma wrapper";
+    license = licenses.gpl3Only;
     platforms = platforms.linux;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ weathercold ];
     mainProgram = "adl";
   };
 }
diff --git a/pkgs/applications/video/ani-cli/default.nix b/pkgs/applications/video/ani-cli/default.nix
index f4d174474df23..d906b0d2b865f 100644
--- a/pkgs/applications/video/ani-cli/default.nix
+++ b/pkgs/applications/video/ani-cli/default.nix
@@ -54,7 +54,7 @@ stdenvNoCC.mkDerivation rec {
 
   meta = with lib; {
     homepage = "https://github.com/pystardust/ani-cli";
-    description = "A cli tool to browse and play anime";
+    description = "Cli tool to browse and play anime";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ skykanin ];
     platforms = platforms.unix;
diff --git a/pkgs/applications/video/anilibria-winmaclinux/default.nix b/pkgs/applications/video/anilibria-winmaclinux/default.nix
index 818e3a8e15053..b9679d1fd49f6 100644
--- a/pkgs/applications/video/anilibria-winmaclinux/default.nix
+++ b/pkgs/applications/video/anilibria-winmaclinux/default.nix
@@ -18,13 +18,13 @@
 
 mkDerivation rec {
   pname = "anilibria-winmaclinux";
-  version = "1.2.16.2";
+  version = "1.2.17";
 
   src = fetchFromGitHub {
     owner = "anilibria";
     repo = "anilibria-winmaclinux";
     rev = version;
-    hash = "sha256-IgNYJSadGemjclh7rtY8dHz7uSfBHoWEyLlRoZ+st6k=";
+    hash = "sha256-Ij4F5UCt1YOB4MLTlUTAiTt2zN4TkJuf5v6sWb9pJ6k=";
   };
 
   sourceRoot = "${src.name}/src";
diff --git a/pkgs/applications/video/animdl/default.nix b/pkgs/applications/video/animdl/default.nix
index 3f1be6f5833ad..c8ba0264e36aa 100644
--- a/pkgs/applications/video/animdl/default.nix
+++ b/pkgs/applications/video/animdl/default.nix
@@ -2,6 +2,7 @@
   buildPythonApplication,
   fetchFromGitHub,
   poetry-core,
+  pythonRelaxDepsHook,
   anchor-kr,
   anitopy,
   click,
@@ -30,8 +31,23 @@ buildPythonApplication {
     hash = "sha256-kn6vCCFhJNlruxoO+PTHVIwTf1E5j1aSdBhrFuGzUq4=";
   };
 
+  pythonRemoveDeps = [
+    "comtypes" # windows only
+  ];
+  pythonRelaxDeps = [
+    "httpx"
+    "lxml"
+    "packaging"
+    "pycryptodomex"
+    "regex"
+    "rich"
+    "tqdm"
+    "yarl"
+  ];
+
   nativeBuildInputs = [
     poetry-core
+    pythonRelaxDepsHook
   ];
   propagatedBuildInputs = [
     anchor-kr
@@ -53,7 +69,7 @@ buildPythonApplication {
   doCheck = true;
 
   meta = with lib; {
-    description = "A highly efficient, powerful and fast anime scraper";
+    description = "Highly efficient, powerful and fast anime scraper";
     homepage = "https://github.com/justfoolingaround/animdl";
     license = licenses.gpl3Only;
     mainProgram = "animdl";
diff --git a/pkgs/applications/video/anime-downloader/default.nix b/pkgs/applications/video/anime-downloader/default.nix
index 5e4f58cea1d30..99323ef960516 100644
--- a/pkgs/applications/video/anime-downloader/default.nix
+++ b/pkgs/applications/video/anime-downloader/default.nix
@@ -46,7 +46,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     homepage = "https://github.com/anime-dl/anime-downloader";
-    description = "A simple but powerful anime downloader and streamer";
+    description = "Simple but powerful anime downloader and streamer";
     license = licenses.unlicense;
     platforms = platforms.linux;
     maintainers = with maintainers; [ ];
diff --git a/pkgs/applications/video/bombono/default.nix b/pkgs/applications/video/bombono/default.nix
index 8ad77a6680191..73471a7564d2c 100644
--- a/pkgs/applications/video/bombono/default.nix
+++ b/pkgs/applications/video/bombono/default.nix
@@ -15,7 +15,7 @@
 , libdvdread
 , libxmlxx
 , mjpegtools
-, wrapGAppsHook
+, wrapGAppsHook3
 }:
 
 let
@@ -59,7 +59,7 @@ stdenv.mkDerivation rec {
       --replace "lib_mbase_env['CPPDEFINES']" "list(lib_mbase_env['CPPDEFINES'])"
   '';
 
-  nativeBuildInputs = [ wrapGAppsHook scons pkg-config gettext ];
+  nativeBuildInputs = [ wrapGAppsHook3 scons pkg-config gettext ];
 
   buildInputs = [
     boost
@@ -86,7 +86,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "a DVD authoring program for personal computers";
+    description = "DVD authoring program for personal computers";
     homepage = "https://www.bombono.org/";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ symphorien ];
diff --git a/pkgs/applications/video/byzanz/default.nix b/pkgs/applications/video/byzanz/default.nix
index e3a97197d1049..bc88c24814678 100644
--- a/pkgs/applications/video/byzanz/default.nix
+++ b/pkgs/applications/video/byzanz/default.nix
@@ -1,6 +1,6 @@
 { lib, stdenv
 , fetchgit
-, wrapGAppsHook
+, wrapGAppsHook3
 , cairo
 , glib
 , gnome
@@ -51,7 +51,7 @@ stdenv.mkDerivation {
     gst-plugins-good
     gst-plugins-ugly
     gst-libav
-    wrapGAppsHook
+    wrapGAppsHook3
   ]);
 
   meta = with lib; {
diff --git a/pkgs/applications/video/clapper/default.nix b/pkgs/applications/video/clapper/default.nix
index b638bc3afd7df..78bfaa2b46373 100644
--- a/pkgs/applications/video/clapper/default.nix
+++ b/pkgs/applications/video/clapper/default.nix
@@ -69,7 +69,7 @@ stdenv.mkDerivation (finalAttrs: {
   '';
 
   meta = with lib; {
-    description = "A GNOME media player built using GTK4 toolkit and powered by GStreamer with OpenGL rendering";
+    description = "GNOME media player built using GTK4 toolkit and powered by GStreamer with OpenGL rendering";
     longDescription = ''
       Clapper is a GNOME media player built using the GTK4 toolkit.
       The media player is using GStreamer as a media backend.
diff --git a/pkgs/applications/video/cutecapture/default.nix b/pkgs/applications/video/cutecapture/default.nix
index a588ddb38a8d4..238249883ef99 100644
--- a/pkgs/applications/video/cutecapture/default.nix
+++ b/pkgs/applications/video/cutecapture/default.nix
@@ -40,7 +40,7 @@ stdenv.mkDerivation (finalAttrs: {
   '';
 
   meta = with lib; {
-    description = "A (3)DS capture software for Linux and Mac";
+    description = "(3)DS capture software for Linux and Mac";
     homepage = "https://github.com/Gotos/CuteCapture";
     license = licenses.asl20;
     platforms = platforms.linux ++ platforms.darwin;
diff --git a/pkgs/applications/video/davinci-resolve/default.nix b/pkgs/applications/video/davinci-resolve/default.nix
index bb631909872cf..be18304386cbd 100644
--- a/pkgs/applications/video/davinci-resolve/default.nix
+++ b/pkgs/applications/video/davinci-resolve/default.nix
@@ -25,6 +25,9 @@
 , jq
 
 , studioVariant ? false
+
+, common-updater-scripts
+, writeShellApplication
 }:
 
 let
@@ -162,11 +165,11 @@ let
 
       desktopItems = [
         (makeDesktopItem {
-          name = "davinci-resolve";
-          desktopName = "Davinci Resolve";
+          name = "davinci-resolve${lib.optionalString studioVariant "-studio"}";
+          desktopName = "Davinci Resolve${lib.optionalString studioVariant " Studio"}";
           genericName = "Video Editor";
-          exec = "resolve";
-          # icon = "DV_Resolve";
+          exec = "davinci-resolve${lib.optionalString studioVariant "-studio"}";
+          icon = "davinci-resolve${lib.optionalString studioVariant "-studio"}";
           comment = "Professional video editing, color, effects and audio post-processing";
           categories = [
             "AudioVideo"
@@ -251,7 +254,34 @@ buildFHSEnv {
     ''
   }";
 
-  passthru = { inherit davinci; };
+  extraInstallCommands = ''
+    mkdir -p $out/share/applications $out/share/icons/hicolor/128x128/apps
+    ln -s ${davinci}/share/applications/*.desktop $out/share/applications/
+    ln -s ${davinci}/graphics/DV_Resolve.png $out/share/icons/hicolor/128x128/apps/davinci-resolve${lib.optionalString studioVariant "-studio"}.png
+  '';
+
+  passthru = {
+    inherit davinci;
+    updateScript = lib.getExe (writeShellApplication {
+      name = "update-davinci-resolve";
+      runtimeInputs = [ curl jq common-updater-scripts ];
+      text = ''
+        set -o errexit
+        drv=pkgs/applications/video/davinci-resolve/default.nix
+        currentVersion=${lib.escapeShellArg davinci.version}
+        downloadsJSON="$(curl --fail --silent https://www.blackmagicdesign.com/api/support/us/downloads.json)"
+
+        latestLinuxVersion="$(echo "$downloadsJSON" | jq '[.downloads[] | select(.urls.Linux) | .urls.Linux[] | select(.downloadTitle | test("DaVinci Resolve")) | .downloadTitle]' | grep -oP 'DaVinci Resolve \K\d+\.\d+\.\d+' | sort | tail -n 1)"
+        update-source-version davinci-resolve "$latestLinuxVersion" --source-key=davinci.src
+
+        # Since the standard and studio both use the same version we need to reset it before updating studio
+        sed -i -e "s/""$latestLinuxVersion""/""$currentVersion""/" "$drv"
+
+        latestStudioLinuxVersion="$(echo "$downloadsJSON" | jq '[.downloads[] | select(.urls.Linux) | .urls.Linux[] | select(.downloadTitle | test("DaVinci Resolve")) | .downloadTitle]' | grep -oP 'DaVinci Resolve Studio \K\d+\.\d+\.\d+' | sort | tail -n 1)"
+        update-source-version davinci-resolve-studio "$latestStudioLinuxVersion" --source-key=davinci.src
+      '';
+    });
+  };
 
   meta = with lib; {
     description = "Professional video editing, color, effects and audio post-processing";
@@ -260,6 +290,6 @@ buildFHSEnv {
     maintainers = with maintainers; [ amarshall jshcmpbll orivej ];
     platforms = [ "x86_64-linux" ];
     sourceProvenance = with sourceTypes; [ binaryNativeCode ];
-    mainProgram = "davinci-resolve";
+    mainProgram = "davinci-resolve${lib.optionalString studioVariant "-studio"}";
   };
 }
diff --git a/pkgs/applications/video/deface/default.nix b/pkgs/applications/video/deface/default.nix
index 428275535af49..0b0a2d0859810 100644
--- a/pkgs/applications/video/deface/default.nix
+++ b/pkgs/applications/video/deface/default.nix
@@ -8,21 +8,23 @@
 
 python3.pkgs.buildPythonApplication rec {
   pname = "deface";
-  version = "1.4.0";
-  format = "pyproject";
+  version = "1.5.0";
+  pyproject = true;
+
+  disabled = python3.pythonOlder "3.8";
 
   src = fetchFromGitHub {
     owner = "ORB-HD";
     repo = "deface";
-    rev = "v${version}";
-    hash = "sha256-tLNTgdnKKmyYHVajz0dHIb7cvC1by5LQ5CFIbMvPEYk=";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-/mXWeL6OSgW4BMXtAZD/3UxQUGt7UE5ZvH8CXNCueJo=";
   };
 
-  nativeBuildInputs = with python3.pkgs; [
+  build-system = with python3.pkgs; [
     setuptools-scm
   ];
 
-  propagatedBuildInputs = with python3.pkgs; [
+  dependencies = with python3.pkgs; [
     imageio
     imageio-ffmpeg
     numpy
@@ -38,17 +40,21 @@ python3.pkgs.buildPythonApplication rec {
     ''--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ pkgs.onnxruntime ]}"''
   ];
 
-  patchPhase = ''
-    substituteInPlace pyproject.toml requirements.txt --replace "opencv-python" "opencv"
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace-fail "opencv-python" "opencv"
   '';
 
   pythonImportsCheck = [ "deface" "onnx" "onnxruntime" ];
 
-  meta = with lib; {
+  meta = {
     description = "Video anonymization by face detection";
     homepage = "https://github.com/ORB-HD/deface";
-    license = licenses.mit;
-    maintainers = with maintainers; [ lurkki ];
+    changelog = "https://github.com/ORB-HD/deface/releases/tag/v${version}";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ lurkki ];
     mainProgram = "deface";
+    # terminate called after throwing an instance of 'onnxruntime::OnnxRuntimeException'
+    broken = stdenv.hostPlatform.system == "aarch64-linux";
   };
 }
diff --git a/pkgs/applications/video/devede/default.nix b/pkgs/applications/video/devede/default.nix
index 22689e27d6e9a..f17638d42e3b7 100644
--- a/pkgs/applications/video/devede/default.nix
+++ b/pkgs/applications/video/devede/default.nix
@@ -1,5 +1,5 @@
 { lib, fetchFromGitLab, python3Packages, ffmpeg, mplayer, vcdimager, cdrkit, dvdauthor
-, gtk3, gettext, wrapGAppsHook, gdk-pixbuf, gobject-introspection }:
+, gtk3, gettext, wrapGAppsHook3, gdk-pixbuf, gobject-introspection }:
 
 let
   inherit (python3Packages) dbus-python buildPythonApplication pygobject3 urllib3 setuptools;
@@ -16,7 +16,7 @@ in buildPythonApplication rec {
   };
 
   nativeBuildInputs = [
-    gettext wrapGAppsHook
+    gettext wrapGAppsHook3
     gobject-introspection
   ];
 
diff --git a/pkgs/applications/video/dmlive/default.nix b/pkgs/applications/video/dmlive/default.nix
index f36fb581a5202..03affd1e00a7a 100644
--- a/pkgs/applications/video/dmlive/default.nix
+++ b/pkgs/applications/video/dmlive/default.nix
@@ -36,7 +36,7 @@ rustPlatform.buildRustPackage rec {
   '';
 
   meta = with lib; {
-    description = "A tool to play and record videos or live streams with danmaku";
+    description = "Tool to play and record videos or live streams with danmaku";
     homepage = "https://github.com/THMonster/dmlive";
     license = licenses.mit;
     mainProgram = "dmlive";
diff --git a/pkgs/applications/video/dra-cla/default.nix b/pkgs/applications/video/dra-cla/default.nix
index 00bf2c642b2d1..02a4a66be9295 100644
--- a/pkgs/applications/video/dra-cla/default.nix
+++ b/pkgs/applications/video/dra-cla/default.nix
@@ -38,7 +38,7 @@ stdenvNoCC.mkDerivation {
 
   meta = with lib; {
     homepage = "https://github.com/CoolnsX/dra-cla";
-    description = "A cli tool to browse and play korean drama, chinese drama";
+    description = "Cli tool to browse and play korean drama, chinese drama";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ idlip ];
     platforms = platforms.unix;
diff --git a/pkgs/applications/video/dvdbackup/default.nix b/pkgs/applications/video/dvdbackup/default.nix
index 523847db247f1..5e791da598a7f 100644
--- a/pkgs/applications/video/dvdbackup/default.nix
+++ b/pkgs/applications/video/dvdbackup/default.nix
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
   })];
 
   meta = {
-    description = "A tool to rip video DVDs from the command line";
+    description = "Tool to rip video DVDs from the command line";
     homepage = "https://dvdbackup.sourceforge.net/";
     license = lib.licenses.gpl3Plus;
     maintainers = [ lib.maintainers.bradediger ];
diff --git a/pkgs/applications/video/dvdstyler/default.nix b/pkgs/applications/video/dvdstyler/default.nix
index 18018f88d0256..db3f6e7f9a54e 100644
--- a/pkgs/applications/video/dvdstyler/default.nix
+++ b/pkgs/applications/video/dvdstyler/default.nix
@@ -16,7 +16,7 @@
 , libexif
 , libjpeg
 , pkg-config
-, wrapGAppsHook
+, wrapGAppsHook3
 , wxGTK32
 , wxSVG
 , xine-ui
@@ -53,7 +53,7 @@ in stdenv.mkDerivation rec {
     gettext
     gobject-introspection
     pkg-config
-    wrapGAppsHook
+    wrapGAppsHook3
     xmlto
     zip
   ];
@@ -93,7 +93,7 @@ in stdenv.mkDerivation rec {
 
   meta = with lib; {
     homepage = "https://www.dvdstyler.org/";
-    description = "A DVD authoring software";
+    description = "DVD authoring software";
     longDescription = ''
       DVDStyler is a cross-platform free DVD authoring application for the
       creation of professional-looking DVDs. It allows not only burning of video
diff --git a/pkgs/applications/video/electronplayer/electronplayer.nix b/pkgs/applications/video/electronplayer/electronplayer.nix
index cc26adc24780a..1cb10e65cbb95 100644
--- a/pkgs/applications/video/electronplayer/electronplayer.nix
+++ b/pkgs/applications/video/electronplayer/electronplayer.nix
@@ -21,7 +21,7 @@ in appimageTools.wrapType2 {
   '';
 
   meta = with lib; {
-    description = "An electron based web video services player";
+    description = "Electron based web video services player";
     mainProgram = "electronplayer";
     homepage = "https://github.com/oscartbeaumont/ElectronPlayer";
     license = licenses.mit;
diff --git a/pkgs/applications/video/entangle/default.nix b/pkgs/applications/video/entangle/default.nix
index cfab93dbcd71a..c06513a0fc0c4 100644
--- a/pkgs/applications/video/entangle/default.nix
+++ b/pkgs/applications/video/entangle/default.nix
@@ -9,7 +9,7 @@
 , perl
 , python3
 , pkgconf
-, wrapGAppsHook
+, wrapGAppsHook3
 , at-spi2-core
 , dbus
 , elfutils
@@ -69,7 +69,7 @@ stdenv.mkDerivation rec {
     perl # for pod2man and build scripts
     python3 # for build scripts
     pkgconf
-    wrapGAppsHook
+    wrapGAppsHook3
     gobject-introspection
   ];
 
diff --git a/pkgs/applications/video/filebot/default.nix b/pkgs/applications/video/filebot/default.nix
index 738bd9418f000..acc3e9571ca0b 100644
--- a/pkgs/applications/video/filebot/default.nix
+++ b/pkgs/applications/video/filebot/default.nix
@@ -52,7 +52,7 @@ in stdenv.mkDerivation (finalAttrs: {
   };
 
   meta = with lib; {
-    description = "The ultimate TV and Movie Renamer";
+    description = "Ultimate TV and Movie Renamer";
     longDescription = ''
       FileBot is the ultimate tool for organizing and renaming your Movies, TV
       Shows and Anime as well as fetching subtitles and artwork. It's smart and
diff --git a/pkgs/applications/video/flowblade/default.nix b/pkgs/applications/video/flowblade/default.nix
index 937f5865d4043..92f035ca9018d 100644
--- a/pkgs/applications/video/flowblade/default.nix
+++ b/pkgs/applications/video/flowblade/default.nix
@@ -1,17 +1,17 @@
 { lib, fetchFromGitHub, stdenv
 , ffmpeg, frei0r, sox, gtk3, python3, ladspaPlugins
-, gobject-introspection, makeWrapper, wrapGAppsHook
+, gobject-introspection, makeWrapper, wrapGAppsHook3
 }:
 
 stdenv.mkDerivation rec {
   pname = "flowblade";
-  version = "2.14.0.2";
+  version = "2.16.3";
 
   src = fetchFromGitHub {
     owner = "jliljebl";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-M+M6qkgYD5zM8IOFwQsuQlK7qQsvmSjR+CXVpTW+O8k=";
+    sha256 = "sha256-WXB071lndw4/APTgwxNVjmYBvzMXZdLn1OaWqBXjW2Q=";
   };
 
   buildInputs = [
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     (python3.withPackages (ps: with ps; [ mlt pygobject3 dbus-python numpy pillow libusb1 ]))
   ];
 
-  nativeBuildInputs = [ gobject-introspection makeWrapper wrapGAppsHook ];
+  nativeBuildInputs = [ gobject-introspection makeWrapper wrapGAppsHook3 ];
 
   installPhase = ''
     runHook preInstall
diff --git a/pkgs/applications/video/freetube/default.nix b/pkgs/applications/video/freetube/default.nix
index 9c5d7f2067fee..72bdd1f97916e 100644
--- a/pkgs/applications/video/freetube/default.nix
+++ b/pkgs/applications/video/freetube/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "freetube";
-  version = "0.20.0";
+  version = "0.21.0";
 
   src = fetchurl {
     url = "https://github.com/FreeTubeApp/FreeTube/releases/download/v${version}-beta/freetube_${version}_amd64.AppImage";
-    sha256 = "sha256-7k5hyiK3m+117AxmsoecGsgXSxs8xhyTf8+rl4oBbB8=";
+    sha256 = "sha256-jTDJ0oyDrgOM6T+nwiOakm3QUqKfK2UNY6AfpoaJzd0=";
   };
 
   passthru.tests = nixosTests.freetube;
@@ -44,7 +44,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "An Open Source YouTube app for privacy";
+    description = "Open Source YouTube app for privacy";
     homepage = "https://freetubeapp.io/";
     license = licenses.agpl3Only;
     maintainers = with maintainers; [ ryneeverett alyaeanyx ];
diff --git a/pkgs/applications/video/glaxnimate/default.nix b/pkgs/applications/video/glaxnimate/default.nix
index a50e3d15614a8..c09b2c8170d4f 100644
--- a/pkgs/applications/video/glaxnimate/default.nix
+++ b/pkgs/applications/video/glaxnimate/default.nix
@@ -79,7 +79,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     homepage = "https://gitlab.com/mattbas/glaxnimate";
-    description = "Simple vector animation program.";
+    description = "Simple vector animation program";
     license = licenses.gpl3;
     maintainers = with maintainers; [ tobiasBora ];
     mainProgram = "glaxnimate";
diff --git a/pkgs/applications/video/gnome-mplayer/default.nix b/pkgs/applications/video/gnome-mplayer/default.nix
index 09ed7efaf0c0b..436f31ac5a01d 100644
--- a/pkgs/applications/video/gnome-mplayer/default.nix
+++ b/pkgs/applications/video/gnome-mplayer/default.nix
@@ -1,5 +1,5 @@
 {lib, stdenv, substituteAll, fetchFromGitHub, pkg-config, gettext, glib, gtk3, gmtk, dbus, dbus-glib
-, libnotify, libpulseaudio, mplayer, wrapGAppsHook }:
+, libnotify, libpulseaudio, mplayer, wrapGAppsHook3 }:
 
 stdenv.mkDerivation rec {
   pname = "gnome-mplayer";
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
     sha256 = "0qvy9fllvg1mad6y1j79iaqa6khs0q2cb0z62yfg4srbr07fi8xr";
   };
 
-  nativeBuildInputs = [ pkg-config gettext wrapGAppsHook ];
+  nativeBuildInputs = [ pkg-config gettext wrapGAppsHook3 ];
   buildInputs = [ glib gtk3 gmtk dbus dbus-glib libnotify libpulseaudio ];
 
   patches = [
diff --git a/pkgs/applications/video/gnomecast/default.nix b/pkgs/applications/video/gnomecast/default.nix
index 9d0bfa9e966e3..37bf7baec8706 100644
--- a/pkgs/applications/video/gnomecast/default.nix
+++ b/pkgs/applications/video/gnomecast/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, python3Packages, fetchFromGitHub, gtk3, gobject-introspection, ffmpeg, wrapGAppsHook }:
+{ stdenv, lib, python3Packages, fetchFromGitHub, gtk3, gobject-introspection, ffmpeg, wrapGAppsHook3 }:
 
 with python3Packages;
 buildPythonApplication rec {
@@ -12,7 +12,7 @@ buildPythonApplication rec {
     sha256 = "sha256-CJpbBuRzEjWb8hsh3HMW4bZA7nyDAwjrERCS5uGdwn8=";
   };
 
-  nativeBuildInputs = [ wrapGAppsHook ];
+  nativeBuildInputs = [ wrapGAppsHook3 ];
   propagatedBuildInputs = [
     pychromecast
     bottle
@@ -37,7 +37,7 @@ buildPythonApplication rec {
   doCheck = false;
 
   meta = with lib; {
-    description = "A native Linux GUI for Chromecasting local files";
+    description = "Native Linux GUI for Chromecasting local files";
     homepage = "https://github.com/keredson/gnomecast";
     license = with licenses; [ gpl3 ];
     broken = stdenv.isDarwin;
diff --git a/pkgs/applications/video/go2tv/default.nix b/pkgs/applications/video/go2tv/default.nix
index d8fc548f10b3c..6837572cd9f03 100644
--- a/pkgs/applications/video/go2tv/default.nix
+++ b/pkgs/applications/video/go2tv/default.nix
@@ -14,16 +14,16 @@
 
 buildGoModule rec {
   pname = "go2tv" + lib.optionalString (!withGui) "-lite";
-  version = "1.15.0";
+  version = "1.16.1";
 
   src = fetchFromGitHub {
     owner = "alexballas";
     repo = "go2tv";
-    rev = "v${version}";
-    sha256 = "sha256-5GOhTDlUpzInMm8hVcBjbf1CXRw2GQITRtj6UaxYHtE=";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-7m5GikrdcrJyl+KYuSk1JWLW2SsHOcBJNJuq2BahxHc=";
   };
 
-  vendorHash = null;
+  vendorHash = "sha256-na79rF/9o+s6E4i08Ocs6u98IABc19sTGFvjI6yeJFo=";
 
   nativeBuildInputs = [ pkg-config ];
 
@@ -39,7 +39,8 @@ buildGoModule rec {
   ] ++ lib.optionals stdenv.isDarwin [ Carbon Cocoa Kernel UserNotifications ];
 
   ldflags = [
-    "-s" "-w"
+    "-s"
+    "-w"
     "-linkmode=external"
   ];
 
@@ -51,6 +52,7 @@ buildGoModule rec {
   meta = with lib; {
     description = "Cast media files to UPnP/DLNA Media Renderers and Smart TVs";
     homepage = "https://github.com/alexballas/go2tv";
+    changelog = "https://github.com/alexballas/go2tv/releases/tag/v${version}";
     license = licenses.mit;
     maintainers = with maintainers; [ gdamjan ];
     mainProgram = "go2tv";
diff --git a/pkgs/applications/video/gpu-screen-recorder/default.nix b/pkgs/applications/video/gpu-screen-recorder/default.nix
index 052548f32f272..101cb3af49ddf 100644
--- a/pkgs/applications/video/gpu-screen-recorder/default.nix
+++ b/pkgs/applications/video/gpu-screen-recorder/default.nix
@@ -11,16 +11,17 @@
 , libva
 , libglvnd
 , libXrandr
+, libXfixes
 }:
 
 stdenv.mkDerivation {
   pname = "gpu-screen-recorder";
-  version = "unstable-2023-11-18";
+  version = "unstable-2024-05-21";
 
   # printf "r%s.%s\n" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
   src = fetchurl {
-    url = "https://dec05eba.com/snapshot/gpu-screen-recorder.git.r418.5a8900e.tar.gz";
-    hash = "sha256-Dal6KxQOTqoNH6e8lYk5XEXGFG/vzbguNFZ9yk9nKe0=";
+    url = "https://dec05eba.com/snapshot/gpu-screen-recorder.git.r594.e572073.tar.gz";
+    hash = "sha256-MTBxhvkoyotmRUx1sRN/7ruXBYwIbOFQNdJHhZ3DdDk=";
   };
   sourceRoot = ".";
 
@@ -37,6 +38,7 @@ stdenv.mkDerivation {
     libdrm
     libva
     libXrandr
+    libXfixes
   ];
 
   buildPhase = ''
@@ -49,14 +51,14 @@ stdenv.mkDerivation {
     mv $out/bin/gpu-screen-recorder $out/bin/.wrapped/
     makeWrapper "$out/bin/.wrapped/gpu-screen-recorder" "$out/bin/gpu-screen-recorder" \
     --prefix LD_LIBRARY_PATH : ${libglvnd}/lib \
-    --prefix PATH : $out/bin
+    --suffix PATH : $out/bin
   '';
 
-  meta = with lib; {
-    description = "A screen recorder that has minimal impact on system performance by recording a window using the GPU only";
+  meta = {
+    description = "Screen recorder that has minimal impact on system performance by recording a window using the GPU only";
     homepage = "https://git.dec05eba.com/gpu-screen-recorder/about/";
-    license = licenses.gpl3Only;
-    maintainers = with maintainers; [ babbaj ];
+    license = lib.licenses.gpl3Only;
+    maintainers = [ lib.maintainers.babbaj ];
     platforms = [ "x86_64-linux" ];
   };
 }
diff --git a/pkgs/applications/video/gpu-screen-recorder/gpu-screen-recorder-gtk.nix b/pkgs/applications/video/gpu-screen-recorder/gpu-screen-recorder-gtk.nix
index 86bfebad3860b..c08aabd25e530 100644
--- a/pkgs/applications/video/gpu-screen-recorder/gpu-screen-recorder-gtk.nix
+++ b/pkgs/applications/video/gpu-screen-recorder/gpu-screen-recorder-gtk.nix
@@ -8,7 +8,7 @@
 , libdrm
 , gpu-screen-recorder
 , libglvnd
-, wrapGAppsHook
+, wrapGAppsHook3
 }:
 
 stdenv.mkDerivation {
@@ -24,7 +24,7 @@ stdenv.mkDerivation {
   nativeBuildInputs = [
     pkg-config
     makeWrapper
-    wrapGAppsHook
+    wrapGAppsHook3
   ];
 
   buildInputs = [
@@ -47,7 +47,7 @@ stdenv.mkDerivation {
   '';
 
   meta = with lib; {
-    description = "GTK frontend for gpu-screen-recorder.";
+    description = "GTK frontend for gpu-screen-recorder";
     mainProgram = "gpu-screen-recorder-gtk";
     homepage = "https://git.dec05eba.com/gpu-screen-recorder-gtk/about/";
     license = licenses.gpl3Only;
diff --git a/pkgs/applications/video/handbrake/default.nix b/pkgs/applications/video/handbrake/default.nix
index da7170ca5f381..f9761bd85bb56 100644
--- a/pkgs/applications/video/handbrake/default.nix
+++ b/pkgs/applications/video/handbrake/default.nix
@@ -26,7 +26,7 @@
 , numactl
 , writeText
   # Processing, video codecs, containers
-, ffmpeg-full
+, ffmpeg_7-full
 , nv-codec-headers
 , libogg
 , x264
@@ -69,14 +69,14 @@
   # for now we disable GTK GUI support on Darwin. (It may be possible to remove
   # this restriction later.)
 , useGtk ? !stdenv.isDarwin
-, bzip2
+, appstream
 , desktop-file-utils
 , meson
 , ninja
-, wrapGAppsHook
+, wrapGAppsHook4
 , intltool
 , glib
-, gtk3
+, gtk4
 , libappindicator-gtk3
 , libnotify
 , gst_all_1
@@ -90,13 +90,14 @@
 }:
 
 let
-  version = "1.7.3";
+  version = "1.8.0";
 
   src = fetchFromGitHub {
     owner = "HandBrake";
     repo = "HandBrake";
-    rev = version;
-    hash = "sha256-4Q//UU/CPgWvhtpROfNPLzBvZlB02hbFe9Z9FA7mX04=";
+    # uses version commit for logic in version.txt
+    rev = "5edf59c1da54fe1c9a487d09e8f52561fe49cb2a";
+    hash = "sha256-gr2UhqPY5mZOP8KBvk9yydl4AkTlqE83hYAcLwSv1Is=";
   };
 
   # Handbrake maintains a set of ffmpeg patches. In particular, these
@@ -104,13 +105,11 @@ let
   # https://github.com/HandBrake/HandBrake/issues/4029
   # base ffmpeg version is specified in:
   # https://github.com/HandBrake/HandBrake/blob/master/contrib/ffmpeg/module.defs
-  ffmpeg-version = "6.1";
-  ffmpeg-hb = ffmpeg-full.overrideAttrs (old: {
+  ffmpeg-version = "7.0";
+  ffmpeg-hb = (ffmpeg_7-full.override {
     version = ffmpeg-version;
-    src = fetchurl {
-      url = "https://www.ffmpeg.org/releases/ffmpeg-${ffmpeg-version}.tar.bz2";
-      hash = "sha256-632j3n3TzkiplGq0R6c0a9EaOoXm77jyws5jfn9UdhE=";
-    };
+    hash = "sha256-RdDfv+0y90XpgjIRvTjsemKyGunzDbsh4j4WiE9rfyM=";
+  }).overrideAttrs (old: {
     patches = (old.patches or [ ]) ++ [
       "${src}/contrib/ffmpeg/A01-mov-read-name-track-tag-written-by-movenc.patch"
       "${src}/contrib/ffmpeg/A02-movenc-write-3gpp-track-titl-tag.patch"
@@ -119,22 +118,23 @@ let
       "${src}/contrib/ffmpeg/A05-dvdsubdec-fix-processing-of-partial-packets.patch"
       "${src}/contrib/ffmpeg/A06-dvdsubdec-return-number-of-bytes-used.patch"
       "${src}/contrib/ffmpeg/A07-dvdsubdec-use-pts-of-initial-packet.patch"
-      "${src}/contrib/ffmpeg/A08-ccaption_dec-fix-pts-in-real_time-mode.patch"
-      "${src}/contrib/ffmpeg/A09-matroskaenc-aac-extradata-updated.patch"
-      "${src}/contrib/ffmpeg/A10-amfenc-Add-support-for-pict_type-field.patch"
-      "${src}/contrib/ffmpeg/A11-amfenc-Fixes-the-color-information-in-the-ou.patch"
-      "${src}/contrib/ffmpeg/A12-amfenc-HDR-metadata.patch"
-      "${src}/contrib/ffmpeg/A13-libavcodec-amfenc-Fix-issue-with-missing-headers-in-.patch"
-      "${src}/contrib/ffmpeg/A14-avcodec-add-ambient-viewing-environment-packet-side-.patch"
-      "${src}/contrib/ffmpeg/A15-avformat-mov-add-support-for-amve-ambient-viewing-en.patch"
-      "${src}/contrib/ffmpeg/A16-videotoolbox-dec-h264.patch"
+      "${src}/contrib/ffmpeg/A08-dvdsubdec-do-not-discard-zero-sized-rects.patch"
+      "${src}/contrib/ffmpeg/A09-ccaption_dec-fix-pts-in-real_time-mode.patch"
+      "${src}/contrib/ffmpeg/A10-matroskaenc-aac-extradata-updated.patch"
+      "${src}/contrib/ffmpeg/A11-videotoolbox-disable-H.264-10-bit-on-Intel-macOS.patch"
 
       # patch to fix <https://github.com/HandBrake/HandBrake/issues/5011>
       # commented out because it causes ffmpeg's filter-pixdesc-p010le test to fail.
-      # "${src}/contrib/ffmpeg/A17-libswscale-fix-yuv420p-to-p01xle-color-conversion-bu.patch"
+      # "${src}/contrib/ffmpeg/A12-libswscale-fix-yuv420p-to-p01xle-color-conversion-bu.patch"
 
-      "${src}/contrib/ffmpeg/A18-qsv-fix-decode-10bit-hdr.patch"
-      "${src}/contrib/ffmpeg/A19-ffbuild-common-use-gzip-n-flag-for-cuda.patch"
+      "${src}/contrib/ffmpeg/A13-qsv-fix-decode-10bit-hdr.patch"
+      "${src}/contrib/ffmpeg/A14-amfenc-Add-support-for-pict_type-field.patch"
+      "${src}/contrib/ffmpeg/A15-amfenc-Fixes-the-color-information-in-the-ou.patch"
+      "${src}/contrib/ffmpeg/A16-amfenc-HDR-metadata.patch"
+      "${src}/contrib/ffmpeg/A17-av1dec-dovi-rpu.patch"
+      "${src}/contrib/ffmpeg/A18-avformat-mov-add-support-audio-fallback-track-ref.patch"
+      "${src}/contrib/ffmpeg/A19-mov-ignore-old-infe-box.patch"
+      "${src}/contrib/ffmpeg/A20-mov-free-infe-on-failure.patch"
     ];
   });
 
@@ -144,24 +144,26 @@ let
     # patches which don't cleanly apply are commented out.
     postPatch = (old.postPatch or "") + ''
       pushd ..
-      # patch -p1 < ${src}/contrib/x265/A00-crosscompile-fix.patch
       patch -p1 < ${src}/contrib/x265/A01-threads-priority.patch
       patch -p1 < ${src}/contrib/x265/A02-threads-pool-adjustments.patch
       patch -p1 < ${src}/contrib/x265/A03-sei-length-crash-fix.patch
       patch -p1 < ${src}/contrib/x265/A04-ambient-viewing-enviroment-sei.patch
       # patch -p1 < ${src}/contrib/x265/A05-memory-leaks.patch
+      # patch -p1 < ${src}/contrib/x265/A06-crosscompile-fix.patch
       popd
     '';
   });
 
   versionFile = writeText "version.txt" ''
-    BRANCH=${versions.majorMinor version}.x
-    DATE=1970-01-01 00:00:01 +0000
+    URL=${src.meta.homepage}.git
     HASH=${src.rev}
-    REV=${src.rev}
-    SHORTHASH=${src.rev}
+    SHORTHASH=${lib.substring 0 9 src.rev}
     TAG=${version}
-    URL=${src.meta.homepage}
+    TAG_HASH=${src.rev}
+    REV=0
+    BRANCH=
+    REMOTE=${src.meta.homepage}.git
+    DATE=1970-01-01 00:00:01 +0000
   '';
 
   inherit (lib) optional optionals optionalString versions;
@@ -176,9 +178,10 @@ let
       install -Dm444 ${versionFile} ${versionFile.name}
 
       patchShebangs scripts
+      patchShebangs gtk/data/
 
       substituteInPlace libhb/hb.c \
-        --replace 'return hb_version;' 'return "${version}";'
+        --replace-fail 'return hb_version;' 'return "${version}";'
 
       # Force using nixpkgs dependencies
       sed -i '/MODULES += contrib/d' make/include/main.defs
@@ -186,30 +189,23 @@ let
           -e '/    ## Additional library and tool checks/,/    ## MinGW specific library and tool checks/d' \
           -i make/configure.py
     '' + optionalString stdenv.isDarwin ''
-      # Use the Nix-provided libxml2 instead of the patched version available on
-      # the Handbrake website.
-      substituteInPlace libhb/module.defs \
-        --replace '$(CONTRIB.build/)include/libxml2' ${libxml2.dev}/include/libxml2
-
       # Prevent the configure script from failing if xcodebuild isn't available,
       # which it isn't in the Nix context. (The actual build goes fine without
       # xcodebuild.)
       sed -e '/xcodebuild = ToolProbe/s/abort=.\+)/abort=False)/' -i make/configure.py
-    '' + optionalString stdenv.isLinux ''
-      # Use the Nix-provided libxml2 instead of the system-provided one.
-      substituteInPlace libhb/module.defs \
-        --replace /usr/include/libxml2 ${libxml2.dev}/include/libxml2
     '' + optionalString useGtk ''
       substituteInPlace gtk/module.rules \
         --replace-fail '$(MESON.exe)' 'meson' \
         --replace-fail '$(NINJA.exe)' 'ninja' \
       # Force using nixpkgs dependencies
       substituteInPlace gtk/meson.build \
-        --replace-fail "cc.find_library('bz2', dirs: hb_libdirs)" "cc.find_library('bz2')" \
-        --replace-fail "cc.find_library('mp3lame', dirs: hb_libdirs)" "cc.find_library('mp3lame')" \
         --replace-fail \
           "hb_incdirs = include_directories(hb_dir / 'libhb', hb_dir / 'contrib/include')" \
-          "hb_incdirs = include_directories(hb_dir / 'libhb')" \
+          "hb_incdirs = include_directories(hb_dir / 'libhb')"
+      substituteInPlace gtk/ghb.spec \
+        --replace-fail "gtk-update-icon-cache" "gtk4-update-icon-cache"
+      substituteInPlace gtk/data/post_install.py \
+        --replace-fail "gtk-update-icon-cache" "gtk4-update-icon-cache"
     '';
 
     nativeBuildInputs = [
@@ -220,7 +216,7 @@ let
       pkg-config
       python3
     ]
-    ++ optionals useGtk [ desktop-file-utils intltool meson ninja wrapGAppsHook ];
+    ++ optionals useGtk [ appstream desktop-file-utils intltool meson ninja wrapGAppsHook4 ];
 
     buildInputs = [
       a52dec
@@ -255,12 +251,14 @@ let
     ]
     ++ optional (!stdenv.isDarwin) numactl
     ++ optionals useGtk [
-      bzip2
       dbus-glib
       glib
+      gst_all_1.gst-libav
+      gst_all_1.gst-plugins-bad
       gst_all_1.gst-plugins-base
+      gst_all_1.gst-plugins-good
       gst_all_1.gstreamer
-      gtk3
+      gtk4
       hicolor-icon-theme
       libappindicator-gtk3
       libgudev
@@ -319,7 +317,7 @@ let
 
     meta = with lib; {
       homepage = "https://handbrake.fr/";
-      description = "A tool for converting video files and ripping DVDs";
+      description = "Tool for converting video files and ripping DVDs";
       longDescription = ''
         Tool for converting and remuxing video files
         into selection of modern and widely supported codecs
diff --git a/pkgs/applications/video/haruna/default.nix b/pkgs/applications/video/haruna/default.nix
index 273b26808af58..8f629079f6b01 100644
--- a/pkgs/applications/video/haruna/default.nix
+++ b/pkgs/applications/video/haruna/default.nix
@@ -25,13 +25,13 @@
 
 stdenv.mkDerivation rec {
   pname = "haruna";
-  version = "1.0.2";
+  version = "1.1.2";
 
   src = fetchFromGitLab {
     owner = "multimedia";
     repo = "haruna";
     rev = "v${version}";
-    hash = "sha256-L/mTFPJPHl8A6FqkWUwICh+Yl4uIE5KnTkZVnC4kCZ8=";
+    hash = "sha256-PjELW0evn53gIbScrM2bYEpb9U/TE/lOCD2DiJ1aodo=";
     domain = "invent.kde.org";
   };
 
diff --git a/pkgs/applications/video/hyperion-ng/default.nix b/pkgs/applications/video/hyperion-ng/default.nix
index 43bd337ae5002..67df0dd420b00 100644
--- a/pkgs/applications/video/hyperion-ng/default.nix
+++ b/pkgs/applications/video/hyperion-ng/default.nix
@@ -63,7 +63,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "An opensource Bias or Ambient Lighting implementation";
+    description = "Opensource Bias or Ambient Lighting implementation";
     homepage = "https://github.com/hyperion-project/hyperion.ng";
     license = licenses.mit;
     maintainers = with maintainers; [ algram kazenyuk ];
diff --git a/pkgs/applications/video/hypnotix/default.nix b/pkgs/applications/video/hypnotix/default.nix
index 5c2e4812501c8..00f8eb6b024ba 100644
--- a/pkgs/applications/video/hypnotix/default.nix
+++ b/pkgs/applications/video/hypnotix/default.nix
@@ -8,19 +8,19 @@
 , gobject-introspection
 , mpv
 , python3
-, wrapGAppsHook
+, wrapGAppsHook3
 , yt-dlp
 }:
 
 stdenv.mkDerivation rec {
   pname = "hypnotix";
-  version = "4.3";
+  version = "4.5";
 
   src = fetchFromGitHub {
     owner = "linuxmint";
     repo = "hypnotix";
     rev = version;
-    hash = "sha256-nmldOziye+bSi8CA9TL0f3EKEKTeXRk3HFzf4ksE9oE=";
+    hash = "sha256-tcBBPJr9C+3FC8VWAM+KzETKAovfyehBvlmn7mIR7VQ=";
   };
 
   patches = [
@@ -45,7 +45,7 @@ stdenv.mkDerivation rec {
     gettext
     gobject-introspection
     python3.pkgs.wrapPython
-    wrapGAppsHook
+    wrapGAppsHook3
   ];
 
   dontWrapGApps = true;
diff --git a/pkgs/applications/video/imagination/default.nix b/pkgs/applications/video/imagination/default.nix
index 8d1d6ac305f9e..6dd9793b8b977 100644
--- a/pkgs/applications/video/imagination/default.nix
+++ b/pkgs/applications/video/imagination/default.nix
@@ -1,5 +1,5 @@
 { lib, stdenv, fetchurl, autoreconfHook, docbook_xsl, ffmpeg-full, glib, gtk3
-, intltool, libxslt, pkg-config, sox, wrapGAppsHook }:
+, intltool, libxslt, pkg-config, sox, wrapGAppsHook3 }:
 
 stdenv.mkDerivation rec {
   pname = "imagination";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     intltool
     libxslt
     pkg-config
-    wrapGAppsHook
+    wrapGAppsHook3
   ];
 
   buildInputs = [ ffmpeg-full glib gtk3 sox ];
diff --git a/pkgs/applications/video/jellyfin-media-player/default.nix b/pkgs/applications/video/jellyfin-media-player/default.nix
index 47afaef81a636..fef1a9ae80f08 100644
--- a/pkgs/applications/video/jellyfin-media-player/default.nix
+++ b/pkgs/applications/video/jellyfin-media-player/default.nix
@@ -1,6 +1,5 @@
 { lib
 , fetchFromGitHub
-, fetchzip
 , mkDerivation
 , stdenv
 , Cocoa
@@ -22,24 +21,21 @@
 , qtwebchannel
 , qtwebengine
 , qtx11extras
-, jellyfin-web
-, withDbus ? stdenv.isLinux, dbus
+, withDbus ? stdenv.isLinux
 }:
 
 mkDerivation rec {
   pname = "jellyfin-media-player";
-  version = "1.9.1";
+  version = "1.11.1";
 
   src = fetchFromGitHub {
     owner = "jellyfin";
     repo = "jellyfin-media-player";
     rev = "v${version}";
-    sha256 = "sha256-97/9UYXOsg8v7QoRqo5rh0UGhjjS85K9OvUwtlG249c=";
+    sha256 = "sha256-Jsn4kWQzUaQI9MpbsLJr6JSJk9ZSnMEcrebQ2DYegSU=";
   };
 
   patches = [
-    # fix the location of the jellyfin-web path
-    ./fix-web-path.patch
     # disable update notifications since the end user can't simply download the release artifacts to update
     ./disable-update-notifications.patch
   ];
@@ -78,11 +74,6 @@ mkDerivation rec {
     "-DLINUX_X11POWER=ON"
   ];
 
-  preConfigure = ''
-    # link the jellyfin-web files to be copied by cmake (see fix-web-path.patch)
-    ln -s ${jellyfin-web}/share/jellyfin-web .
-  '';
-
   postInstall = lib.optionalString stdenv.isDarwin ''
     mkdir -p $out/bin $out/Applications
     mv "$out/Jellyfin Media Player.app" $out/Applications
diff --git a/pkgs/applications/video/jellyfin-media-player/disable-update-notifications.patch b/pkgs/applications/video/jellyfin-media-player/disable-update-notifications.patch
index dd56d71f90751..82978b65c677b 100644
--- a/pkgs/applications/video/jellyfin-media-player/disable-update-notifications.patch
+++ b/pkgs/applications/video/jellyfin-media-player/disable-update-notifications.patch
@@ -1,11 +1,11 @@
 diff --git a/resources/settings/settings_description.json b/resources/settings/settings_description.json
-index 20fff81..9979de5 100644
+index 3329d0d..ccd5718 100644
 --- a/resources/settings/settings_description.json
 +++ b/resources/settings/settings_description.json
-@@ -118,7 +118,7 @@
-       },
-       {
+@@ -127,7 +127,7 @@
          "value": "checkForUpdates",
+         "display_name": "Check For Updates",
+         "help": "Allows user to disable update check plugin script.",
 -        "default": true
 +        "default": false
        },
diff --git a/pkgs/applications/video/jellyfin-media-player/fix-web-path.patch b/pkgs/applications/video/jellyfin-media-player/fix-web-path.patch
deleted file mode 100644
index 250a5c0695450..0000000000000
--- a/pkgs/applications/video/jellyfin-media-player/fix-web-path.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
-index 5abca9b..d09176b 100644
---- a/src/CMakeLists.txt
-+++ b/src/CMakeLists.txt
-@@ -107,10 +107,8 @@ endif()
- set(RESOURCE_ROOT .)
- if(APPLE)
-   set(RESOURCE_ROOT Resources)
--  if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/../dist/)
--    add_resources(TARGET ${MAIN_TARGET} SOURCES ${CMAKE_CURRENT_BINARY_DIR}/../dist/ DEST ${RESOURCE_ROOT}/web-client/desktop)
--  endif()
--  add_resources(TARGET ${MAIN_TARGET} SOURCES ${CMAKE_SOURCE_DIR}/native/ DEST ${RESOURCE_ROOT}/web-client/extension)
-+  install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../../jellyfin-web/ DESTINATION ${RESOURCE_ROOT}/web-client/desktop)
-+  install(DIRECTORY ${CMAKE_SOURCE_DIR}/native/ DESTINATION ${RESOURCE_ROOT}/web-client/extension)
- endif()
- 
- if(NOT APPLE)
-@@ -123,9 +121,7 @@ if(NOT APPLE)
-       install(FILES ${loc}/qtwebengine_devtools_resources.pak DESTINATION resources)
-     endif()
-   endforeach()
--  if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/../dist/)
--    install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../dist/ DESTINATION ${INSTALL_RESOURCE_DIR}/web-client/desktop)
--  endif()
-+  install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../../jellyfin-web/ DESTINATION ${INSTALL_RESOURCE_DIR}/web-client/desktop)
-   install(DIRECTORY ${CMAKE_SOURCE_DIR}/native/ DESTINATION ${INSTALL_RESOURCE_DIR}/web-client/extension)
- endif()
- 
diff --git a/pkgs/applications/video/jellyfin-mpv-shim/default.nix b/pkgs/applications/video/jellyfin-mpv-shim/default.nix
index dad9a52402495..fe32c894c741a 100644
--- a/pkgs/applications/video/jellyfin-mpv-shim/default.nix
+++ b/pkgs/applications/video/jellyfin-mpv-shim/default.nix
@@ -13,21 +13,21 @@
 , python-mpv-jsonipc
 , pywebview
 , tkinter
-, wrapGAppsHook
+, wrapGAppsHook3
 }:
 
 buildPythonApplication rec {
   pname = "jellyfin-mpv-shim";
-  version = "2.6.0";
+  version = "2.8.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "sha256-90Z2vgYT/9hBQZgfXeY7l6sGwT5KEY8X4rZMgrbTwrM=";
+    sha256 = "sha256-EANaNmvD8hcdGB2aoGemKvA9syS1VvIqGsP1jk0b+lE=";
   };
 
   nativeBuildInputs = [
     copyDesktopItems
-    wrapGAppsHook
+    wrapGAppsHook3
     gobject-introspection
   ];
 
diff --git a/pkgs/applications/video/kazam/default.nix b/pkgs/applications/video/kazam/default.nix
index 8ca3b813663f4..3d3349ab1bd75 100644
--- a/pkgs/applications/video/kazam/default.nix
+++ b/pkgs/applications/video/kazam/default.nix
@@ -3,7 +3,7 @@
 , substituteAll
 , python3Packages
 , gst_all_1
-, wrapGAppsHook
+, wrapGAppsHook3
 , gobject-introspection
 , gtk3
 , libwnck
@@ -26,7 +26,7 @@ python3Packages.buildPythonApplication rec {
     sha256 = "1jk6khwgdv3nmagdgp5ivz3156pl0ljhf7b6i4b52w1h5ywsg9ah";
   };
 
-  nativeBuildInputs = [ gobject-introspection python3Packages.distutils-extra intltool wrapGAppsHook ];
+  nativeBuildInputs = [ gobject-introspection python3Packages.distutils-extra intltool wrapGAppsHook3 ];
   buildInputs = [
     gst_all_1.gstreamer
     gst_all_1.gst-plugins-base
@@ -53,7 +53,7 @@ python3Packages.buildPythonApplication rec {
   doCheck = false;
 
   meta = with lib; {
-    description = "A screencasting program created with design in mind";
+    description = "Screencasting program created with design in mind";
     homepage = "https://github.com/niknah/kazam";
     license = licenses.lgpl3;
     platforms = platforms.linux;
diff --git a/pkgs/applications/video/kodi/addons/archive_tool/default.nix b/pkgs/applications/video/kodi/addons/archive_tool/default.nix
index 4788556a8793a..03372e1728589 100644
--- a/pkgs/applications/video/kodi/addons/archive_tool/default.nix
+++ b/pkgs/applications/video/kodi/addons/archive_tool/default.nix
@@ -21,7 +21,7 @@ buildKodiAddon rec {
 
   meta = with lib; {
     homepage = "https://github.com/zach-morris/script.module.archive_tool";
-    description = "A set of common python functions to work with the Kodi archive virtual file system (vfs) binary addons";
+    description = "Set of common python functions to work with the Kodi archive virtual file system (vfs) binary addons";
     license = licenses.gpl3Plus;
     maintainers = teams.kodi.members;
   };
diff --git a/pkgs/applications/video/kodi/addons/controller-topology-project/default.nix b/pkgs/applications/video/kodi/addons/controller-topology-project/default.nix
index cfaef2bb7f98e..5b55ab9d1282f 100644
--- a/pkgs/applications/video/kodi/addons/controller-topology-project/default.nix
+++ b/pkgs/applications/video/kodi/addons/controller-topology-project/default.nix
@@ -1,14 +1,14 @@
 { lib, stdenv, fetchFromGitHub, toKodiAddon, addonDir }:
 let
-  drv = stdenv.mkDerivation {
+  drv = stdenv.mkDerivation rec {
     pname = "controller-topology-project";
-    version = "unstable-2022-11-19";
+    version = "1.0.0";
 
     src = fetchFromGitHub {
       owner = "kodi-game";
       repo = "controller-topology-project";
-      rev = "d96894ca68678000f26f56d14aa3ceea47b1a3a8";
-      sha256 = "sha256-KfDr2bSJFey/aNO5WzoOQ8Mz0v4uitKkOesymIMZH1o=";
+      rev = "v${version}";
+      sha256 = "sha256-6g4dyR34b0YgxlzRRS2C/gY3wjlO9MMYEB2fHLSCqC4=";
     };
 
     postPatch = ''
diff --git a/pkgs/applications/video/kodi/addons/formula1/default.nix b/pkgs/applications/video/kodi/addons/formula1/default.nix
new file mode 100644
index 0000000000000..0d374dc65be1b
--- /dev/null
+++ b/pkgs/applications/video/kodi/addons/formula1/default.nix
@@ -0,0 +1,29 @@
+{ lib, rel, buildKodiAddon, fetchzip, addonUpdateScript, requests }:
+
+buildKodiAddon rec {
+  pname = "formula1";
+  namespace = "plugin.video.formula1";
+  version = "2.0.2";
+
+  src = fetchzip {
+    url = "https://mirrors.kodi.tv/addons/${lib.toLower rel}/${namespace}/${namespace}-${version}.zip";
+    sha256 = "sha256-aClAgkJKvixeKzrwgEsfDhPXiFv9+ULLmb8c9QTaUgM=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+  ];
+
+  passthru = {
+    updateScript = addonUpdateScript {
+      attrPath = "kodi.packages.formula1";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/jaylinski/kodi-addon-formula1";
+    description = "Videos from the Formula 1 website";
+    license = licenses.mit;
+    maintainers = teams.kodi.members;
+  };
+}
diff --git a/pkgs/applications/video/kodi/addons/future/default.nix b/pkgs/applications/video/kodi/addons/future/default.nix
index 8812fbd8f5b39..c96f28ab9037d 100644
--- a/pkgs/applications/video/kodi/addons/future/default.nix
+++ b/pkgs/applications/video/kodi/addons/future/default.nix
@@ -3,11 +3,11 @@
 buildKodiAddon rec {
   pname = "future";
   namespace = "script.module.future";
-  version = "0.18.3+matrix.1";
+  version = "1.0.0+matrix.1";
 
   src = fetchzip {
     url = "https://mirrors.kodi.tv/addons/${lib.toLower rel}/${namespace}/${namespace}-${version}.zip";
-    sha256 = "sha256-jKO2Qxi54z6UiCmMkxU+2pog40K2yb8/KYbNPFYuSsQ=";
+    sha256 = "sha256-BsDgCAZuJBRBpe6EmfSynhrXS3ktQRZsEwf9CdF0VCg=";
   };
 
   passthru = {
@@ -19,7 +19,7 @@ buildKodiAddon rec {
 
   meta = with lib; {
     homepage = "https://python-future.org";
-    description = "The missing compatibility layer between Python 2 and Python 3";
+    description = "Missing compatibility layer between Python 2 and Python 3";
     license = licenses.mit;
     maintainers = teams.kodi.members;
   };
diff --git a/pkgs/applications/video/kodi/addons/infotagger/default.nix b/pkgs/applications/video/kodi/addons/infotagger/default.nix
index da4528ed0afc5..7ac5e48071073 100644
--- a/pkgs/applications/video/kodi/addons/infotagger/default.nix
+++ b/pkgs/applications/video/kodi/addons/infotagger/default.nix
@@ -2,13 +2,13 @@
 buildKodiAddon rec {
   pname = "infotagger";
   namespace = "script.module.infotagger";
-  version = "0.0.7";
+  version = "0.0.8";
 
   src = fetchFromGitHub {
     owner = "jurialmunkey";
     repo = namespace;
     rev = "v${version}";
-    hash = "sha256-Us7ud0QORGn+ALB4uyISekp0kUYY8nN8uFNg8MlxEB0=";
+    hash = "sha256-Ns1OjrYLKz4znXRxqUErDLcmC0HBjBFVYI9GFqDVurY=";
   };
 
   passthru = {
diff --git a/pkgs/applications/video/kodi/addons/inputstream-adaptive/default.nix b/pkgs/applications/video/kodi/addons/inputstream-adaptive/default.nix
index 677467d343965..1a82cd1c19b9f 100644
--- a/pkgs/applications/video/kodi/addons/inputstream-adaptive/default.nix
+++ b/pkgs/applications/video/kodi/addons/inputstream-adaptive/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, rel, addonDir, buildKodiBinaryAddon, fetchFromGitHub, pugixml, glib, nspr, nss, gtest }:
+{ stdenv, lib, rel, addonDir, buildKodiBinaryAddon, fetchFromGitHub, pugixml, glib, nspr, nss, gtest, rapidjson }:
 let
   bento4 = fetchFromGitHub {
     owner = "xbmc";
@@ -10,13 +10,13 @@ in
 buildKodiBinaryAddon rec {
   pname = "inputstream-adaptive";
   namespace = "inputstream.adaptive";
-  version = "21.4.4";
+  version = "21.4.6";
 
   src = fetchFromGitHub {
     owner = "xbmc";
     repo = "inputstream.adaptive";
     rev = "${version}-${rel}";
-    sha256 = "sha256-Nzlm1AW/nW9chQAourKF0o2FSQmsr1MNhJ4gEO0/9sM=";
+    sha256 = "sha256-ub4ep89datfr8aZLZAfoz7zhOizGFpzgp2PVON6Ptj8=";
   };
 
   extraCMakeFlags = [
@@ -26,7 +26,7 @@ buildKodiBinaryAddon rec {
 
   extraNativeBuildInputs = [ gtest ];
 
-  extraBuildInputs = [ pugixml ];
+  extraBuildInputs = [ pugixml rapidjson ];
 
   extraRuntimeDependencies = [ glib nspr nss stdenv.cc.cc.lib ];
 
diff --git a/pkgs/applications/video/kodi/addons/inputstreamhelper/default.nix b/pkgs/applications/video/kodi/addons/inputstreamhelper/default.nix
index 97cc417e6bf1c..13b2738fdff99 100644
--- a/pkgs/applications/video/kodi/addons/inputstreamhelper/default.nix
+++ b/pkgs/applications/video/kodi/addons/inputstreamhelper/default.nix
@@ -18,7 +18,7 @@ buildKodiAddon rec {
 
   meta = with lib; {
     homepage = "https://github.com/emilsvennesson/script.module.inputstreamhelper";
-    description = "A simple Kodi module that makes life easier for add-on developers relying on InputStream based add-ons and DRM playback";
+    description = "Simple Kodi module that makes life easier for add-on developers relying on InputStream based add-ons and DRM playback";
     license = licenses.mit;
     maintainers = teams.kodi.members;
   };
diff --git a/pkgs/applications/video/kodi/addons/invidious/default.nix b/pkgs/applications/video/kodi/addons/invidious/default.nix
index 36ae8608837d2..ca688ddc0f2e8 100644
--- a/pkgs/applications/video/kodi/addons/invidious/default.nix
+++ b/pkgs/applications/video/kodi/addons/invidious/default.nix
@@ -1,4 +1,4 @@
-{ lib, rel, buildKodiAddon, fetchzip, addonUpdateScript, requests, inputstream-adaptive, inputstreamhelper }:
+{ lib, rel, buildKodiAddon, fetchzip, addonUpdateScript, infotagger, requests, inputstream-adaptive, inputstreamhelper }:
 
 buildKodiAddon rec {
   pname = "invidious";
@@ -11,6 +11,7 @@ buildKodiAddon rec {
   };
 
   propagatedBuildInputs = [
+    infotagger
     requests
     inputstream-adaptive
     inputstreamhelper
@@ -25,7 +26,7 @@ buildKodiAddon rec {
 
   meta = with lib; {
     homepage = "https://github.com/petterreinholdtsen/kodi-invidious-plugin";
-    description = "A privacy-friendly way of watching YouTube content";
+    description = "Privacy-friendly way of watching YouTube content";
     license = licenses.mit;
     maintainers = teams.kodi.members;
   };
diff --git a/pkgs/applications/video/kodi/addons/jellycon/default.nix b/pkgs/applications/video/kodi/addons/jellycon/default.nix
index 88e9504f8d191..d618e58cee371 100644
--- a/pkgs/applications/video/kodi/addons/jellycon/default.nix
+++ b/pkgs/applications/video/kodi/addons/jellycon/default.nix
@@ -43,7 +43,7 @@ buildKodiAddon rec {
 
   meta = with lib; {
     homepage = "https://github.com/jellyfin/jellycon";
-    description = "A lightweight Kodi add-on for Jellyfin";
+    description = "Lightweight Kodi add-on for Jellyfin";
     longDescription = ''
       JellyCon is a lightweight Kodi add-on that lets you browse and play media
       files directly from your Jellyfin server within the Kodi interface. It can
diff --git a/pkgs/applications/video/kodi/addons/jellyfin/default.nix b/pkgs/applications/video/kodi/addons/jellyfin/default.nix
index 7623a3c4db136..93217122d53bf 100644
--- a/pkgs/applications/video/kodi/addons/jellyfin/default.nix
+++ b/pkgs/applications/video/kodi/addons/jellyfin/default.nix
@@ -5,13 +5,13 @@ in
 buildKodiAddon rec {
   pname = "jellyfin";
   namespace = "plugin.video.jellyfin";
-  version = "1.0.2";
+  version = "1.0.3";
 
   src = fetchFromGitHub {
     owner = "jellyfin";
     repo = "jellyfin-kodi";
     rev = "v${version}";
-    sha256 = "sha256-yCgsQnzmlmyYAjp1q0J9QxGDRg5JCd23H9xgVozHiGM=";
+    sha256 = "sha256-Uyo8GClJU2/gdk4PeFNnoyvxOhooaxeXN3Wc5YGuCiM=";
   };
 
   nativeBuildInputs = [
@@ -43,7 +43,7 @@ buildKodiAddon rec {
 
   meta = with lib; {
     homepage = "https://jellyfin.org/";
-    description = "A whole new way to manage and view your media library";
+    description = "Whole new way to manage and view your media library";
     license = licenses.gpl3Only;
     maintainers = teams.kodi.members;
   };
diff --git a/pkgs/applications/video/kodi/addons/joystick/default.nix b/pkgs/applications/video/kodi/addons/joystick/default.nix
index 9da9d8bb7b599..47dbb0f5dfc0d 100644
--- a/pkgs/applications/video/kodi/addons/joystick/default.nix
+++ b/pkgs/applications/video/kodi/addons/joystick/default.nix
@@ -14,7 +14,7 @@ buildKodiBinaryAddon rec {
   extraBuildInputs = [ tinyxml udev ];
 
   meta = with lib; {
-    description = "Binary addon for raw joystick input.";
+    description = "Binary addon for raw joystick input";
     platforms = platforms.all;
     license = licenses.gpl2Only;
     maintainers = teams.kodi.members;
diff --git a/pkgs/applications/video/kodi/addons/keymap/default.nix b/pkgs/applications/video/kodi/addons/keymap/default.nix
index e98e5ca2cb419..4254763d53611 100644
--- a/pkgs/applications/video/kodi/addons/keymap/default.nix
+++ b/pkgs/applications/video/kodi/addons/keymap/default.nix
@@ -23,7 +23,7 @@ buildKodiAddon rec {
 
   meta = with lib; {
     homepage = "https://github.com/tamland/xbmc-keymap-editor";
-    description = "A GUI for configuring mappings for remotes, keyboard and other inputs supported by Kodi";
+    description = "GUI for configuring mappings for remotes, keyboard and other inputs supported by Kodi";
     license = licenses.gpl3Plus;
     maintainers = teams.kodi.members;
   };
diff --git a/pkgs/applications/video/kodi/addons/orftvthek/default.nix b/pkgs/applications/video/kodi/addons/orftvthek/default.nix
index 4a6b4480b0506..416cb9a30a6be 100644
--- a/pkgs/applications/video/kodi/addons/orftvthek/default.nix
+++ b/pkgs/applications/video/kodi/addons/orftvthek/default.nix
@@ -3,13 +3,13 @@
 buildKodiAddon rec {
   pname = "orftvthek";
   namespace = "plugin.video.orftvthek";
-  version = "0.12.9";
+  version = "0.12.12";
 
   src = fetchFromGitHub {
     owner = "s0faking";
     repo = namespace;
     rev = version;
-    sha256 = "sha256-bqGY9PPukn5/HJa3OqU5NM+ReeDJdVn60jXh1+2Qef8=";
+    sha256 = "sha256-4VLr4DFxioCrlq5JtiPyd7E4a+++cWgxCnRb3KPppWE=";
   };
 
   propagatedBuildInputs = [
@@ -21,7 +21,7 @@ buildKodiAddon rec {
 
   meta = with lib; {
     homepage = "https://github.com/s0faking/plugin.video.orftvthek";
-    description = "An addon that gives you access to the ORF TVthek Video Platform";
+    description = "Addon that gives you access to the ORF TVthek Video Platform";
     license = licenses.gpl2Only;
     maintainers = teams.kodi.members;
   };
diff --git a/pkgs/applications/video/kodi/addons/osmc-skin/default.nix b/pkgs/applications/video/kodi/addons/osmc-skin/default.nix
index 71e0e1744b787..2cf5f8784dc1f 100644
--- a/pkgs/applications/video/kodi/addons/osmc-skin/default.nix
+++ b/pkgs/applications/video/kodi/addons/osmc-skin/default.nix
@@ -13,7 +13,7 @@ buildKodiAddon rec {
 
   meta = with lib; {
     homepage = "https://github.com/osmc/skin.osmc";
-    description = "The default skin for OSMC";
+    description = "Default skin for OSMC";
     platforms = platforms.all;
     maintainers = with maintainers; [ ];
     license = licenses.cc-by-nc-sa-30;
diff --git a/pkgs/applications/video/kodi/addons/pdfreader/default.nix b/pkgs/applications/video/kodi/addons/pdfreader/default.nix
index 62a5853c796b8..c2c11e92213f4 100644
--- a/pkgs/applications/video/kodi/addons/pdfreader/default.nix
+++ b/pkgs/applications/video/kodi/addons/pdfreader/default.nix
@@ -15,7 +15,7 @@ buildKodiAddon rec {
 
   meta = with lib; {
     homepage = "https://forum.kodi.tv/showthread.php?tid=187421";
-    description = "A comic book reader";
+    description = "Comic book reader";
     license = licenses.gpl2Plus;
     maintainers = teams.kodi.members;
   };
diff --git a/pkgs/applications/video/kodi/addons/plugin-cache/default.nix b/pkgs/applications/video/kodi/addons/plugin-cache/default.nix
new file mode 100644
index 0000000000000..c21f5e136e41e
--- /dev/null
+++ b/pkgs/applications/video/kodi/addons/plugin-cache/default.nix
@@ -0,0 +1,26 @@
+{ lib, rel, buildKodiAddon, fetchzip, addonUpdateScript }:
+
+buildKodiAddon rec {
+  pname = "plugin-cache";
+  namespace = "script.common.plugin.cache";
+  version = "3.0.0";
+
+  src = fetchzip {
+    url = "https://mirrors.kodi.tv/addons/${lib.toLower rel}/${namespace}/${namespace}-${version}.zip";
+    sha256 = "sha256-5QcMNmWOEw2C26OXlvAvxqDxTpjIMBhwmaIFwVgHuIU=";
+  };
+
+  passthru = {
+    pythonPath = "resources/lib";
+    updateScript = addonUpdateScript {
+      attrPath = "kodi.packages.plugin-cache";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/anxdpanic/script.common.plugin.cache";
+    description = "Common plugin cache";
+    license = licenses.gpl3Only;
+    maintainers = teams.kodi.members;
+  };
+}
diff --git a/pkgs/applications/video/kodi/addons/pvr-hdhomerun/default.nix b/pkgs/applications/video/kodi/addons/pvr-hdhomerun/default.nix
index 6308a6470acdd..4184126842ba0 100644
--- a/pkgs/applications/video/kodi/addons/pvr-hdhomerun/default.nix
+++ b/pkgs/applications/video/kodi/addons/pvr-hdhomerun/default.nix
@@ -2,13 +2,13 @@
 buildKodiBinaryAddon rec {
   pname = "pvr-hdhomerun";
   namespace = "pvr.hdhomerun";
-  version = "20.4.0";
+  version = "21.0.1";
 
   src = fetchFromGitHub {
     owner = "kodi-pvr";
     repo = "pvr.hdhomerun";
     rev = "${version}-${rel}";
-    sha256 = "sha256-FKxoPD8t5JbouhvQtMVMFjk3O5zB9kVgrn0eC2RPDvQ=";
+    sha256 = "sha256-Hb8TcJxRUIKHbevAUgt5q6z26W3uX9NbVwYyvrLnf7U=";
   };
 
   extraBuildInputs = [ jsoncpp libhdhomerun ];
diff --git a/pkgs/applications/video/kodi/addons/pvr-hts/default.nix b/pkgs/applications/video/kodi/addons/pvr-hts/default.nix
index 7747b9e44c0be..9b20235e8ea17 100644
--- a/pkgs/applications/video/kodi/addons/pvr-hts/default.nix
+++ b/pkgs/applications/video/kodi/addons/pvr-hts/default.nix
@@ -2,13 +2,13 @@
 buildKodiBinaryAddon rec {
   pname = "pvr-hts";
   namespace = "pvr.hts";
-  version = "20.7.0";
+  version = "21.2.3";
 
   src = fetchFromGitHub {
     owner = "kodi-pvr";
     repo = "pvr.hts";
     rev = "${version}-${rel}";
-    sha256 = "sha256-Mc540n+TfZiAV2uDSGrItsoPOkEBNyyQlW2DJZLwYA4=";
+    sha256 = "sha256-4jHcUjGarLHsn5CjBLWB1wQNjBBw4ftMuDY5uFAHAzY=";
   };
 
   meta = with lib; {
diff --git a/pkgs/applications/video/kodi/addons/pvr-iptvsimple/default.nix b/pkgs/applications/video/kodi/addons/pvr-iptvsimple/default.nix
index 28dd626502e80..59f39a06fd71e 100644
--- a/pkgs/applications/video/kodi/addons/pvr-iptvsimple/default.nix
+++ b/pkgs/applications/video/kodi/addons/pvr-iptvsimple/default.nix
@@ -6,13 +6,13 @@
 buildKodiBinaryAddon rec {
   pname = "pvr-iptvsimple";
   namespace = "pvr.iptvsimple";
-  version = "20.13.0";
+  version = "21.8.4";
 
   src = fetchFromGitHub {
     owner = "kodi-pvr";
     repo = "pvr.iptvsimple";
     rev = "${version}-${rel}";
-    sha256 = "sha256-W/tFM/WpWdSvLEf0iwQoH2JVDjyfr1l8CRQkOG5q4hk=";
+    sha256 = "sha256-uuqk1kJnioCaRWIkC5liPSVRQPpviuaE+wmE4rq6fJw=";
   };
 
   extraBuildInputs = [
diff --git a/pkgs/applications/video/kodi/addons/pvr-vdr-vnsi/default.nix b/pkgs/applications/video/kodi/addons/pvr-vdr-vnsi/default.nix
index 4b5e8c6a7094f..9fdbee949d8fd 100644
--- a/pkgs/applications/video/kodi/addons/pvr-vdr-vnsi/default.nix
+++ b/pkgs/applications/video/kodi/addons/pvr-vdr-vnsi/default.nix
@@ -2,13 +2,13 @@
 buildKodiBinaryAddon rec {
   pname = "pvr-vdr-vnsi";
   namespace = "pvr.vdr.vnsi";
-  version = "20.4.1";
+  version = "21.1.1";
 
   src = fetchFromGitHub {
     owner = "kodi-pvr";
     repo = "pvr.vdr.vnsi";
     rev = "${version}-${rel}";
-    sha256 = "sha256-QooWK+LwlN5RAISjAQ2YiyDAjQQMzod8fFXpI0ll+hc=";
+    sha256 = "sha256-Bd/21y3oAhQMmvrZzrN5Z6jLHySBd2LXNbLt/Me4jSw=";
   };
 
   extraBuildInputs = [ libGL ];
diff --git a/pkgs/applications/video/kodi/addons/raiplay/default.nix b/pkgs/applications/video/kodi/addons/raiplay/default.nix
new file mode 100644
index 0000000000000..ab5bcfedccfdb
--- /dev/null
+++ b/pkgs/applications/video/kodi/addons/raiplay/default.nix
@@ -0,0 +1,30 @@
+{ lib, rel, buildKodiAddon, fetchzip, addonUpdateScript, inputstreamhelper, plugin-cache }:
+
+buildKodiAddon rec {
+  pname = "raiplay";
+  namespace = "plugin.video.raitv";
+  version = "4.1.2";
+
+  propagatedBuildInputs = [
+    plugin-cache
+    inputstreamhelper
+  ];
+
+  src = fetchzip {
+    url = "https://mirrors.kodi.tv/addons/${lib.toLower rel}/${namespace}/${namespace}-${version}.zip";
+    sha256 = "sha256-9aR1kkl+0+nhP0bOTnaKCgSfuPvJzX5TWHU0WJZIvSM=";
+  };
+
+  passthru = {
+    updateScript = addonUpdateScript {
+      attrPath = "kodi.packages.raiplay";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/maxbambi/plugin.video.raitv/";
+    description = "Live radio and TV channels, latest 7 days of programming, broadcast archive, news";
+    license = licenses.gpl3Only;
+    maintainers = teams.kodi.members;
+  };
+}
diff --git a/pkgs/applications/video/kodi/addons/routing/default.nix b/pkgs/applications/video/kodi/addons/routing/default.nix
index 9c87c69e9912e..211b87242363e 100644
--- a/pkgs/applications/video/kodi/addons/routing/default.nix
+++ b/pkgs/applications/video/kodi/addons/routing/default.nix
@@ -18,7 +18,7 @@ buildKodiAddon rec {
 
   meta = with lib; {
     homepage = "https://github.com/tamland/kodi-plugin-routing";
-    description = "A routing module for kodi plugins";
+    description = "Routing module for kodi plugins";
     license = licenses.gpl3Plus;
     maintainers = teams.kodi.members;
   };
diff --git a/pkgs/applications/video/kodi/addons/simplecache/default.nix b/pkgs/applications/video/kodi/addons/simplecache/default.nix
new file mode 100644
index 0000000000000..35c2cc5a1a336
--- /dev/null
+++ b/pkgs/applications/video/kodi/addons/simplecache/default.nix
@@ -0,0 +1,26 @@
+{ lib, rel, buildKodiAddon, fetchzip, addonUpdateScript }:
+
+buildKodiAddon rec {
+  pname = "simplecache";
+  namespace = "script.module.simplecache";
+  version = "2.0.2";
+
+  src = fetchzip {
+    url = "https://mirrors.kodi.tv/addons/${lib.toLower rel}/${namespace}/${namespace}-${version}.zip";
+    sha256 = "sha256-xdOBIi99nspcDIKkjxcW1r/BqL8O9NxdDViTuvMtUmo=";
+  };
+
+  passthru = {
+    pythonPath = "lib";
+    updateScript = addonUpdateScript {
+      attrPath = "kodi.packages.simplecache";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/kodi-community-addons/script.module.simplecache";
+    description = "A simple object cache for Kodi addons";
+    license = licenses.asl20;
+    maintainers = teams.kodi.members;
+  };
+}
diff --git a/pkgs/applications/video/kodi/addons/skyvideoitalia/default.nix b/pkgs/applications/video/kodi/addons/skyvideoitalia/default.nix
new file mode 100644
index 0000000000000..c791391578c70
--- /dev/null
+++ b/pkgs/applications/video/kodi/addons/skyvideoitalia/default.nix
@@ -0,0 +1,31 @@
+{ lib, rel, buildKodiAddon, fetchzip, addonUpdateScript, requests, inputstreamhelper, simplecache }:
+
+buildKodiAddon rec {
+  pname = "skyvideoitalia";
+  namespace = "plugin.video.skyvideoitalia";
+  version = "1.0.4";
+
+  src = fetchzip {
+    url = "https://mirrors.kodi.tv/addons/${lib.toLower rel}/${namespace}/${namespace}-${version}.zip";
+    sha256 = "sha256-ciLtqT++6bn7la4xRVvlRwzbbUUUPN5WU35rJpR4l+w=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    inputstreamhelper
+    simplecache
+  ];
+
+  passthru = {
+    updateScript = addonUpdateScript {
+      attrPath = "kodi.packages.skyvideoitalia";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://www.github.com/nixxo/plugin.video.skyvideoitalia";
+    description = "Show video content from the website of Sky Italia (video.sky.it). News, sport, entertainment and much more";
+    license = licenses.gpl3Plus;
+    maintainers = teams.kodi.members;
+  };
+}
diff --git a/pkgs/applications/video/kodi/addons/sponsorblock/default.nix b/pkgs/applications/video/kodi/addons/sponsorblock/default.nix
index d174a09625e51..a0c0b04ec82e3 100644
--- a/pkgs/applications/video/kodi/addons/sponsorblock/default.nix
+++ b/pkgs/applications/video/kodi/addons/sponsorblock/default.nix
@@ -22,7 +22,7 @@ buildKodiAddon rec {
 
   meta = with lib; {
     homepage = "https://github.com/siku2/script.service.sponsorblock";
-    description = "A Port of SponsorBlock for Invidious and YouTube Plugin";
+    description = "Port of SponsorBlock for Invidious and YouTube Plugin";
     license = licenses.mit;
     maintainers = teams.kodi.members;
   };
diff --git a/pkgs/applications/video/kodi/addons/steam-controller/default.nix b/pkgs/applications/video/kodi/addons/steam-controller/default.nix
index 20488d8a3ffc3..387f096686587 100644
--- a/pkgs/applications/video/kodi/addons/steam-controller/default.nix
+++ b/pkgs/applications/video/kodi/addons/steam-controller/default.nix
@@ -14,7 +14,7 @@ buildKodiBinaryAddon rec {
   extraBuildInputs = [ libusb1 ];
 
   meta = with lib; {
-    description = "Binary addon for steam controller.";
+    description = "Binary addon for steam controller";
     platforms = platforms.all;
     maintainers = teams.kodi.members;
   };
diff --git a/pkgs/applications/video/kodi/addons/upnext/default.nix b/pkgs/applications/video/kodi/addons/upnext/default.nix
new file mode 100644
index 0000000000000..dccfce4c3f0f6
--- /dev/null
+++ b/pkgs/applications/video/kodi/addons/upnext/default.nix
@@ -0,0 +1,26 @@
+{ lib, rel, buildKodiAddon, fetchzip, addonUpdateScript }:
+
+buildKodiAddon rec {
+  pname = "upnext";
+  namespace = "service.upnext";
+  version = "1.1.9+matrix.1";
+
+  src = fetchzip {
+    url = "https://mirrors.kodi.tv/addons/${lib.toLower rel}/${namespace}/${namespace}-${version}.zip";
+    sha256 = "sha256-oNUk80MEzK6Qssn1KjT6psPTazISRoUif1IMo+BKJxo=";
+  };
+
+  passthru = {
+    pythonPath = "resources/lib";
+    updateScript = addonUpdateScript {
+      attrPath = "kodi.packages.upnext";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/im85288/service.upnext";
+    description = "Up Next - Proposes to play the next episode automatically";
+    license = licenses.gpl2Only;
+    maintainers = teams.kodi.members;
+  };
+}
diff --git a/pkgs/applications/video/kodi/addons/visualization-projectm/default.nix b/pkgs/applications/video/kodi/addons/visualization-projectm/default.nix
index 8eaecd87fc47c..38ab9d308762f 100644
--- a/pkgs/applications/video/kodi/addons/visualization-projectm/default.nix
+++ b/pkgs/applications/video/kodi/addons/visualization-projectm/default.nix
@@ -3,13 +3,13 @@
 buildKodiBinaryAddon rec {
   pname = "visualization-projectm";
   namespace = "visualization.projectm";
-  version = "20.2.0";
+  version = "21.0.1";
 
   src = fetchFromGitHub {
     owner = "xbmc";
     repo = namespace;
     rev = "${version}-${rel}";
-    hash = "sha256-Kcl1ep+RJlofFmxkrGT3T+XXdwiCofq1hggwU0PAd0E=";
+    hash = "sha256-wjSQmOtQb4KjY3iH3Xh7AdQwE6ked+cpW6/gdNYS+NA=";
   };
 
   extraBuildInputs = [ pkg-config libGL projectm ];
diff --git a/pkgs/applications/video/kodi/addons/websocket/default.nix b/pkgs/applications/video/kodi/addons/websocket/default.nix
index 6d0ecc55aa05a..40667e71392bb 100644
--- a/pkgs/applications/video/kodi/addons/websocket/default.nix
+++ b/pkgs/applications/video/kodi/addons/websocket/default.nix
@@ -23,7 +23,7 @@ buildKodiAddon rec {
 
   meta = with lib; {
     homepage = "https://github.com/websocket-client/websocket-client";
-    description = "A WebSocket client for Python";
+    description = "WebSocket client for Python";
     license = licenses.lgpl2Only;
     maintainers = teams.kodi.members;
   };
diff --git a/pkgs/applications/video/kodi/addons/youtube/default.nix b/pkgs/applications/video/kodi/addons/youtube/default.nix
index f2f340b257dbe..efeff6350cdd1 100644
--- a/pkgs/applications/video/kodi/addons/youtube/default.nix
+++ b/pkgs/applications/video/kodi/addons/youtube/default.nix
@@ -1,21 +1,20 @@
-{ lib, buildKodiAddon, fetchFromGitHub, six, requests, infotagger, inputstreamhelper }:
+{ lib, buildKodiAddon, fetchFromGitHub, requests, inputstream-adaptive, inputstreamhelper }:
 
 buildKodiAddon rec {
   pname = "youtube";
   namespace = "plugin.video.youtube";
-  version = "7.0.6";
+  version = "7.0.7";
 
   src = fetchFromGitHub {
     owner = "anxdpanic";
     repo = "plugin.video.youtube";
     rev = "v${version}";
-    hash = "sha256-pxW45D/tppUTTgeR5wVteOP2f4TZ4wl/9A5IBhOZhTM=";
+    hash = "sha256-i21BCkW4WpnQY1j9Wyn3/26GaAjWNXDb+lOVpmXlNKM=";
   };
 
   propagatedBuildInputs = [
-    six
     requests
-    infotagger
+    inputstream-adaptive
     inputstreamhelper
   ];
 
diff --git a/pkgs/applications/video/lbry/default.nix b/pkgs/applications/video/lbry/default.nix
index c3eb942fed929..fe4100ebef57e 100644
--- a/pkgs/applications/video/lbry/default.nix
+++ b/pkgs/applications/video/lbry/default.nix
@@ -15,9 +15,7 @@ appimageTools.wrapAppImage rec {
   };
 
   # At runtime, Lbry likes to have access to Ffmpeg
-  extraPkgs = pkgs: with pkgs; [
-    ffmpeg
-  ];
+  extraPkgs = pkgs: [ pkgs.ffmpeg ];
 
   # General fixup
   extraInstallCommands = ''
@@ -32,7 +30,7 @@ appimageTools.wrapAppImage rec {
   '';
 
   meta = with lib; {
-    description = "A browser and wallet for LBRY, the decentralized, user-controlled content marketplace";
+    description = "Browser and wallet for LBRY, the decentralized, user-controlled content marketplace";
     longDescription = ''
       The LBRY app is a graphical browser for the decentralized content marketplace provided by the LBRY protocol.
       It is essentially the lbry daemon bundled with a UI using Electron.
diff --git a/pkgs/applications/video/lightworks/default.nix b/pkgs/applications/video/lightworks/default.nix
index f08b014273c03..ea2f0bde5e33c 100644
--- a/pkgs/applications/video/lightworks/default.nix
+++ b/pkgs/applications/video/lightworks/default.nix
@@ -27,15 +27,15 @@ let
   ];
 
   lightworks = stdenv.mkDerivation rec {
-    version = "2023.1";
-    rev = "141770";
+    version = "2023.2";
+    rev = "146240";
     pname = "lightworks";
 
     src =
       if stdenv.hostPlatform.system == "x86_64-linux" then
         fetchurl {
           url = "https://cdn.lwks.com/releases/${version}/lightworks_${version}_r${rev}.deb";
-          sha256 = "sha256-QRbghrZQbprl2wUBKNMJVBeW0Ek6nWvo4006jyPYIBg=";
+          sha256 = "sha256-sVEDCZZsY5OwuWebrhatzZiws89/tEKIdgY54PN0Ddo=";
         }
       else throw "${pname}-${version} is not supported on ${stdenv.hostPlatform.system}";
 
diff --git a/pkgs/applications/video/losslesscut-bin/build-from-appimage.nix b/pkgs/applications/video/losslesscut-bin/build-from-appimage.nix
index 1317536f3cf55..14e4cf215e7bc 100644
--- a/pkgs/applications/video/losslesscut-bin/build-from-appimage.nix
+++ b/pkgs/applications/video/losslesscut-bin/build-from-appimage.nix
@@ -29,8 +29,6 @@ appimageTools.wrapType2 {
     export LC_ALL=C.UTF-8
   '';
 
-  extraPkgs = ps: appimageTools.defaultFhsEnvArgs.multiPkgs ps;
-
   extraInstallCommands = ''
     (
       mkdir -p $out/share
diff --git a/pkgs/applications/video/losslesscut-bin/build-from-dmg.nix b/pkgs/applications/video/losslesscut-bin/build-from-dmg.nix
index 9b3a91b9d029a..12b8205eec343 100644
--- a/pkgs/applications/video/losslesscut-bin/build-from-dmg.nix
+++ b/pkgs/applications/video/losslesscut-bin/build-from-dmg.nix
@@ -1,7 +1,7 @@
 { lib
 , stdenvNoCC
 , fetchurl
-, undmg
+, _7zz
 , pname
 , version
 , hash
@@ -19,15 +19,18 @@ in
 stdenvNoCC.mkDerivation {
   inherit pname version src;
 
-  nativeBuildInputs = [ undmg ];
+  nativeBuildInputs = [ _7zz ];
 
   sourceRoot = "LosslessCut.app";
 
   installPhase = ''
-    mkdir -p "$out/Applications/LosslessCut.app"
-    cp -R . "$out/Applications/LosslessCut.app"
+    runHook preInstall
+    mkdir -p "$out/Applications"
+    cd ..
+    mv "$sourceRoot" "$out/Applications"
     mkdir -p "$out/bin"
-    ln -s "$out/Applications/LosslessCut.app/Contents/MacOS/LosslessCut" "$out/bin/losslesscut"
+    ln -s "$out/Applications/$(basename "$sourceRoot")/Contents/MacOS/LosslessCut" "$out/bin/losslesscut"
+    runHook postInstall
   '';
 
   meta = metaCommon // (with lib; {
diff --git a/pkgs/applications/video/losslesscut-bin/build-from-windows.nix b/pkgs/applications/video/losslesscut-bin/build-from-windows.nix
index ddaf873806448..e6520e4a54b99 100644
--- a/pkgs/applications/video/losslesscut-bin/build-from-windows.nix
+++ b/pkgs/applications/video/losslesscut-bin/build-from-windows.nix
@@ -19,15 +19,20 @@ stdenvNoCC.mkDerivation {
   nativeBuildInputs = [ p7zip ];
 
   unpackPhase = ''
-    7z x $src -oLosslessCut-win-x64
+    runHook preUnpack
+    7z x "$src" -o"$sourceRoot"
+    runHook postUnpack
   '';
 
   sourceRoot = "LosslessCut-win-x64";
 
   installPhase = ''
-    mkdir -p $out/bin $out/libexec
-    (cd .. && mv LosslessCut-win-x64 $out/libexec)
-    ln -s "$out/libexec/LosslessCut-win-x64/LosslessCut.exe" "$out/bin/LosslessCut.exe"
+    runHook preInstall
+    mkdir -p "$out/bin" "$out/libexec"
+    cd ..
+    mv "$sourceRoot" "$out/libexec"
+    ln -s "$out/libexec/$(basename "$sourceRoot")/LosslessCut.exe" "$out/bin/LosslessCut.exe"
+    runHook postInstall
   '';
 
   meta = metaCommon // (with lib; {
diff --git a/pkgs/applications/video/losslesscut-bin/default.nix b/pkgs/applications/video/losslesscut-bin/default.nix
index ebab149ab1a89..c3ed6b306beb3 100644
--- a/pkgs/applications/video/losslesscut-bin/default.nix
+++ b/pkgs/applications/video/losslesscut-bin/default.nix
@@ -6,9 +6,9 @@
 
 let
   pname = "losslesscut";
-  version = "3.58.0";
+  version = "3.61.1";
   metaCommon = with lib; {
-    description = "The swiss army knife of lossless video/audio editing";
+    description = "Swiss army knife of lossless video/audio editing";
     homepage = "https://mifi.no/losslesscut/";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ ShamrockLee ];
@@ -17,22 +17,22 @@ let
   };
   x86_64-appimage = callPackage ./build-from-appimage.nix {
     inherit pname version metaCommon;
-    hash = "sha256-wmOdW5LdGLs6Wrt/VBlbC1ScFZBmd5gVQaj/cYADnWc=";
+    hash = "sha256-wKhEB+MfOsBvZRTIt3hLofw37+YO+hWKowlSi1OxSAU=";
     inherit (buildPackages) makeWrapper;
   };
   x86_64-dmg = callPackage ./build-from-dmg.nix {
     inherit pname version metaCommon;
-    hash = "sha256-ZNUkzxpFTmsFcdC4oJWDxvqunpaBKz7Fnmrsa4W12Bg=";
+    hash = "sha256-yZYmM533D9VzM+a0bnYz/aqocaEJVFOTgLWjbQGOQR0=";
     isAarch64 = false;
   };
   aarch64-dmg = callPackage ./build-from-dmg.nix {
     inherit pname version metaCommon;
-    hash = "sha256-PpQF31qsn9TOIRVzOdDoLUqti+m1uRpBQrrqKtxFleE=";
+    hash = "sha256-/qa2P0R7xRzDgnPKqkeKN6lrDbPg9WuZ/Nnc51NTzaM=";
     isAarch64 = true;
   };
   x86_64-windows = callPackage ./build-from-windows.nix {
     inherit pname version metaCommon;
-    hash = "sha256-AgWvLU9m2q7fxZYXgHGMgEj1WLP5XzERq7tWcin2/30=";
+    hash = "sha256-0awYmSGxm8M12X0WQftlapRF9m3GGCZivNwBtRjSa4E=";
   };
 in
 (
diff --git a/pkgs/applications/video/makemkv/default.nix b/pkgs/applications/video/makemkv/default.nix
index 261e8008f6bc0..cb568d07cbf30 100644
--- a/pkgs/applications/video/makemkv/default.nix
+++ b/pkgs/applications/video/makemkv/default.nix
@@ -15,21 +15,21 @@
 }:
 
 let
-  version = "1.17.6";
+  version = "1.17.7";
   # Using two URLs as the first one will break as soon as a new version is released
   src_bin = fetchurl {
     urls = [
       "http://www.makemkv.com/download/makemkv-bin-${version}.tar.gz"
       "http://www.makemkv.com/download/old/makemkv-bin-${version}.tar.gz"
     ];
-    sha256 = "KHZGAFAp93HTZs8OT76xf88QM0UtlVVH3q57CZm07Rs=";
+    hash = "sha256-jFvIMbyVKx+HPMhFDGTjktsLJHm2JtGA8P/JZWaJUdA=";
   };
   src_oss = fetchurl {
     urls = [
       "http://www.makemkv.com/download/makemkv-oss-${version}.tar.gz"
       "http://www.makemkv.com/download/old/makemkv-oss-${version}.tar.gz"
     ];
-    sha256 = "2dtNdyv0+QYWQrfrIu5RQKSN4scSWKuLFNlJZXpxDUM=";
+    hash = "sha256-di5VLUb57HWnxi3LfZfA/Z5qFRINDvb1oIDO4pHToO8=";
   };
 in
 mkDerivation {
diff --git a/pkgs/applications/video/media-downloader/default.nix b/pkgs/applications/video/media-downloader/default.nix
deleted file mode 100644
index 761243d897ba0..0000000000000
--- a/pkgs/applications/video/media-downloader/default.nix
+++ /dev/null
@@ -1,50 +0,0 @@
-{ aria2
-, cmake
-, fetchFromGitHub
-, ffmpeg
-, lib
-, python3
-, qtbase
-, stdenv
-, wrapQtAppsHook
-, yt-dlp
-}:
-
-stdenv.mkDerivation (finalAttrs: {
-  pname = "media-downloader";
-  version = "4.5.0";
-
-  src = fetchFromGitHub {
-    owner = "mhogomchungu";
-    repo = "media-downloader";
-    rev = finalAttrs.version;
-    hash = "sha256-n+eQjjjdZhvXFSw5D/UQhyBMSZstfI/JixiEVhmQwXs=";
-  };
-
-  nativeBuildInputs = [
-    cmake
-    wrapQtAppsHook
-  ];
-
-  buildInputs = [
-    qtbase
-  ];
-
-  qtWrapperArgs = [
-    "--prefix PATH : ${lib.makeBinPath [
-        aria2
-        ffmpeg
-        python3
-        yt-dlp
-      ]}"
-  ];
-
-  meta = {
-    description = "A Qt/C++ GUI front end for yt-dlp and others";
-    homepage = "https://github.com/mhogomchungu/media-downloader";
-    license = lib.licenses.gpl2Plus;
-    maintainers = with lib.maintainers; [ zendo ];
-    platforms = lib.platforms.linux;
-    mainProgram = "media-downloader";
-  };
-})
diff --git a/pkgs/applications/video/memento/default.nix b/pkgs/applications/video/memento/default.nix
index cee74556eaabe..40ff061a7fea2 100644
--- a/pkgs/applications/video/memento/default.nix
+++ b/pkgs/applications/video/memento/default.nix
@@ -53,7 +53,7 @@ stdenv.mkDerivation (finalAttrs: {
   '';
 
   meta = with lib; {
-    description = "An mpv-based video player for studying Japanese";
+    description = "Mpv-based video player for studying Japanese";
     homepage = "https://ripose-jp.github.io/Memento/";
     license = licenses.gpl2;
     maintainers = with maintainers; [ teto ];
diff --git a/pkgs/applications/video/minitube/default.nix b/pkgs/applications/video/minitube/default.nix
index 3caa2b7fc56cc..557eba2b87b11 100644
--- a/pkgs/applications/video/minitube/default.nix
+++ b/pkgs/applications/video/minitube/default.nix
@@ -1,4 +1,4 @@
-{ mkDerivation, lib, fetchFromGitHub, fetchpatch, phonon, phonon-backend-vlc, qtbase, qmake
+{ mkDerivation, lib, fetchFromGitHub, phonon, phonon-backend-vlc, qtbase, qmake
 , qtdeclarative, qttools, qtx11extras, mpv
 
 # "Free" key generated by pasqui23
diff --git a/pkgs/applications/video/mkvtoolnix/default.nix b/pkgs/applications/video/mkvtoolnix/default.nix
index 8fc656981a3ad..bba0377185963 100644
--- a/pkgs/applications/video/mkvtoolnix/default.nix
+++ b/pkgs/applications/video/mkvtoolnix/default.nix
@@ -8,6 +8,7 @@
 , cmark
 , docbook_xsl
 , expat
+, fetchpatch2
 , file
 , flac
 , fmt
@@ -94,6 +95,11 @@ stdenv.mkDerivation rec {
   ++ optionals stdenv.isLinux [ qtwayland ]
   ++ optionals stdenv.isDarwin [ libiconv ];
 
+  patches = [ (fetchpatch2 {
+    url = "https://gitlab.com/mbunkus/mkvtoolnix/-/commit/7e1bea9527616ab6ab38425e7290579f05dd9bb1.patch";
+    hash = "sha256-9UZrfwrzfKwF8XDzqYnuaDgZws7l1YAb5O1O1+nxo0g=";
+  }) ];
+
   # autoupdate is not needed but it silences a ton of pointless warnings
   postPatch = ''
     patchShebangs . > /dev/null
diff --git a/pkgs/applications/video/mlv-app/default.nix b/pkgs/applications/video/mlv-app/default.nix
index 72e53090d33c7..05c6799e4213b 100644
--- a/pkgs/applications/video/mlv-app/default.nix
+++ b/pkgs/applications/video/mlv-app/default.nix
@@ -54,9 +54,7 @@ mkDerivation rec {
     description = "All in one MLV processing app that is pretty great";
     homepage = "https://mlv.app";
     license = licenses.gpl3;
-    maintainers = with maintainers; [
-      kiwi
-    ];
+    maintainers = with maintainers; [ ];
     platforms = platforms.linux;
     mainProgram = "mlvapp";
   };
diff --git a/pkgs/applications/video/mplayer/default.nix b/pkgs/applications/video/mplayer/default.nix
index 0fbfefa271988..97d1baf9c3e3f 100644
--- a/pkgs/applications/video/mplayer/default.nix
+++ b/pkgs/applications/video/mplayer/default.nix
@@ -202,7 +202,7 @@ stdenv.mkDerivation rec {
     '';
 
   meta = with lib; {
-    description = "A movie player that supports many video formats";
+    description = "Movie player that supports many video formats";
     homepage = "http://mplayerhq.hu";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ eelco ];
diff --git a/pkgs/applications/video/mpv-shim-default-shaders/default.nix b/pkgs/applications/video/mpv-shim-default-shaders/default.nix
index eb6c81f6358ba..7e1dfbae4a4d3 100644
--- a/pkgs/applications/video/mpv-shim-default-shaders/default.nix
+++ b/pkgs/applications/video/mpv-shim-default-shaders/default.nix
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     homepage = "https://github.com/iwalton3/default-shader-pack";
-    description = "Preconfigured set of MPV shaders and configurations for MPV Shim media clients.";
+    description = "Preconfigured set of MPV shaders and configurations for MPV Shim media clients";
     license = with licenses; [
       gpl3Plus
       mit
diff --git a/pkgs/applications/video/mpv/0001-fix-darwin-build.patch b/pkgs/applications/video/mpv/0001-fix-darwin-build.patch
new file mode 100644
index 0000000000000..c7e486a3c5d14
--- /dev/null
+++ b/pkgs/applications/video/mpv/0001-fix-darwin-build.patch
@@ -0,0 +1,29 @@
+--- a/osdep/mac/input_helper.swift
++++ b/osdep/mac/input_helper.swift
+@@ -18,6 +18,14 @@
+ import Cocoa
+ import Carbon.HIToolbox
+ 
++extension NSCondition {
++    fileprivate func withLock<T>(_ body: () throws -> T) rethrows -> T {
++        self.lock()
++        defer { self.unlock() }
++        return try body()
++    }
++}
++
+ class InputHelper: NSObject {
+     var option: OptionHelper?
+     var lock = NSCondition()
+--- a/audio/out/ao_avfoundation.m
++++ b/audio/out/ao_avfoundation.m
+@@ -312,7 +312,8 @@
+
++    #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 120000
+     p->observer = [[AVObserver alloc] initWithAO:ao];
+     NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+     [center addObserver:p->observer selector:@selector(handleRestartNotification:) name:AVSampleBufferAudioRendererOutputConfigurationDidChangeNotification object:p->renderer];
+     [center addObserver:p->observer selector:@selector(handleRestartNotification:) name:AVSampleBufferAudioRendererWasFlushedAutomaticallyNotification object:p->renderer];
+-
++    #endif
+     return CONTROL_OK;
diff --git a/pkgs/applications/video/mpv/darwin-sigtool-no-deep.patch b/pkgs/applications/video/mpv/darwin-sigtool-no-deep.patch
deleted file mode 100644
index 74ab97db4e540..0000000000000
--- a/pkgs/applications/video/mpv/darwin-sigtool-no-deep.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/TOOLS/osxbundle.py b/TOOLS/osxbundle.py
-index 98699e478b..d02ecf610e 100755
---- a/TOOLS/osxbundle.py
-+++ b/TOOLS/osxbundle.py
-@@ -39,7 +39,7 @@ def apply_plist_template(plist_file, version):
-         print(line.rstrip().replace('${VERSION}', version))
- 
- def sign_bundle(binary_name):
--    sh('codesign --force --deep -s - ' + bundle_path(binary_name))
-+    sh('rcodesign sign ' + bundle_path(binary_name))
- 
- def bundle_version():
-     if os.path.exists('VERSION'):
diff --git a/pkgs/applications/video/mpv/default.nix b/pkgs/applications/video/mpv/default.nix
index 163729d879b9a..0f9cec9c409bd 100644
--- a/pkgs/applications/video/mpv/default.nix
+++ b/pkgs/applications/video/mpv/default.nix
@@ -1,133 +1,176 @@
-{ lib
-, config
-, stdenv
-, fetchFromGitHub
-, fetchpatch
-, addOpenGLRunpath
-, bash
-, docutils
-, meson
-, ninja
-, pkg-config
-, python3
-, ffmpeg
-, freefont_ttf
-, freetype
-, libass
-, libpthreadstubs
-, nv-codec-headers-11
-, lua
-, libuchardet
-, libiconv
-, xcbuild
-, rcodesign
+{
+  lib,
+  SDL2,
+  addOpenGLRunpath,
+  alsa-lib,
+  bash,
+  buildPackages,
+  callPackage,
+  config,
+  darwin,
+  docutils,
+  fetchFromGitHub,
+  ffmpeg,
+  freefont_ttf,
+  freetype,
+  lcms2,
+  libGL,
+  libGLU,
+  libX11,
+  libXScrnSaver,
+  libXext,
+  libXinerama,
+  libXpresent,
+  libXrandr,
+  libXv,
+  libXxf86vm,
+  libarchive,
+  libass,
+  libbluray,
+  libbs2b,
+  libcaca,
+  libcdio,
+  libcdio-paranoia,
+  libdrm,
+  libdvdnav,
+  libiconv,
+  libjack2,
+  libplacebo,
+  libpng,
+  libpthreadstubs,
+  libpulseaudio,
+  libsixel,
+  libtheora,
+  libuchardet,
+  libva,
+  libvdpau,
+  libxkbcommon,
+  lua,
+  mesa,
+  meson,
+  mujs,
+  ninja,
+  nixosTests,
+  nv-codec-headers-11,
+  openalSoft,
+  pipewire,
+  pkg-config,
+  python3,
+  rubberband,
+  shaderc, # instead of spirv-cross
+  speex,
+  stdenv,
+  swift,
+  testers,
+  vapoursynth,
+  vulkan-headers,
+  vulkan-loader,
+  wayland,
+  wayland-protocols,
+  wayland-scanner,
+  xcbuild,
+  zimg,
 
-, waylandSupport ? stdenv.isLinux
-  , wayland
-  , wayland-protocols
-  , wayland-scanner
-  , libxkbcommon
-
-, x11Support ? stdenv.isLinux
-  , libGLU, libGL
-  , libX11
-  , libXext
-  , libXxf86vm
-  , libXrandr
-  , libXpresent
-
-, cddaSupport ? false
-  , libcdio
-  , libcdio-paranoia
-
-, vulkanSupport ? stdenv.isLinux
-  , libplacebo
-  , shaderc # instead of spirv-cross
-  , vulkan-headers
-  , vulkan-loader
-
-, drmSupport ? stdenv.isLinux
-  , libdrm
-  , mesa
-
-, alsaSupport        ? stdenv.isLinux, alsa-lib
-, archiveSupport     ? true,           libarchive
-, bluraySupport      ? true,           libbluray
-, bs2bSupport        ? true,           libbs2b
-, cacaSupport        ? true,           libcaca
-, cmsSupport         ? true,           lcms2
-, dvdnavSupport      ? stdenv.isLinux, libdvdnav
-, dvbinSupport       ? stdenv.isLinux
-, jackaudioSupport   ? false,          libjack2
-, javascriptSupport  ? true,           mujs
-, libpngSupport      ? true,           libpng
-, openalSupport      ? true,           openalSoft
-, pulseSupport       ? config.pulseaudio or stdenv.isLinux, libpulseaudio
-, pipewireSupport    ? stdenv.isLinux, pipewire
-, rubberbandSupport  ? true,           rubberband
-, screenSaverSupport ? true,           libXScrnSaver
-, sdl2Support        ? true,           SDL2
-, sixelSupport       ? false,          libsixel
-, speexSupport       ? true,           speex
-, swiftSupport       ? stdenv.isDarwin, swift
-, theoraSupport      ? true,           libtheora
-, vaapiSupport       ? x11Support || waylandSupport, libva
-, vapoursynthSupport ? false,          vapoursynth
-, vdpauSupport       ? true,           libvdpau
-, xineramaSupport    ? stdenv.isLinux, libXinerama
-, xvSupport          ? stdenv.isLinux, libXv
-, zimgSupport        ? true,           zimg
-, darwin
+  # Boolean
+  alsaSupport ? stdenv.isLinux,
+  archiveSupport ? true,
+  bluraySupport ? true,
+  bs2bSupport ? true,
+  cacaSupport ? true,
+  cddaSupport ? false,
+  cmsSupport ? true,
+  drmSupport ? stdenv.isLinux,
+  dvbinSupport ? stdenv.isLinux,
+  dvdnavSupport ? stdenv.isLinux,
+  jackaudioSupport ? false,
+  javascriptSupport ? true,
+  libpngSupport ? true,
+  openalSupport ? true,
+  pipewireSupport ? stdenv.isLinux,
+  pulseSupport ? config.pulseaudio or stdenv.isLinux,
+  rubberbandSupport ? true,
+  screenSaverSupport ? true,
+  sdl2Support ? !stdenv.isDarwin,
+  sixelSupport ? false,
+  speexSupport ? true,
+  swiftSupport ? stdenv.isDarwin,
+  theoraSupport ? true,
+  vaapiSupport ? x11Support || waylandSupport,
+  vapoursynthSupport ? false,
+  vdpauSupport ? true,
+  vulkanSupport ? stdenv.isLinux,
+  waylandSupport ? stdenv.isLinux,
+  x11Support ? stdenv.isLinux,
+  xineramaSupport ? stdenv.isLinux,
+  xvSupport ? stdenv.isLinux,
+  zimgSupport ? true,
 }:
 
 let
   inherit (darwin.apple_sdk_11_0.frameworks)
-    AVFoundation Accelerate Cocoa CoreAudio CoreFoundation CoreMedia
-    MediaPlayer VideoToolbox;
+    AVFoundation
+    Accelerate
+    Cocoa
+    CoreAudio
+    CoreFoundation
+    CoreMedia
+    MediaPlayer
+    VideoToolbox
+    ;
   luaEnv = lua.withPackages (ps: with ps; [ luasocket ]);
 
-  overrideSDK = platform: version:
-    platform // lib.optionalAttrs (platform ? darwinMinVersion) {
-      darwinMinVersion = version;
-    };
+  overrideSDK =
+    platform: version:
+    platform // lib.optionalAttrs (platform ? darwinMinVersion) { darwinMinVersion = version; };
 
-  stdenv' = if swiftSupport && stdenv.isDarwin && stdenv.isx86_64
-    then stdenv.override (old: {
-      buildPlatform = overrideSDK old.buildPlatform "10.15";
-      hostPlatform = overrideSDK old.hostPlatform "10.15";
-      targetPlatform = overrideSDK old.targetPlatform "10.15";
-    })
-    else stdenv;
-in stdenv'.mkDerivation (finalAttrs: {
+  stdenv' =
+    if swiftSupport && stdenv.isDarwin && stdenv.isx86_64 then
+      stdenv.override (old: {
+        buildPlatform = overrideSDK old.buildPlatform "11.0";
+        hostPlatform = overrideSDK old.hostPlatform "11.0";
+        targetPlatform = overrideSDK old.targetPlatform "11.0";
+      })
+    else
+      stdenv;
+in
+stdenv'.mkDerivation (finalAttrs: {
   pname = "mpv";
-  version = "0.37.0";
+  version = "0.38.0";
 
-  outputs = [ "out" "dev" "doc" "man" ];
+  outputs = [
+    "out"
+    "dev"
+    "doc"
+    "man"
+  ];
 
   src = fetchFromGitHub {
     owner = "mpv-player";
     repo = "mpv";
     rev = "v${finalAttrs.version}";
-    hash = "sha256-izAz9Iiam7tJAWIQkmn2cKOfoaog8oPKq4sOUtp1nvU=";
+    hash = "sha256-dFajnCpGlNqUv33A8eFEn8kjtzIPkcBY5j0gNVlaiIY=";
   };
 
-  patches = [ ./darwin-sigtool-no-deep.patch ];
+  patches = [
+    # Fix build with Darwin SDK 11
+    ./0001-fix-darwin-build.patch
+  ];
 
   postPatch = lib.concatStringsSep "\n" [
     # Don't reference compile time dependencies or create a build outputs cycle
     # between out and dev
     ''
-    substituteInPlace meson.build \
-      --replace-fail "conf_data.set_quoted('CONFIGURATION', configuration)" \
-                     "conf_data.set_quoted('CONFIGURATION', '<ommited>')"
+      substituteInPlace meson.build \
+        --replace-fail "conf_data.set_quoted('CONFIGURATION', configuration)" \
+                       "conf_data.set_quoted('CONFIGURATION', '<ommited>')"
     ''
     # A trick to patchShebang everything except mpv_identify.sh
     ''
-    pushd TOOLS
-    mv mpv_identify.sh mpv_identify
-    patchShebangs *.py *.sh
-    mv mpv_identify mpv_identify.sh
-    popd
+      pushd TOOLS
+      mv mpv_identify.sh mpv_identify
+      patchShebangs *.py *.sh
+      mv mpv_identify mpv_identify.sh
+      popd
     ''
   ];
 
@@ -136,81 +179,124 @@ in stdenv'.mkDerivation (finalAttrs: {
     export SWIFT_LIB_DYNAMIC="${lib.getLib swift.swift}/lib/swift/macosx"
   '';
 
-  mesonFlags = [
-    (lib.mesonOption "default_library" "shared")
-    (lib.mesonBool "libmpv" true)
-    (lib.mesonEnable "libarchive" archiveSupport)
-    (lib.mesonEnable "manpage-build" true)
-    (lib.mesonEnable "cdda" cddaSupport)
-    (lib.mesonEnable "dvbin" dvbinSupport)
-    (lib.mesonEnable "dvdnav" dvdnavSupport)
-    (lib.mesonEnable "openal" openalSupport)
-    (lib.mesonEnable "sdl2" sdl2Support)
-    # Disable whilst Swift isn't supported
-    (lib.mesonEnable "swift-build" swiftSupport)
-    (lib.mesonEnable "macos-cocoa-cb" swiftSupport)
-  ] ++ lib.optionals stdenv.isDarwin [
-    # Toggle explicitly because it fails on darwin
-    (lib.mesonEnable "videotoolbox-pl" vulkanSupport)
-  ];
+  mesonFlags =
+    [
+      (lib.mesonOption "default_library" "shared")
+      (lib.mesonBool "libmpv" true)
+      (lib.mesonEnable "libarchive" archiveSupport)
+      (lib.mesonEnable "manpage-build" true)
+      (lib.mesonEnable "cdda" cddaSupport)
+      (lib.mesonEnable "dvbin" dvbinSupport)
+      (lib.mesonEnable "dvdnav" dvdnavSupport)
+      (lib.mesonEnable "openal" openalSupport)
+      (lib.mesonEnable "sdl2" sdl2Support)
+      # Disable whilst Swift isn't supported
+      (lib.mesonEnable "swift-build" swiftSupport)
+      (lib.mesonEnable "macos-cocoa-cb" swiftSupport)
+    ]
+    ++ lib.optionals stdenv.isDarwin [
+      # Toggle explicitly because it fails on darwin
+      (lib.mesonEnable "videotoolbox-pl" vulkanSupport)
+    ];
 
   mesonAutoFeatures = "auto";
 
-  nativeBuildInputs = [
-    addOpenGLRunpath
-    docutils # for rst2man
-    meson
-    ninja
-    pkg-config
-  ]
-  ++ lib.optionals stdenv.isDarwin [ xcbuild.xcrun rcodesign ]
-  ++ lib.optionals swiftSupport [ swift ]
-  ++ lib.optionals waylandSupport [ wayland-scanner ];
+  nativeBuildInputs =
+    [
+      addOpenGLRunpath
+      docutils # for rst2man
+      meson
+      ninja
+      pkg-config
+    ]
+    ++ lib.optionals stdenv.isDarwin [
+      buildPackages.darwin.sigtool
+      xcbuild.xcrun
+    ]
+    ++ lib.optionals swiftSupport [ swift ]
+    ++ lib.optionals waylandSupport [ wayland-scanner ];
 
-  buildInputs = [
-    bash
-    ffmpeg
-    freetype
-    libass
-    libplacebo
-    libpthreadstubs
-    libuchardet
-    luaEnv
-    python3
-  ] ++ lib.optionals alsaSupport        [ alsa-lib ]
-    ++ lib.optionals archiveSupport     [ libarchive ]
-    ++ lib.optionals bluraySupport      [ libbluray ]
-    ++ lib.optionals bs2bSupport        [ libbs2b ]
-    ++ lib.optionals cacaSupport        [ libcaca ]
-    ++ lib.optionals cddaSupport        [ libcdio libcdio-paranoia ]
-    ++ lib.optionals cmsSupport         [ lcms2 ]
-    ++ lib.optionals drmSupport         [ libdrm mesa ]
-    ++ lib.optionals dvdnavSupport      [ libdvdnav libdvdnav.libdvdread ]
-    ++ lib.optionals jackaudioSupport   [ libjack2 ]
-    ++ lib.optionals javascriptSupport  [ mujs ]
-    ++ lib.optionals libpngSupport      [ libpng ]
-    ++ lib.optionals openalSupport      [ openalSoft ]
-    ++ lib.optionals pipewireSupport    [ pipewire ]
-    ++ lib.optionals pulseSupport       [ libpulseaudio ]
-    ++ lib.optionals rubberbandSupport  [ rubberband ]
+  buildInputs =
+    [
+      bash
+      ffmpeg
+      freetype
+      libass
+      libplacebo
+      libpthreadstubs
+      libuchardet
+      luaEnv
+      python3
+    ]
+    ++ lib.optionals alsaSupport [ alsa-lib ]
+    ++ lib.optionals archiveSupport [ libarchive ]
+    ++ lib.optionals bluraySupport [ libbluray ]
+    ++ lib.optionals bs2bSupport [ libbs2b ]
+    ++ lib.optionals cacaSupport [ libcaca ]
+    ++ lib.optionals cddaSupport [
+      libcdio
+      libcdio-paranoia
+    ]
+    ++ lib.optionals cmsSupport [ lcms2 ]
+    ++ lib.optionals drmSupport [
+      libdrm
+      mesa
+    ]
+    ++ lib.optionals dvdnavSupport [
+      libdvdnav
+      libdvdnav.libdvdread
+    ]
+    ++ lib.optionals jackaudioSupport [ libjack2 ]
+    ++ lib.optionals javascriptSupport [ mujs ]
+    ++ lib.optionals libpngSupport [ libpng ]
+    ++ lib.optionals openalSupport [ openalSoft ]
+    ++ lib.optionals pipewireSupport [ pipewire ]
+    ++ lib.optionals pulseSupport [ libpulseaudio ]
+    ++ lib.optionals rubberbandSupport [ rubberband ]
     ++ lib.optionals screenSaverSupport [ libXScrnSaver ]
-    ++ lib.optionals sdl2Support        [ SDL2 ]
-    ++ lib.optionals sixelSupport       [ libsixel ]
-    ++ lib.optionals speexSupport       [ speex ]
-    ++ lib.optionals theoraSupport      [ libtheora ]
-    ++ lib.optionals vaapiSupport       [ libva ]
+    ++ lib.optionals sdl2Support [ SDL2 ]
+    ++ lib.optionals sixelSupport [ libsixel ]
+    ++ lib.optionals speexSupport [ speex ]
+    ++ lib.optionals theoraSupport [ libtheora ]
+    ++ lib.optionals vaapiSupport [ libva ]
     ++ lib.optionals vapoursynthSupport [ vapoursynth ]
-    ++ lib.optionals vdpauSupport       [ libvdpau ]
-    ++ lib.optionals vulkanSupport      [ shaderc vulkan-headers vulkan-loader ]
-    ++ lib.optionals waylandSupport     [ wayland wayland-protocols libxkbcommon ]
-    ++ lib.optionals x11Support         [ libX11 libXext libGLU libGL libXxf86vm libXrandr libXpresent ]
-    ++ lib.optionals xineramaSupport    [ libXinerama ]
-    ++ lib.optionals xvSupport          [ libXv ]
-    ++ lib.optionals zimgSupport        [ zimg ]
-    ++ lib.optionals stdenv.isLinux     [ nv-codec-headers-11 ]
-    ++ lib.optionals stdenv.isDarwin    [ libiconv ]
-    ++ lib.optionals stdenv.isDarwin    [ Accelerate CoreFoundation Cocoa CoreAudio MediaPlayer VideoToolbox ]
-    ++ lib.optionals (stdenv.isDarwin && swiftSupport) [ AVFoundation CoreMedia ];
+    ++ lib.optionals vdpauSupport [ libvdpau ]
+    ++ lib.optionals vulkanSupport [
+      shaderc
+      vulkan-headers
+      vulkan-loader
+    ]
+    ++ lib.optionals waylandSupport [
+      wayland
+      wayland-protocols
+      libxkbcommon
+    ]
+    ++ lib.optionals x11Support [
+      libX11
+      libXext
+      libGLU
+      libGL
+      libXxf86vm
+      libXrandr
+      libXpresent
+    ]
+    ++ lib.optionals xineramaSupport [ libXinerama ]
+    ++ lib.optionals xvSupport [ libXv ]
+    ++ lib.optionals zimgSupport [ zimg ]
+    ++ lib.optionals stdenv.isLinux [ nv-codec-headers-11 ]
+    ++ lib.optionals stdenv.isDarwin [ libiconv ]
+    ++ lib.optionals stdenv.isDarwin [
+      Accelerate
+      CoreFoundation
+      Cocoa
+      CoreAudio
+      MediaPlayer
+      VideoToolbox
+    ]
+    ++ lib.optionals (stdenv.isDarwin && swiftSupport) [
+      AVFoundation
+      CoreMedia
+    ];
 
   postBuild = lib.optionalString stdenv.isDarwin ''
     pushd .. # Must be run from the source dir because it uses relative paths
@@ -218,27 +304,29 @@ in stdenv'.mkDerivation (finalAttrs: {
     popd
   '';
 
-  postInstall = ''
-    # Use a standard font
-    mkdir -p $out/share/mpv
-    ln -s ${freefont_ttf}/share/fonts/truetype/FreeSans.ttf $out/share/mpv/subfont.ttf
+  postInstall =
+    ''
+      # Use a standard font
+      mkdir -p $out/share/mpv
+      ln -s ${freefont_ttf}/share/fonts/truetype/FreeSans.ttf $out/share/mpv/subfont.ttf
 
-    pushd ../TOOLS
-    cp mpv_identify.sh umpv $out/bin/
-    popd
-    pushd $out/share/applications
+      pushd ../TOOLS
+      cp mpv_identify.sh umpv $out/bin/
+      popd
+      pushd $out/share/applications
 
-    # patch out smb protocol reference, since our ffmpeg can't handle it
-    substituteInPlace mpv.desktop --replace-fail "smb," ""
+      # patch out smb protocol reference, since our ffmpeg can't handle it
+      substituteInPlace mpv.desktop --replace-fail "smb," ""
 
-    sed -e '/Icon=/ ! s|mpv|umpv|g; s|^Exec=.*|Exec=umpv %U|' \
-      mpv.desktop > umpv.desktop
-    printf "NoDisplay=true\n" >> umpv.desktop
-    popd
-  '' + lib.optionalString stdenv.isDarwin ''
-    mkdir -p $out/Applications
-    cp -r mpv.app $out/Applications
-  '';
+      sed -e '/Icon=/ ! s|mpv|umpv|g; s|^Exec=.*|Exec=umpv %U|' \
+        mpv.desktop > umpv.desktop
+      printf "NoDisplay=true\n" >> umpv.desktop
+      popd
+    ''
+    + lib.optionalString stdenv.isDarwin ''
+      mkdir -p $out/Applications
+      cp -r mpv.app $out/Applications
+    '';
 
   # Set RUNPATH so that libcuda in /run/opengl-driver(-32)/lib can be found.
   # See the explanation in addOpenGLRunpath.
@@ -249,16 +337,29 @@ in stdenv'.mkDerivation (finalAttrs: {
 
   passthru = {
     inherit
-    # The wrapper consults luaEnv and lua.version
-    luaEnv
-    lua
-    # In the wrapper, we want to reference vapoursynth which has the `python3`
-    # passthru attribute (which has the `sitePrefix` attribute). This way we'll
-    # be sure that in the wrapper we'll use the same python3.sitePrefix used to
-    # build vapoursynth.
-    vapoursynthSupport
-    vapoursynth
-    ;
+      # The wrapper consults luaEnv and lua.version
+      luaEnv
+      lua
+      # In the wrapper, we want to reference vapoursynth which has the `python3`
+      # passthru attribute (which has the `sitePrefix` attribute). This way we'll
+      # be sure that in the wrapper we'll use the same python3.sitePrefix used to
+      # build vapoursynth.
+      vapoursynthSupport
+      vapoursynth
+      ;
+
+    wrapper = callPackage ./wrapper.nix { };
+    scripts = callPackage ./scripts { };
+
+    tests = {
+      inherit (nixosTests) mpv;
+
+      version = testers.testVersion { package = finalAttrs.finalPackage; };
+      pkg-config = testers.hasPkgConfigModules {
+        package = finalAttrs.finalPackage;
+        moduleNames = [ "mpv" ];
+      };
+    };
   };
 
   meta = {
@@ -272,7 +373,11 @@ in stdenv'.mkDerivation (finalAttrs: {
     license = lib.licenses.gpl2Plus;
     mainProgram = "mpv";
     maintainers = with lib.maintainers; [
-      AndersonTorres fpletz globin ma27 tadeokondrak
+      AndersonTorres
+      fpletz
+      globin
+      ma27
+      tadeokondrak
     ];
     platforms = lib.platforms.unix;
   };
diff --git a/pkgs/applications/video/mpv/scripts/autosubsync-mpv.nix b/pkgs/applications/video/mpv/scripts/autosubsync-mpv.nix
new file mode 100644
index 0000000000000..d162da18c018a
--- /dev/null
+++ b/pkgs/applications/video/mpv/scripts/autosubsync-mpv.nix
@@ -0,0 +1,38 @@
+{
+  lib,
+  fetchFromGitHub,
+  buildLua,
+  alass,
+}:
+
+buildLua {
+  pname = "autosubsync-mpv";
+  version = "0-unstable-2022-12-26";
+
+  src = fetchFromGitHub {
+    owner = "joaquintorres";
+    repo = "autosubsync-mpv";
+    rev = "22cb928ecd94cc8cadaf8c354438123c43e0c70d";
+    sha256 = "sha256-XQPFC7l9MTZAW5FfULRQJfu/7FuGj9bbjQUZhNv0rlc=";
+  };
+
+  # While nixpkgs only packages alass, we might as well make that the default
+  patchPhase = ''
+    runHook prePatch
+    substituteInPlace autosubsync.lua                                            \
+      --replace-warn 'alass_path = ""' 'alass_path = "${alass}/bin/alass-cli"'   \
+      --replace-warn 'audio_subsync_tool = "ask"' 'audio_subsync_tool = "alass"' \
+      --replace-warn 'altsub_subsync_tool = "ask"' 'altsub_subsync_tool = "alass"'
+    runHook postPatch
+  '';
+
+  scriptPath = "./";
+  passthru.scriptName = "autosubsync-mpv";
+
+  meta = with lib; {
+    description = "Automatically sync subtitles in mpv using the `n` button";
+    homepage = "https://github.com/joaquintorres/autosubsync-mpv";
+    maintainers = with maintainers; [ kovirobi ];
+    license = licenses.mit;
+  };
+}
diff --git a/pkgs/applications/video/mpv/scripts/buildLua.nix b/pkgs/applications/video/mpv/scripts/buildLua.nix
index 8db7d4b1aa3c9..2e25ee55b28a0 100644
--- a/pkgs/applications/video/mpv/scripts/buildLua.nix
+++ b/pkgs/applications/video/mpv/scripts/buildLua.nix
@@ -1,5 +1,4 @@
-{ lib
-, stdenvNoCC }:
+{ lib, stdenvNoCC }:
 
 let
   # Escape strings for embedding in shell scripts
@@ -10,74 +9,90 @@ let
   scriptsDir = "$out/share/mpv/scripts";
 
   # similar to `lib.extends`, but with inverted precedence and recursive update
-  extendedBy = args: orig: self:
-    let super = args self;
-    in lib.recursiveUpdate (orig super) super
-  ;
+  extendedBy =
+    args: orig: self:
+    let
+      super = args self;
+    in
+    lib.recursiveUpdate (orig super) super;
 in
 
-lib.makeOverridable (args: stdenvNoCC.mkDerivation (extendedBy
-  (if lib.isFunction args then args else (_: args)) (
-  { pname
-  , extraScripts ? []
-  , ... }@args:
-  let
-    strippedName = with builtins;
-      let groups = match "mpv[-_](.*)" pname; in
-      if groups != null
-      then head groups
-      else pname
-    ;
-    # either passthru.scriptName, inferred from scriptPath, or from pname
-    scriptName = (args.passthru or {}).scriptName or (
-      if args ? scriptPath
-      then fileName args.scriptPath
-      else "${strippedName}.lua"
-    );
-    scriptPath = args.scriptPath or "./${scriptName}";
-  in {
-    dontBuild = true;
-    preferLocalBuild = true;
+lib.makeOverridable (
+  args:
+  stdenvNoCC.mkDerivation (
+    extendedBy (if lib.isFunction args then args else (_: args)) (
+      {
+        pname,
+        extraScripts ? [ ],
+        ...
+      }@args:
+      let
+        strippedName =
+          with builtins;
+          let
+            groups = match "mpv[-_](.*)" pname;
+          in
+          if groups != null then head groups else pname;
+        # either passthru.scriptName, inferred from scriptPath, or from pname
+        scriptName =
+          (args.passthru or { }).scriptName
+            or (if args ? scriptPath then fileName args.scriptPath else "${strippedName}.lua");
+        scriptPath = args.scriptPath or "./${scriptName}";
+      in
+      {
+        dontBuild = true;
+        preferLocalBuild = true;
 
-    # Prevent `patch` from emitting `.orig` files (that end up in the output)
-    patchFlags = [ "--no-backup-if-mismatch" "-p1" ];
+        # Prevent `patch` from emitting `.orig` files (that end up in the output)
+        patchFlags = [
+          "--no-backup-if-mismatch"
+          "-p1"
+        ];
 
-    outputHashMode = "recursive";
-    installPhase = ''
-      runHook preInstall
+        outputHashMode = "recursive";
+        installPhase = ''
+          runHook preInstall
 
-      if [ -d "${scriptPath}" ]; then
-        [ -f "${scriptPath}/main.lua" ] || {
-          echo "Script directory '${scriptPath}' does not contain 'main.lua'" >&2
-          exit 1
-        }
-        [ ${with builtins; toString (length extraScripts)} -eq 0 ] || {
-          echo "mpvScripts.buildLua does not support 'extraScripts'" \
-               "when 'scriptPath' is a directory" >&2
-          exit 1
-        }
-        mkdir -p "${scriptsDir}"
-        cp -a "${scriptPath}" "${scriptsDir}/${scriptName}"
-      else
-        install -m644 -Dt "${scriptsDir}" ${escaped scriptPath}
-        ${lib.optionalString (extraScripts != []) ''cp -at "${scriptsDir}/" ${escapedList extraScripts}''}
-      fi
+          if [ -d "${scriptPath}" ]; then
+            [ -f "${scriptPath}/main.lua" ] || {
+              echo "Script directory '${scriptPath}' does not contain 'main.lua'" >&2
+              exit 1
+            }
+            [ ${with builtins; toString (length extraScripts)} -eq 0 ] || {
+              echo "mpvScripts.buildLua does not support 'extraScripts'" \
+                   "when 'scriptPath' is a directory" >&2
+              exit 1
+            }
+            mkdir -p "${scriptsDir}"
+            cp -a "${scriptPath}" "${scriptsDir}/${scriptName}"
+          else
+            install -m644 -Dt "${scriptsDir}" ${escaped scriptPath}
+            ${
+              lib.optionalString (extraScripts != [ ]) ''cp -at "${scriptsDir}/" ${escapedList extraScripts}''
+            }
+          fi
 
-      runHook postInstall
-    '';
+          runHook postInstall
+        '';
 
-    passthru = { inherit scriptName; };
-    meta = {
-      platforms = lib.platforms.all;
-    } // (
-      let pos =
-        if (args.meta or {}) ? description then
-          builtins.unsafeGetAttrPos "description" args.meta
-        else
-          builtins.unsafeGetAttrPos "pname" args;
-      in lib.optionalAttrs
-        (pos != null)
-        { position = "${pos.file}:${toString pos.line}"; }
-    );
-  })
-))
+        passthru = {
+          inherit scriptName;
+        };
+        meta =
+          {
+            platforms = lib.platforms.all;
+          }
+          // (
+            let
+              pos =
+                if (args.meta or { }) ? description then
+                  builtins.unsafeGetAttrPos "description" args.meta
+                else
+                  builtins.unsafeGetAttrPos "pname" args;
+            in
+            lib.optionalAttrs (pos != null) { position = "${pos.file}:${toString pos.line}"; }
+          );
+      }
+    )
+  )
+)
diff --git a/pkgs/applications/video/mpv/scripts/chapterskip.nix b/pkgs/applications/video/mpv/scripts/chapterskip.nix
index 6c6fc4ba51fee..b1b993df3692a 100644
--- a/pkgs/applications/video/mpv/scripts/chapterskip.nix
+++ b/pkgs/applications/video/mpv/scripts/chapterskip.nix
@@ -1,7 +1,9 @@
-{ lib
-, fetchFromGitHub
-, unstableGitUpdater
-, buildLua }:
+{
+  lib,
+  fetchFromGitHub,
+  unstableGitUpdater,
+  buildLua,
+}:
 
 buildLua {
   pname = "chapterskip";
@@ -9,20 +11,20 @@ buildLua {
   version = "0-unstable-2022-09-08";
   src = fetchFromGitHub {
     owner = "po5";
-    repo  = "chapterskip";
-    rev   = "b26825316e3329882206ae78dc903ebc4613f039";
-    hash  = "sha256-OTrLQE3rYvPQamEX23D6HttNjx3vafWdTMxTiWpDy90=";
+    repo = "chapterskip";
+    rev = "b26825316e3329882206ae78dc903ebc4613f039";
+    hash = "sha256-OTrLQE3rYvPQamEX23D6HttNjx3vafWdTMxTiWpDy90=";
   };
-  passthru.updateScript = unstableGitUpdater {};
+  passthru.updateScript = unstableGitUpdater { };
 
   meta = {
     description = "Automatically skips chapters based on title";
     longDescription = ''
-    MPV script that skips chapters based on their title, categorized using regexes.
-    The set of skipped categories can be configured globally, or by an auto-profile.
+      MPV script that skips chapters based on their title, categorized using regexes.
+      The set of skipped categories can be configured globally, or by an auto-profile.
     '';
     homepage = "https://github.com/po5/chapterskip";
-    license = lib.licenses.unfree;  # https://github.com/po5/chapterskip/issues/10
+    license = lib.licenses.unfree; # https://github.com/po5/chapterskip/issues/10
     maintainers = with lib.maintainers; [ nicoo ];
   };
 }
diff --git a/pkgs/applications/video/mpv/scripts/convert.nix b/pkgs/applications/video/mpv/scripts/convert.nix
index d1fdc9c801bb7..1df83df46d8c4 100644
--- a/pkgs/applications/video/mpv/scripts/convert.nix
+++ b/pkgs/applications/video/mpv/scripts/convert.nix
@@ -1,11 +1,12 @@
-{ lib
-, fetchgit
-, unstableGitUpdater
+{
+  lib,
+  fetchgit,
+  unstableGitUpdater,
 
-, buildLua
-, libnotify
-, mkvtoolnix-cli
-, yad
+  buildLua,
+  libnotify,
+  mkvtoolnix-cli,
+  yad,
 }:
 
 buildLua {
@@ -16,20 +17,20 @@ buildLua {
     rev = "f95cee43e390e843a47e8ec9d1711a12a8cd343d";
     sha256 = "13m7l4sy2r8jv2sfrb3vvqvnim4a9ilnv28q5drlg09v298z3mck";
   };
-  passthru.updateScript = unstableGitUpdater {};
+  passthru.updateScript = unstableGitUpdater { };
 
   patches = [ ./convert.patch ];
 
   postPatch = ''
     substituteInPlace convert_script.lua \
-      --replace 'mkvpropedit_exe = "mkvpropedit"' \
-                'mkvpropedit_exe = "${mkvtoolnix-cli}/bin/mkvpropedit"' \
-      --replace 'mkvmerge_exe = "mkvmerge"' \
-                'mkvmerge_exe = "${mkvtoolnix-cli}/bin/mkvmerge"' \
-      --replace 'yad_exe = "yad"' \
-                'yad_exe = "${yad}/bin/yad"' \
-      --replace 'notify_send_exe = "notify-send"' \
-                'notify_send_exe = "${libnotify}/bin/notify-send"' \
+      --replace-fail 'mkvpropedit_exe = "mkvpropedit"' \
+                'mkvpropedit_exe = "${lib.getExe' mkvtoolnix-cli "mkvpropedit"}"' \
+      --replace-fail 'mkvmerge_exe = "mkvmerge"' \
+                'mkvmerge_exe = "${lib.getExe' mkvtoolnix-cli "mkvmerge"}"' \
+      --replace-fail 'yad_exe = "yad"' \
+                'yad_exe = "${lib.getExe yad}"' \
+      --replace-fail 'notify_send_exe = "notify-send"' \
+                'notify_send_exe = "${lib.getExe libnotify}"' \
   '';
 
   scriptPath = "convert_script.lua";
diff --git a/pkgs/applications/video/mpv/scripts/cutter.nix b/pkgs/applications/video/mpv/scripts/cutter.nix
index ac2f518a9b5ab..b051c08a85470 100644
--- a/pkgs/applications/video/mpv/scripts/cutter.nix
+++ b/pkgs/applications/video/mpv/scripts/cutter.nix
@@ -1,4 +1,10 @@
-{ lib, buildLua, fetchFromGitHub, makeWrapper, unstableGitUpdater }:
+{
+  lib,
+  buildLua,
+  fetchFromGitHub,
+  makeWrapper,
+  unstableGitUpdater,
+}:
 
 buildLua {
   pname = "video-cutter";
@@ -10,19 +16,19 @@ buildLua {
     rev = "01a0396c075d5f8bbd1de5b571e6231f8899ab65";
     sha256 = "sha256-veoRFzUCRH8TrvR7x+WWoycpDyxqrJZ/bnp61dVc0pE=";
   };
-  passthru.updateScript = unstableGitUpdater {};
+  passthru.updateScript = unstableGitUpdater { };
 
   nativeBuildInputs = [ makeWrapper ];
 
   postPatch = ''
     substituteInPlace cutter.lua \
-      --replace '~/.config/mpv/scripts/c_concat.sh' '${placeholder "out"}/share/mpv/scripts/c_concat.sh'
+      --replace-fail '~/.config/mpv/scripts/c_concat.sh' '${placeholder "out"}/share/mpv/scripts/c_concat.sh'
 
     # needs to be ran separately so that we can replace everything, and not every single mention explicitly
     # original script places them in the scripts folder, just spawning unnecessary errors
     # i know that hardcoding .config and especially the .mpv directory isn't best practice, but I didn't want to deviate too much from upstream
     substituteInPlace cutter.lua \
-      --replace '~/.config/mpv/scripts' "''${XDG_CONFIG_HOME:-~/.config}/mpv/cutter"
+      --replace-fail '~/.config/mpv/scripts' "''${XDG_CONFIG_HOME:-~/.config}/mpv/cutter"
   '';
 
   passthru.scriptName = "cutter.lua";
diff --git a/pkgs/applications/video/mpv/scripts/default.nix b/pkgs/applications/video/mpv/scripts/default.nix
index ce5188c09d294..c9e433e6fe00d 100644
--- a/pkgs/applications/video/mpv/scripts/default.nix
+++ b/pkgs/applications/video/mpv/scripts/default.nix
@@ -1,111 +1,147 @@
-{ lib
-, config
-, newScope
-, runCommand
+{
+  lib,
+  config,
+  newScope,
+  runCommand,
 }:
 
 let
-  unionOfDisjoints = lib.fold lib.attrsets.unionOfDisjoint {};
+  unionOfDisjoints = lib.fold lib.attrsets.unionOfDisjoint { };
 
-  addTests = name: drv:
-    if ! lib.isDerivation drv then
+  addTests =
+    name: drv:
+    if !lib.isDerivation drv then
       drv
-    else let
-      inherit (drv) scriptName;
-      scriptPath = "share/mpv/scripts/${scriptName}";
-      fullScriptPath = "${drv}/${scriptPath}";
-    in drv.overrideAttrs (old: { passthru = (old.passthru or {}) // { tests = unionOfDisjoints [
-      (old.passthru.tests or {})
+    else
+      let
+        inherit (drv) scriptName;
+        scriptPath = "share/mpv/scripts/${scriptName}";
+        fullScriptPath = "${drv}/${scriptPath}";
+      in
+      drv.overrideAttrs (old: {
+        passthru = (old.passthru or { }) // {
+          tests = unionOfDisjoints [
+            (old.passthru.tests or { })
 
-      {
-        scriptName-is-valid = runCommand "mpvScripts.${name}.passthru.tests.scriptName-is-valid" {
-          meta.maintainers = with lib.maintainers; [ nicoo ];
-          preferLocalBuild = true;
-        } ''
-          if [ -e "${fullScriptPath}" ]; then
-            touch $out
-          else
-            echo "mpvScripts.\"${name}\" does not contain a script named \"${scriptName}\"" >&2
-            exit 1
-          fi
-        '';
-      }
+            {
+              scriptName-is-valid =
+                runCommand "mpvScripts.${name}.passthru.tests.scriptName-is-valid"
+                  {
+                    meta.maintainers = with lib.maintainers; [ nicoo ];
+                    preferLocalBuild = true;
+                  }
+                  ''
+                    if [ -e "${fullScriptPath}" ]; then
+                      touch $out
+                    else
+                      echo "mpvScripts.\"${name}\" does not contain a script named \"${scriptName}\"" >&2
+                      exit 1
+                    fi
+                  '';
+            }
 
-      # can't check whether `fullScriptPath` is a directory, in pure-evaluation mode
-      (with lib; optionalAttrs (! any (s: hasSuffix s drv.passthru.scriptName) [ ".js" ".lua" ".so" ]) {
-        single-main-in-script-dir = runCommand "mpvScripts.${name}.passthru.tests.single-main-in-script-dir" {
-          meta.maintainers = with lib.maintainers; [ nicoo ];
-          preferLocalBuild = true;
-        } ''
-          die() {
-            echo "$@" >&2
-            exit 1
-          }
+            # can't check whether `fullScriptPath` is a directory, in pure-evaluation mode
+            (
+              with lib;
+              optionalAttrs
+                (
+                  !any (s: hasSuffix s drv.passthru.scriptName) [
+                    ".js"
+                    ".lua"
+                    ".so"
+                  ]
+                )
+                {
+                  single-main-in-script-dir =
+                    runCommand "mpvScripts.${name}.passthru.tests.single-main-in-script-dir"
+                      {
+                        meta.maintainers = with lib.maintainers; [ nicoo ];
+                        preferLocalBuild = true;
+                      }
+                      ''
+                        die() {
+                          echo "$@" >&2
+                          exit 1
+                        }
 
-          cd "${drv}/${scriptPath}"  # so the glob expands to filenames only
-          mains=( main.* )
-          if [ "''${#mains[*]}" -eq 1 ]; then
-            touch $out
-          elif [ "''${#mains[*]}" -eq 0 ]; then
-            die "'${scriptPath}' contains no 'main.*' file"
-          else
-            die "'${scriptPath}' contains multiple 'main.*' files:" "''${mains[*]}"
-          fi
-        '';
-      })
-    ]; }; });
+                        cd "${drv}/${scriptPath}"  # so the glob expands to filenames only
+                        mains=( main.* )
+                        if [ "''${#mains[*]}" -eq 1 ]; then
+                          touch $out
+                        elif [ "''${#mains[*]}" -eq 0 ]; then
+                          die "'${scriptPath}' contains no 'main.*' file"
+                        else
+                          die "'${scriptPath}' contains multiple 'main.*' files:" "''${mains[*]}"
+                        fi
+                      '';
+                }
+            )
+          ];
+        };
+      });
 
-  scope = self: let
-    inherit (self) callPackage;
-  in lib.mapAttrs addTests {
-    inherit (callPackage ./mpv.nix { })
-      acompressor autocrop autodeint autoload;
-    inherit (callPackage ./occivink.nix { })
-      blacklistExtensions seekTo;
+  scope =
+    self:
+    let
+      inherit (self) callPackage;
+    in
+    lib.mapAttrs addTests {
+      inherit (callPackage ./mpv.nix { })
+        acompressor
+        autocrop
+        autodeint
+        autoload
+        ;
+      inherit (callPackage ./occivink.nix { }) blacklistExtensions seekTo;
 
-    buildLua = callPackage ./buildLua.nix { };
-    chapterskip = callPackage ./chapterskip.nix { };
-    convert = callPackage ./convert.nix { };
-    cutter = callPackage ./cutter.nix { };
-    dynamic-crop = callPackage ./dynamic-crop.nix { };
-    inhibit-gnome = callPackage ./inhibit-gnome.nix { };
-    memo = callPackage ./memo.nix { };
-    manga-reader = callPackage ./manga-reader.nix { };
-    modernx = callPackage ./modernx.nix { };
-    modernx-zydezu = callPackage ./modernx-zydezu.nix { };
-    mpris = callPackage ./mpris.nix { };
-    mpv-cheatsheet = callPackage ./mpv-cheatsheet.nix { };
-    mpv-notify-send = callPackage ./mpv-notify-send.nix { };
-    mpv-osc-modern = callPackage ./mpv-osc-modern.nix { };
-    mpv-playlistmanager = callPackage ./mpv-playlistmanager.nix { };
-    mpv-slicing = callPackage ./mpv-slicing.nix { };
-    mpv-webm = callPackage ./mpv-webm.nix { };
-    mpvacious = callPackage ./mpvacious.nix { };
-    quack = callPackage ./quack.nix { };
-    quality-menu = callPackage ./quality-menu.nix { };
-    reload = callPackage ./reload.nix { };
-    simple-mpv-webui = callPackage ./simple-mpv-webui.nix { };
-    sponsorblock = callPackage ./sponsorblock.nix { };
-    sponsorblock-minimal = callPackage ./sponsorblock-minimal.nix { };
-    thumbfast = callPackage ./thumbfast.nix { };
-    thumbnail = callPackage ./thumbnail.nix { };
-    uosc = callPackage ./uosc.nix { };
-    videoclip = callPackage ./videoclip.nix { };
-    visualizer = callPackage ./visualizer.nix { };
-    vr-reversal = callPackage ./vr-reversal.nix { };
-    webtorrent-mpv-hook = callPackage ./webtorrent-mpv-hook.nix { };
-    youtube-upnext = callPackage ./youtube-upnext.nix { };
-  };
+      buildLua = callPackage ./buildLua.nix { };
+      autosubsync-mpv = callPackage ./autosubsync-mpv.nix { };
+      chapterskip = callPackage ./chapterskip.nix { };
+      convert = callPackage ./convert.nix { };
+      cutter = callPackage ./cutter.nix { };
+      dynamic-crop = callPackage ./dynamic-crop.nix { };
+      evafast = callPackage ./evafast.nix { };
+      inhibit-gnome = callPackage ./inhibit-gnome.nix { };
+      memo = callPackage ./memo.nix { };
+      manga-reader = callPackage ./manga-reader.nix { };
+      modernx = callPackage ./modernx.nix { };
+      modernx-zydezu = callPackage ./modernx-zydezu.nix { };
+      mpris = callPackage ./mpris.nix { };
+      mpv-cheatsheet = callPackage ./mpv-cheatsheet.nix { };
+      mpv-notify-send = callPackage ./mpv-notify-send.nix { };
+      mpv-osc-modern = callPackage ./mpv-osc-modern.nix { };
+      mpv-playlistmanager = callPackage ./mpv-playlistmanager.nix { };
+      mpv-slicing = callPackage ./mpv-slicing.nix { };
+      mpv-webm = callPackage ./mpv-webm.nix { };
+      mpvacious = callPackage ./mpvacious.nix { };
+      quack = callPackage ./quack.nix { };
+      quality-menu = callPackage ./quality-menu.nix { };
+      reload = callPackage ./reload.nix { };
+      simple-mpv-webui = callPackage ./simple-mpv-webui.nix { };
+      sponsorblock = callPackage ./sponsorblock.nix { };
+      sponsorblock-minimal = callPackage ./sponsorblock-minimal.nix { };
+      thumbfast = callPackage ./thumbfast.nix { };
+      thumbnail = callPackage ./thumbnail.nix { };
+      uosc = callPackage ./uosc.nix { };
+      videoclip = callPackage ./videoclip.nix { };
+      visualizer = callPackage ./visualizer.nix { };
+      vr-reversal = callPackage ./vr-reversal.nix { };
+      webtorrent-mpv-hook = callPackage ./webtorrent-mpv-hook.nix { };
+      youtube-upnext = callPackage ./youtube-upnext.nix { };
+    };
 
   aliases = {
     youtube-quality = throw "'youtube-quality' is no longer maintained, use 'quality-menu' instead"; # added 2023-07-14
   };
 in
 
-with lib; pipe scope [
+with lib;
+pipe scope [
   (makeScope newScope)
-  (self:
-    assert builtins.intersectAttrs self aliases == {};
-    self // optionalAttrs config.allowAliases aliases)
+  (
+    self:
+    assert builtins.intersectAttrs self aliases == { };
+    self // optionalAttrs config.allowAliases aliases
+  )
   recurseIntoAttrs
 ]
diff --git a/pkgs/applications/video/mpv/scripts/dynamic-crop.nix b/pkgs/applications/video/mpv/scripts/dynamic-crop.nix
index f2cd7dc070166..541c83d5258ff 100644
--- a/pkgs/applications/video/mpv/scripts/dynamic-crop.nix
+++ b/pkgs/applications/video/mpv/scripts/dynamic-crop.nix
@@ -1,17 +1,18 @@
-{ lib
-, fetchFromGitHub
-, unstableGitUpdater
-, buildLua
+{
+  lib,
+  fetchFromGitHub,
+  unstableGitUpdater,
+  buildLua,
 }:
 buildLua {
   pname = "dynamic-crop";
 
-  version = "0-unstable-2023-12-22";
+  version = "0-unstable-2024-06-22";
   src = fetchFromGitHub {
     owner = "Ashyni";
     repo = "mpv-scripts";
-    rev = "c79a46ba03631eb2a9b4f598aab0b723f03fc531";
-    hash = "sha256-W4Dj2tyJHeHLqAndrzllKs4iwMe3Tu8rfzEGBHuke6s=";
+    rev = "1fadd5ea3e31818db33c9372c40161db6fc1bdd3";
+    hash = "sha256-nC0Iw+9PSGxc3OdYhEmFVa49Sw+rIbuFhgZvAphP4cM=";
   };
   passthru.scriptName = "dynamic-crop.lua";
 
diff --git a/pkgs/applications/video/mpv/scripts/evafast.nix b/pkgs/applications/video/mpv/scripts/evafast.nix
new file mode 100644
index 0000000000000..5260adb1a8efd
--- /dev/null
+++ b/pkgs/applications/video/mpv/scripts/evafast.nix
@@ -0,0 +1,28 @@
+{
+  fetchFromGitHub,
+  buildLua,
+  lib,
+  unstableGitUpdater,
+}:
+
+buildLua {
+  pname = "evafast";
+  version = "0-unstable-2024-02-09";
+
+  src = fetchFromGitHub {
+    owner = "po5";
+    repo = "evafast";
+    rev = "92af3e2e1c756ce83f9d0129c780caeef1131a0b";
+    hash = "sha256-BGWD2XwVu8zOSiDJ+9oWi8aPN2Wkw0Y0gF58X4f+tdI=";
+  };
+
+  # Drop the `branch` parameter once upstream merges `rewrite` back into `master`
+  passthru.updateScript = unstableGitUpdater { branch = "rewrite"; };
+
+  meta = with lib; {
+    description = "Seeking and hybrid fastforwarding like VHS";
+    homepage = "https://github.com/po5/evafast";
+    license = licenses.unfree; # no license; see https://github.com/po5/evafast/issues/15
+    maintainers = with lib.maintainers; [ purrpurrn ];
+  };
+}
diff --git a/pkgs/applications/video/mpv/scripts/inhibit-gnome.nix b/pkgs/applications/video/mpv/scripts/inhibit-gnome.nix
index 618c74adea930..02a54a2cf4751 100644
--- a/pkgs/applications/video/mpv/scripts/inhibit-gnome.nix
+++ b/pkgs/applications/video/mpv/scripts/inhibit-gnome.nix
@@ -1,4 +1,12 @@
-{ lib, stdenv, fetchFromGitHub, gitUpdater, pkg-config, dbus, mpv-unwrapped }:
+{
+  lib,
+  stdenv,
+  fetchFromGitHub,
+  gitUpdater,
+  pkg-config,
+  dbus,
+  mpv-unwrapped,
+}:
 
 stdenv.mkDerivation rec {
   pname = "mpv-inhibit-gnome";
@@ -10,13 +18,14 @@ stdenv.mkDerivation rec {
     rev = "v${version}";
     hash = "sha256-LSGg5gAQE2JpepBqhz6D6d3NlqYaU4bjvYf1F+oLphQ=";
   };
-  passthru.updateScript = gitUpdater {
-    rev-prefix = "v";
-  };
+  passthru.updateScript = gitUpdater { rev-prefix = "v"; };
 
   nativeBuildInputs = [ pkg-config ];
 
-  buildInputs = [ dbus mpv-unwrapped ];
+  buildInputs = [
+    dbus
+    mpv-unwrapped
+  ];
 
   passthru.scriptName = "mpv_inhibit_gnome.so";
 
diff --git a/pkgs/applications/video/mpv/scripts/manga-reader.nix b/pkgs/applications/video/mpv/scripts/manga-reader.nix
index 9a9621cb34d0e..4d8007d98d8d7 100644
--- a/pkgs/applications/video/mpv/scripts/manga-reader.nix
+++ b/pkgs/applications/video/mpv/scripts/manga-reader.nix
@@ -22,7 +22,7 @@ buildLua rec {
     longDescription = ''
       mpv-manga-reader is a script aimed at making mpv a usable manga reader.
     '';
-    homepage = "https://github.com//mpv-manga-reader";
+    homepage = "https://github.com/Dudemanguy/mpv-manga-reader";
     license = lib.licenses.gpl3;
     maintainers = with lib.maintainers; [ idlip ];
   };
diff --git a/pkgs/applications/video/mpv/scripts/memo.nix b/pkgs/applications/video/mpv/scripts/memo.nix
index 5361b796268e1..5d9e2b50fae27 100644
--- a/pkgs/applications/video/mpv/scripts/memo.nix
+++ b/pkgs/applications/video/mpv/scripts/memo.nix
@@ -1,7 +1,8 @@
-{ fetchFromGitHub
-, buildLua
-, lib
-, unstableGitUpdater
+{
+  fetchFromGitHub,
+  buildLua,
+  lib,
+  unstableGitUpdater,
 }:
 
 buildLua {
@@ -15,10 +16,10 @@ buildLua {
     hash = "sha256-m8ikXuw7PM4Btg8w7ufLneKA4fnYjMyfVJYueZILMw8=";
   };
 
-  passthru.updateScript = unstableGitUpdater {};
+  passthru.updateScript = unstableGitUpdater { };
 
   meta = with lib; {
-    description = "A recent files menu for mpv";
+    description = "Recent files menu for mpv";
     homepage = "https://github.com/po5/memo";
     license = licenses.gpl3Only;
     maintainers = with lib.maintainers; [ purrpurrn ];
diff --git a/pkgs/applications/video/mpv/scripts/modernx-zydezu.nix b/pkgs/applications/video/mpv/scripts/modernx-zydezu.nix
index 36b20fe11205c..3ef673ab518f3 100644
--- a/pkgs/applications/video/mpv/scripts/modernx-zydezu.nix
+++ b/pkgs/applications/video/mpv/scripts/modernx-zydezu.nix
@@ -1,19 +1,20 @@
-{ lib
-, buildLua
-, fetchFromGitHub
-, makeFontsConf
-, nix-update-script
+{
+  lib,
+  buildLua,
+  fetchFromGitHub,
+  makeFontsConf,
+  nix-update-script,
 }:
 buildLua (finalAttrs: {
   pname = "modernx-zydezu";
-  version = "0.2.9";
+  version = "0.3.5.5";
 
   scriptPath = "modernx.lua";
   src = fetchFromGitHub {
     owner = "zydezu";
     repo = "ModernX";
     rev = finalAttrs.version;
-    hash = "sha256-Tq/v8EbojvOSSwbu8kdbLVxZWZNi1UH6zAPTcsUcgog";
+    hash = "sha256-sPpVwI8w5JsP/jML0viOSqhyYBVKfxWuKbxHkX3GVug=";
   };
 
   postInstall = ''
@@ -31,9 +32,12 @@ buildLua (finalAttrs: {
   passthru.updateScript = nix-update-script { };
 
   meta = with lib; {
-    description = "A modern OSC UI replacement for MPV that retains the functionality of the default OSC";
+    description = "Modern OSC UI replacement for MPV that retains the functionality of the default OSC";
     homepage = "https://github.com/zydezu/ModernX";
     license = licenses.lgpl21Plus;
-    maintainers = with maintainers; [ Guanran928 ];
+    maintainers = with maintainers; [
+      luftmensch-luftmensch
+      Guanran928
+    ];
   };
 })
diff --git a/pkgs/applications/video/mpv/scripts/modernx.nix b/pkgs/applications/video/mpv/scripts/modernx.nix
index 340b169a0c03d..28a50e15d5d83 100644
--- a/pkgs/applications/video/mpv/scripts/modernx.nix
+++ b/pkgs/applications/video/mpv/scripts/modernx.nix
@@ -1,8 +1,9 @@
-{ lib
-, buildLua
-, fetchFromGitHub
-, makeFontsConf
-, nix-update-script
+{
+  lib,
+  buildLua,
+  fetchFromGitHub,
+  makeFontsConf,
+  nix-update-script,
 }:
 buildLua (finalAttrs: {
   pname = "modernx";
@@ -31,7 +32,7 @@ buildLua (finalAttrs: {
   passthru.updateScript = nix-update-script { };
 
   meta = with lib; {
-    description = "A modern OSC UI replacement for MPV that retains the functionality of the default OSC";
+    description = "Modern OSC UI replacement for MPV that retains the functionality of the default OSC";
     homepage = "https://github.com/cyl0/ModernX";
     license = licenses.lgpl21Plus;
     maintainers = with maintainers; [ Guanran928 ];
diff --git a/pkgs/applications/video/mpv/scripts/mpris.nix b/pkgs/applications/video/mpv/scripts/mpris.nix
index 338f0a8dd482f..fbb1a8f685838 100644
--- a/pkgs/applications/video/mpv/scripts/mpris.nix
+++ b/pkgs/applications/video/mpv/scripts/mpris.nix
@@ -1,4 +1,13 @@
-{ lib, stdenv, fetchFromGitHub, gitUpdater, pkg-config, glib, mpv-unwrapped, ffmpeg }:
+{
+  lib,
+  stdenv,
+  fetchFromGitHub,
+  gitUpdater,
+  pkg-config,
+  glib,
+  mpv-unwrapped,
+  ffmpeg,
+}:
 
 stdenv.mkDerivation rec {
   pname = "mpv-mpris";
@@ -10,14 +19,18 @@ stdenv.mkDerivation rec {
     rev = version;
     hash = "sha256-vZIO6ILatIWa9nJYOp4AMKwvaZLahqYWRLMDOizyBI0=";
   };
-  passthru.updateScript = gitUpdater {};
+  passthru.updateScript = gitUpdater { };
 
   nativeBuildInputs = [ pkg-config ];
 
-  buildInputs = [ glib mpv-unwrapped ffmpeg ];
+  buildInputs = [
+    glib
+    mpv-unwrapped
+    ffmpeg
+  ];
 
   postPatch = ''
-    substituteInPlace Makefile --replace 'PKG_CONFIG =' 'PKG_CONFIG ?='
+    substituteInPlace Makefile --replace-fail 'PKG_CONFIG =' 'PKG_CONFIG ?='
   '';
 
   installFlags = [ "SCRIPTS_DIR=${placeholder "out"}/share/mpv/scripts" ];
diff --git a/pkgs/applications/video/mpv/scripts/mpv-cheatsheet.nix b/pkgs/applications/video/mpv/scripts/mpv-cheatsheet.nix
index a15f54d01ef22..c0c62867c1ee2 100644
--- a/pkgs/applications/video/mpv/scripts/mpv-cheatsheet.nix
+++ b/pkgs/applications/video/mpv/scripts/mpv-cheatsheet.nix
@@ -1,8 +1,9 @@
-{ lib
-, fetchFromGitHub
-, gitUpdater
-, nodePackages
-, stdenvNoCC
+{
+  lib,
+  fetchFromGitHub,
+  gitUpdater,
+  nodePackages,
+  stdenvNoCC,
 }:
 stdenvNoCC.mkDerivation (finalAttrs: {
   pname = "mpv-cheatsheet";
@@ -16,9 +17,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
   };
   passthru.updateScript = gitUpdater { rev-prefix = "v"; };
 
-  nativeBuildInputs = [
-    nodePackages.browserify
-  ];
+  nativeBuildInputs = [ nodePackages.browserify ];
 
   buildPhase = ''
     runHook preBuild
@@ -36,7 +35,6 @@ stdenvNoCC.mkDerivation (finalAttrs: {
     runHook postInstall
   '';
 
-
   passthru.scriptName = "cheatsheet.js";
 
   meta = with lib; {
diff --git a/pkgs/applications/video/mpv/scripts/mpv-notify-send.nix b/pkgs/applications/video/mpv/scripts/mpv-notify-send.nix
index 04b03670b79f2..b103a45d275bf 100644
--- a/pkgs/applications/video/mpv/scripts/mpv-notify-send.nix
+++ b/pkgs/applications/video/mpv/scripts/mpv-notify-send.nix
@@ -1,9 +1,11 @@
-{ lib
-, buildLua
-, fetchFromGitHub
-, fetchpatch
-, unstableGitUpdater
-, libnotify }:
+{
+  lib,
+  buildLua,
+  fetchFromGitHub,
+  fetchpatch,
+  unstableGitUpdater,
+  libnotify,
+}:
 
 buildLua rec {
   pname = "mpv-notify-send";
@@ -19,19 +21,23 @@ buildLua rec {
   patches = [
     # show title of online videos instead of url
     (fetchpatch {
-      url = "https://github.com/emilazy/mpv-notify-send/pull/6.patch";
+      name = "6.patch"; # https://github.com/emilazy/mpv-notify-send/pull/6
+      url = "https://github.com/emilazy/mpv-notify-send/commit/948347e14890e15e89cd1e069beb1140e2d01dce.patch";
       hash = "sha256-7aXQ8qeqG4yX0Uyn09xCIESnwPZsb6Frd7C49XgbpFw=";
     })
   ];
 
   passthru.extraWrapperArgs = [
-    "--prefix" "PATH" ":" (lib.makeBinPath libnotify)
+    "--prefix"
+    "PATH"
+    ":"
+    (lib.makeBinPath libnotify)
   ];
 
   passthru.updateScript = unstableGitUpdater { };
 
   meta = with lib; {
-    description = "A Lua script for mpv to send notifications with notify-send";
+    description = "Lua script for mpv to send notifications with notify-send";
     homepage = "https://github.com/emilazy/mpv-notify-send";
     license = licenses.wtfpl;
     maintainers = with maintainers; [ r3n3gad3p3arl ];
diff --git a/pkgs/applications/video/mpv/scripts/mpv-osc-modern.nix b/pkgs/applications/video/mpv/scripts/mpv-osc-modern.nix
index ce32622d64d8f..0d2c292d702a0 100644
--- a/pkgs/applications/video/mpv/scripts/mpv-osc-modern.nix
+++ b/pkgs/applications/video/mpv/scripts/mpv-osc-modern.nix
@@ -1,8 +1,9 @@
-{ lib
-, buildLua
-, fetchFromGitHub
-, makeFontsConf
-, nix-update-script
+{
+  lib,
+  buildLua,
+  fetchFromGitHub,
+  makeFontsConf,
+  nix-update-script,
 }:
 buildLua (finalAttrs: {
   pname = "mpv-osc-modern";
diff --git a/pkgs/applications/video/mpv/scripts/mpv-playlistmanager.nix b/pkgs/applications/video/mpv/scripts/mpv-playlistmanager.nix
index 44f09b8f21fe8..00e44d1f94474 100644
--- a/pkgs/applications/video/mpv/scripts/mpv-playlistmanager.nix
+++ b/pkgs/applications/video/mpv/scripts/mpv-playlistmanager.nix
@@ -1,4 +1,10 @@
-{ lib, buildLua, fetchFromGitHub, unstableGitUpdater, yt-dlp }:
+{
+  lib,
+  buildLua,
+  fetchFromGitHub,
+  unstableGitUpdater,
+  yt-dlp,
+}:
 
 buildLua rec {
   pname = "mpv-playlistmanager";
@@ -10,12 +16,12 @@ buildLua rec {
     rev = "1911dc053951169c98cfcfd9f44ef87d9122ca80";
     hash = "sha256-pcdOMhkivLF5B86aNuHrqj77DuYLAFGlwFwY7jxkDkE=";
   };
-  passthru.updateScript = unstableGitUpdater {};
+  passthru.updateScript = unstableGitUpdater { };
 
   postPatch = ''
     substituteInPlace playlistmanager.lua \
-      --replace 'youtube_dl_executable = "youtube-dl",' \
-      'youtube_dl_executable = "${lib.getBin yt-dlp}/bin/yt-dlp"',
+      --replace-fail 'youtube_dl_executable = "yt-dlp",' \
+      'youtube_dl_executable = "${lib.getExe yt-dlp}"',
   '';
 
   meta = with lib; {
diff --git a/pkgs/applications/video/mpv/scripts/mpv-slicing.nix b/pkgs/applications/video/mpv/scripts/mpv-slicing.nix
index cf66a6c78a297..c46388f7ebea4 100644
--- a/pkgs/applications/video/mpv/scripts/mpv-slicing.nix
+++ b/pkgs/applications/video/mpv/scripts/mpv-slicing.nix
@@ -26,7 +26,7 @@ buildLua {
   passthru.scriptName = "slicing.lua";
 
   meta = {
-    description = "A lua script to cut fragments of the video in uncompressed RGB format";
+    description = "Lua script to cut fragments of the video in uncompressed RGB format";
     homepage = "https://github.com/Kagami/mpv_slicing";
     license = lib.licenses.cc0;
     maintainers = with lib.maintainers; [ tomasajt ];
diff --git a/pkgs/applications/video/mpv/scripts/mpv-webm.nix b/pkgs/applications/video/mpv/scripts/mpv-webm.nix
index efff9fa8ee169..409d86c193f42 100644
--- a/pkgs/applications/video/mpv/scripts/mpv-webm.nix
+++ b/pkgs/applications/video/mpv/scripts/mpv-webm.nix
@@ -1,19 +1,20 @@
-{ lib
-, buildLua
-, fetchFromGitHub
-, luaPackages
-, unstableGitUpdater
+{
+  lib,
+  buildLua,
+  fetchFromGitHub,
+  luaPackages,
+  unstableGitUpdater,
 }:
 
 buildLua {
   pname = "mpv-webm";
-  version = "0-unstable-2024-04-22";
+  version = "0-unstable-2024-05-13";
 
   src = fetchFromGitHub {
     owner = "ekisu";
     repo = "mpv-webm";
-    rev = "225e8e53842f7da6f77034309c1e54293dc629a4";
-    hash = "sha256-82xWiuOChxfzX6e0+cGFxTqyuiPefyVwpvLM5ka7nPk=";
+    rev = "8d4902b2aec92f40e4595ec9a411ab90488dcf4e";
+    hash = "sha256-aPPVAZu9reDdyovSpDklYZYLaapKBclAx3lCYUMJt+w=";
   };
   passthru.updateScript = unstableGitUpdater {
     # only "latest" tag pointing at HEAD
diff --git a/pkgs/applications/video/mpv/scripts/mpv.nix b/pkgs/applications/video/mpv/scripts/mpv.nix
index 06e9ccb4d74a8..ddf22e5dd03cf 100644
--- a/pkgs/applications/video/mpv/scripts/mpv.nix
+++ b/pkgs/applications/video/mpv/scripts/mpv.nix
@@ -1,24 +1,31 @@
-{ lib
-, buildLua
-, mpv-unwrapped
+{
+  lib,
+  buildLua,
+  mpv-unwrapped,
 }:
 
-let mkBuiltin = name: args:
-  let srcPath = "TOOLS/lua/${name}.lua";
-  in buildLua (lib.attrsets.recursiveUpdate rec {
-    inherit (mpv-unwrapped) src version;
-    pname = "mpv-${name}";
+let
+  mkBuiltin =
+    name: args:
+    let
+      srcPath = "TOOLS/lua/${name}.lua";
+    in
+    buildLua (
+      lib.attrsets.recursiveUpdate rec {
+        inherit (mpv-unwrapped) src version;
+        pname = "mpv-${name}";
 
-    dontUnpack = true;
-    scriptPath = "${src}/${srcPath}";
+        dontUnpack = true;
+        scriptPath = "${src}/${srcPath}";
 
-    meta = with lib; {
-      inherit (mpv-unwrapped.meta) license;
-      homepage = "https://github.com/mpv-player/mpv/blob/v${version}/${srcPath}";
-    };
-  } args);
-
-in lib.mapAttrs (name: lib.makeOverridable (mkBuiltin name)) {
+        meta = with lib; {
+          inherit (mpv-unwrapped.meta) license;
+          homepage = "https://github.com/mpv-player/mpv/blob/v${version}/${srcPath}";
+        };
+      } args
+    );
+in
+lib.mapAttrs (name: lib.makeOverridable (mkBuiltin name)) {
   acompressor.meta = {
     description = "Script to toggle and control ffmpeg's dynamic range compression filter.";
     maintainers = with lib.maintainers; [ nicoo ];
diff --git a/pkgs/applications/video/mpv/scripts/mpvacious.nix b/pkgs/applications/video/mpv/scripts/mpvacious.nix
index adac4d1d60692..34776679aa257 100644
--- a/pkgs/applications/video/mpv/scripts/mpvacious.nix
+++ b/pkgs/applications/video/mpv/scripts/mpvacious.nix
@@ -1,33 +1,32 @@
-{ lib
-, buildLua
-, fetchFromGitHub
-, gitUpdater
-, curl
-, wl-clipboard
-, xclip
+{
+  lib,
+  buildLua,
+  fetchFromGitHub,
+  gitUpdater,
+  curl,
+  wl-clipboard,
+  xclip,
 }:
 
 buildLua rec {
   pname = "mpvacious";
-  version = "0.33";
+  version = "0.35";
 
   src = fetchFromGitHub {
     owner = "Ajatt-Tools";
     repo = "mpvacious";
     rev = "v${version}";
-    sha256 = "sha256-VHMXW2AzgX88EDnNshxo9Gh8mpXzRoTAq+58HKasUdo=";
-  };
-  passthru.updateScript = gitUpdater {
-    rev-prefix = "v";
+    sha256 = "sha256-LcO17zkGkXWqSjWPTA3cVwRnmSrhTlS3W4RhhYaKgY4=";
   };
+  passthru.updateScript = gitUpdater { rev-prefix = "v"; };
 
   postPatch = ''
     substituteInPlace utils/forvo.lua \
-      --replace "'curl" "'${curl}/bin/curl"
+      --replace-fail "'curl" "'${lib.getExe curl}"
     substituteInPlace platform/nix.lua \
-      --replace "'curl" "'${curl}/bin/curl" \
-      --replace "'wl-copy" "'${wl-clipboard}/bin/wl-copy" \
-      --replace "'xclip" "'${xclip}/bin/xclip"
+      --replace-fail "'curl" "'${lib.getExe curl}" \
+      --replace-fail "'wl-copy" "'${lib.getExe' wl-clipboard "wl-copy"}" \
+      --replace-fail "'xclip" "'${lib.getExe xclip}"
   '';
 
   installPhase = ''
diff --git a/pkgs/applications/video/mpv/scripts/occivink.nix b/pkgs/applications/video/mpv/scripts/occivink.nix
index be3bdb07db8da..948a90c0d89b3 100644
--- a/pkgs/applications/video/mpv/scripts/occivink.nix
+++ b/pkgs/applications/video/mpv/scripts/occivink.nix
@@ -1,45 +1,49 @@
-{ lib
-, fetchFromGitHub
-, unstableGitUpdater
-, buildLua
+{
+  lib,
+  fetchFromGitHub,
+  unstableGitUpdater,
+  buildLua,
 }:
 
 let
-  camelToKebab = let
-    inherit (lib.strings) match stringAsChars toLower;
-    isUpper = match "[A-Z]";
-  in stringAsChars (c: if isUpper c != null then "-${toLower c}" else c);
+  camelToKebab =
+    let
+      inherit (lib.strings) match stringAsChars toLower;
+      isUpper = match "[A-Z]";
+    in
+    stringAsChars (c: if isUpper c != null then "-${toLower c}" else c);
 
-  mkScript = name: args:
-    let self = rec {
-      pname = camelToKebab name;
-      version = "0-unstable-2024-01-11";
-      src = fetchFromGitHub {
-        owner = "occivink";
-        repo = "mpv-scripts";
-        rev = "d0390c8e802c2e888ff4a2e1d5e4fb040f855b89";
-        hash = "sha256-pc2aaO7lZaoYMEXv5M0WI7PtmqgkNbdtNiLZZwVzppM=";
-      };
-      passthru.updateScript = unstableGitUpdater {};
-
-      scriptPath = "scripts/${pname}.lua";
+  mkScript =
+    name: args:
+    let
+      self = rec {
+        pname = camelToKebab name;
+        version = "0-unstable-2024-01-11";
+        src = fetchFromGitHub {
+          owner = "occivink";
+          repo = "mpv-scripts";
+          rev = "d0390c8e802c2e888ff4a2e1d5e4fb040f855b89";
+          hash = "sha256-pc2aaO7lZaoYMEXv5M0WI7PtmqgkNbdtNiLZZwVzppM=";
+        };
+        passthru.updateScript = unstableGitUpdater { };
 
-      meta = with lib; {
-        homepage = "https://github.com/occivink/mpv-scripts";
-        license = licenses.unlicense;
-        maintainers = with maintainers; [ nicoo ];
-      };
+        scriptPath = "scripts/${pname}.lua";
 
-      # Sadly needed to make `common-updaters` work here
-      pos = builtins.unsafeGetAttrPos "version" self;
-    };
-    in buildLua (lib.attrsets.recursiveUpdate self args);
+        meta = with lib; {
+          homepage = "https://github.com/occivink/mpv-scripts";
+          license = licenses.unlicense;
+          maintainers = with maintainers; [ nicoo ];
+        };
 
+        # Sadly needed to make `common-updaters` work here
+        pos = builtins.unsafeGetAttrPos "version" self;
+      };
+    in
+    buildLua (lib.attrsets.recursiveUpdate self args);
 in
 lib.mapAttrs (name: lib.makeOverridable (mkScript name)) {
 
   # Usage: `pkgs.mpv.override { scripts = [ pkgs.mpvScripts.seekTo ]; }`
   seekTo.meta.description = "Mpv script for seeking to a specific position";
-  blacklistExtensions.meta.description =
-    "Automatically remove playlist entries based on their extension.";
+  blacklistExtensions.meta.description = "Automatically remove playlist entries based on their extension.";
 }
diff --git a/pkgs/applications/video/mpv/scripts/quack.nix b/pkgs/applications/video/mpv/scripts/quack.nix
index 646a7a524d18f..a1b32f2911811 100644
--- a/pkgs/applications/video/mpv/scripts/quack.nix
+++ b/pkgs/applications/video/mpv/scripts/quack.nix
@@ -1,7 +1,9 @@
-{ lib
-, fetchFromGitHub
-, unstableGitUpdater
-, buildLua }:
+{
+  lib,
+  fetchFromGitHub,
+  unstableGitUpdater,
+  buildLua,
+}:
 
 buildLua rec {
   pname = "mpv-quack";
@@ -9,11 +11,11 @@ buildLua rec {
   version = "0-unstable-2020-05-27";
   src = fetchFromGitHub {
     owner = "CounterPillow";
-    repo  = "mpv-quack";
-    rev   = "1c87f36f9726d462dd112188c04be54d85692cf3";
-    hash  = "sha256-dEnJbS8RJoAxpKINdoMHN4l7vpEdf7+C5JVWpK0VXMw=";
+    repo = "mpv-quack";
+    rev = "1c87f36f9726d462dd112188c04be54d85692cf3";
+    hash = "sha256-dEnJbS8RJoAxpKINdoMHN4l7vpEdf7+C5JVWpK0VXMw=";
   };
-  passthru.updateScript = unstableGitUpdater {};
+  passthru.updateScript = unstableGitUpdater { };
 
   meta = {
     description = "Reduce audio volume after seeking";
diff --git a/pkgs/applications/video/mpv/scripts/quality-menu.nix b/pkgs/applications/video/mpv/scripts/quality-menu.nix
index c75e810687132..36e5024b6aa8e 100644
--- a/pkgs/applications/video/mpv/scripts/quality-menu.nix
+++ b/pkgs/applications/video/mpv/scripts/quality-menu.nix
@@ -1,8 +1,9 @@
-{ lib
-, buildLua
-, fetchFromGitHub
-, gitUpdater
-, oscSupport ? false
+{
+  lib,
+  buildLua,
+  fetchFromGitHub,
+  gitUpdater,
+  oscSupport ? false,
 }:
 
 buildLua rec {
@@ -15,14 +16,12 @@ buildLua rec {
     rev = "v${version}";
     hash = "sha256-yrcTxqpLnOI1Tq3khhflO3wzhyeTPuvKifyH5/P57Ns=";
   };
-  passthru.updateScript = gitUpdater {
-    rev-prefix = "v";
-  };
+  passthru.updateScript = gitUpdater { rev-prefix = "v"; };
 
   extraScripts = lib.optional oscSupport "quality-menu-osc.lua";
 
   meta = with lib; {
-    description = "A userscript for MPV that allows you to change youtube video quality (ytdl-format) on the fly";
+    description = "Userscript for MPV that allows you to change youtube video quality (ytdl-format) on the fly";
     homepage = "https://github.com/christoph-heinrich/mpv-quality-menu";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ lunik1 ];
diff --git a/pkgs/applications/video/mpv/scripts/reload.nix b/pkgs/applications/video/mpv/scripts/reload.nix
index 426aabd7fe495..b9d9b4c43b05d 100644
--- a/pkgs/applications/video/mpv/scripts/reload.nix
+++ b/pkgs/applications/video/mpv/scripts/reload.nix
@@ -1,7 +1,9 @@
-{ lib
-, fetchFromGitHub
-, unstableGitUpdater
-, buildLua }:
+{
+  lib,
+  fetchFromGitHub,
+  unstableGitUpdater,
+  buildLua,
+}:
 
 buildLua rec {
   pname = "mpv-reload";
@@ -9,11 +11,11 @@ buildLua rec {
   version = "0-unstable-2024-03-22";
   src = fetchFromGitHub {
     owner = "4e6";
-    repo  = pname;
-    rev   = "1a6a9383ba1774708fddbd976e7a9b72c3eec938";
-    hash  = "sha256-BshxCjec/UNGyiC0/g1Rai2NvG2qOIHXDDEUYwwdij0=";
+    repo = pname;
+    rev = "1a6a9383ba1774708fddbd976e7a9b72c3eec938";
+    hash = "sha256-BshxCjec/UNGyiC0/g1Rai2NvG2qOIHXDDEUYwwdij0=";
   };
-  passthru.updateScript = unstableGitUpdater {};
+  passthru.updateScript = unstableGitUpdater { };
 
   meta = {
     description = "Manual & automatic reloading of videos";
diff --git a/pkgs/applications/video/mpv/scripts/simple-mpv-webui.nix b/pkgs/applications/video/mpv/scripts/simple-mpv-webui.nix
index bf973c9206c71..55d55fdf59f83 100644
--- a/pkgs/applications/video/mpv/scripts/simple-mpv-webui.nix
+++ b/pkgs/applications/video/mpv/scripts/simple-mpv-webui.nix
@@ -1,6 +1,8 @@
-{ lib, buildLua
-, fetchFromGitHub
-, gitUpdater
+{
+  lib,
+  buildLua,
+  fetchFromGitHub,
+  gitUpdater,
 }:
 buildLua rec {
   pname = "simple-mpv-ui";
@@ -11,19 +13,23 @@ buildLua rec {
     repo = "simple-mpv-webui";
     rev = "v${version}";
     hash = "sha256-I8lwpo3Hfpy3UnPMmHEJCdArVQnNL245NkxsYVmnMF0=";
-    sparseCheckout = [ "main.lua" "webui-page" ];
-  };
-  passthru.updateScript = gitUpdater {
-    rev-prefix = "v";
+    sparseCheckout = [
+      "main.lua"
+      "webui-page"
+    ];
   };
+  passthru.updateScript = gitUpdater { rev-prefix = "v"; };
 
   scriptPath = ".";
   passthru.scriptName = "webui";
 
   meta = with lib; {
-    description = "A web based user interface with controls for the mpv mediaplayer";
+    description = "Web based user interface with controls for the mpv mediaplayer";
     homepage = "https://github.com/open-dynaMIX/simple-mpv-webui";
-    maintainers = with maintainers; [ cript0nauta zopieux ];
+    maintainers = with maintainers; [
+      cript0nauta
+      zopieux
+    ];
     longDescription = ''
       You can access the webui when accessing http://127.0.0.1:8080 or
       http://[::1]:8080 in your webbrowser. By default it listens on
diff --git a/pkgs/applications/video/mpv/scripts/sponsorblock-minimal.nix b/pkgs/applications/video/mpv/scripts/sponsorblock-minimal.nix
index 2557db8313d6d..6818154590917 100644
--- a/pkgs/applications/video/mpv/scripts/sponsorblock-minimal.nix
+++ b/pkgs/applications/video/mpv/scripts/sponsorblock-minimal.nix
@@ -1,4 +1,11 @@
-{ lib, buildLua, fetchFromGitea, unstableGitUpdater, curl, coreutils }:
+{
+  lib,
+  buildLua,
+  fetchFromGitea,
+  unstableGitUpdater,
+  curl,
+  coreutils,
+}:
 
 buildLua {
   pname = "mpv_sponsorblock_minimal";
@@ -21,8 +28,7 @@ buildLua {
   '';
 
   meta = with lib; {
-    description =
-      "A minimal script to skip sponsored segments of YouTube videos";
+    description = "Minimal script to skip sponsored segments of YouTube videos";
     homepage = "https://codeberg.org/jouni/mpv_sponsorblock_minimal";
     license = licenses.gpl3Only;
     platforms = platforms.all;
diff --git a/pkgs/applications/video/mpv/scripts/sponsorblock.nix b/pkgs/applications/video/mpv/scripts/sponsorblock.nix
index 56ac2575ecdea..16e8841abf5b6 100644
--- a/pkgs/applications/video/mpv/scripts/sponsorblock.nix
+++ b/pkgs/applications/video/mpv/scripts/sponsorblock.nix
@@ -1,4 +1,11 @@
-{ lib, buildLua, fetchFromGitHub, fetchpatch, python3, nix-update-script }:
+{
+  lib,
+  buildLua,
+  fetchFromGitHub,
+  fetchpatch,
+  python3,
+  nix-update-script,
+}:
 
 # Usage: `pkgs.mpv.override { scripts = [ pkgs.mpvScripts.sponsorblock ]; }`
 buildLua {
@@ -28,15 +35,13 @@ buildLua {
 
   postPatch = ''
     substituteInPlace sponsorblock.lua \
-      --replace "python3" "${python3}/bin/python3" \
-      --replace 'mp.find_config_file("scripts")' "\"$out/share/mpv/scripts\""
+      --replace-fail "python3" "${lib.getExe python3}" \
+      --replace-fail 'mp.find_config_file("scripts")' "\"$out/share/mpv/scripts\""
   '';
 
   extraScripts = [ "sponsorblock_shared" ];
 
-  passthru.updateScript = nix-update-script {
-    extraArgs = [ "--version=branch" ];
-  };
+  passthru.updateScript = nix-update-script { extraArgs = [ "--version=branch" ]; };
 
   meta = with lib; {
     description = "Script for mpv to skip sponsored segments of YouTube videos";
diff --git a/pkgs/applications/video/mpv/scripts/thumbfast.nix b/pkgs/applications/video/mpv/scripts/thumbfast.nix
index e30c62774b759..158e1f38b32b3 100644
--- a/pkgs/applications/video/mpv/scripts/thumbfast.nix
+++ b/pkgs/applications/video/mpv/scripts/thumbfast.nix
@@ -1,4 +1,10 @@
-{ lib, fetchFromGitHub, unstableGitUpdater, buildLua, mpv-unwrapped }:
+{
+  lib,
+  fetchFromGitHub,
+  unstableGitUpdater,
+  buildLua,
+  mpv-unwrapped,
+}:
 
 buildLua {
   pname = "mpv-thumbfast";
@@ -10,10 +16,13 @@ buildLua {
     rev = "03e93feee5a85bf7c65db953ada41b4826e9f905";
     hash = "sha256-5u5WBvWOEydJrnr/vilEgW4+fxkxM6wNjb9Fyyxx/1c=";
   };
-  passthru.updateScript = unstableGitUpdater {};
+  passthru.updateScript = unstableGitUpdater { };
 
   passthru.extraWrapperArgs = [
-    "--prefix" "PATH" ":" "${lib.getBin mpv-unwrapped}/bin"
+    "--prefix"
+    "PATH"
+    ":"
+    (lib.makeBinPath [ mpv-unwrapped ])
   ];
 
   meta = {
diff --git a/pkgs/applications/video/mpv/scripts/thumbnail.nix b/pkgs/applications/video/mpv/scripts/thumbnail.nix
index 40c4fa8776d84..fc37b1a50dea8 100644
--- a/pkgs/applications/video/mpv/scripts/thumbnail.nix
+++ b/pkgs/applications/video/mpv/scripts/thumbnail.nix
@@ -1,16 +1,22 @@
-{ lib, buildLua, fetchFromGitHub, gitUpdater, python3 }:
+{
+  lib,
+  buildLua,
+  fetchFromGitHub,
+  gitUpdater,
+  python3,
+}:
 
 buildLua rec {
   pname = "mpv-thumbnail-script";
-  version = "0.5.3";
+  version = "0.5.4";
 
   src = fetchFromGitHub {
     owner = "marzzzello";
     repo = "mpv_thumbnail_script";
     rev = version;
-    sha256 = "sha256-J24Rou7BTE7zoiPlBkWuO9dtYJiuzkuwB4FROuzXzag=";
+    sha256 = "sha256-nflavx25skLj9kitneL6Uz3zI2DyMMhQC595npofzbQ=";
   };
-  passthru.updateScript = gitUpdater {};
+  passthru.updateScript = gitUpdater { };
 
   nativeBuildInputs = [ python3 ];
   postPatch = "patchShebangs concat_files.py";
@@ -21,7 +27,7 @@ buildLua rec {
   passthru.scriptName = "mpv_thumbnail_script_{client_osc,server}.lua";
 
   meta = with lib; {
-    description = "A lua script to show preview thumbnails in mpv's OSC seekbar";
+    description = "Lua script to show preview thumbnails in mpv's OSC seekbar";
     homepage = "https://github.com/marzzzello/mpv_thumbnail_script";
     changelog = "https://github.com/marzzzello/mpv_thumbnail_script/releases/tag/${version}";
     license = licenses.gpl3Plus;
diff --git a/pkgs/applications/video/mpv/scripts/uosc.nix b/pkgs/applications/video/mpv/scripts/uosc.nix
index 61eb65f9bf9f3..45b359a42a83d 100644
--- a/pkgs/applications/video/mpv/scripts/uosc.nix
+++ b/pkgs/applications/video/mpv/scripts/uosc.nix
@@ -1,10 +1,10 @@
-{ lib
-, fetchFromGitHub
-, fetchpatch
-, gitUpdater
-, makeFontsConf
-, buildLua
-, buildGoModule
+{
+  lib,
+  fetchFromGitHub,
+  gitUpdater,
+  makeFontsConf,
+  buildLua,
+  buildGoModule,
 }:
 
 buildLua (finalAttrs: {
@@ -18,7 +18,7 @@ buildLua (finalAttrs: {
     rev = finalAttrs.version;
     hash = "sha256-0GPDna9uOuhFDhA9A1fbkoKkgSB76qiDzJVQ9gjGcWo=";
   };
-  passthru.updateScript = gitUpdater {};
+  passthru.updateScript = gitUpdater { };
 
   tools = buildGoModule {
     pname = "uosc-bin";
diff --git a/pkgs/applications/video/mpv/scripts/videoclip.nix b/pkgs/applications/video/mpv/scripts/videoclip.nix
index fff5b788b0286..82f912677f14c 100644
--- a/pkgs/applications/video/mpv/scripts/videoclip.nix
+++ b/pkgs/applications/video/mpv/scripts/videoclip.nix
@@ -1,30 +1,33 @@
-{ lib
-, fetchFromGitHub
-, curl
-, xclip
-, wl-clipboard
-, stdenv
-, buildLua
-, unstableGitUpdater
+{
+  lib,
+  fetchFromGitHub,
+  curl,
+  xclip,
+  wl-clipboard,
+  stdenv,
+  buildLua,
+  unstableGitUpdater,
 }:
 buildLua {
   pname = "videoclip";
-  version = "0-unstable-2024-03-08";
+  version = "0-unstable-2024-05-26";
 
   src = fetchFromGitHub {
     owner = "Ajatt-Tools";
     repo = "videoclip";
-    rev = "0e3f2245b03e888c14c093a50261e0f54ecdf8e8";
-    hash = "sha256-Sg6LHU9OVmVx3cTs8Y0WL8wACb5BlVyeBRccoX+7BXY=";
+    rev = "4fd40d66c95905ed828ca77b7120732014b93ac5";
+    hash = "sha256-Q40a7BBY4c7I5g9HkeV6Twv/PDPBDKTlnxkILw99pxU=";
   };
 
-  patchPhase = ''
-    substituteInPlace platform.lua \
-    --replace \'curl\' \'${lib.getExe curl}\' \
-  '' + lib.optionalString stdenv.isLinux ''
-    --replace xclip ${lib.getExe xclip} \
-    --replace wl-copy ${lib.getExe' wl-clipboard "wl-copy"}
-  '';
+  patchPhase =
+    ''
+      substituteInPlace platform.lua \
+      --replace \'curl\' \'${lib.getExe curl}\' \
+    ''
+    + lib.optionalString stdenv.isLinux ''
+      --replace xclip ${lib.getExe xclip} \
+      --replace wl-copy ${lib.getExe' wl-clipboard "wl-copy"}
+    '';
 
   scriptPath = ".";
   passthru.scriptName = "videoclip";
diff --git a/pkgs/applications/video/mpv/scripts/visualizer.nix b/pkgs/applications/video/mpv/scripts/visualizer.nix
index 332604286847a..0308e6477d79f 100644
--- a/pkgs/applications/video/mpv/scripts/visualizer.nix
+++ b/pkgs/applications/video/mpv/scripts/visualizer.nix
@@ -14,11 +14,11 @@ buildLua {
     rev = "b4246984ba6dc6820adef5c8bbf793af85c9ab8e";
     sha256 = "ZNUzw4OW7z+yGTxim7CCWJdWmihDFOQAQk3bC5Ijcbs=";
   };
-  passthru.updateScript = unstableGitUpdater {};
+  passthru.updateScript = unstableGitUpdater { };
 
   meta = with lib; {
     description = "various audio visualization";
     homepage = "https://github.com/mfcc64/mpv-scripts";
-    maintainers = with maintainers; [kmein];
+    maintainers = with maintainers; [ kmein ];
   };
 }
diff --git a/pkgs/applications/video/mpv/scripts/vr-reversal.nix b/pkgs/applications/video/mpv/scripts/vr-reversal.nix
index 9a7b335a6591d..6fb91e9ad780a 100644
--- a/pkgs/applications/video/mpv/scripts/vr-reversal.nix
+++ b/pkgs/applications/video/mpv/scripts/vr-reversal.nix
@@ -1,4 +1,10 @@
-{ lib, stdenvNoCC, fetchFromGitHub, gitUpdater, ffmpeg }:
+{
+  lib,
+  stdenvNoCC,
+  fetchFromGitHub,
+  gitUpdater,
+  ffmpeg,
+}:
 
 stdenvNoCC.mkDerivation rec {
   pname = "vr-reversal";
@@ -10,15 +16,13 @@ stdenvNoCC.mkDerivation rec {
     rev = "v${version}";
     sha256 = "1wn2ngcvn7wcsl3kmj782x5q9130qw951lj6ilrkafp6q6zscpqr";
   };
-  passthru.updateScript = gitUpdater {
-    rev-prefix = "v";
-  };
+  passthru.updateScript = gitUpdater { rev-prefix = "v"; };
 
   dontBuild = true;
 
   # reset_rot is only available in ffmpeg 5.0, see 5bcc61ce87922ecccaaa0bd303a7e195929859a8
   postPatch = lib.optionalString (lib.versionOlder ffmpeg.version "5.0") ''
-    substituteInPlace 360plugin.lua --replace ":reset_rot=1:" ":"
+    substituteInPlace 360plugin.lua --replace-fail ":reset_rot=1:" ":"
   '';
 
   installPhase = ''
@@ -29,7 +33,7 @@ stdenvNoCC.mkDerivation rec {
   passthru.scriptName = "360plugin.lua";
 
   meta = with lib; {
-    description = "Script for mpv to play VR video with optional saving of head tracking data.";
+    description = "Script for mpv to play VR video with optional saving of head tracking data";
     homepage = "https://github.com/dfaker/VR-reversal";
     license = licenses.unlicense;
     platforms = platforms.all;
diff --git a/pkgs/applications/video/mpv/scripts/webtorrent-mpv-hook.nix b/pkgs/applications/video/mpv/scripts/webtorrent-mpv-hook.nix
index 10fe3d0cdce03..b423281a3ba38 100644
--- a/pkgs/applications/video/mpv/scripts/webtorrent-mpv-hook.nix
+++ b/pkgs/applications/video/mpv/scripts/webtorrent-mpv-hook.nix
@@ -1,4 +1,11 @@
-{ lib, buildNpmPackage, fetchFromGitHub, gitUpdater, nodejs, python3 }:
+{
+  lib,
+  buildNpmPackage,
+  fetchFromGitHub,
+  gitUpdater,
+  nodejs,
+  python3,
+}:
 
 buildNpmPackage rec {
   pname = "webtorrent-mpv-hook";
@@ -10,14 +17,12 @@ buildNpmPackage rec {
     rev = "v${version}";
     hash = "sha256-/dMtXcIyfAs++Zgz2CxRW0tkzn5QjS+WVGChlCyrU0U=";
   };
-  passthru.updateScript = gitUpdater {
-    rev-prefix = "v";
-  };
+  passthru.updateScript = gitUpdater { rev-prefix = "v"; };
 
   postPatch = ''
-    substituteInPlace src/webtorrent.ts --replace "node_path: 'node'" "node_path: '${nodejs}/bin/node'"
+    substituteInPlace src/webtorrent.ts --replace-fail "node_path: 'node'" "node_path: '${lib.getExe nodejs}'"
     # This executable is just for telling non-Nix users how to install
-    substituteInPlace package.json --replace '"bin": "build/bin.mjs",' ""
+    substituteInPlace package.json --replace-fail '"bin": "build/bin.mjs",' ""
     rm -rf src/bin.ts
   '';
 
diff --git a/pkgs/applications/video/mpv/scripts/youtube-upnext.nix b/pkgs/applications/video/mpv/scripts/youtube-upnext.nix
index cdd7ea66a1763..ecd71353d6a3b 100644
--- a/pkgs/applications/video/mpv/scripts/youtube-upnext.nix
+++ b/pkgs/applications/video/mpv/scripts/youtube-upnext.nix
@@ -1,4 +1,10 @@
-{ buildLua, fetchFromGitHub, curl, unstableGitUpdater, lib }:
+{
+  buildLua,
+  fetchFromGitHub,
+  curl,
+  unstableGitUpdater,
+  lib,
+}:
 
 buildLua rec {
   pname = "youtube-upnext";
@@ -13,13 +19,13 @@ buildLua rec {
 
   postPatch = ''
     substituteInPlace youtube-upnext.lua \
-      --replace '"curl"' '"${lib.getExe curl}"'
+      --replace-fail '"curl"' '"${lib.getExe curl}"'
   '';
 
   passthru.updateScript = unstableGitUpdater { };
 
   meta = with lib; {
-    description = "A userscript that allows you to play 'up next'/recommended youtube videos";
+    description = "Userscript that allows you to play 'up next'/recommended youtube videos";
     homepage = "https://github.com/cvzi/mpv-youtube-upnext";
     maintainers = with maintainers; [ bddvlpr ];
     license = licenses.unfree;
diff --git a/pkgs/applications/video/mpv/wrapper.nix b/pkgs/applications/video/mpv/wrapper.nix
index b427318121ef0..533ede74f8744 100644
--- a/pkgs/applications/video/mpv/wrapper.nix
+++ b/pkgs/applications/video/mpv/wrapper.nix
@@ -7,21 +7,23 @@
 , symlinkJoin
 , writeTextDir
 , yt-dlp
+# the unwrapped mpv derivation
+, mpv
 }:
 
-# the unwrapped mpv derivation - 1st argument to `wrapMpv`
-mpv:
-
 let
-  # arguments to the function (exposed as `wrapMpv` in all-packages.nix)
+  # arguments to the function (exposed as `mpv-unwrapped.wrapper` in top-level)
   wrapper = {
+    mpv,
     extraMakeWrapperArgs ? [],
     youtubeSupport ? true,
-    # a set of derivations (probably from `mpvScripts`) where each is
-    # expected to have a `scriptName` passthru attribute that points to the
-    # name of the script that would reside in the script's derivation's
+    # a set of derivations (probably from `mpvScripts`) where each is expected
+    # to have a `scriptName` passthru attribute that points to the name of the
+    # script that would reside in the script's derivation's
     # `$out/share/mpv/scripts/`.
-    # A script can optionally also provide an `extraWrapperArgs` passthru attribute.
+    #
+    # A script can optionally also provide `passthru.extraWrapperArgs`
+    # attribute.
     scripts ? [],
     extraUmpvWrapperArgs ? []
   }:
diff --git a/pkgs/applications/video/multiviewer-for-f1/default.nix b/pkgs/applications/video/multiviewer-for-f1/default.nix
index 46e425992c155..1274009ba707e 100644
--- a/pkgs/applications/video/multiviewer-for-f1/default.nix
+++ b/pkgs/applications/video/multiviewer-for-f1/default.nix
@@ -23,15 +23,15 @@
 , xorg
 }:
 let
-  id = "154421934";
+  id = "168727396";
 in
 stdenvNoCC.mkDerivation rec {
   pname = "multiviewer-for-f1";
-  version = "1.31.3";
+  version = "1.32.1";
 
   src = fetchurl {
     url = "https://releases.multiviewer.dev/download/${id}/multiviewer-for-f1_${version}_amd64.deb";
-    sha256 = "sha256-lFES+ukkI/GqKQdZwtaB+ov0hqAyFZ2N533LBKJ9oXg=";
+    sha256 = "sha256-cnfye5c3+ZYZLjlZ6F4OD90tXhxDbgbNBn98mgmZ+Hs=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/applications/video/mythtv/default.nix b/pkgs/applications/video/mythtv/default.nix
index 07e8be2bea719..ce3ae604e7d1f 100644
--- a/pkgs/applications/video/mythtv/default.nix
+++ b/pkgs/applications/video/mythtv/default.nix
@@ -1,4 +1,4 @@
-{ lib, mkDerivation, fetchFromGitHub, fetchpatch, which, qtbase, qtwebkit, qtscript
+{ lib, mkDerivation, fetchFromGitHub, which, qtbase, qtwebkit, qtscript
 , libpulseaudio, fftwSinglePrec , lame, zlib, libGLU, libGL, alsa-lib, freetype
 , perl, pkg-config , libsamplerate, libbluray, lzo, libX11, libXv, libXrandr, libXvMC, libXinerama, libXxf86vm
 , libXmu , yasm, libuuid, taglib, libtool, autoconf, automake, file, exiv2, linuxHeaders
diff --git a/pkgs/applications/video/obs-studio/default.nix b/pkgs/applications/video/obs-studio/default.nix
index f278d832958ed..418d9adf8263b 100644
--- a/pkgs/applications/video/obs-studio/default.nix
+++ b/pkgs/applications/video/obs-studio/default.nix
@@ -24,7 +24,7 @@
 , libvlc
 , libGL
 , mbedtls
-, wrapGAppsHook
+, wrapGAppsHook3
 , scriptingSupport ? true
 , luajit
 , swig4
@@ -90,7 +90,7 @@ stdenv.mkDerivation (finalAttrs: {
     addOpenGLRunpath
     cmake
     pkg-config
-    wrapGAppsHook
+    wrapGAppsHook3
     wrapQtAppsHook
   ]
   ++ optional scriptingSupport swig4;
diff --git a/pkgs/applications/video/obs-studio/plugins/advanced-scene-switcher/default.nix b/pkgs/applications/video/obs-studio/plugins/advanced-scene-switcher/default.nix
index ea379e6ffc51f..ec19f26e8a156 100644
--- a/pkgs/applications/video/obs-studio/plugins/advanced-scene-switcher/default.nix
+++ b/pkgs/applications/video/obs-studio/plugins/advanced-scene-switcher/default.nix
@@ -23,13 +23,13 @@
 
 stdenv.mkDerivation rec {
   pname = "advanced-scene-switcher";
-  version = "1.25.5";
+  version = "1.26.4";
 
   src = fetchFromGitHub {
     owner = "WarmUpTill";
     repo = "SceneSwitcher";
     rev = version;
-    hash = "sha256-ROR+R1Zak8XkhFk1+Pyi0lB+JZI4SVtKGin4vem7NEE=";
+    hash = "sha256-qUKywOfUiGKBmyREns2LnWECGeFhdA4ecpgGJQAIKpU=";
   };
 
   nativeBuildInputs = [
@@ -64,7 +64,7 @@ stdenv.mkDerivation rec {
   env.NIX_CFLAGS_COMPILE = "-Wno-error=stringop-overflow";
 
   meta = with lib; {
-    description = "An automated scene switcher for OBS Studio";
+    description = "Automated scene switcher for OBS Studio";
     homepage = "https://github.com/WarmUpTill/SceneSwitcher";
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-command-source.nix b/pkgs/applications/video/obs-studio/plugins/obs-command-source.nix
index df4ec89316b33..8a0f9adcca067 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-command-source.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-command-source.nix
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "OBS Studio plugin that provides a dummy source to execute arbitrary commands when a scene is switched.";
+    description = "OBS Studio plugin that provides a dummy source to execute arbitrary commands when a scene is switched";
     homepage = "https://github.com/norihiro/command-source";
     maintainers = with maintainers; [ flexiondotorg ];
     license = licenses.gpl2Plus;
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-composite-blur.nix b/pkgs/applications/video/obs-studio/plugins/obs-composite-blur.nix
index c1f2073ae6e14..16b4b2c34fbf6 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-composite-blur.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-composite-blur.nix
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "A comprehensive blur plugin for OBS that provides several different blur algorithms, and proper compositing";
+    description = "Comprehensive blur plugin for OBS that provides several different blur algorithms, and proper compositing";
     homepage = "https://github.com/FiniteSingularity/obs-composite-blur";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ GaetanLepage ];
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-gstreamer.nix b/pkgs/applications/video/obs-studio/plugins/obs-gstreamer.nix
index c34f821d7c6ad..d6341eba53425 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-gstreamer.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-gstreamer.nix
@@ -45,7 +45,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "An OBS Studio source, encoder and video filter plugin to use GStreamer elements/pipelines in OBS Studio";
+    description = "OBS Studio source, encoder and video filter plugin to use GStreamer elements/pipelines in OBS Studio";
     homepage = "https://github.com/fzwoch/obs-gstreamer";
     maintainers = with maintainers; [ ahuzik pedrohlc ];
     license = licenses.gpl2Plus;
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-move-transition.nix b/pkgs/applications/video/obs-studio/plugins/obs-move-transition.nix
index f9a09b450bbb2..e464079da93c7 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-move-transition.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-move-transition.nix
@@ -7,13 +7,13 @@
 
 stdenv.mkDerivation rec {
   pname = "obs-move-transition";
-  version = "2.12.0";
+  version = "3.0.1";
 
   src = fetchFromGitHub {
     owner = "exeldro";
     repo = "obs-move-transition";
     rev = version;
-    sha256 = "sha256-Y0FTNxwpCOp/3XkHxZ4H0ja840R7/c2dTDImUf5iZQE=";
+    sha256 = "sha256-LZL9f/pX74rKW+wnNHGKwGuuISOTcFVr6W9h/JEK0U4=";
   };
 
   nativeBuildInputs = [ cmake ];
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-mute-filter.nix b/pkgs/applications/video/obs-studio/plugins/obs-mute-filter.nix
index 0a98afde99f0f..fd683f3a4ccf7 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-mute-filter.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-mute-filter.nix
@@ -7,13 +7,13 @@
 
 stdenv.mkDerivation rec {
   pname = "obs-mute-filter";
-  version = "0.2.2";
+  version = "0.3.0";
 
   src = fetchFromGitHub {
     owner = "norihiro";
     repo = "obs-mute-filter";
     rev = version;
-    sha256 = "sha256-SiutSmp+DnzMU62kxtBUL0xgMXTe0k+nKwSU3wQe4+g=";
+    sha256 = "sha256-UVYN9R7TnwD3a+KIYTXvxOQWfNUtR8cSWUoKZuNoBJc=";
   };
 
   nativeBuildInputs = [ cmake ];
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-ndi/default.nix b/pkgs/applications/video/obs-studio/plugins/obs-ndi/default.nix
index 037eda100611f..f58d81e9b706b 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-ndi/default.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-ndi/default.nix
@@ -2,7 +2,7 @@
 
 stdenv.mkDerivation rec {
   pname = "obs-ndi";
-  version = "4.13.0";
+  version = "4.13.2";
 
   nativeBuildInputs = [ cmake qtbase ];
   buildInputs = [ obs-studio qtbase ndi ];
@@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
     owner = "Palakis";
     repo = "obs-ndi";
     rev = version;
-    sha256 = "sha256-ugAMSTXbbIZ61oWvoggVJ5kZEgp/waEcWt89AISrSdE=";
+    sha256 = "sha256-DVUoLV2jCdD8qXSpmGvqjrQh02dCLroKsUAb5+lYTog=";
   };
 
   patches = [
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-rgb-levels-filter.nix b/pkgs/applications/video/obs-studio/plugins/obs-rgb-levels-filter.nix
index 7e2bd12581df7..aff227211e4d7 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-rgb-levels-filter.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-rgb-levels-filter.nix
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
   ];
 
   meta = with lib; {
-    description = "A simple OBS Studio filter to adjust RGB levels.";
+    description = "Simple OBS Studio filter to adjust RGB levels";
     homepage = "https://github.com/wimpysworld/obs-rgb-levels-filter";
     maintainers = with maintainers; [ flexiondotorg ];
     license = licenses.gpl2Plus;
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-shaderfilter.nix b/pkgs/applications/video/obs-studio/plugins/obs-shaderfilter.nix
index f400fced2ac08..b76b6e9d7f2b7 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-shaderfilter.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-shaderfilter.nix
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "OBS Studio filter for applying an arbitrary shader to a source.";
+    description = "OBS Studio filter for applying an arbitrary shader to a source";
     homepage = "https://github.com/exeldro/obs-shaderfilter";
     maintainers = with maintainers; [ flexiondotorg ];
     license = licenses.gpl2Plus;
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-teleport/default.nix b/pkgs/applications/video/obs-studio/plugins/obs-teleport/default.nix
index 246729639e40a..a057b88dbfc55 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-teleport/default.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-teleport/default.nix
@@ -8,16 +8,16 @@
 
 buildGoModule rec {
   pname = "obs-teleport";
-  version = "0.7.1";
+  version = "0.7.2";
 
   src = fetchFromGitHub {
     owner = "fzwoch";
     repo = "obs-teleport";
     rev = version;
-    sha256 = "sha256-vT5GhZQFunQURgnFI3RSGVlwvcWEW588MuJ+Ev7IZ7w=";
+    sha256 = "sha256-71fvaqjesLhCdK3dHodAtMNYhU6LGX4wkHSPgQJPYqo=";
   };
 
-  vendorHash = "sha256-Po7Oj+wdBOOFI2Ws9MLZQxk4N6mE58M+3q+qNlUrqOY=";
+  vendorHash = "sha256-INJvecUwHMauoqqyd6S2JvZ/oqnwonbdbGhV8hdqiH8=";
 
   buildInputs = [
     libjpeg
@@ -45,7 +45,7 @@ buildGoModule rec {
   passthru.updateScript = nix-update-script { };
 
   meta = {
-    description = "An OBS Studio plugin for an open NDI-like replacement";
+    description = "OBS Studio plugin for an open NDI-like replacement";
     homepage = "https://github.com/fzwoch/obs-teleport";
     maintainers = [ ];
     license = lib.licenses.gpl2Plus;
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-text-pthread.nix b/pkgs/applications/video/obs-studio/plugins/obs-text-pthread.nix
index 3fcc893b0d347..8819f4f53779d 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-text-pthread.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-text-pthread.nix
@@ -10,13 +10,13 @@
 
 stdenv.mkDerivation rec {
   pname = "obs-text-pthread";
-  version = "2.0.3";
+  version = "2.0.4";
 
   src = fetchFromGitHub {
     owner = "norihiro";
     repo = "obs-text-pthread";
     rev = version;
-    sha256 = "sha256-iwPoFbXkWzwE3smWJ+//ZUayD5OO/3iMSoYUTR3LVks=";
+    sha256 = "sha256-3Y++zpy5TEp8AtyRw+1fZDEFY9AuN7JpUNqUhM7h04U=";
   };
 
   nativeBuildInputs = [ cmake pkg-config ];
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-transition-table.nix b/pkgs/applications/video/obs-studio/plugins/obs-transition-table.nix
index 61165bbf6cbbf..ed8aadb52ae7b 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-transition-table.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-transition-table.nix
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "Plugin for OBS Studio to add a Transition Table to the tools menu.";
+    description = "Plugin for OBS Studio to add a Transition Table to the tools menu";
     homepage = "https://github.com/exeldro/obs-transition-table";
     maintainers = with maintainers; [ flexiondotorg ];
     license = licenses.gpl2Plus;
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-vertical-canvas.nix b/pkgs/applications/video/obs-studio/plugins/obs-vertical-canvas.nix
index 82767da10d998..7b6f98c2b63d7 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-vertical-canvas.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-vertical-canvas.nix
@@ -9,13 +9,13 @@
 
 stdenv.mkDerivation rec {
   pname = "obs-vertical-canvas";
-  version = "1.4.2";
+  version = "1.4.3";
 
   src = fetchFromGitHub {
     owner = "Aitum";
     repo = "obs-vertical-canvas";
     rev = version;
-    sha256 = "sha256-3lFM7bOzsKex6JUdbcw8MNS4PRzaN/E/vngdukgfV0s=";
+    sha256 = "sha256-nzuPjVwtWGPSNLnWNT4D03j1xZp37HH77t1DnilSQ8E=";
   };
 
   nativeBuildInputs = [ cmake ];
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-vintage-filter.nix b/pkgs/applications/video/obs-studio/plugins/obs-vintage-filter.nix
index 6c5e97cc1588a..9c3278a3c34ed 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-vintage-filter.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-vintage-filter.nix
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "An OBS Studio filter where the source can be set to be black & white or sepia.";
+    description = "OBS Studio filter where the source can be set to be black & white or sepia";
     homepage = "https://github.com/cg2121/obs-vintage-filter";
     maintainers = with maintainers; [ flexiondotorg ];
     license = licenses.gpl2Plus;
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-webkitgtk.nix b/pkgs/applications/video/obs-studio/plugins/obs-webkitgtk.nix
index fcf426bde635d..41b33b528a9fc 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-webkitgtk.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-webkitgtk.nix
@@ -8,7 +8,7 @@
 , cmake
 , pkg-config
 , ninja
-, wrapGAppsHook
+, wrapGAppsHook3
 }:
 
 stdenv.mkDerivation rec {
@@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
     cmake
     pkg-config
     ninja
-    wrapGAppsHook
+    wrapGAppsHook3
   ];
 
   postPatch = ''
diff --git a/pkgs/applications/video/obs-studio/plugins/wlrobs.nix b/pkgs/applications/video/obs-studio/plugins/wlrobs.nix
index 360b3fb349f68..d6017a649362b 100644
--- a/pkgs/applications/video/obs-studio/plugins/wlrobs.nix
+++ b/pkgs/applications/video/obs-studio/plugins/wlrobs.nix
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
   buildInputs = [ wayland obs-studio libX11 ];
 
   meta = with lib; {
-    description = "An obs-studio plugin that allows you to screen capture on wlroots based wayland compositors";
+    description = "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.gpl3Plus;
diff --git a/pkgs/applications/video/omxplayer/default.nix b/pkgs/applications/video/omxplayer/default.nix
index e01d0a2f49c7a..c9c77c1bbcb95 100644
--- a/pkgs/applications/video/omxplayer/default.nix
+++ b/pkgs/applications/video/omxplayer/default.nix
@@ -64,7 +64,7 @@ let
 
     meta = {
       homepage = "http://www.ffmpeg.org/";
-      description = "A complete, cross-platform solution to record, convert and stream audio and video";
+      description = "Complete, cross-platform solution to record, convert and stream audio and video";
     };
   };
 in
diff --git a/pkgs/applications/video/open-in-mpv/default.nix b/pkgs/applications/video/open-in-mpv/default.nix
index e6f820528882e..855af79e964e8 100644
--- a/pkgs/applications/video/open-in-mpv/default.nix
+++ b/pkgs/applications/video/open-in-mpv/default.nix
@@ -5,13 +5,13 @@
 
 buildGoModule rec {
   pname = "open-in-mpv";
-  version = "2.2.0";
+  version = "2.2.2";
 
   src = fetchFromGitHub {
     owner = "Baldomo";
     repo = "open-in-mpv";
     rev = "v${version}";
-    hash = "sha256-+sP8/wILBkT3NnhENDYZbOwqOufkFyMJFpQxquuUBEs=";
+    hash = "sha256-dmsI4ea9L50djT/vwjswWDZ7uwMzc2q84i0T82LGjxs=";
   };
 
   vendorHash = "sha256-G6GZO2+CfEAYcf7zBcqDa808A0eJjM8dq7+4VGZ+P4c=";
diff --git a/pkgs/applications/video/openshot-qt/default.nix b/pkgs/applications/video/openshot-qt/default.nix
index fdd96d1aa3ded..4a8208d8bbb6e 100644
--- a/pkgs/applications/video/openshot-qt/default.nix
+++ b/pkgs/applications/video/openshot-qt/default.nix
@@ -11,7 +11,7 @@
 , qtwayland
 , wayland
 , waylandSupport ? stdenv.isLinux
-, wrapGAppsHook
+, wrapGAppsHook3
 }:
 
 let
@@ -31,7 +31,7 @@ mkDerivationWith python3.pkgs.buildPythonApplication {
 
   nativeBuildInputs = [
     doxygen
-    wrapGAppsHook
+    wrapGAppsHook3
   ];
 
   buildInputs = [
diff --git a/pkgs/applications/video/p2pvc/default.nix b/pkgs/applications/video/p2pvc/default.nix
index ec2f0c95f8998..703676b4615d9 100644
--- a/pkgs/applications/video/p2pvc/default.nix
+++ b/pkgs/applications/video/p2pvc/default.nix
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
   };
 
   meta = {
-    description = "A point to point color terminal video chat";
+    description = "Point to point color terminal video chat";
     homepage = "https://github.com/mofarrell/p2pvc";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ trino ];
diff --git a/pkgs/applications/video/peek/default.nix b/pkgs/applications/video/peek/default.nix
index 105a86fbf4a7b..a2817d10edcaa 100644
--- a/pkgs/applications/video/peek/default.nix
+++ b/pkgs/applications/video/peek/default.nix
@@ -11,7 +11,7 @@
 , pkg-config
 , txt2man
 , vala
-, wrapGAppsHook
+, wrapGAppsHook3
 , gsettings-desktop-schemas
 , gtk3
 , glib
@@ -56,7 +56,7 @@ stdenv.mkDerivation rec {
     txt2man
     python3
     vala
-    wrapGAppsHook
+    wrapGAppsHook3
   ];
 
   buildInputs = [
diff --git a/pkgs/applications/video/pipe-viewer/default.nix b/pkgs/applications/video/pipe-viewer/default.nix
index 5d3256931f12e..854e4c6ba4bc3 100644
--- a/pkgs/applications/video/pipe-viewer/default.nix
+++ b/pkgs/applications/video/pipe-viewer/default.nix
@@ -3,7 +3,7 @@
 , perl
 , buildPerlModule
 , makeWrapper
-, wrapGAppsHook
+, wrapGAppsHook3
 , withGtk3 ? false
 , ffmpeg
 , mpv
@@ -38,20 +38,20 @@ let
 in
 buildPerlModule rec {
   pname = "pipe-viewer";
-  version = "0.5.0";
+  version = "0.5.1";
 
   src = fetchFromGitHub {
     owner = "trizen";
     repo = "pipe-viewer";
     rev = version;
-    hash = "sha256-tNIAGvv3dCPd7MA27yd2AHMSgs+1D2uiJJTQgTsEVNU=";
+    hash = "sha256-GTmva1pDG1g2wZoS3ABYxhWdbARdlcS0rxGjkdJL7js=";
   };
 
   nativeBuildInputs = [ makeWrapper ]
-    ++ lib.optionals withGtk3 [ wrapGAppsHook ];
+    ++ lib.optionals withGtk3 [ wrapGAppsHook3 ];
 
   buildInputs = [ perlEnv ]
-    # Can't be in perlEnv for wrapGAppsHook to work correctly
+    # Can't be in perlEnv for wrapGAppsHook3 to work correctly
     ++ lib.optional withGtk3 Gtk3;
 
   # Not supported by buildPerlModule
diff --git a/pkgs/applications/video/pitivi/default.nix b/pkgs/applications/video/pitivi/default.nix
index eb00353b83d1e..85ee9c0e7ef8d 100644
--- a/pkgs/applications/video/pitivi/default.nix
+++ b/pkgs/applications/video/pitivi/default.nix
@@ -4,7 +4,7 @@
 , gettext
 , itstool
 , python3
-, wrapGAppsHook
+, wrapGAppsHook3
 , gst_all_1
 , gtk3
 , gobject-introspection
@@ -44,7 +44,7 @@ python3.pkgs.buildPythonApplication rec {
     gettext
     itstool
     python3
-    wrapGAppsHook
+    wrapGAppsHook3
     gobject-introspection
   ];
 
diff --git a/pkgs/applications/video/plex-mpv-shim/default.nix b/pkgs/applications/video/plex-mpv-shim/default.nix
index 2e71c4668356e..7d862fb216d7b 100644
--- a/pkgs/applications/video/plex-mpv-shim/default.nix
+++ b/pkgs/applications/video/plex-mpv-shim/default.nix
@@ -1,5 +1,5 @@
 { lib, buildPythonApplication, fetchFromGitHub, fetchpatch, python, mpv, requests, python-mpv-jsonipc, pystray, tkinter
-, wrapGAppsHook, gobject-introspection, mpv-shim-default-shaders }:
+, wrapGAppsHook3, gobject-introspection, mpv-shim-default-shaders }:
 
 buildPythonApplication rec {
   pname = "plex-mpv-shim";
@@ -21,7 +21,7 @@ buildPythonApplication rec {
   ];
 
   nativeBuildInputs = [
-    wrapGAppsHook
+    wrapGAppsHook3
     gobject-introspection
   ];
 
diff --git a/pkgs/applications/video/prism/default.nix b/pkgs/applications/video/prism/default.nix
index 68ef965ec1ab1..a2f42aa00c4e3 100644
--- a/pkgs/applications/video/prism/default.nix
+++ b/pkgs/applications/video/prism/default.nix
@@ -14,7 +14,7 @@ buildGoModule rec {
   vendorHash = "sha256-uKtVifw4dxJdVvHxytL+9qjXHEdTyiz8U8n/95MObdY=";
 
   meta = with lib; {
-    description = "An RTMP stream recaster/splitter";
+    description = "RTMP stream recaster/splitter";
     homepage = "https://github.com/muesli/prism";
     license = licenses.mit;
     maintainers = with maintainers; [ paperdigits ];
diff --git a/pkgs/applications/video/pyca/default.nix b/pkgs/applications/video/pyca/default.nix
index 88ae198936539..5ca1e59d107bb 100644
--- a/pkgs/applications/video/pyca/default.nix
+++ b/pkgs/applications/video/pyca/default.nix
@@ -73,7 +73,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     broken = stdenv.isDarwin;
-    description = "A fully functional Opencast capture agent written in Python";
+    description = "Fully functional Opencast capture agent written in Python";
     mainProgram = "pyca";
     homepage = "https://github.com/opencast/pyCA";
     license = licenses.lgpl3;
diff --git a/pkgs/applications/video/qarte/default.nix b/pkgs/applications/video/qarte/default.nix
index cbbf1f3076201..60b773d3aede5 100644
--- a/pkgs/applications/video/qarte/default.nix
+++ b/pkgs/applications/video/qarte/default.nix
@@ -38,7 +38,7 @@ in mkDerivation {
 
   meta = with lib; {
     homepage = "https://launchpad.net/qarte";
-    description = "A recorder for Arte TV Guide and Arte Concert";
+    description = "Recorder for Arte TV Guide and Arte Concert";
     license = licenses.gpl3;
     maintainers = with maintainers; [ vbgl ];
     platforms = platforms.linux;
diff --git a/pkgs/applications/video/qmediathekview/default.nix b/pkgs/applications/video/qmediathekview/default.nix
index 3596791034979..0e8f3bfb584bc 100644
--- a/pkgs/applications/video/qmediathekview/default.nix
+++ b/pkgs/applications/video/qmediathekview/default.nix
@@ -32,7 +32,7 @@ mkDerivation rec {
   installFlags = [ "INSTALL_ROOT=$(out)" ];
 
   meta = with lib; {
-    description = "An alternative Qt-based front-end for the database maintained by the MediathekView project";
+    description = "Alternative Qt-based front-end for the database maintained by the MediathekView project";
     inherit (src.meta) homepage;
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
diff --git a/pkgs/applications/video/recapp/default.nix b/pkgs/applications/video/recapp/default.nix
index c15a0680a9333..b6cb8c6377bba 100644
--- a/pkgs/applications/video/recapp/default.nix
+++ b/pkgs/applications/video/recapp/default.nix
@@ -14,7 +14,7 @@
 , ninja
 , pkg-config
 , slop
-, wrapGAppsHook
+, wrapGAppsHook3
 }:
 
 python3.pkgs.buildPythonApplication rec {
@@ -43,7 +43,7 @@ python3.pkgs.buildPythonApplication rec {
     meson
     ninja
     pkg-config
-    wrapGAppsHook
+    wrapGAppsHook3
     gobject-introspection
   ];
 
diff --git a/pkgs/applications/video/rtabmap/default.nix b/pkgs/applications/video/rtabmap/default.nix
index 1147d1ef1d949..3b457530fbf29 100644
--- a/pkgs/applications/video/rtabmap/default.nix
+++ b/pkgs/applications/video/rtabmap/default.nix
@@ -1,7 +1,6 @@
 { lib
 , stdenv
 , fetchFromGitHub
-, fetchpatch
 , pkg-config
 , cmake
 , opencv
@@ -20,23 +19,23 @@
 , libGL
 , libGLU
 , vtkWithQt5
-, wrapGAppsHook
+, wrapGAppsHook3
 , liblapack
 , xorg
 }:
 
 stdenv.mkDerivation rec {
   pname = "rtabmap";
-  version = "0.21.4";
+  version = "0.21.4.1";
 
   src = fetchFromGitHub {
     owner = "introlab";
     repo = "rtabmap";
     rev = "refs/tags/${version}";
-    hash = "sha256-HrIATYRuhFfTlO4oTRZo7CM30LFVyatZJON31Fe4HTQ=";
+    hash = "sha256-y/p1uFSxVQNXO383DLGCg4eWW7iu1esqpWlyPMF3huk=";
   };
 
-  nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook wrapGAppsHook ];
+  nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook wrapGAppsHook3 ];
   buildInputs = [
     ## Required
     opencv
diff --git a/pkgs/applications/video/screenkey/default.nix b/pkgs/applications/video/screenkey/default.nix
index 90cf5e7dcf247..59e53f3ccdc85 100644
--- a/pkgs/applications/video/screenkey/default.nix
+++ b/pkgs/applications/video/screenkey/default.nix
@@ -1,6 +1,6 @@
 { lib
 , fetchFromGitLab
-, wrapGAppsHook
+, wrapGAppsHook3
 , xorg
 , gobject-introspection
 , gtk3
@@ -21,7 +21,7 @@ python3.pkgs.buildPythonApplication rec {
   };
 
   nativeBuildInputs = [
-    wrapGAppsHook
+    wrapGAppsHook3
     # for setup hook
     gobject-introspection
   ];
@@ -38,7 +38,7 @@ python3.pkgs.buildPythonApplication rec {
     dbus-python
   ];
 
-  # Prevent double wrapping because of wrapGAppsHook
+  # Prevent double wrapping because of wrapGAppsHook3
   dontWrapGApps = true;
 
   preFixup = ''
@@ -60,7 +60,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     homepage = "https://www.thregr.org/~wavexx/software/screenkey/";
-    description = "A screencast tool to display your keys inspired by Screenflick";
+    description = "Screencast tool to display your keys inspired by Screenflick";
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
     maintainers = [ maintainers.rasendubi ];
diff --git a/pkgs/applications/video/shotcut/default.nix b/pkgs/applications/video/shotcut/default.nix
index 87732ad75b8cc..5427594b1e40b 100644
--- a/pkgs/applications/video/shotcut/default.nix
+++ b/pkgs/applications/video/shotcut/default.nix
@@ -72,7 +72,7 @@ stdenv.mkDerivation (finalAttrs: {
   };
 
   meta = with lib; {
-    description = "A free, open source, cross-platform video editor";
+    description = "Free, open source, cross-platform video editor";
     longDescription = ''
       An official binary for Shotcut, which includes all the
       dependencies pinned to specific versions, is provided on
diff --git a/pkgs/applications/video/showmethekey/default.nix b/pkgs/applications/video/showmethekey/default.nix
deleted file mode 100644
index ef30ed13784c0..0000000000000
--- a/pkgs/applications/video/showmethekey/default.nix
+++ /dev/null
@@ -1,51 +0,0 @@
-{ lib
-, stdenv
-, fetchFromGitHub
-, meson
-, ninja
-, libevdev
-, json-glib
-, libinput
-, gtk4
-, libadwaita
-, wrapGAppsHook4
-, libxkbcommon
-, pkg-config
-}:
-
-stdenv.mkDerivation rec {
-  pname = "showmethekey";
-  version = "1.13.0";
-
-  src = fetchFromGitHub {
-    owner = "AlynxZhou";
-    repo = "showmethekey";
-    rev = "refs/tags/v${version}";
-    hash = "sha256-pVFkO/+a7GAOXbYBfU0zcO/uD26PX+y02bEZa3f1ZP8=";
-  };
-
-  nativeBuildInputs = [
-    meson
-    ninja
-    json-glib
-    pkg-config
-    wrapGAppsHook4
-  ];
-
-  buildInputs = [
-    gtk4
-    libadwaita
-    libevdev
-    libinput
-    libxkbcommon
-  ];
-
-  meta = with lib; {
-    description = "Show keys you typed on screen";
-    homepage = "https://showmethekey.alynx.one/";
-    changelog = "https://github.com/AlynxZhou/showmethekey/releases/tag/v${version}";
-    license = licenses.asl20;
-    platforms = platforms.linux;
-    maintainers = with maintainers; [ ocfox ];
-  };
-}
diff --git a/pkgs/applications/video/simplescreenrecorder/default.nix b/pkgs/applications/video/simplescreenrecorder/default.nix
index cbeb325e7ce09..8e30dc3e6358c 100644
--- a/pkgs/applications/video/simplescreenrecorder/default.nix
+++ b/pkgs/applications/video/simplescreenrecorder/default.nix
@@ -1,16 +1,16 @@
 { lib, stdenv, mkDerivation, fetchFromGitHub, alsa-lib, ffmpeg_4, libjack2, libX11, libXext, libXinerama, qtx11extras
-, libXfixes, libGLU, libGL, pkg-config, libpulseaudio, libv4l, qtbase, qttools, cmake, ninja
+, libXfixes, libGLU, libGL, pkg-config, libpulseaudio, libv4l, qtbase, qttools, cmake, ninja, nix-update-script
 }:
 
 mkDerivation rec {
   pname = "simplescreenrecorder";
-  version = "0.4.3";
+  version = "0.4.4";
 
   src = fetchFromGitHub {
     owner = "MaartenBaert";
     repo = "ssr";
     rev = version;
-    sha256 = "0mrx8wprs8bi42fwwvk6rh634ic9jnn0gkfpd6q9pcawnnbz3vq8";
+    sha256 = "sha256-cVjQmyk+rCqmDJzdnDk7bQ8kpyD3HtTw3wLVx2thHok=";
   };
 
   cmakeFlags = [
@@ -18,14 +18,13 @@ mkDerivation rec {
     "-DWITH_GLINJECT=${if stdenv.hostPlatform.isx86 then "TRUE" else "FALSE"}"
   ];
 
-  patches = [ ./fix-paths.patch ];
-
   postPatch = ''
-    for i in scripts/ssr-glinject src/AV/Input/GLInjectInput.cpp; do
-      substituteInPlace $i \
-        --subst-var out \
-        --subst-var-by sh ${stdenv.shell}
-    done
+    substituteInPlace scripts/ssr-glinject \
+      --replace-fail "libssr-glinject.so" "$out/lib/libssr-glinject.so"
+
+    substituteInPlace src/AV/Input/GLInjectInput.cpp \
+      --replace-fail "/bin/sh" "${stdenv.shell}" \
+      --replace-fail "libssr-glinject.so" "$out/lib/libssr-glinject.so"
   '';
 
   nativeBuildInputs = [ pkg-config cmake ninja ];
@@ -34,8 +33,10 @@ mkDerivation rec {
     libpulseaudio libv4l qtbase qttools qtx11extras
   ];
 
+  passthru.updateScript = nix-update-script { };
+
   meta = with lib; {
-    description = "A screen recorder for Linux";
+    description = "Screen recorder for Linux";
     homepage = "https://www.maartenbaert.be/simplescreenrecorder";
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
diff --git a/pkgs/applications/video/simplescreenrecorder/fix-paths.patch b/pkgs/applications/video/simplescreenrecorder/fix-paths.patch
deleted file mode 100644
index 9cf634285fcbf..0000000000000
--- a/pkgs/applications/video/simplescreenrecorder/fix-paths.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git a/scripts/ssr-glinject b/scripts/ssr-glinject
-index 48be48d..5038d4c 100755
---- a/scripts/ssr-glinject
-+++ b/scripts/ssr-glinject
-@@ -59,6 +59,6 @@ do
- 	fi
- done
- 
--echo "ssr-glinject: LD_PRELOAD = $LD_PRELOAD:libssr-glinject.so"
-+echo "ssr-glinject: LD_PRELOAD = $LD_PRELOAD:@out@/lib/libssr-glinject.so"
- echo "ssr-glinject: command = $@"
--LD_PRELOAD="$LD_PRELOAD:libssr-glinject.so" "$@"
-+LD_PRELOAD="$LD_PRELOAD:@out@/lib/libssr-glinject.so" "$@"
-diff --git a/src/AV/Input/GLInjectInput.cpp b/src/AV/Input/GLInjectInput.cpp
-index fc98f31..18f5196 100644
---- a/src/AV/Input/GLInjectInput.cpp
-+++ b/src/AV/Input/GLInjectInput.cpp
-@@ -113,7 +113,7 @@ bool ExecuteDetached(const char* command, const char* working_directory) {
- 
- 			// try to execute command
- 			do {
--				res = execl("/bin/sh", "/bin/sh", "-c", command, (char*) NULL);
-+				res = execl("@sh@", "@sh@", "-c", command, (char*) NULL);
- 			} while(res == -1 and errno == EINTR);
- 
- 			// failed, send feedback
-@@ -207,7 +207,7 @@ void GLInjectInput::SetCapturing(bool capturing) {
- bool GLInjectInput::LaunchApplication(const QString& channel, bool relax_permissions, const QString& command, const QString& working_directory) {
- 
- 	// prepare command
--	QString full_command = "LD_PRELOAD=\"libssr-glinject.so\" ";
-+	QString full_command = "LD_PRELOAD=\"@out@/lib/libssr-glinject.so\" ";
- 	full_command += "SSR_CHANNEL=\"" + ShellEscape(channel) + "\" ";
- 	if(relax_permissions)
- 		full_command += "SSR_STREAM_RELAX_PERMISSIONS=1 ";
diff --git a/pkgs/applications/video/smplayer/default.nix b/pkgs/applications/video/smplayer/default.nix
deleted file mode 100644
index 513468cb16cf0..0000000000000
--- a/pkgs/applications/video/smplayer/default.nix
+++ /dev/null
@@ -1,62 +0,0 @@
-{ lib
-, stdenv
-, fetchFromGitHub
-, qmake
-, qtscript
-, wrapQtAppsHook
-}:
-
-stdenv.mkDerivation (finalAttrs: {
-  pname = "smplayer";
-  version = "23.12.0";
-
-  src = fetchFromGitHub {
-    owner = "smplayer-dev";
-    repo = "smplayer";
-    rev = "v${finalAttrs.version}";
-    hash = "sha256-ip4y9GF2u1yl1Ts8T9XcFg9wdXVTYXfDrrPuHLz6oSs=";
-  };
-
-  nativeBuildInputs = [
-    qmake
-    wrapQtAppsHook
-  ];
-
-  buildInputs = [
-    qtscript
-  ];
-
-  dontUseQmakeConfigure = true;
-
-  makeFlags = [
-    "PREFIX=${placeholder "out"}"
-  ];
-
-  meta = {
-    homepage = "https://www.smplayer.info";
-    description = "A complete front-end for MPlayer";
-    longDescription = ''
-      SMPlayer is a free media player for Windows and Linux with built-in codecs
-      that can play virtually all video and audio formats. It doesn't need any
-      external codecs. Just install SMPlayer and you'll be able to play all
-      formats without the hassle to find and install codec packs.
-
-      One of the most interesting features of SMPlayer: it remembers the
-      settings of all files you play. So you start to watch a movie but you have
-      to leave... don't worry, when you open that movie again it will be resumed
-      at the same point you left it, and with the same settings: audio track,
-      subtitles, volume...
-
-      SMPlayer is a graphical user interface (GUI) for the award-winning
-      MPlayer, which is capable of playing almost all known video and audio
-      formats. But apart from providing access for the most common and useful
-      options of MPlayer, SMPlayer adds other interesting features like the
-      possibility to play Youtube videos or download subtitles.
-    '';
-    changelog = "https://github.com/smplayer-dev/smplayer/releases/tag/v${finalAttrs.version}";
-    license = lib.licenses.gpl3Plus;
-    maintainers = with lib.maintainers; [ AndersonTorres ];
-    platforms = lib.platforms.linux;
-  };
-})
-# TODO [ AndersonTorres ]: create a wrapper including mplayer/mpv
diff --git a/pkgs/applications/video/streamlink-twitch-gui/bin.nix b/pkgs/applications/video/streamlink-twitch-gui/bin.nix
index 543b2b524708f..ac1490345c29c 100644
--- a/pkgs/applications/video/streamlink-twitch-gui/bin.nix
+++ b/pkgs/applications/video/streamlink-twitch-gui/bin.nix
@@ -5,7 +5,7 @@
 , makeDesktopItem
 , makeWrapper
 , stdenv
-, wrapGAppsHook
+, wrapGAppsHook3
 , at-spi2-core
 , atk
 , alsa-lib
@@ -79,7 +79,7 @@ stdenv.mkDerivation rec {
     libXScrnSaver
     libXtst
     makeWrapper
-    wrapGAppsHook
+    wrapGAppsHook3
   ];
 
   buildInputs = [ streamlink ];
diff --git a/pkgs/applications/video/streamlink/default.nix b/pkgs/applications/video/streamlink/default.nix
index b6522aef23975..e5f0cac20b523 100644
--- a/pkgs/applications/video/streamlink/default.nix
+++ b/pkgs/applications/video/streamlink/default.nix
@@ -7,12 +7,12 @@
 
 python3Packages.buildPythonApplication rec {
   pname = "streamlink";
-  version = "6.7.3";
+  version = "6.7.4";
   pyproject = true;
 
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-Da+J+NOXW+n55LvaPQw6XiRhJJQ4Pc4Z1p21qMym/Xw=";
+    hash = "sha256-kzdTerEZ/ndSSl1mWq7Ou/sG4suN8o0SYNkodkJXUc4=";
   };
 
   patches = [
@@ -42,6 +42,7 @@ python3Packages.buildPythonApplication rec {
 
   propagatedBuildInputs = with python3Packages; [
     certifi
+    exceptiongroup
     isodate
     lxml
     pycountry
@@ -55,7 +56,7 @@ python3Packages.buildPythonApplication rec {
     websocket-client
   ];
 
-  meta = with lib; {
+  meta = {
     changelog = "https://github.com/streamlink/streamlink/raw/${version}/CHANGELOG.md";
     description = "CLI for extracting streams from various websites to video player of your choosing";
     homepage = "https://streamlink.github.io/";
@@ -66,8 +67,8 @@ python3Packages.buildPythonApplication rec {
 
       Streamlink is a fork of the livestreamer project.
     '';
-    license = licenses.bsd2;
+    license = lib.licenses.bsd2;
     mainProgram = "streamlink";
-    maintainers = with maintainers; [ dezgeg zraexy DeeUnderscore ];
+    maintainers = with lib.maintainers; [ dezgeg zraexy DeeUnderscore ];
   };
 }
diff --git a/pkgs/applications/video/stremio/default.nix b/pkgs/applications/video/stremio/default.nix
index a967a872cd997..0aa5ab26e653c 100644
--- a/pkgs/applications/video/stremio/default.nix
+++ b/pkgs/applications/video/stremio/default.nix
@@ -45,7 +45,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     mainProgram = "stremio";
-    description = "A modern media center that gives you the freedom to watch everything you want.";
+    description = "Modern media center that gives you the freedom to watch everything you want";
     homepage = "https://www.stremio.com/";
     # (Server-side) web UI is closed source now, apparently they work on open-sourcing it.
     # server.js appears to be MIT-licensed, but I can't find how they actually build it.
diff --git a/pkgs/applications/video/subdl/default.nix b/pkgs/applications/video/subdl/default.nix
index 773d1f1ad4237..61b5af2f0b57b 100644
--- a/pkgs/applications/video/subdl/default.nix
+++ b/pkgs/applications/video/subdl/default.nix
@@ -19,7 +19,7 @@ stdenv.mkDerivation {
 
   meta = {
     homepage = "https://github.com/alexanderwink/subdl";
-    description = "A command-line tool to download subtitles from opensubtitles.org";
+    description = "Command-line tool to download subtitles from opensubtitles.org";
     platforms = lib.platforms.all;
     license = lib.licenses.gpl3;
     maintainers = [ lib.maintainers.exfalso ];
diff --git a/pkgs/applications/video/subtitleedit/default.nix b/pkgs/applications/video/subtitleedit/default.nix
index 924f0fc44e0eb..b192edbffa0e9 100644
--- a/pkgs/applications/video/subtitleedit/default.nix
+++ b/pkgs/applications/video/subtitleedit/default.nix
@@ -18,11 +18,11 @@
 
 stdenv.mkDerivation rec {
   pname = "subtitleedit";
-  version = "4.0.5";
+  version = "4.0.6";
 
   src = fetchzip {
     url = "https://github.com/SubtitleEdit/subtitleedit/releases/download/${version}/SE${lib.replaceStrings [ "." ] [ "" ] version}.zip";
-    hash = "sha256-qYDLUqC5adzpmlQIq/EKmrkN8D8/EHZmP8QUGAaYf+s=";
+    hash = "sha256-ipAqnF7rpSXccWkyTysUBrD0/mnv5AEA5GuxMJjW9Dg=";
     stripRoot = false;
   };
 
diff --git a/pkgs/applications/video/subtitleeditor/default.nix b/pkgs/applications/video/subtitleeditor/default.nix
index fd8e03963dca0..b440c187403e5 100644
--- a/pkgs/applications/video/subtitleeditor/default.nix
+++ b/pkgs/applications/video/subtitleeditor/default.nix
@@ -1,6 +1,6 @@
 { lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, intltool, file,
   desktop-file-utils, enchant, gtk3, gtkmm3, gst_all_1, hicolor-icon-theme,
-  libsigcxx, libxmlxx, xdg-utils, isocodes, wrapGAppsHook
+  libsigcxx, libxmlxx, xdg-utils, isocodes, wrapGAppsHook3
 }:
 
 stdenv.mkDerivation rec {
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
     pkg-config
     intltool
     file
-    wrapGAppsHook
+    wrapGAppsHook3
   ];
 
   buildInputs =  [
diff --git a/pkgs/applications/video/tartube/default.nix b/pkgs/applications/video/tartube/default.nix
index 5b62399a04651..057484d379e84 100644
--- a/pkgs/applications/video/tartube/default.nix
+++ b/pkgs/applications/video/tartube/default.nix
@@ -6,7 +6,7 @@
 , libnotify
 , pango
 , python3Packages
-, wrapGAppsHook
+, wrapGAppsHook3
 , youtube-dl
 , glib
 , ffmpeg
@@ -26,7 +26,7 @@ python3Packages.buildPythonApplication rec {
 
   nativeBuildInputs = [
     gobject-introspection
-    wrapGAppsHook
+    wrapGAppsHook3
   ];
 
   strictDeps = false;
@@ -69,7 +69,7 @@ python3Packages.buildPythonApplication rec {
   ];
 
   meta = with lib; {
-    description = "A GUI front-end for youtube-dl";
+    description = "GUI front-end for youtube-dl";
     license = licenses.gpl3;
     platforms = platforms.linux;
     maintainers = with maintainers; [ mkg20001 luc65r ];
diff --git a/pkgs/applications/video/timelens/default.nix b/pkgs/applications/video/timelens/default.nix
index bd38a4c2f76af..b80d1c3c447b8 100644
--- a/pkgs/applications/video/timelens/default.nix
+++ b/pkgs/applications/video/timelens/default.nix
@@ -4,7 +4,7 @@
 , pkg-config
 , glib
 , gst_all_1
-, wrapGAppsHook
+, wrapGAppsHook3
 }:
 
 rustPlatform.buildRustPackage rec {
@@ -22,7 +22,7 @@ rustPlatform.buildRustPackage rec {
 
   nativeBuildInputs = [
     pkg-config
-    wrapGAppsHook
+    wrapGAppsHook3
   ];
 
   buildInputs = [
@@ -36,7 +36,7 @@ rustPlatform.buildRustPackage rec {
   ];
 
   meta = {
-    description = "A open source project for creating visual timelines";
+    description = "Open source project for creating visual timelines";
     homepage = "https://timelens.blinry.org";
     changelog = "https://github.com/timelens/timelens/blob/${src.rev}/CHANGELOG.md";
     license = lib.licenses.gpl2Plus;
diff --git a/pkgs/applications/video/ustreamer/default.nix b/pkgs/applications/video/ustreamer/default.nix
index 294e250f7c8e1..b612584d8b0f3 100644
--- a/pkgs/applications/video/ustreamer/default.nix
+++ b/pkgs/applications/video/ustreamer/default.nix
@@ -1,19 +1,55 @@
-{ lib, stdenv, fetchFromGitHub, libbsd, libevent, libjpeg }:
-
+{ lib
+, stdenv
+, fetchFromGitHub
+, libbsd
+, libevent
+, libjpeg
+, libdrm
+, pkg-config
+, janus-gateway
+, glib
+, alsa-lib
+, speex
+, jansson
+, libopus
+, withJanus ? true
+}:
 stdenv.mkDerivation rec {
   pname = "ustreamer";
-  version = "6.4";
+  version = "6.12";
 
   src = fetchFromGitHub {
     owner = "pikvm";
     repo = "ustreamer";
     rev = "v${version}";
-    hash = "sha256-pTfct+nki1t7ltCUnxSyOkDocSr2pkoqOldkECtNfDU=";
+    hash = "sha256-iaCgPHgklk7tbhJhQmyjKggb1bMWBD+Zurgfk9sCQ3E=";
   };
 
-  buildInputs = [ libbsd libevent libjpeg ];
+  buildInputs = [
+    libbsd
+    libevent
+    libjpeg
+    libdrm
+  ] ++ lib.optionals withJanus [
+    janus-gateway
+    glib
+    alsa-lib
+    jansson
+    speex
+    libopus
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
 
-  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "WITH_V4P=1"
+  ] ++ lib.optionals withJanus [
+    "WITH_JANUS=1"
+    # Workaround issues with Janus C Headers
+    # https://github.com/pikvm/ustreamer/blob/793f24c4/docs/h264.md#fixing-janus-c-headers
+    "CFLAGS=-I${lib.getDev janus-gateway}/include/janus"
+  ];
 
   enableParallelBuilding = true;
 
@@ -28,7 +64,7 @@ stdenv.mkDerivation rec {
       screencast hardware data with the highest resolution and FPS possible.
     '';
     license = licenses.gpl3Plus;
-    maintainers = with maintainers; [ tfc ];
+    maintainers = with maintainers; [ tfc matthewcroughan ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/applications/video/vdr/plugins.nix b/pkgs/applications/video/vdr/plugins.nix
index 4063f4108fa06..6890df0bdca6d 100644
--- a/pkgs/applications/video/vdr/plugins.nix
+++ b/pkgs/applications/video/vdr/plugins.nix
@@ -124,7 +124,7 @@ in {
 
     meta = with lib; {
       inherit (src.meta) homepage;
-      description = "VDR plugin to handle KODI clients.";
+      description = "VDR plugin to handle KODI clients";
       maintainers = [ maintainers.ck3d ];
       license = licenses.gpl2;
       inherit (vdr.meta) platforms;
@@ -186,7 +186,7 @@ in {
 
     meta = with lib; {
       inherit (src.meta) homepage;
-      description = "A plugin for VDR to access AVMs Fritz Box routers";
+      description = "Plugin for VDR to access AVMs Fritz Box routers";
       maintainers = [ maintainers.ck3d ];
       license = licenses.gpl2;
       inherit (vdr.meta) platforms;
diff --git a/pkgs/applications/video/vdr/softhddevice/default.nix b/pkgs/applications/video/vdr/softhddevice/default.nix
index caccdc6ed39a8..e04af11dfe0d9 100644
--- a/pkgs/applications/video/vdr/softhddevice/default.nix
+++ b/pkgs/applications/video/vdr/softhddevice/default.nix
@@ -14,12 +14,12 @@
 }:
 stdenv.mkDerivation rec {
   pname = "vdr-softhddevice";
-  version = "2.2.0";
+  version = "2.3.3";
 
   src = fetchFromGitHub {
     owner = "ua0lnj";
     repo = "vdr-plugin-softhddevice";
-    sha256 = "sha256-1yCDNfUdQLgJ0WWyx0q3Hi0yxb6zxaK7wMzLD9jXweI=";
+    sha256 = "sha256-PvSo5qiDMVrL6ylts5leR/3YAqIpIZcmnAqnGopPG94=";
     rev = "v${version}";
   };
 
diff --git a/pkgs/applications/video/vdr/streamdev/default.nix b/pkgs/applications/video/vdr/streamdev/default.nix
index de45b31d86904..248f06538393f 100644
--- a/pkgs/applications/video/vdr/streamdev/default.nix
+++ b/pkgs/applications/video/vdr/streamdev/default.nix
@@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib;{
     inherit (src.meta) homepage;
-    description = "This PlugIn is a VDR implementation of the VTP (Video Transfer Protocol) Version 0.0.3 (see file PROTOCOL) and a basic HTTP Streaming Protocol.";
+    description = "This PlugIn is a VDR implementation of the VTP (Video Transfer Protocol) Version 0.0.3 (see file PROTOCOL) and a basic HTTP Streaming Protocol";
     maintainers = [ maintainers.ck3d ];
     license = licenses.gpl2;
     inherit (vdr.meta) platforms;
diff --git a/pkgs/applications/video/vivictpp/default.nix b/pkgs/applications/video/vivictpp/default.nix
index e2fc34340fc5b..114718177afec 100644
--- a/pkgs/applications/video/vivictpp/default.nix
+++ b/pkgs/applications/video/vivictpp/default.nix
@@ -64,7 +64,7 @@ in stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "An easy to use tool for subjective comparison of the visual quality of different encodings of the same video source";
+    description = "Easy to use tool for subjective comparison of the visual quality of different encodings of the same video source";
     homepage = "https://github.com/vivictorg/vivictpp";
     license = licenses.gpl2Plus;
     platforms = platforms.unix;
diff --git a/pkgs/applications/video/w_scan2/default.nix b/pkgs/applications/video/w_scan2/default.nix
index d4d21a26025d0..e20330d0ea3b8 100644
--- a/pkgs/applications/video/w_scan2/default.nix
+++ b/pkgs/applications/video/w_scan2/default.nix
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
   };
 
   meta = {
-    description = "A small channel scan tool which generates ATSC, DVB-C, DVB-S/S2 and DVB-T/T2 channels.conf files";
+    description = "Small channel scan tool which generates ATSC, DVB-C, DVB-S/S2 and DVB-T/T2 channels.conf files";
     homepage = "https://github.com/stefantalpalaru/w_scan2";
     platforms = lib.platforms.linux;
     maintainers = with lib.maintainers; [ _0x4A6F ] ;
diff --git a/pkgs/applications/video/webtorrent_desktop/default.nix b/pkgs/applications/video/webtorrent_desktop/default.nix
index 75a8d9f5c639f..9fd34a1eed1fc 100644
--- a/pkgs/applications/video/webtorrent_desktop/default.nix
+++ b/pkgs/applications/video/webtorrent_desktop/default.nix
@@ -2,26 +2,22 @@
 
 buildNpmPackage {
   pname = "webtorrent-desktop";
-  version = "0.25-pre-1eb612";
+  version = "0.25-pre-ac7f16";
   src = fetchFromGitHub {
     owner = "webtorrent";
     repo = "webtorrent-desktop";
-    rev = "1eb61201d6360698a2cc4ea72bf0fa7ee78b457c";
-    sha256 = "sha256-DBEFOamncyidMXypvKNnUmDIPUq1LzYjDgox7fa4+Gg=";
+    rev = "ac7f16e71c96c5ad670bfcb8728df5af78ae21a1";
+    sha256 = "sha256-UEN5NhLVSQEO8rsiTW1hJPjNFL9KobW/Bho98FzKaf4=";
   };
   patches = [
-    # electron 27 fix
-    (fetchpatch {
-      url = "https://github.com/webtorrent/webtorrent-desktop/pull/2388.patch";
-      hash = "sha256-gam5oAZtsaiCNFwecA5ff0nhraySLx3SOHlb/js+cPM=";
-    })
     # startup fix
     (fetchpatch {
-      url = "https://github.com/webtorrent/webtorrent-desktop/pull/2389.patch";
+      name = "2389.patch"; # https://github.com/webtorrent/webtorrent-desktop/pull/2389
+      url = "https://github.com/webtorrent/webtorrent-desktop/commit/407046d150ed7ff876a5e1978f68630e9c8f0074.patch";
       hash = "sha256-hBJGLNNjcGRhYOFlLm/RL0po+70tEeJtR6Y/CfacPAI=";
     })
   ];
-  npmDepsHash = "sha256-tqhp3jDb1xtyV/n9kJtzkiznLQfqeYWeZiTnTVV0ibE=";
+  npmDepsHash = "sha256-otAes6GkqoAVvfeWhWgyY4IVZIZxw3WtkrVdEWIk1Lk=";
   makeCacheWritable = true;
   npmRebuildFlags = [ "--ignore-scripts" ];
   installPhase = ''
diff --git a/pkgs/applications/video/xine/lib.nix b/pkgs/applications/video/xine/lib.nix
index ec3a642082674..641243ee77c6d 100644
--- a/pkgs/applications/video/xine/lib.nix
+++ b/pkgs/applications/video/xine/lib.nix
@@ -84,7 +84,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = {
     homepage = "https://xine.sourceforge.net/";
-    description = "A high-performance, portable and reusable multimedia playback engine";
+    description = "High-performance, portable and reusable multimedia playback engine";
     license = with lib.licenses; [ gpl2Plus lgpl2Plus ];
     maintainers = with lib.maintainers; [ AndersonTorres ];
     platforms = lib.platforms.linux;
diff --git a/pkgs/applications/video/xine/ui.nix b/pkgs/applications/video/xine/ui.nix
index 2437705ceac9a..84631a8c45793 100644
--- a/pkgs/applications/video/xine/ui.nix
+++ b/pkgs/applications/video/xine/ui.nix
@@ -1,7 +1,6 @@
 { lib
 , stdenv
 , fetchurl
-, fetchpatch
 , autoreconfHook
 , curl
 , libXext
diff --git a/pkgs/applications/video/xplayer/default.nix b/pkgs/applications/video/xplayer/default.nix
index baa8fcb95be0b..d697ff2020043 100644
--- a/pkgs/applications/video/xplayer/default.nix
+++ b/pkgs/applications/video/xplayer/default.nix
@@ -21,7 +21,7 @@
 , libxplayer-plparser
 , pkg-config
 , python3
-, wrapGAppsHook
+, wrapGAppsHook3
 , xapp
 , yelp-tools }:
 
@@ -52,7 +52,7 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [
     autoreconfHook
-    wrapGAppsHook
+    wrapGAppsHook3
     autoconf-archive
     gettext
     gtk-doc
@@ -88,7 +88,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "A generic media player from Linux Mint";
+    description = "Generic media player from Linux Mint";
     license = with licenses; [ gpl2Plus lgpl21Plus ];
     homepage = "https://github.com/linuxmint/xplayer";
     maintainers = with maintainers; [ tu-maurice bobby285271 ];
diff --git a/pkgs/applications/video/youtube-tui/default.nix b/pkgs/applications/video/youtube-tui/default.nix
index 63e9f51304edb..89d32f6f9a70f 100644
--- a/pkgs/applications/video/youtube-tui/default.nix
+++ b/pkgs/applications/video/youtube-tui/default.nix
@@ -56,7 +56,7 @@ rustPlatform.buildRustPackage rec {
   '';
 
   meta = with lib; {
-    description = "An aesthetically pleasing YouTube TUI written in Rust";
+    description = "Aesthetically pleasing YouTube TUI written in Rust";
     homepage = "https://siriusmart.github.io/youtube-tui";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ Ruixi-rebirth ];