{ config, lib, pkgs, inputs, ... }: with pkgs; let cfg = config.services.tsvnstat; inherit (inputs.tsvnstat.packages.${pkgs.system}) tsvnstat; in { options = with lib; { services.tsvnstat = { enable = mkEnableOption "Enable tsvnstat"; user = mkOption { type = with types; oneOf [str int]; default = "tsvnstat"; description = '' The user the service will use. ''; }; keyPath = mkOption { type = types.path; default = ""; description = '' Path to the TS API key file ''; }; nodeName = mkOption { type = types.str; default = "${config.networking.hostName}-stats"; description = '' The name of the TS node. ''; }; group = mkOption { type = with types; oneOf [str int]; default = "tsvnstat"; description = '' The user the service will use. ''; }; package = mkOption { type = types.package; default = tsvnstat; defaultText = literalExpression "pkgs.tsvnstat"; description = "The package to use for tsvnstat"; }; }; }; config = lib.mkIf cfg.enable { users.groups.${cfg.group} = {}; users.users.${cfg.user} = { description = "tsvnstat service user"; isSystemUser = true; home = "/var/lib/tsvnstat"; createHome = true; group = "${cfg.group}"; }; services.vnstat.enable = true; systemd.services.tsvnstat = { enable = true; description = "tsvnstat server"; wantedBy = ["network-online.target"]; after = ["network-online.target"]; path = [pkgs.vnstat]; environment = { HOME = "/var/lib/tsvnstat"; HOSTNAME = config.networking.hostName; }; serviceConfig = { User = cfg.user; Group = cfg.group; RuntimeDirectory = "tsvnstat"; StateDirectory = "tsvnstat"; StateDirectoryMode = "0755"; CacheDirectory = "tsvnstat"; CacheDirectoryMode = "0755"; ExecStart = "${cfg.package}/bin/tsvnstat -vnstati ${pkgs.vnstat}/bin/vnstati -name ${cfg.nodeName} -key ${cfg.keyPath}"; }; }; }; }