summary refs log tree commit diff
path: root/pkgs/applications/blockchains/bisq-desktop/default.nix
blob: ffc19765d4f6d0e0e6e267eb2c596a507232c931 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
{ stdenv
, lib
, makeWrapper
, fetchurl
, makeDesktopItem
, copyDesktopItems
, imagemagick
, openjdk11
, dpkg
, writeScript
, coreutils
, bash
, tor
, psmisc
}:
let
  bisq-launcher = writeScript "bisq-launcher" ''
    #! ${bash}/bin/bash

    # Setup a temporary Tor instance
    TMPDIR=$(${coreutils}/bin/mktemp -d)
    CONTROLPORT=$(${coreutils}/bin/shuf -i 9100-9499 -n 1)
    SOCKSPORT=$(${coreutils}/bin/shuf -i 9500-9999 -n 1)
    ${coreutils}/bin/head -c 1024 < /dev/urandom > $TMPDIR/cookie

    ${tor}/bin/tor --SocksPort $SOCKSPORT --ControlPort $CONTROLPORT \
      --ControlPortWriteToFile $TMPDIR/port --CookieAuthFile $TMPDIR/cookie \
      --CookieAuthentication 1 >$TMPDIR/tor.log --RunAsDaemon 1

    torpid=$(${psmisc}/bin/fuser $CONTROLPORT/tcp)

    echo Temp directory: $TMPDIR
    echo Tor PID: $torpid
    echo Tor control port: $CONTROLPORT
    echo Tor SOCKS port: $SOCKSPORT
    echo Tor log: $TMPDIR/tor.log
    echo Bisq log file: $TMPDIR/bisq.log

    JAVA_TOOL_OPTIONS="-XX:MaxRAM=4g" bisq-desktop-wrapped \
      --torControlCookieFile=$TMPDIR/cookie \
      --torControlUseSafeCookieAuth \
      --torControlPort $CONTROLPORT "$@" > $TMPDIR/bisq.log

    echo Bisq exited. Killing Tor...
    kill $torpid
  '';
in
stdenv.mkDerivation rec {
  version = "1.7.0";
  pname = "bisq-desktop";
  nativeBuildInputs = [ makeWrapper copyDesktopItems dpkg ];

  src = fetchurl {
    url = "https://github.com/bisq-network/bisq/releases/download/v${version}/Bisq-64bit-${version}.deb";
    sha256 = "0crry5k7crmrqn14wxiyrnhk09ac8a9ksqrwwky7jsnyah0bx5k4";
  };

  desktopItems = [
    (makeDesktopItem {
      name = "Bisq";
      exec = "bisq-desktop";
      icon = "bisq";
      desktopName = "Bisq";
      genericName = "Decentralized bitcoin exchange";
      categories = "Network;Utility;";
    })
  ];

  unpackPhase = ''
    dpkg -x $src .
  '';

  installPhase = ''
    mkdir -p $out/lib $out/bin
    cp opt/bisq/lib/app/desktop-${version}-all.jar $out/lib

    makeWrapper ${openjdk11}/bin/java $out/bin/bisq-desktop-wrapped \
      --add-flags "-jar $out/lib/desktop-${version}-all.jar bisq.desktop.app.BisqAppMain"

    makeWrapper ${bisq-launcher} $out/bin/bisq-desktop \
      --prefix PATH : $out/bin

    copyDesktopItems

    for n in 16 24 32 48 64 96 128 256; do
      size=$n"x"$n
      ${imagemagick}/bin/convert opt/bisq/lib/Bisq.png -resize $size bisq.png
      install -Dm644 -t $out/share/icons/hicolor/$size/apps bisq.png
    done;
  '';

  meta = with lib; {
    description = "A decentralized bitcoin exchange network";
    homepage = "https://bisq.network";
    license = licenses.mit;
    maintainers = with maintainers; [ juaningan emmanuelrosa ];
    platforms = [ "x86_64-linux" ];
  };
}