From 86b5751410ca62bd6b2c5ad3218a68e25f06c16d Mon Sep 17 00:00:00 2001 From: oddlama Date: Mon, 13 Feb 2023 01:50:24 +0100 Subject: [PATCH] chore: prototype d2 graphing app --- flake.nix | 17 +------------ hosts/nom/meta.nix | 4 +++ hosts/nom/net.nix | 4 +-- hosts/ward/meta.nix | 4 +++ hosts/ward/net.nix | 4 +-- nix/apps.nix | 48 +++++++++++++++++++++++++++++++++++ users/common/fish.nix | 10 +++----- users/myuser/dev.nix | 5 +++- users/myuser/yubikey.pub.age | Bin 2150 -> 0 bytes 9 files changed, 69 insertions(+), 27 deletions(-) create mode 100644 nix/apps.nix delete mode 100644 users/myuser/yubikey.pub.age diff --git a/flake.nix b/flake.nix index 58215e9..52e621a 100644 --- a/flake.nix +++ b/flake.nix @@ -61,22 +61,7 @@ apps = agenix-rekey.defineApps self pkgs self.nodes - // { - generate-initrd-keys = flake-utils.mkApp { - drv = let - generateHostKey = node: '' - if [[ ! -f ${node.config.rekey.secrets.initrd_host_ed25519_key.file} ]]; then - ssh-keygen -t ed25519 -N "" -f /tmp/1 - TODO - fi - ''; - in - pkgs.writeShellScript "generate-initrd-keys" '' - set -euo pipefail - ${pkgs.lib.concatStringsSep "\n" (pkgs.lib.mapAttrsToList generateHostKey self.nodes)} - ''; - }; - }; + // import ./nix/apps.nix inputs system; checks = import ./nix/checks.nix inputs system; devShells.default = import ./nix/dev-shell.nix inputs system; formatter = pkgs.alejandra; diff --git a/hosts/nom/meta.nix b/hosts/nom/meta.nix index df2fdb0..4e0cb6a 100644 --- a/hosts/nom/meta.nix +++ b/hosts/nom/meta.nix @@ -1,4 +1,8 @@ { type = "nixos"; system = "x86_64-linux"; + physical_connections = { + "10-lan1" = "LAN 1"; + "10-wlan1" = "WiFi"; + }; } diff --git a/hosts/nom/net.nix b/hosts/nom/net.nix index d7f37da..0b13f0e 100644 --- a/hosts/nom/net.nix +++ b/hosts/nom/net.nix @@ -5,14 +5,14 @@ }; systemd.network.networks = { - "10-lan0" = { + "10-lan1" = { DHCP = "yes"; matchConfig.MACAddress = "00:00:00:00:00:00"; networkConfig.IPv6PrivacyExtensions = "kernel"; dhcpV4Config.RouteMetric = 10; dhcpV6Config.RouteMetric = 10; }; - "10-wlan0" = { + "10-wlan1" = { DHCP = "yes"; matchConfig.MACAddress = "00:00:00:00:00:00"; networkConfig.IPv6PrivacyExtensions = "kernel"; diff --git a/hosts/ward/meta.nix b/hosts/ward/meta.nix index df2fdb0..238009b 100644 --- a/hosts/ward/meta.nix +++ b/hosts/ward/meta.nix @@ -1,4 +1,8 @@ { type = "nixos"; system = "x86_64-linux"; + physical_connections = { + "10-lan1" = "LAN 1"; + "10-lan2" = "LAN 2"; + }; } diff --git a/hosts/ward/net.nix b/hosts/ward/net.nix index e871ef6..03c7a3d 100644 --- a/hosts/ward/net.nix +++ b/hosts/ward/net.nix @@ -4,14 +4,14 @@ }; systemd.network.networks = { - "10-lan0" = { + "10-lan1" = { DHCP = "yes"; matchConfig.MACAddress = "00:00:00:00:00:00"; networkConfig.IPv6PrivacyExtensions = "kernel"; dhcpV4Config.RouteMetric = 10; dhcpV6Config.RouteMetric = 10; }; - "10-lan1" = { + "10-lan2" = { DHCP = "yes"; matchConfig.MACAddress = "00:00:00:00:00:00"; networkConfig.IPv6PrivacyExtensions = "kernel"; diff --git a/nix/apps.nix b/nix/apps.nix new file mode 100644 index 0000000..6208205 --- /dev/null +++ b/nix/apps.nix @@ -0,0 +1,48 @@ +{self, ...}: system: let + mkApp = drv: { + type = "app"; + program = "${drv}"; + }; + pkgs = self.pkgs.${system}; + mapAttrsToLines = f: attrs: pkgs.lib.concatStringsSep "\n" (pkgs.lib.mapAttrsToList f attrs); + filterMapAttrsToLines = filter: f: attrs: pkgs.lib.concatStringsSep "\n" (pkgs.lib.mapAttrsToList f (pkgs.lib.filterAttrs filter attrs)); +in + with pkgs.lib; { + draw-graph = let + renderNode = nodeName: node: let + renderNic = nicName: nic: '' + nic_${nicName}: ${ + if hasInfix "wlan" nicName + then "📶" + else "🖧" + } ${self.hosts.${nodeName}.physical_connections.${nicName}} { + shape: sql_table + MAC: ${nic.matchConfig.MACAddress} + } + ''; + in '' + ${nodeName}: { + ${filterMapAttrsToLines (_: v: v.matchConfig ? MACAddress) renderNic node.config.systemd.network.networks} + } + ''; + graph = '' + ${mapAttrsToLines renderNode self.nodes} + ''; + in + mkApp (pkgs.writeShellScript "draw-graph" '' + set -euo pipefail + echo "${graph}" + ''); + generate-initrd-keys = let + generateHostKey = node: '' + if [[ ! -f ${node.config.rekey.secrets.initrd_host_ed25519_key.file} ]]; then + ssh-keygen -t ed25519 -N "" -f /tmp/1 + TODO + fi + ''; + in + mkApp (pkgs.writeShellScript "generate-initrd-keys" '' + set -euo pipefail + ${mapAttrsToLines generateHostKey self.nodes} + ''); + } diff --git a/users/common/fish.nix b/users/common/fish.nix index 6bcfcdc..1ad4f10 100644 --- a/users/common/fish.nix +++ b/users/common/fish.nix @@ -15,8 +15,6 @@ with lib; { (mkBefore '' set -g ATUIN_NOBIND true set -g fish_greeting - #set -g fish_autosuggestion_enabled 0 - set -g FZF_COMPLETE 2 '') (mkAfter '' bind \cr _atuin_search @@ -30,10 +28,10 @@ with lib; { { name = "fzf"; src = pkgs.fetchFromGitHub { - owner = "jethrokuan"; - repo = "fzf"; - rev = "479fa67d7439b23095e01b64987ae79a91a4e283"; - sha256 = "0k6l21j192hrhy95092dm8029p52aakvzis7jiw48wnbckyidi6v"; + owner = "oddlama"; + repo = "fzf.fish"; + rev = "63c8f8e65761295da51029c5b6c9e601571837a1"; + sha256 = "036n50zr9kyg6ad408zn7wq2vpfwhmnfwab465km4dk60ywmrlcb"; }; } ]; diff --git a/users/myuser/dev.nix b/users/myuser/dev.nix index e149b97..758528d 100644 --- a/users/myuser/dev.nix +++ b/users/myuser/dev.nix @@ -7,7 +7,10 @@ set auto-load safe-path / ''; }; - packages = with pkgs; [git-lfs]; + packages = with pkgs; [ + git-lfs + d2 + ]; }; programs = { diff --git a/users/myuser/yubikey.pub.age b/users/myuser/yubikey.pub.age deleted file mode 100644 index e9305db6c2fe632377f39c4282592f44aade8fc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2150 zcmV-s2$}a`XJsvAZewzJaCB*JZZ2X+l~tc5@0XJ|J*ub}eu+H8vo4aZ_bDQ6NEZGcqwTZDd1A zH#avzMsj#rX?as>d2D!7Yeq+7MMha{Q&@3KRWCVeL{tiON-t7(LN!EJa7kEZXLM0z zdR9tMPi!(vLqt($Yj0&oY;IR(HAF*AFF^_|J|H?sZ8$Awa%Ew2Wgs#`NFpFOQ!_O~ zAZ`jWHF0BPGjmQWRBli&Gfyu}FE2Skbue^CT6IWpaYIB-Lvso(EiE8yM07BDN=8~Z zY(#Nzb89e0NMv_VGip#WdU--HMJr}VR7_N9ctT}TMt2I{Vnb7X4{np;Wz`1u-X_3_ z1TrL&n$&P2Z}(>}*0_C=cvXDSrIiu&MQ51DAoH%>99zIz7;RuYvc*e%=Zb!%ia+9e z1AV@p7cGp$Jt|v=O9CXqgN9j8+_HQM6kq+H1boVr-h$iDd+~rDk3s29s)n~@9l#qi z%!H;r(|epzH%I8YP%uP`grx?Dyvre63#?|d&wA5PzyL;2uD}!EdT;%YASxSH^3*10 zk>#(6vc|82I2XhSWU*cbb`2`nT(OWO#T$rmcsLz`#&yTd|6DOMXdd!HZ{JI2BIFm7 z4!h!+L=jvfZu?L-9pUBGM$t^~!KH#Da(=z*R;sBg*T&FJDamxlbsw>$zp3x4X94f> zTt!Y(UM>ic`JcDUFVN1*nCVHO4aNgj!R2RC)@QAJCsP8*`{#^DeP}lE8_h?sXrDFM zNk$VNT%ZwgX>Te!J8=$wC`nLd4orJ>F@xh|V4w}&@PhKJI?;wHG~D&BJqDr)Y4EvN zn}R^?$h4^J36e9AcA-K>VQ@=}P{kKvT42a0K{GwzWsO`WJR?esgh2rJcdhwoIzl(U z`usKIi|s3AqtXXy?;0UbYQ;4xzQ{gRY4lx$|8Mm)gRRb=A*he{mv`GVffnDUb{+Sz zsF*GjzB>PfoH*d!4Le2Q^FDFYz2*3^bl-BN<}bf* z01AObLhAuN2AgRB$K&g?Fx*s=u>va15BP~CnUXShw*IjhVC$)dGpiyyuVW1G zQiH<~20MwO{I`390fHA~BMQPYT!WsI7WVu3?KGG0z+O1y3i!Ux9q$_)^U(+9WV`6U zr0W+4KzT+o>#50zb^R>|nmzw!xoq;i!gJ5FAa1D;^JVZdqxS?wJ9 z_`P!dL?fWX}75{iO4&r}3|-{LwT z#A50Q5}K8ivS#DNT+4IP6AM8X!X^lTq}a*>+V_5$uLBi7eCNXRO_$;{#J>@Yg^wf; zD)c96J~_$tYh*J;y(Fl+$dS{3rUh)KFuCH_ASgXw1JZ!x$S;l*2&GX|NGex8fCz zP8MvFYj7Wm+8{_3DwAZWQI<3n4H4pJbG_ObI!vtKY$w=EuTk6*C1&xS>MVrnc=HK& z7ZKNL=fQ(pb0<7TCJ%%%lhGhj#`QmLo>-WFM5wvv@DYCsZESjPR{k27D9CP-CnCLr z=|2@Nq)4UE%}~BEl}}?fzF)!IG}+kCVzet8%Mbb2eYT}3`@Js2ono}{ND!h}v$?hT zNXjlUOYHb+G|hmG*%fe0X1FlY14H>w(EI^qAvJHGmJdCG8flf?2S_N2G)v$a3N$hS z5JoIr`z)TQNj}nclA68fttPeY4~e#Z({CGL>^?1a-ES9>?AHUEUV#w)(_!~TdRSyp zr@65W@WOP#0K>IZE6j&@_P*>kZ=7=N@M6WMGegZq4*H>Tht@;3^xb9r%O{iUSR0M1 z^rfp>y0`0+_fRPLrSgybSSNL6i_F}I6&RZe!|p`j^aw&#e99hDVRRhIoR5r#604YJ c+^%kq5oo9&eF~Ug@gB>oFT0v<5G|p4920Kn2LJ#7