biome: 1.9.2 -> 1.9.3
[NixPkgs.git] / pkgs / applications / misc / electrum / ltc.nix
blobe0aaf139cd65e1d56b7f14dcd246f33f0f5be374
1 { lib
2 , stdenv
3 , fetchurl
4 , fetchFromGitHub
5 , wrapQtAppsHook
6 , python3
7 , zbar
8 , secp256k1
9 , enableQt ? true
10 , qtwayland
13 let
14   version = "4.2.2.1";
16   libsecp256k1_name =
17     if stdenv.hostPlatform.isLinux then "libsecp256k1.so.0"
18     else if stdenv.hostPlatform.isDarwin then "libsecp256k1.0.dylib"
19     else "libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}";
21   libzbar_name =
22     if stdenv.hostPlatform.isLinux then "libzbar.so.0"
23     else if stdenv.hostPlatform.isDarwin then "libzbar.0.dylib"
24     else "libzbar${stdenv.hostPlatform.extensions.sharedLibrary}";
26   # Not provided in official source releases, which are what upstream signs.
27   tests = fetchFromGitHub {
28     owner = "pooler";
29     repo = "electrum-ltc";
30     rev = version;
31     sha256 = "sha256-qu72LIV07pgHqvKv+Kcw9ZmNk6IBz+4/vdJELlT5tE4=";
33     postFetch = ''
34       mv $out ./all
35       mv ./all/electrum_ltc/tests $out
36     '';
37   };
41 python3.pkgs.buildPythonApplication {
42   pname = "electrum-ltc";
43   inherit version;
45   src = fetchurl {
46     url = "https://electrum-ltc.org/download/Electrum-LTC-${version}.tar.gz";
47     sha256 = "sha256-7F28cve+HD5JDK5igfkGD/NvTCfA33g+DmQJ5mwPM9Q=";
48   };
50   postUnpack = ''
51     # can't symlink, tests get confused
52     cp -ar ${tests} $sourceRoot/electrum_ltc/tests
53   '';
55   nativeBuildInputs = lib.optionals enableQt [ wrapQtAppsHook ];
57   propagatedBuildInputs = with python3.pkgs; [
58     aiohttp
59     aiohttp-socks
60     aiorpcx
61     attrs
62     bitstring
63     cryptography
64     dnspython
65     jsonrpclib-pelix
66     matplotlib
67     pbkdf2
68     protobuf
69     py-scrypt
70     pysocks
71     qrcode
72     requests
73     certifi
74     # plugins
75     btchip-python
76     ckcc-protocol
77     keepkey
78     trezor
79   ] ++ lib.optionals enableQt [
80     pyqt5
81     qdarkstyle
82   ];
84   patches = [
85     # electrum-ltc attempts to pin to aiorpcX < 0.23, but nixpkgs
86     # has moved to newer versions.
87     #
88     # electrum-ltc hasn't been updated in some time, so we replicate
89     # the patch from electrum (BTC) and alter it to be usable with
90     # electrum-ltc.
91     #
92     # Similar to the BTC patch, we need to overwrite the symlink
93     # at electrum_ltc/electrum-ltc with the patched run_electrum
94     # in postPatch.
95     ./ltc-aiorpcX-version-bump.patch
96   ];
98   postPatch = ''
99     # copy the patched `/run_electrum` over `/electrum/electrum`
100     # so the aiorpcx compatibility patch is used
101     cp run_electrum electrum_ltc/electrum-ltc
102   '';
104   preBuild = ''
105     sed -i 's,usr_share = .*,usr_share = "'$out'/share",g' setup.py
106     substituteInPlace ./electrum_ltc/ecc_fast.py \
107       --replace ${libsecp256k1_name} ${secp256k1}/lib/libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}
108   '' + (if enableQt then ''
109     substituteInPlace ./electrum_ltc/qrscanner.py \
110       --replace ${libzbar_name} ${zbar.lib}/lib/libzbar${stdenv.hostPlatform.extensions.sharedLibrary}
111   '' else ''
112     sed -i '/qdarkstyle/d' contrib/requirements/requirements.txt
113   '');
115   postInstall = lib.optionalString stdenv.hostPlatform.isLinux ''
116     # Despite setting usr_share above, these files are installed under
117     # $out/nix ...
118     mv $out/${python3.sitePackages}/nix/store"/"*/share $out
119     rm -rf $out/${python3.sitePackages}/nix
121     substituteInPlace $out/share/applications/electrum-ltc.desktop \
122       --replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum-ltc %u"' \
123                 "Exec=$out/bin/electrum-ltc %u" \
124       --replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum-ltc --testnet %u"' \
125                 "Exec=$out/bin/electrum-ltc --testnet %u"
127   '';
129   postFixup = lib.optionalString enableQt ''
130     wrapQtApp $out/bin/electrum-ltc
131   '';
133   nativeCheckInputs = with python3.pkgs; [ pytestCheckHook pyaes pycryptodomex ];
134   buildInputs = lib.optional stdenv.hostPlatform.isLinux qtwayland;
136   pytestFlagsArray = [ "electrum_ltc/tests" ];
138   disabledTests = [
139     "test_loop"  # test tries to bind 127.0.0.1 causing permission error
140     "test_is_ip_address"  # fails spuriously https://github.com/spesmilo/electrum/issues/7307
141     # electrum_ltc.lnutil.RemoteMisbehaving: received commitment_signed without pending changes
142     "test_reestablish_replay_messages_rev_then_sig"
143     "test_reestablish_replay_messages_sig_then_rev"
144     # stuck on hydra
145     "test_reestablish_with_old_state"
146   ];
148   postCheck = ''
149     $out/bin/electrum-ltc help >/dev/null
150   '';
152   meta = with lib; {
153     description = "Lightweight Litecoin Client";
154     mainProgram = "electrum-ltc";
155     longDescription = ''
156       Electrum-LTC is a simple, but powerful Litecoin wallet. A unique secret
157       phrase (or “seed”) leaves intruders stranded and your peace of mind
158       intact. Keep it on paper, or in your head... and never worry about losing
159       your litecoins to theft or hardware failure.
160     '';
161     homepage = "https://electrum-ltc.org/";
162     license = licenses.mit;
163     platforms = platforms.all;
164     maintainers = with maintainers; [ bbjubjub ];
165   };