nixpkgs-suyu/pkgs/applications/blockchains/bisq-desktop/default.nix
2023-11-26 13:47:16 -05:00

126 lines
3.2 KiB
Nix

{ 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" ];
};
}