nix-bitcoin/modules/clightning-plugins/feeadjuster.nix

79 lines
2.4 KiB
Nix
Raw Permalink Normal View History

2022-05-20 02:51:21 -07:00
{ config, lib, ... }:
with lib;
let
options.services.clightning.plugins.feeadjuster = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Enable feeaduster (clightning plugin).
This plugin auto-updates channel fees to keep channels balanced.
2022-07-14 14:45:25 -07:00
See here for all available options:
2022-05-20 02:51:21 -07:00
https://github.com/lightningd/plugins/blob/master/feeadjuster/feeadjuster.py
Extra options can be set via `services.clightning.extraConfig`.
'';
};
fuzz = mkOption {
type = types.bool;
default = true;
description = "Enable update threshold randomization and hysteresis.";
};
adjustOnForward = mkOption {
type = types.bool;
default = false;
description = "Automatically update fees on forward events.";
};
method = mkOption {
type = types.enum [ "soft" "default" "hard" ];
default = "default";
description = ''
Adjustment method to calculate channel fees.
`soft`: less difference when adjusting fees.
`hard`: greater difference when adjusting fees.
'';
};
adjustDaily = mkOption {
type = types.bool;
default = true;
description = "Automatically update fees daily.";
};
};
cfg = config.services.clightning.plugins.feeadjuster;
inherit (config.services) clightning;
in
{
inherit options;
config = mkIf (cfg.enable && clightning.enable) {
services.clightning.extraConfig = ''
plugin=${config.nix-bitcoin.pkgs.clightning-plugins.feeadjuster.path}
feeadjuster-adjustment-method="${cfg.method}"
'' + optionalString (!cfg.fuzz) ''
feeadjuster-deactivate-fuzz
'' + optionalString (!cfg.adjustOnForward) ''
feeadjuster-deactivate-fee-update
'';
systemd = mkIf cfg.adjustDaily {
services.clightning-feeadjuster = {
# Only run when clightning is running
requisite = [ "clightning.service" ];
after = [ "clightning.service" ];
serviceConfig = {
Type = "oneshot";
User = "clightning";
ExecStart = "${clightning.package}/bin/lightning-cli --lightning-dir ${clightning.dataDir} feeadjust";
};
unitConfig.JoinsNamespaceOf = [ "clightning.service" ];
startAt = [ "daily" ];
};
timers.clightning-feeadjuster.timerConfig = {
RandomizedDelaySec = "6h";
};
};
};
}