From 98d64c13468d6f53feb93bb3b58a3aaacca7fbb9 Mon Sep 17 00:00:00 2001 From: chillcicada <2210227279@qq.com> Date: Mon, 31 Aug 2026 17:05:24 +0800 Subject: [PATCH] folia-major: support darwin --- pkgs/by-name/fo/folia-major/package.nix | 80 ++++++++++++++++--------- 1 file changed, 53 insertions(+), 27 deletions(-) diff --git a/pkgs/by-name/fo/folia-major/package.nix b/pkgs/by-name/fo/folia-major/package.nix index 0aeecf208a0d..6deb22d7a9ac 100644 --- a/pkgs/by-name/fo/folia-major/package.nix +++ b/pkgs/by-name/fo/folia-major/package.nix @@ -1,10 +1,10 @@ { lib, stdenvNoCC, + buildNpmPackage, fetchFromGitHub, - fetchNpmDeps, - nodejs, - npmHooks, + jq, + imagemagick, makeWrapper, electron, copyDesktopItems, @@ -12,7 +12,15 @@ nix-update-script, }: -stdenvNoCC.mkDerivation (finalAttrs: { +let + resourcesDir = + if stdenvNoCC.hostPlatform.isDarwin then + "$out/Applications/Folia.app/Contents/Resources" + else + "$out/share/folia-major/resources"; +in + +buildNpmPackage (finalAttrs: { pname = "folia-major"; version = "0.7.0"; @@ -26,14 +34,9 @@ stdenvNoCC.mkDerivation (finalAttrs: { hash = "sha256-vVWE4k5GDyGuv20rLjR4DNMN+A6qyBNzUyJYNvAZo64="; }; - npmDeps = fetchNpmDeps { - inherit (finalAttrs) src; - hash = "sha256-N4sD1R921+1lviUBbgRejqm4Angb/XIpBFm8cuUP8Zc="; - }; + npmDepsHash = "sha256-N4sD1R921+1lviUBbgRejqm4Angb/XIpBFm8cuUP8Zc="; nativeBuildInputs = [ - nodejs - npmHooks.npmConfigHook makeWrapper copyDesktopItems ]; @@ -47,42 +50,65 @@ stdenvNoCC.mkDerivation (finalAttrs: { # workaround for https://github.com/electron/electron/issues/31121 postPatch = '' substituteInPlace electron/main.cjs \ - --replace-fail "process.resourcesPath" "'$out/lib/folia-major/resources'" + --replace-fail "process.resourcesPath" "'${resourcesDir}'" substituteInPlace vite.config.ts \ --replace-fail "git rev-parse --short HEAD" "echo unknown" \ --replace-fail "git rev-parse --abbrev-ref HEAD" "echo main" + + cat <<< $(${lib.getExe jq} 'del(.build.generateUpdatesFilesForAllChannels)' ./package.json) > ./package.json + + ${lib.optionalString stdenvNoCC.hostPlatform.isDarwin '' + ${lib.getExe imagemagick} build/icon.png build/icon.icns + cat <<< $(${lib.getExe jq} '.build.mac.icon = "build/icon.icns"' ./package.json) > ./package.json + ''} ''; buildPhase = '' runHook preBuild npm run build + + cp -r ${electron.dist} electron-dist + chmod -R u+w electron-dist npm exec electron-builder -- \ --dir \ - -c.electronDist=${electron.dist} \ - -c.electronVersion=${electron.version} + -c.electronDist=electron-dist \ + -c.electronVersion=${electron.version} \ + -c.mac.identity=null runHook postBuild ''; - installPhase = '' - runHook preInstall + installPhase = + if stdenvNoCC.hostPlatform.isDarwin then + '' + runHook preInstall - mkdir -p $out/lib/folia-major - cp -r release/*-unpacked/{locales,resources{,.pak}} $out/lib/folia-major/ + mkdir -p $out/{Applications,bin} + cp -r release/mac*/Folia.app $out/Applications + makeWrapper $out/Applications/Folia.app/Contents/MacOS/Folia $out/bin/folia-major - install -D build/icon.png $out/share/icons/hicolor/512x512/apps/folia-major.png + runHook postInstall + '' + else + '' + runHook preInstall - makeWrapper '${lib.getExe electron}' $out/bin/folia-major \ - --add-flags $out/lib/folia-major/resources/app.asar \ - --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true --wayland-text-input-version=3}}" \ - --set-default ELECTRON_FORCE_IS_PACKAGED 1 \ - --set-default ELECTRON_IS_DEV 0 \ - --inherit-argv0 + mkdir -p $out/share/folia-major + cp -r release/*-unpacked/{locales,resources{,.pak}} $out/share/folia-major/ - runHook postInstall - ''; + install -D build/icon.png $out/share/icons/hicolor/512x512/apps/folia-major.png + + makeWrapper '${lib.getExe electron}' $out/bin/folia-major \ + --add-flags $out/share/folia-major/resources/app.asar \ + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true --wayland-text-input-version=3}}" \ + --set-default ELECTRON_FORCE_IS_PACKAGED 1 \ + --set-default ELECTRON_IS_DEV 0 \ + --inherit-argv0 + + runHook postInstall + ''; desktopItems = [ (makeDesktopItem { @@ -110,6 +136,6 @@ stdenvNoCC.mkDerivation (finalAttrs: { license = lib.licenses.agpl3Only; mainProgram = "folia-major"; maintainers = with lib.maintainers; [ chillcicada ]; - platforms = lib.platforms.linux; + platforms = lib.platforms.linux ++ lib.platforms.darwin; }; })