about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAaron Andersen <aaron@fosslib.net>2021-03-15 18:50:58 -0400
committerAaron Andersen <aaron@fosslib.net>2021-03-15 18:50:58 -0400
commitdd0d4cade8913e30889ead2bca053db5a355e89c (patch)
tree632e238da2bdccf5c65404e7eb74cdcd640adbbf
parent1d779d5a43ffa5fe0bfd6d4b3ff1da35a0e6bb3b (diff)
downloadnixlib-dd0d4cade8913e30889ead2bca053db5a355e89c.tar
nixlib-dd0d4cade8913e30889ead2bca053db5a355e89c.tar.gz
nixlib-dd0d4cade8913e30889ead2bca053db5a355e89c.tar.bz2
nixlib-dd0d4cade8913e30889ead2bca053db5a355e89c.tar.lz
nixlib-dd0d4cade8913e30889ead2bca053db5a355e89c.tar.xz
nixlib-dd0d4cade8913e30889ead2bca053db5a355e89c.tar.zst
nixlib-dd0d4cade8913e30889ead2bca053db5a355e89c.zip
kodi.packages: split into separate files
-rw-r--r--pkgs/applications/video/kodi-packages/controllers/default.nix21
-rw-r--r--pkgs/applications/video/kodi-packages/inputstream-adaptive/default.nix28
-rw-r--r--pkgs/applications/video/kodi-packages/joystick/default.nix21
-rw-r--r--pkgs/applications/video/kodi-packages/kodi-platform/default.nix15
-rw-r--r--pkgs/applications/video/kodi-packages/osmc-skin/default.nix21
-rw-r--r--pkgs/applications/video/kodi-packages/pdfreader/default.nix19
-rw-r--r--pkgs/applications/video/kodi-packages/pvr-hdhomerun/default.nix22
-rw-r--r--pkgs/applications/video/kodi-packages/pvr-hts/default.nix21
-rw-r--r--pkgs/applications/video/kodi-packages/pvr-iptvsimple/default.nix22
-rw-r--r--pkgs/applications/video/kodi-packages/steam-controller/default.nix22
-rw-r--r--pkgs/applications/video/kodi-packages/steam-launcher/default.nix28
-rw-r--r--pkgs/applications/video/kodi-packages/svtplay/default.nix26
-rw-r--r--pkgs/applications/video/kodi-packages/vfs-libarchive/default.nix22
-rw-r--r--pkgs/applications/video/kodi-packages/vfs-sftp/default.nix22
-rw-r--r--pkgs/applications/video/kodi/build-kodi-addon.nix21
-rw-r--r--pkgs/applications/video/kodi/build-kodi-binary-addon.nix31
-rw-r--r--pkgs/applications/video/kodi/default.nix2
-rw-r--r--pkgs/applications/video/kodi/packages.nix420
-rw-r--r--pkgs/top-level/kodi-packages.nix89
19 files changed, 452 insertions, 421 deletions
diff --git a/pkgs/applications/video/kodi-packages/controllers/default.nix b/pkgs/applications/video/kodi-packages/controllers/default.nix
new file mode 100644
index 000000000000..bd29b7c0f7c3
--- /dev/null
+++ b/pkgs/applications/video/kodi-packages/controllers/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildKodiAddon, fetchFromGitHub, controller }:
+buildKodiAddon rec {
+  pname = "game-controller-${controller}";
+  namespace = "game.controller.${controller}";
+  version = "1.0.3";
+
+  sourceDir = "addons/" + namespace;
+
+  src = fetchFromGitHub {
+    owner = "kodi-game";
+    repo = "kodi-game-controllers";
+    rev = "01acb5b6e8b85392b3cb298b034aadb1b24ccf18";
+    sha256 = "0sbc0w0fwbp7rbmbgb6a1kglhnn5g85hijcbbvf5x6jdq9v3f1qb";
+  };
+
+  meta = with lib; {
+    description = "Add support for different gaming controllers.";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ edwtjo ];
+  };
+}
diff --git a/pkgs/applications/video/kodi-packages/inputstream-adaptive/default.nix b/pkgs/applications/video/kodi-packages/inputstream-adaptive/default.nix
new file mode 100644
index 000000000000..cd4c5aca1171
--- /dev/null
+++ b/pkgs/applications/video/kodi-packages/inputstream-adaptive/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, rel, addonDir, buildKodiBinaryAddon, fetchFromGitHub, expat, glib, nspr, nss }:
+buildKodiBinaryAddon rec {
+  pname = "inputstream-adaptive";
+  namespace = "inputstream.adaptive";
+  version = "2.6.7";
+
+  src = fetchFromGitHub {
+    owner = "peak3d";
+    repo = "inputstream.adaptive";
+    rev = "${version}-${rel}";
+    sha256 = "1pwqmbr78wp12jn6rwv63npdfc456adwz0amlxf6gvgg43li6p7s";
+  };
+
+  extraBuildInputs = [ expat ];
+
+  extraRuntimeDependencies = [ glib nspr nss stdenv.cc.cc.lib ];
+
+  extraInstallPhase = let n = namespace; in ''
+    ln -s $out/lib/addons/${n}/libssd_wv.so $out/${addonDir}/${n}/libssd_wv.so
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/peak3d/inputstream.adaptive";
+    description = "Kodi inputstream addon for several manifest types";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ sephalon ];
+  };
+}
diff --git a/pkgs/applications/video/kodi-packages/joystick/default.nix b/pkgs/applications/video/kodi-packages/joystick/default.nix
new file mode 100644
index 000000000000..321ddce905fd
--- /dev/null
+++ b/pkgs/applications/video/kodi-packages/joystick/default.nix
@@ -0,0 +1,21 @@
+{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, tinyxml, udev }:
+buildKodiBinaryAddon rec {
+  pname = namespace;
+  namespace = "peripheral.joystick";
+  version = "1.7.1";
+
+  src = fetchFromGitHub {
+    owner = "xbmc";
+    repo = namespace;
+    rev = "${version}-${rel}";
+    sha256 = "1dhj4afr9kj938xx70fq5r409mz6lbw4n581ljvdjj9lq7akc914";
+  };
+
+  meta = with lib; {
+    description = "Binary addon for raw joystick input.";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ edwtjo ];
+  };
+
+  extraBuildInputs = [ tinyxml udev ];
+}
diff --git a/pkgs/applications/video/kodi-packages/kodi-platform/default.nix b/pkgs/applications/video/kodi-packages/kodi-platform/default.nix
new file mode 100644
index 000000000000..6d458f7377d7
--- /dev/null
+++ b/pkgs/applications/video/kodi-packages/kodi-platform/default.nix
@@ -0,0 +1,15 @@
+{ stdenv, fetchFromGitHub, cmake, kodi, libcec_platform, tinyxml }:
+stdenv.mkDerivation rec {
+  pname = "kodi-platform";
+  version = "17.1";
+
+  src = fetchFromGitHub {
+    owner = "xbmc";
+    repo = pname;
+    rev = "c8188d82678fec6b784597db69a68e74ff4986b5";
+    sha256 = "1r3gs3c6zczmm66qcxh9mr306clwb3p7ykzb70r3jv5jqggiz199";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ kodi libcec_platform tinyxml ];
+}
diff --git a/pkgs/applications/video/kodi-packages/osmc-skin/default.nix b/pkgs/applications/video/kodi-packages/osmc-skin/default.nix
new file mode 100644
index 000000000000..c83fd66a4333
--- /dev/null
+++ b/pkgs/applications/video/kodi-packages/osmc-skin/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildKodiAddon, fetchFromGitHub }:
+buildKodiAddon rec {
+  pname = "osmc-skin";
+  namespace = "skin.osmc";
+  version = "18.0.0";
+
+  src = fetchFromGitHub {
+    owner = "osmc";
+    repo = namespace;
+    rev = "40a6c318641e2cbeac58fb0e7dde9c2beac737a0";
+    sha256 = "1l7hyfj5zvjxjdm94y325bmy1naak455b9l8952sb0gllzrcwj6s";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/osmc/skin.osmc";
+    description = "The default skin for OSMC";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ worldofpeace ];
+    license = licenses.cc-by-nc-sa-30;
+  };
+}
diff --git a/pkgs/applications/video/kodi-packages/pdfreader/default.nix b/pkgs/applications/video/kodi-packages/pdfreader/default.nix
new file mode 100644
index 000000000000..430b9be3fd45
--- /dev/null
+++ b/pkgs/applications/video/kodi-packages/pdfreader/default.nix
@@ -0,0 +1,19 @@
+{ lib, buildKodiAddon, fetchFromGitHub }:
+buildKodiAddon rec {
+  pname = "pdfreader";
+  namespace = "plugin.image.pdf";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "i96751414";
+    repo = "plugin.image.pdfreader";
+    rev = "v${version}";
+    sha256 = "0nkqhlm1gyagq6xpdgqvd5qxyr2ngpml9smdmzfabc8b972mwjml";
+  };
+
+  meta = with lib; {
+    homepage = "https://forum.kodi.tv/showthread.php?tid=187421";
+    description = "A comic book reader";
+    maintainers = with maintainers; [ edwtjo ];
+  };
+}
diff --git a/pkgs/applications/video/kodi-packages/pvr-hdhomerun/default.nix b/pkgs/applications/video/kodi-packages/pvr-hdhomerun/default.nix
new file mode 100644
index 000000000000..3920120b90ac
--- /dev/null
+++ b/pkgs/applications/video/kodi-packages/pvr-hdhomerun/default.nix
@@ -0,0 +1,22 @@
+{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, jsoncpp, libhdhomerun }:
+buildKodiBinaryAddon rec {
+  pname = "pvr-hdhomerun";
+  namespace = "pvr.hdhomerun";
+  version = "7.1.0";
+
+  src = fetchFromGitHub {
+    owner = "kodi-pvr";
+    repo = "pvr.hdhomerun";
+    rev = "${version}-${rel}";
+    sha256 = "0gbwjssnd319csq2kwlyjj1rskg19m1dxac5dl2dymvx5hn3zrgm";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/kodi-pvr/pvr.hdhomerun";
+    description = "Kodi's HDHomeRun PVR client addon";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ titanous ];
+  };
+
+  extraBuildInputs = [ jsoncpp libhdhomerun ];
+}
diff --git a/pkgs/applications/video/kodi-packages/pvr-hts/default.nix b/pkgs/applications/video/kodi-packages/pvr-hts/default.nix
new file mode 100644
index 000000000000..935238758a6b
--- /dev/null
+++ b/pkgs/applications/video/kodi-packages/pvr-hts/default.nix
@@ -0,0 +1,21 @@
+{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub }:
+buildKodiBinaryAddon rec {
+  pname = "pvr-hts";
+  namespace = "pvr.hts";
+  version = "8.2.2";
+
+  src = fetchFromGitHub {
+    owner = "kodi-pvr";
+    repo = "pvr.hts";
+    rev = "${version}-${rel}";
+    sha256 = "0jnn9gfjl556acqjf92wzzn371gxymhbbi665nqgg2gjcan0a49q";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/kodi-pvr/pvr.hts";
+    description = "Kodi's Tvheadend HTSP client addon";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ cpages ];
+  };
+
+}
diff --git a/pkgs/applications/video/kodi-packages/pvr-iptvsimple/default.nix b/pkgs/applications/video/kodi-packages/pvr-iptvsimple/default.nix
new file mode 100644
index 000000000000..b508eae8c7e8
--- /dev/null
+++ b/pkgs/applications/video/kodi-packages/pvr-iptvsimple/default.nix
@@ -0,0 +1,22 @@
+{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, zlib, pugixml }:
+buildKodiBinaryAddon rec {
+  pname = "pvr-iptvsimple";
+  namespace = "pvr.iptvsimple";
+  version = "7.4.2";
+
+  src = fetchFromGitHub {
+    owner = "kodi-pvr";
+    repo = "pvr.iptvsimple";
+    rev = "${version}-${rel}";
+    sha256 = "062i922qi0izkvn7v47yhyy2cf3fa7xc3k95b1gm9abfdwkk8ywr";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/kodi-pvr/pvr.iptvsimple";
+    description = "Kodi's IPTV Simple client addon";
+    platforms = platforms.all;
+    license = licenses.gpl2Plus;
+  };
+
+  extraBuildInputs = [ zlib pugixml ];
+}
diff --git a/pkgs/applications/video/kodi-packages/steam-controller/default.nix b/pkgs/applications/video/kodi-packages/steam-controller/default.nix
new file mode 100644
index 000000000000..5eee0eff9415
--- /dev/null
+++ b/pkgs/applications/video/kodi-packages/steam-controller/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildKodiBinaryAddon, fetchFromGitHub, libusb1 }:
+buildKodiBinaryAddon rec {
+  pname = namespace;
+  namespace = "peripheral.steamcontroller";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "kodi-game";
+    repo = namespace;
+    rev = "f68140ca44f163a03d3a625d1f2005a6edef96cb";
+    sha256 = "09lm8i119xlsxxk0c64rnp8iw0crr90v7m8iwi9r31qdmxrdxpmg";
+  };
+
+  extraBuildInputs = [ libusb1 ];
+
+  meta = with lib; {
+    description = "Binary addon for steam controller.";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ edwtjo ];
+  };
+
+}
diff --git a/pkgs/applications/video/kodi-packages/steam-launcher/default.nix b/pkgs/applications/video/kodi-packages/steam-launcher/default.nix
new file mode 100644
index 000000000000..cb140b4fb4d6
--- /dev/null
+++ b/pkgs/applications/video/kodi-packages/steam-launcher/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildKodiAddon, fetchFromGitHub, steam }:
+buildKodiAddon {
+  pname = "steam-launcher";
+  namespace = "script.steam.launcher";
+  version = "3.5.1";
+
+  src = fetchFromGitHub rec {
+    owner = "teeedubb";
+    repo = owner + "-xbmc-repo";
+    rev = "8260bf9b464846a1f1965da495d2f2b7ceb81d55";
+    sha256 = "1fj3ry5s44nf1jzxk4bmnpa4b9p23nrpmpj2a4i6xf94h7jl7p5k";
+  };
+
+  propagatedBuildInputs = [ steam ];
+
+  meta = with lib; {
+    homepage = "https://forum.kodi.tv/showthread.php?tid=157499";
+    description = "Launch Steam in Big Picture Mode from Kodi";
+    longDescription = ''
+      This add-on will close/minimise Kodi, launch Steam in Big
+      Picture Mode and when Steam BPM is exited (either by quitting
+      Steam or returning to the desktop) Kodi will
+      restart/maximise. Running pre/post Steam scripts can be
+      configured via the addon.
+    '';
+    maintainers = with maintainers; [ edwtjo ];
+  };
+}
diff --git a/pkgs/applications/video/kodi-packages/svtplay/default.nix b/pkgs/applications/video/kodi-packages/svtplay/default.nix
new file mode 100644
index 000000000000..cc7d350fa31c
--- /dev/null
+++ b/pkgs/applications/video/kodi-packages/svtplay/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildKodiAddon, fetchFromGitHub }:
+buildKodiAddon rec {
+  pname = "svtplay";
+  namespace = "plugin.video.svtplay";
+  version = "5.1.12";
+
+  src = fetchFromGitHub {
+    owner = "nilzen";
+    repo = "xbmc-" + pname;
+    rev = "v${version}";
+    sha256 = "04j1nhm7mh9chs995lz6bv1vsq5xzk7a7c0lmk4bnfv8jrfpj0w6";
+  };
+
+  meta = with lib; {
+    homepage = "https://forum.kodi.tv/showthread.php?tid=67110";
+    description = "Watch content from SVT Play";
+    longDescription = ''
+      With this addon you can stream content from SVT Play
+      (svtplay.se). The plugin fetches the video URL from the SVT
+      Play website and feeds it to the Kodi video player. HLS (m3u8)
+      is the preferred video format by the plugin.
+    '';
+    platforms = platforms.all;
+    maintainers = with maintainers; [ edwtjo ];
+  };
+}
diff --git a/pkgs/applications/video/kodi-packages/vfs-libarchive/default.nix b/pkgs/applications/video/kodi-packages/vfs-libarchive/default.nix
new file mode 100644
index 000000000000..13100b0dd35a
--- /dev/null
+++ b/pkgs/applications/video/kodi-packages/vfs-libarchive/default.nix
@@ -0,0 +1,22 @@
+{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, libarchive, lzma, bzip2, zlib, lz4, lzo, openssl }:
+buildKodiBinaryAddon rec {
+  pname = namespace;
+  namespace = "vfs.libarchive";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "xbmc";
+    repo = namespace;
+    rev = "${version}-${rel}";
+    sha256 = "1q62p1i6rvqk2zv6f1cpffkh95lgclys2xl4dwyhj3acmqdxd9i5";
+  };
+
+  meta = with lib; {
+    description = "LibArchive Virtual Filesystem add-on for Kodi";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ minijackson ];
+  };
+
+  extraBuildInputs = [ libarchive lzma bzip2 zlib lz4 lzo openssl ];
+}
diff --git a/pkgs/applications/video/kodi-packages/vfs-sftp/default.nix b/pkgs/applications/video/kodi-packages/vfs-sftp/default.nix
new file mode 100644
index 000000000000..7910ab640e91
--- /dev/null
+++ b/pkgs/applications/video/kodi-packages/vfs-sftp/default.nix
@@ -0,0 +1,22 @@
+{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, openssl, libssh, zlib }:
+buildKodiBinaryAddon rec {
+  pname = namespace;
+  namespace = "vfs.sftp";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "xbmc";
+    repo = namespace;
+    rev = "${version}-${rel}";
+    sha256 = "06w74sh8yagrrp7a7rjaz3xrh1j3wdqald9c4b72c33gpk5997dk";
+  };
+
+  meta = with lib; {
+    description = "SFTP Virtual Filesystem add-on for Kodi";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ minijackson ];
+  };
+
+  extraBuildInputs = [ openssl libssh zlib ];
+}
diff --git a/pkgs/applications/video/kodi/build-kodi-addon.nix b/pkgs/applications/video/kodi/build-kodi-addon.nix
new file mode 100644
index 000000000000..cd768b6fa991
--- /dev/null
+++ b/pkgs/applications/video/kodi/build-kodi-addon.nix
@@ -0,0 +1,21 @@
+{ stdenv, toKodiAddon, addonDir }:
+{ name ? "${attrs.pname}-${attrs.version}"
+, namespace
+, sourceDir ? ""
+, ... } @ attrs:
+toKodiAddon (stdenv.mkDerivation ({
+  name = "kodi-" + name;
+
+  dontStrip = true;
+
+  extraRuntimeDependencies = [ ];
+
+  installPhase = ''
+    cd $src/$sourceDir
+    d=$out${addonDir}/${namespace}
+    mkdir -p $d
+    sauce="."
+    [ -d ${namespace} ] && sauce=${namespace}
+    cp -R "$sauce/"* $d
+  '';
+} // attrs))
diff --git a/pkgs/applications/video/kodi/build-kodi-binary-addon.nix b/pkgs/applications/video/kodi/build-kodi-binary-addon.nix
new file mode 100644
index 000000000000..74ce508ab6a6
--- /dev/null
+++ b/pkgs/applications/video/kodi/build-kodi-binary-addon.nix
@@ -0,0 +1,31 @@
+{ stdenv, toKodiAddon, addonDir, cmake, kodi, kodi-platform, libcec_platform }:
+{ name ? "${attrs.pname}-${attrs.version}"
+, namespace
+, version
+, extraBuildInputs ? []
+, extraRuntimeDependencies ? []
+, extraInstallPhase ? "", ... } @ attrs:
+toKodiAddon (stdenv.mkDerivation ({
+  name = "kodi-" + name;
+
+  dontStrip = true;
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ kodi kodi-platform libcec_platform ] ++ extraBuildInputs;
+
+  inherit extraRuntimeDependencies;
+
+  # disables check ensuring install prefix is that of kodi
+  cmakeFlags = [
+    "-DOVERRIDE_PATHS=1"
+  ];
+
+  # kodi checks for addon .so libs existance in the addon folder (share/...)
+  # and the non-wrapped kodi lib/... folder before even trying to dlopen
+  # them. Symlinking .so, as setting LD_LIBRARY_PATH is of no use
+  installPhase = let n = namespace; in ''
+    make install
+    ln -s $out/lib/addons/${n}/${n}.so.${version} $out${addonDir}/${n}/${n}.so.${version}
+    ${extraInstallPhase}
+  '';
+} // attrs))
diff --git a/pkgs/applications/video/kodi/default.nix b/pkgs/applications/video/kodi/default.nix
index 55ba84cc454c..3f382efff11b 100644
--- a/pkgs/applications/video/kodi/default.nix
+++ b/pkgs/applications/video/kodi/default.nix
@@ -1,7 +1,7 @@
 { callPackage, ... } @ args:
 let
   unwrapped = callPackage ./unwrapped.nix (removeAttrs args [ "callPackage" ]);
-  kodiPackages = callPackage ./packages.nix { kodi = unwrapped; };
+  kodiPackages = callPackage ../../../top-level/kodi-packages.nix { kodi = unwrapped; };
 in
   unwrapped.overrideAttrs (oldAttrs: {
     passthru = oldAttrs.passthru // {
diff --git a/pkgs/applications/video/kodi/packages.nix b/pkgs/applications/video/kodi/packages.nix
deleted file mode 100644
index 639b9340ca6e..000000000000
--- a/pkgs/applications/video/kodi/packages.nix
+++ /dev/null
@@ -1,420 +0,0 @@
-{ lib, stdenv, callPackage, fetchFromGitHub
-, cmake, kodi, libcec_platform, tinyxml, pugixml
-, steam, udev, libusb1, jsoncpp, libhdhomerun, zlib
-, python3Packages, expat, glib, nspr, nss, openssl
-, libssh, libarchive, lzma, bzip2, lz4, lzo }:
-
-with lib;
-
-let self = rec {
-
-  addonDir = "/share/kodi/addons";
-  rel = "Matrix";
-
-  inherit kodi;
-
-  # Convert derivation to a kodi module. Stolen from ../../../top-level/python-packages.nix
-  toKodiAddon = drv: drv.overrideAttrs(oldAttrs: {
-    # Use passthru in order to prevent rebuilds when possible.
-    passthru = (oldAttrs.passthru or {})// {
-      kodiAddonFor = kodi;
-      requiredKodiAddons = requiredKodiAddons drv.propagatedBuildInputs;
-    };
-  });
-
-  # Check whether a derivation provides a Kodi addon.
-  hasKodiAddon = drv: drv ? kodiAddonFor && drv.kodiAddonFor == kodi;
-
-  # Get list of required Kodi addons given a list of derivations.
-  requiredKodiAddons = drvs: let
-      modules = filter hasKodiAddon drvs;
-    in unique (modules ++ concatLists (catAttrs "requiredKodiAddons" modules));
-
-  kodi-platform = stdenv.mkDerivation rec {
-    project = "kodi-platform";
-    version = "17.1";
-    name = "${project}-${version}";
-
-    src = fetchFromGitHub {
-      owner = "xbmc";
-      repo = project;
-      rev = "c8188d82678fec6b784597db69a68e74ff4986b5";
-      sha256 = "1r3gs3c6zczmm66qcxh9mr306clwb3p7ykzb70r3jv5jqggiz199";
-    };
-
-    nativeBuildInputs = [ cmake ];
-    buildInputs = [ kodi libcec_platform tinyxml ];
-  };
-
-  buildKodiAddon =
-    { name ? "${attrs.pname}-${attrs.version}"
-    , namespace
-    , sourceDir ? ""
-    , ... } @ attrs:
-  toKodiAddon (stdenv.mkDerivation ({
-    name = "kodi-" + name;
-
-    dontStrip = true;
-
-    extraRuntimeDependencies = [ ];
-
-    installPhase = ''
-      cd $src/$sourceDir
-      d=$out${addonDir}/${namespace}
-      mkdir -p $d
-      sauce="."
-      [ -d ${namespace} ] && sauce=${namespace}
-      cp -R "$sauce/"* $d
-    '';
-  } // attrs));
-
-  buildKodiBinaryAddon =
-    { name ? "${attrs.pname}-${attrs.version}"
-    , namespace
-    , version
-    , extraBuildInputs ? []
-    , extraRuntimeDependencies ? []
-    , extraInstallPhase ? "", ... } @ attrs:
-  toKodiAddon (stdenv.mkDerivation ({
-    name = "kodi-" + name;
-
-    dontStrip = true;
-
-    nativeBuildInputs = [ cmake ];
-    buildInputs = [ kodi kodi-platform libcec_platform ] ++ extraBuildInputs;
-
-    inherit extraRuntimeDependencies;
-
-    # disables check ensuring install prefix is that of kodi
-    cmakeFlags = [
-      "-DOVERRIDE_PATHS=1"
-    ];
-
-    # kodi checks for addon .so libs existance in the addon folder (share/...)
-    # and the non-wrapped kodi lib/... folder before even trying to dlopen
-    # them. Symlinking .so, as setting LD_LIBRARY_PATH is of no use
-    installPhase = let n = namespace; in ''
-      make install
-      ln -s $out/lib/addons/${n}/${n}.so.${version} $out${addonDir}/${n}/${n}.so.${version}
-      ${extraInstallPhase}
-    '';
-  } // attrs));
-
-  controllers = let
-    pname = "game-controller";
-    version = "1.0.3";
-
-    src = fetchFromGitHub {
-      owner = "kodi-game";
-      repo = "kodi-game-controllers";
-      rev = "01acb5b6e8b85392b3cb298b034aadb1b24ccf18";
-      sha256 = "0sbc0w0fwbp7rbmbgb6a1kglhnn5g85hijcbbvf5x6jdq9v3f1qb";
-    };
-
-    meta = {
-      description = "Add support for different gaming controllers.";
-      platforms = platforms.all;
-      maintainers = with maintainers; [ edwtjo ];
-    };
-
-    mkController = controller: {
-        ${controller} = buildKodiAddon rec {
-          pname = pname + "-" + controller;
-          namespace = "game.controller." + controller;
-          sourceDir = "addons/" + namespace;
-          inherit version src meta;
-        };
-      };
-    in (mkController "dreamcast")
-    // (mkController "gba")
-    // (mkController "genesis")
-    // (mkController "mouse")
-    // (mkController "n64")
-    // (mkController "nes")
-    // (mkController "ps");
-
-  joystick = buildKodiBinaryAddon rec {
-    pname = namespace;
-    namespace = "peripheral.joystick";
-    version = "1.7.1";
-
-    src = fetchFromGitHub {
-      owner = "xbmc";
-      repo = namespace;
-      rev = "${version}-${rel}";
-      sha256 = "1dhj4afr9kj938xx70fq5r409mz6lbw4n581ljvdjj9lq7akc914";
-    };
-
-    meta = {
-      description = "Binary addon for raw joystick input.";
-      platforms = platforms.all;
-      maintainers = with maintainers; [ edwtjo ];
-    };
-
-    extraBuildInputs = [ tinyxml udev ];
-  };
-
-  svtplay = buildKodiAddon rec {
-
-    pname = "svtplay";
-    namespace = "plugin.video.svtplay";
-    version = "5.1.12";
-
-    src = fetchFromGitHub {
-      name = pname + "-" + version + ".tar.gz";
-      owner = "nilzen";
-      repo = "xbmc-" + pname;
-      rev = "v${version}";
-      sha256 = "04j1nhm7mh9chs995lz6bv1vsq5xzk7a7c0lmk4bnfv8jrfpj0w6";
-    };
-
-    meta = {
-      homepage = "https://forum.kodi.tv/showthread.php?tid=67110";
-      description = "Watch content from SVT Play";
-      longDescription = ''
-        With this addon you can stream content from SVT Play
-        (svtplay.se). The plugin fetches the video URL from the SVT
-        Play website and feeds it to the Kodi video player. HLS (m3u8)
-        is the preferred video format by the plugin.
-      '';
-      platforms = platforms.all;
-      maintainers = with maintainers; [ edwtjo ];
-    };
-
-  };
-
-  steam-controller = buildKodiBinaryAddon rec {
-    pname = namespace;
-    namespace = "peripheral.steamcontroller";
-    version = "0.11.0";
-
-    src = fetchFromGitHub {
-      owner = "kodi-game";
-      repo = namespace;
-      rev = "f68140ca44f163a03d3a625d1f2005a6edef96cb";
-      sha256 = "09lm8i119xlsxxk0c64rnp8iw0crr90v7m8iwi9r31qdmxrdxpmg";
-    };
-
-    extraBuildInputs = [ libusb1 ];
-
-    meta = {
-      description = "Binary addon for steam controller.";
-      platforms = platforms.all;
-      maintainers = with maintainers; [ edwtjo ];
-    };
-
-  };
-
-  steam-launcher = buildKodiAddon {
-
-    pname = "steam-launcher";
-    namespace = "script.steam.launcher";
-    version = "3.5.1";
-
-    src = fetchFromGitHub rec {
-      owner = "teeedubb";
-      repo = owner + "-xbmc-repo";
-      rev = "8260bf9b464846a1f1965da495d2f2b7ceb81d55";
-      sha256 = "1fj3ry5s44nf1jzxk4bmnpa4b9p23nrpmpj2a4i6xf94h7jl7p5k";
-    };
-
-    propagatedBuildInputs = [ steam ];
-
-    meta = {
-      homepage = "https://forum.kodi.tv/showthread.php?tid=157499";
-      description = "Launch Steam in Big Picture Mode from Kodi";
-      longDescription = ''
-        This add-on will close/minimise Kodi, launch Steam in Big
-        Picture Mode and when Steam BPM is exited (either by quitting
-        Steam or returning to the desktop) Kodi will
-        restart/maximise. Running pre/post Steam scripts can be
-        configured via the addon.
-      '';
-      maintainers = with maintainers; [ edwtjo ];
-    };
-  };
-
-  pdfreader = buildKodiAddon rec {
-    pname = "pdfreader";
-    namespace = "plugin.image.pdf";
-    version = "2.0.2";
-
-    src = fetchFromGitHub {
-      owner = "i96751414";
-      repo = "plugin.image.pdfreader";
-      rev = "v${version}";
-      sha256 = "0nkqhlm1gyagq6xpdgqvd5qxyr2ngpml9smdmzfabc8b972mwjml";
-    };
-
-    meta = {
-      homepage = "https://forum.kodi.tv/showthread.php?tid=187421";
-      description = "A comic book reader";
-      maintainers = with maintainers; [ edwtjo ];
-    };
-  };
-
-  pvr-hts = buildKodiBinaryAddon rec {
-
-    pname = "pvr-hts";
-    namespace = "pvr.hts";
-    version = "8.2.2";
-
-    src = fetchFromGitHub {
-      owner = "kodi-pvr";
-      repo = "pvr.hts";
-      rev = "${version}-${rel}";
-      sha256 = "0jnn9gfjl556acqjf92wzzn371gxymhbbi665nqgg2gjcan0a49q";
-    };
-
-    meta = {
-      homepage = "https://github.com/kodi-pvr/pvr.hts";
-      description = "Kodi's Tvheadend HTSP client addon";
-      platforms = platforms.all;
-      maintainers = with maintainers; [ cpages ];
-    };
-
-  };
-
-  pvr-hdhomerun = buildKodiBinaryAddon rec {
-
-    pname = "pvr-hdhomerun";
-    namespace = "pvr.hdhomerun";
-    version = "7.1.0";
-
-    src = fetchFromGitHub {
-      owner = "kodi-pvr";
-      repo = "pvr.hdhomerun";
-      rev = "${version}-${rel}";
-      sha256 = "0gbwjssnd319csq2kwlyjj1rskg19m1dxac5dl2dymvx5hn3zrgm";
-    };
-
-    meta = {
-      homepage = "https://github.com/kodi-pvr/pvr.hdhomerun";
-      description = "Kodi's HDHomeRun PVR client addon";
-      platforms = platforms.all;
-      maintainers = with maintainers; [ titanous ];
-    };
-
-    extraBuildInputs = [ jsoncpp libhdhomerun ];
-
-  };
-
-  pvr-iptvsimple = buildKodiBinaryAddon rec {
-
-    pname = "pvr-iptvsimple";
-    namespace = "pvr.iptvsimple";
-    version = "7.4.2";
-
-    src = fetchFromGitHub {
-      owner = "kodi-pvr";
-      repo = "pvr.iptvsimple";
-      rev = "${version}-${rel}";
-      sha256 = "062i922qi0izkvn7v47yhyy2cf3fa7xc3k95b1gm9abfdwkk8ywr";
-    };
-
-    meta = {
-      homepage = "https://github.com/kodi-pvr/pvr.iptvsimple";
-      description = "Kodi's IPTV Simple client addon";
-      platforms = platforms.all;
-      maintainers = with maintainers; [ ];
-      license = licenses.gpl2Plus;
-    };
-
-    extraBuildInputs = [ zlib pugixml ];
-  };
-
-  osmc-skin = buildKodiAddon rec {
-
-    pname = "osmc-skin";
-    namespace = "skin.osmc";
-    version = "18.0.0";
-
-    src = fetchFromGitHub {
-      owner = "osmc";
-      repo = namespace;
-      rev = "40a6c318641e2cbeac58fb0e7dde9c2beac737a0";
-      sha256 = "1l7hyfj5zvjxjdm94y325bmy1naak455b9l8952sb0gllzrcwj6s";
-    };
-
-    meta = {
-      homepage = "https://github.com/osmc/skin.osmc";
-      description = "The default skin for OSMC";
-      platforms = platforms.all;
-      maintainers = with maintainers; [ worldofpeace ];
-      license = licenses.cc-by-nc-sa-30;
-    };
-  };
-
-  inputstream-adaptive = buildKodiBinaryAddon rec {
-
-    pname = "inputstream-adaptive";
-    namespace = "inputstream.adaptive";
-    version = "2.6.7";
-
-    src = fetchFromGitHub {
-      owner = "peak3d";
-      repo = "inputstream.adaptive";
-      rev = "${version}-${rel}";
-      sha256 = "1pwqmbr78wp12jn6rwv63npdfc456adwz0amlxf6gvgg43li6p7s";
-    };
-
-    extraBuildInputs = [ expat ];
-
-    extraRuntimeDependencies = [ glib nspr nss stdenv.cc.cc.lib ];
-
-    extraInstallPhase = let n = namespace; in ''
-      ln -s $out/lib/addons/${n}/libssd_wv.so $out/${addonDir}/${n}/libssd_wv.so
-    '';
-
-    meta = {
-      homepage = "https://github.com/peak3d/inputstream.adaptive";
-      description = "Kodi inputstream addon for several manifest types";
-      platforms = platforms.all;
-      maintainers = with maintainers; [ sephalon ];
-    };
-  };
-
-  vfs-sftp = buildKodiBinaryAddon rec {
-    pname = namespace;
-    namespace = "vfs.sftp";
-    version = "2.0.0";
-
-    src = fetchFromGitHub {
-      owner = "xbmc";
-      repo = namespace;
-      rev = "${version}-${rel}";
-      sha256 = "06w74sh8yagrrp7a7rjaz3xrh1j3wdqald9c4b72c33gpk5997dk";
-    };
-
-    meta = with lib; {
-      description = "SFTP Virtual Filesystem add-on for Kodi";
-      license = licenses.gpl2Plus;
-      platforms = platforms.all;
-      maintainers = with maintainers; [ minijackson ];
-    };
-
-    extraBuildInputs = [ openssl libssh zlib ];
-  };
-
-  vfs-libarchive = buildKodiBinaryAddon rec {
-    pname = namespace;
-    namespace = "vfs.libarchive";
-    version = "2.0.0";
-
-    src = fetchFromGitHub {
-      owner = "xbmc";
-      repo = namespace;
-      rev = "${version}-${rel}";
-      sha256 = "1q62p1i6rvqk2zv6f1cpffkh95lgclys2xl4dwyhj3acmqdxd9i5";
-    };
-
-    meta = with lib; {
-      description = "LibArchive Virtual Filesystem add-on for Kodi";
-      license = licenses.gpl2Plus;
-      platforms = platforms.all;
-      maintainers = with maintainers; [ minijackson ];
-    };
-
-    extraBuildInputs = [ libarchive lzma bzip2 zlib lz4 lzo openssl ];
-  };
-}; in self
diff --git a/pkgs/top-level/kodi-packages.nix b/pkgs/top-level/kodi-packages.nix
new file mode 100644
index 000000000000..d31eb3b0ef82
--- /dev/null
+++ b/pkgs/top-level/kodi-packages.nix
@@ -0,0 +1,89 @@
+{ lib, newScope, kodi }:
+
+with lib;
+
+let self = rec {
+
+  addonDir = "/share/kodi/addons";
+  rel = "Matrix";
+
+  callPackage = newScope self;
+
+  inherit kodi;
+
+  # Convert derivation to a kodi module. Stolen from ../../../top-level/python-packages.nix
+  toKodiAddon = drv: drv.overrideAttrs (oldAttrs: {
+    # Use passthru in order to prevent rebuilds when possible.
+    passthru = (oldAttrs.passthru or {}) // {
+      kodiAddonFor = kodi;
+      requiredKodiAddons = requiredKodiAddons drv.propagatedBuildInputs;
+    };
+  });
+
+  # Check whether a derivation provides a Kodi addon.
+  hasKodiAddon = drv: drv ? kodiAddonFor && drv.kodiAddonFor == kodi;
+
+  # Get list of required Kodi addons given a list of derivations.
+  requiredKodiAddons = drvs:
+    let
+      modules = filter hasKodiAddon drvs;
+    in
+      unique (modules ++ concatLists (catAttrs "requiredKodiAddons" modules));
+
+  # package builders
+
+  buildKodiAddon = callPackage ../applications/video/kodi/build-kodi-addon.nix { };
+
+  buildKodiBinaryAddon = callPackage ../applications/video/kodi/build-kodi-binary-addon.nix { };
+
+  # regular packages
+
+  kodi-platform = callPackage ../applications/video/kodi-packages/kodi-platform { };
+
+  # addon packages
+
+  controllers = {
+    default = callPackage ../applications/video/kodi-packages/controllers { controller = "default"; };
+
+    dreamcast = callPackage ../applications/video/kodi-packages/controllers { controller = "dreamcast"; };
+
+    gba = callPackage ../applications/video/kodi-packages/controllers { controller = "gba"; };
+
+    genesis = callPackage ../applications/video/kodi-packages/controllers { controller = "genesis"; };
+
+    mouse = callPackage ../applications/video/kodi-packages/controllers { controller = "mouse"; };
+
+    n64 = callPackage ../applications/video/kodi-packages/controllers { controller = "n64"; };
+
+    nes = callPackage ../applications/video/kodi-packages/controllers { controller = "nes"; };
+
+    ps = callPackage ../applications/video/kodi-packages/controllers { controller = "ps"; };
+
+    snes = callPackage ../applications/video/kodi-packages/controllers { controller = "snes"; };
+  };
+
+  joystick = callPackage ../applications/video/kodi-packages/joystick { };
+
+  svtplay = callPackage ../applications/video/kodi-packages/svtplay { };
+
+  steam-controller = callPackage ../applications/video/kodi-packages/steam-controller { };
+
+  steam-launcher = callPackage ../applications/video/kodi-packages/steam-launcher { };
+
+  pdfreader = callPackage ../applications/video/kodi-packages/pdfreader { };
+
+  pvr-hts = callPackage ../applications/video/kodi-packages/pvr-hts { };
+
+  pvr-hdhomerun = callPackage ../applications/video/kodi-packages/pvr-hdhomerun { };
+
+  pvr-iptvsimple = callPackage ../applications/video/kodi-packages/pvr-iptvsimple { };
+
+  osmc-skin = callPackage ../applications/video/kodi-packages/osmc-skin { };
+
+  inputstream-adaptive = callPackage ../applications/video/kodi-packages/inputstream-adaptive { };
+
+  vfs-sftp = callPackage ../applications/video/kodi-packages/vfs-sftp { };
+
+  vfs-libarchive = callPackage ../applications/video/kodi-packages/vfs-libarchive { };
+
+}; in self