diff --git a/flake.lock b/flake.lock index 7288d39..d0c12ae 100644 --- a/flake.lock +++ b/flake.lock @@ -40,11 +40,11 @@ ] }, "locked": { - "lastModified": 1746413188, - "narHash": "sha256-i6BoiQP0PasExESQHszC0reQHfO6D4aI2GzOwZMOI20=", + "lastModified": 1747875884, + "narHash": "sha256-tdVx4kghhdy62LKuTnwE2RytOe8o88tah/yhpyuL0D4=", "owner": "nix-community", "repo": "home-manager", - "rev": "8a318641ac13d3bc0a53651feaee9560f9b2d89a", + "rev": "f9186c64fcc6ee5f0114547acf9e814c806a640b", "type": "github" }, "original": { @@ -90,11 +90,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1746468201, - "narHash": "sha256-hSOSlrvMJwGr8hX/gc0mnhUf5UIClMDUAadfXlSXzfc=", + "lastModified": 1747900541, + "narHash": "sha256-dn64Pg9xLETjblwZs9Euu/SsjW80pd6lr5qSiyLY1pg=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "6aabf68429c0a414221d1790945babfb6a0bd068", + "rev": "11f2d9ea49c3e964315215d6baa73a8d42672f06", "type": "github" }, "original": { @@ -106,11 +106,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1746461020, - "narHash": "sha256-7+pG1I9jvxNlmln4YgnlW4o+w0TZX24k688mibiFDUE=", + "lastModified": 1747744144, + "narHash": "sha256-W7lqHp0qZiENCDwUZ5EX/lNhxjMdNapFnbErcbnP11Q=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3730d8a308f94996a9ba7c7138ede69c1b9ac4ae", + "rev": "2795c506fe8fb7b03c36ccb51f75b6df0ab2553f", "type": "github" }, "original": { diff --git a/hosts/randolph/home.nix b/hosts/randolph/home.nix index f034222..9875f43 100644 --- a/hosts/randolph/home.nix +++ b/hosts/randolph/home.nix @@ -18,11 +18,18 @@ rec { home.pointerCursor.size = 256; # Install packages - home.packages = with pkgs; + home.packages = + let + overlay = (final: prev: { + olympus = prev.callPackage ../../pkgs/olympus/package.nix { }; + olympus-unwrapped = prev.callPackage ../../pkgs/olympus-unwrapped/package.nix { }; + }); + in + (with (pkgs.extend overlay); [ olympus ]) ++ + (with pkgs; let archivo = callPackage ../../pkgs/archivo/archivo.nix { }; highway-gothic = callPackage ../../pkgs/highway-gothic/highway-gothic.nix { }; - olympus = callPackage ../../pkgs/olympus/package.nix { }; in [ blueman @@ -56,7 +63,6 @@ rec { pinta ] ++ # Personalized selection of graphical apps [ - olympus shticker-book-unwritten ] ++ # Games [ @@ -85,7 +91,7 @@ rec { hunspellDicts.fr-classique ] ++ # Spell checking [ keyutils ] ++ # Temp - [ ]; + [ ]); programs.home-manager.enable = true; diff --git a/pkgs/olympus-unwrapped/deps.json b/pkgs/olympus-unwrapped/deps.json new file mode 100644 index 0000000..e533ddd --- /dev/null +++ b/pkgs/olympus-unwrapped/deps.json @@ -0,0 +1,317 @@ +[ + { + "pname": "Microsoft.NETCore.Platforms", + "version": "1.1.0", + "hash": "sha256-FeM40ktcObQJk4nMYShB61H/E8B7tIKfl9ObJ0IOcCM=" + }, + { + "pname": "Microsoft.NETCore.Targets", + "version": "1.1.0", + "hash": "sha256-0AqQ2gMS8iNlYkrD+BxtIg7cXMnr9xZHtKAuN4bjfaQ=" + }, + { + "pname": "Mono.Cecil", + "version": "0.11.4", + "hash": "sha256-HrnRgFsOzfqAWw0fUxi/vkzZd8dMn5zueUeLQWA9qvs=" + }, + { + "pname": "MonoMod", + "version": "22.1.4.3", + "hash": "sha256-kindD5YUjBWsopvEnmOL4XsldgwE1zRrmMxIh6nDua8=" + }, + { + "pname": "MonoMod.RuntimeDetour", + "version": "22.1.4.3", + "hash": "sha256-m7FN3SGME4GRGuc7l5ClCT9W3mXqbbhAJHHpWwYqLi8=" + }, + { + "pname": "MonoMod.RuntimeDetour.HookGen", + "version": "22.1.4.3", + "hash": "sha256-DuOnuXQcS63Z/y5s3q5FHZiqWTPgayNpylkzRzl6pE4=" + }, + { + "pname": "MonoMod.Utils", + "version": "22.1.4.3", + "hash": "sha256-0KyqozOCC26+z5+Ah35iFvRwrPXvvxDlEq6gLl5lPNU=" + }, + { + "pname": "Newtonsoft.Json", + "version": "13.0.1", + "hash": "sha256-K2tSVW4n4beRPzPu3rlVaBEMdGvWSv/3Q1fxaDh4Mjo=" + }, + { + "pname": "runtime.any.System.Collections", + "version": "4.3.0", + "hash": "sha256-4PGZqyWhZ6/HCTF2KddDsbmTTjxs2oW79YfkberDZS8=" + }, + { + "pname": "runtime.any.System.Globalization", + "version": "4.3.0", + "hash": "sha256-PaiITTFI2FfPylTEk7DwzfKeiA/g/aooSU1pDcdwWLU=" + }, + { + "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.Threading.Tasks", + "version": "4.3.0", + "hash": "sha256-agdOM0NXupfHbKAQzQT8XgbI9B8hVEh+a/2vqeHctg4=" + }, + { + "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.native.System", + "version": "4.3.0", + "hash": "sha256-ZBZaodnjvLXATWpXXakFgcy6P+gjhshFXmglrL5xD5Y=" + }, + { + "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.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.System.Diagnostics.Debug", + "version": "4.3.0", + "hash": "sha256-ReoazscfbGH+R6s6jkg5sIEHWNEvjEoHtIsMbpc7+tI=" + }, + { + "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.Collections", + "version": "4.3.0", + "hash": "sha256-afY7VUtD6w/5mYqrce8kQrvDIfS2GXDINDh73IjxJKc=" + }, + { + "pname": "System.Collections.NonGeneric", + "version": "4.3.0", + "hash": "sha256-8/yZmD4jjvq7m68SPkJZLBQ79jOTOyT5lyzX4SCYAx8=" + }, + { + "pname": "System.Collections.Specialized", + "version": "4.3.0", + "hash": "sha256-QNg0JJNx+zXMQ26MJRPzH7THdtqjrNtGLUgaR1SdvOk=" + }, + { + "pname": "System.ComponentModel", + "version": "4.3.0", + "hash": "sha256-i00uujMO4JEDIEPKLmdLY3QJ6vdSpw6Gh9oOzkFYBiU=" + }, + { + "pname": "System.ComponentModel.Primitives", + "version": "4.3.0", + "hash": "sha256-IOMJleuIBppmP4ECB3uftbdcgL7CCd56+oAD/Sqrbus=" + }, + { + "pname": "System.ComponentModel.TypeConverter", + "version": "4.3.0", + "hash": "sha256-PSDiPYt8PgTdTUBz+GH6lHCaM1YgfObneHnZsc8Fz54=" + }, + { + "pname": "System.Diagnostics.Debug", + "version": "4.3.0", + "hash": "sha256-fkA79SjPbSeiEcrbbUsb70u9B7wqbsdM9s1LnoKj0gM=" + }, + { + "pname": "System.Globalization", + "version": "4.3.0", + "hash": "sha256-caL0pRmFSEsaoeZeWN5BTQtGrAtaQPwFi8YOZPZG5rI=" + }, + { + "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.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.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.ILGeneration", + "version": "4.7.0", + "hash": "sha256-GUnQeGo/DtvZVQpFnESGq7lJcjB30/KnDY7Kd2G/ElE=" + }, + { + "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.Primitives", + "version": "4.3.0", + "hash": "sha256-5ogwWB4vlQTl3jjk1xjniG2ozbFIjZTL9ug0usZQuBM=" + }, + { + "pname": "System.Reflection.TypeExtensions", + "version": "4.7.0", + "hash": "sha256-GEtCGXwtOnkYejSV+Tfl+DqyGq5jTUaVyL9eMupMHBM=" + }, + { + "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.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.Text.Encoding", + "version": "4.3.0", + "hash": "sha256-GctHVGLZAa/rqkBNhsBGnsiWdKyv6VDubYpGkuOkBLg=" + }, + { + "pname": "System.Threading", + "version": "4.3.0", + "hash": "sha256-ZDQ3dR4pzVwmaqBg4hacZaVenQ/3yAF/uV7BXZXjiWc=" + }, + { + "pname": "System.Threading.Tasks", + "version": "4.3.0", + "hash": "sha256-Z5rXfJ1EXp3G32IKZGiZ6koMjRu0n8C1NGrwpdIen4w=" + }, + { + "pname": "YamlDotNet", + "version": "9.1.0", + "hash": "sha256-WbMPOLkbyN+SdMrBYuaXV2qKB+bLTV+6RdSFSy/iljk=" + } +] diff --git a/pkgs/olympus-unwrapped/package.nix b/pkgs/olympus-unwrapped/package.nix new file mode 100644 index 0000000..fd27943 --- /dev/null +++ b/pkgs/olympus-unwrapped/package.nix @@ -0,0 +1,106 @@ +{ + lib, + fetchFromGitHub, + fetchzip, + buildDotnetModule, + dotnetCorePackages, + luajitPackages, + sqlite, + libarchive, + curl, + love, + xdg-utils, +}: +let + lua_cpath = + with luajitPackages; + lib.concatMapStringsSep ";" getLuaCPath [ + (buildLuarocksPackage { + pname = "lsqlite3"; + version = "0.9.6-1"; + src = fetchzip { + url = "http://lua.sqlite.org/home/zip/lsqlite3_v096.zip"; + hash = "sha256-Mq409A3X9/OS7IPI/KlULR6ZihqnYKk/mS/W/2yrGBg="; + }; + buildInputs = [ sqlite.dev ]; + }) + + lua-subprocess + nfd + ]; + + phome = "$out/lib/olympus"; + # The following variables are to be updated by the update script. + version = "25.04.20.01"; + buildId = "4758"; # IMPORTANT: This line is matched with regex in update.sh. + rev = "10e01bf182e51d1fc2b6060622108a1fb98ae7b7"; +in +buildDotnetModule { + pname = "olympus-unwrapped"; + inherit version; + + src = fetchFromGitHub { + inherit rev; + owner = "EverestAPI"; + repo = "Olympus"; + fetchSubmodules = true; # Required. See upstream's README. + hash = "sha256-7Xdd6AdDpHQUmQ3ogEyir/OQwvOcVDMtweE3D/v4uuQ="; + }; + + nativeBuildInputs = [ + libarchive # To create the .love file (zip format). + ]; + + nugetDeps = ./deps.json; + projectFile = "sharp/Olympus.Sharp.csproj"; + executables = [ ]; + installPath = "${placeholder "out"}/lib/olympus/sharp"; + + # See the 'Dist: Update src/version.txt' step in azure-pipelines.yml from upstream. + preConfigure = '' + echo ${version}-nixos-${buildId}-${builtins.substring 0 5 rev} > src/version.txt + ''; + + # The script find-love is hacked to use love from nixpkgs. + # It is used to launch Loenn from Olympus. + # I assume --fused is so saves are properly made (https://love2d.org/wiki/love.filesystem). + preInstall = '' + mkdir -p ${phome} + makeWrapper ${lib.getExe love} ${phome}/find-love \ + --add-flags "--fused" + + install -Dm755 suppress-output.sh ${phome}/suppress-output + + mkdir -p $out/bin + makeWrapper ${phome}/find-love $out/bin/olympus \ + --prefix LUA_CPATH ";" "${lua_cpath}" \ + --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ curl ]}" \ + --suffix PATH : "${lib.makeBinPath [ xdg-utils ]}" \ + --add-flags ${phome}/olympus.love \ + --set DOTNET_ROOT ${dotnetCorePackages.runtime_8_0}/share/dotnet + + bsdtar --format zip --strip-components 1 -cf ${phome}/olympus.love src + ''; + + postInstall = '' + 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/olympus/LICENSE + ''; + + passthru.updateScript = ./update.sh; + + meta = { + description = "Cross-platform GUI Everest installer and Celeste mod manager"; + homepage = "https://github.com/EverestAPI/Olympus"; + downloadPage = "https://everestapi.github.io/#olympus"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ + ulysseszhan + petingoso + ]; + mainProgram = "olympus"; + platforms = lib.platforms.unix; + badPlatforms = lib.platforms.aarch; # Celeste doesn't support aarch in the first place + }; +} diff --git a/pkgs/olympus/update.sh b/pkgs/olympus-unwrapped/update.sh similarity index 84% rename from pkgs/olympus/update.sh rename to pkgs/olympus-unwrapped/update.sh index 365b646..35cf7c1 100644 --- a/pkgs/olympus/update.sh +++ b/pkgs/olympus-unwrapped/update.sh @@ -1,9 +1,9 @@ #!/usr/bin/env nix-shell -#!nix-shell -i bash -p curl jq common-updater-scripts nixfmt-rfc-style +#!nix-shell -i bash -p curl jq common-updater-scripts set -eu -o pipefail -attr=olympus +attr=olympus-unwrapped nix_file=$(nix-instantiate --eval --strict -A "$attr.meta.position" | sed -re 's/^"(.*):[0-9]+"$/\1/') api() { @@ -30,4 +30,3 @@ version=$(echo "$run" | jq -r '.name') update-source-version $attr $version --rev=$commit "$(nix-build --attr $attr.fetch-deps --no-out-link)" -nixfmt $(dirname $nix_file)/deps.nix # NixOS/nixpkgs#358025 diff --git a/pkgs/olympus/deps.nix b/pkgs/olympus/deps.nix deleted file mode 100644 index 6824f40..0000000 --- a/pkgs/olympus/deps.nix +++ /dev/null @@ -1,51 +0,0 @@ -# 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.3"; - hash = "sha256-FBoJP5DHZF0QHM0xLm9yd4HJZVQOuSpSKA+VQRpphEE="; - }) - (fetchNuGet { - pname = "Microsoft.NETFramework.ReferenceAssemblies.net452"; - version = "1.0.3"; - hash = "sha256-RTPuFG8D7gnwINEoEtAqmVm4oTW8K4Z87v1o4DDeLMI="; - }) - (fetchNuGet { - pname = "Mono.Cecil"; - version = "0.11.4"; - hash = "sha256-HrnRgFsOzfqAWw0fUxi/vkzZd8dMn5zueUeLQWA9qvs="; - }) - (fetchNuGet { - pname = "MonoMod"; - version = "22.1.4.3"; - hash = "sha256-kindD5YUjBWsopvEnmOL4XsldgwE1zRrmMxIh6nDua8="; - }) - (fetchNuGet { - pname = "MonoMod.RuntimeDetour"; - version = "22.1.4.3"; - hash = "sha256-m7FN3SGME4GRGuc7l5ClCT9W3mXqbbhAJHHpWwYqLi8="; - }) - (fetchNuGet { - pname = "MonoMod.RuntimeDetour.HookGen"; - version = "22.1.4.3"; - hash = "sha256-DuOnuXQcS63Z/y5s3q5FHZiqWTPgayNpylkzRzl6pE4="; - }) - (fetchNuGet { - pname = "MonoMod.Utils"; - version = "22.1.4.3"; - hash = "sha256-0KyqozOCC26+z5+Ah35iFvRwrPXvvxDlEq6gLl5lPNU="; - }) - (fetchNuGet { - pname = "Newtonsoft.Json"; - version = "13.0.1"; - hash = "sha256-K2tSVW4n4beRPzPu3rlVaBEMdGvWSv/3Q1fxaDh4Mjo="; - }) - (fetchNuGet { - pname = "YamlDotNet"; - version = "9.1.0"; - hash = "sha256-WbMPOLkbyN+SdMrBYuaXV2qKB+bLTV+6RdSFSy/iljk="; - }) -] diff --git a/pkgs/olympus/package.nix b/pkgs/olympus/package.nix index efe6f29..a1f7809 100644 --- a/pkgs/olympus/package.nix +++ b/pkgs/olympus/package.nix @@ -1,16 +1,9 @@ { lib, - fetchFromGitHub, - fetchzip, + olympus-unwrapped, + makeWrapper, + symlinkJoin, buildFHSEnv, - buildDotnetModule, - luajitPackages, - sqlite, - libarchive, - curl, - mono, - love, - xdg-utils, writeShellScript, # These need overriding if you launch Celeste/Loenn/MiniInstaller from Olympus. # Some examples: @@ -26,36 +19,7 @@ miniinstallerWrapper ? null, skipHandlerCheck ? false, # whether to skip olympus xdg-mime check, true will override it }: - let - lua_cpath = - with luajitPackages; - lib.concatMapStringsSep ";" getLuaCPath [ - (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 ]; - }) - - lua-subprocess - nfd - ]; - - # When installing Everest, Olympus uses MiniInstaller, which is dynamically linked. - miniinstaller-fhs = buildFHSEnv { - name = "olympus-miniinstaller-fhs"; - targetPkgs = - pkgs: - (with pkgs; [ - icu - openssl - dotnet-runtime # Without this, MiniInstaller will install dotnet itself. - ]); - }; wrapper-to-env = wrapper: @@ -66,105 +30,42 @@ let else ""; + # When installing Everest, Olympus uses MiniInstaller, which is dynamically linked. + miniinstaller-fhs = buildFHSEnv { + pname = "olympus-miniinstaller-fhs"; + version = "1.0.0"; # remains constant, just to prevent complains + targetPkgs = + pkgs: + (with pkgs; [ + icu + openssl + dotnet-runtime # Without this, MiniInstaller will install dotnet itself. + ]); + }; + miniinstaller-wrapper = if miniinstallerWrapper == null then - (writeShellScript "miniinstaller-wrapper" "${miniinstaller-fhs}/bin/${miniinstaller-fhs.name} -c \"$@\"") + (writeShellScript "miniinstaller-wrapper" "exec ${lib.getExe miniinstaller-fhs} -c \"$@\"") else (wrapper-to-env miniinstallerWrapper); - pname = "olympus"; - phome = "$out/lib/${pname}"; - # The following variables are to be updated by the update script. - version = "24.11.23.03"; - buildId = "4420"; # IMPORTANT: This line is matched with regex in update.sh. - rev = "a3792e0c85f3ad7a3029a6a66ca8288aa6f58ae4"; - in -buildDotnetModule { - inherit pname version; +symlinkJoin { - src = fetchFromGitHub { - inherit rev; - owner = "EverestAPI"; - repo = "Olympus"; - fetchSubmodules = true; # Required. See upstream's README. - hash = "sha256-UPAn9Rbm2IlxMJ/O69WXHugIc+22w+B5i6iLkCcsfQ8="; - }; + inherit (olympus-unwrapped) version meta; + pname = "olympus"; - nativeBuildInputs = [ - libarchive # To create the .love file (zip format). + paths = [ + olympus-unwrapped ]; - nugetDeps = ./deps.nix; - projectFile = "sharp/Olympus.Sharp.csproj"; - executables = [ ]; + nativeBuildInputs = [ makeWrapper ]; - # See the 'Dist: Update src/version.txt' step in azure-pipelines.yml from upstream. - preConfigure = '' - echo ${version}-nixos-${buildId}-${builtins.substring 0 5 rev} > src/version.txt - ''; - - # 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 = '' - dotnet_out=sharp/bin/Release/net452 - dotnet_out=$dotnet_out/$(ls $dotnet_out) - makeWrapper ${lib.getExe 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 + wrapProgram $out/bin/olympus \ + --set OLYMPUS_CELESTE_WRAPPER "${wrapper-to-env celesteWrapper}" \ + --set OLYMPUS_LOENN_WRAPPER "${wrapper-to-env loennWrapper}" \ + --set OLYMPUS_MINIINSTALLER_WRAPPER "${miniinstaller-wrapper}" \ + --set OLYMPUS_SKIP_SCHEME_HANDLER_CHECK "${if skipHandlerCheck then "1" else "0"}" ''; - - # The script find-love is hacked to use love from nixpkgs. - # It is used to launch Loenn from Olympus. - # I assume --fused is so saves are properly made (https://love2d.org/wiki/love.filesystem). - preInstall = '' - mkdir -p ${phome} - makeWrapper ${lib.getExe love} ${phome}/find-love \ - --add-flags "--fused" - ''; - - installPhase = '' - runHook preInstall - - mkdir -p $out/bin - makeWrapper ${phome}/find-love $out/bin/olympus \ - --prefix LUA_CPATH ";" "${lua_cpath}" \ - --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ curl ]}" \ - --suffix PATH : "${lib.makeBinPath [ xdg-utils ]}" \ - --set-default OLYMPUS_MINIINSTALLER_WRAPPER "${miniinstaller-wrapper}" \ - --set-default OLYMPUS_CELESTE_WRAPPER "${wrapper-to-env celesteWrapper}" \ - --set-default OLYMPUS_LOENN_WRAPPER "${wrapper-to-env loennWrapper}" \ - --set-default OLYMPUS_SKIP_SCHEME_HANDLER_CHECK ${if skipHandlerCheck then "1" else "0"} \ - --add-flags ${phome}/olympus.love - bsdtar --format zip --strip-components 1 -cf ${phome}/olympus.love src - - dotnet_out=sharp/bin/Release/net452 - dotnet_out=$dotnet_out/$(ls $dotnet_out) - install -Dm755 $dotnet_out/* -t ${phome}/sharp - - runHook postInstall - ''; - - postInstall = '' - 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 - ''; - - passthru.updateScript = ./update.sh; - - meta = { - description = "Cross-platform GUI Everest installer and Celeste mod manager"; - homepage = "https://github.com/EverestAPI/Olympus"; - downloadPage = "https://everestapi.github.io/#olympus"; - license = lib.licenses.mit; - maintainers = with lib.maintainers; [ - ulysseszhan - petingoso - ]; - mainProgram = "olympus"; - platforms = lib.platforms.unix; - badPlatforms = lib.platforms.aarch; # We explicitly copy and wrap x86. possibly able to be done platform agnostic - }; }