diff --git a/nixos/doc/manual/release-notes/rl-2511.section.md b/nixos/doc/manual/release-notes/rl-2511.section.md index eefc6d7f4cdd..3fca1a27143e 100644 --- a/nixos/doc/manual/release-notes/rl-2511.section.md +++ b/nixos/doc/manual/release-notes/rl-2511.section.md @@ -84,6 +84,8 @@ - [paisa](https://github.com/ananthakumaran/paisa), a personal finance tracker and dashboard. Available as [services.paisa](#opt-services.paisa.enable). +- [conman](https://github.com/dun/conman), a serial console management program. Available as [services.conman](#opt-services.conman.enable). + ## Backward Incompatibilities {#sec-release-25.11-incompatibilities} diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 92899fd6115f..67be52fea567 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -806,6 +806,7 @@ ./services/misc/clipcat.nix ./services/misc/clipmenu.nix ./services/misc/confd.nix + ./services/misc/conman.nix ./services/misc/cpuminer-cryptonight.nix ./services/misc/db-rest.nix ./services/misc/devmon.nix diff --git a/nixos/modules/services/misc/conman.nix b/nixos/modules/services/misc/conman.nix new file mode 100644 index 000000000000..8d00b0353d6d --- /dev/null +++ b/nixos/modules/services/misc/conman.nix @@ -0,0 +1,89 @@ +{ + config, + lib, + pkgs, + ... +}: + +{ + options = { + services.conman = { + enable = lib.mkEnableOption '' + Enable the conman Console manager. + + Either `configFile` or `config` must be specified. + ''; + package = lib.mkPackageOption pkgs "conman" { }; + + configFile = lib.mkOption { + type = lib.types.nullOr lib.types.path; + default = null; + example = "/run/secrets/conman.conf"; + description = '' + The absolute path to the configuration file. + + Either `configFile` or `config` must be specified. + + See . + ''; + }; + config = lib.mkOption { + type = lib.types.nullOr lib.types.lines; + default = null; + example = '' + server coredump=off + server keepalive=on + server loopback=off + server timestamp=1h + + # global config + global log="/var/log/conman/%N.log" + global seropts="9600,8n1" + global ipmiopts="U:,P:" + ''; + description = '' + The configuration object. + + Either `configFile` or `config` must be specified. + + See . + ''; + }; + }; + }; + meta.maintainers = with lib.maintainers; [ + frantathefranta + ]; + + config = + let + cfg = config.services.conman; + configFile = + if cfg.configFile != null then + cfg.configFile + else + pkgs.writeTextFile { + name = "conman.conf"; + text = cfg.config; + }; + in + lib.mkIf cfg.enable { + assertions = [ + { + assertion = + (cfg.configFile != null) && (cfg.config == null) || (cfg.configFile == null && cfg.config != null); + message = "Either but not both `configFile` and `config` must be specified for conman."; + } + ]; + environment.systemPackages = [ cfg.package ]; + systemd.services.conmand = { + description = "serial console management program"; + documentation = [ "man:conman(8)" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + ExecStart = "${cfg.package}/bin/conmand -F -c ${configFile}"; + KillMode = "process"; + }; + }; + }; +}