diff --git a/flake.lock b/flake.lock index ee50fc6..e94c767 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1764242076, - "narHash": "sha256-sKoIWfnijJ0+9e4wRvIgm/HgE27bzwQxcEmo2J/gNpI=", + "lastModified": 1758198701, + "narHash": "sha256-7To75JlpekfUmdkUZewnT6MoBANS0XVypW6kjUOXQwc=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2fad6eac6077f03fe109c4d4eb171cf96791faa4", + "rev": "0147c2f1d54b30b5dd6d4a8c8542e8d7edf93b5d", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index aecd201..d222f21 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,7 @@ description = "A very basic flake"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; }; outputs = @@ -10,6 +10,16 @@ let inherit (nixpkgs) lib; + overlay = + final: pkgs: + (packages pkgs) + // lib.attrsets.mapAttrs' (name: value: { + name = "jellyfin-plugin-${name}"; + inherit value; + }) (plugins final); + + pkgs' = pkgs: pkgs.extend overlay; + scan'directory = scan (name: type: if type == "directory" then name else null); scan'regular = scan (name: type: if type == "regular" then name else null); scan'nix = @@ -35,42 +45,64 @@ in lib.attrsets.foldlAttrs fold empty files; - scope = pkgs: lib.makeScope pkgs.newScope ( - self: - lib.packagesFromDirectoryRecursive { - callPackage = self.callPackage; - directory = ./package; - } - // { - jellyfin = ( - self.callPackage ./package/jellyfin/package.nix { - jellyfin = pkgs.jellyfin; + packages = + pkgs: + let + package = + name: path: + let + pkg = (pkgs' pkgs).callPackage path { + original = pkgs.${name} or null; + }; + patches = scan (name: type: if lib.strings.removeSuffix ".patch" name != name then name else null) ( + name: path: path + ) path; + in + pkg.overrideAttrs ( + final: prev: { + patches = (prev.patches or [ ]) ++ builtins.attrValues patches; } ); - } - // - lib.attrsets.mapAttrs' - (name: value: { - name = "jellyfin-plugin-${name}"; - value = value; - }) - ( - lib.packagesFromDirectoryRecursive { - callPackage = self.callPackage; - directory = ./plugin; - } - ) - ); + + in + scan'directory package ./package; + + plugins = + pkgs: + let + plugin = name: path: (pkgs' pkgs).jellyfin.plugin path { }; + in + scan'directory plugin ./plugin; in { - overlay = final: scope; + overlays.default = overlay; - legacyPackages = per-pkgs scope; + packages = per-pkgs ( + pkgs: + (packages pkgs) + // lib.attrsets.mapAttrs' (name: value: { + name = "plugin-${name}"; + inherit value; + }) (plugins pkgs) + ); - packages = per-pkgs (pkgs: lib.filterAttrs (_: lib.isDerivation) (scope pkgs)); - - nixosModules.default = import ./module/default.nix scope; + nixosModules = + let + directories = scan'directory (_: path: path) ./module; + files = scan'nix (_: path: path) ./module; + modules = directories // { + default.imports = builtins.attrValues files ++ (directories.default or [ ]); + }; + module = + name: defs: + { ... }: + builtins.trace "module: jellyfin.${name}" { + imports = lib.toList defs; + config.nixpkgs.overlays = [ overlay ]; + }; + in + builtins.mapAttrs module modules; formatter = per-pkgs ({ nixfmt-tree, ... }: nixfmt-tree); }; diff --git a/module/default.nix b/module/plugins.nix similarity index 75% rename from module/default.nix rename to module/plugins.nix index 30332ab..1d9f0c9 100644 --- a/module/default.nix +++ b/module/plugins.nix @@ -1,18 +1,15 @@ -scope: { - lib, pkgs, config, + lib, ... }: let cfg = config.services.jellyfin; - plugin = name: (scope pkgs)."jellyfin-plugin-${name}".override { - jellyfin = cfg.package; - }; + plugin = name: pkgs."jellyfin-plugin-${name}"; - libs = pkg: fn: lib.lists.foldl (acc: lib: acc ++ lib.toList (fn lib)) [ ] pkg.pluginLibraries; + per-file = pkg: fn: lib.lists.foldl (acc: dll: acc ++ lib.toList (fn dll)) [ ] pkg.pluginLibraries; serviceConfig = pkg: @@ -25,13 +22,15 @@ let ''; in { - BindReadOnlyPaths = map (name: "${pkg}/${name}:${cfg.dataDir}/plugins/${pkg.name}/${name}") pkg.jellyfinPluginFiles; + BindReadOnlyPaths = per-file pkg ( + name: "${pkg}/${name}.dll:${cfg.dataDir}/plugins/${pkg.name}/${name}.dll" + ); BindPaths = [ "${cfg.dataDir}/plugins/${pkg.name}/meta.json" ]; }; - type.plugin = lib.types.addCheck lib.types.package (builtins.hasAttr "jellyfinPluginFiles"); + type.plugin = lib.types.addCheck lib.types.package (builtins.hasAttr "pluginLibraries"); in { options.services.jellyfin.plugins = lib.mkOption { @@ -42,7 +41,7 @@ in config.systemd = lib.mkIf (cfg.plugins != { }) { services.jellyfin.serviceConfig = lib.mkMerge ( [ - { BindPaths = [ "${cfg.dataDir}/plugins" ]; } + { TemporaryFileSystem = [ "${cfg.dataDir}/plugins:ro" ]; } { BindPaths = [ "${cfg.dataDir}/plugins/configurations/" ]; } ] ++ builtins.map serviceConfig cfg.plugins diff --git a/package/buildJellyfinPlugin/package.nix b/package/buildJellyfinPlugin/package.nix deleted file mode 100644 index e2e6563..0000000 --- a/package/buildJellyfinPlugin/package.nix +++ /dev/null @@ -1,146 +0,0 @@ -{ - lib, - newScope, - - dotnetCorePackages, - buildDotnetModule, - fetchJellyfinPlugin, - jellyfin, - jprm, - unzip, -}@args: -let - buildJellyfinPlugin = (lib.makeScope newScope (_: args)).callPackage package; - - capitalize = - str: - let - length = builtins.stringLength str; - head = builtins.substring 0 1 str; - tail = builtins.substring 1 length str; - in - "${lib.strings.toUpper head}${tail}"; - - package = - { - lib, - name, - version, - - dotnetCorePackages, - buildDotnetModule, - fetchJellyfinPlugin, - jellyfin, - jprm, - unzip, - - ... - }@params: - let - self = buildJellyfinPlugin params; - - project = params.project or "Jellyfin.Plugin.${capitalize name}"; - - pluginLibraries = params.pluginLibraries or lib.attrsets.foldlAttrs ( - acc: name: value: - acc ++ lib.optional (value == "directory") name - ) [ ] (builtins.readDir "${self.src}/src"); - dlls = builtins.map (name: "${name}.dll") pluginLibraries; - - defaults = { - pname = "jellyfin-plugin-${name}"; - version = version; - description = "${name} plugin for ${jellyfin.name}"; - projectFile = "src/${project}/${project}.csproj"; - dotnet-sdk = dotnetCorePackages.sdk_9_0; - dotnet-runtime = jellyfin.dotnet-runtime; - dontDotnetBuild = true; - dontDotnetInstall = true; - src = fetchJellyfinPlugin { - inherit name version; - tag = "v${builtins.head (builtins.splitVersion version)}"; - hash = params.hash or ""; - }; - }; - - override = - (lib.attrsets.removeAttrs params ( - builtins.attrNames (lib.functionArgs package) - ++ [ - "project" - "pluginLibraries" - ] - )) - // { - inherit jellyfin; - jellyfinPluginFiles = (params.jellyfinPluginFiles or []) ++ dlls; - meta = { - inherit (jellyfin.meta) license homepage; - maintaner = [ "nonapode@fbs42.ddnss.de" ]; - } - // (params.meta or { }); - - nativeBuildInputs = (params.nativeBuildInputs or [ ]) ++ [ - jprm - unzip - ]; - outputs = (params.outputs or [ ]) ++ [ - "out" - "zip" - ]; - prePatch = '' - sed --sandbox --separate \ - -e 's:\(PackageReference Include="Jellyfin\..*" Version="\)[^"]\+":\1${jellyfin.version}":' \ - -e 's:<\(enerateDocumentationFile\|TreatWarningsAsErrors\)>true:<\1>false:' \ - -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 - '' - + (params.prePatch or ""); - - postInstall = (params.postInstall or "") + '' - tmp_output_dir="$(mktemp -d)" - jprm plugin build . --output="''${tmp_output_dir}" --version="${version}" --dotnet-configuration="''${dotnetBuildType-Release}" - env - 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 (defaults // override); -in -buildJellyfinPlugin diff --git a/package/fetchJellyfinPlugin/package.nix b/package/fetchJellyfinPlugin/package.nix deleted file mode 100644 index aa1d68f..0000000 --- a/package/fetchJellyfinPlugin/package.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - lib, - fetchFromGitHub, - newScope, -}@args: -let - fetchJellyfinPlugin = (lib.makeScope newScope (_: args)).callPackage package; - - package = - { - name, - fetchFromGitHub, - ... - }@args: - let - self = fetchJellyfinPlugin args; - - extraArgs = lib.attrsets.removeAttrs args (builtins.attrNames (lib.functionArgs package)); - owner = args.owner or "jellyfin"; - repo = args.repo or "jellyfin-plugin-${args.name}"; - name = builtins.concatStringsSep "-" ( - [ repo ] ++ lib.optional (args ? version) args.version ++ [ "source" ] - ); - - in - fetchFromGitHub ( - { - inherit owner repo name; - passthru.override = self.override; - } - // extraArgs - ); - -in -fetchJellyfinPlugin diff --git a/package/jellyfin/default.nix b/package/jellyfin/default.nix new file mode 100644 index 0000000..29532a8 --- /dev/null +++ b/package/jellyfin/default.nix @@ -0,0 +1,19 @@ +{ + original, + callPackage, +}: +let + jellyfin = original.overrideAttrs ( + final: prev: + assert !prev ? "plugin"; + { + passthru.plugin = + base: + callPackage ./plugin.nix { + plugin = base; + jellyfin = jellyfin; + }; + } + ); +in +jellyfin diff --git a/package/jellyfin/package.nix b/package/jellyfin/package.nix deleted file mode 100644 index 68baa73..0000000 --- a/package/jellyfin/package.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - pkgs, - lib, - jellyfin, - fetchFromGitHub, - - gnused, - jprm, - unzip, - dotnetCorePackages, - buildDotnetModule, - ... -}: jellyfin.overrideAttrs ( - final: { passthru ? {}, ...}@prev: { - passthru = passthru // { - plugins = lib.attrsets.foldlAttrs - (acc: name: value: assert (builtins.trace name true); if lib.strings.hasPrefix "jellyfin-plugin-" name - then acc // { - ${lib.strings.substring (builtins.stringLength "jellyfin-plugin-") (builtins.stringLength name) name} = value; - } else acc) {} pkgs; - }; - } - ) diff --git a/package/jellyfin/plugin.nix b/package/jellyfin/plugin.nix new file mode 100644 index 0000000..f3094f9 --- /dev/null +++ b/package/jellyfin/plugin.nix @@ -0,0 +1,153 @@ +{ + lib, + jellyfin, + plugin, + fetchFromGitHub, + buildDotnetModule, + gnused, + jprm, + unzip, + dotnetCorePackages, + callPackage, +}: +let + drv = + args: + let + meta = from: { inherit (from) license homepage description; }; + + capitalize = + upper: str: + let + length = builtins.stringLength str; + head = builtins.substring 0 1 str; + tail = builtins.substring 1 length str; + in + "${upper head}${tail}"; + + helper = { + base = plugin; + name = builtins.baseNameOf info.base; + self = info; + owner = "jellyfin"; + repo = "jellyfin-plugin-${info.name}"; + hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; + rev = "v${info.version}"; + description = "${info.name} plugin for jellyfin"; + homepage = jellyfin.meta.homepage; + license = jellyfin.meta.license; + mkPlugin = info: result: buildDotnetModule result; + inherit jellyfin; + ignore = builtins.attrNames helper ++ [ + "override" "overrideAttrs" "overrideDerivation" + ]; + }; + + defaults = { + pname = "jellyfin-plugin-${info.name}"; + nugetDeps = + let + options = builtins.filter builtins.pathExists [ + "${info.base}/deps.json" + ]; + in + assert options != [ ]; + builtins.head options; + pluginLibraries = lib.attrsets.foldlAttrs ( + acc: name: value: + acc ++ lib.optional (value == "directory") name + ) [ ] (builtins.readDir ("${info.src}/src")); + dotnet-sdk = dotnetCorePackages.sdk_8_0; + dotnet-runtime = dotnetCorePackages.aspnetcore_8_0; + dontDotnetBuild = true; + dontDotnetInstall = true; + project = "Jellyfin.Plugin.${capitalize lib.strings.toUpper info.name}"; + prePatch = '' + sed --sandbox --separate \ + -e 's:\(PackageReference Include="Jellyfin\..*" Version="\)[^"]\+":\1${info.jellyfin.version}":' \ + -e 's:<\(enerateDocumentationFile\|TreatWarningsAsErrors\)>true:<\1>false:' \ + -i ${ + lib.strings.escapeShellArgs (builtins.map (lib: "src/${lib}/${lib}.csproj") info.pluginLibraries) + } + + success=true + for x in ${ + lib.strings.escapeShellArgs (builtins.map (lib: "src/${lib}/${lib}.csproj") info.pluginLibraries) + } + do + diff -q $src/$x $x 2>/dev/null || continue + printf >&2 'no change: %s\n' $x + success=false + done + $success || exit 1 + ''; + projectFile = "src/${info.project}/${info.project}.csproj"; + src = fetchFromGitHub { + owner = info.owner; + repo = info.repo; + inherit (info) rev hash; + }; + nativeBuildInputs = [ + gnused + jprm + unzip + ]; + patches = + lib.optional (builtins.pathExists "${info.base}.patch") "${info.base}.patch" + ++ lib.optionals (builtins.pathExists info.base) ( + lib.attrsets.foldlAttrs ( + acc: name: type: + acc + ++ lib.optional (type == "regular" && lib.strings.hasSuffix ".patch" name) "${info.base}/${name}" + ) [ ] (builtins.readDir info.base) + ); + outputs = [ + "out" + "zip" + ]; + postInstall = + let + dlls = builtins.map (name: "${name}.dll") info.pluginLibraries; + in + '' + tmp_output_dir="$(mktemp -d)" + jprm plugin build . --output="''${tmp_output_dir}" --version="${info.version}" --dotnet-configuration="''${dotnetBuildType-Release}" + mv "''${tmp_output_dir}/${info.name}_${info.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 + ''; + meta = meta jellyfin.meta // meta info; + }; + info = helper // defaults // callPackage plugin ({ inherit info; } // args); + in info.mkPlugin info (lib.attrsets.removeAttrs info info.ignore); + + functor = args: (drv args).overrideAttrs (final: prev: { + passthru = builtins.trace "override passthru" (prev.passthru or {}) // { + in-version = { version, rev ? null, hash ? null }@args': + callPackage functor (builtins.removeAttrs args [ "version" "rev" "hash" ] // args'); + }; + }); +in lib.trivial.mirrorFunctionArgs plugin functor diff --git a/package/jprm/package.nix b/package/jprm/default.nix similarity index 85% rename from package/jprm/package.nix rename to package/jprm/default.nix index 4d14569..49970c9 100644 --- a/package/jprm/package.nix +++ b/package/jprm/default.nix @@ -2,7 +2,7 @@ let v."1.1.1" = "sha256-PWgZ9K81RX+AboU8/6IGEQ8Fv/e8d2I1KH3+jIQOyj4="; current = lib: - lib.lists.foldl (acc: v: if lib.strings.versionOlder acc v then v else acc) "0.0.0" ( + lib.lists.fold (acc: v: if lib.strings.versionOlder acc v then v else acc) "0.0.0" ( builtins.attrNames v ); in @@ -21,7 +21,7 @@ python3Packages.buildPythonApplication { src = fetchFromGitHub { owner = "oddstr13"; repo = "jellyfin-plugin-repository-manager"; - rev = "v${version}"; + tag = "v${version}"; hash = hash; }; diff --git a/plugin/dlna/default.nix b/plugin/dlna/default.nix new file mode 100644 index 0000000..69dcd40 --- /dev/null +++ b/plugin/dlna/default.nix @@ -0,0 +1,21 @@ +let + v."8.0.0.0" = { + hash = "sha256-5YUX+w4n3nBhAkdgjF9D5yY/jzRKxpW+mTQCBluzsVI="; + rev = "v8"; + }; + current = + lib: + lib.lists.fold (acc: v: if lib.strings.versionOlder acc v then v else acc) "0.0.0" ( + builtins.attrNames v + ); +in +{ + lib, + version ? current lib, + hash ? v.${version}.hash, + rev ? v.${version}.rev or "v${version}", + ... +}: +{ + inherit version hash rev; +} diff --git a/plugin/dlna/deps.json b/plugin/dlna/deps.json index bd23349..e6de4d7 100644 --- a/plugin/dlna/deps.json +++ b/plugin/dlna/deps.json @@ -1,13 +1,8 @@ [ - { - "pname": "BitFaster.Caching", - "version": "2.5.4", - "hash": "sha256-PWuVT1kKjL8ulMtv9hWmg0nMChFh8skr34xUl3mQ0Y8=" - }, { "pname": "Diacritics", - "version": "4.0.17", - "hash": "sha256-O1pOeOV7c+dfD/EjwiOmqYhP5RDZyosVOk0OjVuK5Eg=" + "version": "3.3.29", + "hash": "sha256-sIbdJ3yMthnmJHly3WheUdYjtwPakcczTJx9ycxtgrY=" }, { "pname": "ICU4N", @@ -26,43 +21,33 @@ }, { "pname": "Jellyfin.Common", - "version": "10.11.3", - "hash": "sha256-d0rIKccKSGqKUoXGT5N+/Wfq5M6eM06WQEzL6CA5eao=" + "version": "10.10.7", + "hash": "sha256-9EIigrDheob4vRP+UBAoIPHH4fyz6Cl27GUpelEGpBg=" }, { "pname": "Jellyfin.Controller", - "version": "10.11.3", - "hash": "sha256-Rudd5SwnQSwTkFATD7FCXIf3cdXmiHtQUXl8G+NW1k4=" + "version": "10.10.7", + "hash": "sha256-/obWAuxWpSn+NlMES+fjyrf1g+qbxmSYQUBvgXQYltQ=" }, { "pname": "Jellyfin.Data", - "version": "10.11.3", - "hash": "sha256-e0eWPDTh1zgitbeOmg/M1c/fYL5/OLKzAtQZg48IUYg=" - }, - { - "pname": "Jellyfin.Database.Implementations", - "version": "10.11.3", - "hash": "sha256-IP1jfyE/3Orzs1ZzIvv8V1qxfkfW9z7eRIZn5CE6WZQ=" + "version": "10.10.7", + "hash": "sha256-lRQjg/HkFAtCN0woL1gX6j5dMfVLP/fzQTKjFTcRth4=" }, { "pname": "Jellyfin.Extensions", - "version": "10.11.3", - "hash": "sha256-dipmxz4qL4qo7i+ifrLBVMroUjzW5BkkGNrNwpDCVQw=" - }, - { - "pname": "Jellyfin.MediaEncoding.Keyframes", - "version": "10.11.3", - "hash": "sha256-w9BtlQMOeNKj7B+qFtn5oVzaGfRqsGNvISjF4cE4m8k=" + "version": "10.10.7", + "hash": "sha256-AOGJ2IoT2v+LnlEqnb2O4FnXapcQiH0V9ny8GUysNHg=" }, { "pname": "Jellyfin.Model", - "version": "10.11.3", - "hash": "sha256-3+ScXU/pWj+Ru1b74v5aWlqg/+XSuKAmqeFbrVYrqRg=" + "version": "10.10.7", + "hash": "sha256-ubsClGTLq/aFnMiBCaHVUX2b88beuL07Yn5VXNbTCjQ=" }, { "pname": "Jellyfin.Naming", - "version": "10.11.3", - "hash": "sha256-oZ0qcARGOqAyvhdWMjdvuDVSuFYjyVd5TUpDdIMYRJs=" + "version": "10.10.7", + "hash": "sha256-/jlIS0X4FuBo6Ac1cjLGzgdJ3vR6VotBspxpNrqfMzo=" }, { "pname": "Microsoft.AspNetCore.Authorization", @@ -74,60 +59,30 @@ "version": "8.0.10", "hash": "sha256-SxnMOWJGgUUQyKaRezJQwMUt4eMfWjnhmfk8pldYGNA=" }, - { - "pname": "Microsoft.EntityFrameworkCore", - "version": "9.0.10", - "hash": "sha256-Zm4oMVeloK2WmPskzg4l3SXjJuC+sRg3O5aiTK5rHvw=" - }, - { - "pname": "Microsoft.EntityFrameworkCore.Abstractions", - "version": "9.0.10", - "hash": "sha256-FB+8WtFYKn1PH9R3pgKw7dNJiJDCcS78UkeRkxdOuCk=" - }, - { - "pname": "Microsoft.EntityFrameworkCore.Analyzers", - "version": "9.0.10", - "hash": "sha256-q6w0uQ4qMAe2EuA65a3rk18rhGXuGVYMrdrIzD5Z+tw=" - }, - { - "pname": "Microsoft.EntityFrameworkCore.Relational", - "version": "9.0.10", - "hash": "sha256-2XHQOKvs4mAXwl8vEZpdi6ZtDFhK2hPusRMFemu3Shw=" - }, { "pname": "Microsoft.Extensions.Caching.Abstractions", "version": "2.0.0", "hash": "sha256-Eg1MES40kzkGW9tZmjaKtbWI00Kbv7fLJQmjrigjxqk=" }, - { - "pname": "Microsoft.Extensions.Caching.Abstractions", - "version": "9.0.10", - "hash": "sha256-W/9WhAG5t/hWPZxIL5+ILMsPKO/DjprHRymZUmU5YOA=" - }, { "pname": "Microsoft.Extensions.Caching.Memory", "version": "2.0.0", "hash": "sha256-1fnNvp62KrviVwYlqVl1CbdaZVpCDah9eCZeNDGDbWM=" }, - { - "pname": "Microsoft.Extensions.Caching.Memory", - "version": "9.0.10", - "hash": "sha256-HIXNiUnBJaYN+QGzpTlHzkvkBwYmcU0QUlIgQDhVG5g=" - }, { "pname": "Microsoft.Extensions.Configuration.Abstractions", - "version": "9.0.10", - "hash": "sha256-sRv0yS2sbyli7eejtnpmd7UIAz4PwSt5/Po5Irc1j98=" + "version": "8.0.0", + "hash": "sha256-4eBpDkf7MJozTZnOwQvwcfgRKQGcNXe0K/kF+h5Rl8o=" }, { "pname": "Microsoft.Extensions.Configuration.Binder", - "version": "9.0.10", - "hash": "sha256-4NEBx28byvjjIzo0wQPIUUymk9AzSgPS4fu5IRxkIt4=" + "version": "8.0.2", + "hash": "sha256-aGB0VuoC34YadAEqrwoaXLc5qla55pswDV2xLSmR7SE=" }, { "pname": "Microsoft.Extensions.DependencyInjection", - "version": "9.0.10", - "hash": "sha256-f3r2msA/oV9gGdFn9OEr5bPAfINR17P+sS6/2/NnCuk=" + "version": "8.0.1", + "hash": "sha256-O9g0jWS+jfGoT3yqKwZYJGL+jGSIeSbwmvomKDC3hTU=" }, { "pname": "Microsoft.Extensions.DependencyInjection.Abstractions", @@ -141,24 +96,19 @@ }, { "pname": "Microsoft.Extensions.DependencyInjection.Abstractions", - "version": "9.0.10", - "hash": "sha256-5rwFXG+Wjbf+TkXeWrkGVKV4wfvOryTPadEkEyPyKj4=" + "version": "8.0.2", + "hash": "sha256-UfLfEQAkXxDaVPC7foE/J3FVEXd31Pu6uQIhTic3JgY=" }, { "pname": "Microsoft.Extensions.Logging", - "version": "9.0.10", - "hash": "sha256-/Et36NBhpMoxQzI+p/moW7knwYDfjI7Ma7DF7KIYn+Q=" + "version": "8.0.1", + "hash": "sha256-vkfVw4tQEg86Xg18v6QO0Qb4Ysz0Njx57d1XcNuj6IU=" }, { "pname": "Microsoft.Extensions.Logging.Abstractions", "version": "8.0.2", "hash": "sha256-cHpe8X2BgYa5DzulZfq24rg8O2K5Lmq2OiLhoyAVgJc=" }, - { - "pname": "Microsoft.Extensions.Logging.Abstractions", - "version": "9.0.10", - "hash": "sha256-PtYXXHi+mbdQMh2QtA57NbWlt+JEpXiey36zLzbKTmo=" - }, { "pname": "Microsoft.Extensions.Options", "version": "2.0.0", @@ -169,11 +119,6 @@ "version": "8.0.2", "hash": "sha256-AjcldddddtN/9aH9pg7ClEZycWtFHLi9IPe1GGhNQys=" }, - { - "pname": "Microsoft.Extensions.Options", - "version": "9.0.10", - "hash": "sha256-QTNhi83xhjJuIQ/3QffzQs/KY7avNyBMvnkuuSr3pBo=" - }, { "pname": "Microsoft.Extensions.Primitives", "version": "2.0.0", @@ -184,11 +129,6 @@ "version": "8.0.0", "hash": "sha256-FU8qj3DR8bDdc1c+WeGZx/PCZeqqndweZM9epcpXjSo=" }, - { - "pname": "Microsoft.Extensions.Primitives", - "version": "9.0.10", - "hash": "sha256-It7NQ+Ap/hrqFX3LXDVJqVz1Xl3j8QIapYDcG2MQ/7w=" - }, { "pname": "Microsoft.NETCore.Platforms", "version": "1.1.0", @@ -199,21 +139,6 @@ "version": "1.1.0", "hash": "sha256-0AqQ2gMS8iNlYkrD+BxtIg7cXMnr9xZHtKAuN4bjfaQ=" }, - { - "pname": "NEbml", - "version": "1.1.0.5", - "hash": "sha256-MrQLekP6z5y6rfqnCbLefkYv4Fm8di4HqZ/AiYTzBQ4=" - }, - { - "pname": "Polly", - "version": "8.6.4", - "hash": "sha256-Z+ZbhnHWMu55qgQkxvw3yMiMd+zIMzzQiFhvn/PeQ3I=" - }, - { - "pname": "Polly.Core", - "version": "8.6.4", - "hash": "sha256-4Xrg/H481Y/WOHk1sGvFNEOfgaGrdKi+4U54PTXhh9I=" - }, { "pname": "runtime.any.System.Globalization", "version": "4.3.0", @@ -249,14 +174,19 @@ "version": "4.3.0", "hash": "sha256-51813WXpBIsuA6fUtE5XaRQjcWdQ2/lmEokJt97u0Rg=" }, + { + "pname": "System.Runtime.CompilerServices.Unsafe", + "version": "4.4.0", + "hash": "sha256-SeTI4+yVRO2SmAKgOrMni4070OD+Oo8L1YiEVeKDyig=" + }, { "pname": "System.Text.Json", - "version": "9.0.10", - "hash": "sha256-wqeobpRw3PqOw21q8oGvauj5BkX1pS02Cm78E6c742w=" + "version": "8.0.5", + "hash": "sha256-yKxo54w5odWT6nPruUVsaX53oPRe+gKzGvLnnxtwP68=" }, { "pname": "System.Threading.Tasks.Dataflow", - "version": "9.0.10", - "hash": "sha256-V3UjIEGn9Yrl/DQoKeEVg9pDpp4iNz8r9+WmQ09R1bg=" + "version": "8.0.1", + "hash": "sha256-hgCfF91BDd/eOtLEd5jhjzgJdvwmVv4/b42fXRr3nvo=" } ] diff --git a/plugin/dlna/package.nix b/plugin/dlna/package.nix deleted file mode 100644 index a848024..0000000 --- a/plugin/dlna/package.nix +++ /dev/null @@ -1,56 +0,0 @@ -let - v."8.0.0.0" = { - hash = "sha256-5YUX+w4n3nBhAkdgjF9D5yY/jzRKxpW+mTQCBluzsVI="; - rev = "v8"; - }; - v."10.0.0.0" = { - hash = "sha256-pPhMmH17RKktIX16ozSxsigxo6tU8tlST4IAm3vpjrw="; - rev = "v10"; - }; - - latest = - lib: - builtins.foldl' (acc: next: if lib.versionOlder acc next then next else acc) "0" ( - builtins.attrNames v - ); - - plugin = - { - lib, - buildJellyfinPlugin, - fetchJellyfinPlugin, - ... - }@params: - let - argNames = builtins.attrNames (lib.trivial.functionArgs plugin) ++ [ - "name" - "version" - "hash" - ]; - extraArgs = lib.attrsets.removeAttrs params argNames; - - self = plugin params; - - name = params.name or "dlna"; - version = params.version or (latest lib); # "10.0.0.0"; # TODO latest - defaultRev = { - tag = "v${lib.versions.major version}"; - hash = params.hash or ""; - }; - - args = { - name = name; - version = args.src.version or version; - nugetDeps = ./deps.json; - src = fetchJellyfinPlugin ( - { - inherit name version; - } - // (v.${version} or defaultRev) - ); - } - // extraArgs; - in - buildJellyfinPlugin args; -in -plugin