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