diff --git a/pkgs/by-name/ce/celestegame/celeste/default.nix b/pkgs/by-name/ce/celestegame/celeste/default.nix new file mode 100644 index 00000000000000..bb23c0db541e79 --- /dev/null +++ b/pkgs/by-name/ce/celestegame/celeste/default.nix @@ -0,0 +1,121 @@ +{ + lib, + stdenvNoCC, + requireFile, + unzip, + yq, + dotnet-runtime_7, + + everest ? null, + overrideSrc ? null, + writableDir ? null, + launchFlags ? "", + launchEnv ? "", + # If we leave it to be the default (log.txt), + # Everest will try to delete log.txt when it starts, + # which doesn't work because the file system is read-only. + # https://github.com/EverestAPI/Everest/blob/050b4a1b4a7918b22d3d5140224f9c0472e1655a/Celeste.Mod.mm/Patches/Celeste.cs#L140-L155 + everestLogFilename ? "everest-log.txt", +}: + +# TODO: It appears that it is possible to package Celeste for aarch devices: +# https://github.com/pixelomer/Celeste-ARM64 +# However, I don't have an aarch device to do that. +let + pname = "celeste-unwrapped"; + version = "1.4.0.0"; + downloadPage = "https://maddymakesgamesinc.itch.io/celeste"; + phome = "$out/lib/Celeste"; + + launchFlags' = + if launchFlags != "" && everest == null then + lib.warn "launchFlags is useless without Everest." "" + else + launchFlags; + launchEnv' = + if launchEnv != "" && everest == null then + lib.warn "launchEnv is useless without Everest." "" + else + '' + EVEREST_LOG_FILENAME=${everestLogFilename} + EVEREST_TMPDIR=${writableDir} + ${launchEnv} + ''; +in +stdenvNoCC.mkDerivation { + pname = "celeste-unwrapped"; + version = version; + src = + if overrideSrc == null then + requireFile { + name = "celeste-linux.zip"; + hash = "sha256-q4gniSgg00U3j5TZpvIZnSmqAyCHd/pOVAuQ3rDYEAs="; + url = downloadPage; + } + else + overrideSrc; + dontUnpack = true; + nativeBuildInputs = [ + unzip + yq + ]; + postInstall = + '' + mkdir -p ${phome} + unzip -q $src -d ${phome} + '' + + lib.optionalString (everest != null) '' + cp -r ${everest}/* $out + chmod -R +w ${phome} # Files copied from other derivations are not writable by default + + # There will still be a runtime error saying chmod failed for the splash, + # but it doesn't matter because we make it executable here. + # https://github.com/EverestAPI/Everest/blob/050b4a1b4a7918b22d3d5140224f9c0472e1655a/Celeste.Mod.mm/Mod/Everest/EverestSplashHandler.cs#L73-L81 + chmod +x ${phome}/EverestSplash/EverestSplash-linux + + # Everest determines whether it is FNA or XNA by the existence of the file. + # Creating this now prevents it from creating it in the future + # when the file system is read-only. + # https://github.com/EverestAPI/Everest/blob/050b4a1b4a7918b22d3d5140224f9c0472e1655a/Celeste.Mod.mm/Patches/Celeste.cs#L41-L47 + touch ${phome}/BuildIsFNA.txt + + # Please Piton by having the runtime. + # Otherwise it will try to download it. + # https://github.com/Popax21/Piton/blob/21c7868d06007f0c5e7d9030a0109fe892df1bf3/apphost/src/runtime.rs#L82-L89 + mkdir ${phome}/piton-runtime + ln -s ${dotnet-runtime_7}/share/dotnet/* -t ${phome}/piton-runtime + platform=linux-x86_64 + echo -n "$platform $(yq -r .\"$platform\".version ${phome}/piton-runtime.yaml)" > ${phome}/piton-runtime/piton-runtime-id.txt + + chmod +x ${phome}/MiniInstaller-linux + ${phome}/MiniInstaller-linux + + echo "${launchFlags'}" > ${phome}/everest-launch.txt + echo "${launchEnv'}" > ${phome}/everest-env.txt + ''; + + dontPatchELF = true; + dontStrip = true; + dontPatchShebangs = true; + postFixup = + lib.optionalString (everest != null) '' + rm -r ${phome}/Mods # Currently it is empty. + ln -s "${writableDir}"/{Mods,LogHistory,CrashLogs,${everestLogFilename}} -t ${phome} + '' + + lib.optionalString (writableDir != null) '' + ln -s "${writableDir}/log.txt" -t ${phome} + ''; + + meta = { + inherit downloadPage; + homepage = "https://www.celestegame.com"; + description = "2D platformer game about climing a mountain"; + license = with lib.licenses; [ unfree ]; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; + maintainers = with lib.maintainers; [ ulysseszhan ]; + platforms = [ + "x86_64-linux" + "i686-linux" + ]; + }; +} diff --git a/pkgs/by-name/ce/celestegame/everest-bin/default.nix b/pkgs/by-name/ce/celestegame/everest-bin/default.nix new file mode 100644 index 00000000000000..6b1be6c154edd6 --- /dev/null +++ b/pkgs/by-name/ce/celestegame/everest-bin/default.nix @@ -0,0 +1,49 @@ +{ + lib, + stdenvNoCC, + fetchzip, + icu, + autoPatchelfHook, +}: + +let + pname = "everest"; + version = "5262"; # TODO: From a PR, so Azure pipeline artifact will expire in 10 days. + phome = "$out/lib/Celeste"; +in +stdenvNoCC.mkDerivation { + inherit pname version; + src = fetchzip { + #url = "https://github.com/EverestAPI/Everest/releases/download/stable-1.${version}.0/main.zip"; + #hash = "sha256-aEuWLR5WxYpID7ykFzgS3ZF8Mb2I+W0QIKxjfg5umj4="; + url = "https://dev.azure.com/EverestAPI/Everest/_apis/build/builds/${lib.toInt version - 700}/artifacts?artifactName=main&api-version=7.1&%24format=zip"; + extension = "zip"; + hash = "sha256-z95+mi9UMNzZaXIGQbaCqLIsWpTnvyHZ+ZyYon9gnTw="; + }; + buildInputs = [ + icu + ]; + nativeBuildInputs = [ + autoPatchelfHook + ]; + postInstall = '' + mkdir -p ${phome} + cp -r * ${phome} + ''; + dontAutoPatchelf = true; + dontPatchELF = true; + dontStrip = true; + dontPatchShebangs = true; + postFixup = '' + autoPatchelf ${phome}/MiniInstaller-linux + ''; + meta = { + description = "Celeste mod loader"; + license = with lib.licenses; [ mit ]; + maintainers = with lib.maintainers; [ ulysseszhan ]; + homepage = "https://everestapi.github.io"; + platforms = [ "x86_64-linux" ]; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; + }; + +} diff --git a/pkgs/by-name/ce/celestegame/everest/default.nix b/pkgs/by-name/ce/celestegame/everest/default.nix new file mode 100644 index 00000000000000..d6af8e1242657b --- /dev/null +++ b/pkgs/by-name/ce/celestegame/everest/default.nix @@ -0,0 +1,116 @@ +{ + lib, + fetchurl, + fetchFromGitHub, + buildDotnetModule, + dotnetCorePackages, + autoPatchelfHook, + mono, + git, + icu, +}: + +let + pname = "everest"; + version = "5184"; + phome = "$out/lib/Celeste"; +in +buildDotnetModule { + inherit pname version; + + src = fetchFromGitHub { + owner = "EverestAPI"; + repo = "Everest"; + tag = "stable-1.${version}.0"; + fetchSubmodules = true; + leaveDotGit = true; # MonoMod.SourceGen.Internal needs .git + hash = "sha256-yujI6h+y7WeUs3dz7h7PLqK4BkaDAvFJurlnRj07IrA="; + }; + + nativeBuildInputs = [ + git + autoPatchelfHook + ]; + + buildInputs = [ + icu # For autoPatchelf + mono # See upstream README + ]; + + patches = [ + # Avoiding creating/deleting files directly in the installation dir at runtime + (fetchurl { + url = "https://github.com/EverestAPI/Everest/compare/050b4a1b4a7918b22d3d5140224f9c0472e1655a...0c55de517b8b08ba2afc43efebe9fa3de26c34a3.patch"; + hash = "sha256-Th6c/dklHPK8/kxhRv1l7m1UW7uWgnMYyJoqW0Dfqwc="; + }) + ]; + + postPatch = '' + # MonoMod.ILHelpers.Patcher complains at build phase: You must install .NET to run this application. + sed -i 's|||' Celeste.Mod.mm/Celeste.Mod.mm.csproj + + autoPatchelf lib-ext/piton/piton-linux_x64 + ''; + + # Upgrade to .NET 8 is still WIP upstream: EverestAPI/Everest#828 + dotnet-sdk = dotnetCorePackages.sdk_7_0; + + preConfigure = '' + # Microsoft.SourceLink.GitHub complains: Unable to determine repository url, the source code won't be available via source link. + cd external/MonoMod + git -c safe.directory='*' remote add origin https://github.com/MonoMod/MonoMod.git + cd ../.. + ''; + + nugetDeps = ./deps.json; + + # Needed for ILAsm projects: https://github.com/NixOS/nixpkgs/issues/370754#issuecomment-2571475814 + linkNugetPackages = true; + + # Microsoft.NET.Sdk complains: The process cannot access the file xxx because it is being used by another process. + enableParallelBuilding = false; + + preBuild = '' + # See .azure-pipelines/prebuild.ps1 + sed -i 's|0\.0\.0-dev|1.${version}.0-nixos-'$(git rev-parse --short=5 HEAD)'|' Celeste.Mod.mm/Mod/Everest/Everest.cs + cat Celeste.Mod.mm/Mod/Everest/Everest.cs + cat <<-EOF > Celeste.Mod.mm/Mod/Helpers/EverestVersion.cs + namespace Celeste.Mod.Helpers { + internal static class EverestBuild${version} { + public static string EverestBuild = "EverestBuild${version}"; + } + } + EOF + ''; + + installPath = builtins.replaceStrings [ "$out" ] [ (placeholder "out") ] phome; + + postInstall = '' + mkdir tmp-EverestSplash + mv ${phome}/EverestSplash* tmp-EverestSplash + mv tmp-EverestSplash ${phome}/EverestSplash + cp ${phome}/piton-runtime.yaml ${phome}/EverestSplash + ''; + + executables = [ ]; + + dontPatchELF = true; + dontStrip = true; + dontPatchShebangs = true; + dontAutoPatchelf = true; + + meta = { + description = "Celeste mod loader"; + license = with lib.licenses; [ mit ]; + maintainers = with lib.maintainers; [ ulysseszhan ]; + homepage = "https://everestapi.github.io"; + platforms = [ "x86_64-linux" ]; + sourceProvenance = with lib.sourceTypes; [ + binaryNativeCode + fromSource + ]; + }; +} diff --git a/pkgs/by-name/ce/celestegame/everest/deps.json b/pkgs/by-name/ce/celestegame/everest/deps.json new file mode 100644 index 00000000000000..d25acfdb57ad3b --- /dev/null +++ b/pkgs/by-name/ce/celestegame/everest/deps.json @@ -0,0 +1,1127 @@ +[ + { + "pname": "DotNetZip", + "version": "1.16.0", + "hash": "sha256-RlzHkO7DxCvRkr+gpM8Abs34XbovmBTmXfO7LtnE75E=" + }, + { + "pname": "IsExternalInit", + "version": "1.0.3", + "hash": "sha256-UfyGrj+hAfsvS/R7tlugTToD//ax9Fy0CameinRn1AU=" + }, + { + "pname": "Jdenticon-net", + "version": "2.2.1", + "hash": "sha256-fycBgjlWi56DyPaLie2xv+PL3141Fq/P5w3J6y51IdI=" + }, + { + "pname": "KeraLua", + "version": "1.3.2", + "hash": "sha256-15C9K/S9L3yzB4wmDRNWQoWNskUVcm6qZjCbQQFGMPI=" + }, + { + "pname": "MAB.DotIgnore", + "version": "3.0.2", + "hash": "sha256-iAX3oCX2092oKXEASUhMkh2A1kh1cBRSkkMJ6BmszRA=" + }, + { + "pname": "Microsoft.AspNetCore.App.Ref", + "version": "3.0.1", + "hash": "sha256-y4VQ8teCZOnCJyg0rh3s1SbbqfoEclB5T6lCfMrxWUw=" + }, + { + "pname": "Microsoft.AspNetCore.App.Ref", + "version": "3.1.10", + "hash": "sha256-51D1XkqFMPHJzOmt1HQ0Bf1n9K0auwEyxTJuqA/8xHY=" + }, + { + "pname": "Microsoft.AspNetCore.App.Ref", + "version": "5.0.0", + "hash": "sha256-z22ZDldoIlDUYeF9Rje0aVPlYAGKIpdj5wDzn1CW+jQ=" + }, + { + "pname": "Microsoft.AspNetCore.App.Ref", + "version": "6.0.31", + "hash": "sha256-rVxnpwa8B1weEzkJIxm+todHXrSdIT3KY38D09MncUI=" + }, + { + "pname": "Microsoft.AspNetCore.App.Runtime.linux-arm64", + "version": "3.0.3", + "hash": "sha256-V92IZZ3Pc2npEBxgstClSahbOqLwEREGkeUsCB1nk6w=" + }, + { + "pname": "Microsoft.AspNetCore.App.Runtime.linux-arm64", + "version": "3.1.32", + "hash": "sha256-vZkj1OFhojFyl//ZqrbZG3j8rGk/6rwqMhvvR6gWCgI=" + }, + { + "pname": "Microsoft.AspNetCore.App.Runtime.linux-arm64", + "version": "5.0.17", + "hash": "sha256-ELWBHK+1ijGTvq1BsK/vJx/MNqKS8daZgrQ0Tj9+faA=" + }, + { + "pname": "Microsoft.AspNetCore.App.Runtime.linux-arm64", + "version": "6.0.31", + "hash": "sha256-z6HNgiyLyXN5+QlktIZmOQh9D4KRHWd6yonmKChEji4=" + }, + { + "pname": "Microsoft.AspNetCore.App.Runtime.linux-x64", + "version": "3.0.3", + "hash": "sha256-CbtnZSF+lvyeIfEUC8a0Jf4EMvYAxa9mvWF9lyLymMk=" + }, + { + "pname": "Microsoft.AspNetCore.App.Runtime.linux-x64", + "version": "3.1.32", + "hash": "sha256-OV3Ie8JGTEwNI4Y6DJFh+ZUrBTwrSdFjEbfljfAwn3s=" + }, + { + "pname": "Microsoft.AspNetCore.App.Runtime.linux-x64", + "version": "5.0.17", + "hash": "sha256-iHn2yGpaL5EM8L7nJJ2aRCIZ+kE98NS+KWUvrWnjzhg=" + }, + { + "pname": "Microsoft.AspNetCore.App.Runtime.linux-x64", + "version": "6.0.31", + "hash": "sha256-Rq97wUeAD2bZhe0XRLB9Ffq1MBU/u4Yq45KwRLz7DRQ=" + }, + { + "pname": "Microsoft.AspNetCore.App.Runtime.osx-arm64", + "version": "6.0.31", + "hash": "sha256-QlAteE0egI+YzouNm4d8+yXRs9E0jfBTVl7KbMxSmnA=" + }, + { + "pname": "Microsoft.AspNetCore.App.Runtime.osx-x64", + "version": "3.0.3", + "hash": "sha256-/RM3zShodmpJI9Fq5T/eRf/reyt7huNOiLHsHhcTBNM=" + }, + { + "pname": "Microsoft.AspNetCore.App.Runtime.osx-x64", + "version": "3.1.32", + "hash": "sha256-LD7skhj3ZqIJlgL2VG/1PqPJT7yGQPuSNkduHhQpM7M=" + }, + { + "pname": "Microsoft.AspNetCore.App.Runtime.osx-x64", + "version": "5.0.17", + "hash": "sha256-TdhOyPN+WA27WFd3PLKdsC+bbyNidOiOOuz/WpHDe+M=" + }, + { + "pname": "Microsoft.AspNetCore.App.Runtime.osx-x64", + "version": "6.0.31", + "hash": "sha256-c1hTOPeoH7STKevPryBv4+IL/7YMfTFm5EakMvrhfI4=" + }, + { + "pname": "Microsoft.Build.Tasks.Git", + "version": "1.1.0", + "hash": "sha256-cwZU5VeF6aRZJqoIevJtF9hdYC1rKEf1GuqgCmoVAzE=" + }, + { + "pname": "Microsoft.Build.Tasks.Git", + "version": "1.1.1", + "hash": "sha256-PHxHmsCty8Si5dCUQSizeHkJrHa9+j2nRsg6Sz+5Za0=" + }, + { + "pname": "Microsoft.CodeAnalysis.Analyzers", + "version": "3.3.4", + "hash": "sha256-qDzTfZBSCvAUu9gzq2k+LOvh6/eRvJ9++VCNck/ZpnE=" + }, + { + "pname": "Microsoft.CodeAnalysis.Common", + "version": "4.6.0", + "hash": "sha256-4koWiniIrv4ZBmS9SZb3347KaejKKh11n7CRj9fkc2M=" + }, + { + "pname": "Microsoft.CodeAnalysis.CSharp", + "version": "4.6.0", + "hash": "sha256-OCxUWSolVrmP2bs2SX9WLjb/U8Box8s1Tayk05/n2/k=" + }, + { + "pname": "Microsoft.CodeAnalysis.CSharp.CodeStyle", + "version": "4.6.0", + "hash": "sha256-+qejVxTCPyWL46UXAEakwHfN33Phaa8JHYZfGnZkerM=" + }, + { + "pname": "Microsoft.Net.Compilers.Toolset", + "version": "4.6.0", + "hash": "sha256-0t9Rai0LEg7zD9Q8TWU92fg2BGIcmXGteLJ5V2BUPh8=" + }, + { + "pname": "Microsoft.NET.HostModel", + "version": "3.1.16", + "hash": "sha256-42cFtaZFzM93I0gZjuDbcEYWM5Pld+kx2MkWu0J66ww=" + }, + { + "pname": "Microsoft.NET.Sdk.IL", + "version": "6.0.0", + "hash": "sha256-Zvmb2eoSatpwnpX06euqRphjTiZJCLA/VTqc9X8oX24=" + }, + { + "pname": "Microsoft.NETCore.App", + "version": "2.1.0", + "hash": "sha256-RJksv5W7LhWJYGmkwYHfiU0s9XLCvT05KxSMz6U1/OE=" + }, + { + "pname": "Microsoft.NETCore.App.Host.linux-arm64", + "version": "3.0.3", + "hash": "sha256-/7khPibSBT3BOOZx3TqCTnisPMXhQfE4f8qVnUelWRA=" + }, + { + "pname": "Microsoft.NETCore.App.Host.linux-arm64", + "version": "3.1.32", + "hash": "sha256-V5yVTC2je2wsv/gqLaVmnzcnDfNGETz0e7/M3MG5z/8=" + }, + { + "pname": "Microsoft.NETCore.App.Host.linux-arm64", + "version": "5.0.17", + "hash": "sha256-a8FLTWaNL6TknXDx+YFwLzcDn7nuq3l9yN2UUrHfZx8=" + }, + { + "pname": "Microsoft.NETCore.App.Host.linux-arm64", + "version": "6.0.31", + "hash": "sha256-mjS1IKBwxDFT2UmcyC5ZMIQ3mWSADw887CIV0pZhQRc=" + }, + { + "pname": "Microsoft.NETCore.App.Host.linux-x64", + "version": "3.0.3", + "hash": "sha256-hIdA8ncOXoDM6/ryKCTVz/vZrqFLffxAgpN/qfl2L6Y=" + }, + { + "pname": "Microsoft.NETCore.App.Host.linux-x64", + "version": "3.1.32", + "hash": "sha256-ajR6pZv0zuzWDyxEnWtAuhasV5biV5lvweEbefTISiM=" + }, + { + "pname": "Microsoft.NETCore.App.Host.linux-x64", + "version": "5.0.17", + "hash": "sha256-exMpVamk8ZzfCQDQcDmQDYJplDcOOU99ic7NSDKUgtE=" + }, + { + "pname": "Microsoft.NETCore.App.Host.linux-x64", + "version": "6.0.31", + "hash": "sha256-VifKEirDStL5vpjnEe0hGsODssK20XBX/Mm6j8G4QIM=" + }, + { + "pname": "Microsoft.NETCore.App.Host.osx-arm64", + "version": "6.0.31", + "hash": "sha256-unElfKN3Ro852wsIzgTIXJJPoYpvVjrsSIwxKtwLUGk=" + }, + { + "pname": "Microsoft.NETCore.App.Host.osx-x64", + "version": "3.0.3", + "hash": "sha256-KHmYiDDnrhQ2yxhx3QU6q9roSpWB9PETJSEBE8Zl6jU=" + }, + { + "pname": "Microsoft.NETCore.App.Host.osx-x64", + "version": "3.1.32", + "hash": "sha256-AOr3qBlvr+WGF79tTq/yvKWJLXqEO4Sv+eTCpZGVz6A=" + }, + { + "pname": "Microsoft.NETCore.App.Host.osx-x64", + "version": "5.0.17", + "hash": "sha256-bDgVacWuwDTJqEL/RbZ2gS9EGexx0OGZsYPnHQPh5Qk=" + }, + { + "pname": "Microsoft.NETCore.App.Host.osx-x64", + "version": "6.0.31", + "hash": "sha256-JiIXW9FPqjEb5cZHZ0otmmbY4gpgRdTZCxxuy12AJkw=" + }, + { + "pname": "Microsoft.NETCore.App.Ref", + "version": "3.0.0", + "hash": "sha256-PHovvd+mPN9HoCF0rFEnS015p7Yj76+e9cfSU4JAI+I=" + }, + { + "pname": "Microsoft.NETCore.App.Ref", + "version": "3.1.0", + "hash": "sha256-nuAvHwmJ2s3Ob1qNDH1+uV3awOZaWlaV3FenTmPUWyM=" + }, + { + "pname": "Microsoft.NETCore.App.Ref", + "version": "5.0.0", + "hash": "sha256-kQ8wpR4crWoqy/jrskat34Y3Nr3nbxoSpEPMnxycwtw=" + }, + { + "pname": "Microsoft.NETCore.App.Ref", + "version": "6.0.31", + "hash": "sha256-p/KpNGwJfvoWNRn057o4t8u8La2LvsmOjF0i2W1URKU=" + }, + { + "pname": "Microsoft.NETCore.App.Runtime.linux-arm64", + "version": "3.0.3", + "hash": "sha256-wob3T5gffr0/9TgvDn90gGrBk3DHe0Yh/dJJSts/Uyk=" + }, + { + "pname": "Microsoft.NETCore.App.Runtime.linux-arm64", + "version": "3.1.32", + "hash": "sha256-eL+GH7cDWSzXPPN9yxQvQ6IQ3AFUfnH0OJ/r8Mmx7I4=" + }, + { + "pname": "Microsoft.NETCore.App.Runtime.linux-arm64", + "version": "5.0.17", + "hash": "sha256-2KU5RRHGbkCA+lCEH5QaBHma1AZqVLWBws7IKxBWkJs=" + }, + { + "pname": "Microsoft.NETCore.App.Runtime.linux-arm64", + "version": "6.0.31", + "hash": "sha256-N3xRbF5nQo9Okixqg1mN86L7VB72bpDR0C6wlfzntPI=" + }, + { + "pname": "Microsoft.NETCore.App.Runtime.linux-x64", + "version": "3.0.3", + "hash": "sha256-mxA9JF2WyEDV8yahdwhe4qfCTbIFroUfmMzPBa91b/o=" + }, + { + "pname": "Microsoft.NETCore.App.Runtime.linux-x64", + "version": "3.1.32", + "hash": "sha256-h4HjfRnvH81dW84S3TCPcCfxeQLiLN7b1ZleRNsprFY=" + }, + { + "pname": "Microsoft.NETCore.App.Runtime.linux-x64", + "version": "5.0.17", + "hash": "sha256-2NpVvrbqct3M1fKiSe/zyt41mf1aV6WUdxIlJod27Ek=" + }, + { + "pname": "Microsoft.NETCore.App.Runtime.linux-x64", + "version": "6.0.31", + "hash": "sha256-TE1DmzoBKO9qKoATBWZPRKXBRoRzs6AafKuubeSwgl8=" + }, + { + "pname": "Microsoft.NETCore.App.Runtime.osx-arm64", + "version": "6.0.31", + "hash": "sha256-Gh+/HbETPJ2LNX9vRo+e8CmbL3YacBUXGHNVcIEQrIQ=" + }, + { + "pname": "Microsoft.NETCore.App.Runtime.osx-x64", + "version": "3.0.3", + "hash": "sha256-4+PuFzubWDvwMdWxcIZnUUHS8fX+MZ/SXY/L2A+AlGE=" + }, + { + "pname": "Microsoft.NETCore.App.Runtime.osx-x64", + "version": "3.1.32", + "hash": "sha256-IcJ45kU65HpYu1EjMB1sf87PTSvPdS2h5uyIzX4acxk=" + }, + { + "pname": "Microsoft.NETCore.App.Runtime.osx-x64", + "version": "5.0.17", + "hash": "sha256-V1arT33a215ZP+Jo/vkrhko78FsA8X8XujZ6jUKfBd4=" + }, + { + "pname": "Microsoft.NETCore.App.Runtime.osx-x64", + "version": "6.0.31", + "hash": "sha256-ZZYzARixjQ42taRJLiTq0ykG1Hm8F/4RkZXM9lowhbI=" + }, + { + "pname": "Microsoft.NETCore.DotNetAppHost", + "version": "2.1.0", + "hash": "sha256-LV8pnNFsKGFONyCTGsd8qB5A+EUIiyvbYWAr0eOEFoI=" + }, + { + "pname": "Microsoft.NETCore.DotNetHostPolicy", + "version": "2.1.0", + "hash": "sha256-FqQm4BLznzRmF1nhk3nEwrdeAdCY35eBmHk6/4+MCPY=" + }, + { + "pname": "Microsoft.NETCore.DotNetHostResolver", + "version": "2.1.0", + "hash": "sha256-5nQTmMhaEvbuT+1f7u0t0tEK3SCVUeXhsExq8tiYBI0=" + }, + { + "pname": "Microsoft.NETCore.Platforms", + "version": "1.1.0", + "hash": "sha256-FeM40ktcObQJk4nMYShB61H/E8B7tIKfl9ObJ0IOcCM=" + }, + { + "pname": "Microsoft.NETCore.Platforms", + "version": "2.1.0", + "hash": "sha256-v09ltBAKTX8iAKuU2nCl+Op/ilVJQ0POZUh2z+u0rVo=" + }, + { + "pname": "Microsoft.NETCore.Platforms", + "version": "3.1.0", + "hash": "sha256-cnygditsEaU86bnYtIthNMymAHqaT/sf9Gjykhzqgb0=" + }, + { + "pname": "Microsoft.NETCore.Platforms", + "version": "3.1.1", + "hash": "sha256-ByV7aEFjGR4L4Tudg4KaJ96lnzr7RhOxzWGE0p5XFRY=" + }, + { + "pname": "Microsoft.NETCore.Targets", + "version": "1.1.0", + "hash": "sha256-0AqQ2gMS8iNlYkrD+BxtIg7cXMnr9xZHtKAuN4bjfaQ=" + }, + { + "pname": "Microsoft.NETCore.Targets", + "version": "2.1.0", + "hash": "sha256-+KdWdA9I392SRqMb9KaiiRZatfvJ9RcdbtyGUkpHW7U=" + }, + { + "pname": "Microsoft.NETFramework.ReferenceAssemblies", + "version": "1.0.3", + "hash": "sha256-FBoJP5DHZF0QHM0xLm9yd4HJZVQOuSpSKA+VQRpphEE=" + }, + { + "pname": "Microsoft.NETFramework.ReferenceAssemblies.net35", + "version": "1.0.3", + "hash": "sha256-sWFWERqIZw2Rp1f71GX8tIVuA0saTVI64sQaRw81ePk=" + }, + { + "pname": "Microsoft.NETFramework.ReferenceAssemblies.net452", + "version": "1.0.3", + "hash": "sha256-RTPuFG8D7gnwINEoEtAqmVm4oTW8K4Z87v1o4DDeLMI=" + }, + { + "pname": "Microsoft.NETFramework.ReferenceAssemblies.net461", + "version": "1.0.3", + "hash": "sha256-vVIonl+4dlCQuxibOZoGR3o1DAhjAYpFW15dnkUpjMk=" + }, + { + "pname": "Microsoft.SourceLink.Common", + "version": "1.1.0", + "hash": "sha256-bVbHHr6Mo1NUdaaQgfj1GvGPzrobRlYb2pI7f4VDslk=" + }, + { + "pname": "Microsoft.SourceLink.Common", + "version": "1.1.1", + "hash": "sha256-b4FaNFneDVDbvJVX1iNyhhLTrnxUfnmyypeJr47GbXY=" + }, + { + "pname": "Microsoft.SourceLink.GitHub", + "version": "1.1.0", + "hash": "sha256-Y5zUGJfiSj8/rQ1lK0t5Zje8rjoUhgbWrR8IpwtzB34=" + }, + { + "pname": "Microsoft.SourceLink.GitHub", + "version": "1.1.1", + "hash": "sha256-3hc9ym5ReONp00ruCKio/Ka1gYXo/jDlUHtfK1wZPiU=" + }, + { + "pname": "Microsoft.Win32.Primitives", + "version": "4.3.0", + "hash": "sha256-mBNDmPXNTW54XLnPAUwBRvkIORFM7/j0D0I2SyQPDEg=" + }, + { + "pname": "Microsoft.Win32.SystemEvents", + "version": "7.0.0", + "hash": "sha256-i6JojctqrqfJ4Wa+BDtaKZEol26jYq5DTQHar2M9B64=" + }, + { + "pname": "Mono.Cecil", + "version": "0.10.4", + "hash": "sha256-NFGkoRKoG+C/drjcK8o5as3wRV2AyJYeeQPOH7NcKpo=" + }, + { + "pname": "Mono.Cecil", + "version": "0.11.4", + "hash": "sha256-HrnRgFsOzfqAWw0fUxi/vkzZd8dMn5zueUeLQWA9qvs=" + }, + { + "pname": "NETStandard.Library", + "version": "1.6.1", + "hash": "sha256-iNan1ix7RtncGWC9AjAZ2sk70DoxOsmEOgQ10fXm4Pw=" + }, + { + "pname": "NETStandard.Library", + "version": "2.0.3", + "hash": "sha256-Prh2RPebz/s8AzHb2sPHg3Jl8s31inv9k+Qxd293ybo=" + }, + { + "pname": "Newtonsoft.Json", + "version": "13.0.2", + "hash": "sha256-ESyjt/R7y9dDvvz5Sftozk+e/3Otn38bOcLGGh69Ot0=" + }, + { + "pname": "Nullable", + "version": "1.3.1", + "hash": "sha256-5x5+l+7YhKjlBR9GEFKrZ8uewyB7eNxMAREwITDJmUM=" + }, + { + "pname": "PolySharp", + "version": "1.12.1", + "hash": "sha256-InvXy8H0e1nXaGAB13PSD68608/K5JslUy7cCbDuZVs=" + }, + { + "pname": "runtime.any.System.Collections", + "version": "4.3.0", + "hash": "sha256-4PGZqyWhZ6/HCTF2KddDsbmTTjxs2oW79YfkberDZS8=" + }, + { + "pname": "runtime.any.System.Diagnostics.Tools", + "version": "4.3.0", + "hash": "sha256-8yLKFt2wQxkEf7fNfzB+cPUCjYn2qbqNgQ1+EeY2h/I=" + }, + { + "pname": "runtime.any.System.Diagnostics.Tracing", + "version": "4.3.0", + "hash": "sha256-dsmTLGvt8HqRkDWP8iKVXJCS+akAzENGXKPV18W2RgI=" + }, + { + "pname": "runtime.any.System.Globalization", + "version": "4.3.0", + "hash": "sha256-PaiITTFI2FfPylTEk7DwzfKeiA/g/aooSU1pDcdwWLU=" + }, + { + "pname": "runtime.any.System.Globalization.Calendars", + "version": "4.3.0", + "hash": "sha256-AYh39tgXJVFu8aLi9Y/4rK8yWMaza4S4eaxjfcuEEL4=" + }, + { + "pname": "runtime.any.System.IO", + "version": "4.3.0", + "hash": "sha256-vej7ySRhyvM3pYh/ITMdC25ivSd0WLZAaIQbYj/6HVE=" + }, + { + "pname": "runtime.any.System.Reflection", + "version": "4.3.0", + "hash": "sha256-ns6f++lSA+bi1xXgmW1JkWFb2NaMD+w+YNTfMvyAiQk=" + }, + { + "pname": "runtime.any.System.Reflection.Extensions", + "version": "4.3.0", + "hash": "sha256-Y2AnhOcJwJVYv7Rp6Jz6ma0fpITFqJW+8rsw106K2X8=" + }, + { + "pname": "runtime.any.System.Reflection.Primitives", + "version": "4.3.0", + "hash": "sha256-LkPXtiDQM3BcdYkAm5uSNOiz3uF4J45qpxn5aBiqNXQ=" + }, + { + "pname": "runtime.any.System.Resources.ResourceManager", + "version": "4.3.0", + "hash": "sha256-9EvnmZslLgLLhJ00o5MWaPuJQlbUFcUF8itGQNVkcQ4=" + }, + { + "pname": "runtime.any.System.Runtime", + "version": "4.3.0", + "hash": "sha256-qwhNXBaJ1DtDkuRacgHwnZmOZ1u9q7N8j0cWOLYOELM=" + }, + { + "pname": "runtime.any.System.Runtime.Handles", + "version": "4.3.0", + "hash": "sha256-PQRACwnSUuxgVySO1840KvqCC9F8iI9iTzxNW0RcBS4=" + }, + { + "pname": "runtime.any.System.Runtime.InteropServices", + "version": "4.3.0", + "hash": "sha256-Kaw5PnLYIiqWbsoF3VKJhy7pkpoGsUwn4ZDCKscbbzA=" + }, + { + "pname": "runtime.any.System.Text.Encoding", + "version": "4.3.0", + "hash": "sha256-Q18B9q26MkWZx68exUfQT30+0PGmpFlDgaF0TnaIGCs=" + }, + { + "pname": "runtime.any.System.Text.Encoding.Extensions", + "version": "4.3.0", + "hash": "sha256-6MYj0RmLh4EVqMtO/MRqBi0HOn5iG4x9JimgCCJ+EFM=" + }, + { + "pname": "runtime.any.System.Threading.Tasks", + "version": "4.3.0", + "hash": "sha256-agdOM0NXupfHbKAQzQT8XgbI9B8hVEh+a/2vqeHctg4=" + }, + { + "pname": "runtime.any.System.Threading.Timer", + "version": "4.3.0", + "hash": "sha256-BgHxXCIbicVZtpgMimSXixhFC3V+p5ODqeljDjO8hCs=" + }, + { + "pname": "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-LXUPLX3DJxsU1Pd3UwjO1PO9NM2elNEDXeu2Mu/vNps=" + }, + { + "pname": "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-qeSqaUI80+lqw5MK4vMpmO0CZaqrmYktwp6L+vQAb0I=" + }, + { + "pname": "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-SrHqT9wrCBsxILWtaJgGKd6Odmxm8/Mh7Kh0CUkZVzA=" + }, + { + "pname": "runtime.linux-arm64.Microsoft.NETCore.App", + "version": "2.1.0", + "hash": "sha256-5qgn5Gup3/R4dldeav2nfJ4uo3sy0l5fHRI3WkWQz5c=" + }, + { + "pname": "runtime.linux-arm64.Microsoft.NETCore.DotNetAppHost", + "version": "2.1.0", + "hash": "sha256-RSh052cIdgFYvR0boEYBPuYbngZ9luQOJ1cDqfP6ZE4=" + }, + { + "pname": "runtime.linux-arm64.Microsoft.NETCore.DotNetHostPolicy", + "version": "2.1.0", + "hash": "sha256-AQB5JIEU9k9gj0b7+273uNd87cuNLfBAEUbt1gRiiAI=" + }, + { + "pname": "runtime.linux-arm64.Microsoft.NETCore.DotNetHostResolver", + "version": "2.1.0", + "hash": "sha256-LRCcKx4O1ahLC1wHEXdWE4FPmN3iOX7UtK58k7Va/AQ=" + }, + { + "pname": "runtime.linux-x64.Microsoft.NETCore.App", + "version": "2.1.0", + "hash": "sha256-qFtPLe3t/V9DZTaYhAO6MbVsyzH4hcQQUvyIJ6ywbEw=" + }, + { + "pname": "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost", + "version": "2.1.0", + "hash": "sha256-NMuEFKc68Vn4bVoX6kdGSQeyDpktUYliUg6Lbj4E8FU=" + }, + { + "pname": "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy", + "version": "2.1.0", + "hash": "sha256-U/WlbUpImqPjZf075WgBOb1o1i1H3VOL4QbzHfQ9Itk=" + }, + { + "pname": "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver", + "version": "2.1.0", + "hash": "sha256-vcB6FY1GDP+kTsmp9OXpPg50sXKqOSJzWUSuNlN1+rs=" + }, + { + "pname": "runtime.linux-x64.Microsoft.NETCore.ILAsm", + "version": "6.0.0", + "hash": "sha256-i/UcSf9HhYBtscSZKsaPReL/ntN8EQhmEpFIkEfoGhQ=" + }, + { + "pname": "runtime.linux-x64.Microsoft.NETCore.ILDAsm", + "version": "6.0.0", + "hash": "sha256-flN7eEFoqIUmbuGHgVu/R1F7trwjOXwxmBVw/+Jv2Hg=" + }, + { + "pname": "runtime.native.System", + "version": "4.3.0", + "hash": "sha256-ZBZaodnjvLXATWpXXakFgcy6P+gjhshFXmglrL5xD5Y=" + }, + { + "pname": "runtime.native.System.IO.Compression", + "version": "4.3.0", + "hash": "sha256-DWnXs4vlKoU6WxxvCArTJupV6sX3iBbZh8SbqfHace8=" + }, + { + "pname": "runtime.native.System.Net.Http", + "version": "4.3.0", + "hash": "sha256-c556PyheRwpYhweBjSfIwEyZHnAUB8jWioyKEcp/2dg=" + }, + { + "pname": "runtime.native.System.Security.Cryptography.Apple", + "version": "4.3.0", + "hash": "sha256-2IhBv0i6pTcOyr8FFIyfPEaaCHUmJZ8DYwLUwJ+5waw=" + }, + { + "pname": "runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-Jy01KhtcCl2wjMpZWH+X3fhHcVn+SyllWFY8zWlz/6I=" + }, + { + "pname": "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-wyv00gdlqf8ckxEdV7E+Ql9hJIoPcmYEuyeWb5Oz3mM=" + }, + { + "pname": "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-zi+b4sCFrA9QBiSGDD7xPV27r3iHGlV99gpyVUjRmc4=" + }, + { + "pname": "runtime.osx-x64.Microsoft.NETCore.App", + "version": "2.1.0", + "hash": "sha256-fBo/VGjei59jdvNYbRviRaDUkg/RfgqqKw9lIRCp8BM=" + }, + { + "pname": "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost", + "version": "2.1.0", + "hash": "sha256-Rb+fT3md3AwwAmHUCAL3GFBEigsKombr9LAG3nfabgI=" + }, + { + "pname": "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy", + "version": "2.1.0", + "hash": "sha256-T4Ef8NNs0dK5EtMFqrklicsQ4x7/P3osvTOUtMW+bpc=" + }, + { + "pname": "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver", + "version": "2.1.0", + "hash": "sha256-6NFa8v4rFCvPjMjKtFQnvoIqhuDDo7rXK17OSenrChQ=" + }, + { + "pname": "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple", + "version": "4.3.0", + "hash": "sha256-serkd4A7F6eciPiPJtUyJyxzdAtupEcWIZQ9nptEzIM=" + }, + { + "pname": "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-gybQU6mPgaWV3rBG2dbH6tT3tBq8mgze3PROdsuWnX0=" + }, + { + "pname": "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-VsP72GVveWnGUvS/vjOQLv1U80H2K8nZ4fDAmI61Hm4=" + }, + { + "pname": "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-4yKGa/IrNCKuQ3zaDzILdNPD32bNdy6xr5gdJigyF5g=" + }, + { + "pname": "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-HmdJhhRsiVoOOCcUvAwdjpMRiyuSwdcgEv2j9hxi+Zc=" + }, + { + "pname": "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-pVFUKuPPIx0edQKjzRon3zKq8zhzHEzko/lc01V/jdw=" + }, + { + "pname": "runtime.unix.Microsoft.Win32.Primitives", + "version": "4.3.0", + "hash": "sha256-LZb23lRXzr26tRS5aA0xyB08JxiblPDoA7HBvn6awXg=" + }, + { + "pname": "runtime.unix.System.Console", + "version": "4.3.0", + "hash": "sha256-AHkdKShTRHttqfMjmi+lPpTuCrM5vd/WRy6Kbtie190=" + }, + { + "pname": "runtime.unix.System.Diagnostics.Debug", + "version": "4.3.0", + "hash": "sha256-ReoazscfbGH+R6s6jkg5sIEHWNEvjEoHtIsMbpc7+tI=" + }, + { + "pname": "runtime.unix.System.IO.FileSystem", + "version": "4.3.0", + "hash": "sha256-Pf4mRl6YDK2x2KMh0WdyNgv0VUNdSKVDLlHqozecy5I=" + }, + { + "pname": "runtime.unix.System.Net.Primitives", + "version": "4.3.0", + "hash": "sha256-pHJ+I6i16MV6m77uhTC6GPY6jWGReE3SSP3fVB59ti0=" + }, + { + "pname": "runtime.unix.System.Net.Sockets", + "version": "4.3.0", + "hash": "sha256-IvgOeA2JuBjKl5yAVGjPYMPDzs9phb3KANs95H9v1w4=" + }, + { + "pname": "runtime.unix.System.Private.Uri", + "version": "4.3.0", + "hash": "sha256-c5tXWhE/fYbJVl9rXs0uHh3pTsg44YD1dJvyOA0WoMs=" + }, + { + "pname": "runtime.unix.System.Runtime.Extensions", + "version": "4.3.0", + "hash": "sha256-l8S9gt6dk3qYG6HYonHtdlYtBKyPb29uQ6NDjmrt3V4=" + }, + { + "pname": "System.AppContext", + "version": "4.3.0", + "hash": "sha256-yg95LNQOwFlA1tWxXdQkVyJqT4AnoDc+ACmrNvzGiZg=" + }, + { + "pname": "System.Buffers", + "version": "4.3.0", + "hash": "sha256-XqZWb4Kd04960h4U9seivjKseGA/YEIpdplfHYHQ9jk=" + }, + { + "pname": "System.Buffers", + "version": "4.5.1", + "hash": "sha256-wws90sfi9M7kuCPWkv1CEYMJtCqx9QB/kj0ymlsNaxI=" + }, + { + "pname": "System.Collections", + "version": "4.3.0", + "hash": "sha256-afY7VUtD6w/5mYqrce8kQrvDIfS2GXDINDh73IjxJKc=" + }, + { + "pname": "System.Collections.Concurrent", + "version": "4.3.0", + "hash": "sha256-KMY5DfJnDeIsa13DpqvyN8NkReZEMAFnlmNglVoFIXI=" + }, + { + "pname": "System.Collections.Immutable", + "version": "6.0.0", + "hash": "sha256-DKEbpFqXCIEfqp9p3ezqadn5b/S1YTk32/EQK+tEScs=" + }, + { + "pname": "System.Collections.Immutable", + "version": "7.0.0", + "hash": "sha256-9an2wbxue2qrtugYES9awshQg+KfJqajhnhs45kQIdk=" + }, + { + "pname": "System.Console", + "version": "4.3.0", + "hash": "sha256-Xh3PPBZr0pDbDaK8AEHbdGz7ePK6Yi1ZyRWI1JM6mbo=" + }, + { + "pname": "System.Diagnostics.Debug", + "version": "4.3.0", + "hash": "sha256-fkA79SjPbSeiEcrbbUsb70u9B7wqbsdM9s1LnoKj0gM=" + }, + { + "pname": "System.Diagnostics.DiagnosticSource", + "version": "4.3.0", + "hash": "sha256-OFJRb0ygep0Z3yDBLwAgM/Tkfs4JCDtsNhwDH9cd1Xw=" + }, + { + "pname": "System.Diagnostics.Tools", + "version": "4.3.0", + "hash": "sha256-gVOv1SK6Ape0FQhCVlNOd9cvQKBvMxRX9K0JPVi8w0Y=" + }, + { + "pname": "System.Diagnostics.Tracing", + "version": "4.3.0", + "hash": "sha256-hCETZpHHGVhPYvb4C0fh4zs+8zv4GPoixagkLZjpa9Q=" + }, + { + "pname": "System.Drawing.Common", + "version": "7.0.0", + "hash": "sha256-t4FBgTMhuOA5FA23fg0WQOGuH0njV7hJXST/Ln/Znks=" + }, + { + "pname": "System.Globalization", + "version": "4.3.0", + "hash": "sha256-caL0pRmFSEsaoeZeWN5BTQtGrAtaQPwFi8YOZPZG5rI=" + }, + { + "pname": "System.Globalization.Calendars", + "version": "4.3.0", + "hash": "sha256-uNOD0EOVFgnS2fMKvMiEtI9aOw00+Pfy/H+qucAQlPc=" + }, + { + "pname": "System.Globalization.Extensions", + "version": "4.3.0", + "hash": "sha256-mmJWA27T0GRVuFP9/sj+4TrR4GJWrzNIk2PDrbr7RQk=" + }, + { + "pname": "System.IO", + "version": "4.3.0", + "hash": "sha256-ruynQHekFP5wPrDiVyhNiRIXeZ/I9NpjK5pU+HPDiRY=" + }, + { + "pname": "System.IO.Compression", + "version": "4.3.0", + "hash": "sha256-f5PrQlQgj5Xj2ZnHxXW8XiOivaBvfqDao9Sb6AVinyA=" + }, + { + "pname": "System.IO.Compression.ZipFile", + "version": "4.3.0", + "hash": "sha256-WQl+JgWs+GaRMeiahTFUbrhlXIHapzcpTFXbRvAtvvs=" + }, + { + "pname": "System.IO.FileSystem", + "version": "4.3.0", + "hash": "sha256-vNIYnvlayuVj0WfRfYKpDrhDptlhp1pN8CYmlVd2TXw=" + }, + { + "pname": "System.IO.FileSystem.Primitives", + "version": "4.3.0", + "hash": "sha256-LMnfg8Vwavs9cMnq9nNH8IWtAtSfk0/Fy4s4Rt9r1kg=" + }, + { + "pname": "System.Linq", + "version": "4.3.0", + "hash": "sha256-R5uiSL3l6a3XrXSSL6jz+q/PcyVQzEAByiuXZNSqD/A=" + }, + { + "pname": "System.Linq.Expressions", + "version": "4.3.0", + "hash": "sha256-+3pvhZY7rip8HCbfdULzjlC9FPZFpYoQxhkcuFm2wk8=" + }, + { + "pname": "System.Memory", + "version": "4.5.4", + "hash": "sha256-3sCEfzO4gj5CYGctl9ZXQRRhwAraMQfse7yzKoRe65E=" + }, + { + "pname": "System.Memory", + "version": "4.5.5", + "hash": "sha256-EPQ9o1Kin7KzGI5O3U3PUQAZTItSbk9h/i4rViN3WiI=" + }, + { + "pname": "System.Net.Http", + "version": "4.3.0", + "hash": "sha256-UoBB7WPDp2Bne/fwxKF0nE8grJ6FzTMXdT/jfsphj8Q=" + }, + { + "pname": "System.Net.NameResolution", + "version": "4.3.0", + "hash": "sha256-eGZwCBExWsnirWBHyp2sSSSXp6g7I6v53qNmwPgtJ5c=" + }, + { + "pname": "System.Net.Primitives", + "version": "4.3.0", + "hash": "sha256-MY7Z6vOtFMbEKaLW9nOSZeAjcWpwCtdO7/W1mkGZBzE=" + }, + { + "pname": "System.Net.Sockets", + "version": "4.3.0", + "hash": "sha256-il7dr5VT/QWDg/0cuh+4Es2u8LY//+qqiY9BZmYxSus=" + }, + { + "pname": "System.Numerics.Vectors", + "version": "4.4.0", + "hash": "sha256-auXQK2flL/JpnB/rEcAcUm4vYMCYMEMiWOCAlIaqu2U=" + }, + { + "pname": "System.ObjectModel", + "version": "4.3.0", + "hash": "sha256-gtmRkWP2Kwr3nHtDh0yYtce38z1wrGzb6fjm4v8wN6Q=" + }, + { + "pname": "System.Private.Uri", + "version": "4.3.0", + "hash": "sha256-fVfgcoP4AVN1E5wHZbKBIOPYZ/xBeSIdsNF+bdukIRM=" + }, + { + "pname": "System.Reflection", + "version": "4.3.0", + "hash": "sha256-NQSZRpZLvtPWDlvmMIdGxcVuyUnw92ZURo0hXsEshXY=" + }, + { + "pname": "System.Reflection.Emit", + "version": "4.3.0", + "hash": "sha256-5LhkDmhy2FkSxulXR+bsTtMzdU3VyyuZzsxp7/DwyIU=" + }, + { + "pname": "System.Reflection.Emit", + "version": "4.7.0", + "hash": "sha256-Fw/CSRD+wajH1MqfKS3Q/sIrUH7GN4K+F+Dx68UPNIg=" + }, + { + "pname": "System.Reflection.Emit.ILGeneration", + "version": "4.3.0", + "hash": "sha256-mKRknEHNls4gkRwrEgi39B+vSaAz/Gt3IALtS98xNnA=" + }, + { + "pname": "System.Reflection.Emit.ILGeneration", + "version": "4.7.0", + "hash": "sha256-GUnQeGo/DtvZVQpFnESGq7lJcjB30/KnDY7Kd2G/ElE=" + }, + { + "pname": "System.Reflection.Emit.Lightweight", + "version": "4.3.0", + "hash": "sha256-rKx4a9yZKcajloSZHr4CKTVJ6Vjh95ni+zszPxWjh2I=" + }, + { + "pname": "System.Reflection.Emit.Lightweight", + "version": "4.7.0", + "hash": "sha256-V0Wz/UUoNIHdTGS9e1TR89u58zJjo/wPUWw6VaVyclU=" + }, + { + "pname": "System.Reflection.Extensions", + "version": "4.3.0", + "hash": "sha256-mMOCYzUenjd4rWIfq7zIX9PFYk/daUyF0A8l1hbydAk=" + }, + { + "pname": "System.Reflection.Metadata", + "version": "1.5.0", + "hash": "sha256-wM75ACJUeypeOdaBUj4oTYiSWmg7A1usMpwRQXjSGK8=" + }, + { + "pname": "System.Reflection.Metadata", + "version": "7.0.0", + "hash": "sha256-GwAKQhkhPBYTqmRdG9c9taqrKSKDwyUgOEhWLKxWNPI=" + }, + { + "pname": "System.Reflection.Primitives", + "version": "4.3.0", + "hash": "sha256-5ogwWB4vlQTl3jjk1xjniG2ozbFIjZTL9ug0usZQuBM=" + }, + { + "pname": "System.Reflection.TypeExtensions", + "version": "4.3.0", + "hash": "sha256-4U4/XNQAnddgQIHIJq3P2T80hN0oPdU2uCeghsDTWng=" + }, + { + "pname": "System.Resources.ResourceManager", + "version": "4.3.0", + "hash": "sha256-idiOD93xbbrbwwSnD4mORA9RYi/D/U48eRUsn/WnWGo=" + }, + { + "pname": "System.Runtime", + "version": "4.3.0", + "hash": "sha256-51813WXpBIsuA6fUtE5XaRQjcWdQ2/lmEokJt97u0Rg=" + }, + { + "pname": "System.Runtime.CompilerServices.Unsafe", + "version": "6.0.0", + "hash": "sha256-bEG1PnDp7uKYz/OgLOWs3RWwQSVYm+AnPwVmAmcgp2I=" + }, + { + "pname": "System.Runtime.Extensions", + "version": "4.3.0", + "hash": "sha256-wLDHmozr84v1W2zYCWYxxj0FR0JDYHSVRaRuDm0bd/o=" + }, + { + "pname": "System.Runtime.Handles", + "version": "4.3.0", + "hash": "sha256-KJ5aXoGpB56Y6+iepBkdpx/AfaJDAitx4vrkLqR7gms=" + }, + { + "pname": "System.Runtime.InteropServices", + "version": "4.3.0", + "hash": "sha256-8sDH+WUJfCR+7e4nfpftj/+lstEiZixWUBueR2zmHgI=" + }, + { + "pname": "System.Runtime.InteropServices.RuntimeInformation", + "version": "4.3.0", + "hash": "sha256-MYpl6/ZyC6hjmzWRIe+iDoldOMW1mfbwXsduAnXIKGA=" + }, + { + "pname": "System.Runtime.Numerics", + "version": "4.3.0", + "hash": "sha256-P5jHCgMbgFMYiONvzmaKFeOqcAIDPu/U8bOVrNPYKqc=" + }, + { + "pname": "System.Security.AccessControl", + "version": "4.7.0", + "hash": "sha256-/9ZCPIHLdhzq7OW4UKqTsR0O93jjHd6BRG1SRwgHE1g=" + }, + { + "pname": "System.Security.Claims", + "version": "4.3.0", + "hash": "sha256-Fua/rDwAqq4UByRVomAxMPmDBGd5eImRqHVQIeSxbks=" + }, + { + "pname": "System.Security.Cryptography.Algorithms", + "version": "4.3.0", + "hash": "sha256-tAJvNSlczYBJ3Ed24Ae27a55tq/n4D3fubNQdwcKWA8=" + }, + { + "pname": "System.Security.Cryptography.Cng", + "version": "4.3.0", + "hash": "sha256-u17vy6wNhqok91SrVLno2M1EzLHZm6VMca85xbVChsw=" + }, + { + "pname": "System.Security.Cryptography.Csp", + "version": "4.3.0", + "hash": "sha256-oefdTU/Z2PWU9nlat8uiRDGq/PGZoSPRgkML11pmvPQ=" + }, + { + "pname": "System.Security.Cryptography.Encoding", + "version": "4.3.0", + "hash": "sha256-Yuge89N6M+NcblcvXMeyHZ6kZDfwBv3LPMDiF8HhJss=" + }, + { + "pname": "System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-DL+D2sc2JrQiB4oAcUggTFyD8w3aLEjJfod5JPe+Oz4=" + }, + { + "pname": "System.Security.Cryptography.Primitives", + "version": "4.3.0", + "hash": "sha256-fnFi7B3SnVj5a+BbgXnbjnGNvWrCEU6Hp/wjsjWz318=" + }, + { + "pname": "System.Security.Cryptography.X509Certificates", + "version": "4.3.0", + "hash": "sha256-MG3V/owDh273GCUPsGGraNwaVpcydupl3EtPXj6TVG0=" + }, + { + "pname": "System.Security.Permissions", + "version": "4.7.0", + "hash": "sha256-BGgXMLUi5rxVmmChjIhcXUxisJjvlNToXlyaIbUxw40=" + }, + { + "pname": "System.Security.Principal", + "version": "4.3.0", + "hash": "sha256-rjudVUHdo8pNJg2EVEn0XxxwNo5h2EaYo+QboPkXlYk=" + }, + { + "pname": "System.Security.Principal.Windows", + "version": "4.3.0", + "hash": "sha256-mbdLVUcEwe78p3ZnB6jYsizNEqxMaCAWI3tEQNhRQAE=" + }, + { + "pname": "System.Security.Principal.Windows", + "version": "4.7.0", + "hash": "sha256-rWBM2U8Kq3rEdaa1MPZSYOOkbtMGgWyB8iPrpIqmpqg=" + }, + { + "pname": "System.Text.Encoding", + "version": "4.3.0", + "hash": "sha256-GctHVGLZAa/rqkBNhsBGnsiWdKyv6VDubYpGkuOkBLg=" + }, + { + "pname": "System.Text.Encoding.CodePages", + "version": "4.7.1", + "hash": "sha256-OUA8ttAKGgqD5KUwtnO2OewBF/tJI0nO3YcunK5qMPg=" + }, + { + "pname": "System.Text.Encoding.CodePages", + "version": "7.0.0", + "hash": "sha256-eCKTVwumD051ZEcoJcDVRGnIGAsEvKpfH3ydKluHxmo=" + }, + { + "pname": "System.Text.Encoding.Extensions", + "version": "4.3.0", + "hash": "sha256-vufHXg8QAKxHlujPHHcrtGwAqFmsCD6HKjfDAiHyAYc=" + }, + { + "pname": "System.Text.RegularExpressions", + "version": "4.3.0", + "hash": "sha256-VLCk1D1kcN2wbAe3d0YQM/PqCsPHOuqlBY1yd2Yo+K0=" + }, + { + "pname": "System.Threading", + "version": "4.3.0", + "hash": "sha256-ZDQ3dR4pzVwmaqBg4hacZaVenQ/3yAF/uV7BXZXjiWc=" + }, + { + "pname": "System.Threading.Tasks", + "version": "4.3.0", + "hash": "sha256-Z5rXfJ1EXp3G32IKZGiZ6koMjRu0n8C1NGrwpdIen4w=" + }, + { + "pname": "System.Threading.Tasks.Extensions", + "version": "4.3.0", + "hash": "sha256-X2hQ5j+fxcmnm88Le/kSavjiGOmkcumBGTZKBLvorPc=" + }, + { + "pname": "System.Threading.Tasks.Extensions", + "version": "4.5.4", + "hash": "sha256-owSpY8wHlsUXn5xrfYAiu847L6fAKethlvYx97Ri1ng=" + }, + { + "pname": "System.Threading.ThreadPool", + "version": "4.3.0", + "hash": "sha256-wW0QdvssRoaOfQLazTGSnwYTurE4R8FxDx70pYkL+gg=" + }, + { + "pname": "System.Threading.Timer", + "version": "4.3.0", + "hash": "sha256-pmhslmhQhP32TWbBzoITLZ4BoORBqYk25OWbru04p9s=" + }, + { + "pname": "System.ValueTuple", + "version": "4.5.0", + "hash": "sha256-niH6l2fU52vAzuBlwdQMw0OEoRS/7E1w5smBFoqSaAI=" + }, + { + "pname": "System.Windows.Extensions", + "version": "4.7.0", + "hash": "sha256-yW+GvQranReaqPw5ZFv+mSjByQ5y1pRLl05JIEf3tYU=" + }, + { + "pname": "System.Xml.ReaderWriter", + "version": "4.3.0", + "hash": "sha256-QQ8KgU0lu4F5Unh+TbechO//zaAGZ4MfgvW72Cn1hzA=" + }, + { + "pname": "System.Xml.XDocument", + "version": "4.3.0", + "hash": "sha256-rWtdcmcuElNOSzCehflyKwHkDRpiOhJJs8CeQ0l1CCI=" + }, + { + "pname": "UnNuGetizer", + "version": "1.0.6", + "hash": "sha256-ofsRZyQHe8XQH7qNiUQRVPLf7j1lYwLFaJ3MZTJf4wE=" + }, + { + "pname": "YamlDotNet", + "version": "8.1.2", + "hash": "sha256-Cx37jFMJWPT3LvkWwiZ1ksKwaZxpPzQ9UscAwlstsdI=" + } +] diff --git a/pkgs/by-name/ce/celestegame/package.nix b/pkgs/by-name/ce/celestegame/package.nix new file mode 100644 index 00000000000000..f4be450b3ad883 --- /dev/null +++ b/pkgs/by-name/ce/celestegame/package.nix @@ -0,0 +1,195 @@ +{ + lib, + callPackage, + buildFHSEnv, + fetchzip, + makeDesktopItem, + writeShellScript, + autoPatchelfHook, + + overrideSrc ? null, + # A package. Omit to build without Everest. + everest ? null, + # If build with Everest, must set writableDir to the path of a writable dir + # so that the mods can be installed there. + # It must be an absolute path. + # Example: "/home/kat/.local/share/Everest" + writableDir ? null, + # Optionally set paths of symlinks to the installation dir of Celeste. + # You can use this in Olympus so that you don't have to change installation dir path + # every time the nix store path changes. + # The links are updated every time the command `celeste` is run. + gameDir ? [ ], + # This will be appended to everest-launch.txt. + launchFlags ? "", + # This will be appended to everest-env.txt. + launchEnv ? "", +}: + +let + pname = "celeste"; + phome = "$out/lib/Celeste"; + + writableDir' = + if writableDir == null && everest != null then + lib.warn "writableDir is not set, so mods will not work." "/tmp" + else + writableDir; + gameDir' = lib.toList gameDir; + + everestLogFilename = "everest-log.txt"; + + celeste = callPackage ./celeste { + inherit + everest + overrideSrc + launchFlags + launchEnv + everestLogFilename + ; + writableDir = writableDir'; + }; + celesteHome = "${celeste}/lib/Celeste"; + + desktopItem = makeDesktopItem { + name = "celeste"; + desktopName = "Celeste"; + genericName = "Celeste"; + comment = celeste.meta.description; + exec = pname; # The executable name in buildFHSEnv is its pname + icon = "Celeste"; + categories = [ "Game" ]; + }; + +in +buildFHSEnv { + inherit pname; + version = celeste.version + (lib.optionalString (everest != null) "+everest.${everest.version}"); + + multiPkgs = + pkgs: + with pkgs; + [ + glib + glibc_multi + kdePackages.wayland + libxkbcommon + libgcc + mesa + libdrm + expat + alsa-lib + at-spi2-atk + libGL + pcre2 + libffi + zlib + util-linux.lib + libselinux + nspr + systemd + gtk3 + pango + harfbuzz + fontconfig + fribidi + cairo + libepoxy + tinysparql + libthai + libpng + freetype + pixman + libcap + graphite2 + bzip2 + brotli + libjpeg + json-glib + libxml2 + sqlite + libdatrie + ffmpeg + nss + dbus.lib + acl + attr + gmp + readline + libpulseaudio + pipewire + ] + ++ (with xorg; [ + libX11 + libXcomposite + libXdamage + libXfixes + libXext + libxcb + libXcursor + libXinerama + libXi + libXrandr + libXScrnSaver + libXxf86vm + libXau + libXdmcp + ]); + + targetPkgs = + pkgs: with pkgs; [ + celeste + ]; + + extraInstallCommands = '' + icon=$out/share/icons/hicolor/512x512/apps/Celeste.png + mkdir -p $(dirname $icon) + ln -s ${celesteHome}/Celeste.png $icon + cp -r ${desktopItem}/* $out + ''; + + runScript = writeShellScript "Celeste" ( + lib.optionalString (writableDir' != null) '' + mkdir -p "${writableDir'}" + touch "${writableDir'}/log.txt" + '' + + lib.optionalString (everest != null) '' + mkdir -p "${writableDir'}"/{LogHistory,Mods,CrashLogs} + touch "${writableDir'}/${everestLogFilename}" + '' + + lib.optionalString (gameDir' != [ ]) ( + lib.concatMapStrings (link: '' + mkdir -p "$(dirname "${link}")" + if [ -L "${link}" ]; then + if [ ${celesteHome} != "$(readlink "${link}")" ]; then + rm "${link}" + ln -s ${celesteHome} "${link}" + fi + else + rm -r "${link}" + ln -s ${celesteHome} "${link}" + fi + '') gameDir' + ) + + '' + cd /lib/Celeste + exec ./Celeste "$@" + '' + ); + + passthru.celeste-unwrapped = celeste; + passthru.everest = callPackage ./everest { }; + passthru.everest-bin = callPackage ./everest-bin { }; + + meta = { + inherit (celeste.meta) + homepage + downloadPage + description + license + sourceProvenance + platforms + ; + maintainers = with lib.maintainers; [ ulysseszhan ]; + }; +}