wip
This commit is contained in:
parent
c21b2e1358
commit
4c2f85ad62
8 changed files with 285 additions and 65 deletions
110
package/jellyfin/build-plugin.nix
Normal file
110
package/jellyfin/build-plugin.nix
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
let
|
||||
capitalize =
|
||||
upper: str:
|
||||
let
|
||||
length = builtins.stringLength str;
|
||||
head = builtins.substring 0 1 str;
|
||||
tail = builtins.substring 1 length str;
|
||||
in "${upper head}${tail}";
|
||||
|
||||
buildJellyfinPlugin = {
|
||||
lib,
|
||||
name,
|
||||
version,
|
||||
|
||||
dotnetCorePackages,
|
||||
buildDotnetModule,
|
||||
fetchJellyfinPlugin,
|
||||
jellyfin,
|
||||
jprm,
|
||||
unzip,
|
||||
|
||||
...
|
||||
}@params: let
|
||||
project = params.project or "Jellyfin.Plugin.${capitalize lib.strings.toUpper name}";
|
||||
src = params.src or (fetchJellyfinPlugin { name = name; tag = "v${builtins.head (builtins.splitVersion version)}"; hash = params.hash or ""; });
|
||||
|
||||
extraArgs = lib.attrsets.removeAttrs params (builtins.attrNames (lib.functionArgs buildJellyfinPlugin));
|
||||
|
||||
pluginLibraries = extraArgs.pluginLibraries or lib.attrsets.foldlAttrs (
|
||||
acc: name: value:
|
||||
acc ++ lib.optional (value == "directory") name
|
||||
) [ ] (builtins.readDir "${src}/src");
|
||||
|
||||
args = {
|
||||
pname = "jellyfin-plugin-${name}";
|
||||
version = version;
|
||||
description = "${name} plugin for jellyfin";
|
||||
projectFile = "src/${project}/${project}.csproj";
|
||||
dotnet-sdk = dotnetCorePackages.sdk_9_0;
|
||||
dotnet-runtime = jellyfin.dotnet-runtime;
|
||||
dontDotnetBuild = true;
|
||||
dontDontnetInstall = true;
|
||||
} // extraArgs // {
|
||||
inherit src;
|
||||
meta = { inherit (jellyfin.meta) license homepage;
|
||||
maintainer = [ "nonapode@fbs42.ddnss.de" ];
|
||||
} // (extraArgs.meta or {});
|
||||
|
||||
nativeBuildInputs = (extraArgs.nativeBuildInputs or []) ++ [
|
||||
jprm
|
||||
unzip
|
||||
];
|
||||
outputs = (extraArgs.outputs or []) ++ [ "out" "zip" ];
|
||||
prePatch = ''
|
||||
sed --sandbox --separate \
|
||||
-e 's:\(PackageReference Include="Jellyfin\..*" Version="\)[^"]\+":\1${jellyfin.version}":' \
|
||||
-e 's:<\(enerateDocumentationFile\|TreatWarningsAsErrors\)>true</\1>:<\1>false</\1>:' \
|
||||
-i ${
|
||||
lib.strings.escapeShellArgs (builtins.map (lib: "src/${lib}/${lib}.csproj") pluginLibraries)
|
||||
}
|
||||
|
||||
success=true
|
||||
for x in ${
|
||||
lib.strings.escapeShellArgs (builtins.map (lib: "src/${lib}/${lib}.csproj") pluginLibraries)
|
||||
}
|
||||
do
|
||||
diff -q $src/$x $x 2>/dev/null || continue
|
||||
printf >&2 'no change: %s\n' $x
|
||||
success=false
|
||||
done
|
||||
$success || exit 1
|
||||
'' + (extraArgs.prePatch or "");
|
||||
|
||||
postInstall =
|
||||
let
|
||||
dlls = builtins.map (name: "${name}.dll") pluginLibraries;
|
||||
in
|
||||
''
|
||||
tmp_output_dir="$(mktemp -d)"
|
||||
jprm plugin build . --output="''${tmp_output_dir}" --version="${version}" --dotnet-configuration="''${dotnetBuildType-Release}"
|
||||
mv "''${tmp_output_dir}/${name}_${version}.zip" $zip
|
||||
mkdir -p $out
|
||||
unzip $zip -d $out
|
||||
|
||||
success=true
|
||||
for file in $out/*;
|
||||
do
|
||||
case "''${file##*/}" in
|
||||
meta.json)
|
||||
;;
|
||||
${builtins.concatStringsSep "|" (builtins.map lib.strings.escapeShellArg dlls)}) ;;
|
||||
*)
|
||||
printf 'unknown file: %s\n' ''${file@Q}
|
||||
success=false
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
for file in meta.json ${lib.strings.escapeShellArgs dlls}
|
||||
do
|
||||
[[ -f "$out/$file" ]] && continue
|
||||
printf 'missing file: %s\n' ''${file@Q}
|
||||
success=false
|
||||
done
|
||||
|
||||
$success || exit 42
|
||||
'';
|
||||
};
|
||||
in buildDotnetModule args;
|
||||
in buildJellyfinPlugin
|
||||
|
|
@ -1,18 +1,33 @@
|
|||
{
|
||||
pkgs,
|
||||
lib,
|
||||
original,
|
||||
callPackage,
|
||||
fetchFromGitHub,
|
||||
|
||||
gnused,
|
||||
jprm,
|
||||
unzip,
|
||||
dotnetCorePackages,
|
||||
buildDotnetModule,
|
||||
...
|
||||
}:
|
||||
let
|
||||
context = pkgs // {
|
||||
inherit callPackage fetchJellyfinPlugin buildJellyfinPlugin jellyfin;
|
||||
};
|
||||
callPackage = lib.callPackageWith context;
|
||||
|
||||
fetchJellyfinPlugin = callPackage ./fetch-plugin.nix;
|
||||
buildJellyfinPlugin = callPackage ./build-plugin.nix;
|
||||
|
||||
jellyfin = original.overrideAttrs (
|
||||
final: prev:
|
||||
final: { passthru ? {}, ... }@prev:
|
||||
assert !prev ? "plugin";
|
||||
{
|
||||
passthru.plugin =
|
||||
base:
|
||||
callPackage ./plugin.nix {
|
||||
plugin = base;
|
||||
jellyfin = jellyfin;
|
||||
};
|
||||
passthru = passthru // {
|
||||
plugin =
|
||||
base: callPackage base;
|
||||
};
|
||||
}
|
||||
);
|
||||
in
|
||||
|
|
|
|||
16
package/jellyfin/fetch-plugin.nix
Normal file
16
package/jellyfin/fetch-plugin.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
let
|
||||
fetchJellyfinPlugin = {
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
runCommandLocal,
|
||||
...
|
||||
}@args: let
|
||||
owner = args.owner or "jellyfin";
|
||||
repo = args.repo or "jellyfin-plugin-${args.name}";
|
||||
|
||||
extraArgs = lib.attrsets.removeAttrs args (builtins.attrNames (lib.functionArgs fetchJellyfinPlugin));
|
||||
git = fetchFromGitHub ({
|
||||
inherit owner repo;
|
||||
} // extraArgs);
|
||||
in git;
|
||||
in fetchJellyfinPlugin
|
||||
|
|
@ -143,15 +143,18 @@ let
|
|||
'';
|
||||
meta = meta jellyfin.meta // meta info;
|
||||
};
|
||||
info = helper // defaults // callPackage plugin ({ inherit info; } // args);
|
||||
info = helper // defaults // {
|
||||
inherit (callPackage plugin ({ inherit info; } // args))
|
||||
version hash rev;
|
||||
};
|
||||
in
|
||||
info.mkPlugin info (lib.attrsets.removeAttrs info info.ignore);
|
||||
|
||||
functor =
|
||||
args:
|
||||
(drv args).overrideAttrs (
|
||||
final: prev: {
|
||||
passthru = (prev.passthru or { }) // {
|
||||
final: { passthru ? {}, ... }@prev: {
|
||||
passthru = passthru // {
|
||||
in-version =
|
||||
{
|
||||
version,
|
||||
|
|
@ -170,4 +173,5 @@ let
|
|||
}
|
||||
);
|
||||
in
|
||||
lib.trivial.mirrorFunctionArgs plugin functor
|
||||
#lib.trivial.mirrorFunctionArgs plugin functor
|
||||
drv
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ let
|
|||
v."1.1.1" = "sha256-PWgZ9K81RX+AboU8/6IGEQ8Fv/e8d2I1KH3+jIQOyj4=";
|
||||
current =
|
||||
lib:
|
||||
lib.lists.fold (acc: v: if lib.strings.versionOlder acc v then v else acc) "0.0.0" (
|
||||
lib.lists.foldl (acc: v: if lib.strings.versionOlder acc v then v else acc) "0.0.0" (
|
||||
builtins.attrNames v
|
||||
);
|
||||
in
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue