diff --git a/.envrc b/.envrc new file mode 100644 index 000000000..6b6394b2f --- /dev/null +++ b/.envrc @@ -0,0 +1,8 @@ +#!/bin/bash + +if ! has nix_direnv_version || ! nix_direnv_version 2.2.1; then + source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.2.1/direnvrc" "sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs=" +fi + +watch_file rust-toolchain.toml +use flake diff --git a/.gitignore b/.gitignore index 8ed8a0203..9e717b212 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ target *~ *.pyc result +.direnv diff --git a/flake.nix b/flake.nix index 2199c7625..d23f3735f 100644 --- a/flake.nix +++ b/flake.nix @@ -20,7 +20,10 @@ flake-utils.lib.eachDefaultSystem (system: let - overlays = [ (import rust-overlay) ]; + overlays = [ + (import rust-overlay) + (import ./rocksdb-overlay.nix) + ]; pkgs = import nixpkgs { inherit system overlays; }; @@ -28,18 +31,26 @@ craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain; - src = craneLib.cleanCargoSource ./.; + src = craneLib.cleanCargoSource ./.; nativeBuildInputs = with pkgs; [ rustToolchain clang ]; # required only at build time buildInputs = with pkgs; [ ]; # also required at runtime - commonArgs = { - inherit src buildInputs nativeBuildInputs; + envVars = { LIBCLANG_PATH = "${pkgs.libclang.lib}/lib"; ELEMENTSD_SKIP_DOWNLOAD = true; BITCOIND_SKIP_DOWNLOAD = true; ELECTRUMD_SKIP_DOWNLOAD = true; + + # link rocksdb dynamically + ROCKSDB_INCLUDE_DIR = "${pkgs.rocksdb}/include"; + ROCKSDB_LIB_DIR = "${pkgs.rocksdb}/lib"; }; + + commonArgs = { + inherit src buildInputs nativeBuildInputs; + } // envVars; + cargoArtifacts = craneLib.buildDepsOnly commonArgs; bin = craneLib.buildPackage (commonArgs // { inherit cargoArtifacts; @@ -55,7 +66,6 @@ doCheck = false; }); - in with pkgs; { @@ -76,11 +86,9 @@ program = "${bin}/bin/electrs"; }; - - devShells.default = mkShell { + devShells.default = mkShell (envVars // { inputsFrom = [ bin ]; - LIBCLANG_PATH = "${pkgs.libclang.lib}/lib"; # for rocksdb - }; + }); } ); } diff --git a/rocksdb-overlay.nix b/rocksdb-overlay.nix new file mode 100644 index 000000000..722ba7a7f --- /dev/null +++ b/rocksdb-overlay.nix @@ -0,0 +1,13 @@ +final: prev: { + + rocksdb = prev.rocksdb.overrideAttrs (oldAttrs: rec { + version = "8.1.1"; + + src = final.fetchFromGitHub { + owner = "facebook"; + repo = oldAttrs.pname; + rev = "v${version}"; + hash = "sha256-79hRtc5QSWLLyjRGCmuYZSoIc9IcIsnl8UCinz2sVw4="; + }; + }); +} diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 7897a24d1..64aead883 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,10 @@ [toolchain] channel = "1.75.0" +components = [ + "cargo", + "clippy", + "rust-src", + "rust-std", + "rustc", + "rustfmt" +] diff --git a/tests/common.rs b/tests/common.rs index 78932aa50..c85ebf7d9 100644 --- a/tests/common.rs +++ b/tests/common.rs @@ -57,7 +57,7 @@ impl TestRunner { } // Setup node - let node = NodeD::with_conf(noded::downloaded_exe_path().unwrap(), &node_conf).unwrap(); + let node = NodeD::with_conf(noded::exe_path().unwrap(), &node_conf).unwrap(); #[cfg(not(feature = "liquid"))] let (node_client, params) = (&node.client, &node.params); diff --git a/tests/electrum.rs b/tests/electrum.rs index d35d91eb3..504d16ca8 100644 --- a/tests/electrum.rs +++ b/tests/electrum.rs @@ -23,8 +23,7 @@ fn test_electrum() -> Result<()> { let server_arg = format!("{}:t", electrum_addr.to_string()); electrum_wallet_conf.args = vec!["-v", "--server", &server_arg]; electrum_wallet_conf.view_stdout = true; - let electrum_wallet = - ElectrumD::with_conf(electrumd::downloaded_exe_path()?, &electrum_wallet_conf)?; + let electrum_wallet = ElectrumD::with_conf(electrumd::exe_path()?, &electrum_wallet_conf)?; let notify_wallet = || { electrum_server.notify();