From 55d5ebb07a992762c4535c01602ece55e85ada72 Mon Sep 17 00:00:00 2001 From: Michael Hoang Date: Tue, 15 Aug 2023 15:25:50 +1000 Subject: [PATCH 1/2] remmina: use `desktopToDarwinBundle` --- .../networking/remote/remmina/default.nix | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/networking/remote/remmina/default.nix b/pkgs/applications/networking/remote/remmina/default.nix index 64ebd27001f..9e3eeb711cb 100644 --- a/pkgs/applications/networking/remote/remmina/default.nix +++ b/pkgs/applications/networking/remote/remmina/default.nix @@ -1,4 +1,5 @@ -{ lib, stdenv, fetchFromGitLab, cmake, ninja, pkg-config, wrapGAppsHook +{ lib, stdenv, fetchFromGitLab, fetchpatch, cmake, ninja, pkg-config, wrapGAppsHook +, desktopToDarwinBundle , glib, gtk3, gettext, libxkbfile, libX11, python3 , freerdp, libssh, libgcrypt, gnutls, vte , pcre2, libdbusmenu-gtk3, libappindicator-gtk3 @@ -23,7 +24,16 @@ stdenv.mkDerivation (finalAttrs: { sha256 = "sha256-oEgpav4oQ9Sld9PY4TsutS5xEnhQgOHnpQhDesRFTeQ="; }; - nativeBuildInputs = [ cmake ninja pkg-config wrapGAppsHook ]; + patches = [ + # https://gitlab.com/Remmina/Remmina/-/merge_requests/2525 + (fetchpatch { + url = "https://gitlab.com/Remmina/Remmina/-/commit/2ce153411597035d0f3db5177d703541e09eaa06.patch"; + hash = "sha256-RV/8Ze9aN4dW49Z+y3z0jFs4dyEWu7DK2FABtmse9Hc="; + }) + ]; + + nativeBuildInputs = [ cmake ninja pkg-config wrapGAppsHook ] + ++ lib.optionals stdenv.isDarwin [ desktopToDarwinBundle ]; buildInputs = [ gsettings-desktop-schemas From 66884a4912003e8090ef6e2a203f9544c4d7702c Mon Sep 17 00:00:00 2001 From: Michael Hoang Date: Tue, 15 Aug 2023 15:07:22 +1000 Subject: [PATCH 2/2] writeDarwinBundle: use binary wrapper Previously `writeDarwinBundle` used a handcrafted shell wrapper, however this causes issues on Apple Silicon Macs as script-only application bundles are always run under Rosetta[0][1]. Replacing the handcrafted shell wrapper with a binary wrapper allows apps to run natively instead of requiring Rosetta. However, this means we can no longer use `$1` and `$@`. After checking nearly every current usage of `desktopToDarwinBundle`, there were no apps that used `%[fFuU]` before the last argument, meaning removing them naively is good enough for the current apps. [0]: https://developer.apple.com/documentation/apple-silicon/building-a-universal-macos-binary [1]: https://stackoverflow.com/a/68208374 --- .../write-darwin-bundle.nix | 30 ++++++++++++------- .../setup-hooks/desktop-to-darwin-bundle.sh | 4 +-- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/pkgs/build-support/make-darwin-bundle/write-darwin-bundle.nix b/pkgs/build-support/make-darwin-bundle/write-darwin-bundle.nix index fde977c3636..752cbbde2a3 100644 --- a/pkgs/build-support/make-darwin-bundle/write-darwin-bundle.nix +++ b/pkgs/build-support/make-darwin-bundle/write-darwin-bundle.nix @@ -1,4 +1,4 @@ -{ writeScriptBin, lib, ... }: +{ writeScriptBin, lib, makeBinaryWrapper }: let pListText = lib.generators.toPlist { } { @@ -17,23 +17,31 @@ in writeScriptBin "write-darwin-bundle" '' readonly prefix=$1 readonly name=$2 - readonly exec=$3 + # TODO: support executables with spaces in their names + readonly execName=''${3%% *} # Before the first space + [[ $3 =~ " " ]] && readonly execArgs=''${3#* } # Everything after the first space readonly icon=$4.icns readonly squircle=''${5:-1} readonly plist=$prefix/Applications/$name.app/Contents/Info.plist + readonly binary=$prefix/bin/$execName + readonly bundleExecutable=$prefix/Applications/$name.app/Contents/MacOS/$name cat > "$plist" <|d' -i "$plist" - fi + if [[ $squircle == 0 || $squircle == "false" ]]; then + sed '/CFBundleIconFiles/,\||d' -i "$plist" + fi - cat > "$prefix/Applications/$name.app/Contents/MacOS/$name" <&2 "desktopToDarwinBundle: Application bundles do not understand desktop entry field codes. Changed '$execRaw' to '$exec'." fi