chromium,chromedriver: 129.0.6668.91 -> 129.0.6668.100
[NixPkgs.git] / pkgs / by-name / lo / logseq / package.nix
blob06fc0d3fd0a3f8ff48c5f4eec6ee8bb9c541ede0
1 { lib
2 , stdenv
3 , fetchurl
4 , appimageTools
5 , unzip
6 , makeWrapper
7 # Notice: graphs will not sync without matching upstream's major electron version
8 #         the specific electron version is set at top-level file to preserve override interface.
9 #         whenever updating this package also sync electron version at top-level file.
10 , electron
11 , autoPatchelfHook
12 , git
13 , nix-update-script
16 stdenv.mkDerivation (finalAttrs: let
17   inherit (finalAttrs) pname version src;
18   inherit (stdenv.hostPlatform) system;
19   selectSystem = attrs: attrs.${system} or (throw "Unsupported system: ${system}");
20   suffix = selectSystem {
21     x86_64-linux = "linux-x64-${version}.AppImage";
22     x86_64-darwin = "darwin-x64-${version}.zip";
23     aarch64-darwin = "darwin-arm64-${version}.zip";
24   };
25   hash = selectSystem {
26     x86_64-linux = "sha256-XROuY2RlKnGvK1VNvzauHuLJiveXVKrIYPppoz8fCmc=";
27     x86_64-darwin = "sha256-0i9ozqBSeV/y8v+YEmQkbY0V6JHOv6tKub4O5Fdx2fQ=";
28     aarch64-darwin = "sha256-Uvv96XWxpFj14wPH0DwPT+mlf3Z2dy1g/z8iBt5Te7Q=";
29   };
30 in {
31   pname = "logseq";
32   version = "0.10.9";
33   src = fetchurl {
34     inherit hash;
35     url = "https://github.com/logseq/logseq/releases/download/${version}/logseq-${suffix}";
36     name = lib.optionalString stdenv.hostPlatform.isLinux "logseq-${version}.AppImage";
37   };
39   nativeBuildInputs = [ makeWrapper ]
40     ++ lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ]
41     ++ lib.optionals stdenv.hostPlatform.isDarwin [ unzip ];
42   buildInputs = [ stdenv.cc.cc.lib ];
44   dontUnpack = stdenv.hostPlatform.isLinux;
45   dontConfigure = true;
46   dontBuild = true;
48   installPhase = ''
49     runHook preInstall
50   '' + lib.optionalString stdenv.hostPlatform.isLinux (
51   let
52    appimageContents = appimageTools.extract { inherit pname src version; };
53   in
54   ''
55     mkdir -p $out/bin $out/share/logseq $out/share/applications
56     cp -a ${appimageContents}/{locales,resources} $out/share/logseq
57     cp -a ${appimageContents}/Logseq.desktop $out/share/applications/logseq.desktop
59     # remove the `git` in `dugite` because we want the `git` in `nixpkgs`
60     chmod +w -R $out/share/logseq/resources/app/node_modules/dugite/git
61     chmod +w $out/share/logseq/resources/app/node_modules/dugite
62     rm -rf $out/share/logseq/resources/app/node_modules/dugite/git
63     chmod -w $out/share/logseq/resources/app/node_modules/dugite
65     mkdir -p $out/share/pixmaps
66     ln -s $out/share/logseq/resources/app/icons/logseq.png $out/share/pixmaps/logseq.png
68     substituteInPlace $out/share/applications/logseq.desktop \
69       --replace Exec=Logseq Exec=logseq \
70       --replace Icon=Logseq Icon=logseq
71   '') + lib.optionalString stdenv.hostPlatform.isDarwin ''
72     mkdir -p $out/{Applications/Logseq.app,bin}
73     cp -R . $out/Applications/Logseq.app
74     makeWrapper $out/Applications/Logseq.app/Contents/MacOS/Logseq $out/bin/logseq
75   '' + ''
76     runHook postInstall
77   '';
79   postFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
80     # set the env "LOCAL_GIT_DIRECTORY" for dugite so that we can use the git in nixpkgs
81     makeWrapper ${electron}/bin/electron $out/bin/logseq \
82       --set "LOCAL_GIT_DIRECTORY" ${git} \
83       --add-flags $out/share/logseq/resources/app \
84       --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
85   '';
87   passthru.updateScript = nix-update-script { };
89   meta = {
90     description = "Local-first, non-linear, outliner notebook for organizing and sharing your personal knowledge base";
91     homepage = "https://github.com/logseq/logseq";
92     changelog = "https://github.com/logseq/logseq/releases/tag/${version}";
93     license = lib.licenses.agpl3Plus;
94     sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
95     maintainers = with lib.maintainers; [ cheeseecake ];
96     platforms = [ "x86_64-linux" ] ++ lib.platforms.darwin;
97     mainProgram = "logseq";
98   };