summaryrefslogtreecommitdiffstats
path: root/pkgs/by-name/et/etterna/package.nix
blob: 51d23d0abc1d46c2511732dad5fd9d4a0a1b75e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
{
  lib,
  stdenv,
  fetchFromGitHub,
  makeDesktopItem,
  copyDesktopItems,
  # deps
  cmake,
  pkg-config,
  openssl,
  libGLU,
  libxvmc,
  libxrandr,
  libxinerama,
  libxext,
  libx11,
  alsa-lib,
  libjack2,
  libpulseaudio,
  libogg,
  sse2neon,
}:
stdenv.mkDerivation (finalAttrs: {
  pname = "etterna";
  version = "0.74.4";

  src = fetchFromGitHub {
    owner = "etternagame";
    repo = "etterna";
    tag = "v${finalAttrs.version}";
    hash = "sha256-ZCQt99Qcov/7jGfrSmX9WftaP2U2B1d1APK1mxrUDBs=";
  };

  patches = [
    ./fix-download-manager.patch

    # https://github.com/etternagame/etterna/pull/1396
    ./0001-Add-aarch64-linux-support.patch
    ./0002-replays-dir-fix.patch
  ];

  nativeBuildInputs = [
    cmake
    pkg-config

    copyDesktopItems
  ];

  buildInputs = [
    openssl
    alsa-lib
    libjack2
    libpulseaudio
    libGLU
    libogg
    sse2neon
    libxinerama
    libxrandr
    libx11
    libxext # Needed for DPMS
    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/releases/tag/v${finalAttrs.version}";
    license = lib.licenses.mit;
    maintainers = with lib.maintainers; [ alikindsys ];
    mainProgram = "etterna";
    platforms = [
      "x86_64-linux"
      "aarch64-linux"
    ];
  };
})