{
  container,
  lib,
  config,
  ...
}:
with lib;
let
  cfg = config.container.module.status;
in
{
  options = {
    container.module.status = {
      enable = mkEnableOption "Status monitor.";
      address = mkOption {
        default = "10.1.0.22";
        type = types.str;
      };
      port = mkOption {
        default = 3001;
        type = types.int;
      };
      domain = mkOption {
        default = "status.${config.container.domain}";
        type = types.str;
      };
      storage = mkOption {
        default = "${config.container.storage}/status";
        type = types.str;
      };
    };
  };

  config = mkIf cfg.enable {
    systemd.tmpfiles.rules = container.mkContainerDir cfg [ "data" ];

    containers.status = container.mkContainer cfg {
      bindMounts = {
        "/var/lib/uptime-kuma" = {
          hostPath = "${cfg.storage}/data";
          isReadOnly = false;
        };
      };

      config =
        { lib, ... }:
        container.mkContainerConfig cfg {
          networking = {
            nameservers = mkForce [ config.container.module.dns.address ];
          };

          services.uptime-kuma = {
            enable = true;
            settings = {
              DATA_DIR = "/var/lib/uptime-kuma/";
              HOST = cfg.address;
              PORT = toString cfg.port;
            };
          };

          systemd.services.uptime-kuma = {
            serviceConfig.DynamicUser = mkForce false;
          };
        };
    };
  };
}