btrbk: add mainProgram (#356350)
[NixPkgs.git] / pkgs / by-name / de / deltachat-desktop / package.nix
blob78f7c75d4e03b2d297491b9383cf0d0caea34061
1 { lib
2 , buildNpmPackage
3 , copyDesktopItems
4 , electron_30
5 , buildGoModule
6 , esbuild
7 , fetchFromGitHub
8 , jq
9 , deltachat-rpc-server
10 , makeDesktopItem
11 , makeWrapper
12 , noto-fonts-color-emoji
13 , pkg-config
14 , python3
15 , roboto
16 , sqlcipher
17 , stdenv
18 , darwin
19 , testers
20 , deltachat-desktop
23 let
24   electron = electron_30;
25   esbuild' = esbuild.override {
26     buildGoModule = args: buildGoModule (args // rec {
27       version = "0.19.12";
28       src = fetchFromGitHub {
29         owner = "evanw";
30         repo = "esbuild";
31         rev = "v${version}";
32         hash = "sha256-NQ06esCSU6YPvQ4cMsi3DEFGIQGl8Ff6fhdTxUAyGvo=";
33       };
34       vendorHash = "sha256-+BfxCyg0KkDQpHt/wycy/8CTG6YBA/VJvJFhhzUnSiQ=";
35     });
36   };
38 buildNpmPackage rec {
39   pname = "deltachat-desktop";
40   version = "1.46.8";
42   src = fetchFromGitHub {
43     owner = "deltachat";
44     repo = "deltachat-desktop";
45     rev = "v${version}";
46     hash = "sha256-17JhaanYEySoDuLYFMc4vB3wVlCucMh3Jk2Uu9PqUdQ=";
47   };
49   npmDepsHash = "sha256-+74koym1lL2rk5n06i7JgcXmX+yW4zgqRfdH6ryXe0s=";
51   nativeBuildInputs = [
52     jq
53     makeWrapper
54     pkg-config
55     python3
56   ] ++ lib.optionals stdenv.hostPlatform.isLinux [
57     copyDesktopItems
58   ];
60   buildInputs = [
61     deltachat-rpc-server
62   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
63     darwin.apple_sdk.frameworks.CoreServices
64   ];
66   env = {
67     ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
68     ESBUILD_BINARY_PATH = "${esbuild'}/bin/esbuild";
69     USE_SYSTEM_LIBDELTACHAT = "true";
70     VERSION_INFO_GIT_REF = src.rev;
71   };
73   preBuild = ''
74     test \
75       $(jq -r '.packages."node_modules/@deltachat/jsonrpc-client".version' package-lock.json) \
76       = ${deltachat-rpc-server.version} \
77       || (echo "error: deltachat-rpc-server version does not match jsonrpc-client" && exit 1)
79     test \
80       $(jq -r '.packages."node_modules/electron".version' package-lock.json | grep -E -o "^[0-9]+") \
81       = ${lib.versions.major electron.version} \
82       || (echo 'error: electron version doesn not match package-lock.json' && exit 1)
84     rm node_modules/@deltachat/stdio-rpc-server-*/deltachat-rpc-server
85     ln -s ${lib.getExe deltachat-rpc-server} node_modules/@deltachat/stdio-rpc-server-linux-*
86   '';
88   npmBuildScript = "build4production";
90   installPhase = ''
91     runHook preInstall
93     npm prune --production
95     mkdir -p $out/lib/node_modules/deltachat-desktop
96     cp -r . $out/lib/node_modules/deltachat-desktop
98     awk '!/^#/ && NF' build/packageignore_list \
99       | xargs -I {} sh -c "rm -rf $out/lib/node_modules/deltachat-desktop/{}" || true
101     # required for electron to import index.js as a module
102     cp package.json $out/lib/node_modules/deltachat-desktop
104     install -D build/icon.png \
105       $out/share/icons/hicolor/scalable/apps/deltachat.png
107     ln -sf ${noto-fonts-color-emoji}/share/fonts/noto/NotoColorEmoji.ttf \
108       $out/lib/node_modules/deltachat-desktop/html-dist/fonts/noto/emoji
109     for font in $out/lib/node_modules/deltachat-desktop/html-dist/fonts/Roboto-*.ttf; do
110       ln -sf ${roboto}/share/fonts/truetype/$(basename $font) \
111         $out/lib/node_modules/deltachat-desktop/html-dist/fonts
112     done
114     makeWrapper ${lib.getExe electron} $out/bin/deltachat \
115       --set LD_PRELOAD ${sqlcipher}/lib/libsqlcipher${stdenv.hostPlatform.extensions.sharedLibrary} \
116       --add-flags $out/lib/node_modules/deltachat-desktop
118     runHook postInstall
119   '';
121   desktopItems = lib.singleton (makeDesktopItem {
122     name = "deltachat";
123     exec = "deltachat %u";
124     icon = "deltachat";
125     desktopName = "Delta Chat";
126     genericName = "Delta Chat";
127     comment = meta.description;
128     categories = [ "Network" "InstantMessaging" "Chat" ];
129     startupWMClass = "DeltaChat";
130     mimeTypes = [
131       "x-scheme-handler/openpgp4fpr"
132       "x-scheme-handler/dcaccount"
133       "x-scheme-handler/dclogin"
134       "x-scheme-handler/mailto"
135     ];
136   });
138   passthru.tests = {
139     version = testers.testVersion {
140       package = deltachat-desktop;
141     };
142   };
144   meta = with lib; {
145     description = "Email-based instant messaging for Desktop";
146     homepage = "https://github.com/deltachat/deltachat-desktop";
147     changelog = "https://github.com/deltachat/deltachat-desktop/blob/${src.rev}/CHANGELOG.md";
148     license = licenses.gpl3Plus;
149     mainProgram = "deltachat";
150     maintainers = with maintainers; [ dotlambda ];
151   };