{ config, lib, pkgs, ... }: with lib; let cfg = config.services.uucp.notify-client; nodeConfig = { options = { allowedUsers = mkOption { type = with types; uniq (listOf str); default = config.services.notify-users; }; }; }; in { options = { services.uucp.notify-client = { remoteNodes = mkOption { type = with types; attrsOf (submodule nodeConfig); default = {}; description = '' Servers to receive notifications from ''; }; }; }; imports = [ ./notify-users.nix ]; config = mkIf (cfg.remoteNodes != {}) { assertions = map (user: { assertion = elem user config.services.notify-users; message = "Notification must be allowed for ${user}!"; }) (unique (concatLists (mapAttrsToList (name: { allowedUsers, ... }: allowedUsers) cfg.remoteNodes))); services.uucp.remoteNodes = mapAttrs (name: { allowedUsers, ... }: { commands = map (user: "notify-${user}") allowedUsers; }) cfg.remoteNodes; services.uucp.commandPath = [ config.security.wrapperDir ]; }; }