diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 5f3b6bfb689f..faecf126d067 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -1185,6 +1185,18 @@ githubId = 30437811; name = "Alex Andrews"; }; + alikindsys = { + email = "alice@blocovermelho.org"; + github = "alikindsys"; + githubId = 36565196; + name = "Alikind System"; + + keys = [ + { + fingerprint = "7D31 15DC D912 C15A 2781 F7BB 511C B44B C752 2A89"; + } + ]; + }; alirezameskin = { email = "alireza.meskin@gmail.com"; github = "alirezameskin"; diff --git a/pkgs/by-name/et/etterna/fix-download-manager.patch b/pkgs/by-name/et/etterna/fix-download-manager.patch new file mode 100644 index 000000000000..432eaa73db1e --- /dev/null +++ b/pkgs/by-name/et/etterna/fix-download-manager.patch @@ -0,0 +1,16 @@ +diff --git a/src/Etterna/Singletons/DownloadManager.cpp b/src/Etterna/Singletons/DownloadManager.cpp +index b42ccd30..3606107d 100644 +--- a/src/Etterna/Singletons/DownloadManager.cpp ++++ b/src/Etterna/Singletons/DownloadManager.cpp +@@ -6265,7 +6265,10 @@ Download::Install() + { + Core::Platform::requestUserAttention(); + Message* msg; +- if (!SongManager::InstallSmzip(m_TempFileName)) ++ ++ auto path = FILEMAN->ResolvePath(m_TempFileName); ++ ++ if (!SongManager::InstallSmzip(path)) + msg = new Message("DownloadFailed"); + else + msg = new Message("PackDownloaded"); diff --git a/pkgs/by-name/et/etterna/package.nix b/pkgs/by-name/et/etterna/package.nix new file mode 100644 index 000000000000..7221ced0f88d --- /dev/null +++ b/pkgs/by-name/et/etterna/package.nix @@ -0,0 +1,109 @@ +{ + lib, + stdenv, + fetchFromGitHub, + makeDesktopItem, + copyDesktopItems, + # deps + cmake, + pkg-config, + openssl, + libGLU, + xorg, + alsa-lib, + libjack2, + libpulseaudio, + libogg, + sse2neon, +}: +stdenv.mkDerivation (finalAttrs: { + pname = "etterna"; + version = "0.74.3"; + + src = fetchFromGitHub { + owner = "etternagame"; + repo = "etterna"; + tag = "v${finalAttrs.version}"; + hash = "sha256-zzCk6axISswfTAk7rRha5HFzIHQ0AjpAZyAWzH+Cn1s="; + }; + + patches = [ ./fix-download-manager.patch ]; + + nativeBuildInputs = [ + cmake + pkg-config + + copyDesktopItems + ]; + + buildInputs = [ + openssl + alsa-lib + libjack2 + libpulseaudio + libGLU + libogg + sse2neon + xorg.libXinerama + xorg.libXrandr + xorg.libX11 + xorg.libXext # Needed for DPMS + xorg.libXvMC + ]; + + desktopItems = [ + (makeDesktopItem { + name = "etterna"; + desktopName = "Etterna"; + genericName = "Rhythm and dance game"; + icon = "etterna"; + tryExec = "etterna"; + exec = "etterna"; + categories = [ + "Application" + "Game" + "ArcadeGame" + ]; + comment = "A cross-platform rhythm video game."; + terminal = false; + }) + ]; + + installPhase = '' + runHook preInstall + mkdir -p $out/{bin,share/etterna} + mkdir -p $out/share/applications + # copy select necessary game files into virtual fs + cp -r /build/source/{Announcers,Assets,BGAnimations,BackgroundEffects,BackgroundTransitions,Data,GameTools,NoteSkins,Scripts,Themes} "$out/share/etterna" + + # copy binary + cp /build/source/Etterna $out/bin/.etterna-unwrapped + + # Install the Icon + install -Dm644 /build/source/Docs/images/etterna-logo-light.svg "$out/share/icons/hicolor/scalable/apps/etterna.svg" + + # wacky insertion of wrapper directly into phase, so that $out is set + cat > $out/bin/etterna << EOF + #!${stdenv.shell} + export ETTERNA_ROOT_DIR="\$HOME/.local/share/etterna" + export ETTERNA_ADDITIONAL_ROOT_DIRS="$out/share/etterna" + echo "HOME: \$HOME" + echo "PWD: \$(pwd)" + echo "ETTERNA_ADDITIONAL_ROOT_DIRS: \$ETTERNA_ADDITIONAL_ROOT_DIRS" + exec $out/bin/.etterna-unwrapped "\$@" + EOF + chmod +x $out/bin/etterna + runHook postInstall + ''; + + cmakeFlags = [ "-D WITH_CRASHPAD=OFF" ]; + + meta = { + description = "Advanced cross-platform rhythm game focused on keyboard play"; + homepage = "https://etternaonline.com"; + changelog = "https://github.com/etternagame/etterna/release/tag/v${finalAttrs.version}"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ alikindsys ]; + mainProgram = "etterna"; + }; +})