topology: localize nixos module, add custom extractor, fix misc

This commit is contained in:
h7x4
2025-12-30 02:01:10 +09:00
parent 58be01e620
commit 197433a4c3
4 changed files with 93 additions and 31 deletions

View File

@@ -93,7 +93,6 @@
modules = [ modules = [
configurationPath configurationPath
sops-nix.nixosModules.sops sops-nix.nixosModules.sops
inputs.nix-topology.nixosModules.default
] ++ extraArgs.modules or []; ] ++ extraArgs.modules or [];
pkgs = import nixpkgs { pkgs = import nixpkgs {
@@ -244,27 +243,50 @@
bluemap = pkgs.callPackage ./packages/bluemap.nix { }; bluemap = pkgs.callPackage ./packages/bluemap.nix { };
out-of-your-element = pkgs.callPackage ./packages/out-of-your-element.nix { }; out-of-your-element = pkgs.callPackage ./packages/out-of-your-element.nix { };
} // }
//
# Mediawiki extensions
(lib.pipe null [ (lib.pipe null [
(_: pkgs.callPackage ./packages/mediawiki-extensions { }) (_: pkgs.callPackage ./packages/mediawiki-extensions { })
(lib.flip builtins.removeAttrs ["override" "overrideDerivation"]) (lib.flip builtins.removeAttrs ["override" "overrideDerivation"])
(lib.mapAttrs' (name: lib.nameValuePair "mediawiki-${name}")) (lib.mapAttrs' (name: lib.nameValuePair "mediawiki-${name}"))
]) ])
// lib.genAttrs allMachines //
(machine: self.nixosConfigurations.${machine}.config.system.build.toplevel); # Machines
}; lib.genAttrs allMachines
(machine: self.nixosConfigurations.${machine}.config.system.build.toplevel)
//
# Nix-topology
(let
topology' = import inputs.nix-topology {
pkgs = import nixpkgs {
system = "x86_64-linux";
overlays = [ inputs.nix-topology.overlays.default ];
};
topology.x86_64-linux = import inputs.nix-topology { modules = [
pkgs = import nixpkgs { ./topology
system = "x86_64-linux"; {
overlays = [inputs.nix-topology.overlays.default]; nixosConfigurations = lib.mapAttrs (_name: nixosCfg: nixosCfg.extendModules {
}; # Only this package set must include nix-topology.overlays.default modules = [
modules = [ inputs.nix-topology.nixosModules.default
# Your own file to define global topology. Works in principle like a nixos module but uses different options. ./topology/service-extractors/greg-ng.nix
./topology.nix ];
# Inline module to inform topology of your existing NixOS hosts. }) self.nixosConfigurations;
{ nixosConfigurations = self.nixosConfigurations; } }
]; ];
};
in {
topology = topology'.config.output;
topology-png = pkgs.runCommand "pvv-config-topology-png" {
nativeBuildInputs = [ pkgs.writableTmpDirAsHomeHook ];
} ''
mkdir -p "$out"
for file in '${topology'.config.output}'/*.svg; do
${lib.getExe pkgs.imagemagick} -density 300 -background none "$file" "$out"/"$(basename "''${file%.svg}.png")"
done
'';
});
}; };
}; };
} }

View File

@@ -1,4 +1,4 @@
{ config, ... }: { lib, config, ... }:
let let
inherit inherit
(config.lib.topology) (config.lib.topology)
@@ -8,10 +8,9 @@ let
mkDevice mkDevice
mkConnection mkConnection
mkConnectionRev; mkConnectionRev;
values = import ./values.nix; values = import ../values.nix;
in { in {
### Networks
### Networks
networks.pvv = { networks.pvv = {
name = "PVV Network"; name = "PVV Network";
@@ -44,7 +43,7 @@ in {
interfaces.eth1.network = "ntnu"; interfaces.eth1.network = "ntnu";
}; };
### Brus ### Brus
nodes.ntnu-pvv-router = mkRouter "NTNU PVV Gateway" { nodes.ntnu-pvv-router = mkRouter "NTNU PVV Gateway" {
interfaceGroups = [ ["wan1"] ["eth1"] ]; interfaceGroups = [ ["wan1"] ["eth1"] ];
@@ -53,12 +52,19 @@ in {
}; };
nodes.brus-switch = mkSwitch "Brus Switch" { nodes.brus-switch = mkSwitch "Brus Switch" {
interfaceGroups = [ ["eth1" "eth2" "eth3" "eth4" "eth5" "eth6" "eth7"] ]; interfaceGroups = [ (lib.genList (i: "eth${toString i}") 16) ];
connections.eth2 = mkConnection "bekkalokk" "enp2s0"; connections.eth2 = mkConnection "bekkalokk" "enp2s0";
connections.eth3 = mkConnection "bicep" "enp6s0f0"; # connections.eth3 = mkConnection "bicep" "enp6s0f0";
# connections.eth4 = mkConnection "buskerud" "enp3s0f0"; connections.eth4 = mkConnection "buskerud" "eth1";
connections.eth5 = mkConnection "knutsen" "eth1"; connections.eth5 = mkConnection "knutsen" "eth1";
connections.eth7 = mkConnection "joshua" "eth1"; connections.eth6 = mkConnection "powerpuff-cluster" "eth1";
connections.eth8 = mkConnection "lupine-1" "enp0s31f6";
connections.eth9 = mkConnection "lupine-2" "enp0s31f6";
connections.eth11 = mkConnection "lupine-3" "enp0s31f6";
connections.eth10 = mkConnection "lupine-4" "enp0s31f6";
connections.eth12 = mkConnection "lupine-5" "enp0s31f6";
}; };
nodes.knutsen = mkRouter "knutsen" { nodes.knutsen = mkRouter "knutsen" {
@@ -69,17 +75,37 @@ in {
interfaces.vpn1.virtual = true; interfaces.vpn1.virtual = true;
}; };
nodes.joshua = mkDevice "joshua" { nodes.buskerud = mkDevice "buskerud" {
interfaceGroups = [ ["eth1"] ]; interfaceGroups = [ ["eth1"] ];
}; };
nodes.shark = { nodes.shark = {
guestType = "proxmox"; guestType = "proxmox";
parent = config.nodes.joshua.id; parent = config.nodes.buskerud.id;
}; };
### Powerpuff
### PVV nodes.powerpuff-cluster = mkDevice "powerpuff-cluster" {
interfaceGroups = [ ["eth1"] ];
};
nodes.kommode = {
guestType = "proxmox";
parent = config.nodes.powerpuff-cluster.id;
};
nodes.bicep = {
guestType = "proxmox";
parent = config.nodes.powerpuff-cluster.id;
};
nodes.ustetind = {
guestType = "proxmox";
parent = config.nodes.powerpuff-cluster.id;
};
### PVV
nodes.ntnu-veggen = mkRouter "NTNU-Veggen" { nodes.ntnu-veggen = mkRouter "NTNU-Veggen" {
interfaceGroups = [ ["wan1"] ["eth1"] ]; interfaceGroups = [ ["wan1"] ["eth1"] ];
@@ -102,7 +128,7 @@ in {
}; };
### Openstack ### Openstack
nodes.stackit = mkDevice "stackit" { nodes.stackit = mkDevice "stackit" {
interfaceGroups = [ ["*"] ]; interfaceGroups = [ ["*"] ];
@@ -112,9 +138,12 @@ in {
guestType = "openstack"; guestType = "openstack";
parent = config.nodes.stackit.id; parent = config.nodes.stackit.id;
}; };
nodes.bob = { nodes.wenche = {
guestType = "openstack";
parent = config.nodes.stackit.id;
};
nodes.bakke = {
guestType = "openstack"; guestType = "openstack";
parent = config.nodes.stackit.id; parent = config.nodes.stackit.id;
}; };
} }

BIN
topology/icons/greg-ng.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@@ -0,0 +1,11 @@
{ config, lib, ... }:
let
cfg = config.services.greg-ng or { enable = false; };
in
{
config.topology.self.services.greg-ng = lib.mkIf cfg.enable {
name = "Greg-ng";
icon = ../icons/greg-ng.png;
details.listen = { text = "${cfg.settings.host}:${toString cfg.settings.port}"; };
};
}