nixpkgs/nixos/modules/services/web-apps/goatcounter.nix
2024-07-24 10:17:44 +05:30

81 lines
1.9 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
inherit (lib) types;
cfg = config.services.goatcounter;
stateDir = "goatcounter";
in
{
options = {
services.goatcounter = {
enable = lib.mkEnableOption "goatcounter";
package = lib.mkPackageOption pkgs "goatcounter" { };
address = lib.mkOption {
type = types.str;
default = "127.0.0.1";
description = "Web interface address.";
};
port = lib.mkOption {
type = types.port;
default = 8081;
description = "Web interface port.";
};
proxy = lib.mkOption {
type = types.bool;
default = false;
description = ''
Whether Goatcounter service is running behind a reverse proxy. Will listen for HTTPS if `false`.
Refer to [documentation](https://github.com/arp242/goatcounter?tab=readme-ov-file#running) for more details.
'';
};
extraArgs = lib.mkOption {
type = with types; listOf str;
default = [ ];
description = ''
List of extra arguments to be passed to goatcounter cli.
See {command}`goatcounter help serve` for more information.
'';
};
};
};
config = lib.mkIf cfg.enable {
systemd.services.goatcounter = {
description = "Easy web analytics. No tracking of personal data.";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = lib.escapeShellArgs (
[
(lib.getExe cfg.package)
"serve"
"-listen"
"${cfg.address}:${toString cfg.port}"
]
++ lib.optionals cfg.proxy [
"-tls"
"proxy"
]
++ cfg.extraArgs
);
DynamicUser = true;
StateDirectory = stateDir;
WorkingDirectory = "%S/${stateDir}";
Restart = "always";
};
};
};
meta.maintainers = with lib.maintainers; [ bhankas ];
}