about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/misc/electrum/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/misc/electrum/default.nix')
-rw-r--r--nixpkgs/pkgs/applications/misc/electrum/default.nix155
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 ];
+  };
+}