Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / applications / blockchains / bisq-desktop / default.nix
blob9560292e1b7ef3c87a8da3a74038dd13bbe0d689
1 { stdenv
2 , lib
3 , makeWrapper
4 , fetchurl
5 , makeDesktopItem
6 , copyDesktopItems
7 , imagemagick
8 , openjdk11
9 , dpkg
10 , writeScript
11 , bash
12 , strip-nondeterminism
13 , tor
14 , zip
15 , xz
18 let
19   bisq-launcher = args: writeScript "bisq-launcher" ''
20     #! ${bash}/bin/bash
22     # This is just a comment to convince Nix that Tor is a
23     # runtime dependency; The Tor binary is in a *.jar file,
24     # whereas Nix only scans for hashes in uncompressed text.
25     # ${bisq-tor}
27     JAVA_TOOL_OPTIONS="-XX:+UseG1GC -XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5 -XX:+UseStringDeduplication ${args}" bisq-desktop-wrapped "$@"
28   '';
30   bisq-tor = writeScript "bisq-tor" ''
31     #! ${bash}/bin/bash
33     exec ${tor}/bin/tor "$@"
34   '';
36 stdenv.mkDerivation rec {
37   pname = "bisq-desktop";
38   version = "1.9.12";
40   src = fetchurl {
41     url = "https://github.com/bisq-network/bisq/releases/download/v${version}/Bisq-64bit-${version}.deb";
42     sha256 = "0zzrl7dmd3m7pymwvl68gnjspbpzf1w17bcwr0ipgsszmr35k9rs";
43   };
45   nativeBuildInputs = [
46     copyDesktopItems
47     dpkg
48     imagemagick
49     makeWrapper
50     strip-nondeterminism
51     xz
52     zip
53   ];
55   desktopItems = [
56     (makeDesktopItem {
57       name = "Bisq";
58       exec = "bisq-desktop";
59       icon = "bisq";
60       desktopName = "Bisq ${version}";
61       genericName = "Decentralized bitcoin exchange";
62       categories = [ "Network" "P2P" ];
63     })
65     (makeDesktopItem {
66       name = "Bisq-hidpi";
67       exec = "bisq-desktop-hidpi";
68       icon = "bisq";
69       desktopName = "Bisq ${version} (HiDPI)";
70       genericName = "Decentralized bitcoin exchange";
71       categories = [ "Network" "P2P" ];
72     })
73   ];
75   unpackPhase = ''
76     dpkg -x $src .
77   '';
79   buildPhase = ''
80     # Replace the embedded Tor binary (which is in a Tar archive)
81     # with one from Nixpkgs.
83     mkdir -p native/linux/x64/
84     cp ${bisq-tor} ./tor
85     tar --sort=name --mtime="@$SOURCE_DATE_EPOCH" -cJf native/linux/x64/tor.tar.xz tor
86     zip -r opt/bisq/lib/app/desktop-${version}-all.jar native
87     strip-nondeterminism opt/bisq/lib/app/desktop-${version}-all.jar
88   '';
90   installPhase = ''
91     runHook preInstall
93     mkdir -p $out/lib $out/bin
94     cp opt/bisq/lib/app/desktop-${version}-all.jar $out/lib
96     makeWrapper ${openjdk11}/bin/java $out/bin/bisq-desktop-wrapped \
97       --add-flags "-jar $out/lib/desktop-${version}-all.jar bisq.desktop.app.BisqAppMain"
99     makeWrapper ${bisq-launcher ""} $out/bin/bisq-desktop \
100       --prefix PATH : $out/bin
102     makeWrapper ${bisq-launcher "-Dglass.gtk.uiScale=2.0"} $out/bin/bisq-desktop-hidpi \
103       --prefix PATH : $out/bin
105     for n in 16 24 32 48 64 96 128 256; do
106       size=$n"x"$n
107       convert opt/bisq/lib/Bisq.png -resize $size bisq.png
108       install -Dm644 -t $out/share/icons/hicolor/$size/apps bisq.png
109     done;
111     runHook postInstall
112   '';
114   passthru.updateScript = ./update.sh;
116   meta = with lib; {
117     description = "A decentralized bitcoin exchange network";
118     homepage = "https://bisq.network";
119     sourceProvenance = with sourceTypes; [ binaryBytecode ];
120     license = licenses.mit;
121     maintainers = with maintainers; [ juaningan emmanuelrosa ];
122     platforms = [ "x86_64-linux" ];
123   };