12{3 nixpkgs,4 hostNames,5}:6with nixpkgs.lib; rec {7 hostsToAttrs = f:8 listToAttrs (9 map (name: {10 inherit name;11 value = f name;12 })13 hostNames14 );15 hostsCartesian = remove null (16 unique (17 crossLists18 (19 a: b:20 if a == b21 then null22 else hostsPair a b23 ) [hostNames hostNames]24 )25 );26 hostsPair = this: other: let27 sorted = sort (a: b: a < b) [this other];28 in {29 a = elemAt sorted 0;30 b = elemAt sorted 1;31 };32 hostPairName = this: other:33 if this < other34 then "${this}-${other}"35 else "${other}-${this}";3637 38 39 mkFleetDefault = mkOverride 999;40 41 mkFleetGeneratorDefault = mkOverride 1001;4243 mkPassword = {size ? 32}: {44 coreutils,45 encrypt,46 mkSecretGenerator,47 }:48 mkSecretGenerator {49 script = ''50 mkdir $out5152 ${coreutils}/bin/tr -dc 'A-Za-z0-9!?%=' < /dev/random \53 | ${coreutils}/bin/head -c ${toString size} \54 | ${encrypt} > $out/secret55 '';56 };5758 mkRsa = {size ? 4096}: {59 openssl,60 encrypt,61 mkSecretGenerator,62 }:63 mkSecretGenerator {64 script = ''65 mkdir $out6667 ${openssl}/bin/openssl genrsa -out rsa_private.key ${toString size}68 ${openssl}/bin/openssl rsa -in rsa_private.key -pubout -out rsa_public.key6970 sudo cat rsa_private.key | ${encrypt} > $out/secret71 sudo cat rsa_public.key > $out/public72 '';73 };74}