about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2024-05-02 03:17:48 +0300
committerAzat Bahawi <azat@bahawi.net>2024-05-02 03:17:48 +0300
commit9b3ebd974bde5c8ebe1f8c8f049f7ee2c6462655 (patch)
tree408194f6f761872df938888ebc4ce46244168618
parent2024-05-01 (diff)
2024-05-02
-rw-r--r--checks.nix8
-rw-r--r--configurations/default.nix2
-rw-r--r--flake.nix63
-rw-r--r--lib/my.nix11
-rw-r--r--modules/default.nix4
-rw-r--r--modules/wireguard.nix23
-rw-r--r--overlays.nix2
-rw-r--r--topology.nix20
8 files changed, 114 insertions, 19 deletions
diff --git a/checks.nix b/checks.nix
index 86cb452..3570574 100644
--- a/checks.nix
+++ b/checks.nix
@@ -1,4 +1,10 @@
-inputs: system: pkgs: {
+{
+  inputs,
+  pkgs,
+  system,
+  ...
+}:
+{
   preCommit = inputs.git-hooks.lib.${system}.run {
     src = builtins.path {
       name = "nixfiles";
diff --git a/configurations/default.nix b/configurations/default.nix
index 1c1bda0..78eb2bc 100644
--- a/configurations/default.nix
+++ b/configurations/default.nix
@@ -1,4 +1,4 @@
-inputs:
+{ inputs, ... }:
 with inputs.self.lib;
 let
   mkConfiguration =
diff --git a/flake.nix b/flake.nix
index dc194f5..484f94b 100644
--- a/flake.nix
+++ b/flake.nix
@@ -133,6 +133,8 @@
   outputs =
     inputs@{ self, nixpkgs, ... }:
     let
+      lib = nixpkgs.lib.extend (import ./lib);
+
       system = "x86_64-linux";
 
       pkgs = import nixpkgs {
@@ -144,23 +146,23 @@
       };
     in
     {
-      lib = nixpkgs.lib.extend (import ./lib);
+      inherit lib;
 
-      legacyPackages.${system} = pkgs;
+      apps.${system}.default = {
+        type = "app";
+        program = self.lib.getExe self.packages.${system}.nixfiles;
+      };
 
       packages.${system} = {
         default = self.packages.${system}.nixfiles;
         inherit (self.legacyPackages.${system}) nixfiles;
 
         iso = self.nixosConfigurations.iso.config.system.build.isoImage;
-      };
 
-      apps.${system}.default = {
-        type = "app";
-        program = self.lib.getExe self.packages.${system}.nixfiles;
+        topology = self.topology.config.output;
       };
 
-      overlays = import ./overlays.nix;
+      legacyPackages.${system} = pkgs;
 
       devShells.${system}.default =
         with pkgs;
@@ -169,14 +171,51 @@
           packages = [ go-task ];
         };
 
-      nixosModules = import ./modules self.lib;
+      formatter.${system} = pkgs.nixfmt;
+
+      checks.${system} = import ./checks.nix {
+        inherit
+          inputs
+          lib
+          pkgs
+          system
+          ;
+      };
 
-      nixosConfigurations = import ./configurations inputs;
+      nixosModules = import ./modules {
+        inherit
+          inputs
+          lib
+          pkgs
+          system
+          ;
+      };
 
-      checks.${system} = import ./checks.nix inputs system pkgs;
+      nixosConfigurations = import ./configurations {
+        inherit
+          inputs
+          lib
+          pkgs
+          system
+          ;
+      };
 
-      formatter.${system} = pkgs.nixfmt;
+      overlays = import ./overlays.nix {
+        inherit
+          inputs
+          lib
+          pkgs
+          system
+          ;
+      };
 
-      topology = import ./topology.nix inputs self pkgs;
+      topology = import ./topology.nix {
+        inherit
+          inputs
+          lib
+          pkgs
+          system
+          ;
+      };
     };
 }
diff --git a/lib/my.nix b/lib/my.nix
index c0ec35a..7d2d1de 100644
--- a/lib/my.nix
+++ b/lib/my.nix
@@ -30,6 +30,12 @@ with lib;
                       readOnly = true;
                     };
 
+                    deviceIcon = mkOption {
+                      description = "Device icon to be used with nix-topology.";
+                      type = nullOr (either path str);
+                      default = null;
+                    };
+
                     system = mkOption {
                       description = "The machine's system.";
                       type = nullOr (enum platforms.all);
@@ -146,6 +152,7 @@ with lib;
         configurations = {
           # VPS in Germany.
           manwe = {
+            deviceIcon = "devices.cloud-server";
             system = "x86_64-linux";
             isHeadless = true;
             ipv4 = {
@@ -188,6 +195,7 @@ with lib;
 
           # VPS in Germany.
           varda = {
+            deviceIcon = "devices.cloud-server";
             system = "x86_64-linux";
             isHeadless = true;
             ipv4 = {
@@ -209,6 +217,7 @@ with lib;
 
           # VPS in France.
           yavanna = {
+            deviceIcon = "devices.cloud-server";
             system = "x86_64-linux";
             isHeadless = true;
             ipv4 = {
@@ -236,6 +245,7 @@ with lib;
 
           # A beefy desktop: 7950x/rx6750xt/128GB.
           eonwe = {
+            deviceIcon = "devices.desktop";
             system = "x86_64-linux";
             isHeadful = true;
             wireguard = {
@@ -248,6 +258,7 @@ with lib;
 
           # ThinkPad T480.
           melian = {
+            deviceIcon = "devices.laptop";
             system = "x86_64-linux";
             isHeadful = true;
             wireguard = {
diff --git a/modules/default.nix b/modules/default.nix
index 9ed1029..e41e09b 100644
--- a/modules/default.nix
+++ b/modules/default.nix
@@ -1,4 +1,6 @@
-lib: with lib; {
+{ lib, ... }:
+with lib;
+{
   nixfiles =
     { ... }:
     {
diff --git a/modules/wireguard.nix b/modules/wireguard.nix
index f645a90..6e5bdbc 100644
--- a/modules/wireguard.nix
+++ b/modules/wireguard.nix
@@ -9,6 +9,7 @@
 with lib;
 let
   cfg = config.nixfiles.modules.wireguard;
+  inherit (config.lib.topology) mkConnection;
 in
 {
   options.nixfiles.modules.wireguard = {
@@ -112,6 +113,13 @@ in
         secrets."wireguard-private-key-${this.hostname}".file = "${inputs.self}/secrets/wireguard-private-key-${this.hostname}";
 
         networking.firewall.trustedInterfaces = [ cfg.interface ];
+
+        topology = with cfg; {
+          nodes.${this.hostname}.interfaces.${interface} = {
+            network = interface;
+            icon = "interfaces.wireguard";
+          };
+        };
       })
       (mkIf cfg.client.enable {
         networking.wg-quick.interfaces.${cfg.interface} = mkMerge [
@@ -210,6 +218,21 @@ in
           withRemoteIp = true;
           port = 9586;
         };
+
+        topology = with cfg; {
+          networks = {
+            ${interface} = {
+              name = interface;
+              cidrv4 = ipv4.subnet;
+              cidrv6 = ipv6.subnet;
+              icon = "interfaces.wireguard";
+            };
+          };
+
+          nodes.${this.hostname}.interfaces.${interface}.physicalConnections = mapAttrsToList (
+            name: _: (mkConnection name interface)
+          ) (filterAttrs (n: v: !v.isOther && n != this.hostname && hasAttr "wireguard" v) my.configurations);
+        };
       })
     ];
 }
diff --git a/overlays.nix b/overlays.nix
index 642c587..0adbc88 100644
--- a/overlays.nix
+++ b/overlays.nix
@@ -1,4 +1,4 @@
-{
+_: {
   default = final: prev: {
     bruh = prev.callPackage ./packages/bruh.nix { };
 
diff --git a/topology.nix b/topology.nix
index 8830f12..a9d1501 100644
--- a/topology.nix
+++ b/topology.nix
@@ -1,8 +1,22 @@
-inputs: self: pkgs:
+{
+  inputs,
+  lib,
+  pkgs,
+  ...
+}:
+with lib;
 import inputs.nix-topology {
   inherit pkgs;
   modules = [
-    { inherit (self) nixosConfigurations; }
-    (_: { })
+    {
+      nixosConfigurations = filterAttrs (
+        n: _: !(hasPrefix "test" n) && !(hasPrefix "iso" n)
+      ) inputs.self.nixosConfigurations;
+    }
+    (_: {
+      nodes = mapAttrs (_: v: { inherit (v) deviceIcon; }) (
+        filterAttrs (_: v: !v.isOther) my.configurations
+      );
+    })
   ];
 }

Consider giving Nix/NixOS a try! <3