90 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, lib, pkgs, ... }:
 | |
| 
 | |
| with lib;
 | |
| 
 | |
| let
 | |
| 
 | |
|   cfg = config.services.eternal-terminal;
 | |
| 
 | |
| in
 | |
| 
 | |
| {
 | |
| 
 | |
|   ###### interface
 | |
| 
 | |
|   options = {
 | |
| 
 | |
|     services.eternal-terminal = {
 | |
| 
 | |
|       enable = mkEnableOption "Eternal Terminal server";
 | |
| 
 | |
|       port = mkOption {
 | |
|         default = 2022;
 | |
|         type = 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.enum (lib.range 0 9);
 | |
|         description = ''
 | |
|           The verbosity level (0-9).
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       silent = mkOption {
 | |
|         default = false;
 | |
|         type = types.bool;
 | |
|         description = ''
 | |
|           If enabled, disables all logging.
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       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
 | |
|             ;
 | |
| 
 | |
|             [Networking]
 | |
|             port = ${toString cfg.port}
 | |
| 
 | |
|             [Debug]
 | |
|             verbose = ${toString cfg.verbosity}
 | |
|             silent = ${if cfg.silent then "1" else "0"}
 | |
|             logsize = ${toString cfg.logSize}
 | |
|           ''}";
 | |
|           Restart = "on-failure";
 | |
|           KillMode = "process";
 | |
|         };
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| }
 | 
