From af1a28501701f56b7289e8e3d855e638272d2a3d Mon Sep 17 00:00:00 2001 From: qolii Date: Fri, 19 Oct 2018 17:36:38 -0700 Subject: [PATCH] nixos/eternal-terminal: init new module. --- nixos/modules/module-list.nix | 1 + .../services/networking/eternal-terminal.nix | 96 +++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 nixos/modules/services/networking/eternal-terminal.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index fb6b4262568..6305b0fa9eb 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -504,6 +504,7 @@ ./services/networking/dnsmasq.nix ./services/networking/ejabberd.nix ./services/networking/epmd.nix + ./services/networking/eternal-terminal.nix ./services/networking/fakeroute.nix ./services/networking/ferm.nix ./services/networking/firefox/sync-server.nix diff --git a/nixos/modules/services/networking/eternal-terminal.nix b/nixos/modules/services/networking/eternal-terminal.nix new file mode 100644 index 00000000000..aa9d399a4a3 --- /dev/null +++ b/nixos/modules/services/networking/eternal-terminal.nix @@ -0,0 +1,96 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.services.eternal-terminal; + +in + +{ + + ###### interface + + options = { + + services.eternal-terminal = { + + enable = mkOption { + default = false; + type = types.bool; + description = '' + Enable the Eternal Terminal server. + ''; + }; + + port = mkOption { + default = null; + type = types.nullOr types.int; + description = '' + The port the server should listen on. Will use the server's default (2022) if not specified. + ''; + }; + + verbosity = mkOption { + default = 0; + type = types.int; + description = '' + The verbosity level (0-9). + ''; + }; + + silence = mkOption { + default = 0; + type = types.int; + description = '' + Silence. + ''; + }; + + logSize = mkOption { + default = 20971520; + type = types.int; + description = '' + The maximum log size. + ''; + }; + }; + }; + + ###### implementation + + config = mkIf cfg.enable { + + # We need to ensure the et package is fully installed because + # the (remote) et client runs the `etterminal` binary when it + # connects. + environment.systemPackages = [ pkgs.eternal-terminal ]; + + systemd.services = { + eternal-terminal = { + description = "Eternal Terminal server."; + wantedBy = [ "multi-user.target" ]; + after = [ "syslog.target" "network.target" ]; + serviceConfig = { + Type = "forking"; + ExecStart = "${pkgs.eternal-terminal}/bin/etserver --daemon --cfgfile=${pkgs.writeText "et.cfg" '' + ; et.cfg : Config file for Eternal Terminal + ; + + ${optionalString (cfg.port != null) '' + [Networking] + port = ${toString cfg.port} + ''} + [Debug] + verbose = ${toString cfg.verbosity} + silent = ${toString cfg.silence} + logsize = ${toString cfg.logSize} + ''}"; + Restart = "on-failure"; + KillMode = "process"; + }; + }; + }; + }; +}