about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/blockchains/bisq-desktop/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/blockchains/bisq-desktop/default.nix')
-rw-r--r--nixpkgs/pkgs/applications/blockchains/bisq-desktop/default.nix126
1 files changed, 126 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/blockchains/bisq-desktop/default.nix b/nixpkgs/pkgs/applications/blockchains/bisq-desktop/default.nix
new file mode 100644
index 000000000000..8e6881f0d7e8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/blockchains/bisq-desktop/default.nix
@@ -0,0 +1,126 @@
+{ stdenv
+, lib
+, makeWrapper
+, fetchurl
+, makeDesktopItem
+, copyDesktopItems
+, imagemagick
+, openjdk11
+, dpkg
+, writeScript
+, bash
+, strip-nondeterminism
+, tor
+, zip
+, xz
+, findutils
+}:
+
+let
+  bisq-launcher = args: writeScript "bisq-launcher" ''
+    #! ${bash}/bin/bash
+
+    # This is just a comment to convince Nix that Tor is a
+    # runtime dependency; The Tor binary is in a *.jar file,
+    # whereas Nix only scans for hashes in uncompressed text.
+    # ${bisq-tor}
+
+    classpath=@out@/lib/desktop.jar:@out@/lib/*
+
+    exec "${openjdk11}/bin/java" -Djpackage.app-version=@version@ -XX:MaxRAM=8g -Xss1280k -XX:+UseG1GC -XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5 -XX:+UseStringDeduplication -Djava.net.preferIPv4Stack=true -classpath $classpath ${args} bisq.desktop.app.BisqAppMain "$@"
+  '';
+
+  bisq-tor = writeScript "bisq-tor" ''
+    #! ${bash}/bin/bash
+
+    exec ${tor}/bin/tor "$@"
+  '';
+in
+stdenv.mkDerivation rec {
+  pname = "bisq-desktop";
+  version = "1.9.14";
+
+  src = fetchurl {
+    url = "https://github.com/bisq-network/bisq/releases/download/v${version}/Bisq-64bit-${version}.deb";
+    sha256 = "0xbq94qbp59523xjp80bly38aisfwkfi0y9hmyhf8xlw084b82kz";
+  };
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    dpkg
+    imagemagick
+    makeWrapper
+    strip-nondeterminism
+    xz
+    zip
+    findutils
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "Bisq";
+      exec = "bisq-desktop";
+      icon = "bisq";
+      desktopName = "Bisq ${version}";
+      genericName = "Decentralized bitcoin exchange";
+      categories = [ "Network" "P2P" ];
+    })
+
+    (makeDesktopItem {
+      name = "Bisq-hidpi";
+      exec = "bisq-desktop-hidpi";
+      icon = "bisq";
+      desktopName = "Bisq ${version} (HiDPI)";
+      genericName = "Decentralized bitcoin exchange";
+      categories = [ "Network" "P2P" ];
+    })
+  ];
+
+  unpackPhase = ''
+    dpkg -x $src .
+  '';
+
+  buildPhase = ''
+    # Replace the embedded Tor binary (which is in a Tar archive)
+    # with one from Nixpkgs.
+
+    mkdir -p native/linux/x64/
+    cp ${bisq-tor} ./tor
+    tar --sort=name --mtime="@$SOURCE_DATE_EPOCH" -cJf native/linux/x64/tor.tar.xz tor
+    tor_jar_file=$(find ./opt/bisq/lib/app -name "tor-binary-linux64-*.jar")
+    zip -r $tor_jar_file native
+    strip-nondeterminism ./opt/bisq/lib/app/*.jar
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out $out/bin
+    cp -r opt/bisq/lib/app $out/lib
+
+    install -D -m 777 ${bisq-launcher ""} $out/bin/bisq-desktop
+    substituteAllInPlace $out/bin/bisq-desktop
+
+    install -D -m 777 ${bisq-launcher "-Dglass.gtk.uiScale=2.0"} $out/bin/bisq-desktop-hidpi
+    substituteAllInPlace $out/bin/bisq-desktop-hidpi
+
+    for n in 16 24 32 48 64 96 128 256; do
+      size=$n"x"$n
+      convert opt/bisq/lib/Bisq.png -resize $size bisq.png
+      install -Dm644 -t $out/share/icons/hicolor/$size/apps bisq.png
+    done;
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "A decentralized bitcoin exchange network";
+    homepage = "https://bisq.network";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ juaningan emmanuelrosa ];
+    platforms = [ "x86_64-linux" ];
+  };
+}