about summary refs log tree commit diff
path: root/pkgs/games/maptool/default.nix
diff options
context:
space:
mode:
authorRyan Hendrickson <ryan.hendrickson@alum.mit.edu>2023-05-18 21:31:03 -0400
committerRyan Hendrickson <ryan.hendrickson@alum.mit.edu>2023-05-18 21:31:03 -0400
commit45eb557afafd24a5d938e753ba1c6f8edee978a7 (patch)
tree93c1573858be4e82d6fe6c36db9377de5ea48b9b /pkgs/games/maptool/default.nix
parent1ec04700ab872c6b799fe7f7bc43db471ce4e8ae (diff)
maptool: init at 1.13.0
Diffstat (limited to 'pkgs/games/maptool/default.nix')
-rw-r--r--pkgs/games/maptool/default.nix119
1 files changed, 119 insertions, 0 deletions
diff --git a/pkgs/games/maptool/default.nix b/pkgs/games/maptool/default.nix
new file mode 100644
index 0000000000000..53d8d89d69206
--- /dev/null
+++ b/pkgs/games/maptool/default.nix
@@ -0,0 +1,119 @@
+{ lib
+, copyDesktopItems
+, fetchurl
+, ffmpeg
+, gitUpdater
+, jre
+, libarchive
+, makeDesktopItem
+, openjfx
+, stdenvNoCC
+, wrapGAppsHook
+}:
+let
+  pname = "maptool";
+  version = "1.13.0";
+  repoBase = "https://github.com/RPTools/${pname}";
+  src = fetchurl {
+    url = "${repoBase}/releases/download/${version}/MapTool-${version}.jar";
+    hash = "sha256-0jiUYdr2KwMNc8VBgJsEsf4dkrzYfMGwv+jT1RLhUAg=";
+  };
+
+  icon = fetchurl {
+    url = "https://raw.githubusercontent.com/RPTools/${pname}/${version}/package/linux/MapTool.png";
+    hash = "sha256-xkVYjMprTanHu8r4b9PHORI8E1aJp+9KDSP5mqCE8ew=";
+  };
+
+  meta = with lib; {
+    description = "Virtual Tabletop for playing roleplaying games with remote players or face to face";
+    homepage = "https://www.rptools.net/toolbox/maptool/";
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ rhendric ];
+  };
+
+  javafxModules = [ "base" "controls" "media" "swing" "web" "fxml" "graphics" ];
+
+  classpath =
+    lib.concatMap (mod: [
+      "${openjfx}/modules_src/javafx.${mod}/module-info.java"
+      "${openjfx}/modules/javafx.${mod}"
+      "${openjfx}/modules_libs/javafx.${mod}"
+    ]) javafxModules ++
+    [ src ];
+
+  jvmArgs = [
+    "-cp" (lib.concatStringsSep ":" classpath)
+    "-Xss8M"
+    "-Dsun.java2d.d3d=false"
+    "-Dfile.encoding=UTF-8"
+    "-Dpolyglot.engine.WarnInterpreterOnly=false"
+    "-XX:+ShowCodeDetailsInExceptionMessages"
+    "--add-opens=java.desktop/java.awt=ALL-UNNAMED"
+    "--add-opens=java.desktop/java.awt.geom=ALL-UNNAMED"
+    "--add-opens=java.desktop/sun.awt.geom=ALL-UNNAMED"
+    "--add-opens=java.base/java.util=ALL-UNNAMED"
+    "--add-opens=javafx.web/javafx.scene.web=ALL-UNNAMED"
+    "--add-opens=javafx.web/com.sun.webkit=ALL-UNNAMED"
+    "--add-opens=javafx.web/com.sun.webkit.dom=ALL-UNNAMED"
+    "--add-opens=java.desktop/javax.swing=ALL-UNNAMED"
+    "--add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED"
+    "--add-opens=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED"
+
+    # disable telemetry (the empty DSN disables the Sentry library, setting the
+    # environment to Development disables some logic inside MapTool)
+    "-Dsentry.dsn"
+    "-Dsentry.environment=Development"
+  ];
+
+  binName = pname;
+  rdnsName = "net.rptools.maptool";
+in
+stdenvNoCC.mkDerivation {
+  inherit pname version src meta;
+
+  dontUnpack = true;
+  dontBuild = true;
+  dontWrapGApps = true;
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    libarchive
+    wrapGAppsHook
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = rdnsName;
+      desktopName = "MapTool";
+      icon = rdnsName;
+      exec = binName;
+      comment = meta.description;
+      categories = [ "Game" ];
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/${binName} \
+      "''${gappsWrapperArgs[@]}" \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ ffmpeg ]} \
+      --add-flags '${lib.concatStringsSep " " jvmArgs} net.rptools.maptool.client.LaunchInstructions'
+
+    dest=$out/share/icons/hicolor/256x256/apps
+    mkdir -p "$dest"
+    ln -s ${icon} "$dest/${rdnsName}.png"
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = gitUpdater {
+    url = "${repoBase}.git";
+    ignoredVersions = "-";
+  };
+}