folia-major: support darwin (#553228)

This commit is contained in:
Weijia Wang
2026-09-03 20:54:27 +00:00
committed by GitHub

View File

@@ -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;
};
})