diff options
author | Ben Sima <ben@bsima.me> | 2019-02-22 15:22:49 -0800 |
---|---|---|
committer | Ben Sima <ben@bsima.me> | 2019-02-23 13:25:47 -0800 |
commit | 9b2b49e9063d805e68acbef40989075f1b1a6576 (patch) | |
tree | c2c5464bb2b6b3bf2c9109d6a2218d9a6d62b222 /modules/fathom.nix | |
parent | 3b90927e818729f2983ae7ebe5ab65c0b96bcd2a (diff) |
Package and deploy fathom
Diffstat (limited to 'modules/fathom.nix')
-rw-r--r-- | modules/fathom.nix | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/modules/fathom.nix b/modules/fathom.nix new file mode 100644 index 0000000..dee34b9 --- /dev/null +++ b/modules/fathom.nix @@ -0,0 +1,93 @@ +{ 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"; + }; + }; + }; +} |