{ options , lib , config , pkgs , modulesPath }: with lib; let cfg = config.services.fathom; in { options.services.fathom = { enable = lib.mkEnableOption "Enable the Fathom Analytics service"; port = mkOption { type = types.string; default = "3000"; description = '' The port on which Fathom will listen for incoming HTTP traffic. ''; }; gzip = mkOption { type = types.bool; default = true; description = "Whether or not to enable gzip compression."; }; debug = mkOption { type = types.bool; default = false; description = "Whether or not to enable debug mode."; }; dataDir = mkOption { type = types.path; default = "/var/lib/fathom"; description = "Fathom data directory"; }; }; config = mkIf cfg.enable { systemd.services.fathom = { wantedBy = [ "multi-user.target" ]; after = [ "network.target" ]; environment = { FATHOM_SERVER_ADDR = cfg.port; FATHOM_GZIP = builtins.toString cfg.gzip; FATHOM_DEBUG = builtins.toString cfg.debug; FATHOM_DATABASE_DRIVER = "sqlite3"; FATHOM_DATABASE_NAME = "${cfg.dataDir}/fathom.db"; FATHOM_SECRET = "random-secret-string"; }; preStart = '' echo "[fathom] creating ${cfg.dataDir}" mkdir -p ${cfg.dataDir} chown -R fathom:fathom ${cfg.dataDir} echo "[fathom]" creating ${cfg.dataDir}/.env env | grep "^FATHOM" > ${cfg.dataDir}/.env ''; description = '' Fathom Analytics ''; serviceConfig = { Type = "simple"; User = "fathom"; Group = "fathom"; ExecStart = "${pkgs.fathom}/bin/fathom server"; KillSignal = "INT"; WorkingDirectory = cfg.dataDir; Restart = "on-failure"; RestartSec = "10"; PermissionsStartOnly = "true"; }; }; environment.systemPackages = [ pkgs.fathom ]; users = { groups = { fathom = {}; }; users.fathom = { description = "Fathom daemon user"; home = cfg.dataDir; group = "fathom"; }; }; }; }