From b250a6b1b30ceea86bf66b11de8a068fd1d6086b Mon Sep 17 00:00:00 2001 From: oddlama Date: Tue, 11 Apr 2023 17:50:19 +0200 Subject: [PATCH] feat(apps): add wireguard peer selection for use with qr code generation later --- modules/wireguard.nix | 2 +- nix/apps/default.nix | 1 + nix/apps/show-wireguard-qr.nix | 22 ++++++++++++++++++---- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/modules/wireguard.nix b/modules/wireguard.nix index 7cbc617..2277a18 100644 --- a/modules/wireguard.nix +++ b/modules/wireguard.nix @@ -174,7 +174,7 @@ in { in { assertions = concatMap (netCfg: let - inherit netCfg wgName; + inherit (netCfg) wgName; externalPeers = concatMap (n: attrNames nodes.${n}.config.extra.wireguard.networks.${wgName}.externalPeers) netCfg.nodesWithThisNetwork; duplicatePeers = duplicates externalPeers; usedAddresses = diff --git a/nix/apps/default.nix b/nix/apps/default.nix index d455011..1834ffb 100644 --- a/nix/apps/default.nix +++ b/nix/apps/default.nix @@ -15,6 +15,7 @@ ./format-secrets.nix ./generate-initrd-keys.nix ./generate-wireguard-keys.nix + ./show-wireguard-qr.nix ]; in builtins.listToAttrs (map (appPath: nameValuePair (removeSuffix ".nix" (builtins.baseNameOf appPath)) (mkApp (import appPath args))) apps) diff --git a/nix/apps/show-wireguard-qr.nix b/nix/apps/show-wireguard-qr.nix index 4b2d41f..8db21df 100644 --- a/nix/apps/show-wireguard-qr.nix +++ b/nix/apps/show-wireguard-qr.nix @@ -3,10 +3,24 @@ pkgs, ... }: let - inherit (pkgs.lib) escapeShellArg; + inherit + (pkgs.lib) + attrNames + concatMap + concatStringsSep + escapeShellArg + filter + unique + ; + + nodeNames = attrNames self.nodes; + nodesWithNet = net: filter (n: builtins.hasAttr net self.nodes.${n}.config.extra.wireguard.networks) nodeNames; + wireguardNetworks = unique (concatMap (n: attrNames self.nodes.${n}.config.extra.wireguard.networks) nodeNames); + externalPeersForNet = net: concatMap (n: attrNames self.nodes.${n}.config.extra.wireguard.networks.${net}.externalPeers) (nodesWithNet net); + externalPeers = concatMap (net: map (peer: {inherit net peer;}) (externalPeersForNet net)) wireguardNetworks; in - # TODO fzf selection of all external peers pls - pkgs.writeShellScript "generate-wireguard-keys" '' + # TODO generate "classic" config and run qrencode + pkgs.writeShellScript "show-wireguard-qr" '' set -euo pipefail - echo TODO + echo ${concatStringsSep " " (map (x: "${x.net}.${x.peer}") externalPeers)} | fzf ''