Merge fort-nix/nix-bitcoin#577: Upgrade to NixOS 22.11
4b5b4eac58
examples/deploy-container: fix `sudo` env propagation (Erik Arvstedt)8d476cfeaf
nix-bitcoin/runAsUserCmd: remove workaround (Erik Arvstedt)00cceca861
joinmarket: fix Python packages (Erik Arvstedt)e4b8e14d3a
clightning: fix Python packages (Erik Arvstedt)d1ef2a6e1e
pythonPackages: improve layout (Erik Arvstedt)74c8593407
pythonPackages: add indentation (Erik Arvstedt)109dccca27
treewide: use `mdDoc` for descriptions (Erik Arvstedt)a9c1995ed9
treewide: rename maintainer `earvstedt` -> `erikarvstedt` (Erik Arvstedt)9e456ea3a9
shellcheck-services.nix: update to NixOS 22.11 (Erik Arvstedt)77d58162e7
test: update to NixOS 22.11 (Erik Arvstedt)142cbcfb37
flake: remove 32-bit systems (Erik Arvstedt)c9b1e59f20
update to NixOS 22.11 (Erik Arvstedt)62515a5696
helper/update-flake: support updating NixOS versions (Erik Arvstedt) Pull request description: ACKs for top commit: jonasnick: ACK4b5b4eac58
Tree-SHA512: b6ff443c4c6721dee9e6bf8f068d72c819851d54cb52d3fec64475cd884825063c28a87b2e9d1645617b7d0e7c1d52ee1ccd898f833c720c25f1b07add938cd5
This commit is contained in:
commit
da612fe84f
@ -9,7 +9,7 @@ task:
|
|||||||
|
|
||||||
container:
|
container:
|
||||||
# Defined in https://github.com/nix-community/docker-nixpkgs
|
# Defined in https://github.com/nix-community/docker-nixpkgs
|
||||||
image: nixpkgs/nix-flakes:nixos-22.05
|
image: nixpkgs/nix-flakes:nixos-22.11
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
- name: modules_test
|
- name: modules_test
|
||||||
|
@ -287,7 +287,7 @@
|
|||||||
# this value at the release version of the first install of this system.
|
# this value at the release version of the first install of this system.
|
||||||
# Before changing this value read the documentation for this option
|
# Before changing this value read the documentation for this option
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
system.stateVersion = "22.05"; # Did you read the comment?
|
system.stateVersion = "22.11"; # Did you read the comment?
|
||||||
|
|
||||||
# The nix-bitcoin release version that your config is compatible with.
|
# The nix-bitcoin release version that your config is compatible with.
|
||||||
# When upgrading to a backwards-incompatible release, nix-bitcoin will display an
|
# When upgrading to a backwards-incompatible release, nix-bitcoin will display an
|
||||||
|
@ -1,17 +1,11 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
if [[ ! -v NIX_BITCOIN_EXAMPLES_DIR ]]; then
|
|
||||||
echo "Running script in nix shell env..."
|
|
||||||
cd "${BASH_SOURCE[0]%/*}"
|
|
||||||
exec nix-shell --run "./${BASH_SOURCE[0]##*/} $*"
|
|
||||||
else
|
|
||||||
cd "$NIX_BITCOIN_EXAMPLES_DIR"
|
|
||||||
fi
|
|
||||||
|
|
||||||
tmpDir=$(mktemp -d /tmp/nix-bitcoin-minimal-container.XXX)
|
tmpDir=$(mktemp -d /tmp/nix-bitcoin-minimal-container.XXX)
|
||||||
trap 'rm -rf $tmpDir' EXIT
|
trap 'rm -rf $tmpDir' EXIT
|
||||||
|
|
||||||
|
cd "${BASH_SOURCE[0]%/*}"
|
||||||
|
|
||||||
# Modify importable-configuration.nix to use the local <nix-bitcoin>
|
# Modify importable-configuration.nix to use the local <nix-bitcoin>
|
||||||
# source instead of fetchTarball
|
# source instead of fetchTarball
|
||||||
<importable-configuration.nix sed '
|
<importable-configuration.nix sed '
|
||||||
@ -31,4 +25,4 @@ cat > "$tmpDir/configuration.nix" <<EOF
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
"${BASH_SOURCE[0]%/*}/deploy-container.sh" "$tmpDir/configuration.nix" "$@"
|
./deploy-container.sh "$tmpDir/configuration.nix" "$@"
|
||||||
|
@ -8,23 +8,21 @@ set -euo pipefail
|
|||||||
# Run with option `--interactive` or `-i` to start a shell for interacting with
|
# Run with option `--interactive` or `-i` to start a shell for interacting with
|
||||||
# the node.
|
# the node.
|
||||||
|
|
||||||
if [[ ! -v NIX_BITCOIN_EXAMPLES_DIR ]]; then
|
if [[ $EUID != 0 ]]; then
|
||||||
echo "Running script in nix shell env..."
|
# NixOS containers require root permissions
|
||||||
cd "${BASH_SOURCE[0]%/*}"
|
exec sudo "${BASH_SOURCE[0]}" "$@"
|
||||||
exec nix-shell --run "./${BASH_SOURCE[0]##*/} $*"
|
|
||||||
else
|
|
||||||
cd "$NIX_BITCOIN_EXAMPLES_DIR"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $(sysctl -n net.ipv4.ip_forward || sudo sysctl -n net.ipv4.ip_forward) != 1 ]]; then
|
if [[ $(sysctl -n net.ipv4.ip_forward) != 1 ]]; then
|
||||||
echo "Error: IP forwarding (net.ipv4.ip_forward) is not enabled."
|
echo "Error: IP forwarding (net.ipv4.ip_forward) is not enabled."
|
||||||
echo "Needed for container WAN access."
|
echo "Needed for container WAN access."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $EUID != 0 ]]; then
|
if [[ ! -v DEPLOY_CONTAINER_NIX_SHELL ]]; then
|
||||||
# NixOS containers require root permissions
|
echo "Running script in nix shell env..."
|
||||||
exec sudo "PATH=$PATH" "NIX_PATH=$NIX_PATH" "NIX_BITCOIN_EXAMPLES_DIR=$NIX_BITCOIN_EXAMPLES_DIR" "${BASH_SOURCE[0]}" "$@"
|
cd "${BASH_SOURCE[0]%/*}"
|
||||||
|
DEPLOY_CONTAINER_NIX_SHELL=1 exec nix-shell --run "./${BASH_SOURCE[0]##*/} $*"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
interactive=
|
interactive=
|
||||||
|
14
flake.lock
14
flake.lock
@ -40,27 +40,27 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1670700605,
|
"lastModified": 1671040593,
|
||||||
"narHash": "sha256-5dlpATkcyITpdtMflhltuD+A3RNpsVI1Mb+dtKkll6Y=",
|
"narHash": "sha256-W5aZNwYBjaEaLifDWGEfecvnCiDkXjI26rHgidSftUM=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "7b9eeb856cbf976482fa8d1cb295ea03fb3e1277",
|
"rev": "170e39462b516bd1475ce9184f7bb93106d27c59",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"ref": "nixos-22.05",
|
"ref": "nixos-22.11",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-unstable": {
|
"nixpkgs-unstable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1670918062,
|
"lastModified": 1671095104,
|
||||||
"narHash": "sha256-iOhkyBYUU9Jfkk0lvI4ahpjyrTsLXj9uyJWwmjKg+gg=",
|
"narHash": "sha256-BgI8tDJgORrKX9lF93enEDKP5WxIoVBt9+1zoGIfx7k=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "84575b0bd882be979516f4fecfe4d7c8de8f6a92",
|
"rev": "7634c3250b6870e76f2e611cb95b72392add9aef",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.05";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.11";
|
||||||
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
extra-container = {
|
extra-container = {
|
||||||
@ -19,9 +19,11 @@
|
|||||||
let
|
let
|
||||||
supportedSystems = [
|
supportedSystems = [
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
"i686-linux"
|
|
||||||
"aarch64-linux"
|
"aarch64-linux"
|
||||||
"armv7l-linux"
|
# On these 32-bit platforms, Python pkg `pymemcache` 4.0.0 (required by
|
||||||
|
# `joinmarket`) is broken:
|
||||||
|
# "i686-linux"
|
||||||
|
# "armv7l-linux"
|
||||||
];
|
];
|
||||||
|
|
||||||
test = import ./test/tests.nix nixpkgs.lib;
|
test = import ./test/tests.nix nixpkgs.lib;
|
||||||
|
@ -12,6 +12,19 @@ set -euo pipefail
|
|||||||
# pinned to stable.
|
# pinned to stable.
|
||||||
# All other pkgs are pinned to unstable.
|
# All other pkgs are pinned to unstable.
|
||||||
|
|
||||||
|
forceRun=
|
||||||
|
nixosVersion=
|
||||||
|
for arg in "$@"; do
|
||||||
|
case $arg in
|
||||||
|
-f)
|
||||||
|
forceRun=1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
nixosVersion=$arg
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
# cd to script dir
|
# cd to script dir
|
||||||
cd "${BASH_SOURCE[0]%/*}"
|
cd "${BASH_SOURCE[0]%/*}"
|
||||||
|
|
||||||
@ -21,7 +34,7 @@ if [[ $(nix flake 2>&1) != *"requires a sub-command"* ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ${1:-} != -f ]] && ! git diff --quiet ../flake.{nix,lock}; then
|
if [[ $forceRun ]] && ! git diff --quiet ../flake.{nix,lock}; then
|
||||||
echo "error: flake.nix/flake.lock have changes. Run with option -f to ignore."
|
echo "error: flake.nix/flake.lock have changes. Run with option -f to ignore."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -36,6 +49,9 @@ versions=$(nix eval --json -f update-flake.nix versions)
|
|||||||
# versions=$(echo "$versions" | sed 's|1|0|g')
|
# versions=$(echo "$versions" | sed 's|1|0|g')
|
||||||
|
|
||||||
echo "Updating main flake"
|
echo "Updating main flake"
|
||||||
|
if [[ $nixosVersion ]]; then
|
||||||
|
sed -Ei "s|(nixpkgs.url = .*nixos-)[^\"]+|\1$nixosVersion|" ../flake.nix
|
||||||
|
fi
|
||||||
nix flake update ..
|
nix flake update ..
|
||||||
|
|
||||||
echo
|
echo
|
||||||
|
@ -6,7 +6,7 @@ let
|
|||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Enable backups of node data.
|
Enable backups of node data.
|
||||||
This uses the NixOS duplicity service.
|
This uses the NixOS duplicity service.
|
||||||
To further configure the backup, you can set NixOS options `services.duplicity.*`.
|
To further configure the backup, you can set NixOS options `services.duplicity.*`.
|
||||||
@ -16,34 +16,34 @@ let
|
|||||||
with-bulk-data = mkOption {
|
with-bulk-data = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Whether to also backup Bitcoin blockchain and other bulk data.
|
Whether to also backup Bitcoin blockchain and other bulk data.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
destination = mkOption {
|
destination = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "file:///var/lib/localBackups";
|
default = "file:///var/lib/localBackups";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Where to back up to.
|
Where to back up to.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
frequency = mkOption {
|
frequency = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = null;
|
default = null;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Run backup with the given frequency. If null, do not run automatically.
|
Run backup with the given frequency. If null, do not run automatically.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
postgresqlDatabases = mkOption {
|
postgresqlDatabases = mkOption {
|
||||||
type = types.listOf types.str;
|
type = types.listOf types.str;
|
||||||
default = [];
|
default = [];
|
||||||
description = "List of database names to backup.";
|
description = mdDoc "List of database names to backup.";
|
||||||
};
|
};
|
||||||
extraFiles = mkOption {
|
extraFiles = mkOption {
|
||||||
type = types.listOf types.str;
|
type = types.listOf types.str;
|
||||||
default = [];
|
default = [];
|
||||||
example = [ "/var/lib/nginx" ];
|
example = [ "/var/lib/nginx" ];
|
||||||
description = "Additional files to be appended to filelist.";
|
description = mdDoc "Additional files to be appended to filelist.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -8,19 +8,19 @@ let
|
|||||||
address = mkOption {
|
address = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "127.0.0.1";
|
default = "127.0.0.1";
|
||||||
description = "Address to listen for peer connections.";
|
description = mdDoc "Address to listen for peer connections.";
|
||||||
};
|
};
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 8333;
|
default = 8333;
|
||||||
description = "Port to listen for peer connections.";
|
description = mdDoc "Port to listen for peer connections.";
|
||||||
};
|
};
|
||||||
onionPort = mkOption {
|
onionPort = mkOption {
|
||||||
type = types.nullOr types.port;
|
type = types.nullOr types.port;
|
||||||
# When the bitcoind onion service is enabled, add an onion-tagged socket
|
# When the bitcoind onion service is enabled, add an onion-tagged socket
|
||||||
# to distinguish local connections from Tor connections
|
# to distinguish local connections from Tor connections
|
||||||
default = if (config.nix-bitcoin.onionServices.bitcoind.enable or false) then 8334 else null;
|
default = if (config.nix-bitcoin.onionServices.bitcoind.enable or false) then 8334 else null;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Port to listen for Tor peer connections.
|
Port to listen for Tor peer connections.
|
||||||
If set, inbound connections to this port are tagged as onion peers.
|
If set, inbound connections to this port are tagged as onion peers.
|
||||||
'';
|
'';
|
||||||
@ -28,15 +28,15 @@ let
|
|||||||
listen = mkOption {
|
listen = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Listen for peer connections at `address:port`
|
Listen for peer connections at `address:port`
|
||||||
and `address:onionPort` (if `onionPort` is set).
|
and `address:onionPort` (if {option}`onionPort` is set).
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
listenWhitelisted = mkOption {
|
listenWhitelisted = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Listen for peer connections at `address:whitelistedPort`.
|
Listen for peer connections at `address:whitelistedPort`.
|
||||||
Peers connected through this socket are automatically whitelisted.
|
Peers connected through this socket are automatically whitelisted.
|
||||||
'';
|
'';
|
||||||
@ -44,12 +44,12 @@ let
|
|||||||
whitelistedPort = mkOption {
|
whitelistedPort = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 8335;
|
default = 8335;
|
||||||
description = "See `listenWhitelisted`.";
|
description = mdDoc "See `listenWhitelisted`.";
|
||||||
};
|
};
|
||||||
getPublicAddressCmd = mkOption {
|
getPublicAddressCmd = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "";
|
default = "";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Bash expression which outputs the public service address to announce to peers.
|
Bash expression which outputs the public service address to announce to peers.
|
||||||
If left empty, no address is announced.
|
If left empty, no address is announced.
|
||||||
'';
|
'';
|
||||||
@ -58,7 +58,7 @@ let
|
|||||||
type = types.package;
|
type = types.package;
|
||||||
default = config.nix-bitcoin.pkgs.bitcoind;
|
default = config.nix-bitcoin.pkgs.bitcoind;
|
||||||
defaultText = "config.nix-bitcoin.pkgs.bitcoind";
|
defaultText = "config.nix-bitcoin.pkgs.bitcoind";
|
||||||
description = "The package providing bitcoin binaries.";
|
description = mdDoc "The package providing bitcoin binaries.";
|
||||||
};
|
};
|
||||||
extraConfig = mkOption {
|
extraConfig = mkOption {
|
||||||
type = types.lines;
|
type = types.lines;
|
||||||
@ -67,41 +67,41 @@ let
|
|||||||
par=16
|
par=16
|
||||||
logips=1
|
logips=1
|
||||||
'';
|
'';
|
||||||
description = "Extra lines appended to <filename>bitcoin.conf</filename>.";
|
description = mdDoc "Extra lines appended to {file}`bitcoin.conf`.";
|
||||||
};
|
};
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = "/var/lib/bitcoind";
|
default = "/var/lib/bitcoind";
|
||||||
description = "The data directory for bitcoind.";
|
description = mdDoc "The data directory for bitcoind.";
|
||||||
};
|
};
|
||||||
rpc = {
|
rpc = {
|
||||||
address = mkOption {
|
address = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "127.0.0.1";
|
default = "127.0.0.1";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Address to listen for JSON-RPC connections.
|
Address to listen for JSON-RPC connections.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 8332;
|
default = 8332;
|
||||||
description = "Port to listen for JSON-RPC connections.";
|
description = mdDoc "Port to listen for JSON-RPC connections.";
|
||||||
};
|
};
|
||||||
threads = mkOption {
|
threads = mkOption {
|
||||||
type = types.nullOr types.ints.u16;
|
type = types.nullOr types.ints.u16;
|
||||||
default = null;
|
default = null;
|
||||||
description = "The number of threads to service RPC calls.";
|
description = mdDoc "The number of threads to service RPC calls.";
|
||||||
};
|
};
|
||||||
allowip = mkOption {
|
allowip = mkOption {
|
||||||
type = types.listOf types.str;
|
type = types.listOf types.str;
|
||||||
default = [ "127.0.0.1" ];
|
default = [ "127.0.0.1" ];
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Allow JSON-RPC connections from specified sources.
|
Allow JSON-RPC connections from specified sources.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
users = mkOption {
|
users = mkOption {
|
||||||
default = {};
|
default = {};
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Allowed users for JSON-RPC connections.
|
Allowed users for JSON-RPC connections.
|
||||||
'';
|
'';
|
||||||
example = {
|
example = {
|
||||||
@ -116,16 +116,16 @@ let
|
|||||||
type = types.str;
|
type = types.str;
|
||||||
default = name;
|
default = name;
|
||||||
example = "alice";
|
example = "alice";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Username for JSON-RPC connections.
|
Username for JSON-RPC connections.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
passwordHMAC = mkOption {
|
passwordHMAC = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
example = "f7efda5c189b999524f151318c0c86$d5b51b3beffbc02b724e5d095828e0bc8b2456e9ac8757ae3211a5d9b16a22ae";
|
example = "f7efda5c189b999524f151318c0c86$d5b51b3beffbc02b724e5d095828e0bc8b2456e9ac8757ae3211a5d9b16a22ae";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Password HMAC-SHA-256 for JSON-RPC connections. Must be a string of the
|
Password HMAC-SHA-256 for JSON-RPC connections. Must be a string of the
|
||||||
format `salt-hex$hmac-hex`.
|
format `<SALT-HEX>$<HMAC-HEX>`.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
passwordHMACFromFile = mkOption {
|
passwordHMACFromFile = mkOption {
|
||||||
@ -136,7 +136,7 @@ let
|
|||||||
rpcwhitelist = mkOption {
|
rpcwhitelist = mkOption {
|
||||||
type = types.listOf types.str;
|
type = types.listOf types.str;
|
||||||
default = [];
|
default = [];
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
List of allowed rpc calls for each user.
|
List of allowed rpc calls for each user.
|
||||||
If empty list, rpcwhitelist is disabled for that user.
|
If empty list, rpcwhitelist is disabled for that user.
|
||||||
'';
|
'';
|
||||||
@ -148,7 +148,7 @@ let
|
|||||||
regtest = mkOption {
|
regtest = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = "Enable regtest mode.";
|
description = mdDoc "Enable regtest mode.";
|
||||||
};
|
};
|
||||||
network = mkOption {
|
network = mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
@ -161,12 +161,12 @@ let
|
|||||||
proxy = mkOption {
|
proxy = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = if cfg.tor.proxy then config.nix-bitcoin.torClientAddressWithPort else null;
|
default = if cfg.tor.proxy then config.nix-bitcoin.torClientAddressWithPort else null;
|
||||||
description = "Connect through SOCKS5 proxy";
|
description = mdDoc "Connect through SOCKS5 proxy";
|
||||||
};
|
};
|
||||||
i2p = mkOption {
|
i2p = mkOption {
|
||||||
type = types.enum [ false true "only-outgoing" ];
|
type = types.enum [ false true "only-outgoing" ];
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Enable peer connections via i2p.
|
Enable peer connections via i2p.
|
||||||
With `only-outgoing`, incoming i2p connections are disabled.
|
With `only-outgoing`, incoming i2p connections are disabled.
|
||||||
'';
|
'';
|
||||||
@ -174,7 +174,7 @@ let
|
|||||||
dataDirReadableByGroup = mkOption {
|
dataDirReadableByGroup = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
If enabled, data dir content is readable by the bitcoind service group.
|
If enabled, data dir content is readable by the bitcoind service group.
|
||||||
Warning: This disables bitcoind's wallet support.
|
Warning: This disables bitcoind's wallet support.
|
||||||
'';
|
'';
|
||||||
@ -182,7 +182,7 @@ let
|
|||||||
sysperms = mkOption {
|
sysperms = mkOption {
|
||||||
type = types.nullOr types.bool;
|
type = types.nullOr types.bool;
|
||||||
default = null;
|
default = null;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Create new files with system default permissions, instead of umask 077
|
Create new files with system default permissions, instead of umask 077
|
||||||
(only effective with disabled wallet functionality)
|
(only effective with disabled wallet functionality)
|
||||||
'';
|
'';
|
||||||
@ -190,7 +190,7 @@ let
|
|||||||
disablewallet = mkOption {
|
disablewallet = mkOption {
|
||||||
type = types.nullOr types.bool;
|
type = types.nullOr types.bool;
|
||||||
default = null;
|
default = null;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Do not load the wallet and disable wallet RPC calls
|
Do not load the wallet and disable wallet RPC calls
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
@ -198,13 +198,13 @@ let
|
|||||||
type = types.nullOr (types.ints.between 4 16384);
|
type = types.nullOr (types.ints.between 4 16384);
|
||||||
default = null;
|
default = null;
|
||||||
example = 4000;
|
example = 4000;
|
||||||
description = "Override the default database cache size in MiB.";
|
description = mdDoc "Override the default database cache size in MiB.";
|
||||||
};
|
};
|
||||||
prune = mkOption {
|
prune = mkOption {
|
||||||
type = types.ints.unsigned;
|
type = types.ints.unsigned;
|
||||||
default = 0;
|
default = 0;
|
||||||
example = 10000;
|
example = 10000;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Automatically prune block files to stay under the specified target size in MiB.
|
Automatically prune block files to stay under the specified target size in MiB.
|
||||||
Value 0 disables pruning.
|
Value 0 disables pruning.
|
||||||
'';
|
'';
|
||||||
@ -212,25 +212,25 @@ let
|
|||||||
txindex = mkOption {
|
txindex = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = "Enable the transaction index.";
|
description = mdDoc "Enable the transaction index.";
|
||||||
};
|
};
|
||||||
zmqpubrawblock = mkOption {
|
zmqpubrawblock = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = null;
|
default = null;
|
||||||
example = "tcp://127.0.0.1:28332";
|
example = "tcp://127.0.0.1:28332";
|
||||||
description = "ZMQ address for zmqpubrawblock notifications";
|
description = mdDoc "ZMQ address for zmqpubrawblock notifications";
|
||||||
};
|
};
|
||||||
zmqpubrawtx = mkOption {
|
zmqpubrawtx = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = null;
|
default = null;
|
||||||
example = "tcp://127.0.0.1:28333";
|
example = "tcp://127.0.0.1:28333";
|
||||||
description = "ZMQ address for zmqpubrawtx notifications";
|
description = mdDoc "ZMQ address for zmqpubrawtx notifications";
|
||||||
};
|
};
|
||||||
assumevalid = mkOption {
|
assumevalid = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = null;
|
default = null;
|
||||||
example = "00000000000000000000e5abc3a74fe27dc0ead9c70ea1deb456f11c15fd7bc6";
|
example = "00000000000000000000e5abc3a74fe27dc0ead9c70ea1deb456f11c15fd7bc6";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
If this block is in the chain assume that it and its ancestors are
|
If this block is in the chain assume that it and its ancestors are
|
||||||
valid and potentially skip their script verification.
|
valid and potentially skip their script verification.
|
||||||
'';
|
'';
|
||||||
@ -239,28 +239,28 @@ let
|
|||||||
type = types.listOf types.str;
|
type = types.listOf types.str;
|
||||||
default = [];
|
default = [];
|
||||||
example = [ "ecoc5q34tmbq54wl.onion" ];
|
example = [ "ecoc5q34tmbq54wl.onion" ];
|
||||||
description = "Add nodes to connect to and attempt to keep the connections open";
|
description = mdDoc "Add nodes to connect to and attempt to keep the connections open";
|
||||||
};
|
};
|
||||||
discover = mkOption {
|
discover = mkOption {
|
||||||
type = types.nullOr types.bool;
|
type = types.nullOr types.bool;
|
||||||
default = null;
|
default = null;
|
||||||
description = "Discover own IP addresses";
|
description = mdDoc "Discover own IP addresses";
|
||||||
};
|
};
|
||||||
addresstype = mkOption {
|
addresstype = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = null;
|
default = null;
|
||||||
example = "bech32";
|
example = "bech32";
|
||||||
description = "The type of addresses to use";
|
description = mdDoc "The type of addresses to use";
|
||||||
};
|
};
|
||||||
user = mkOption {
|
user = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "bitcoin";
|
default = "bitcoin";
|
||||||
description = "The user as which to run bitcoind.";
|
description = mdDoc "The user as which to run bitcoind.";
|
||||||
};
|
};
|
||||||
group = mkOption {
|
group = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = cfg.user;
|
default = cfg.user;
|
||||||
description = "The group as which to run bitcoind.";
|
description = mdDoc "The group as which to run bitcoind.";
|
||||||
};
|
};
|
||||||
cli = mkOption {
|
cli = mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
@ -269,7 +269,7 @@ let
|
|||||||
exec ${cfg.package}/bin/bitcoin-cli -datadir='${cfg.dataDir}' "$@"
|
exec ${cfg.package}/bin/bitcoin-cli -datadir='${cfg.dataDir}' "$@"
|
||||||
'';
|
'';
|
||||||
defaultText = "(See source)";
|
defaultText = "(See source)";
|
||||||
description = "Binary to connect with the bitcoind instance.";
|
description = mdDoc "Binary to connect with the bitcoind instance.";
|
||||||
};
|
};
|
||||||
tor = nbLib.tor;
|
tor = nbLib.tor;
|
||||||
};
|
};
|
||||||
|
@ -8,12 +8,12 @@ let
|
|||||||
address = mkOption {
|
address = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "127.0.0.1";
|
default = "127.0.0.1";
|
||||||
description = "Address to listen on.";
|
description = mdDoc "Address to listen on.";
|
||||||
};
|
};
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 23000;
|
default = 23000;
|
||||||
description = "Port to listen on.";
|
description = mdDoc "Port to listen on.";
|
||||||
};
|
};
|
||||||
package = mkOption {
|
package = mkOption {
|
||||||
type = types.package;
|
type = types.package;
|
||||||
@ -22,38 +22,38 @@ let
|
|||||||
else
|
else
|
||||||
config.nix-bitcoin.pkgs.btcpayserver;
|
config.nix-bitcoin.pkgs.btcpayserver;
|
||||||
defaultText = "(See source)";
|
defaultText = "(See source)";
|
||||||
description = "The package providing btcpayserver binaries.";
|
description = mdDoc "The package providing btcpayserver binaries.";
|
||||||
};
|
};
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = "/var/lib/btcpayserver";
|
default = "/var/lib/btcpayserver";
|
||||||
description = "The data directory for btcpayserver.";
|
description = mdDoc "The data directory for btcpayserver.";
|
||||||
};
|
};
|
||||||
lightningBackend = mkOption {
|
lightningBackend = mkOption {
|
||||||
type = types.nullOr (types.enum [ "clightning" "lnd" ]);
|
type = types.nullOr (types.enum [ "clightning" "lnd" ]);
|
||||||
default = null;
|
default = null;
|
||||||
description = "The lightning node implementation to use.";
|
description = mdDoc "The lightning node implementation to use.";
|
||||||
};
|
};
|
||||||
lbtc = mkOption {
|
lbtc = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = "Enable liquid support in btcpayserver.";
|
description = mdDoc "Enable liquid support in btcpayserver.";
|
||||||
};
|
};
|
||||||
rootpath = mkOption {
|
rootpath = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = null;
|
default = null;
|
||||||
example = "btcpayserver";
|
example = "btcpayserver";
|
||||||
description = "The prefix for root-relative btcpayserver URLs.";
|
description = mdDoc "The prefix for root-relative btcpayserver URLs.";
|
||||||
};
|
};
|
||||||
user = mkOption {
|
user = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "btcpayserver";
|
default = "btcpayserver";
|
||||||
description = "The user as which to run btcpayserver.";
|
description = mdDoc "The user as which to run btcpayserver.";
|
||||||
};
|
};
|
||||||
group = mkOption {
|
group = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = cfg.btcpayserver.user;
|
default = cfg.btcpayserver.user;
|
||||||
description = "The group as which to run btcpayserver.";
|
description = mdDoc "The group as which to run btcpayserver.";
|
||||||
};
|
};
|
||||||
tor.enforce = nbLib.tor.enforce;
|
tor.enforce = nbLib.tor.enforce;
|
||||||
};
|
};
|
||||||
@ -63,7 +63,7 @@ let
|
|||||||
# This option is only used by netns-isolation
|
# This option is only used by netns-isolation
|
||||||
internal = true;
|
internal = true;
|
||||||
default = cfg.btcpayserver.enable;
|
default = cfg.btcpayserver.enable;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
nbxplorer is always enabled when btcpayserver is enabled.
|
nbxplorer is always enabled when btcpayserver is enabled.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
@ -71,32 +71,32 @@ let
|
|||||||
type = types.package;
|
type = types.package;
|
||||||
default = config.nix-bitcoin.pkgs.nbxplorer;
|
default = config.nix-bitcoin.pkgs.nbxplorer;
|
||||||
defaultText = "config.nix-bitcoin.pkgs.nbxplorer";
|
defaultText = "config.nix-bitcoin.pkgs.nbxplorer";
|
||||||
description = "The package providing nbxplorer binaries.";
|
description = mdDoc "The package providing nbxplorer binaries.";
|
||||||
};
|
};
|
||||||
address = mkOption {
|
address = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "127.0.0.1";
|
default = "127.0.0.1";
|
||||||
description = "Address to listen on.";
|
description = mdDoc "Address to listen on.";
|
||||||
};
|
};
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 24444;
|
default = 24444;
|
||||||
description = "Port to listen on.";
|
description = mdDoc "Port to listen on.";
|
||||||
};
|
};
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = "/var/lib/nbxplorer";
|
default = "/var/lib/nbxplorer";
|
||||||
description = "The data directory for nbxplorer.";
|
description = mdDoc "The data directory for nbxplorer.";
|
||||||
};
|
};
|
||||||
user = mkOption {
|
user = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "nbxplorer";
|
default = "nbxplorer";
|
||||||
description = "The user as which to run nbxplorer.";
|
description = mdDoc "The user as which to run nbxplorer.";
|
||||||
};
|
};
|
||||||
group = mkOption {
|
group = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = cfg.nbxplorer.user;
|
default = cfg.nbxplorer.user;
|
||||||
description = "The group as which to run nbxplorer.";
|
description = mdDoc "The group as which to run nbxplorer.";
|
||||||
};
|
};
|
||||||
tor.enforce = nbLib.tor.enforce;
|
tor.enforce = nbLib.tor.enforce;
|
||||||
};
|
};
|
||||||
|
@ -9,18 +9,17 @@ let
|
|||||||
type = listOf str;
|
type = listOf str;
|
||||||
default = [];
|
default = [];
|
||||||
example = [ "--verbose" "--dry-run" ];
|
example = [ "--verbose" "--dry-run" ];
|
||||||
description = "Extra flags to pass to the charge-lnd command.";
|
description = mdDoc "Extra flags to pass to the charge-lnd command.";
|
||||||
};
|
};
|
||||||
|
|
||||||
interval = mkOption {
|
interval = mkOption {
|
||||||
type = str;
|
type = str;
|
||||||
default = "*-*-* 04:00:00";
|
default = "*-*-* 04:00:00";
|
||||||
example = "hourly";
|
example = "hourly";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Systemd calendar expression when to adjust fees.
|
Systemd calendar expression when to adjust fees.
|
||||||
|
|
||||||
See <citerefentry><refentrytitle>systemd.time</refentrytitle>
|
See {man}`systemd.time(7)` for possible values.
|
||||||
<manvolnum>7</manvolnum></citerefentry> for possible values.
|
|
||||||
|
|
||||||
Default is once a day.
|
Default is once a day.
|
||||||
'';
|
'';
|
||||||
@ -29,7 +28,7 @@ let
|
|||||||
randomDelay = mkOption {
|
randomDelay = mkOption {
|
||||||
type = str;
|
type = str;
|
||||||
default = "1h";
|
default = "1h";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Random delay to add to scheduled time.
|
Random delay to add to scheduled time.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
@ -55,7 +54,7 @@ let
|
|||||||
[default]
|
[default]
|
||||||
strategy = ignore
|
strategy = ignore
|
||||||
'';
|
'';
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Policy definitions in INI format.
|
Policy definitions in INI format.
|
||||||
|
|
||||||
See https://github.com/accumulator/charge-lnd/blob/master/README.md#usage
|
See https://github.com/accumulator/charge-lnd/blob/master/README.md#usage
|
||||||
@ -126,7 +125,6 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.timers.charge-lnd = {
|
systemd.timers.charge-lnd = {
|
||||||
description = "Adjust LND routing fees";
|
|
||||||
wantedBy = [ "timers.target" ];
|
wantedBy = [ "timers.target" ];
|
||||||
timerConfig = {
|
timerConfig = {
|
||||||
OnCalendar = cfg.interval;
|
OnCalendar = cfg.interval;
|
||||||
|
@ -7,7 +7,7 @@ let cfg = config.services.clightning.plugins.clboss; in
|
|||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Whether to enable CLBOSS (clightning plugin).
|
Whether to enable CLBOSS (clightning plugin).
|
||||||
See also: https://github.com/ZmnSCPxj/clboss#operating
|
See also: https://github.com/ZmnSCPxj/clboss#operating
|
||||||
'';
|
'';
|
||||||
@ -15,7 +15,7 @@ let cfg = config.services.clightning.plugins.clboss; in
|
|||||||
min-onchain = mkOption {
|
min-onchain = mkOption {
|
||||||
type = types.ints.positive;
|
type = types.ints.positive;
|
||||||
default = 30000;
|
default = 30000;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Target amount (in satoshi) that CLBOSS will leave on-chain.
|
Target amount (in satoshi) that CLBOSS will leave on-chain.
|
||||||
clboss will only open new channels if this amount is smaller than
|
clboss will only open new channels if this amount is smaller than
|
||||||
the funds in your clightning wallet.
|
the funds in your clightning wallet.
|
||||||
@ -24,27 +24,27 @@ let cfg = config.services.clightning.plugins.clboss; in
|
|||||||
min-channel = mkOption {
|
min-channel = mkOption {
|
||||||
type = types.ints.positive;
|
type = types.ints.positive;
|
||||||
default = 500000;
|
default = 500000;
|
||||||
description = "The minimum size (in satoshi) of channels created by CLBOSS.";
|
description = mdDoc "The minimum size (in satoshi) of channels created by CLBOSS.";
|
||||||
};
|
};
|
||||||
max-channel = mkOption {
|
max-channel = mkOption {
|
||||||
type = types.ints.positive;
|
type = types.ints.positive;
|
||||||
default = 16777215;
|
default = 16777215;
|
||||||
description = "The maximum size (in satoshi) of channels created by CLBOSS.";
|
description = mdDoc "The maximum size (in satoshi) of channels created by CLBOSS.";
|
||||||
};
|
};
|
||||||
zerobasefee = mkOption {
|
zerobasefee = mkOption {
|
||||||
type = types.enum [ "require" "allow" "disallow" ];
|
type = types.enum [ "require" "allow" "disallow" ];
|
||||||
default = "allow";
|
default = "allow";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
require: set `base_fee` to 0.
|
`require`: set `base_fee` to 0.
|
||||||
allow: set `base_fee` according to the CLBOSS heuristics, which may include value 0.
|
`allow`: set `base_fee` according to the CLBOSS heuristics, which may include value 0.
|
||||||
disallow: set `base_fee` to according to the CLBOSS heuristics, with a minimum value of 1.
|
`disallow`: set `base_fee` to according to the CLBOSS heuristics, with a minimum value of 1.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
package = mkOption {
|
package = mkOption {
|
||||||
type = types.package;
|
type = types.package;
|
||||||
default = config.nix-bitcoin.pkgs.clboss;
|
default = config.nix-bitcoin.pkgs.clboss;
|
||||||
defaultText = "config.nix-bitcoin.pkgs.clboss";
|
defaultText = "config.nix-bitcoin.pkgs.clboss";
|
||||||
description = "The package providing clboss binaries.";
|
description = mdDoc "The package providing clboss binaries.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ let
|
|||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Enable feeaduster (clightning plugin).
|
Enable feeaduster (clightning plugin).
|
||||||
This plugin auto-updates channel fees to keep channels balanced.
|
This plugin auto-updates channel fees to keep channels balanced.
|
||||||
|
|
||||||
@ -18,17 +18,17 @@ let
|
|||||||
fuzz = mkOption {
|
fuzz = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = true;
|
default = true;
|
||||||
description = "Enable update threshold randomization and hysteresis.";
|
description = mdDoc "Enable update threshold randomization and hysteresis.";
|
||||||
};
|
};
|
||||||
adjustOnForward = mkOption {
|
adjustOnForward = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = "Automatically update fees on forward events.";
|
description = mdDoc "Automatically update fees on forward events.";
|
||||||
};
|
};
|
||||||
method = mkOption {
|
method = mkOption {
|
||||||
type = types.enum [ "soft" "default" "hard" ];
|
type = types.enum [ "soft" "default" "hard" ];
|
||||||
default = "default";
|
default = "default";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Adjustment method to calculate channel fees.
|
Adjustment method to calculate channel fees.
|
||||||
`soft`: less difference when adjusting fees.
|
`soft`: less difference when adjusting fees.
|
||||||
`hard`: greater difference when adjusting fees.
|
`hard`: greater difference when adjusting fees.
|
||||||
@ -37,7 +37,7 @@ let
|
|||||||
adjustDaily = mkOption {
|
adjustDaily = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = true;
|
default = true;
|
||||||
description = "Automatically update fees daily.";
|
description = mdDoc "Automatically update fees daily.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -8,22 +8,22 @@ let cfg = config.services.clightning.plugins.summary; in
|
|||||||
currency = mkOption {
|
currency = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "USD";
|
default = "USD";
|
||||||
description = "The currency to look up on btcaverage.";
|
description = mdDoc "The currency to look up on btcaverage.";
|
||||||
};
|
};
|
||||||
currencyPrefix = mkOption {
|
currencyPrefix = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "USD $";
|
default = "USD $";
|
||||||
description = "The prefix to use for the currency.";
|
description = mdDoc "The prefix to use for the currency.";
|
||||||
};
|
};
|
||||||
availabilityInterval = mkOption {
|
availabilityInterval = mkOption {
|
||||||
type = types.int;
|
type = types.int;
|
||||||
default = 300;
|
default = 300;
|
||||||
description = "How often in seconds the availability should be calculated.";
|
description = mdDoc "How often in seconds the availability should be calculated.";
|
||||||
};
|
};
|
||||||
availabilityWindow = mkOption {
|
availabilityWindow = mkOption {
|
||||||
type = types.int;
|
type = types.int;
|
||||||
default = 72;
|
default = 72;
|
||||||
description = "How many hours the availability should be averaged over.";
|
description = mdDoc "How many hours the availability should be averaged over.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ let
|
|||||||
mkOption {
|
mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = null;
|
default = null;
|
||||||
description = "Endpoint for ${name}";
|
description = mdDoc "Endpoint for ${name}";
|
||||||
};
|
};
|
||||||
|
|
||||||
setEndpoint = ep:
|
setEndpoint = ep:
|
||||||
|
@ -6,7 +6,7 @@ let
|
|||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Enable live replication of the clightning database.
|
Enable live replication of the clightning database.
|
||||||
This prevents losing off-chain funds when the primary wallet file becomes
|
This prevents losing off-chain funds when the primary wallet file becomes
|
||||||
inaccessible.
|
inaccessible.
|
||||||
@ -26,7 +26,7 @@ let
|
|||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = null;
|
default = null;
|
||||||
example = "user@10.0.0.1:directory";
|
example = "user@10.0.0.1:directory";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
The SSH destination for which a SSHFS will be mounted.
|
The SSH destination for which a SSHFS will be mounted.
|
||||||
`directory` is relative to the home of `user`.
|
`directory` is relative to the home of `user`.
|
||||||
|
|
||||||
@ -40,12 +40,12 @@ let
|
|||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 22;
|
default = 22;
|
||||||
description = "SSH port of the remote server.";
|
description = mdDoc "SSH port of the remote server.";
|
||||||
};
|
};
|
||||||
sshOptions = mkOption {
|
sshOptions = mkOption {
|
||||||
type = with types; listOf str;
|
type = with types; listOf str;
|
||||||
default = [ "reconnect" "ServerAliveInterval=50" ];
|
default = [ "reconnect" "ServerAliveInterval=50" ];
|
||||||
description = "SSH options used for mounting the SSHFS.";
|
description = mdDoc "SSH options used for mounting the SSHFS.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
local = {
|
local = {
|
||||||
@ -53,7 +53,7 @@ let
|
|||||||
type = types.nullOr types.path;
|
type = types.nullOr types.path;
|
||||||
default = null;
|
default = null;
|
||||||
example = "/var/backup/clightning";
|
example = "/var/backup/clightning";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
This option can be specified instead of `sshfs.destination` to enable
|
This option can be specified instead of `sshfs.destination` to enable
|
||||||
replication to a local directory.
|
replication to a local directory.
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ let
|
|||||||
setupDirectory = mkOption {
|
setupDirectory = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = true;
|
default = true;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Create `local.directory` if it doesn't exist and set write permissions
|
Create `local.directory` if it doesn't exist and set write permissions
|
||||||
for the `clightning` user.
|
for the `clightning` user.
|
||||||
'';
|
'';
|
||||||
@ -78,10 +78,10 @@ let
|
|||||||
encrypt = mkOption {
|
encrypt = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Whether to encrypt the replicated database with gocryptfs.
|
Whether to encrypt the replicated database with gocryptfs.
|
||||||
The encryption password is automatically generated and stored
|
The encryption password is automatically generated and stored
|
||||||
in file `$secretsDir/clightning-replication-password`.
|
in file {file}`$secretsDir/clightning-replication-password`.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -7,17 +7,17 @@ let
|
|||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 3001;
|
default = 3001;
|
||||||
description = "REST server port.";
|
description = mdDoc "REST server port.";
|
||||||
};
|
};
|
||||||
docPort = mkOption {
|
docPort = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 4001;
|
default = 4001;
|
||||||
description = "Swagger API documentation server port.";
|
description = mdDoc "Swagger API documentation server port.";
|
||||||
};
|
};
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = "/var/lib/clightning-rest";
|
default = "/var/lib/clightning-rest";
|
||||||
description = "The data directory for clightning-rest.";
|
description = mdDoc "The data directory for clightning-rest.";
|
||||||
};
|
};
|
||||||
extraConfig = mkOption {
|
extraConfig = mkOption {
|
||||||
type = types.attrs;
|
type = types.attrs;
|
||||||
@ -25,7 +25,7 @@ let
|
|||||||
example = {
|
example = {
|
||||||
DOMAIN = "mynode.org";
|
DOMAIN = "mynode.org";
|
||||||
};
|
};
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Extra config options.
|
Extra config options.
|
||||||
See: https://github.com/Ride-The-Lightning/c-lightning-REST#option-1-via-config-file-cl-rest-configjson
|
See: https://github.com/Ride-The-Lightning/c-lightning-REST#option-1-via-config-file-cl-rest-configjson
|
||||||
'';
|
'';
|
||||||
@ -34,7 +34,7 @@ let
|
|||||||
group = mkOption {
|
group = mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
default = clightning.group;
|
default = clightning.group;
|
||||||
description = "The group under which clightning-rest is run.";
|
description = mdDoc "The group under which clightning-rest is run.";
|
||||||
};
|
};
|
||||||
# Rest server address.
|
# Rest server address.
|
||||||
# Not configurable. The server always listens on all interfaces:
|
# Not configurable. The server always listens on all interfaces:
|
||||||
|
@ -7,24 +7,24 @@ let
|
|||||||
address = mkOption {
|
address = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "127.0.0.1";
|
default = "127.0.0.1";
|
||||||
description = "Address to listen for peer connections.";
|
description = mdDoc "Address to listen for peer connections.";
|
||||||
};
|
};
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 9735;
|
default = 9735;
|
||||||
description = "Port to listen for peer connections.";
|
description = mdDoc "Port to listen for peer connections.";
|
||||||
};
|
};
|
||||||
proxy = mkOption {
|
proxy = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = if cfg.tor.proxy then config.nix-bitcoin.torClientAddressWithPort else null;
|
default = if cfg.tor.proxy then config.nix-bitcoin.torClientAddressWithPort else null;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Socks proxy for connecting to Tor nodes (or for all connections if option always-use-proxy is set).
|
Socks proxy for connecting to Tor nodes (or for all connections if option always-use-proxy is set).
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
always-use-proxy = mkOption {
|
always-use-proxy = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = cfg.tor.proxy;
|
default = cfg.tor.proxy;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Always use the proxy, even to connect to normal IP addresses.
|
Always use the proxy, even to connect to normal IP addresses.
|
||||||
You can still connect to Unix domain sockets manually.
|
You can still connect to Unix domain sockets manually.
|
||||||
This also disables all DNS lookups, to avoid leaking address information.
|
This also disables all DNS lookups, to avoid leaking address information.
|
||||||
@ -33,18 +33,18 @@ let
|
|||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = "/var/lib/clightning";
|
default = "/var/lib/clightning";
|
||||||
description = "The data directory for clightning.";
|
description = mdDoc "The data directory for clightning.";
|
||||||
};
|
};
|
||||||
networkDir = mkOption {
|
networkDir = mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
default = "${cfg.dataDir}/${network}";
|
default = "${cfg.dataDir}/${network}";
|
||||||
description = "The network data directory.";
|
description = mdDoc "The network data directory.";
|
||||||
};
|
};
|
||||||
wallet = mkOption {
|
wallet = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = null;
|
default = null;
|
||||||
example = "sqlite3:///var/lib/clightning/bitcoin/lightningd.sqlite3";
|
example = "sqlite3:///var/lib/clightning/bitcoin/lightningd.sqlite3";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Wallet data scheme (sqlite3 or postgres) and location/connection
|
Wallet data scheme (sqlite3 or postgres) and location/connection
|
||||||
parameters, as fully qualified data source name.
|
parameters, as fully qualified data source name.
|
||||||
'';
|
'';
|
||||||
@ -55,29 +55,29 @@ let
|
|||||||
example = ''
|
example = ''
|
||||||
alias=mynode
|
alias=mynode
|
||||||
'';
|
'';
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Extra lines appended to the configuration file.
|
Extra lines appended to the configuration file.
|
||||||
|
|
||||||
See all available options at
|
See all available options at
|
||||||
https://github.com/ElementsProject/lightning/blob/master/doc/lightningd-config.5.md
|
https://github.com/ElementsProject/lightning/blob/master/doc/lightningd-config.5.md
|
||||||
or by running `lightningd --help`.
|
or by running {command}`lightningd --help`.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
user = mkOption {
|
user = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "clightning";
|
default = "clightning";
|
||||||
description = "The user as which to run clightning.";
|
description = mdDoc "The user as which to run clightning.";
|
||||||
};
|
};
|
||||||
group = mkOption {
|
group = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = cfg.user;
|
default = cfg.user;
|
||||||
description = "The group as which to run clightning.";
|
description = mdDoc "The group as which to run clightning.";
|
||||||
};
|
};
|
||||||
package = mkOption {
|
package = mkOption {
|
||||||
type = types.package;
|
type = types.package;
|
||||||
default = nbPkgs.clightning;
|
default = nbPkgs.clightning;
|
||||||
defaultText = "config.nix-bitcoin.pkgs.clightning";
|
defaultText = "config.nix-bitcoin.pkgs.clightning";
|
||||||
description = "The package providing clightning binaries.";
|
description = mdDoc "The package providing clightning binaries.";
|
||||||
};
|
};
|
||||||
cli = mkOption {
|
cli = mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
@ -85,12 +85,12 @@ let
|
|||||||
${cfg.package}/bin/lightning-cli --lightning-dir='${cfg.dataDir}' "$@"
|
${cfg.package}/bin/lightning-cli --lightning-dir='${cfg.dataDir}' "$@"
|
||||||
'';
|
'';
|
||||||
defaultText = "(See source)";
|
defaultText = "(See source)";
|
||||||
description = "Binary to connect with the clightning instance.";
|
description = mdDoc "Binary to connect with the clightning instance.";
|
||||||
};
|
};
|
||||||
getPublicAddressCmd = mkOption {
|
getPublicAddressCmd = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "";
|
default = "";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Bash expression which outputs the public service address to announce to peers.
|
Bash expression which outputs the public service address to announce to peers.
|
||||||
If left empty, no address is announced.
|
If left empty, no address is announced.
|
||||||
'';
|
'';
|
||||||
|
@ -7,37 +7,37 @@ let
|
|||||||
address = mkOption {
|
address = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "127.0.0.1";
|
default = "127.0.0.1";
|
||||||
description = "Address to listen for RPC connections.";
|
description = mdDoc "Address to listen for RPC connections.";
|
||||||
};
|
};
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 50001;
|
default = 50001;
|
||||||
description = "Port to listen for RPC connections.";
|
description = mdDoc "Port to listen for RPC connections.";
|
||||||
};
|
};
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = "/var/lib/electrs";
|
default = "/var/lib/electrs";
|
||||||
description = "The data directory for electrs.";
|
description = mdDoc "The data directory for electrs.";
|
||||||
};
|
};
|
||||||
monitoringPort = mkOption {
|
monitoringPort = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 4224;
|
default = 4224;
|
||||||
description = "Prometheus monitoring port.";
|
description = mdDoc "Prometheus monitoring port.";
|
||||||
};
|
};
|
||||||
extraArgs = mkOption {
|
extraArgs = mkOption {
|
||||||
type = types.separatedString " ";
|
type = types.separatedString " ";
|
||||||
default = "";
|
default = "";
|
||||||
description = "Extra command line arguments passed to electrs.";
|
description = mdDoc "Extra command line arguments passed to electrs.";
|
||||||
};
|
};
|
||||||
user = mkOption {
|
user = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "electrs";
|
default = "electrs";
|
||||||
description = "The user as which to run electrs.";
|
description = mdDoc "The user as which to run electrs.";
|
||||||
};
|
};
|
||||||
group = mkOption {
|
group = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = cfg.user;
|
default = cfg.user;
|
||||||
description = "The group as which to run electrs.";
|
description = mdDoc "The group as which to run electrs.";
|
||||||
};
|
};
|
||||||
tor.enforce = nbLib.tor.enforce;
|
tor.enforce = nbLib.tor.enforce;
|
||||||
};
|
};
|
||||||
|
@ -6,7 +6,7 @@ let
|
|||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Enable fulcrum, an Electrum server implemented in C++.
|
Enable fulcrum, an Electrum server implemented in C++.
|
||||||
|
|
||||||
Compared to electrs, fulcrum has a 3x larger database size but
|
Compared to electrs, fulcrum has a 3x larger database size but
|
||||||
@ -17,23 +17,23 @@ let
|
|||||||
|
|
||||||
This module disables peering (a distributed list of electrum servers that can
|
This module disables peering (a distributed list of electrum servers that can
|
||||||
be queried by clients), but you can manually enable it via option
|
be queried by clients), but you can manually enable it via option
|
||||||
`extraConfig`.
|
{option}`extraConfig`.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
address = mkOption {
|
address = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "127.0.0.1";
|
default = "127.0.0.1";
|
||||||
description = "Address to listen for RPC connections.";
|
description = mdDoc "Address to listen for RPC connections.";
|
||||||
};
|
};
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 50001;
|
default = 50001;
|
||||||
description = "Port to listen for RPC connections.";
|
description = mdDoc "Port to listen for RPC connections.";
|
||||||
};
|
};
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = "/var/lib/fulcrum";
|
default = "/var/lib/fulcrum";
|
||||||
description = "The data directory for fulcrum.";
|
description = mdDoc "The data directory for fulcrum.";
|
||||||
};
|
};
|
||||||
extraConfig = mkOption {
|
extraConfig = mkOption {
|
||||||
type = types.lines;
|
type = types.lines;
|
||||||
@ -41,7 +41,7 @@ let
|
|||||||
example = ''
|
example = ''
|
||||||
peering = true
|
peering = true
|
||||||
'';
|
'';
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Extra lines appended to the configuration file.
|
Extra lines appended to the configuration file.
|
||||||
|
|
||||||
See all available options at
|
See all available options at
|
||||||
@ -51,12 +51,12 @@ let
|
|||||||
user = mkOption {
|
user = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "fulcrum";
|
default = "fulcrum";
|
||||||
description = "The user as which to run fulcrum.";
|
description = mdDoc "The user as which to run fulcrum.";
|
||||||
};
|
};
|
||||||
group = mkOption {
|
group = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = cfg.user;
|
default = cfg.user;
|
||||||
description = "The group as which to run fulcrum.";
|
description = mdDoc "The group as which to run fulcrum.";
|
||||||
};
|
};
|
||||||
tor.enforce = nbLib.tor.enforce;
|
tor.enforce = nbLib.tor.enforce;
|
||||||
};
|
};
|
||||||
|
@ -6,21 +6,21 @@ let
|
|||||||
ledger = mkOption {
|
ledger = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
If enabled, the ledger udev rules will be installed.
|
If enabled, the ledger udev rules will be installed.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
trezor = mkOption {
|
trezor = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
If enabled, the trezor udev rules will be installed.
|
If enabled, the trezor udev rules will be installed.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
group = mkOption {
|
group = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "hardware-wallets";
|
default = "hardware-wallets";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Group the hardware wallet udev rules apply to.
|
Group the hardware wallet udev rules apply to.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
@ -7,27 +7,27 @@ let
|
|||||||
address = mkOption {
|
address = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "127.0.0.1";
|
default = "127.0.0.1";
|
||||||
description = "HTTP server address.";
|
description = mdDoc "HTTP server address.";
|
||||||
};
|
};
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 62601;
|
default = 62601;
|
||||||
description = "HTTP server port.";
|
description = mdDoc "HTTP server port.";
|
||||||
};
|
};
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
default = "/var/lib/joinmarket-ob-watcher";
|
default = "/var/lib/joinmarket-ob-watcher";
|
||||||
description = "The data directory for JoinMarket orderbook watcher.";
|
description = mdDoc "The data directory for JoinMarket orderbook watcher.";
|
||||||
};
|
};
|
||||||
user = mkOption {
|
user = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "joinmarket-ob-watcher";
|
default = "joinmarket-ob-watcher";
|
||||||
description = "The user as which to run JoinMarket.";
|
description = mdDoc "The user as which to run JoinMarket.";
|
||||||
};
|
};
|
||||||
group = mkOption {
|
group = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = cfg.user;
|
default = cfg.user;
|
||||||
description = "The group as which to run JoinMarket.";
|
description = mdDoc "The group as which to run JoinMarket.";
|
||||||
};
|
};
|
||||||
# This option is only used by netns-isolation.
|
# This option is only used by netns-isolation.
|
||||||
# Tor is always enabled.
|
# Tor is always enabled.
|
||||||
|
@ -7,7 +7,7 @@ let
|
|||||||
payjoinAddress = mkOption {
|
payjoinAddress = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "127.0.0.1";
|
default = "127.0.0.1";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
The address where payjoin onion connections are forwarded to.
|
The address where payjoin onion connections are forwarded to.
|
||||||
This address is never used directly, it only serves as the internal endpoint
|
This address is never used directly, it only serves as the internal endpoint
|
||||||
for the payjoin onion service.
|
for the payjoin onion service.
|
||||||
@ -18,12 +18,12 @@ let
|
|||||||
payjoinPort = mkOption {
|
payjoinPort = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 64180; # A random private port
|
default = 64180; # A random private port
|
||||||
description = "The port corresponding to option `payjoinAddress`.";
|
description = mdDoc "The port corresponding to option {option}`payjoinAddress`.";
|
||||||
};
|
};
|
||||||
messagingAddress = mkOption {
|
messagingAddress = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "127.0.0.1";
|
default = "127.0.0.1";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
The address where messaging onion connections are forwarded to.
|
The address where messaging onion connections are forwarded to.
|
||||||
This address is never used directly, it only serves as the internal endpoint
|
This address is never used directly, it only serves as the internal endpoint
|
||||||
for the messaging onion service.
|
for the messaging onion service.
|
||||||
@ -33,29 +33,29 @@ let
|
|||||||
messagingPort = mkOption {
|
messagingPort = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 64181; # payjoinPort + 1
|
default = 64181; # payjoinPort + 1
|
||||||
description = "The port corresponding to option `messagingAddress`.";
|
description = mdDoc "The port corresponding to option {option}`messagingAddress`.";
|
||||||
};
|
};
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = "/var/lib/joinmarket";
|
default = "/var/lib/joinmarket";
|
||||||
description = "The data directory for JoinMarket.";
|
description = mdDoc "The data directory for JoinMarket.";
|
||||||
};
|
};
|
||||||
rpcWalletFile = mkOption {
|
rpcWalletFile = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = "jm_wallet";
|
default = "jm_wallet";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Name of the watch-only bitcoind wallet the JoinMarket addresses are imported to.
|
Name of the watch-only bitcoind wallet the JoinMarket addresses are imported to.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
user = mkOption {
|
user = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "joinmarket";
|
default = "joinmarket";
|
||||||
description = "The user as which to run JoinMarket.";
|
description = mdDoc "The user as which to run JoinMarket.";
|
||||||
};
|
};
|
||||||
group = mkOption {
|
group = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = cfg.user;
|
default = cfg.user;
|
||||||
description = "The group as which to run JoinMarket.";
|
description = mdDoc "The group as which to run JoinMarket.";
|
||||||
};
|
};
|
||||||
cli = mkOption {
|
cli = mkOption {
|
||||||
default = cli;
|
default = cli;
|
||||||
@ -77,57 +77,57 @@ let
|
|||||||
ordertype = mkOption {
|
ordertype = mkOption {
|
||||||
type = types.enum [ "reloffer" "absoffer" ];
|
type = types.enum [ "reloffer" "absoffer" ];
|
||||||
default = "reloffer";
|
default = "reloffer";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Which fee type to actually use
|
Which fee type to actually use.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
cjfee_a = mkOption {
|
cjfee_a = mkOption {
|
||||||
type = types.ints.unsigned;
|
type = types.ints.unsigned;
|
||||||
default = 500;
|
default = 500;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Absolute offer fee you wish to receive for coinjoins (cj) in Satoshis
|
Absolute offer fee you wish to receive for coinjoins (cj) in Satoshis.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
cjfee_r = mkOption {
|
cjfee_r = mkOption {
|
||||||
type = types.float;
|
type = types.float;
|
||||||
default = 0.00002;
|
default = 0.00002;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Relative offer fee you wish to receive based on a cj's amount
|
Relative offer fee you wish to receive based on a cj's amount.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
cjfee_factor = mkOption {
|
cjfee_factor = mkOption {
|
||||||
type = types.float;
|
type = types.float;
|
||||||
default = 0.1;
|
default = 0.1;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Variance around the average cj fee
|
Variance around the average cj fee.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
txfee = mkOption {
|
txfee = mkOption {
|
||||||
type = types.ints.unsigned;
|
type = types.ints.unsigned;
|
||||||
default = 100;
|
default = 100;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
The average transaction fee you're adding to coinjoin transactions
|
The average transaction fee you're adding to coinjoin transactions.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
txfee_contribution_factor = mkOption {
|
txfee_contribution_factor = mkOption {
|
||||||
type = types.float;
|
type = types.float;
|
||||||
default = 0.3;
|
default = 0.3;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Variance around the average tx fee
|
Variance around the average tx fee.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
minsize = mkOption {
|
minsize = mkOption {
|
||||||
type = types.ints.unsigned;
|
type = types.ints.unsigned;
|
||||||
default = 100000;
|
default = 100000;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Minimum size of your cj offer in Satoshis. Lower cj amounts will be disregarded.
|
Minimum size of your cj offer in Satoshis. Lower cj amounts will be disregarded.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
size_factor = mkOption {
|
size_factor = mkOption {
|
||||||
type = types.float;
|
type = types.float;
|
||||||
default = 0.1;
|
default = 0.1;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Variance around all offer sizes
|
Variance around all offer sizes.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -7,56 +7,56 @@ let
|
|||||||
rpcAddress = mkOption {
|
rpcAddress = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "localhost";
|
default = "localhost";
|
||||||
description = "Address to listen for gRPC connections.";
|
description = mdDoc "Address to listen for gRPC connections.";
|
||||||
};
|
};
|
||||||
rpcPort = mkOption {
|
rpcPort = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 11010;
|
default = 11010;
|
||||||
description = "Port to listen for gRPC connections.";
|
description = mdDoc "Port to listen for gRPC connections.";
|
||||||
};
|
};
|
||||||
restAddress = mkOption {
|
restAddress = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = cfg.rpcAddress;
|
default = cfg.rpcAddress;
|
||||||
description = "Address to listen for REST connections.";
|
description = mdDoc "Address to listen for REST connections.";
|
||||||
};
|
};
|
||||||
restPort = mkOption {
|
restPort = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 8081;
|
default = 8081;
|
||||||
description = "Port to listen for REST connections.";
|
description = mdDoc "Port to listen for REST connections.";
|
||||||
};
|
};
|
||||||
package = mkOption {
|
package = mkOption {
|
||||||
type = types.package;
|
type = types.package;
|
||||||
default = config.nix-bitcoin.pkgs.lightning-loop;
|
default = config.nix-bitcoin.pkgs.lightning-loop;
|
||||||
defaultText = "config.nix-bitcoin.pkgs.lightning-loop";
|
defaultText = "config.nix-bitcoin.pkgs.lightning-loop";
|
||||||
description = "The package providing lightning-loop binaries.";
|
description = mdDoc "The package providing lightning-loop binaries.";
|
||||||
};
|
};
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = "/var/lib/lightning-loop";
|
default = "/var/lib/lightning-loop";
|
||||||
description = "The data directory for lightning-loop.";
|
description = mdDoc "The data directory for lightning-loop.";
|
||||||
};
|
};
|
||||||
proxy = mkOption {
|
proxy = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = if cfg.tor.proxy then config.nix-bitcoin.torClientAddressWithPort else null;
|
default = if cfg.tor.proxy then config.nix-bitcoin.torClientAddressWithPort else null;
|
||||||
description = "host:port of SOCKS5 proxy for connnecting to the loop server.";
|
description = mdDoc "`host:port` of SOCKS5 proxy for connnecting to the loop server.";
|
||||||
};
|
};
|
||||||
certificate = {
|
certificate = {
|
||||||
extraIPs = mkOption {
|
extraIPs = mkOption {
|
||||||
type = with types; listOf str;
|
type = with types; listOf str;
|
||||||
default = [];
|
default = [];
|
||||||
example = [ "60.100.0.1" ];
|
example = [ "60.100.0.1" ];
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Extra `subjectAltName` IPs added to the certificate.
|
Extra `subjectAltName` IPs added to the certificate.
|
||||||
This works the same as loop option `tlsextraip`.
|
This works the same as loop option {option}`tlsextraip`.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
extraDomains = mkOption {
|
extraDomains = mkOption {
|
||||||
type = with types; listOf str;
|
type = with types; listOf str;
|
||||||
default = [];
|
default = [];
|
||||||
example = [ "example.com" ];
|
example = [ "example.com" ];
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Extra `subjectAltName` domain names added to the certificate.
|
Extra `subjectAltName` domain names added to the certificate.
|
||||||
This works the same as loop option `tlsextradomain`.
|
This works the same as loop option {option}`tlsextradomain`.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -66,7 +66,7 @@ let
|
|||||||
example = ''
|
example = ''
|
||||||
debuglevel=trace
|
debuglevel=trace
|
||||||
'';
|
'';
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Extra lines appended to the configuration file.
|
Extra lines appended to the configuration file.
|
||||||
See here for all available options:
|
See here for all available options:
|
||||||
https://github.com/lightninglabs/loop/blob/11ab596080e9d36f1df43edbeba0702b25aa7457/loopd/config.go#L119
|
https://github.com/lightninglabs/loop/blob/11ab596080e9d36f1df43edbeba0702b25aa7457/loopd/config.go#L119
|
||||||
@ -80,7 +80,7 @@ let
|
|||||||
--tlscertpath '${secretsDir}/loop-cert' "$@"
|
--tlscertpath '${secretsDir}/loop-cert' "$@"
|
||||||
'';
|
'';
|
||||||
defaultText = "(See source)";
|
defaultText = "(See source)";
|
||||||
description = "Binary to connect with the lightning-loop instance.";
|
description = mdDoc "Binary to connect with the lightning-loop instance.";
|
||||||
};
|
};
|
||||||
tor = nbLib.tor;
|
tor = nbLib.tor;
|
||||||
};
|
};
|
||||||
|
@ -7,38 +7,38 @@ let
|
|||||||
rpcAddress = mkOption {
|
rpcAddress = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "localhost";
|
default = "localhost";
|
||||||
description = "Address to listen for gRPC connections.";
|
description = mdDoc "Address to listen for gRPC connections.";
|
||||||
};
|
};
|
||||||
rpcPort = mkOption {
|
rpcPort = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 12010;
|
default = 12010;
|
||||||
description = "Port to listen for gRPC connections.";
|
description = mdDoc "Port to listen for gRPC connections.";
|
||||||
};
|
};
|
||||||
restAddress = mkOption {
|
restAddress = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = cfg.rpcAddress;
|
default = cfg.rpcAddress;
|
||||||
description = "Address to listen for REST connections.";
|
description = mdDoc "Address to listen for REST connections.";
|
||||||
};
|
};
|
||||||
restPort = mkOption {
|
restPort = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 8281;
|
default = 8281;
|
||||||
description = "Port to listen for REST connections.";
|
description = mdDoc "Port to listen for REST connections.";
|
||||||
};
|
};
|
||||||
package = mkOption {
|
package = mkOption {
|
||||||
type = types.package;
|
type = types.package;
|
||||||
default = config.nix-bitcoin.pkgs.lightning-pool;
|
default = config.nix-bitcoin.pkgs.lightning-pool;
|
||||||
defaultText = "config.nix-bitcoin.pkgs.lightning-pool";
|
defaultText = "config.nix-bitcoin.pkgs.lightning-pool";
|
||||||
description = "The package providing lightning-pool binaries.";
|
description = mdDoc "The package providing lightning-pool binaries.";
|
||||||
};
|
};
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = "/var/lib/lightning-pool";
|
default = "/var/lib/lightning-pool";
|
||||||
description = "The data directory for lightning-pool.";
|
description = mdDoc "The data directory for lightning-pool.";
|
||||||
};
|
};
|
||||||
proxy = mkOption {
|
proxy = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = if cfg.tor.proxy then config.nix-bitcoin.torClientAddressWithPort else null;
|
default = if cfg.tor.proxy then config.nix-bitcoin.torClientAddressWithPort else null;
|
||||||
description = "host:port of SOCKS5 proxy for connnecting to the pool auction server.";
|
description = mdDoc "host:port of SOCKS5 proxy for connnecting to the pool auction server.";
|
||||||
};
|
};
|
||||||
extraConfig = mkOption {
|
extraConfig = mkOption {
|
||||||
type = types.lines;
|
type = types.lines;
|
||||||
@ -46,7 +46,7 @@ let
|
|||||||
example = ''
|
example = ''
|
||||||
debuglevel=trace
|
debuglevel=trace
|
||||||
'';
|
'';
|
||||||
description = "Extra lines appended to the configuration file.";
|
description = mdDoc "Extra lines appended to the configuration file.";
|
||||||
};
|
};
|
||||||
cli = mkOption {
|
cli = mkOption {
|
||||||
default = pkgs.writers.writeBashBin "pool" ''
|
default = pkgs.writers.writeBashBin "pool" ''
|
||||||
@ -56,7 +56,7 @@ let
|
|||||||
--basedir '${cfg.dataDir}' "$@"
|
--basedir '${cfg.dataDir}' "$@"
|
||||||
'';
|
'';
|
||||||
defaultText = "(See source)";
|
defaultText = "(See source)";
|
||||||
description = "Binary to connect with the lightning-pool instance.";
|
description = mdDoc "Binary to connect with the lightning-pool instance.";
|
||||||
};
|
};
|
||||||
tor = nbLib.tor;
|
tor = nbLib.tor;
|
||||||
};
|
};
|
||||||
|
@ -8,19 +8,19 @@ let
|
|||||||
address = mkOption {
|
address = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "127.0.0.1";
|
default = "127.0.0.1";
|
||||||
description = "Address to listen for peer connections.";
|
description = mdDoc "Address to listen for peer connections.";
|
||||||
};
|
};
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 7042;
|
default = 7042;
|
||||||
description = "Override the default port on which to listen for connections.";
|
description = mdDoc "Override the default port on which to listen for connections.";
|
||||||
};
|
};
|
||||||
onionPort = mkOption {
|
onionPort = mkOption {
|
||||||
type = types.nullOr types.port;
|
type = types.nullOr types.port;
|
||||||
# When the liquidd onion service is enabled, add an onion-tagged socket
|
# When the liquidd onion service is enabled, add an onion-tagged socket
|
||||||
# to distinguish local connections from Tor connections
|
# to distinguish local connections from Tor connections
|
||||||
default = if (config.nix-bitcoin.onionServices.liquidd.enable or false) then 7043 else null;
|
default = if (config.nix-bitcoin.onionServices.liquidd.enable or false) then 7043 else null;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Port to listen for Tor peer connections.
|
Port to listen for Tor peer connections.
|
||||||
If set, inbound connections to this port are tagged as onion peers.
|
If set, inbound connections to this port are tagged as onion peers.
|
||||||
'';
|
'';
|
||||||
@ -28,15 +28,15 @@ let
|
|||||||
listen = mkOption {
|
listen = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Listen for peer connections at `address:port`
|
Listen for peer connections at `address:port`
|
||||||
and `address:onionPort` (if `onionPort` is set).
|
and `address:onionPort` (if {option}`onionPort` is set).
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
listenWhitelisted = mkOption {
|
listenWhitelisted = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Listen for peer connections at `address:whitelistedPort`.
|
Listen for peer connections at `address:whitelistedPort`.
|
||||||
Peers connected through this socket are automatically whitelisted.
|
Peers connected through this socket are automatically whitelisted.
|
||||||
'';
|
'';
|
||||||
@ -44,7 +44,7 @@ let
|
|||||||
whitelistedPort = mkOption {
|
whitelistedPort = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 7044;
|
default = 7044;
|
||||||
description = "See `listenWhitelisted`.";
|
description = mdDoc "See {option}`listenWhitelisted`.";
|
||||||
};
|
};
|
||||||
extraConfig = mkOption {
|
extraConfig = mkOption {
|
||||||
type = types.lines;
|
type = types.lines;
|
||||||
@ -54,23 +54,23 @@ let
|
|||||||
rpcthreads=16
|
rpcthreads=16
|
||||||
logips=1
|
logips=1
|
||||||
'';
|
'';
|
||||||
description = "Extra lines appended to <filename>elements.conf</filename>.";
|
description = mdDoc "Extra lines appended to {file}`elements.conf`.";
|
||||||
};
|
};
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = "/var/lib/liquidd";
|
default = "/var/lib/liquidd";
|
||||||
description = "The data directory for liquidd.";
|
description = mdDoc "The data directory for liquidd.";
|
||||||
};
|
};
|
||||||
rpc = {
|
rpc = {
|
||||||
address = mkOption {
|
address = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "127.0.0.1";
|
default = "127.0.0.1";
|
||||||
description = "Address to listen for JSON-RPC connections.";
|
description = mdDoc "Address to listen for JSON-RPC connections.";
|
||||||
};
|
};
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 7041;
|
default = 7041;
|
||||||
description = "Port to listen for JSON-RPC connections.";
|
description = mdDoc "Port to listen for JSON-RPC connections.";
|
||||||
};
|
};
|
||||||
users = mkOption {
|
users = mkOption {
|
||||||
default = {};
|
default = {};
|
||||||
@ -79,7 +79,7 @@ let
|
|||||||
bob.passwordHMAC = "b2dd077cb54591a2f3139e69a897ac$4e71f08d48b4347cf8eff3815c0e25ae2e9a4340474079f55705f40574f4ec99";
|
bob.passwordHMAC = "b2dd077cb54591a2f3139e69a897ac$4e71f08d48b4347cf8eff3815c0e25ae2e9a4340474079f55705f40574f4ec99";
|
||||||
};
|
};
|
||||||
type = with types; attrsOf (submodule rpcUserOpts);
|
type = with types; attrsOf (submodule rpcUserOpts);
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
RPC user information for JSON-RPC connections.
|
RPC user information for JSON-RPC connections.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
@ -87,25 +87,25 @@ let
|
|||||||
rpcallowip = mkOption {
|
rpcallowip = mkOption {
|
||||||
type = types.listOf types.str;
|
type = types.listOf types.str;
|
||||||
default = [ "127.0.0.1" ];
|
default = [ "127.0.0.1" ];
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Allow JSON-RPC connections from specified source.
|
Allow JSON-RPC connections from specified source.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
rpcuser = mkOption {
|
rpcuser = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "liquidrpc";
|
default = "liquidrpc";
|
||||||
description = "Username for JSON-RPC connections";
|
description = mdDoc "Username for JSON-RPC connections";
|
||||||
};
|
};
|
||||||
proxy = mkOption {
|
proxy = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = if cfg.tor.proxy then config.nix-bitcoin.torClientAddressWithPort else null;
|
default = if cfg.tor.proxy then config.nix-bitcoin.torClientAddressWithPort else null;
|
||||||
description = "Connect through SOCKS5 proxy";
|
description = mdDoc "Connect through SOCKS5 proxy";
|
||||||
};
|
};
|
||||||
dbCache = mkOption {
|
dbCache = mkOption {
|
||||||
type = types.nullOr (types.ints.between 4 16384);
|
type = types.nullOr (types.ints.between 4 16384);
|
||||||
default = null;
|
default = null;
|
||||||
example = 4000;
|
example = 4000;
|
||||||
description = "Override the default database cache size in megabytes.";
|
description = mdDoc "Override the default database cache size in megabytes.";
|
||||||
};
|
};
|
||||||
prune = mkOption {
|
prune = mkOption {
|
||||||
type = types.nullOr (types.coercedTo
|
type = types.nullOr (types.coercedTo
|
||||||
@ -115,13 +115,13 @@ let
|
|||||||
);
|
);
|
||||||
default = null;
|
default = null;
|
||||||
example = 10000;
|
example = 10000;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Reduce storage requirements by enabling pruning (deleting) of old
|
Reduce storage requirements by enabling pruning (deleting) of old
|
||||||
blocks. This allows the pruneblockchain RPC to be called to delete
|
blocks. This allows the pruneblockchain RPC to be called to delete
|
||||||
specific blocks, and enables automatic pruning of old blocks if a
|
specific blocks, and enables automatic pruning of old blocks if a
|
||||||
target size in MiB is provided. This mode is incompatible with -txindex
|
target size in MiB is provided. This mode is incompatible with -txindex
|
||||||
and -rescan. Warning: Reverting this setting requires re-downloading
|
and -rescan. Warning: Reverting this setting requires re-downloading
|
||||||
the entire blockchain. ("disable" = disable pruning blocks, "manual"
|
the entire blockchain. (`disable` = disable pruning blocks, `manual`
|
||||||
= allow manual pruning via RPC, >=550 = automatically prune block files
|
= allow manual pruning via RPC, >=550 = automatically prune block files
|
||||||
to stay under the specified target size in MiB)
|
to stay under the specified target size in MiB)
|
||||||
'';
|
'';
|
||||||
@ -129,19 +129,19 @@ let
|
|||||||
validatepegin = mkOption {
|
validatepegin = mkOption {
|
||||||
type = types.nullOr types.bool;
|
type = types.nullOr types.bool;
|
||||||
default = null;
|
default = null;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Validate pegin claims. All functionaries must run this.
|
Validate pegin claims. All functionaries must run this.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
user = mkOption {
|
user = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "liquid";
|
default = "liquid";
|
||||||
description = "The user as which to run liquidd.";
|
description = mdDoc "The user as which to run liquidd.";
|
||||||
};
|
};
|
||||||
group = mkOption {
|
group = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = cfg.user;
|
default = cfg.user;
|
||||||
description = "The group as which to run liquidd.";
|
description = mdDoc "The group as which to run liquidd.";
|
||||||
};
|
};
|
||||||
cli = mkOption {
|
cli = mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
@ -149,14 +149,14 @@ let
|
|||||||
${nbPkgs.elementsd}/bin/elements-cli -datadir='${cfg.dataDir}' "$@"
|
${nbPkgs.elementsd}/bin/elements-cli -datadir='${cfg.dataDir}' "$@"
|
||||||
'';
|
'';
|
||||||
defaultText = "(See source)";
|
defaultText = "(See source)";
|
||||||
description = "Binary to connect with the liquidd instance.";
|
description = mdDoc "Binary to connect with the liquidd instance.";
|
||||||
};
|
};
|
||||||
swapCli = mkOption {
|
swapCli = mkOption {
|
||||||
default = pkgs.writers.writeBashBin "liquidswap-cli" ''
|
default = pkgs.writers.writeBashBin "liquidswap-cli" ''
|
||||||
${nbPkgs.liquid-swap}/bin/liquidswap-cli -c '${cfg.dataDir}/elements.conf' "$@"
|
${nbPkgs.liquid-swap}/bin/liquidswap-cli -c '${cfg.dataDir}/elements.conf' "$@"
|
||||||
'';
|
'';
|
||||||
defaultText = "(See source)";
|
defaultText = "(See source)";
|
||||||
description = "Binary for managing liquid swaps.";
|
description = mdDoc "Binary for managing liquid swaps.";
|
||||||
};
|
};
|
||||||
tor = nbLib.tor;
|
tor = nbLib.tor;
|
||||||
};
|
};
|
||||||
@ -215,16 +215,16 @@ let
|
|||||||
name = mkOption {
|
name = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
example = "alice";
|
example = "alice";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Username for JSON-RPC connections.
|
Username for JSON-RPC connections.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
passwordHMAC = mkOption {
|
passwordHMAC = mkOption {
|
||||||
type = with types; uniq (strMatching "[0-9a-f]+\\$[0-9a-f]{64}");
|
type = with types; uniq (strMatching "[0-9a-f]+\\$[0-9a-f]{64}");
|
||||||
example = "f7efda5c189b999524f151318c0c86$d5b51b3beffbc02b724e5d095828e0bc8b2456e9ac8757ae3211a5d9b16a22ae";
|
example = "f7efda5c189b999524f151318c0c86$d5b51b3beffbc02b724e5d095828e0bc8b2456e9ac8757ae3211a5d9b16a22ae";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Password HMAC-SHA-256 for JSON-RPC connections. Must be a string of the
|
Password HMAC-SHA-256 for JSON-RPC connections. Must be a string of the
|
||||||
format `salt-hex$hmac-hex`.
|
format `<SALT-HEX>$<HMAC-HEX>`.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -7,47 +7,47 @@ let
|
|||||||
address = mkOption {
|
address = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "localhost";
|
default = "localhost";
|
||||||
description = "Address to listen for peer connections";
|
description = mdDoc "Address to listen for peer connections";
|
||||||
};
|
};
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 9735;
|
default = 9735;
|
||||||
description = "Port to listen for peer connections";
|
description = mdDoc "Port to listen for peer connections";
|
||||||
};
|
};
|
||||||
rpcAddress = mkOption {
|
rpcAddress = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "localhost";
|
default = "localhost";
|
||||||
description = "Address to listen for RPC connections.";
|
description = mdDoc "Address to listen for RPC connections.";
|
||||||
};
|
};
|
||||||
rpcPort = mkOption {
|
rpcPort = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 10009;
|
default = 10009;
|
||||||
description = "Port to listen for gRPC connections.";
|
description = mdDoc "Port to listen for gRPC connections.";
|
||||||
};
|
};
|
||||||
restAddress = mkOption {
|
restAddress = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "localhost";
|
default = "localhost";
|
||||||
description = "Address to listen for REST connections.";
|
description = mdDoc "Address to listen for REST connections.";
|
||||||
};
|
};
|
||||||
restPort = mkOption {
|
restPort = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 8080;
|
default = 8080;
|
||||||
description = "Port to listen for REST connections.";
|
description = mdDoc "Port to listen for REST connections.";
|
||||||
};
|
};
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = "/var/lib/lnd";
|
default = "/var/lib/lnd";
|
||||||
description = "The data directory for LND.";
|
description = mdDoc "The data directory for LND.";
|
||||||
};
|
};
|
||||||
networkDir = mkOption {
|
networkDir = mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
default = "${cfg.dataDir}/chain/bitcoin/${bitcoind.network}";
|
default = "${cfg.dataDir}/chain/bitcoin/${bitcoind.network}";
|
||||||
description = "The network data directory.";
|
description = mdDoc "The network data directory.";
|
||||||
};
|
};
|
||||||
tor-socks = mkOption {
|
tor-socks = mkOption {
|
||||||
type = types.nullOr types.str;
|
type = types.nullOr types.str;
|
||||||
default = if cfg.tor.proxy then config.nix-bitcoin.torClientAddressWithPort else null;
|
default = if cfg.tor.proxy then config.nix-bitcoin.torClientAddressWithPort else null;
|
||||||
description = "Socks proxy for connecting to Tor nodes";
|
description = mdDoc "Socks proxy for connecting to Tor nodes";
|
||||||
};
|
};
|
||||||
macaroons = mkOption {
|
macaroons = mkOption {
|
||||||
default = {};
|
default = {};
|
||||||
@ -55,18 +55,18 @@ let
|
|||||||
options = {
|
options = {
|
||||||
user = mkOption {
|
user = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
description = "User who owns the macaroon.";
|
description = mdDoc "User who owns the macaroon.";
|
||||||
};
|
};
|
||||||
permissions = mkOption {
|
permissions = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
example = ''
|
example = ''
|
||||||
{"entity":"info","action":"read"},{"entity":"onchain","action":"read"}
|
{"entity":"info","action":"read"},{"entity":"onchain","action":"read"}
|
||||||
'';
|
'';
|
||||||
description = "List of granted macaroon permissions.";
|
description = mdDoc "List of granted macaroon permissions.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Extra macaroon definitions.
|
Extra macaroon definitions.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
@ -75,18 +75,18 @@ let
|
|||||||
type = with types; listOf str;
|
type = with types; listOf str;
|
||||||
default = [];
|
default = [];
|
||||||
example = [ "60.100.0.1" ];
|
example = [ "60.100.0.1" ];
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Extra `subjectAltName` IPs added to the certificate.
|
Extra `subjectAltName` IPs added to the certificate.
|
||||||
This works the same as lnd option `tlsextraip`.
|
This works the same as lnd option {option}`tlsextraip`.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
extraDomains = mkOption {
|
extraDomains = mkOption {
|
||||||
type = with types; listOf str;
|
type = with types; listOf str;
|
||||||
default = [];
|
default = [];
|
||||||
example = [ "example.com" ];
|
example = [ "example.com" ];
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Extra `subjectAltName` domain names added to the certificate.
|
Extra `subjectAltName` domain names added to the certificate.
|
||||||
This works the same as lnd option `tlsextradomain`.
|
This works the same as lnd option {option}`tlsextradomain`.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -96,8 +96,8 @@ let
|
|||||||
example = ''
|
example = ''
|
||||||
autopilot.active=1
|
autopilot.active=1
|
||||||
'';
|
'';
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Extra lines appended to `lnd.conf`.
|
Extra lines appended to {file}`lnd.conf`.
|
||||||
See here for all available options:
|
See here for all available options:
|
||||||
https://github.com/lightningnetwork/lnd/blob/master/sample-lnd.conf
|
https://github.com/lightningnetwork/lnd/blob/master/sample-lnd.conf
|
||||||
'';
|
'';
|
||||||
@ -106,7 +106,7 @@ let
|
|||||||
type = types.package;
|
type = types.package;
|
||||||
default = config.nix-bitcoin.pkgs.lnd;
|
default = config.nix-bitcoin.pkgs.lnd;
|
||||||
defaultText = "config.nix-bitcoin.pkgs.lnd";
|
defaultText = "config.nix-bitcoin.pkgs.lnd";
|
||||||
description = "The package providing lnd binaries.";
|
description = mdDoc "The package providing lnd binaries.";
|
||||||
};
|
};
|
||||||
cli = mkOption {
|
cli = mkOption {
|
||||||
default = pkgs.writers.writeBashBin "lncli"
|
default = pkgs.writers.writeBashBin "lncli"
|
||||||
@ -118,12 +118,12 @@ let
|
|||||||
--macaroonpath '${networkDir}/admin.macaroon' "$@"
|
--macaroonpath '${networkDir}/admin.macaroon' "$@"
|
||||||
'';
|
'';
|
||||||
defaultText = "(See source)";
|
defaultText = "(See source)";
|
||||||
description = "Binary to connect with the lnd instance.";
|
description = mdDoc "Binary to connect with the lnd instance.";
|
||||||
};
|
};
|
||||||
getPublicAddressCmd = mkOption {
|
getPublicAddressCmd = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "";
|
default = "";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Bash expression which outputs the public service address to announce to peers.
|
Bash expression which outputs the public service address to announce to peers.
|
||||||
If left empty, no address is announced.
|
If left empty, no address is announced.
|
||||||
'';
|
'';
|
||||||
@ -131,17 +131,17 @@ let
|
|||||||
user = mkOption {
|
user = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "lnd";
|
default = "lnd";
|
||||||
description = "The user as which to run LND.";
|
description = mdDoc "The user as which to run LND.";
|
||||||
};
|
};
|
||||||
group = mkOption {
|
group = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = cfg.user;
|
default = cfg.user;
|
||||||
description = "The group as which to run LND.";
|
description = mdDoc "The group as which to run LND.";
|
||||||
};
|
};
|
||||||
certPath = mkOption {
|
certPath = mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
default = "${secretsDir}/lnd-cert";
|
default = "${secretsDir}/lnd-cert";
|
||||||
description = "LND TLS certificate path.";
|
description = mdDoc "LND TLS certificate path.";
|
||||||
};
|
};
|
||||||
tor = nbLib.tor;
|
tor = nbLib.tor;
|
||||||
};
|
};
|
||||||
|
@ -6,13 +6,13 @@ let
|
|||||||
services.lnd.lndconnectOnion.enable = mkOption {
|
services.lnd.lndconnectOnion.enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Create an onion service for the lnd REST server.
|
Create an onion service for the lnd REST server.
|
||||||
Add a `lndconnect-onion` binary to the system environment.
|
Add a `lndconnect-onion` binary to the system environment.
|
||||||
See: https://github.com/LN-Zap/lndconnect
|
See: https://github.com/LN-Zap/lndconnect
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
```
|
```bash
|
||||||
# Print QR code
|
# Print QR code
|
||||||
lndconnect-onion
|
lndconnect-onion
|
||||||
|
|
||||||
@ -25,13 +25,13 @@ let
|
|||||||
services.clightning-rest.lndconnectOnion.enable = mkOption {
|
services.clightning-rest.lndconnectOnion.enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Create an onion service for clightning-rest.
|
Create an onion service for clightning-rest.
|
||||||
Add a `lndconnect-onion-clightning` binary to the system environment.
|
Add a `lndconnect-onion-clightning` binary to the system environment.
|
||||||
See: https://github.com/LN-Zap/lndconnect
|
See: https://github.com/LN-Zap/lndconnect
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
```
|
```bash
|
||||||
# Print QR code
|
# Print QR code
|
||||||
lndconnect-onion-clightning
|
lndconnect-onion-clightning
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ let
|
|||||||
addressblock = mkOption {
|
addressblock = mkOption {
|
||||||
type = types.ints.u8;
|
type = types.ints.u8;
|
||||||
default = 1;
|
default = 1;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
The address block N in 169.254.N.0/24, used as the prefix for netns addresses.
|
The address block N in 169.254.N.0/24, used as the prefix for netns addresses.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
@ -20,7 +20,7 @@ let
|
|||||||
id = mkOption {
|
id = mkOption {
|
||||||
# TODO: Assert uniqueness
|
# TODO: Assert uniqueness
|
||||||
type = types.ints.between 11 255;
|
type = types.ints.between 11 255;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
id for the netns, used for the IP address host part and
|
id for the netns, used for the IP address host part and
|
||||||
for naming the interfaces. Must be unique. Must be greater than 10.
|
for naming the interfaces. Must be unique. Must be greater than 10.
|
||||||
'';
|
'';
|
||||||
@ -35,7 +35,7 @@ let
|
|||||||
|
|
||||||
allowedUser = mkOption {
|
allowedUser = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
User that is allowed to execute commands in the service network namespaces.
|
User that is allowed to execute commands in the service network namespaces.
|
||||||
The user's group is also authorized.
|
The user's group is also authorized.
|
||||||
'';
|
'';
|
||||||
@ -45,13 +45,13 @@ let
|
|||||||
netns = mkOption {
|
netns = mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
default = netns;
|
default = netns;
|
||||||
description = "Exposes netns parameters.";
|
description = mdDoc "Exposes netns parameters.";
|
||||||
};
|
};
|
||||||
|
|
||||||
bridgeIp = mkOption {
|
bridgeIp = mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
default = bridgeIp;
|
default = bridgeIp;
|
||||||
description = "IP of the netns bridge interface.";
|
description = mdDoc "IP of the netns bridge interface.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -39,8 +39,7 @@ with lib;
|
|||||||
runAsUserCmd = mkOption {
|
runAsUserCmd = mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
default = if config.security.doas.enable
|
default = if config.security.doas.enable
|
||||||
# TODO-EXTERNAL: Use absolute path until https://github.com/NixOS/nixpkgs/pull/133622 is available.
|
then "doas -u"
|
||||||
then "/run/wrappers/bin/doas -u"
|
|
||||||
else "sudo -u";
|
else "sudo -u";
|
||||||
defaultText = "(See source)";
|
defaultText = "(See source)";
|
||||||
};
|
};
|
||||||
|
@ -17,7 +17,7 @@ let
|
|||||||
type = types.attrs;
|
type = types.attrs;
|
||||||
default = {};
|
default = {};
|
||||||
defaultText = "(See source)";
|
defaultText = "(See source)";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Nodeinfo service definitions.
|
Nodeinfo service definitions.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
@ -27,7 +27,7 @@ let
|
|||||||
readOnly = true;
|
readOnly = true;
|
||||||
default = nodeinfoLib;
|
default = nodeinfoLib;
|
||||||
defaultText = "(See source)";
|
defaultText = "(See source)";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Helper functions for defining nodeinfo services.
|
Helper functions for defining nodeinfo services.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
@ -12,23 +12,25 @@ let
|
|||||||
access = mkOption {
|
access = mkOption {
|
||||||
type = with types; attrsOf (listOf str);
|
type = with types; attrsOf (listOf str);
|
||||||
default = {};
|
default = {};
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
This option controls who is allowed to access onion addresses.
|
This option controls who is allowed to access onion addresses.
|
||||||
For example, the following allows user 'myuser' to access bitcoind
|
For example, the following allows user 'myuser' to access bitcoind
|
||||||
and clightning onion addresses:
|
and clightning onion addresses:
|
||||||
|
```nix
|
||||||
{
|
{
|
||||||
"myuser" = [ "bitcoind" "clightning" ];
|
"myuser" = [ "bitcoind" "clightning" ];
|
||||||
};
|
};
|
||||||
|
```
|
||||||
The onion hostnames can then be read from
|
The onion hostnames can then be read from
|
||||||
/var/lib/onion-addresses/myuser.
|
{file}`/var/lib/onion-addresses/myuser`.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
services = mkOption {
|
services = mkOption {
|
||||||
type = with types; listOf str;
|
type = with types; listOf str;
|
||||||
default = [];
|
default = [];
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Services that can access their onion address via file
|
Services that can access their onion address via file
|
||||||
`/var/lib/onion-addresses/$service`
|
{file}`/var/lib/onion-addresses/<service>`
|
||||||
The file is readable only by the service user.
|
The file is readable only by the service user.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
@ -16,24 +16,24 @@ let
|
|||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = config.public;
|
default = config.public;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Create an onion service for the given service.
|
Create an onion service for the given service.
|
||||||
The service must define options 'address' and 'onionPort' (or `port`).
|
The service must define options {option}'address' and {option}'onionPort' (or `port`).
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
public = mkOption {
|
public = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Make the onion address accessible to the service.
|
Make the onion address accessible to the service.
|
||||||
If enabled, the onion service is automatically enabled.
|
If enabled, the onion service is automatically enabled.
|
||||||
Only available for services that define option `getPublicAddressCmd`.
|
Only available for services that define option {option}`getPublicAddressCmd`.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
externalPort = mkOption {
|
externalPort = mkOption {
|
||||||
type = types.nullOr types.port;
|
type = types.nullOr types.port;
|
||||||
default = null;
|
default = null;
|
||||||
description = "Override the external port of the onion service.";
|
description = mdDoc "Override the external port of the onion service.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ let
|
|||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Whether to define a user named `operator` for convenient interactive access
|
Whether to define a user named `operator` for convenient interactive access
|
||||||
to nix-bitcoin features (like `bitcoin-cli`).
|
to nix-bitcoin features (like `bitcoin-cli`).
|
||||||
|
|
||||||
@ -18,17 +18,17 @@ let
|
|||||||
name = mkOption {
|
name = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "operator";
|
default = "operator";
|
||||||
description = "Name of the operator user.";
|
description = mdDoc "Name of the operator user.";
|
||||||
};
|
};
|
||||||
groups = mkOption {
|
groups = mkOption {
|
||||||
type = with types; listOf str;
|
type = with types; listOf str;
|
||||||
default = [];
|
default = [];
|
||||||
description = "Extra groups of the operatur user.";
|
description = mdDoc "Extra groups of the operatur user.";
|
||||||
};
|
};
|
||||||
allowRunAsUsers = mkOption {
|
allowRunAsUsers = mkOption {
|
||||||
type = with types; listOf str;
|
type = with types; listOf str;
|
||||||
default = [];
|
default = [];
|
||||||
description = "Users as which the operator is allowed to run commands.";
|
description = mdDoc "Users as which the operator is allowed to run commands.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -7,24 +7,24 @@ let
|
|||||||
address = mkOption {
|
address = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "127.0.0.1";
|
default = "127.0.0.1";
|
||||||
description = "HTTP server address.";
|
description = mdDoc "HTTP server address.";
|
||||||
};
|
};
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 3000;
|
default = 3000;
|
||||||
description = "HTTP server port.";
|
description = mdDoc "HTTP server port.";
|
||||||
};
|
};
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = "/var/lib/rtl";
|
default = "/var/lib/rtl";
|
||||||
description = "The data directory for RTL.";
|
description = mdDoc "The data directory for RTL.";
|
||||||
};
|
};
|
||||||
nodes = {
|
nodes = {
|
||||||
clightning = {
|
clightning = {
|
||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = "Enable the clightning node interface.";
|
description = mdDoc "Enable the clightning node interface.";
|
||||||
};
|
};
|
||||||
extraConfig = mkOption {
|
extraConfig = mkOption {
|
||||||
type = types.attrs;
|
type = types.attrs;
|
||||||
@ -33,7 +33,7 @@ let
|
|||||||
Settings.userPersona = "MERCHANT";
|
Settings.userPersona = "MERCHANT";
|
||||||
Settings.logLevel = "DEBUG";
|
Settings.logLevel = "DEBUG";
|
||||||
};
|
};
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Extra clightning node configuration.
|
Extra clightning node configuration.
|
||||||
See here for all available options:
|
See here for all available options:
|
||||||
https://github.com/Ride-The-Lightning/RTL/blob/master/.github/docs/Application_configurations.md
|
https://github.com/Ride-The-Lightning/RTL/blob/master/.github/docs/Application_configurations.md
|
||||||
@ -44,12 +44,12 @@ let
|
|||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = "Enable the lnd node interface.";
|
description = mdDoc "Enable the lnd node interface.";
|
||||||
};
|
};
|
||||||
loop = mkOption {
|
loop = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = "Enable swaps with lightning-loop.";
|
description = mdDoc "Enable swaps with lightning-loop.";
|
||||||
};
|
};
|
||||||
extraConfig = mkOption {
|
extraConfig = mkOption {
|
||||||
type = types.attrs;
|
type = types.attrs;
|
||||||
@ -58,7 +58,7 @@ let
|
|||||||
Settings.userPersona = "MERCHANT";
|
Settings.userPersona = "MERCHANT";
|
||||||
Settings.logLevel = "DEBUG";
|
Settings.logLevel = "DEBUG";
|
||||||
};
|
};
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Extra lnd node configuration.
|
Extra lnd node configuration.
|
||||||
See here for all available options:
|
See here for all available options:
|
||||||
https://github.com/Ride-The-Lightning/RTL/blob/master/.github/docs/Application_configurations.md
|
https://github.com/Ride-The-Lightning/RTL/blob/master/.github/docs/Application_configurations.md
|
||||||
@ -68,7 +68,7 @@ let
|
|||||||
reverseOrder = mkOption {
|
reverseOrder = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Reverse the order of nodes shown in the UI.
|
Reverse the order of nodes shown in the UI.
|
||||||
By default, clightning is shown before lnd.
|
By default, clightning is shown before lnd.
|
||||||
'';
|
'';
|
||||||
@ -77,28 +77,28 @@ let
|
|||||||
nightTheme = mkOption {
|
nightTheme = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = "Enable the Night UI Theme.";
|
description = mdDoc "Enable the Night UI Theme.";
|
||||||
};
|
};
|
||||||
extraCurrency = mkOption {
|
extraCurrency = mkOption {
|
||||||
type = with types; nullOr str;
|
type = with types; nullOr str;
|
||||||
default = null;
|
default = null;
|
||||||
example = "USD";
|
example = "USD";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Currency code (ISO 4217) of the extra currency used for displaying balances.
|
Currency code (ISO 4217) of the extra currency used for displaying balances.
|
||||||
When set, this option enables online currency rate fetching.
|
When set, this option enables online currency rate fetching.
|
||||||
Warning: Rate fetching requires outgoing clearnet connections, so option
|
Warning: Rate fetching requires outgoing clearnet connections, so option
|
||||||
`tor.enforce` is automatically disabled.
|
{option}`tor.enforce` is automatically disabled.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
user = mkOption {
|
user = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "rtl";
|
default = "rtl";
|
||||||
description = "The user as which to run RTL.";
|
description = mdDoc "The user as which to run RTL.";
|
||||||
};
|
};
|
||||||
group = mkOption {
|
group = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = cfg.user;
|
default = cfg.user;
|
||||||
description = "The group as which to run RTL.";
|
description = mdDoc "The group as which to run RTL.";
|
||||||
};
|
};
|
||||||
tor.enforce = nbLib.tor.enforce;
|
tor.enforce = nbLib.tor.enforce;
|
||||||
};
|
};
|
||||||
|
@ -6,14 +6,14 @@ let
|
|||||||
secretsDir = mkOption {
|
secretsDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = "/etc/nix-bitcoin-secrets";
|
default = "/etc/nix-bitcoin-secrets";
|
||||||
description = "Directory to store secrets";
|
description = mdDoc "Directory to store secrets";
|
||||||
};
|
};
|
||||||
|
|
||||||
setupSecrets = mkOption {
|
setupSecrets = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Set permissions for existing secrets in `nix-bitcoin.secretsDir`
|
Set permissions for existing secrets in {option}`nix-bitcoin.secretsDir`
|
||||||
before services are started.
|
before services are started.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
@ -21,7 +21,7 @@ let
|
|||||||
generateSecrets = mkOption {
|
generateSecrets = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Automatically generate all required secrets before services are started.
|
Automatically generate all required secrets before services are started.
|
||||||
Note: Make sure to create a backup of the generated secrets.
|
Note: Make sure to create a backup of the generated secrets.
|
||||||
'';
|
'';
|
||||||
@ -30,7 +30,7 @@ let
|
|||||||
generateSecretsCmds = mkOption {
|
generateSecretsCmds = mkOption {
|
||||||
type = types.attrsOf types.str;
|
type = types.attrsOf types.str;
|
||||||
default = {};
|
default = {};
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Bash expressions for generating secrets.
|
Bash expressions for generating secrets.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
@ -38,7 +38,7 @@ let
|
|||||||
# Currently, this is used only by ../deployment/nixops.nix
|
# Currently, this is used only by ../deployment/nixops.nix
|
||||||
deployment.secretsDir = mkOption {
|
deployment.secretsDir = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Directory of local secrets that are transferred to the nix-bitcoin node on deployment
|
Directory of local secrets that are transferred to the nix-bitcoin node on deployment
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
@ -6,16 +6,16 @@ with lib;
|
|||||||
nix-bitcoin.security.dbusHideProcessInformation = mkOption {
|
nix-bitcoin.security.dbusHideProcessInformation = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Only allow users with group 'proc' to retrieve systemd unit information like
|
Only allow users with group `proc` to retrieve systemd unit information like
|
||||||
cgroup paths (i.e. (sub)process command lines) via D-Bus.
|
cgroup paths (i.e. (sub)process command lines) via D-Bus.
|
||||||
|
|
||||||
This mitigates a systemd security issue where (sub)process command lines can
|
This mitigates a systemd security issue where (sub)process command lines can
|
||||||
be retrieved by services even when their access to /proc is restricted
|
be retrieved by services even when their access to /proc is restricted
|
||||||
(via ProtectProc).
|
(via ProtectProc).
|
||||||
|
|
||||||
This option works by restricting the D-Bus method 'GetUnitProcesses', which
|
This option works by restricting the D-Bus method `GetUnitProcesses`, which
|
||||||
is also used internally by `systemctl status`.
|
is also used internally by {command}`systemctl status`.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -7,22 +7,22 @@ let
|
|||||||
address = mkOption {
|
address = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "localhost";
|
default = "localhost";
|
||||||
description = "http(s) server address.";
|
description = mdDoc "http(s) server address.";
|
||||||
};
|
};
|
||||||
port = mkOption {
|
port = mkOption {
|
||||||
type = types.port;
|
type = types.port;
|
||||||
default = 9737;
|
default = 9737;
|
||||||
description = "http(s) server port.";
|
description = mdDoc "http(s) server port.";
|
||||||
};
|
};
|
||||||
extraArgs = mkOption {
|
extraArgs = mkOption {
|
||||||
type = types.separatedString " ";
|
type = types.separatedString " ";
|
||||||
default = "";
|
default = "";
|
||||||
description = "Extra command line arguments passed to spark-wallet.";
|
description = mdDoc "Extra command line arguments passed to spark-wallet.";
|
||||||
};
|
};
|
||||||
getPublicAddressCmd = mkOption {
|
getPublicAddressCmd = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "";
|
default = "";
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Bash expression which outputs the public service address.
|
Bash expression which outputs the public service address.
|
||||||
If set, spark-wallet prints a QR code to the systemd journal which
|
If set, spark-wallet prints a QR code to the systemd journal which
|
||||||
encodes an URL for accessing the web interface.
|
encodes an URL for accessing the web interface.
|
||||||
@ -31,12 +31,12 @@ let
|
|||||||
user = mkOption {
|
user = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "spark-wallet";
|
default = "spark-wallet";
|
||||||
description = "The user as which to run spark-wallet.";
|
description = mdDoc "The user as which to run spark-wallet.";
|
||||||
};
|
};
|
||||||
group = mkOption {
|
group = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = cfg.user;
|
default = cfg.user;
|
||||||
description = "The group as which to run spark-wallet.";
|
description = mdDoc "The group as which to run spark-wallet.";
|
||||||
};
|
};
|
||||||
tor = nbLib.tor;
|
tor = nbLib.tor;
|
||||||
};
|
};
|
||||||
|
@ -11,7 +11,7 @@ let
|
|||||||
nix-bitcoin.configVersion = mkOption {
|
nix-bitcoin.configVersion = mkOption {
|
||||||
type = with types; nullOr str;
|
type = with types; nullOr str;
|
||||||
default = null;
|
default = null;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Set this option to the nix-bitcoin release version that your config is
|
Set this option to the nix-bitcoin release version that your config is
|
||||||
compatible with.
|
compatible with.
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ let
|
|||||||
description = "Lightning node exporter for the prometheus timeseries server";
|
description = "Lightning node exporter for the prometheus timeseries server";
|
||||||
extraPkgs = [ prometheus_client ];
|
extraPkgs = [ prometheus_client ];
|
||||||
patchRequirements =
|
patchRequirements =
|
||||||
"--replace prometheus-client==0.6.0 prometheus-client==0.13.1"
|
"--replace prometheus-client==0.6.0 prometheus-client==0.15.0"
|
||||||
+ " --replace pyln-client~=0.9.3 pyln-client~=22.11rc1";
|
+ " --replace pyln-client~=0.9.3 pyln-client~=22.11rc1";
|
||||||
};
|
};
|
||||||
rebalance = {
|
rebalance = {
|
||||||
@ -80,7 +80,7 @@ let
|
|||||||
inherit (plugin) description;
|
inherit (plugin) description;
|
||||||
homepage = "https://github.com/lightningd/plugins";
|
homepage = "https://github.com/lightningd/plugins";
|
||||||
license = licenses.bsd3;
|
license = licenses.bsd3;
|
||||||
maintainers = with maintainers; [ nixbitcoin earvstedt ];
|
maintainers = with maintainers; [ nixbitcoin erikarvstedt ];
|
||||||
platforms = platforms.unix;
|
platforms = platforms.unix;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -49,7 +49,7 @@ let self = stdenvNoCC.mkDerivation {
|
|||||||
description = "REST API for C-Lightning";
|
description = "REST API for C-Lightning";
|
||||||
homepage = "https://github.com/Ride-The-Lightning/c-lightning-REST";
|
homepage = "https://github.com/Ride-The-Lightning/c-lightning-REST";
|
||||||
license = licenses.mit;
|
license = licenses.mit;
|
||||||
maintainers = with maintainers; [ nixbitcoin earvstedt ];
|
maintainers = with maintainers; [ nixbitcoin erikarvstedt ];
|
||||||
platforms = platforms.unix;
|
platforms = platforms.unix;
|
||||||
};
|
};
|
||||||
}; in self
|
}; in self
|
||||||
|
@ -13,7 +13,7 @@ let self = {
|
|||||||
clightning-rest = pkgs.callPackage ./clightning-rest { inherit (self) fetchNodeModules; };
|
clightning-rest = pkgs.callPackage ./clightning-rest { inherit (self) fetchNodeModules; };
|
||||||
clboss = pkgs.callPackage ./clboss { };
|
clboss = pkgs.callPackage ./clboss { };
|
||||||
clightning-plugins = pkgs.recurseIntoAttrs (import ./clightning-plugins pkgs self.nbPython3Packages);
|
clightning-plugins = pkgs.recurseIntoAttrs (import ./clightning-plugins pkgs self.nbPython3Packages);
|
||||||
joinmarket = pkgs.callPackage ./joinmarket { nbPythonPackageOverrides = import ./python-packages self; };
|
joinmarket = pkgs.callPackage ./joinmarket { inherit (self) nbPython3PackagesJoinmarket; };
|
||||||
lndinit = pkgs.callPackage ./lndinit { };
|
lndinit = pkgs.callPackage ./lndinit { };
|
||||||
liquid-swap = pkgs.python3Packages.callPackage ./liquid-swap { };
|
liquid-swap = pkgs.python3Packages.callPackage ./liquid-swap { };
|
||||||
rtl = pkgs.callPackage ./rtl { inherit (self) fetchNodeModules; };
|
rtl = pkgs.callPackage ./rtl { inherit (self) fetchNodeModules; };
|
||||||
@ -21,9 +21,10 @@ let self = {
|
|||||||
secp256k1 = pkgs.callPackage ./secp256k1 { };
|
secp256k1 = pkgs.callPackage ./secp256k1 { };
|
||||||
spark-wallet = pkgs.callPackage ./spark-wallet { };
|
spark-wallet = pkgs.callPackage ./spark-wallet { };
|
||||||
|
|
||||||
nbPython3Packages = (pkgs.python3.override {
|
pyPkgs = import ./python-packages self pkgs.python3;
|
||||||
packageOverrides = import ./python-packages self;
|
inherit (self.pyPkgs)
|
||||||
}).pkgs;
|
nbPython3Packages
|
||||||
|
nbPython3PackagesJoinmarket;
|
||||||
|
|
||||||
fetchNodeModules = pkgs.callPackage ./build-support/fetch-node-modules.nix { };
|
fetchNodeModules = pkgs.callPackage ./build-support/fetch-node-modules.nix { };
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{ stdenv, lib, fetchurl, python3, nbPythonPackageOverrides, pkgs }:
|
{ stdenv, lib, fetchurl, python3, nbPython3PackagesJoinmarket }:
|
||||||
|
|
||||||
let
|
let
|
||||||
version = "0.9.8";
|
version = "0.9.8";
|
||||||
@ -7,17 +7,7 @@ let
|
|||||||
sha256 = "1ab4smpyx966iiiip3g11bcslya37qhac1kgkbmsmlsdkpilw9di";
|
sha256 = "1ab4smpyx966iiiip3g11bcslya37qhac1kgkbmsmlsdkpilw9di";
|
||||||
};
|
};
|
||||||
|
|
||||||
pyPkgs = (python3.override {
|
runtimePackages = with nbPython3PackagesJoinmarket; [
|
||||||
packageOverrides = (self: super: let
|
|
||||||
overrides = nbPythonPackageOverrides self super;
|
|
||||||
in
|
|
||||||
overrides // {
|
|
||||||
cryptography = overrides.cryptography_3_3_2;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}).pkgs;
|
|
||||||
|
|
||||||
runtimePackages = with pyPkgs; [
|
|
||||||
joinmarketbase
|
joinmarketbase
|
||||||
joinmarketclient
|
joinmarketclient
|
||||||
joinmarketbitcoin
|
joinmarketbitcoin
|
||||||
|
@ -19,6 +19,6 @@ buildGoModule rec {
|
|||||||
description = "Wallet initializer utility for lnd";
|
description = "Wallet initializer utility for lnd";
|
||||||
homepage = "https://github.com/lightninglabs/lndinit";
|
homepage = "https://github.com/lightninglabs/lndinit";
|
||||||
license = licenses.mit;
|
license = licenses.mit;
|
||||||
maintainers = with maintainers; [ earvstedt ];
|
maintainers = with maintainers; [ erikarvstedt ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -2,23 +2,23 @@
|
|||||||
pkgs: pkgsUnstable:
|
pkgs: pkgsUnstable:
|
||||||
{
|
{
|
||||||
inherit (pkgs)
|
inherit (pkgs)
|
||||||
lightning-pool
|
|
||||||
lndconnect;
|
|
||||||
|
|
||||||
inherit (pkgsUnstable)
|
|
||||||
bitcoin
|
bitcoin
|
||||||
bitcoind
|
bitcoind
|
||||||
btcpayserver
|
btcpayserver
|
||||||
charge-lnd
|
|
||||||
clightning
|
|
||||||
electrs
|
electrs
|
||||||
elementsd
|
elementsd
|
||||||
extra-container
|
extra-container
|
||||||
fulcrum
|
fulcrum
|
||||||
hwi
|
hwi
|
||||||
lightning-loop
|
lightning-loop
|
||||||
lnd
|
lightning-pool
|
||||||
|
lndconnect
|
||||||
nbxplorer;
|
nbxplorer;
|
||||||
|
|
||||||
|
inherit (pkgsUnstable)
|
||||||
|
charge-lnd
|
||||||
|
clightning
|
||||||
|
lnd;
|
||||||
|
|
||||||
inherit pkgs pkgsUnstable;
|
inherit pkgs pkgsUnstable;
|
||||||
}
|
}
|
||||||
|
@ -1,51 +1,67 @@
|
|||||||
nbPkgs: self: super:
|
nbPkgs: python3:
|
||||||
let
|
rec {
|
||||||
inherit (self) callPackage;
|
pyPkgsOverrides = self: super: let
|
||||||
|
inherit (self) callPackage;
|
||||||
|
clightningPkg = pkg: callPackage pkg { inherit (nbPkgs.pinned) clightning; };
|
||||||
|
in
|
||||||
|
{
|
||||||
|
coincurve = callPackage ./coincurve {};
|
||||||
|
txzmq = callPackage ./txzmq {};
|
||||||
|
|
||||||
joinmarketPkg = pkg: callPackage pkg { inherit (nbPkgs.joinmarket) version src; };
|
pyln-client = clightningPkg ./pyln-client;
|
||||||
clightningPkg = pkg: callPackage pkg { inherit (nbPkgs.pinned) clightning; };
|
pyln-proto = clightningPkg ./pyln-proto;
|
||||||
|
pyln-bolt7 = clightningPkg ./pyln-bolt7;
|
||||||
|
pylightning = clightningPkg ./pylightning;
|
||||||
|
|
||||||
unstable = (import ../nixpkgs-pinned.nix).nixpkgs-unstable;
|
# Packages only used by joinmarket
|
||||||
in {
|
bencoderpyx = callPackage ./bencoderpyx {};
|
||||||
bencoderpyx = callPackage ./bencoderpyx {};
|
chromalog = callPackage ./chromalog {};
|
||||||
chromalog = callPackage ./chromalog {};
|
python-bitcointx = callPackage ./python-bitcointx {
|
||||||
coincurve = callPackage ./coincurve {};
|
inherit (nbPkgs) secp256k1;
|
||||||
python-bitcointx = callPackage ./python-bitcointx { inherit (nbPkgs) secp256k1; };
|
openssl = super.pkgs.openssl_1_1;
|
||||||
runes = callPackage ./runes {};
|
};
|
||||||
sha256 = callPackage ./sha256 {};
|
runes = callPackage ./runes {};
|
||||||
txzmq = callPackage ./txzmq {};
|
sha256 = callPackage ./sha256 {};
|
||||||
urldecode = callPackage ./urldecode {};
|
urldecode = callPackage ./urldecode {};
|
||||||
|
};
|
||||||
|
|
||||||
joinmarketbase = joinmarketPkg ./jmbase;
|
# Joinmarket requires a custom package set because it uses older versions of Python pkgs
|
||||||
joinmarketclient = joinmarketPkg ./jmclient;
|
pyPkgsOverridesJoinmarket = self: super: let
|
||||||
joinmarketbitcoin = joinmarketPkg ./jmbitcoin;
|
inherit (self) callPackage;
|
||||||
joinmarketdaemon = joinmarketPkg ./jmdaemon;
|
joinmarketPkg = pkg: callPackage pkg { inherit (nbPkgs.joinmarket) version src; };
|
||||||
|
in
|
||||||
|
(pyPkgsOverrides self super) // {
|
||||||
|
joinmarketbase = joinmarketPkg ./jmbase;
|
||||||
|
joinmarketclient = joinmarketPkg ./jmclient;
|
||||||
|
joinmarketbitcoin = joinmarketPkg ./jmbitcoin;
|
||||||
|
joinmarketdaemon = joinmarketPkg ./jmdaemon;
|
||||||
|
|
||||||
pyln-client = clightningPkg ./pyln-client;
|
## Specific versions of packages that already exist in nixpkgs
|
||||||
pyln-proto = clightningPkg ./pyln-proto;
|
|
||||||
pyln-bolt7 = clightningPkg ./pyln-bolt7;
|
|
||||||
pylightning = clightningPkg ./pylightning;
|
|
||||||
|
|
||||||
# Don't mark `klein` as broken.
|
# cryptography 3.3.2, required by joinmarketdaemon
|
||||||
# `klein` is fixed by using werkzeug 2.1.0 (see below)
|
# Used in the private python package set for joinmarket (../joinmarket/default.nix)
|
||||||
klein = super.klein.overrideAttrs (old: {
|
cryptography = callPackage ./specific-versions/cryptography {
|
||||||
meta = builtins.removeAttrs old.meta [ "broken" ];
|
openssl = super.pkgs.openssl_1_1;
|
||||||
});
|
cryptography_vectors = callPackage ./specific-versions/cryptography/vectors.nix {};
|
||||||
|
};
|
||||||
|
|
||||||
## Specific versions of packages that already exist in nixpkgs
|
# autobahn 20.12.3, required by joinmarketclient
|
||||||
|
autobahn = callPackage ./specific-versions/autobahn.nix {};
|
||||||
|
|
||||||
# cryptography 3.3.2, required by joinmarketdaemon
|
# pyopenssl 20.0.1, required by joinmarketdaemon
|
||||||
# Used in the private python package set for joinmarket (../joinmarket/default.nix)
|
pyopenssl = callPackage ./specific-versions/pyopenssl.nix {
|
||||||
cryptography_3_3_2 = callPackage ./specific-versions/cryptography {
|
openssl = super.pkgs.openssl_1_1;
|
||||||
cryptography_vectors = callPackage ./specific-versions/cryptography/vectors.nix {};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
# autobahn 20.12.3, required by joinmarketclient
|
# twisted 22.4.0, compatible with pyopenssl 20.0.1
|
||||||
autobahn = callPackage ./specific-versions/autobahn.nix {};
|
twisted = callPackage ./specific-versions/twisted.nix {};
|
||||||
|
};
|
||||||
|
|
||||||
# werkzeug 2.1.0, required by jmclient (via pkg `klein`)
|
nbPython3Packages = (python3.override {
|
||||||
werkzeug = callPackage ./specific-versions/werkzeug.nix {};
|
packageOverrides = pyPkgsOverrides;
|
||||||
|
}).pkgs;
|
||||||
|
|
||||||
# pyopenssl 20.0.1, required by joinmarketdaemon
|
nbPython3PackagesJoinmarket = (python3.override {
|
||||||
pyopenssl = callPackage ./specific-versions/pyopenssl.nix {};
|
packageOverrides = pyPkgsOverridesJoinmarket;
|
||||||
|
}).pkgs;
|
||||||
}
|
}
|
||||||
|
@ -12,9 +12,9 @@ buildPythonPackage rec {
|
|||||||
|
|
||||||
patchPhase = ''
|
patchPhase = ''
|
||||||
substituteInPlace setup.py \
|
substituteInPlace setup.py \
|
||||||
--replace "'klein==20.6.0'" "'klein==21.8.0'"
|
--replace "'klein==20.6.0'" "'klein>=20.6.0'"
|
||||||
substituteInPlace setup.py \
|
substituteInPlace setup.py \
|
||||||
--replace "'pyjwt==2.1.0'" "'pyjwt==2.4.0'"
|
--replace "'pyjwt==2.4.0'" "'pyjwt==2.5.0'"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
|
@ -27,4 +27,8 @@ buildPythonPackage rec {
|
|||||||
checkInputs = [ pytestCheckHook ];
|
checkInputs = [ pytestCheckHook ];
|
||||||
|
|
||||||
postUnpack = "sourceRoot=$sourceRoot/contrib/pyln-proto";
|
postUnpack = "sourceRoot=$sourceRoot/contrib/pyln-proto";
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
sed -i 's|cryptography = "^36.0.1"|cryptography = "^38.0.0"|' pyproject.toml
|
||||||
|
'';
|
||||||
}
|
}
|
||||||
|
173
pkgs/python-packages/specific-versions/twisted.nix
Normal file
173
pkgs/python-packages/specific-versions/twisted.nix
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
{ lib
|
||||||
|
, stdenv
|
||||||
|
, buildPythonPackage
|
||||||
|
, pythonOlder
|
||||||
|
, fetchPypi
|
||||||
|
, python
|
||||||
|
, appdirs
|
||||||
|
, attrs
|
||||||
|
, automat
|
||||||
|
, bcrypt
|
||||||
|
, constantly
|
||||||
|
, contextvars
|
||||||
|
, cryptography
|
||||||
|
, git
|
||||||
|
, glibcLocales
|
||||||
|
, h2
|
||||||
|
, hyperlink
|
||||||
|
, idna
|
||||||
|
, incremental
|
||||||
|
, priority
|
||||||
|
, pyasn1
|
||||||
|
, pyhamcrest
|
||||||
|
, pynacl
|
||||||
|
, pyopenssl
|
||||||
|
, pyserial
|
||||||
|
, service-identity
|
||||||
|
, setuptools
|
||||||
|
, typing-extensions
|
||||||
|
, zope_interface
|
||||||
|
|
||||||
|
# for passthru.tests
|
||||||
|
, cassandra-driver
|
||||||
|
, klein
|
||||||
|
, magic-wormhole
|
||||||
|
, scrapy
|
||||||
|
, treq
|
||||||
|
, txaio
|
||||||
|
, txamqp
|
||||||
|
, txrequests
|
||||||
|
, txtorcon
|
||||||
|
, thrift
|
||||||
|
, nixosTests
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildPythonPackage rec {
|
||||||
|
pname = "twisted";
|
||||||
|
version = "22.4.0";
|
||||||
|
format = "setuptools";
|
||||||
|
|
||||||
|
disabled = pythonOlder "3.6";
|
||||||
|
|
||||||
|
src = fetchPypi {
|
||||||
|
pname = "Twisted";
|
||||||
|
inherit version;
|
||||||
|
extension = "tar.gz";
|
||||||
|
sha256 = "sha256-oEeZD1ffrh4L0rffJSbU8W3NyEN3TcEIt4xS8qXxNoA=";
|
||||||
|
};
|
||||||
|
|
||||||
|
__darwinAllowLocalNetworking = true;
|
||||||
|
|
||||||
|
propagatedBuildInputs = [
|
||||||
|
attrs
|
||||||
|
automat
|
||||||
|
constantly
|
||||||
|
hyperlink
|
||||||
|
incremental
|
||||||
|
setuptools
|
||||||
|
typing-extensions
|
||||||
|
zope_interface
|
||||||
|
];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
echo 'ListingTests.test_localeIndependent.skip = "Timezone issue"'>> src/twisted/conch/test/test_cftp.py
|
||||||
|
echo 'ListingTests.test_newFile.skip = "Timezone issue"'>> src/twisted/conch/test/test_cftp.py
|
||||||
|
echo 'ListingTests.test_newSingleDigitDayOfMonth.skip = "Timezone issue"'>> src/twisted/conch/test/test_cftp.py
|
||||||
|
echo 'ListingTests.test_oldFile.skip = "Timezone issue"'>> src/twisted/conch/test/test_cftp.py
|
||||||
|
echo 'ListingTests.test_oldSingleDigitDayOfMonth.skip = "Timezone issue"'>> src/twisted/conch/test/test_cftp.py
|
||||||
|
|
||||||
|
echo 'PTYProcessTestsBuilder_AsyncioSelectorReactorTests.test_openFileDescriptors.skip = "invalid syntax"'>> src/twisted/internet/test/test_process.py
|
||||||
|
echo 'PTYProcessTestsBuilder_SelectReactorTests.test_openFileDescriptors.skip = "invalid syntax"'>> src/twisted/internet/test/test_process.py
|
||||||
|
|
||||||
|
echo 'UNIXTestsBuilder_AsyncioSelectorReactorTests.test_sendFileDescriptorTriggersPauseProducing.skip = "sendFileDescriptor producer was not paused"'>> src/twisted/internet/test/test_unix.py
|
||||||
|
echo 'UNIXTestsBuilder_SelectReactorTests.test_sendFileDescriptorTriggersPauseProducing.skip = "sendFileDescriptor producer was not paused"'>> src/twisted/internet/test/test_unix.py
|
||||||
|
|
||||||
|
echo 'FileObserverTests.test_getTimezoneOffsetEastOfUTC.skip = "mktime argument out of range"'>> src/twisted/test/test_log.py
|
||||||
|
echo 'FileObserverTests.test_getTimezoneOffsetWestOfUTC.skip = "mktime argument out of range"'>> src/twisted/test/test_log.py
|
||||||
|
echo 'FileObserverTests.test_getTimezoneOffsetWithoutDaylightSavingTime.skip = "tuple differs, values not"'>> src/twisted/test/test_log.py
|
||||||
|
|
||||||
|
echo 'MulticastTests.test_joinLeave.skip = "No such device"'>> src/twisted/test/test_udp.py
|
||||||
|
echo 'MulticastTests.test_loopback.skip = "No such device"'>> src/twisted/test/test_udp.py
|
||||||
|
echo 'MulticastTests.test_multicast.skip = "Reactor was unclean"'>> src/twisted/test/test_udp.py
|
||||||
|
echo 'MulticastTests.test_multiListen.skip = "No such device"'>> src/twisted/test/test_udp.py
|
||||||
|
|
||||||
|
echo 'DomishExpatStreamTests.test_namespaceWithWhitespace.skip = "syntax error: line 1, column 0"'>> src/twisted/words/test/test_domish.py
|
||||||
|
|
||||||
|
# not packaged
|
||||||
|
substituteInPlace src/twisted/test/test_failure.py \
|
||||||
|
--replace "from cython_test_exception_raiser import raiser # type: ignore[import]" "raiser = None"
|
||||||
|
'' + lib.optionalString stdenv.isLinux ''
|
||||||
|
echo 'PTYProcessTestsBuilder_EPollReactorTests.test_openFileDescriptors.skip = "invalid syntax"'>> src/twisted/internet/test/test_process.py
|
||||||
|
echo 'PTYProcessTestsBuilder_PollReactorTests.test_openFileDescriptors.skip = "invalid syntax"'>> src/twisted/internet/test/test_process.py
|
||||||
|
echo 'UNIXTestsBuilder_EPollReactorTests.test_sendFileDescriptorTriggersPauseProducing.skip = "sendFileDescriptor producer was not paused"'>> src/twisted/internet/test/test_unix.py
|
||||||
|
echo 'UNIXTestsBuilder_PollReactorTests.test_sendFileDescriptorTriggersPauseProducing.skip = "sendFileDescriptor producer was not paused"'>> src/twisted/internet/test/test_unix.py
|
||||||
|
|
||||||
|
# Patch t.p._inotify to point to libc. Without this,
|
||||||
|
# twisted.python.runtime.platform.supportsINotify() == False
|
||||||
|
substituteInPlace src/twisted/python/_inotify.py --replace \
|
||||||
|
"ctypes.util.find_library(\"c\")" "'${stdenv.cc.libc}/lib/libc.so.6'"
|
||||||
|
'' + lib.optionalString (stdenv.isAarch64 && stdenv.isDarwin) ''
|
||||||
|
echo 'AbortConnectionTests_AsyncioSelectorReactorTests.test_fullWriteBufferAfterByteExchange.skip = "Timeout after 120 seconds"' >> src/twisted/internet/test/test_tcp.py
|
||||||
|
echo 'AbortConnectionTests_AsyncioSelectorReactorTests.test_resumeProducingAbort.skip = "Timeout after 120 seconds"' >> src/twisted/internet/test/test_tcp.py
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Generate Twisted's plug-in cache. Twisted users must do it as well. See
|
||||||
|
# http://twistedmatrix.com/documents/current/core/howto/plugin.html#auto3
|
||||||
|
# and http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=477103 for details.
|
||||||
|
postFixup = ''
|
||||||
|
$out/bin/twistd --help > /dev/null
|
||||||
|
'';
|
||||||
|
|
||||||
|
checkInputs = [
|
||||||
|
git
|
||||||
|
glibcLocales
|
||||||
|
pyhamcrest
|
||||||
|
]
|
||||||
|
++ passthru.optional-dependencies.conch
|
||||||
|
# not supported on aarch64-darwin: https://github.com/pyca/pyopenssl/issues/873
|
||||||
|
++ lib.optionals (!(stdenv.isDarwin && stdenv.isAarch64)) passthru.optional-dependencies.tls;
|
||||||
|
|
||||||
|
checkPhase = ''
|
||||||
|
export SOURCE_DATE_EPOCH=315532800
|
||||||
|
export PATH=$out/bin:$PATH
|
||||||
|
# race conditions when running in paralell
|
||||||
|
${python.interpreter} -m twisted.trial twisted
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
optional-dependencies = rec {
|
||||||
|
conch = [ appdirs bcrypt cryptography pyasn1 ];
|
||||||
|
conch_nacl = conch ++ [ pynacl ];
|
||||||
|
contextvars = lib.optionals (pythonOlder "3.7") [ contextvars ];
|
||||||
|
http2 = [ h2 priority ];
|
||||||
|
serial = [ pyserial ];
|
||||||
|
tls = [ idna pyopenssl service-identity ];
|
||||||
|
};
|
||||||
|
|
||||||
|
tests = {
|
||||||
|
inherit
|
||||||
|
cassandra-driver
|
||||||
|
klein
|
||||||
|
magic-wormhole
|
||||||
|
scrapy
|
||||||
|
treq
|
||||||
|
txaio
|
||||||
|
txamqp
|
||||||
|
txrequests
|
||||||
|
txtorcon
|
||||||
|
thrift;
|
||||||
|
inherit (nixosTests) buildbot matrix-synapse;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://github.com/twisted/twisted";
|
||||||
|
description = "Twisted, an event-driven networking engine written in Python";
|
||||||
|
longDescription = ''
|
||||||
|
Twisted is an event-driven networking engine written in Python
|
||||||
|
and licensed under the MIT license.
|
||||||
|
'';
|
||||||
|
license = licenses.mit;
|
||||||
|
maintainers = with maintainers; [ SuperSandro2000 ];
|
||||||
|
};
|
||||||
|
}
|
@ -1,68 +0,0 @@
|
|||||||
{ lib
|
|
||||||
, stdenv
|
|
||||||
, buildPythonPackage
|
|
||||||
, pythonOlder
|
|
||||||
, fetchPypi
|
|
||||||
, watchdog
|
|
||||||
, dataclasses
|
|
||||||
, ephemeral-port-reserve
|
|
||||||
, pytest-timeout
|
|
||||||
, pytest-xprocess
|
|
||||||
, pytestCheckHook
|
|
||||||
}:
|
|
||||||
|
|
||||||
buildPythonPackage rec {
|
|
||||||
pname = "werkzeug";
|
|
||||||
version = "2.1.0";
|
|
||||||
format = "setuptools";
|
|
||||||
|
|
||||||
disabled = pythonOlder "3.7";
|
|
||||||
|
|
||||||
src = fetchPypi {
|
|
||||||
pname = "Werkzeug";
|
|
||||||
inherit version;
|
|
||||||
sha256 = "sha256-m1VGaj6Z4TsfBoamYRfTm9qFqZIWbgp5rt/PNYYyj3o=";
|
|
||||||
};
|
|
||||||
|
|
||||||
propagatedBuildInputs = lib.optionals (!stdenv.isDarwin) [
|
|
||||||
# watchdog requires macos-sdk 10.13+
|
|
||||||
watchdog
|
|
||||||
] ++ lib.optionals (pythonOlder "3.7") [
|
|
||||||
dataclasses
|
|
||||||
];
|
|
||||||
|
|
||||||
checkInputs = [
|
|
||||||
ephemeral-port-reserve
|
|
||||||
pytest-timeout
|
|
||||||
pytest-xprocess
|
|
||||||
pytestCheckHook
|
|
||||||
];
|
|
||||||
|
|
||||||
disabledTests = lib.optionals stdenv.isDarwin [
|
|
||||||
"test_get_machine_id"
|
|
||||||
];
|
|
||||||
|
|
||||||
disabledTestPaths = [
|
|
||||||
# ConnectionRefusedError: [Errno 111] Connection refused
|
|
||||||
"tests/test_serving.py"
|
|
||||||
];
|
|
||||||
|
|
||||||
pytestFlagsArray = [
|
|
||||||
# don't run tests that are marked with filterwarnings, they fail with
|
|
||||||
# warnings._OptionError: unknown warning category: 'pytest.PytestUnraisableExceptionWarning'
|
|
||||||
"-m 'not filterwarnings'"
|
|
||||||
];
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
homepage = "https://palletsprojects.com/p/werkzeug/";
|
|
||||||
description = "The comprehensive WSGI web application library";
|
|
||||||
longDescription = ''
|
|
||||||
Werkzeug is a comprehensive WSGI web application library. It
|
|
||||||
began as a simple collection of various utilities for WSGI
|
|
||||||
applications and has become one of the most advanced WSGI
|
|
||||||
utility libraries.
|
|
||||||
'';
|
|
||||||
license = licenses.bsd3;
|
|
||||||
maintainers = with maintainers; [ ];
|
|
||||||
};
|
|
||||||
}
|
|
@ -57,7 +57,7 @@ let self = stdenvNoCC.mkDerivation {
|
|||||||
description = "A web interface for LND, c-lightning and Eclair";
|
description = "A web interface for LND, c-lightning and Eclair";
|
||||||
homepage = "https://github.com/Ride-The-Lightning/RTL";
|
homepage = "https://github.com/Ride-The-Lightning/RTL";
|
||||||
license = licenses.mit;
|
license = licenses.mit;
|
||||||
maintainers = with maintainers; [ nixbitcoin earvstedt ];
|
maintainers = with maintainers; [ nixbitcoin erikarvstedt ];
|
||||||
platforms = platforms.unix;
|
platforms = platforms.unix;
|
||||||
};
|
};
|
||||||
}; in self
|
}; in self
|
||||||
|
@ -10,7 +10,7 @@ nodePackages.package.override {
|
|||||||
description = "A minimalistic wallet GUI for c-lightning";
|
description = "A minimalistic wallet GUI for c-lightning";
|
||||||
homepage = "https://github.com/shesek/spark-wallet";
|
homepage = "https://github.com/shesek/spark-wallet";
|
||||||
license = licenses.mit;
|
license = licenses.mit;
|
||||||
maintainers = with maintainers; [ nixbitcoin earvstedt ];
|
maintainers = with maintainers; [ nixbitcoin erikarvstedt ];
|
||||||
platforms = platforms.unix;
|
platforms = platforms.unix;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -6,20 +6,25 @@ let
|
|||||||
};
|
};
|
||||||
in
|
in
|
||||||
|
|
||||||
args:
|
module:
|
||||||
let
|
let
|
||||||
test = pythonTesting.makeTest args;
|
test = (pythonTesting.evalTest module).config;
|
||||||
|
|
||||||
# 1. Save test logging output
|
runTest = pkgs.stdenv.mkDerivation {
|
||||||
# 2. Add link to driver so that a gcroot to a test prevents the driver from
|
name = "vm-test-run-${test.name}";
|
||||||
# being garbage-collected
|
|
||||||
fixedTest = test.overrideAttrs (_: {
|
requiredSystemFeatures = [ "kvm" "nixos-test" ];
|
||||||
# See `runTests` in nixpkgs/nixos/lib/testing-python.nix for the original definition of `buildCommand`
|
|
||||||
|
# 1. Save test logging output
|
||||||
|
# 2. Add link to driver so that a gcroot to a test prevents the driver from
|
||||||
|
# being garbage-collected
|
||||||
buildCommand = ''
|
buildCommand = ''
|
||||||
mkdir "$out"
|
mkdir "$out"
|
||||||
LOGFILE=$out/output.xml tests='exec(os.environ["testScript"])' ${test.driver}/bin/nixos-test-driver
|
LOGFILE=$out/output.xml tests='exec(os.environ["testScript"])' ${test.driver}/bin/nixos-test-driver
|
||||||
ln -s ${test.driver} "$out/driver"
|
ln -s ${test.driver} "$out/driver"
|
||||||
'';
|
'';
|
||||||
});
|
|
||||||
|
inherit (test) meta passthru;
|
||||||
|
} // test;
|
||||||
in
|
in
|
||||||
fixedTest
|
runTest
|
||||||
|
@ -47,7 +47,7 @@ let
|
|||||||
# is_interactive is set in ./run-vm.sh
|
# is_interactive is set in ./run-vm.sh
|
||||||
''
|
''
|
||||||
if not "is_interactive" in vars():
|
if not "is_interactive" in vars():
|
||||||
run_tests()
|
nb_run_tests()
|
||||||
''
|
''
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
@ -5,7 +5,7 @@ let
|
|||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Whether to shellcheck services during system build time.
|
Whether to shellcheck services during system build time.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
@ -13,14 +13,14 @@ let
|
|||||||
sourcePrefix = mkOption {
|
sourcePrefix = mkOption {
|
||||||
type = with types; nullOr str;
|
type = with types; nullOr str;
|
||||||
default = null;
|
default = null;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
The definition source path prefix of services to include in the shellcheck.
|
The definition source path prefix of services to include in the shellcheck.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
runShellcheck = mkOption {
|
runShellcheck = mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
A derivation that runs shellcheck on all bash scripts included
|
A derivation that runs shellcheck on all bash scripts included
|
||||||
in nix-bitcoin services.
|
in nix-bitcoin services.
|
||||||
'';
|
'';
|
||||||
@ -45,18 +45,17 @@ let
|
|||||||
# Return set of services ({ service1 = true; service2 = true; ... })
|
# Return set of services ({ service1 = true; service2 = true; ... })
|
||||||
# which are either defined or not defined within `sourcePrefix`, depending
|
# which are either defined or not defined within `sourcePrefix`, depending
|
||||||
# on `shouldMatch`.
|
# on `shouldMatch`.
|
||||||
collectServices = shouldMatch: lib.listToAttrs (builtins.concatLists (zipListsWith (services: file:
|
collectServices = shouldMatch: lib.listToAttrs (builtins.concatLists (map (def:
|
||||||
let
|
let
|
||||||
|
services = def.value;
|
||||||
|
inherit (def) file;
|
||||||
isMatching = lib.hasPrefix sourcePrefix file;
|
isMatching = lib.hasPrefix sourcePrefix file;
|
||||||
in
|
in
|
||||||
# Nix has no boolean XOR, so use `if`
|
# Nix has no boolean XOR, so use `if`
|
||||||
lib.optionals (if shouldMatch then isMatching else !isMatching) (
|
lib.optionals (if shouldMatch then isMatching else !isMatching) (
|
||||||
(map (service: { name = service; value = true; }) (builtins.attrNames services))
|
(map (service: { name = service; value = true; }) (builtins.attrNames services))
|
||||||
)
|
)
|
||||||
# TODO-EXTERNAL:
|
) systemdServices.definitionsWithLocations));
|
||||||
# Use `systemdServices.definitionsWithLocations` when https://github.com/NixOS/nixpkgs/pull/189836
|
|
||||||
# is included in nixpkgs stable.
|
|
||||||
) systemdServices.definitions systemdServices.files));
|
|
||||||
in
|
in
|
||||||
# Calculate set difference: matchingServices - nonMatchingServices
|
# Calculate set difference: matchingServices - nonMatchingServices
|
||||||
# and exclude unavailable services (defined via `mkIf false ...`) by checking `configSystemdServices`.
|
# and exclude unavailable services (defined via `mkIf false ...`) by checking `configSystemdServices`.
|
||||||
|
@ -10,7 +10,7 @@ with lib;
|
|||||||
noConnections = mkOption {
|
noConnections = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = !config.test.container.enableWAN;
|
default = !config.test.container.enableWAN;
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Whether services should be configured to not connect to external hosts.
|
Whether services should be configured to not connect to external hosts.
|
||||||
This can silence some warnings while running the test in an offline environment.
|
This can silence some warnings while running the test in an offline environment.
|
||||||
'';
|
'';
|
||||||
@ -18,9 +18,9 @@ with lib;
|
|||||||
data = mkOption {
|
data = mkOption {
|
||||||
type = types.attrs;
|
type = types.attrs;
|
||||||
default = {};
|
default = {};
|
||||||
description = ''
|
description = mdDoc ''
|
||||||
Attrs that are available in the Python test script under the global
|
Attrs that are available in the Python test script under the global
|
||||||
dictionary variable 'test_data'. The data is exported via JSON.
|
dictionary variable {var}`test_data`. The data is exported via JSON.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
extraTestScript = mkOption {
|
extraTestScript = mkOption {
|
||||||
|
@ -48,7 +48,8 @@ def test(name):
|
|||||||
tests[name] = fn
|
tests[name] = fn
|
||||||
return x
|
return x
|
||||||
|
|
||||||
def run_tests():
|
# `run_tests` is already defined by the NixOS test driver
|
||||||
|
def nb_run_tests():
|
||||||
enabled = enabled_tests.copy()
|
enabled = enabled_tests.copy()
|
||||||
to_run = []
|
to_run = []
|
||||||
for test in tests:
|
for test in tests:
|
||||||
|
Loading…
Reference in New Issue
Block a user