Merge pull request #116493 from aanderse/kodi-wip

kodi.packages: refactor, netflix: init at 1.14.1
This commit is contained in:
Aaron Andersen 2021-03-18 20:22:21 -04:00 committed by GitHub
commit 67272ac8fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with 706 additions and 591 deletions

@ -0,0 +1,23 @@
{ writeShellScript
, nix
, curl
, gzip
, xmlstarlet
, common-updater-scripts
}:
{ attrPath }:
let
url = "http://mirrors.kodi.tv/addons/matrix/addons.xml.gz";
updateScript = writeShellScript "update.sh" ''
set -ex
attrPath=$1
namespace=$(${nix}/bin/nix-instantiate $systemArg --eval -E "with import ./. {}; $attrPath.namespace" | tr -d '"')
version=$(${curl}/bin/curl -s -L ${url} | ${gzip}/bin/gunzip -c | ${xmlstarlet}/bin/xml select -T -t -m "//addons/addon[@id='$namespace']" -v @version)
${common-updater-scripts}/bin/update-source-version "$attrPath" "$version"
'';
in
[ updateScript attrPath ]

@ -0,0 +1,21 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "certifi";
namespace = "script.module.certifi";
version = "2019.11.28+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "0vsd68izv1ix0hb1gm74qq3zff0sxmhfhjyh7y9005zzp2gpi62v";
};
passthru.updateScript = addonUpdateScript {
attrPath = "kodi.packages.certifi";
};
meta = with lib; {
homepage = "https://certifi.io";
description = "Python package for providing Mozilla's CA Bundle";
license = licenses.mpl20;
};
}

@ -0,0 +1,21 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "chardet";
namespace = "script.module.chardet";
version = "3.0.4+matrix.3";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "05928dj4fsj2zg8ajdial3sdf8izddq64sr0al3zy1gqw91jp80f";
};
passthru.updateScript = addonUpdateScript {
attrPath = "kodi.packages.chardet";
};
meta = with lib; {
homepage = "https://github.com/Freso/script.module.chardet";
description = "Universal encoding detector";
license = licenses.lgpl2Only;
};
}

@ -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 ];
};
}

@ -0,0 +1,21 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "idna";
namespace = "script.module.idna";
version = "2.8.1+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "02s75fhfmbs3a38wvxba51aj3lv5bidshjdkl6yjfji6waxpr9xh";
};
passthru.updateScript = addonUpdateScript {
attrPath = "kodi.packages.idna";
};
meta = with lib; {
homepage = "https://github.com/Freso/script.module.idna";
description = "Internationalized Domain Names for Python";
license = licenses.bsd3;
};
}

@ -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 ];
};
}

@ -0,0 +1,21 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "inputstreamhelper";
namespace = "script.module.inputstreamhelper";
version = "0.5.2+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "18lkksljfa57w69yklbldf7dgyykrm84pd10mdjdqdm88fdiiijk";
};
passthru.updateScript = addonUpdateScript {
attrPath = "kodi.packages.inputstreamhelper";
};
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";
license = licenses.mit;
};
}

@ -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 ];
}

@ -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 ];
}

@ -0,0 +1,21 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "myconnpy";
namespace = "script.module.myconnpy";
version = "8.0.18+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "1cx3qdzw9lkkmbyvyrmc2i193is20fihn2sfl7kmv43f708vam0k";
};
passthru.updateScript = addonUpdateScript {
attrPath = "kodi.packages.myconnpy";
};
meta = with lib; {
homepage = "http://dev.mysql.com/doc/connector-python/en/index.html";
description = "MySQL Connector/Python";
license = licenses.gpl2Only;
};
}

@ -0,0 +1,26 @@
{ lib, buildKodiAddon, fetchFromGitHub, signals, inputstreamhelper, requests, myconnpy }:
buildKodiAddon rec {
pname = "netflix";
namespace = "plugin.video.netflix";
version = "1.14.1";
src = fetchFromGitHub {
owner = "CastagnaIT";
repo = namespace;
rev = "v${version}";
sha256 = "0vv3234gg4brp0gvrsl4vdskmpfbyk4z7cjmmj31zn4m8j33japn";
};
propagatedBuildInputs = [
signals
inputstreamhelper
requests
myconnpy
];
meta = with lib; {
homepage = "https://github.com/CastagnaIT/plugin.video.netflix";
description = "Netflix VOD Services Add-on";
license = licenses.mit;
};
}

@ -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;
};
}

@ -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 ];
};
}

@ -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 ];
}

@ -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 ];
};
}

@ -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 ];
}

@ -0,0 +1,28 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript, certifi, chardet, idna, urllib3 }:
buildKodiAddon rec {
pname = "requests";
namespace = "script.module.requests";
version = "2.22.0+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "09576galkyzhw8fhy2h4aablm5rm2v08g0mdmg9nn55dlxhkkljq";
};
propagatedBuildInputs = [
certifi
chardet
idna
urllib3
];
passthru.updateScript = addonUpdateScript {
attrPath = "kodi.packages.requests";
};
meta = with lib; {
homepage = "http://python-requests.org";
description = "Python HTTP for Humans";
license = licenses.asl20;
};
}

@ -0,0 +1,21 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "signals";
namespace = "script.module.addon.signals";
version = "0.0.6+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "1qcjbakch8hvx02wc01zv014nmzgn6ahc4n2bj5mzr114ppd3hjs";
};
passthru.updateScript = addonUpdateScript {
attrPath = "kodi.packages.signals";
};
meta = with lib; {
homepage = "https://github.com/ruuk/script.module.addon.signals";
description = "Provides signal/slot mechanism for inter-addon communication";
license = licenses.lgpl21Only;
};
}

@ -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 ];
};
}

@ -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 ];
};
}

@ -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 ];
};
}

@ -0,0 +1,21 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "urllib3";
namespace = "script.module.urllib3";
version = "1.25.8+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "080yq8ns0sag6rmdag1hjwi0whcmp35wzqjp3by92m81cpszs75q";
};
passthru.updateScript = addonUpdateScript {
attrPath = "kodi.packages.urllib3";
};
meta = with lib; {
homepage = "https://urllib3.readthedocs.io/en/latest/";
description = "HTTP library with thread-safe connection pooling, file post, and more";
license = licenses.mit;
};
}

@ -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 ];
}

@ -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 ];
}

@ -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))

@ -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))

@ -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 // {

@ -1,560 +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));
advanced-launcher = buildKodiAddon rec {
pname = "advanced-launcher";
namespace = "plugin.program.advanced.launcher";
version = "2.5.8";
src = fetchFromGitHub {
owner = "edwtjo";
repo = pname;
rev = version;
sha256 = "142vvgs37asq5m54xqhjzqvgmb0xlirvm0kz6lxaqynp0vvgrkx2";
};
meta = {
homepage = "https://forum.kodi.tv/showthread.php?tid=85724";
description = "A program launcher for Kodi";
longDescription = ''
Advanced Launcher allows you to start any Linux, Windows and
macOS external applications (with command line support or not)
directly from the Kodi GUI. Advanced Launcher also give you
the possibility to edit, download (from Internet resources)
and manage all the meta-data (informations and images) related
to these applications.
'';
platforms = platforms.all;
maintainers = with maintainers; [ edwtjo ];
broken = true; # requires port to python3
};
};
advanced-emulator-launcher = buildKodiAddon rec {
pname = "advanced-emulator-launcher";
namespace = "plugin.program.advanced.emulator.launcher";
version = "0.9.6";
src = fetchFromGitHub {
owner = "Wintermute0110";
repo = namespace;
rev = version;
sha256 = "1sv9z77jj6bam6llcnd9b3dgkbvhwad2m1v541rv3acrackms2z2";
};
meta = {
homepage = "https://forum.kodi.tv/showthread.php?tid=287826";
description = "A program launcher for Kodi";
longDescription = ''
Advanced Emulator Launcher is a multi-emulator front-end for Kodi
scalable to collections of thousands of ROMs. Includes offline scrapers
for MAME and No-Intro ROM sets and also supports scrapping ROM metadata
and artwork online. ROM auditing for No-Intro ROMs using No-Intro XML
DATs. Launching of games and standalone applications is also available.
'';
platforms = platforms.all;
maintainers = with maintainers; [ edwtjo ];
broken = true; # requires port to python3
};
};
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 "default")
// (mkController "dreamcast")
// (mkController "gba")
// (mkController "genesis")
// (mkController "mouse")
// (mkController "n64")
// (mkController "nes")
// (mkController "ps")
// (mkController "snes");
hyper-launcher = let
pname = "hyper-launcher";
version = "1.5.2";
src = fetchFromGitHub rec {
name = pname + "-" + version + ".tar.gz";
owner = "teeedubb";
repo = owner + "-xbmc-repo";
rev = "f958ba93fe85b9c9025b1745d89c2db2e7dd9bf6";
sha256 = "1dvff24fbas25k5kvca4ssks9l1g5rfa3hl8lqxczkaqi3pp41j5";
};
meta = {
homepage = "https://forum.kodi.tv/showthread.php?tid=258159";
description = "A ROM launcher for Kodi that uses HyperSpin assets.";
maintainers = with maintainers; [ edwtjo ];
broken = true; # requires port to python3
};
in {
service = buildKodiAddon {
pname = pname + "-service";
version = "1.2.1";
namespace = "service.hyper.launcher";
inherit src meta;
};
plugin = buildKodiAddon {
namespace = "plugin.hyper.launcher";
inherit pname version src meta;
};
};
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 ];
};
simpleplugin = buildKodiAddon rec {
pname = "simpleplugin";
namespace = "script.module.simpleplugin";
version = "2.3.2";
src = fetchFromGitHub {
owner = "romanvm";
repo = namespace;
rev = "v.${version}";
sha256 = "0myar8dqjigb75pcc8zx3i5z79p1ifgphgb82s5syqywk0zaxm3j";
};
meta = {
homepage = src.meta.homepage;
description = "Simpleplugin API";
license = licenses.gpl3;
broken = true; # requires port to python3
};
};
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;
};
};
yatp = python3Packages.toPythonModule (buildKodiAddon rec {
pname = "yatp";
namespace = "plugin.video.yatp";
version = "3.3.2";
src = fetchFromGitHub {
owner = "romanvm";
repo = "kodi.yatp";
rev = "v.${version}";
sha256 = "12g1f57sx7dy6wy7ljl7siz2qs1kxcmijcg7xx2xpvmq61x9qa2d";
};
patches = [ ./yatp/dont-monkey.patch ];
propagatedBuildInputs = [
simpleplugin
python3Packages.requests
python3Packages.libtorrent-rasterbar
];
meta = {
homepage = src.meta.homepage;
description = "Yet Another Torrent Player: libtorrent-based torrent streaming for Kodi";
license = licenses.gpl3;
broken = true; # requires port to python3
};
});
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

@ -1,5 +1,10 @@
{ lib, makeWrapper, buildEnv, kodi, addons }:
let
# linux distros are supposed to provide pillow and pycryptodome
requiredPythonPackages = with kodi.pythonPackages; [ pillow pycryptodome] ++ addons;
in
buildEnv {
name = "${kodi.name}-env";
@ -13,7 +18,7 @@ buildEnv {
for exe in kodi{,-standalone}
do
makeWrapper ${kodi}/bin/$exe $out/bin/$exe \
--prefix PYTHONPATH : ${kodi.pythonPackages.makePythonPath addons} \
--prefix PYTHONPATH : ${kodi.pythonPackages.makePythonPath requiredPythonPackages} \
--prefix KODI_HOME : $out/share/kodi \
--prefix LD_LIBRARY_PATH ":" "${lib.makeLibraryPath
(lib.concatMap

@ -1,29 +0,0 @@
diff --git a/plugin.video.yatp/server.py b/plugin.video.yatp/server.py
index 1adcbb5..488b72c 100644
--- a/plugin.video.yatp/server.py
+++ b/plugin.video.yatp/server.py
@@ -20,24 +20,8 @@ addon = Addon()
_ = addon.initialize_gettext()
addon.log_notice('Starting Torrent Server...')
-# A monkey-patch to set the necessary librorrent version
-librorrent_addon = Addon('script.module.libtorrent')
-orig_custom_version = librorrent_addon.get_setting('custom_version', False)
-orig_set_version = librorrent_addon.get_setting('set_version', False)
-librorrent_addon.set_setting('custom_version', 'true')
-if addon.libtorrent_version == '1.0.9':
- librorrent_addon.set_setting('set_version', '4')
-elif addon.libtorrent_version == '1.1.0':
- librorrent_addon.set_setting('set_version', '5')
-elif addon.libtorrent_version == '1.1.1':
- librorrent_addon.set_setting('set_version', '6')
-else:
- librorrent_addon.set_setting('set_version', '0')
-
from libs.server import wsgi_app
-librorrent_addon.set_setting('custom_version', orig_custom_version)
-librorrent_addon.set_setting('set_version', orig_set_version)
# ======
if addon.enable_limits:

@ -0,0 +1,113 @@
{ 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 update scripts
addonUpdateScript = callPackage ../applications/video/kodi-packages/addon-update-script { };
# 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 { };
netflix = callPackage ../applications/video/kodi-packages/netflix { };
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 { };
vfs-sftp = callPackage ../applications/video/kodi-packages/vfs-sftp { };
vfs-libarchive = callPackage ../applications/video/kodi-packages/vfs-libarchive { };
# addon packages (dependencies)
certifi = callPackage ../applications/video/kodi-packages/certifi { };
chardet = callPackage ../applications/video/kodi-packages/chardet { };
idna = callPackage ../applications/video/kodi-packages/idna { };
inputstream-adaptive = callPackage ../applications/video/kodi-packages/inputstream-adaptive { };
inputstreamhelper = callPackage ../applications/video/kodi-packages/inputstreamhelper { };
myconnpy = callPackage ../applications/video/kodi-packages/myconnpy { };
requests = callPackage ../applications/video/kodi-packages/requests { };
signals = callPackage ../applications/video/kodi-packages/signals { };
urllib3 = callPackage ../applications/video/kodi-packages/urllib3 { };
}; in self