nixpkgs/pkgs/applications/misc/electrum/grs.nix
Anders Rytter Hansen 495b938c3b electrum: add QtWayland and certifi
QtWayland is added so that Electrum will work natively on Wayland. If you try to launch it on Wayland without QtWayland, you will get an error saying that QT couldn't find a module for Wayland.

Certifi is added, because it's specified as a requirement for Electrum in their requirements.txt file here: https://github.com/spesmilo/electrum/blob/4.4.6/contrib/requirements/requirements.txt

Co-Authored-By: Jörg Thalheim <Mic92@users.noreply.github.com>
2024-01-16 16:17:48 +01:00

120 lines
3.3 KiB
Nix

{ lib
, stdenv
, fetchFromGitHub
, wrapQtAppsHook
, python3
, zbar
, secp256k1
, enableQt ? true
, qtwayland
}:
let
version = "4.4.4";
libsecp256k1_name =
if stdenv.isLinux then "libsecp256k1.so.{v}"
else if stdenv.isDarwin then "libsecp256k1.{v}.dylib"
else "libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}";
libzbar_name =
if stdenv.isLinux then "libzbar.so.0"
else if stdenv.isDarwin then "libzbar.0.dylib"
else "libzbar${stdenv.hostPlatform.extensions.sharedLibrary}";
in
python3.pkgs.buildPythonApplication {
pname = "electrum-grs";
inherit version;
src = fetchFromGitHub {
owner = "Groestlcoin";
repo = "electrum-grs";
rev = "refs/tags/v${version}";
sha256 = "0fl01qdvb1z6l6kwipj1lj0qmjk3mzw25wv7yh5j1hh1f5lng0s8";
};
nativeBuildInputs = lib.optionals enableQt [ wrapQtAppsHook ];
buildInputs = lib.optional stdenv.isLinux qtwayland;
propagatedBuildInputs = with python3.pkgs; [
aiohttp
aiohttp-socks
aiorpcx
attrs
bitstring
cryptography
dnspython
groestlcoin-hash
jsonrpclib-pelix
matplotlib
pbkdf2
protobuf
pysocks
qrcode
requests
tlslite-ng
certifi
# plugins
btchip-python
ledger-bitcoin
ckcc-protocol
keepkey
trezor
] ++ lib.optionals enableQt [
pyqt5
qdarkstyle
];
postPatch = ''
# make compatible with protobuf4 by easing dependencies ...
substituteInPlace ./contrib/requirements/requirements.txt \
--replace "protobuf>=3.20,<4" "protobuf>=3.20"
# ... and regenerating the paymentrequest_pb2.py file
protoc --python_out=. electrum_grs/paymentrequest.proto
substituteInPlace ./electrum_grs/ecc_fast.py \
--replace ${libsecp256k1_name} ${secp256k1}/lib/libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}
'' + (if enableQt then ''
substituteInPlace ./electrum_grs/qrscanner.py \
--replace ${libzbar_name} ${zbar.lib}/lib/libzbar${stdenv.hostPlatform.extensions.sharedLibrary}
'' else ''
sed -i '/qdarkstyle/d' contrib/requirements/requirements.txt
'');
postInstall = lib.optionalString stdenv.isLinux ''
substituteInPlace $out/share/applications/electrum-grs.desktop \
--replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum-grs %u"' \
"Exec=$out/bin/electrum-grs %u" \
--replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum-grs --testnet %u"' \
"Exec=$out/bin/electrum-grs --testnet %u"
'';
postFixup = lib.optionalString enableQt ''
wrapQtApp $out/bin/electrum-grs
'';
# the tests are currently broken
doCheck = false;
postCheck = ''
$out/bin/electrum-grs help >/dev/null
'';
meta = with lib; {
description = "Lightweight Groestlcoin wallet";
longDescription = ''
An easy-to-use Groestlcoin client featuring wallets generated from
mnemonic seeds (in addition to other, more advanced, wallet options)
and the ability to perform transactions without downloading a copy
of the blockchain.
'';
homepage = "https://groestlcoin.org/";
downloadPage = "https://github.com/Groestlcoin/electrum-grs/releases/tag/v{version}";
license = licenses.mit;
platforms = platforms.all;
maintainers = with maintainers; [ gruve-p ];
};
}