diff --git a/src/system/machines/server/system.nix b/src/system/machines/server/system.nix index 3f51b82..b5f0085 100644 --- a/src/system/machines/server/system.nix +++ b/src/system/machines/server/system.nix @@ -11,6 +11,10 @@ bitcoin = { enable = true; electrum.enable = true; + clightning = { + enable = true; + rest.enable = true; + }; }; }; }; diff --git a/src/system/machines/wsl/modules/home-manager/default.nix b/src/system/machines/wsl/modules/home-manager/default.nix index 86de83f..f31f0ea 100644 --- a/src/system/machines/wsl/modules/home-manager/default.nix +++ b/src/system/machines/wsl/modules/home-manager/default.nix @@ -1,5 +1,9 @@ { imports = [ +<<<<<<<< HEAD:src/system/machines/wsl/modules/home-manager/default.nix ./home.nix +======== + ./c-lightning-REST +>>>>>>>> lightning:src/system/modules/bitcoin/modules/clightning/plugins/default.nix ]; } diff --git a/src/system/modules/bitcoin/modules/clightning/config/lightning.conf b/src/system/modules/bitcoin/modules/clightning/config/lightning.conf new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/src/system/modules/bitcoin/modules/clightning/config/lightning.conf @@ -0,0 +1 @@ +test diff --git a/src/system/modules/bitcoin/modules/clightning/default.nix b/src/system/modules/bitcoin/modules/clightning/default.nix new file mode 100644 index 0000000..347d586 --- /dev/null +++ b/src/system/modules/bitcoin/modules/clightning/default.nix @@ -0,0 +1,92 @@ +{ lib, pkgs, config, ... }: + +with lib; +let + cfg = config.modules.system.bitcoin.clightning; + btc = config.modules.system.bitcoin; + + clnConfig = pkgs.writeTextFile { + name = "lightning.conf"; + text = builtins.readFile ./config/lightning.conf; + }; + +in +{ options.modules.system.bitcoin.clightning = { enable = mkEnableOption "Core Lightning Server"; }; + imports = [ ./plugins ]; + config = mkIf (cfg.enable && btc.enable) { + #nixpkgs.overlays = [ + # (final: prev: { + # clightning = prev.electrs.overrideAttrs (old: rec { + # version = "24.08"; + # src = pkgs.fetchFromGitHub { + # owner = "ElementsProject"; + # repo = "lightning"; + # rev = "82f4ad68e34a2428c556e63fc2632d48a914968c"; + # hash = "sha256-MWU75e55Zt/P4aaIuMte7iRcrFGMw0P81b8VNHQBe2g"; + # }; + # cargoDeps = old.cargoDeps.overrideAttrs (lib.const { + # name = "lightning-vendor.tar.gz"; + # inherit src; + # outputHash = "sha256-MWU75e55Zt/P4aaIuMte7iRcrFGMw0P81b8VNHQBe2g="; + # }); + # }); + # }) + #]; + + environment.systemPackages = with pkgs; [ + clightning + ]; + + users = { + users = { + "clightning" = { + home = "/var/lib/clightning"; + description = "Core Lightning system user"; + isSystemUser = true; + group = "bitcoin"; + createHome = true; + }; + }; + groups = { + "bitcoin" = { + members = mkAfter [ + "clightning" + ]; + }; + }; + }; + + programs.bash.shellAliases = { + cln = "lightningd"; + }; + + systemd.services.lightningd = { + description = "Core Lightning Daemon"; + + script = "${pkgs.clightning}/bin/lightningd"; + scriptArgs = '' + --conf=${clnConfig} + ''; + + after = [ + "bitcoind-btc.service" + ]; + + serviceConfig = { + + User = "clightning"; + Group = "bitcoin"; + + Type = "simple"; + KillMode = "process"; + TimeoutSec = 60; + Restart = "always"; + RestartSec = 60; + }; + requisite = [ + "bitcoind-btc.service" + "network.target" + ]; + }; + }; +} diff --git a/src/system/modules/bitcoin/modules/clightning/plugins/c-lightning-REST/default.nix b/src/system/modules/bitcoin/modules/clightning/plugins/c-lightning-REST/default.nix new file mode 100644 index 0000000..3c756a5 --- /dev/null +++ b/src/system/modules/bitcoin/modules/clightning/plugins/c-lightning-REST/default.nix @@ -0,0 +1,35 @@ +{ lib, pkgs, config, ... }: + +with lib; +let + cfg = config.modules.system.bitcoin.clightning.rest; + cln = config.modules.system.bitcoin.clightning; + +in +{ options.modules.system.bitcoin.clightning.rest = { enable = mkEnableOption "C-Lightning REST API Server"; }; + config = mkIf (cfg.enable && cln.enable) { + nixpkgs.overlays = [ + (final: prev: { + clightning-REST = prev.buildNpmPackage rec { + pname = "c-lightning-rest"; + version = "0.10.7"; + src = prev.fetchFromGitHub { + owner = "Ride-The-Lightning"; + repo = "c-lightning-REST"; + rev = "v${version}"; + hash = "sha256-Z3bLH/nqhO2IPE1N4TxYhEDh2wHR0nT801kztfYoj+s="; + }; + + npmDepsHash = "sha256-svt5hjhTriGhehxC36yGwrqcjax/9UqqVzxEhHnoM0M="; + dontNpmBuild = true; + + meta = with lib; { + description = "REST APIs for Core Lightning written with node.js "; + homepage = "https://github.com/Ride-The-Lightning/c-lightning-REST"; + license = licenses.mit; + }; + }; + }) + ]; + }; +} diff --git a/src/system/modules/bitcoin/modules/electrum/default.nix b/src/system/modules/bitcoin/modules/electrum/default.nix index 9b210ce..3f4c2af 100644 --- a/src/system/modules/bitcoin/modules/electrum/default.nix +++ b/src/system/modules/bitcoin/modules/electrum/default.nix @@ -3,8 +3,6 @@ with lib; let cfg = config.modules.system.bitcoin.electrum; - home = "/var/lib/electrs"; - btc = config.modules.system.bitcoin; electrsConfig = pkgs.writeTextFile { @@ -15,27 +13,24 @@ let 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="; - # }); - # }) - #]; + nixpkgs.overlays = [ + (final: prev: { + electrs = prev.electrs.overrideAttrs (old: rec { + version = "0.10.6"; + src = pkgs.fetchFromGitHub { + owner = "romanz"; + repo = "electrs"; + rev = "v${version}"; + hash = "sha256-yp9fKD7zH9Ne2+WQUupaxvUx39RWE8RdY4U6lHuDGSc="; + }; + cargoDeps = old.cargoDeps.overrideAttrs (lib.const { + name = "electrs-vendor.tar.gz"; + inherit src; + outputHash = "sha256-qQKAQHOAeYWQ5YVtx12hIAjNA7Aj1MW1m+WimlBWPv0="; + }); + }); + }) + ]; environment.systemPackages = with pkgs; [ electrs @@ -44,7 +39,7 @@ in users = { users = { "electrs" = { - inherit home; + home = "/var/lib/electrs"; description = "Electrs system user"; isSystemUser = true; group = "bitcoin"; diff --git a/src/user/default.nix b/src/user/default.nix index 42e006c..3c1ebbb 100644 --- a/src/user/default.nix +++ b/src/user/default.nix @@ -8,7 +8,6 @@ let builtins.pathExists path && builtins.readFileType path == "directory" && builtins.baseNameOf path != "config"; - isModule = file: file == "default.nix"; isNix = file: builtins.match ".*\\.nix" file != null && file != "default.nix";