diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/blockchains/sparrow')
4 files changed, 323 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/blockchains/sparrow/default.nix b/nixpkgs/pkgs/applications/blockchains/sparrow/default.nix new file mode 100644 index 000000000000..32b8066ff42e --- /dev/null +++ b/nixpkgs/pkgs/applications/blockchains/sparrow/default.nix @@ -0,0 +1,227 @@ +{ stdenv +, lib +, makeWrapper +, fetchurl +, makeDesktopItem +, copyDesktopItems +, autoPatchelfHook +, openjdk +, gtk3 +, gsettings-desktop-schemas +, writeScript +, bash +, gnugrep +, tor +, zlib +, openimajgrabber +, hwi +, imagemagick +, gzip +}: + +let + pname = "sparrow"; + version = "1.8.1"; + + src = fetchurl { + url = "https://github.com/sparrowwallet/${pname}/releases/download/${version}/${pname}-${version}-x86_64.tar.gz"; + sha256 = "sha256-dpYGMclYMjxjUbIcSZ7V54I1LTVfHxAKH9+7CaprD4U="; + }; + + launcher = writeScript "sparrow" '' + #! ${bash}/bin/bash + params=( + --module-path @out@/lib:@jdkModules@/modules + --add-opens javafx.graphics/com.sun.javafx.css=org.controlsfx.controls + --add-opens javafx.graphics/javafx.scene=org.controlsfx.controls + --add-opens javafx.controls/com.sun.javafx.scene.control.behavior=org.controlsfx.controls + --add-opens javafx.controls/com.sun.javafx.scene.control.inputmap=org.controlsfx.controls + --add-opens javafx.graphics/com.sun.javafx.scene.traversal=org.controlsfx.controls + --add-opens javafx.base/com.sun.javafx.event=org.controlsfx.controls + --add-opens javafx.controls/javafx.scene.control.cell=com.sparrowwallet.sparrow + --add-opens org.controlsfx.controls/impl.org.controlsfx.skin=com.sparrowwallet.sparrow + --add-opens org.controlsfx.controls/impl.org.controlsfx.skin=javafx.fxml + --add-opens javafx.graphics/com.sun.javafx.tk=centerdevice.nsmenufx + --add-opens javafx.graphics/com.sun.javafx.tk.quantum=centerdevice.nsmenufx + --add-opens javafx.graphics/com.sun.glass.ui=centerdevice.nsmenufx + --add-opens javafx.controls/com.sun.javafx.scene.control=centerdevice.nsmenufx + --add-opens javafx.graphics/com.sun.javafx.menu=centerdevice.nsmenufx + --add-opens javafx.graphics/com.sun.glass.ui=com.sparrowwallet.sparrow + --add-opens=javafx.graphics/javafx.scene.input=com.sparrowwallet.sparrow + --add-opens javafx.graphics/com.sun.javafx.application=com.sparrowwallet.sparrow + --add-opens java.base/java.net=com.sparrowwallet.sparrow + --add-opens java.base/java.io=com.google.gson + --add-opens=java.smartcardio/sun.security.smartcardio=com.sparrowwallet.sparrow + --add-reads com.sparrowwallet.merged.module=java.desktop + --add-reads com.sparrowwallet.merged.module=java.sql + --add-reads com.sparrowwallet.merged.module=com.sparrowwallet.sparrow + --add-reads com.sparrowwallet.merged.module=logback.classic + --add-reads com.sparrowwallet.merged.module=com.fasterxml.jackson.databind + --add-reads com.sparrowwallet.merged.module=com.fasterxml.jackson.annotation + --add-reads com.sparrowwallet.merged.module=com.fasterxml.jackson.core + --add-reads com.sparrowwallet.merged.module=co.nstant.in.cbor + -m com.sparrowwallet.sparrow + ) + + XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_DATA_DIRS ${openjdk}/bin/java ''${params[@]} $@ + ''; + + torWrapper = writeScript "tor-wrapper" '' + #! ${bash}/bin/bash + + exec ${tor}/bin/tor "$@" + ''; + + jdk-modules = stdenv.mkDerivation { + name = "jdk-modules"; + nativeBuildInputs = [ openjdk ]; + dontUnpack = true; + + buildPhase = '' + # Extract the JDK's JIMAGE and generate a list of modules. + mkdir modules + pushd modules + jimage extract ${openjdk}/lib/openjdk/lib/modules + ls | xargs -d " " -- echo > ../manifest.txt + popd + ''; + + installPhase = '' + mkdir -p $out + cp manifest.txt $out/ + cp -r modules/ $out/ + ''; + }; + + sparrow-modules = stdenv.mkDerivation { + pname = "sparrow-modules"; + inherit version src; + nativeBuildInputs = [ makeWrapper gzip gnugrep openjdk autoPatchelfHook stdenv.cc.cc.lib zlib ]; + + buildPhase = '' + # Extract Sparrow's JIMAGE and generate a list of them. + mkdir modules + pushd modules + jimage extract ../lib/runtime/lib/modules + + # Delete JDK modules + cat ${jdk-modules}/manifest.txt | xargs -I {} -- rm -fR {} + + # Delete unneeded native libs. + + rm -fR com.sparrowwallet.merged.module/com/sun/jna/freebsd-x86-64 + rm -fR com.sparrowwallet.merged.module/com/sun/jna/freebsd-x86 + rm -fR com.sparrowwallet.merged.module/com/sun/jna/linux-aarch64 + rm -fR com.sparrowwallet.merged.module/com/sun/jna/linux-arm + rm -fR com.sparrowwallet.merged.module/com/sun/jna/linux-armel + rm -fR com.sparrowwallet.merged.module/com/sun/jna/linux-mips64el + rm -fR com.sparrowwallet.merged.module/com/sun/jna/linux-ppc + rm -fR com.sparrowwallet.merged.module/com/sun/jna/linux-ppc64le + rm -fR com.sparrowwallet.merged.module/com/sun/jna/linux-s390x + rm -fR com.sparrowwallet.merged.module/com/sun/jna/linux-x86 + rm -fR com.sparrowwallet.merged.module/com/sun/jna/openbsd-x86-64 + rm -fR com.sparrowwallet.merged.module/com/sun/jna/openbsd-x86 + rm -fR com.sparrowwallet.merged.module/com/sun/jna/sunos-sparc + rm -fR com.sparrowwallet.merged.module/com/sun/jna/sunos-sparcv9 + rm -fR com.sparrowwallet.merged.module/com/sun/jna/sunos-x86-64 + rm -fR com.sparrowwallet.merged.module/com/sun/jna/sunos-x86 + rm -fR com.github.sarxos.webcam.capture/com/github/sarxos/webcam/ds/buildin/lib/linux_armel + rm -fR com.github.sarxos.webcam.capture/com/github/sarxos/webcam/ds/buildin/lib/linux_armhf + rm -fR com.github.sarxos.webcam.capture/com/github/sarxos/webcam/ds/buildin/lib/linux_x86 + rm com.github.sarxos.webcam.capture/com/github/sarxos/webcam/ds/buildin/lib/linux_x64/OpenIMAJGrabber.so + rm -fR com.nativelibs4java.bridj/org/bridj/lib/linux_arm32_armel + rm -fR com.nativelibs4java.bridj/org/bridj/lib/linux_armel + rm -fR com.nativelibs4java.bridj/org/bridj/lib/linux_armhf + rm -fR com.nativelibs4java.bridj/org/bridj/lib/linux_x86 + rm -fR com.nativelibs4java.bridj/org/bridj/lib/sunos_x64 + rm -fR com.nativelibs4java.bridj/org/bridj/lib/sunos_x86 + rm -fR com.sparrowwallet.merged.module/linux-aarch64 + rm -fR com.sparrowwallet.merged.module/linux-arm + rm -fR com.sparrowwallet.merged.module/linux-x86 + rm com.sparrowwallet.sparrow/native/linux/x64/hwi + + ls | xargs -d " " -- echo > ../manifest.txt + find . | grep "\.so$" | xargs -- chmod ugo+x + popd + + # Replace the embedded Tor binary (which is in a Tar archive) + # with one from Nixpkgs. + gzip -c ${torWrapper} > tor.gz + cp tor.gz modules/kmp.tor.binary.linuxx64/kmptor/linux/x64/tor.gz + find modules + ''; + + installPhase = '' + mkdir -p $out + cp manifest.txt $out/ + cp -r modules/ $out/ + ln -s ${openimajgrabber}/lib/OpenIMAJGrabber.so $out/modules/com.github.sarxos.webcam.capture/com/github/sarxos/webcam/ds/buildin/lib/linux_x64/OpenIMAJGrabber.so + ln -s ${hwi}/bin/hwi $out/modules/com.sparrowwallet.sparrow/native/linux/x64/hwi + ''; + }; +in +stdenv.mkDerivation rec { + inherit version src; + pname = "sparrow-unwrapped"; + nativeBuildInputs = [ makeWrapper copyDesktopItems ]; + + desktopItems = [ + (makeDesktopItem { + name = "sparrow-desktop"; + exec = "sparrow-desktop"; + icon = "sparrow-desktop"; + desktopName = "Sparrow Bitcoin Wallet"; + genericName = "Bitcoin Wallet"; + categories = [ "Finance" "Network" ]; + mimeTypes = [ "application/psbt" "application/bitcoin-transaction" "x-scheme-handler/bitcoin" "x-scheme-handler/auth47" "x-scheme-handler/lightning" ]; + startupWMClass = "Sparrow"; + }) + ]; + + sparrow-icons = stdenv.mkDerivation { + inherit version src; + pname = "sparrow-icons"; + nativeBuildInputs = [ imagemagick ]; + + installPhase = '' + for n in 16 24 32 48 64 96 128 256; do + size=$n"x"$n + mkdir -p $out/hicolor/$size/apps + convert lib/Sparrow.png -resize $size $out/hicolor/$size/apps/sparrow-desktop.png + done; + ''; + }; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin $out + ln -s ${sparrow-modules}/modules $out/lib + install -D -m 777 ${launcher} $out/bin/sparrow-desktop + substituteAllInPlace $out/bin/sparrow-desktop + substituteInPlace $out/bin/sparrow-desktop --subst-var-by jdkModules ${jdk-modules} + + mkdir -p $out/share/icons + ln -s ${sparrow-icons}/hicolor $out/share/icons + + mkdir -p $out/etc/udev/rules.d + cp ${hwi}/lib/python*/site-packages/hwilib/udev/*.rules $out/etc/udev/rules.d + + runHook postInstall + ''; + + passthru.updateScript = ./update.sh; + + meta = with lib; { + description = "A modern desktop Bitcoin wallet application supporting most hardware wallets and built on common standards such as PSBT, with an emphasis on transparency and usability."; + homepage = "https://sparrowwallet.com"; + sourceProvenance = with sourceTypes; [ + binaryBytecode + binaryNativeCode + ]; + license = licenses.asl20; + maintainers = with maintainers; [ emmanuelrosa _1000101 ]; + platforms = [ "x86_64-linux" ]; + mainProgram = "sparrow-desktop"; + }; +} diff --git a/nixpkgs/pkgs/applications/blockchains/sparrow/fhsenv.nix b/nixpkgs/pkgs/applications/blockchains/sparrow/fhsenv.nix new file mode 100644 index 000000000000..26bf9da0b85d --- /dev/null +++ b/nixpkgs/pkgs/applications/blockchains/sparrow/fhsenv.nix @@ -0,0 +1,30 @@ +{ lib +, buildFHSEnv +, sparrow-unwrapped +}: + +buildFHSEnv { + name = "sparrow-desktop"; + + runScript = "${sparrow-unwrapped}/bin/sparrow-desktop"; + + targetPkgs = pkgs: with pkgs; [ + sparrow-unwrapped + pcsclite + ]; + + multiPkgs = pkgs: with pkgs; [ + pcsclite + ]; + + extraInstallCommands = '' + mkdir -p $out/share + ln -s ${sparrow-unwrapped}/share/applications $out/share + ln -s ${sparrow-unwrapped}/share/icons $out/share + + mkdir -p $out/etc/udev + ln -s ${sparrow-unwrapped}/etc/udev/rules.d $out/etc/udev/rules.d + ''; + + meta = sparrow-unwrapped.meta; +} diff --git a/nixpkgs/pkgs/applications/blockchains/sparrow/openimajgrabber.nix b/nixpkgs/pkgs/applications/blockchains/sparrow/openimajgrabber.nix new file mode 100644 index 000000000000..0bf642d49d1c --- /dev/null +++ b/nixpkgs/pkgs/applications/blockchains/sparrow/openimajgrabber.nix @@ -0,0 +1,40 @@ +{ stdenv +, lib +, fetchFromGitHub +, libv4l +}: +stdenv.mkDerivation rec { + pname = "openimajgrabber"; + version = "1.3.10"; + + src = fetchFromGitHub { + owner = "openimaj"; + repo = "openimaj"; + rev = "openimaj-${version}"; + sha256 = "sha256-Y8707ovE7f6Fk3cJ+PtwvzNpopgH5vlF55m2Xm4hjYM="; + }; + + buildInputs = [ libv4l ]; + + # These build instructions come from build.sh + buildPhase = '' + pushd hardware/core-video-capture/src-native/linux + g++ -fPIC -g -c OpenIMAJGrabber.cpp + g++ -fPIC -g -c capture.cpp + g++ -shared -Wl,-soname,OpenIMAJGrabber.so -o OpenIMAJGrabber.so OpenIMAJGrabber.o capture.o -lv4l2 -lrt -lv4lconvert + popd + ''; + + installPhase = '' + mkdir -p $out/lib + cp hardware/core-video-capture/src-native/linux/OpenIMAJGrabber.so $out/lib + ''; + + meta = with lib; { + description = "A collection of libraries and tools for multimedia (images, text, video, audio, etc.) content analysis and content generation. This package only builds the OpenIMAJGrabber for Linux."; + homepage = "http://www.openimaj.org"; + license = licenses.bsd0; + maintainers = with maintainers; [ emmanuelrosa _1000101 ]; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/blockchains/sparrow/update.sh b/nixpkgs/pkgs/applications/blockchains/sparrow/update.sh new file mode 100755 index 000000000000..7a520b351aa4 --- /dev/null +++ b/nixpkgs/pkgs/applications/blockchains/sparrow/update.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p coreutils curl jq gnused gnupg common-updater-scripts + +set -eu -o pipefail + +version="$(curl -s https://api.github.com/repos/sparrowwallet/sparrow/releases| jq '.[] | {name} | limit(1;.[])' | sed 's/[\"v]//g' | head -n 1)" +depname="sparrow-$version-x86_64.tar.gz" +src_root="https://github.com/sparrowwallet/sparrow/releases/download/$version"; +src="$src_root/$depname"; +manifest="$src_root/sparrow-$version-manifest.txt" +signature="$src_root/sparrow-$version-manifest.txt.asc" +key="D4D0 D320 2FC0 6849 A257 B38D E946 1833 4C67 4B40" + +pushd $(mktemp -d --suffix=-sparrow-updater) +export GNUPGHOME=$PWD/gnupg +mkdir -m 700 -p "$GNUPGHOME" +curl -L -o "$depname" -- "$src" +curl -L -o manifest.txt -- "$manifest" +curl -L -o signature.asc -- "$signature" +gpg --batch --recv-keys "$key" +gpg --batch --verify signature.asc manifest.txt +sha256sum -c --ignore-missing manifest.txt +sha256=$(nix-prefetch-url --type sha256 "file://$PWD/$depname") +popd + +update-source-version sparrow-unwrapped "$version" "$sha256" |