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