From 1c12649b458739b9d8beff8e5ee1d0e79e947925 Mon Sep 17 00:00:00 2001 From: Petingoso Date: Sun, 5 May 2024 17:32:50 +0100 Subject: [PATCH] olympus: init at 24.07.06.02 This is an attempt to package [Olympus](https://everestapi.github.io/), a GUI for installing Everest and managing Celeste mods. This is based on this [draft](https://github.com/NixOS/nixpkgs/pull/295258), with the authors permission. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It maintains the previous issue of not being able to launch Steam versions of Celeste from the command line but that's not feasible without upstream changes. I only have to note that it has a popup complaining about finishing the installation but that's due to xdg-mime x-scheme-handler/everest not being set. Finally I want to note that it depends on lua51Packages.nfd, which is broken while [this](https://github.com/NixOS/nixpkgs/pull/309026) isn't merged so currently has the fix there. Finally, [Lönn](https://github.com/CelestialCartographers/Loenn) works as expected, being the installation managed by the program. Ahorn is deprecated(in favor of Loenn) and it crashes over trying to run dynamic executables olympus: fixed zenity argument olympus: bugfix add openssl to fhs olympus: fixed to use the default nfd instead of patched version olympus: changed location of ndf arg olympus: bugfix: add xdg-utils as runtime dependency to fix pop-up olympus: deleted zenity.patch Due to nfd lua package being fixed, this patch is no longer needed olympus: fix use of wrong nfd package olympus: bumped up version to 24.07.06.02 olympus: format files with nixfmt-rfc --- pkgs/by-name/ol/olympus/deps.nix | 51 +++++++++ pkgs/by-name/ol/olympus/package.nix | 166 ++++++++++++++++++++++++++++ 2 files changed, 217 insertions(+) create mode 100644 pkgs/by-name/ol/olympus/deps.nix create mode 100644 pkgs/by-name/ol/olympus/package.nix diff --git a/pkgs/by-name/ol/olympus/deps.nix b/pkgs/by-name/ol/olympus/deps.nix new file mode 100644 index 00000000000000..82da86b0514d7b --- /dev/null +++ b/pkgs/by-name/ol/olympus/deps.nix @@ -0,0 +1,51 @@ +# This file was automatically generated by passthru.fetch-deps. +# Please dont edit it manually, your changes might get overwritten! + +{ fetchNuGet }: +[ + (fetchNuGet { + pname = "Microsoft.NETFramework.ReferenceAssemblies"; + version = "1.0.2"; + sha256 = "0i42rn8xmvhn08799manpym06kpw89qy9080myyy2ngy565pqh0a"; + }) + (fetchNuGet { + pname = "Microsoft.NETFramework.ReferenceAssemblies.net452"; + version = "1.0.2"; + sha256 = "02xpdaynfglblvi2brszspvz0rz3admzh35shnqgik6s1x75n82k"; + }) + (fetchNuGet { + pname = "Mono.Cecil"; + version = "0.11.4"; + sha256 = "1yxa7mh432s7g7p9r7scqxvxjk5ypwc567qdbf0gmk8fbf0d3f8y"; + }) + (fetchNuGet { + pname = "MonoMod"; + version = "22.1.4.3"; + sha256 = "1bxrqflqfj6ck1mk9mq41iv2ayz1idirxi4vlan1b30ljq7xsacj"; + }) + (fetchNuGet { + pname = "MonoMod.RuntimeDetour"; + version = "22.1.4.3"; + sha256 = "0brf5835psbi4i0bhvgacpg5cgq9ln89ffz73a8q24wc47flvccv"; + }) + (fetchNuGet { + pname = "MonoMod.RuntimeDetour.HookGen"; + version = "22.1.4.3"; + sha256 = "0km4g8wlfcsrr9lj6sz06dcsm60x8npdwv1fzzcssjqwfjwsgqqf"; + }) + (fetchNuGet { + pname = "MonoMod.Utils"; + version = "22.1.4.3"; + sha256 = "1m9wcmg2x85f2bji1gzgynn71x0nc9z8g04zryz6w2w26fismb6h"; + }) + (fetchNuGet { + pname = "Newtonsoft.Json"; + version = "13.0.1"; + sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; + }) + (fetchNuGet { + pname = "YamlDotNet"; + version = "9.1.0"; + sha256 = "0fcnw8plp1fl8nx5ykfbwq3qlsjpjzk65hfafj9dzj0vp4w0zcsr"; + }) +] diff --git a/pkgs/by-name/ol/olympus/package.nix b/pkgs/by-name/ol/olympus/package.nix new file mode 100644 index 00000000000000..109f47204b8a49 --- /dev/null +++ b/pkgs/by-name/ol/olympus/package.nix @@ -0,0 +1,166 @@ +{ + fetchFromGitHub, + fetchzip, + buildDotnetModule, + lib, + mono4, + love, + lua51Packages, + msbuild, + sqlite, + curl, + libarchive, + buildFHSEnv, + xdg-utils, +}: +# WONTFIX: On NixOS, cannot launch Steam installations of Everest / Celeste from Olympus. +# The way it launches Celeste is by directly executing steamapps/common/Celeste/Celeste, +# and it does not work on NixOS (even with steam-run). +# This should be considered a bug of Steam on NixOS (and is probably very hard to fix). + +# FIXME: olympus checks if xdg-mime x-scheme-handler/everest for a popup. If it's not set it complains about it. +# I'm pretty sure thats by user so end user needs to do it + +let + lua-subprocess = lua51Packages.buildLuarocksPackage { + pname = "subprocess"; + version = "bfa8e9"; + src = fetchFromGitHub { + owner = "0x0ade"; # a developer of Everest + repo = "lua-subprocess"; + rev = "bfa8e97da774141f301cfd1106dca53a30a4de54"; + hash = "sha256-4LiYWB3PAQ/s33Yj/gwC+Ef1vGe5FedWexeCBVSDIV0="; + }; + rockspecFilename = "subprocess-scm-1.rockspec"; + }; + + # NOTE: on installation olympus uses MiniInstallerLinux which is dynamically linked, this makes it run fine + fhs-env = buildFHSEnv { + name = "olympus-fhs"; + targetPkgs = + pkgs: + (with pkgs; [ + icu + stdenv.cc.cc + libgcc.lib + openssl + ]); + runScript = "bash"; + }; + + lsqlite3 = lua51Packages.buildLuarocksPackage { + pname = "lsqlite3"; + version = "0.9.6-1"; + src = fetchzip { + url = "http://lua.sqlite.org/index.cgi/zip/lsqlite3_v096.zip"; + hash = "sha256-Mq409A3X9/OS7IPI/KlULR6ZihqnYKk/mS/W/2yrGBg="; + }; + buildInputs = [ sqlite.dev ]; + }; + + dotnet-out = "sharp/bin/Release/net452"; + pname = "olympus"; + phome = "$out/lib/${pname}"; + nfd = lua51Packages.nfd; +in +buildDotnetModule rec { + inherit pname; + + # FIXME: I made up this version number. + version = "24.07.06.02"; + + src = fetchFromGitHub { + owner = "EverestAPI"; + repo = "Olympus"; + rev = "5f3e40687eb825c57021f52d83a3bc9a82c04bdb"; + fetchSubmodules = true; # Required. See upstream's README. + hash = "sha256-rNh6sH51poahiV0Mb61lHfzqOkPF2pW2wr7MOrfVSVs="; + }; + + executables = [ ]; + + nativeBuildInputs = [ + msbuild + libarchive # To create the .love file (zip format) + ]; + + buildInputs = [ + love + mono4 + nfd + lua-subprocess + lsqlite3 + ]; + + runtimeInputs = [ + xdg-utils + ]; + + nugetDeps = ./deps.nix; + + projectFile = "sharp/Olympus.Sharp.sln"; + + postConfigure = '' + echo '${version}-nixos' > src/version.txt + ''; + + # Copied from `olympus` in AUR. + buildPhase = '' + runHook preBuild + FrameworkPathOverride=${mono4.out}/lib/mono/4.5 msbuild ${projectFile} /p:Configuration=Release + runHook postBuild + ''; + + # Hack Olympus.Sharp.bin.{x86,x86_64} to use system mono. + # This was proposed by @0x0ade on discord.gg/celeste: + # https://discord.com/channels/403698615446536203/514006912115802113/827507533962149900 + postBuild = '' + makeWrapper ${mono4.out}/bin/mono ${dotnet-out}/Olympus.Sharp.bin.x86 \ + --add-flags ${phome}/sharp/Olympus.Sharp.exe + cp ${dotnet-out}/Olympus.Sharp.bin.x86 ${dotnet-out}/Olympus.Sharp.bin.x86_64 + ''; + + # The script find-love is hacked to use love from nixpkgs. + # It is used to launch Loenn from Olympus. + installPhase = + let + subprocess-cpath = "${lua-subprocess.out}/lib/lua/5.1/?.so"; + nfd-cpath = "${nfd.out}/lib/lua/5.1/?.so"; + lsqlite3-cpath = "${lsqlite3.out}/lib/lua/5.1/?.so"; + in + '' + runHook preInstall + mkdir -p $out/bin + makeWrapper ${love.out}/bin/love ${phome}/find-love \ + --add-flags "--fused" + makeWrapper ${phome}/find-love $out/bin/olympus \ + --prefix LUA_CPATH : "${nfd-cpath};${subprocess-cpath};${lsqlite3-cpath}" \ + --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ curl ]} \ + --add-flags "${phome}/olympus.love" + mkdir -p ${phome} + bsdtar --format zip --strip-components 1 -cf ${phome}/olympus.love src + install -Dm755 ${dotnet-out}/* -t ${phome}/sharp + runHook postInstall + ''; + + # we need to force olympus to use the fhs-env + postInstall = '' + sed -i 's|^exec|& ${fhs-env}/bin/olympus-fhs|' $out/bin/olympus + install -Dm644 lib-linux/olympus.desktop $out/share/applications/olympus.desktop + install -Dm644 src/data/icon.png $out/share/icons/hicolor/128x128/apps/olympus.png + install -Dm644 LICENSE $out/share/licenses/${pname}/LICENSE + ''; + + meta = with lib; { + description = "Cross-platform GUI Everest installer and Celeste mod manager"; + homepage = "https://github.com/EverestAPI/Olympus"; + changelog = "https://github.com/EverestAPI/Olympus/blob/main/changelog.txt"; + license = licenses.mit; + maintainers = with maintainers; [ + ulysseszhan + petingoso + ]; + mainProgram = "olympus"; + platforms = platforms.unix; + }; +}