diff --git a/flake.nix b/flake.nix index 6bcf36f..ed73265 100644 --- a/flake.nix +++ b/flake.nix @@ -37,6 +37,69 @@ default = self.apps.x86_64-linux.solid-xmpp-alarm; }; + nixosModules = { + solid-xmpp-alarm = { config, lib, pkgs, ... }: + with lib; + + let + cfg = config.services.solid-xmpp-alarm; + in { + options = { + services.solid-xmpp-alarm = { + enable = mkEnableOption "Prometheus Alertmanager webhook receiver for XMPP clients"; + jid = mkOption { + type = types.str; + description = '' + XMPP account name of the sender. + ''; + }; + passwordFile = mkOption { + type = types.path; + description = '' + Path to file containing the password to log into the senders account. + ''; + }; + receiver = mkOption { + type = types.str; + description = '' + XMPP account name of the receiver. + ''; + }; + package = mkOption { + type = types.package; + default = self.packages.${config.nixpkgs.system}.solid-xmpp-alarm; + description = '' + Specify a custom solid-xmpp-alarm package. By default use the one shipped with this flake. + ''; + }; + }; + }; + config = mkIf cfg.enable { + users.users."solid-xmpp-alarm" = { + isSystemUser = true; + group = "solid-xmpp-alarm"; + }; + users.groups."solid-xmpp-alarm" = {}; + + systemd.services."solid-xmpp-alarm" = { + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + serviceConfig = { + Restart = "always"; + PrivateTmp = true; + WorkingDirectory = "/tmp"; + RuntimeDirectory = "solid-xmpp-alarm"; + User = "solid-xmpp-alarm"; + Group = "solid-xmpp-alarm"; + ExecStart = '' + ${cfg.package}/bin/solid-xmpp-alarm --jid ${cfg.jid} --password-file ${cfg.passwordFile} --receiver ${cfg.receiver} + ''; + }; + }; + }; + }; + }; + hydraJobs = { inherit (self) packages;