diff --git a/flake.nix b/flake.nix index 5b5057e..8d82517 100644 --- a/flake.nix +++ b/flake.nix @@ -329,12 +329,6 @@ ssh root@${self.colmena.sj-vps-htz0.deployment.targetHost} -L 8385:syncthing.containers:8384 ''; - logseq = - pkgs.callPackage ./nix/pkgs/logseq - (lib.attrsets.optionalAttrs pkgs.stdenv.isAarch64 { - overrideSrc = self.inputs.logseq_0_10_9_aarch64_appimage; - }); - rperf = craneLib.buildPackage { src = inputs.rperf; nativeBuildInputs = [ diff --git a/nix/pkgs/logseq/default.nix b/nix/pkgs/logseq/default.nix index a50818a..159d03b 100644 --- a/nix/pkgs/logseq/default.nix +++ b/nix/pkgs/logseq/default.nix @@ -3,9 +3,13 @@ stdenv, fetchurl, appimageTools, + unzip, makeWrapper, - # graphs will not sync without matching upstream's major electron version + # Notice: graphs will not sync without matching upstream's major electron version + # the specific electron version is set at top-level file to preserve override interface. + # whenever updating this package also sync electron version at top-level file. electron_27, + autoPatchelfHook, git, nix-update-script, overrideSrc ? null, @@ -22,62 +26,73 @@ in { else (fetchurl { url = "https://github.com/logseq/logseq/releases/download/${version}/logseq-linux-x64-${version}.AppImage"; - hash = "sha256-F3YbqgvL04P0nXaIVkJlCq/z8hUE0M0UutkBs2omuBE="; + hash = "sha256-F3YbqgvL04P0nXaIVkJlCq/z8hUE0M0UutkBs2omuBe="; name = "${pname}-${version}.AppImage"; }); - appimageContents = appimageTools.extract { - inherit pname src version; - }; + nativeBuildInputs = + [makeWrapper] + ++ lib.optionals stdenv.hostPlatform.isLinux [autoPatchelfHook] + ++ lib.optionals stdenv.hostPlatform.isDarwin [unzip]; + buildInputs = [stdenv.cc.cc.lib]; - dontUnpack = true; + dontUnpack = stdenv.hostPlatform.isLinux; dontConfigure = true; dontBuild = true; - nativeBuildInputs = [makeWrapper]; + installPhase = + '' + runHook preInstall + '' + + lib.optionalString stdenv.hostPlatform.isLinux ( + let + appimageContents = appimageTools.extract {inherit pname src version;}; + in '' + mkdir -p $out/bin $out/share/logseq $out/share/applications + cp -a ${appimageContents}/{locales,resources} $out/share/logseq + cp -a ${appimageContents}/Logseq.desktop $out/share/applications/logseq.desktop - installPhase = '' - runHook preInstall + # remove the `git` in `dugite` because we want the `git` in `nixpkgs` + chmod +w -R $out/share/logseq/resources/app/node_modules/dugite/git + chmod +w $out/share/logseq/resources/app/node_modules/dugite + rm -rf $out/share/logseq/resources/app/node_modules/dugite/git + chmod -w $out/share/logseq/resources/app/node_modules/dugite - mkdir -p $out/bin $out/share/${pname} $out/share/applications - cp -a ${appimageContents}/{locales,resources} $out/share/${pname} - cp -a ${appimageContents}/Logseq.desktop $out/share/applications/${pname}.desktop + mkdir -p $out/share/pixmaps + ln -s $out/share/logseq/resources/app/icons/logseq.png $out/share/pixmaps/logseq.png - # remove the `git` in `dugite` because we want the `git` in `nixpkgs` - if test -e $out/share/${pname}/resources/app/node_modules/dugite/git; then - chmod +w -R $out/share/${pname}/resources/app/node_modules/dugite/git - chmod +w $out/share/${pname}/resources/app/node_modules/dugite - rm -rf $out/share/${pname}/resources/app/node_modules/dugite/git - chmod -w $out/share/${pname}/resources/app/node_modules/dugite - fi + substituteInPlace $out/share/applications/logseq.desktop \ + --replace Exec=Logseq Exec=logseq \ + --replace Icon=Logseq Icon=logseq + '' + ) + + lib.optionalString stdenv.hostPlatform.isDarwin '' + mkdir -p $out/{Applications/Logseq.app,bin} + cp -R . $out/Applications/Logseq.app + makeWrapper $out/Applications/Logseq.app/Contents/MacOS/Logseq $out/bin/logseq + '' + + '' + runHook postInstall + ''; - mkdir -p $out/share/pixmaps - ln -s $out/share/${pname}/resources/app/icons/logseq.png $out/share/pixmaps/${pname}.png - - substituteInPlace $out/share/applications/${pname}.desktop \ - --replace Exec=Logseq Exec=${pname} \ - --replace Icon=Logseq Icon=${pname} - - runHook postInstall - ''; - - postFixup = '' + postFixup = lib.optionalString stdenv.hostPlatform.isLinux '' # set the env "LOCAL_GIT_DIRECTORY" for dugite so that we can use the git in nixpkgs - makeWrapper ${electron_27}/bin/electron $out/bin/${pname} \ + makeWrapper ${electron_27}/bin/electron $out/bin/logseq \ --set "LOCAL_GIT_DIRECTORY" ${git} \ - --add-flags $out/share/${pname}/resources/app \ - --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \ - --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [stdenv.cc.cc.lib]}" + --add-flags $out/share/logseq/resources/app \ + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" ''; passthru.updateScript = nix-update-script {}; meta = { - description = "A local-first, non-linear, outliner notebook for organizing and sharing your personal knowledge base"; + description = "Local-first, non-linear, outliner notebook for organizing and sharing your personal knowledge base"; homepage = "https://github.com/logseq/logseq"; changelog = "https://github.com/logseq/logseq/releases/tag/${version}"; license = lib.licenses.agpl3Plus; - maintainers = with lib.maintainers; []; - platforms = ["x86_64-linux" "aarch64-linux"]; + sourceProvenance = with lib.sourceTypes; [binaryNativeCode]; + maintainers = with lib.maintainers; [cheeseecake]; + platforms = ["x86_64-linux" "aarch64-linux"] ++ lib.platforms.darwin; + mainProgram = "logseq"; }; })