biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / applications / networking / instant-messengers / deltachat-desktop / default.nix
blobd53b122068a9126b4db8ff6f84b0dd4f312546fa
1 { lib
2 , buildNpmPackage
3 , copyDesktopItems
4 , electron_28
5 , buildGoModule
6 , esbuild
7 , fetchFromGitHub
8 , jq
9 , libdeltachat
10 , makeDesktopItem
11 , makeWrapper
12 , noto-fonts-color-emoji
13 , pkg-config
14 , python3
15 , roboto
16 , sqlcipher
17 , stdenv
18 , CoreServices
19 , testers
20 , deltachat-desktop
23 let
24   esbuild' = esbuild.override {
25     buildGoModule = args: buildGoModule (args // rec {
26       version = "0.19.8";
27       src = fetchFromGitHub {
28         owner = "evanw";
29         repo = "esbuild";
30         rev = "v${version}";
31         hash = "sha256-f13YbgHFQk71g7twwQ2nSOGA0RG0YYM01opv6txRMuw=";
32       };
33       vendorHash = "sha256-+BfxCyg0KkDQpHt/wycy/8CTG6YBA/VJvJFhhzUnSiQ=";
34     });
35   };
37 buildNpmPackage rec {
38   pname = "deltachat-desktop";
39   version = "1.44.1";
41   src = fetchFromGitHub {
42     owner = "deltachat";
43     repo = "deltachat-desktop";
44     rev = "v${version}";
45     hash = "sha256-fL+9oPQ5dAgvQREZ7A+hKo2MnZKeVvadQDvDPsDNbnQ=";
46   };
48   npmDepsHash = "sha256-rUxJLDsAfp+brecTThYTdHIVIfVkKwZ/W5sHV0hHHIk=";
50   postPatch = ''
51     test \
52       $(jq -r '.packages."node_modules/@deltachat/jsonrpc-client".version' package-lock.json) \
53       = $(pkg-config --modversion deltachat) \
54       || (echo "error: libdeltachat version does not match jsonrpc-client" && exit 1)
55   '';
57   nativeBuildInputs = [
58     jq
59     makeWrapper
60     pkg-config
61     python3
62   ] ++ lib.optionals stdenv.isLinux [
63     copyDesktopItems
64   ];
66   buildInputs = [
67     libdeltachat
68   ] ++ lib.optionals stdenv.isDarwin [
69     CoreServices
70   ];
72   env = {
73     ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
74     ESBUILD_BINARY_PATH = "${esbuild'}/bin/esbuild";
75     USE_SYSTEM_LIBDELTACHAT = "true";
76     VERSION_INFO_GIT_REF = src.rev;
77   };
79   preBuild = ''
80     rm -r node_modules/deltachat-node/node/prebuilds
81   '';
83   npmBuildScript = "build4production";
85   installPhase = ''
86     runHook preInstall
88     npm prune --production
90     mkdir -p $out/lib/node_modules/deltachat-desktop
91     cp -r . $out/lib/node_modules/deltachat-desktop
93     awk '!/^#/ && NF' build/packageignore_list \
94       | xargs -I {} sh -c "rm -rf $out/lib/node_modules/deltachat-desktop/{}" || true
96     install -D build/icon.png \
97       $out/share/icons/hicolor/scalable/apps/deltachat.png
99     ln -sf ${noto-fonts-color-emoji}/share/fonts/noto/NotoColorEmoji.ttf \
100       $out/lib/node_modules/deltachat-desktop/html-dist/fonts/noto/emoji
101     for font in $out/lib/node_modules/deltachat-desktop/html-dist/fonts/Roboto-*.ttf; do
102       ln -sf ${roboto}/share/fonts/truetype/$(basename $font) \
103         $out/lib/node_modules/deltachat-desktop/html-dist/fonts
104     done
106     makeWrapper ${lib.getExe electron_28} $out/bin/deltachat \
107       --set LD_PRELOAD ${sqlcipher}/lib/libsqlcipher${stdenv.hostPlatform.extensions.sharedLibrary} \
108       --add-flags $out/lib/node_modules/deltachat-desktop
110     runHook postInstall
111   '';
113   desktopItems = lib.singleton (makeDesktopItem {
114     name = "deltachat";
115     exec = "deltachat %u";
116     icon = "deltachat";
117     desktopName = "Delta Chat";
118     genericName = "Delta Chat";
119     comment = meta.description;
120     categories = [ "Network" "InstantMessaging" "Chat" ];
121     startupWMClass = "DeltaChat";
122     mimeTypes = [
123       "x-scheme-handler/openpgp4fpr"
124       "x-scheme-handler/dcaccount"
125       "x-scheme-handler/dclogin"
126       "x-scheme-handler/mailto"
127     ];
128   });
130   passthru.tests = {
131     version = testers.testVersion {
132       package = deltachat-desktop;
133     };
134   };
136   meta = with lib; {
137     description = "Email-based instant messaging for Desktop";
138     homepage = "https://github.com/deltachat/deltachat-desktop";
139     changelog = "https://github.com/deltachat/deltachat-desktop/blob/${src.rev}/CHANGELOG.md";
140     license = licenses.gpl3Plus;
141     mainProgram = "deltachat";
142     maintainers = with maintainers; [ dotlambda ];
143   };