diff --git a/clanServices/sshd/default.nix b/clanServices/sshd/default.nix index 1c511e0fc..e49cd3bc8 100644 --- a/clanServices/sshd/default.nix +++ b/clanServices/sshd/default.nix @@ -39,6 +39,7 @@ ... }: let + uniqueStrings = list: builtins.attrNames (builtins.groupBy lib.id list); # Collect searchDomains from all servers in this instance allServerSearchDomains = lib.flatten ( lib.mapAttrsToList (_name: machineConfig: machineConfig.settings.certificate.searchDomains or [ ]) ( @@ -46,7 +47,7 @@ ) ); # Merge client's searchDomains with all servers' searchDomains - searchDomains = lib.uniqueStrings (settings.certificate.searchDomains ++ allServerSearchDomains); + searchDomains = uniqueStrings (settings.certificate.searchDomains ++ allServerSearchDomains); in { clan.core.vars.generators.openssh-ca = lib.mkIf (searchDomains != [ ]) { diff --git a/clanServices/zerotier/default.nix b/clanServices/zerotier/default.nix index a74c8a41f..770023f4b 100644 --- a/clanServices/zerotier/default.nix +++ b/clanServices/zerotier/default.nix @@ -140,6 +140,9 @@ pkgs, ... }: + let + uniqueStrings = list: builtins.attrNames (builtins.groupBy lib.id list); + in { imports = [ (import ./shared.nix { @@ -156,7 +159,7 @@ config = { systemd.services.zerotier-inventory-autoaccept = let - machines = lib.uniqueStrings ( + machines = uniqueStrings ( (lib.optionals (roles ? moon) (lib.attrNames roles.moon.machines)) ++ (lib.optionals (roles ? controller) (lib.attrNames roles.controller.machines)) ++ (lib.optionals (roles ? peer) (lib.attrNames roles.peer.machines)) diff --git a/lib/inventory/distributed-service/service-module.nix b/lib/inventory/distributed-service/service-module.nix index 06ee03330..63e3f1dce 100644 --- a/lib/inventory/distributed-service/service-module.nix +++ b/lib/inventory/distributed-service/service-module.nix @@ -7,10 +7,14 @@ ... }: let - inherit (lib) mkOption types uniqueStrings; + inherit (lib) mkOption types; inherit (types) attrsWith submoduleWith; errorContext = "Error context: ${lib.concatStringsSep "." _ctx}"; + # TODO: + # Remove once this gets merged upstream; performs in O(n*log(n) instead of O(n^2)) + # https://github.com/NixOS/nixpkgs/pull/355616/files + uniqueStrings = list: builtins.attrNames (builtins.groupBy lib.id list); /** Merges the role- and machine-settings using the role interface