kodiPlugins: rename to kodiPackages

master
Aaron Andersen 2021-03-09 20:53:45 -05:00
parent 0fad702a50
commit 917f7efdc5
4 changed files with 85 additions and 76 deletions

View File

@ -8,31 +8,31 @@ with lib;
let self = rec {
pluginDir = "/share/kodi/addons";
addonDir = "/share/kodi/addons";
rel = "Matrix";
kodi = kodiPlain;
# Convert derivation to a kodi module. Stolen from ../../../top-level/python-packages.nix
toKodiPlugin = drv: drv.overrideAttrs(oldAttrs: {
toKodiAddon = drv: drv.overrideAttrs(oldAttrs: {
# Use passthru in order to prevent rebuilds when possible.
passthru = (oldAttrs.passthru or {})// {
kodiPluginFor = kodi;
requiredKodiPlugins = requiredKodiPlugins drv.propagatedBuildInputs;
kodiAddonFor = kodi;
requiredKodiAddons = requiredKodiAddons drv.propagatedBuildInputs;
};
});
# Check whether a derivation provides a Kodi plugin.
hasKodiPlugin = drv: drv ? kodiPluginFor && drv.kodiPluginFor == kodi;
# Check whether a derivation provides a Kodi addon.
hasKodiAddon = drv: drv ? kodiAddonFor && drv.kodiAddonFor == kodi;
# Get list of required Kodi plugins given a list of derivations.
requiredKodiPlugins = drvs: let
modules = filter hasKodiPlugin drvs;
in unique (modules ++ concatLists (catAttrs "requiredKodiPlugins" modules));
# 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));
kodiWithPlugins = func: callPackage ./wrapper.nix {
kodiWithAddons = func: callPackage ./wrapper.nix {
inherit kodi;
plugins = requiredKodiPlugins (func self);
addons = requiredKodiAddons (func self);
};
kodi-platform = stdenv.mkDerivation rec {
@ -51,9 +51,13 @@ let self = rec {
buildInputs = [ kodiPlain libcec_platform tinyxml ];
};
mkKodiPlugin = { plugin, namespace, version, sourceDir ? null, ... }@args:
toKodiPlugin (stdenv.mkDerivation ({
name = "kodi-plugin-${plugin}-${version}";
buildKodiAddon =
{ name ? "${attrs.pname}-${attrs.version}"
, namespace
, sourceDir ? null
, ... } @ attrs:
toKodiAddon (stdenv.mkDerivation ({
name = "kodi-" + name;
dontStrip = true;
@ -61,18 +65,23 @@ let self = rec {
installPhase = ''
${if sourceDir == null then "" else "cd $src/$sourceDir"}
d=$out${pluginDir}/${namespace}
d=$out${addonDir}/${namespace}
mkdir -p $d
sauce="."
[ -d ${namespace} ] && sauce=${namespace}
cp -R "$sauce/"* $d
'';
} // args));
} // attrs));
mkKodiABIPlugin = { plugin, namespace, version, extraBuildInputs ? [],
extraRuntimeDependencies ? [], extraInstallPhase ? "", ... }@args:
toKodiPlugin (stdenv.mkDerivation ({
name = "kodi-plugin-${plugin}-${version}";
buildKodiBinaryAddon =
{ name ? "${attrs.pname}-${attrs.version}"
, namespace
, version
, extraBuildInputs ? []
, extraRuntimeDependencies ? []
, extraInstallPhase ? "", ... } @ attrs:
toKodiAddon (stdenv.mkDerivation ({
name = "kodi-" + name;
dontStrip = true;
@ -86,25 +95,25 @@ let self = rec {
"-DOVERRIDE_PATHS=1"
];
# kodi checks for plugin .so libs existance in the addon folder (share/...)
# 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${pluginDir}/${n}/${n}.so.${version}
ln -s $out/lib/addons/${n}/${n}.so.${version} $out${addonDir}/${n}/${n}.so.${version}
${extraInstallPhase}
'';
} // args));
} // attrs));
advanced-launcher = mkKodiPlugin rec {
advanced-launcher = buildKodiAddon rec {
plugin = "advanced-launcher";
pname = "advanced-launcher";
namespace = "plugin.program.advanced.launcher";
version = "2.5.8";
src = fetchFromGitHub {
owner = "edwtjo";
repo = plugin;
repo = pname;
rev = version;
sha256 = "142vvgs37asq5m54xqhjzqvgmb0xlirvm0kz6lxaqynp0vvgrkx2";
};
@ -127,9 +136,9 @@ let self = rec {
};
advanced-emulator-launcher = mkKodiPlugin rec {
advanced-emulator-launcher = buildKodiAddon rec {
plugin = "advanced-emulator-launcher";
pname = "advanced-emulator-launcher";
namespace = "plugin.program.advanced.emulator.launcher";
version = "0.9.6";
@ -175,8 +184,8 @@ let self = rec {
};
mkController = controller: {
${controller} = mkKodiPlugin rec {
plugin = pname + "-" + controller;
${controller} = buildKodiAddon rec {
pname = pname + "-" + controller;
namespace = "game.controller." + controller;
sourceDir = "addons/" + namespace;
inherit version src meta;
@ -209,23 +218,22 @@ let self = rec {
broken = true; # requires port to python3
};
in {
service = mkKodiPlugin {
plugin = pname + "-service";
service = buildKodiAddon {
pname = pname + "-service";
version = "1.2.1";
namespace = "service.hyper.launcher";
inherit src meta;
};
plugin = mkKodiPlugin {
plugin = pname;
plugin = buildKodiAddon {
namespace = "plugin.hyper.launcher";
inherit version src meta;
inherit pname version src meta;
};
};
joystick = mkKodiABIPlugin rec {
joystick = buildKodiBinaryAddon rec {
pname = namespace;
namespace = "peripheral.joystick";
version = "1.7.1";
plugin = namespace;
src = fetchFromGitHub {
owner = "xbmc";
@ -243,8 +251,8 @@ let self = rec {
extraBuildInputs = [ tinyxml udev ];
};
simpleplugin = mkKodiPlugin rec {
plugin = "simpleplugin";
simpleplugin = buildKodiAddon rec {
pname = "simpleplugin";
namespace = "script.module.simpleplugin";
version = "2.3.2";
@ -263,16 +271,16 @@ let self = rec {
};
};
svtplay = mkKodiPlugin rec {
svtplay = buildKodiAddon rec {
plugin = "svtplay";
pname = "svtplay";
namespace = "plugin.video.svtplay";
version = "5.1.12";
src = fetchFromGitHub {
name = plugin + "-" + version + ".tar.gz";
name = pname + "-" + version + ".tar.gz";
owner = "nilzen";
repo = "xbmc-" + plugin;
repo = "xbmc-" + pname;
rev = "v${version}";
sha256 = "04j1nhm7mh9chs995lz6bv1vsq5xzk7a7c0lmk4bnfv8jrfpj0w6";
};
@ -292,10 +300,10 @@ let self = rec {
};
steam-controller = mkKodiABIPlugin rec {
steam-controller = buildKodiBinaryAddon rec {
pname = namespace;
namespace = "peripheral.steamcontroller";
version = "0.11.0";
plugin = namespace;
src = fetchFromGitHub {
owner = "kodi-game";
@ -314,9 +322,9 @@ let self = rec {
};
steam-launcher = mkKodiPlugin {
steam-launcher = buildKodiAddon {
plugin = "steam-launcher";
pname = "steam-launcher";
namespace = "script.steam.launcher";
version = "3.5.1";
@ -343,8 +351,8 @@ let self = rec {
};
};
pdfreader = mkKodiPlugin rec {
plugin = "pdfreader";
pdfreader = buildKodiAddon rec {
pname = "pdfreader";
namespace = "plugin.image.pdf";
version = "2.0.2";
@ -362,9 +370,9 @@ let self = rec {
};
};
pvr-hts = mkKodiABIPlugin rec {
pvr-hts = buildKodiBinaryAddon rec {
plugin = "pvr-hts";
pname = "pvr-hts";
namespace = "pvr.hts";
version = "8.2.2";
@ -384,9 +392,9 @@ let self = rec {
};
pvr-hdhomerun = mkKodiABIPlugin rec {
pvr-hdhomerun = buildKodiBinaryAddon rec {
plugin = "pvr-hdhomerun";
pname = "pvr-hdhomerun";
namespace = "pvr.hdhomerun";
version = "7.1.0";
@ -408,9 +416,9 @@ let self = rec {
};
pvr-iptvsimple = mkKodiABIPlugin rec {
pvr-iptvsimple = buildKodiBinaryAddon rec {
plugin = "pvr-iptvsimple";
pname = "pvr-iptvsimple";
namespace = "pvr.iptvsimple";
version = "7.4.2";
@ -432,9 +440,9 @@ let self = rec {
extraBuildInputs = [ zlib pugixml ];
};
osmc-skin = mkKodiPlugin rec {
osmc-skin = buildKodiAddon rec {
plugin = "osmc-skin";
pname = "osmc-skin";
namespace = "skin.osmc";
version = "18.0.0";
@ -454,8 +462,8 @@ let self = rec {
};
};
yatp = python3Packages.toPythonModule (mkKodiPlugin rec {
plugin = "yatp";
yatp = python3Packages.toPythonModule (buildKodiAddon rec {
pname = "yatp";
namespace = "plugin.video.yatp";
version = "3.3.2";
@ -482,9 +490,9 @@ let self = rec {
};
});
inputstream-adaptive = mkKodiABIPlugin rec {
inputstream-adaptive = buildKodiBinaryAddon rec {
plugin = "inputstream-adaptive";
pname = "inputstream-adaptive";
namespace = "inputstream.adaptive";
version = "2.6.7";
@ -500,7 +508,7 @@ let self = rec {
extraRuntimeDependencies = [ glib nspr nss stdenv.cc.cc.lib ];
extraInstallPhase = let n = namespace; in ''
ln -s $out/lib/addons/${n}/libssd_wv.so $out/${pluginDir}/${n}/libssd_wv.so
ln -s $out/lib/addons/${n}/libssd_wv.so $out/${addonDir}/${n}/libssd_wv.so
'';
meta = {
@ -511,10 +519,10 @@ let self = rec {
};
};
vfs-sftp = mkKodiABIPlugin rec {
vfs-sftp = buildKodiBinaryAddon rec {
pname = namespace;
namespace = "vfs.sftp";
version = "2.0.0";
plugin = namespace;
src = fetchFromGitHub {
owner = "xbmc";
@ -533,10 +541,10 @@ let self = rec {
extraBuildInputs = [ openssl libssh zlib ];
};
vfs-libarchive = mkKodiABIPlugin rec {
vfs-libarchive = buildKodiBinaryAddon rec {
pname = namespace;
namespace = "vfs.libarchive";
version = "2.0.0";
plugin = namespace;
src = fetchFromGitHub {
owner = "xbmc";

View File

@ -1,11 +1,11 @@
{ lib, makeWrapper, buildEnv, kodi, plugins }:
{ lib, makeWrapper, buildEnv, kodi, addons }:
let
drvName = builtins.parseDrvName kodi.name;
in buildEnv {
name = "${drvName.name}-with-plugins-${drvName.version}";
name = "${drvName.name}-with-addons-${drvName.version}";
paths = [ kodi ] ++ plugins;
paths = [ kodi ] ++ addons;
pathsToLink = [ "/share" ];
buildInputs = [ makeWrapper ];
@ -15,16 +15,16 @@ in buildEnv {
for exe in kodi{,-standalone}
do
makeWrapper ${kodi}/bin/$exe $out/bin/$exe \
--prefix PYTHONPATH : ${kodi.pythonPackages.makePythonPath plugins} \
--prefix PYTHONPATH : ${kodi.pythonPackages.makePythonPath addons} \
--prefix KODI_HOME : $out/share/kodi \
--prefix LD_LIBRARY_PATH ":" "${lib.makeLibraryPath
(lib.concatMap
(plugin: plugin.extraRuntimeDependencies or []) plugins)}"
(plugin: plugin.extraRuntimeDependencies or []) addons)}"
done
'';
meta = kodi.meta // {
description = kodi.meta.description
+ " (with plugins: ${lib.concatMapStringsSep ", " (x: x.name) plugins})";
+ " (with addons: ${lib.concatMapStringsSep ", " (x: x.name) addons})";
};
}

View File

@ -780,7 +780,8 @@ mapAliases ({
xara = throw "xara has been removed from nixpkgs. Unmaintained since 2006"; # added 2020-06-24
xbmc = kodi; # added 2018-04-25
xbmcPlain = kodiPlain; # added 2018-04-25
xbmcPlugins = kodiPlugins; # added 2018-04-25
xbmcPlugins = kodiPackages; # added 2018-04-25
kodiPlugins = kodiPackages; # added 2021-03-09;
xmonad_log_applet_gnome3 = xmonad_log_applet; # added 2018-05-01
xmpppy = throw "xmpppy has been removed from nixpkgs as it is unmaintained and python2-only";
pyIRCt = throw "pyIRCt has been removed from nixpkgs as it is unmaintained and python2-only";

View File

@ -26172,7 +26172,7 @@ in
wrapKodi = { kodi }: callPackage ../applications/video/kodi/wrapper.nix {
inherit kodi;
plugins = let inherit (lib) optional optionals; in with kodiPlugins;
addons = let inherit (lib) optional optionals; in with kodiPackages;
([]
++ optional (config.kodi.enableAdvancedLauncher or false) advanced-launcher
++ optional (config.kodi.enableAdvancedEmulatorLauncher or false)
@ -26264,7 +26264,7 @@ in
useGbm = true;
};
kodiPlugins = recurseIntoAttrs (callPackage ../applications/video/kodi/plugins.nix {});
kodiPackages = recurseIntoAttrs (callPackage ../applications/video/kodi/plugins.nix {});
kodi = wrapKodi {
kodi = kodiPlain;