at 23.11-pre 2.2 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 cfg = config.services.eternal-terminal; 8 9in 10 11{ 12 13 ###### interface 14 15 options = { 16 17 services.eternal-terminal = { 18 19 enable = mkEnableOption (lib.mdDoc "Eternal Terminal server"); 20 21 port = mkOption { 22 default = 2022; 23 type = types.port; 24 description = lib.mdDoc '' 25 The port the server should listen on. Will use the server's default (2022) if not specified. 26 27 Make sure to open this port in the firewall if necessary. 28 ''; 29 }; 30 31 verbosity = mkOption { 32 default = 0; 33 type = types.enum (lib.range 0 9); 34 description = lib.mdDoc '' 35 The verbosity level (0-9). 36 ''; 37 }; 38 39 silent = mkOption { 40 default = false; 41 type = types.bool; 42 description = lib.mdDoc '' 43 If enabled, disables all logging. 44 ''; 45 }; 46 47 logSize = mkOption { 48 default = 20971520; 49 type = types.int; 50 description = lib.mdDoc '' 51 The maximum log size. 52 ''; 53 }; 54 }; 55 }; 56 57 ###### implementation 58 59 config = mkIf cfg.enable { 60 61 # We need to ensure the et package is fully installed because 62 # the (remote) et client runs the `etterminal` binary when it 63 # connects. 64 environment.systemPackages = [ pkgs.eternal-terminal ]; 65 66 systemd.services = { 67 eternal-terminal = { 68 description = "Eternal Terminal server."; 69 wantedBy = [ "multi-user.target" ]; 70 after = [ "network.target" ]; 71 serviceConfig = { 72 Type = "forking"; 73 ExecStart = "${pkgs.eternal-terminal}/bin/etserver --daemon --cfgfile=${pkgs.writeText "et.cfg" '' 74 ; et.cfg : Config file for Eternal Terminal 75 ; 76 77 [Networking] 78 port = ${toString cfg.port} 79 80 [Debug] 81 verbose = ${toString cfg.verbosity} 82 silent = ${if cfg.silent then "1" else "0"} 83 logsize = ${toString cfg.logSize} 84 ''}"; 85 Restart = "on-failure"; 86 KillMode = "process"; 87 }; 88 }; 89 }; 90 }; 91 92 meta = { 93 maintainers = with lib.maintainers; [ ]; 94 }; 95}