Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

olympus: init at 24.07.06.02 #309327

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions maintainers/maintainer-list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -15626,6 +15626,11 @@
githubId = 28323;
name = "Peter Simons";
};
petingoso = {
email = "petingavasco@protonmail.com";
github = "Petingoso";
githubId = 92183955;
};
petrosagg = {
email = "petrosagg@gmail.com";
github = "petrosagg";
Expand Down Expand Up @@ -20829,6 +20834,13 @@
githubId = 1607770;
name = "Ulrik Strid";
};
ulysseszhan = {
email = "ulysseszhan@gmail.com";
github = "UlyssesZh";
githubId = 26196187;
matrix = "@ulysseszhan:matrix.org";
name = "Ulysses Zhan";
};
umlx5h = {
github = "umlx5h";
githubId = 20206121;
Expand Down
14 changes: 14 additions & 0 deletions pkgs/by-name/ol/olympus/deps.nix

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

160 changes: 160 additions & 0 deletions pkgs/by-name/ol/olympus/package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
{
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;
};
}