From f4368190f65902ef4e539774623afa25b2831b87 Mon Sep 17 00:00:00 2001 From: Mel Date: Sun, 29 Dec 2024 19:33:57 +0100 Subject: Add first iteration of NixOS specimen service module Signed-off-by: Mel --- application/module.nix | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 application/module.nix (limited to 'application') diff --git a/application/module.nix b/application/module.nix new file mode 100644 index 0000000..557f421 --- /dev/null +++ b/application/module.nix @@ -0,0 +1,65 @@ +{ + lib, + config, + pkgs, + ... +}: + +let + inherit (lib) + mkIf + mkOption + mkEnableOption + mkPackageOption + types + ; + + cfg = config.services.specimen; +in +{ + options.services.specimen = { + enable = mkEnableOption "specimen application"; + + package = mkPackageOption pkgs "specimen" { }; + + port = mkOption { + type = types.port; + default = 4444; + description = "port that specimen will listen on."; + }; + + listenAddress = mkOption { + type = types.str; + default = "0.0.0.0"; + description = "address that specimen will listen on."; + }; + + openFirewall = mkOption { + type = types.bool; + default = false; + description = "open specimen port in firewall for incoming connections."; + }; + + namePath = mkOption { + type = types.path; + description = "path from which specimen will get the content to reply with."; + }; + }; + + config = mkIf cfg.enable { + networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall cfg.port; + + systemd.services.specimen = { + description = "specimen application service"; + wantedBy = "multi-user.target"; + after = "network.target"; + + serviceConfig = { + DynamicUser = true; + Type = "exec"; + Restart = "always"; + ExecStart = "${cfg.package}/bin/specimen -address ${cfg.listenAddress} -port ${cfg.port} -name ${cfg.namePath}"; + }; + }; + }; +} -- cgit 1.4.1