From 31153e09fce1a4e229216867cab5be477c33b1d8 Mon Sep 17 00:00:00 2001 From: Lucas Bergman Date: Mon, 25 Nov 2024 16:08:58 +0000 Subject: [PATCH 1/2] moneydance: apply nixfmt --- pkgs/by-name/mo/moneydance/package.nix | 47 ++++++++++++++++---------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/pkgs/by-name/mo/moneydance/package.nix b/pkgs/by-name/mo/moneydance/package.nix index 636584a20fe02..1e51dae9ae479 100644 --- a/pkgs/by-name/mo/moneydance/package.nix +++ b/pkgs/by-name/mo/moneydance/package.nix @@ -1,4 +1,11 @@ -{ lib, stdenv, fetchzip, makeWrapper, openjdk23, jvmFlags ? [ ] }: +{ + lib, + stdenv, + fetchzip, + makeWrapper, + openjdk23, + jvmFlags ? [ ], +}: let jdk = openjdk23.override { enableJavaFX = true; @@ -24,26 +31,30 @@ stdenv.mkDerivation (finalAttrs: { # # 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 + 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)} + 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 - ''; + runHook postInstall + ''; - passthru = { inherit jdk; }; + passthru = { + inherit jdk; + }; meta = { homepage = "https://infinitekind.com/moneydance"; From ccd13f2bf611e7a980ab59c53e5aeff0e25f11e0 Mon Sep 17 00:00:00 2001 From: Lucas Bergman Date: Mon, 25 Nov 2024 16:12:05 +0000 Subject: [PATCH 2/2] moneydance: fix GTK crash This fixes a bug reported to me offline. When running without GDK/GTK environment setup (e.g. under Plasma where XDG_DATA_DIRS doesn't point to any GLib schema paths), the JVM would crash with the error: No GSettings schemas are installed on the system. --- pkgs/by-name/mo/moneydance/package.nix | 31 +++++++++++++++++++------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/pkgs/by-name/mo/moneydance/package.nix b/pkgs/by-name/mo/moneydance/package.nix index 1e51dae9ae479..befa8b5fd7ee5 100644 --- a/pkgs/by-name/mo/moneydance/package.nix +++ b/pkgs/by-name/mo/moneydance/package.nix @@ -1,9 +1,11 @@ { lib, stdenv, + buildPackages, fetchzip, makeWrapper, openjdk23, + wrapGAppsHook3, jvmFlags ? [ ], }: let @@ -20,8 +22,25 @@ stdenv.mkDerivation (finalAttrs: { hash = "sha256-wwSb3CuhuXB4I9jq+TpLPbd1k9UzqQbAaZkGKgi+nns="; }; - nativeBuildInputs = [ makeWrapper ]; + # We must use wrapGAppsHook (since Java GUIs on Linux use GTK), but by + # default that uses makeBinaryWrapper which doesn't support flags that need + # quoting: . Thanks to + # @Artturin for the tip to override the wrapper generator. + nativeBuildInputs = [ + makeWrapper + (buildPackages.wrapGAppsHook3.override { makeWrapper = buildPackages.makeShellWrapper; }) + ]; buildInputs = [ jdk ]; + dontWrapGApps = true; + + installPhase = '' + runHook preInstall + + mkdir -p $out/libexec $out/bin + cp -p $src/lib/* $out/libexec/ + + runHook postInstall + ''; # 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 @@ -31,7 +50,7 @@ stdenv.mkDerivation (finalAttrs: { # # 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 = + postFixup = let finalJvmFlags = [ "-client" @@ -42,14 +61,10 @@ stdenv.mkDerivation (finalAttrs: { ] ++ jvmFlags ++ [ "Moneydance" ]; in '' - runHook preInstall - - mkdir -p $out/libexec $out/bin - cp -p $src/lib/* $out/libexec/ + # This is in postFixup because gappsWrapperArgs is generated in preFixup makeWrapper ${jdk}/bin/java $out/bin/moneydance \ + "''${gappsWrapperArgs[@]}" \ --add-flags ${lib.escapeShellArg (lib.escapeShellArgs finalJvmFlags)} - - runHook postInstall ''; passthru = {