From 3c33750722a49bdae226d355a9576953e0997fdd Mon Sep 17 00:00:00 2001 From: Bryan Ramos Date: Thu, 12 Mar 2026 22:19:41 -0400 Subject: [PATCH] electrs --- src/system/machines/server/system.nix | 5 +- .../modules/bitcoin/config/bitcoin.conf | 3 +- src/system/modules/bitcoin/default.nix | 5 ++ .../modules/electrum/config/config.toml | 14 +++ .../bitcoin/modules/electrum/default.nix | 89 +++++++++++++++++++ 5 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 src/system/modules/bitcoin/modules/electrum/config/config.toml create mode 100644 src/system/modules/bitcoin/modules/electrum/default.nix diff --git a/src/system/machines/server/system.nix b/src/system/machines/server/system.nix index 155098a..7d2652b 100644 --- a/src/system/machines/server/system.nix +++ b/src/system/machines/server/system.nix @@ -9,7 +9,10 @@ forgejo.enable = true; frigate.enable = false; immich.enable = true; - bitcoin.enable = true; + bitcoin = { + enable = true; + electrum.enable = true; + }; backup = { enable = true; diff --git a/src/system/modules/bitcoin/config/bitcoin.conf b/src/system/modules/bitcoin/config/bitcoin.conf index 72ca181..756bfc1 100644 --- a/src/system/modules/bitcoin/config/bitcoin.conf +++ b/src/system/modules/bitcoin/config/bitcoin.conf @@ -1,6 +1,7 @@ server=1 -rpcauth=btc:a5070cab96db882e8f63cb131ce3bbfa$20c7fd4653597b0c4ffc2c47b2d5d6751a6725ff644dd0d0ffcb9bebff96b913 +rpccookiefile=/var/lib/bitcoin/.cookie +rpccookieperms=group rpcbind=127.0.0.1 rpcallowip=127.0.0.1 diff --git a/src/system/modules/bitcoin/default.nix b/src/system/modules/bitcoin/default.nix index 020045c..060f07b 100644 --- a/src/system/modules/bitcoin/default.nix +++ b/src/system/modules/bitcoin/default.nix @@ -61,6 +61,11 @@ in }; }; + # Make data dir group-accessible so electrs/clightning can read cookie + systemd.tmpfiles.rules = [ + "d ${home} 0750 btc bitcoin -" + ]; + systemd.services.bitcoind-mainnet = { wants = [ "tor.service" ]; after = [ "tor.service" ]; diff --git a/src/system/modules/bitcoin/modules/electrum/config/config.toml b/src/system/modules/bitcoin/modules/electrum/config/config.toml new file mode 100644 index 0000000..00961c5 --- /dev/null +++ b/src/system/modules/bitcoin/modules/electrum/config/config.toml @@ -0,0 +1,14 @@ +network = "bitcoin" + +electrum_rpc_addr = "127.0.0.1:50001" + +cookie_file = "/var/lib/bitcoin/.cookie" + +db_dir = "/var/lib/electrs" + +log_filters = "INFO" +timestamp = true + +daemon_rpc_addr = "127.0.0.1:8332" +daemon_p2p_addr = "127.0.0.1:8333" +daemon_dir = "/var/lib/bitcoin" diff --git a/src/system/modules/bitcoin/modules/electrum/default.nix b/src/system/modules/bitcoin/modules/electrum/default.nix new file mode 100644 index 0000000..8f1220a --- /dev/null +++ b/src/system/modules/bitcoin/modules/electrum/default.nix @@ -0,0 +1,89 @@ +{ lib, pkgs, config, ... }: + +with lib; +let + cfg = config.modules.system.bitcoin.electrum; + home = "/var/lib/electrs"; + + btc = config.modules.system.bitcoin; + + electrsConfig = pkgs.writeTextFile { + name = "config.toml"; + text = builtins.readFile ./config/config.toml; + }; + +in +{ options.modules.system.bitcoin.electrum = { enable = mkEnableOption "Electrs Server"; }; + config = mkIf (cfg.enable && btc.enable) { + #TODO: Fix the failing overlay due to `cargoHash/cargoSha256` + #nixpkgs.overlays = [ + # (final: prev: { + # electrs = prev.electrs.overrideAttrs (old: rec { + # pname = "electrs"; + # version = "0.10.8"; + # src = pkgs.fetchFromGitHub { + # owner = "romanz"; + # repo = pname; + # rev = "v${version}"; + # hash = "sha256-L26jzAn8vwnw9kFd6ciyYS/OLEFTbN8doNKy3P8qKRE="; + # }; + # #cargoDeps = old.cargoDeps.overrideAttrs (const { + # # name = "electrs-${version}.tar.gz"; + # # inherit src; + # # sha256 = ""; + # #}); + # cargoHash = "sha256-lBRcq73ri0HR3duo6Z8PdSjnC8okqmG5yWeHxH/LmcU="; + # }); + # }) + #]; + + environment.systemPackages = with pkgs; [ + electrs + ]; + + users = { + users = { + "electrs" = { + inherit home; + description = "Electrs system user"; + isSystemUser = true; + group = "bitcoin"; + createHome = true; + }; + }; + groups = { + "bitcoin" = { + members = mkAfter [ + "electrs" + ]; + }; + }; + }; + + + systemd.services.electrs = { + description = "Electrs Bitcoin Indexer"; + wantedBy = [ "multi-user.target" ]; + + script = "${pkgs.electrs}/bin/electrs"; + scriptArgs = "--conf=${electrsConfig}"; + + wants = [ "bitcoind-mainnet.service" ]; + after = [ + "bitcoind-mainnet.service" + "network.target" + ]; + + serviceConfig = { + User = "electrs"; + Group = "bitcoin"; + + Type = "simple"; + KillMode = "process"; + TimeoutSec = 60; + Restart = "always"; + RestartSec = 60; + }; + }; + }; +}