diff --git a/base/default.nix b/base/default.nix index 2c7e7f7..231fdb1 100644 --- a/base/default.nix +++ b/base/default.nix @@ -9,6 +9,7 @@ ./nix.nix ./services/acme.nix + ./services/uptimed.nix ./services/auto-upgrade.nix ./services/dbus.nix ./services/fwupd.nix diff --git a/base/services/uptimed.nix b/base/services/uptimed.nix new file mode 100644 index 0000000..9bc192c --- /dev/null +++ b/base/services/uptimed.nix @@ -0,0 +1,59 @@ +{ config, pkgs, lib, ... }: +let + cfg = config.services.uptimed; +in +{ + options.services.uptimed.settings = lib.mkOption { + description = ""; + default = { }; + type = lib.types.submodule { + freeformType = with lib.types; attrsOf (either str (listOf str)); + }; + }; + + config = { + services.uptimed = { + enable = true; + + settings = let + stateDir = "/var/lib/uptimed"; + in { + PIDFILE = "${stateDir}/pid"; + SENDMAIL = lib.mkDefault "${pkgs.system-sendmail}/bin/sendmail -t"; + }; + }; + + systemd.services.uptimed = lib.mkIf (cfg.enable) { + serviceConfig = let + uptimed = pkgs.uptimed.overrideAttrs (prev: { + postPatch = '' + substituteInPlace Makefile.am \ + --replace-fail '$(sysconfdir)/uptimed.conf' '/var/lib/uptimed/uptimed.conf' + substituteInPlace src/Makefile.am \ + --replace-fail '$(sysconfdir)/uptimed.conf' '/var/lib/uptimed/uptimed.conf' + ''; + }); + + in { + Type = "notify"; + + ExecStart = lib.mkForce "${uptimed}/sbin/uptimed -f"; + + BindReadOnlyPaths = let + configFile = lib.pipe cfg.settings [ + (lib.mapAttrsToList + (k: v: + if builtins.isList v + then lib.mapConcatStringsSep "\n" (v': "${k}=${v'}") v + else "${k}=${v}") + ) + (lib.concatStringsSep "\n") + (pkgs.writeText "uptimed.conf") + ]; + in [ + "${configFile}:/var/lib/uptimed/uptimed.conf" + ]; + }; + }; + }; +}