about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/blockchains/bitcoin.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/blockchains/bitcoin.nix')
-rw-r--r--nixpkgs/pkgs/applications/blockchains/bitcoin.nix98
1 files changed, 98 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/blockchains/bitcoin.nix b/nixpkgs/pkgs/applications/blockchains/bitcoin.nix
new file mode 100644
index 000000000000..7a4386d23866
--- /dev/null
+++ b/nixpkgs/pkgs/applications/blockchains/bitcoin.nix
@@ -0,0 +1,98 @@
+{ stdenv
+, fetchurl
+, pkgconfig
+, autoreconfHook
+, db48
+, boost
+, zeromq
+, hexdump
+, zlib
+, miniupnpc
+, qtbase ? null
+, qttools ? null
+, wrapQtAppsHook ? null
+, utillinux
+, python3
+, qrencode
+, libevent
+, withGui
+}:
+
+with stdenv.lib;
+let
+  version = "0.20.0";
+  majorMinorVersion = versions.majorMinor version;
+  desktop = fetchurl {
+    url = "https://raw.githubusercontent.com/bitcoin-core/packaging/${majorMinorVersion}/debian/bitcoin-qt.desktop";
+    sha256 = "0cpna0nxcd1dw3nnzli36nf9zj28d2g9jf5y0zl9j18lvanvniha";
+  };
+  pixmap = fetchurl {
+    url = "https://raw.githubusercontent.com/bitcoin/bitcoin/v${version}/share/pixmaps/bitcoin128.png";
+    sha256 = "08p7j7dg50jlj783kkgdw037klmx0spqjikaprmbkzgcb620r25d";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = if withGui then "bitcoin" else "bitcoind";
+  inherit version;
+
+  src = fetchurl {
+    urls = [
+      "https://bitcoincore.org/bin/bitcoin-core-${version}/bitcoin-${version}.tar.gz"
+      "https://bitcoin.org/bin/bitcoin-core-${version}/bitcoin-${version}.tar.gz"
+    ];
+    sha256 = "ec5a2358ee868d845115dc4fc3ed631ff063c57d5e0a713562d083c5c45efb28";
+  };
+
+  nativeBuildInputs =
+    [ pkgconfig autoreconfHook ]
+    ++ optional stdenv.isDarwin hexdump
+    ++ optional withGui wrapQtAppsHook;
+  buildInputs = [ db48 boost zlib zeromq miniupnpc libevent ]
+    ++ optionals stdenv.isLinux [ utillinux ]
+    ++ optionals withGui [ qtbase qttools qrencode ];
+
+  postInstall = optional withGui ''
+    install -Dm644 ${desktop} $out/share/applications/bitcoin-qt.desktop
+    install -Dm644 ${pixmap} $out/share/pixmaps/bitcoin128.png
+  '';
+
+  configureFlags = [
+    "--with-boost-libdir=${boost.out}/lib"
+    "--disable-bench"
+  ] ++ optionals (!doCheck) [
+    "--disable-tests"
+    "--disable-gui-tests"
+  ]
+  ++ optionals withGui [
+    "--with-gui=qt5"
+    "--with-qt-bindir=${qtbase.dev}/bin:${qttools.dev}/bin"
+  ];
+
+  checkInputs = [ python3 ];
+
+  doCheck = true;
+
+  checkFlags =
+    [ "LC_ALL=C.UTF-8" ]
+    # QT_PLUGIN_PATH needs to be set when executing QT, which is needed when testing Bitcoin's GUI.
+    # See also https://github.com/NixOS/nixpkgs/issues/24256
+    ++ optional withGui "QT_PLUGIN_PATH=${qtbase}/${qtbase.qtPluginPrefix}";
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Peer-to-peer electronic cash system";
+    longDescription = ''
+      Bitcoin is a free open source peer-to-peer electronic cash system that is
+      completely decentralized, without the need for a central server or trusted
+      parties. Users hold the crypto keys to their own money and transact directly
+      with each other, with the help of a P2P network to check for double-spending.
+    '';
+    homepage = "https://bitcoin.org/";
+    downloadPage = "https://bitcoincore.org/bin/bitcoin-core-${version}/";
+    changelog = "https://bitcoincore.org/en/releases/${version}/";
+    maintainers = with maintainers; [ roconnor AndersonTorres ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}