Files
imladris/configs/tracker.nix
T

69 lines
2.0 KiB
Nix

# tracker: single-host project tracker web app (hackerman edition).
# Built from the git repo (https://git.wntrmute.dev/kyle/tracker) via the
# `tracker` flake input; see the flake.nix in that repo for the package.
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.services.tracker;
in
{
options.services.tracker = {
enable = mkEnableOption "tracker project tracker web app";
package = mkOption {
type = types.package;
default = inputs.tracker.packages.x86_64-linux.default;
defaultText = literalExpression "inputs.tracker.packages.x86_64-linux.default";
description = "The tracker package to use.";
};
address = mkOption {
type = types.str;
default = ":8420";
description = "Address for the tracker web server to listen on.";
};
openFirewall = mkOption {
type = types.bool;
default = true;
description = "Open the firewall for the tracker port on the tailscale interface.";
};
};
config = mkIf cfg.enable {
users.users.tracker = {
isSystemUser = true;
group = "tracker";
description = "tracker service user";
};
users.groups.tracker = { };
systemd.services.tracker = {
description = "tracker project tracker (hackerman edition)";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
User = "tracker";
Group = "tracker";
StateDirectory = "tracker";
ExecStart = "${cfg.package}/bin/tracker -addr ${cfg.address} -db /var/lib/tracker/tracker.db";
Restart = "on-failure";
RestartSec = 5;
NoNewPrivileges = true;
ProtectSystem = "strict";
ProtectHome = true;
PrivateTmp = true;
PrivateDevices = true;
RestrictAddressFamilies = [ "AF_INET" "AF_INET6" ];
};
};
networking.firewall.interfaces."tailscale0".allowedTCPPorts =
mkIf cfg.openFirewall [ (toInt (removePrefix ":" cfg.address)) ];
};
}