summaryrefslogtreecommitdiffstats
path: root/nixos/modules/services/networking/jormungandr.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/modules/services/networking/jormungandr.nix')
-rw-r--r--nixos/modules/services/networking/jormungandr.nix97
1 files changed, 97 insertions, 0 deletions
diff --git a/nixos/modules/services/networking/jormungandr.nix b/nixos/modules/services/networking/jormungandr.nix
new file mode 100644
index 000000000000..0c66b85fe8a5
--- /dev/null
+++ b/nixos/modules/services/networking/jormungandr.nix
@@ -0,0 +1,97 @@
+{ config, lib, pkgs, ... }:
+
+let
+ cfg = config.services.jormungandr;
+
+ inherit (lib) mkEnableOption mkIf mkOption;
+ inherit (lib) optionalString types;
+
+ dataDir = "/var/lib/jormungandr";
+
+ # Default settings so far, as the service matures we will
+ # move these out as separate settings
+ configSettings = {
+ storage = dataDir;
+ p2p = {
+ public_address = "/ip4/127.0.0.1/tcp/8299";
+ messages = "high";
+ blocks = "high";
+ };
+ rest = {
+ listen = "127.0.0.1:8607";
+ };
+ };
+
+ configFile = if cfg.configFile == null then
+ pkgs.writeText "jormungandr.yaml" (builtins.toJSON configSettings)
+ else cfg.configFile;
+
+in {
+
+ options = {
+
+ services.jormungandr = {
+ enable = mkEnableOption "jormungandr service";
+
+ configFile = mkOption {
+ type = types.nullOr types.path;
+ default = null;
+ example = "/var/lib/jormungandr/node.yaml";
+ description = ''
+ The path of the jormungandr blockchain configuration file in YAML format.
+ If no file is specified, a file is generated using the other options.
+ '';
+ };
+
+ secretFile = mkOption {
+ type = types.nullOr types.path;
+ default = null;
+ example = "/etc/secret/jormungandr.yaml";
+ description = ''
+ The path of the jormungandr blockchain secret node configuration file in
+ YAML format. Do not store this in nix store!
+ '';
+ };
+
+ genesisBlockHash = mkOption {
+ type = types.nullOr types.string;
+ default = null;
+ example = "d70495af81ae8600aca3e642b2427327cb6001ec4d7a0037e96a00dabed163f9";
+ description = ''
+ Set the genesis block hash (the hash of the block0) so we can retrieve
+ the genesis block (and the blockchain configuration) from the existing
+ storage or from the network.
+ '';
+ };
+
+ genesisBlockFile = mkOption {
+ type = types.nullOr types.path;
+ default = null;
+ example = "/var/lib/jormungandr/block-0.bin";
+ description = ''
+ The path of the genesis block file if we are hosting it locally.
+ '';
+ };
+
+ };
+ };
+
+ config = mkIf cfg.enable {
+
+ systemd.services.jormungandr = {
+ description = "jormungandr server";
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network-online.target" ];
+ serviceConfig = {
+ DynamicUser = true;
+ StateDirectory = baseNameOf dataDir;
+ ExecStart = ''
+ ${pkgs.jormungandr}/bin/jormungandr --config ${configFile} \
+ ${optionalString (cfg.secretFile != null) " --secret ${cfg.secretFile}"} \
+ ${optionalString (cfg.genesisBlockHash != null) " --genesis-block-hash ${cfg.genesisBlockHash}"} \
+ ${optionalString (cfg.genesisBlockFile != null) " --genesis-block ${cfg.genesisBlockFile}"}
+ '';
+ };
+ };
+ };
+}