diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/misc/electrum/default.nix')
-rw-r--r-- | nixpkgs/pkgs/applications/misc/electrum/default.nix | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/misc/electrum/default.nix b/nixpkgs/pkgs/applications/misc/electrum/default.nix new file mode 100644 index 000000000000..ac963c890dcf --- /dev/null +++ b/nixpkgs/pkgs/applications/misc/electrum/default.nix @@ -0,0 +1,155 @@ +{ stdenv +, fetchurl +, fetchFromGitHub +, wrapQtAppsHook +, python3 +, zbar +, secp256k1 +, enableQt ? true +# for updater.nix +, writeScript +, common-updater-scripts +, bash +, coreutils +, curl +, gnugrep +, gnupg +, gnused +, nix +}: + +let + version = "4.0.9"; + + libsecp256k1_name = + if stdenv.isLinux then "libsecp256k1.so.0" + else if stdenv.isDarwin then "libsecp256k1.0.dylib" + else "libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}"; + + libzbar_name = + if stdenv.isLinux then "libzbar.so.0" + else "libzbar${stdenv.hostPlatform.extensions.sharedLibrary}"; + + # Not provided in official source releases, which are what upstream signs. + tests = fetchFromGitHub { + owner = "spesmilo"; + repo = "electrum"; + rev = version; + sha256 = "0cmdyfabllw4wnpqpdxp3l6hjnm0cvkwxn0z8ph4x54sf4zq9iz3"; + + extraPostFetch = '' + mv $out ./all + mv ./all/electrum/tests $out + ''; + }; +in + +python3.pkgs.buildPythonApplication { + pname = "electrum"; + inherit version; + + src = fetchurl { + url = "https://download.electrum.org/${version}/Electrum-${version}.tar.gz"; + sha256 = "1fvjiagi78f32nxgr2rx8jas8hxfvpp1c8fpfcalvykmlhdc2gva"; + }; + + postUnpack = '' + # can't symlink, tests get confused + cp -ar ${tests} $sourceRoot/electrum/tests + ''; + + nativeBuildInputs = stdenv.lib.optionals enableQt [ wrapQtAppsHook ]; + + propagatedBuildInputs = with python3.pkgs; [ + aiohttp + aiohttp-socks + aiorpcx + attrs + bitstring + cryptography + dnspython + jsonrpclib-pelix + matplotlib + pbkdf2 + protobuf + pysocks + qrcode + requests + tlslite-ng + # plugins + ckcc-protocol + keepkey + trezor + btchip + ] ++ stdenv.lib.optionals enableQt [ pyqt5 qdarkstyle ]; + + preBuild = '' + sed -i 's,usr_share = .*,usr_share = "'$out'/share",g' setup.py + substituteInPlace ./electrum/ecc_fast.py \ + --replace ${libsecp256k1_name} ${secp256k1}/lib/libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary} + '' + (if enableQt then '' + substituteInPlace ./electrum/qrscanner.py \ + --replace ${libzbar_name} ${zbar.lib}/lib/libzbar${stdenv.hostPlatform.extensions.sharedLibrary} + '' else '' + sed -i '/qdarkstyle/d' contrib/requirements/requirements.txt + ''); + + postInstall = stdenv.lib.optionalString stdenv.isLinux '' + # Despite setting usr_share above, these files are installed under + # $out/nix ... + mv $out/${python3.sitePackages}/nix/store"/"*/share $out + rm -rf $out/${python3.sitePackages}/nix + + substituteInPlace $out/share/applications/electrum.desktop \ + --replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum %u"' \ + "Exec=$out/bin/electrum %u" \ + --replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum --testnet %u"' \ + "Exec=$out/bin/electrum --testnet %u" + + ''; + + postFixup = stdenv.lib.optionalString enableQt '' + wrapQtApp $out/bin/electrum + ''; + + checkInputs = with python3.pkgs; [ pytestCheckHook pycryptodomex ]; + + pytestFlagsArray = [ "electrum/tests" ]; + + disabledTests = [ + "test_loop" # test tries to bind 127.0.0.1 causing permission error + ]; + + postCheck = '' + $out/bin/electrum help >/dev/null + ''; + + passthru.updateScript = import ./update.nix { + inherit (stdenv) lib; + inherit + writeScript + common-updater-scripts + bash + coreutils + curl + gnupg + gnugrep + gnused + nix + ; + }; + + meta = with stdenv.lib; { + description = "A lightweight Bitcoin wallet"; + longDescription = '' + An easy-to-use Bitcoin 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://electrum.org/"; + license = licenses.mit; + platforms = platforms.all; + maintainers = with maintainers; [ ehmry joachifm np prusnak ]; + }; +} |