about summary refs log tree commit diff
path: root/pkgs/by-name/mo/moneydance/package.nix
blob: 5222684f706b57ddef9ce5be751de5c5892e1d20 (plain) (blame)
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
{ lib, stdenv, fetchzip, makeWrapper, openjdk21, openjfx21, jvmFlags ? [ ] }:
let jdk = openjdk21.override { enableJavaFX = true; };
in stdenv.mkDerivation (finalAttrs: {
  pname = "moneydance";
  version = "2023.3_5064";

  src = fetchzip {
    url = "https://infinitekind.com/stabledl/${finalAttrs.version}/moneydance-linux.tar.gz";
    hash = "sha256-jHr1V/gV1seenw2Q0/G405lTiabEYEsOS8p/XyByrtM=";
  };

  nativeBuildInputs = [ makeWrapper ];
  buildInputs = [ jdk openjfx21 ];

  # Note the double escaping in the call to makeWrapper. The escapeShellArgs
  # call quotes each element of the flags list as a word[1] and returns a
  # space-separated result; the escapeShellArg call quotes that result as a
  # single word to pass to --add-flags. The --add-flags implementation[2]
  # loops over the words in its argument.
  #
  # 1. https://www.gnu.org/software/bash/manual/html_node/Word-Splitting.html
  # 2. https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/setup-hooks/make-wrapper.sh
  installPhase = let
    finalJvmFlags = [
      "-client"
      "--add-modules"
      "javafx.swing,javafx.controls,javafx.graphics"
      "-classpath"
      "${placeholder "out"}/libexec/*"
    ] ++ jvmFlags ++ [ "Moneydance" ];
  in ''
    runHook preInstall

    mkdir -p $out/libexec $out/bin
    cp -p $src/lib/* $out/libexec/
    makeWrapper ${jdk}/bin/java $out/bin/moneydance \
      --add-flags ${lib.escapeShellArg (lib.escapeShellArgs finalJvmFlags)}

    runHook postInstall
  '';

  passthru = { inherit jdk; };

  meta = {
    homepage = "https://infinitekind.com/moneydance";
    description = "An easy to use and full-featured personal finance app that doesn't compromise your privacy";
    sourceProvenance = [ lib.sourceTypes.binaryBytecode ];
    license = lib.licenses.unfree;
    platforms = jdk.meta.platforms;
    maintainers = [ lib.maintainers.lucasbergman ];
  };
})