5 Commits

Author SHA1 Message Date
jackos1998 a8318d3de2 nixos/home: Separate HDD LV for frigate
CI / Check, build and cache nixfiles (push) Successful in 51m19s
2026-07-19 11:47:37 +01:00
jackos1998 aab4a193ae nixos/home: Add brian
CI / Check, build and cache nixfiles (push) Failing after 3h2m50s
2026-07-15 02:22:15 +01:00
jackos1998 541102f683 nixos/netboot: Switch to iPXE snp.efi
CI / Check, build and cache nixfiles (push) Successful in 45m47s
2026-07-14 22:42:04 +01:00
jackos1998 805590a705 nixos/routing-common: Fix mstpd missing bridge-stp script
CI / Check, build and cache nixfiles (push) Successful in 46m37s
2026-07-12 18:40:38 +01:00
jackos1998 f8dbd99a7b nixos/routing-common: Add missing ttl param to DDNS update 2026-07-12 17:15:57 +01:00
11 changed files with 84 additions and 18 deletions
+4 -3
View File
@@ -175,11 +175,11 @@ rec {
}; };
vm = rec { vm = rec {
lvmDisk' = name: lv: { lvmDisk'' = name: vg: lv: {
inherit name; inherit name;
backend = { backend = {
driver = "host_device"; driver = "host_device";
filename = "/dev/main/${lv}"; filename = "/dev/${vg}/${lv}";
# It appears this needs to be set on the backend _and_ the format # It appears this needs to be set on the backend _and_ the format
discard = "unmap"; discard = "unmap";
}; };
@@ -189,7 +189,8 @@ rec {
}; };
frontend = "virtio-blk"; frontend = "virtio-blk";
}; };
lvmDisk = lv: lvmDisk' lv lv; lvmDisk' = vg: lv: lvmDisk'' lv vg lv;
lvmDisk = lvmDisk' "main";
disk = vm: lv: lvmDisk' lv "vm-${vm}-${lv}"; disk = vm: lv: lvmDisk' lv "vm-${vm}-${lv}";
}; };
@@ -95,6 +95,7 @@ in
shell = pkgs.bashInteractive; shell = pkgs.bashInteractive;
openssh.authorizedKeys.keyFiles = [ openssh.authorizedKeys.keyFiles = [
lib.my.c.sshKeyFiles.harmonia lib.my.c.sshKeyFiles.harmonia
lib.my.c.sshKeyFiles.me
]; ];
}; };
}; };
+15 -3
View File
@@ -53,7 +53,7 @@ in
}; };
}; };
}); });
kernelModules = [ "kvm-amd" ]; kernelModules = [ "dm-raid" "kvm-amd" ];
kernelParams = [ "amd_iommu=on" ]; kernelParams = [ "amd_iommu=on" ];
initrd = { initrd = {
availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" "sr_mod" ]; availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" "sr_mod" ];
@@ -126,9 +126,9 @@ in
}; };
linkConfig.Name = "et1g0"; linkConfig.Name = "et1g0";
}; };
"10-lan-core" = { "10-lan-core-phy" = {
matchConfig.PermanentMACAddress = "e0:d5:5e:68:0c:70"; matchConfig.PermanentMACAddress = "e0:d5:5e:68:0c:70";
linkConfig.Name = "lan-core"; linkConfig.Name = "lan-core-phy";
}; };
"10-et100g" = { "10-et100g" = {
matchConfig = { matchConfig = {
@@ -145,6 +145,12 @@ in
netdevs = mkMerge [ netdevs = mkMerge [
(mkVLAN "lan-hi" vlans.hi) (mkVLAN "lan-hi" vlans.hi)
(mkVLAN "lan-lo-phy" vlans.lo) (mkVLAN "lan-lo-phy" vlans.lo)
{
"25-lan-core".netdevConfig = {
Name = "lan-core";
Kind = "bridge";
};
}
{ {
"25-lan-lo".netdevConfig = { "25-lan-lo".netdevConfig = {
Name = "lan-lo"; Name = "lan-lo";
@@ -199,6 +205,12 @@ in
}; };
"60-lan-hi" = networkdAssignment "lan-hi" assignments.hi; "60-lan-hi" = networkdAssignment "lan-hi" assignments.hi;
"50-lan-core-phy" = {
matchConfig.Name = "lan-core-phy";
networkConfig = {
Bridge = "lan-core";
} // networkd.noL3;
};
"50-lan-lo-phy" = { "50-lan-lo-phy" = {
matchConfig.Name = "lan-lo-phy"; matchConfig.Name = "lan-lo-phy";
networkConfig = { networkConfig = {
+12 -1
View File
@@ -172,12 +172,23 @@
}; };
memory = 32768; memory = 32768;
cleanShutdown.timeout = 120; cleanShutdown.timeout = 120;
networks.netboot = { networks = {
netboot = {
bridge = "lan-lo"; bridge = "lan-lo";
waitOnline = "carrier"; waitOnline = "carrier";
mac = "52:54:00:a5:7e:93"; mac = "52:54:00:a5:7e:93";
extraOptions.bootindex = 1; extraOptions.bootindex = 1;
}; };
core = {
bridge = "lan-core";
ifname = "vm-sfh-core";
waitOnline = "carrier";
mac = "52:54:00:72:67:51";
};
};
drives = [
(vm.lvmDisk' "hdds" "frigate")
];
hostDevices = { hostDevices = {
et100g0vf2 = { et100g0vf2 = {
index = 0; index = 0;
@@ -1,6 +1,6 @@
{ {
imports = [ imports = [
# ./unifi.nix ./unifi.nix
./hass.nix ./hass.nix
]; ];
} }
@@ -24,6 +24,15 @@ in
address = net.cidr.host (65536*5+1) prefixes.hi.v6; address = net.cidr.host (65536*5+1) prefixes.hi.v6;
}; };
}; };
core = {
inherit domain;
name = "unifi-ctr-core";
mtu = 1500;
ipv4 = {
address = net.cidr.host 21 prefixes.core.v4;
gateway = null;
};
};
}; };
configuration = { lib, config, pkgs, assignments, ... }: configuration = { lib, config, pkgs, assignments, ... }:
@@ -48,7 +57,10 @@ in
}; };
systemd = { systemd = {
network.networks."80-container-host0" = networkdAssignment "host0" assignments.hi; network.networks = {
"80-container-host0" = networkdAssignment "host0" assignments.hi;
"80-lan-core" = networkdAssignment "lan-core" assignments.core;
};
}; };
services = { services = {
+26 -1
View File
@@ -72,6 +72,10 @@ in
fsType = "ext4"; fsType = "ext4";
neededForBoot = true; neededForBoot = true;
}; };
"/mnt/frigate" = {
device = "/dev/disk/by-label/frigate";
fsType = "ext4";
};
}; };
networking = { inherit domain; }; networking = { inherit domain; };
@@ -111,6 +115,13 @@ in
MTUBytes = toString lib.my.c.home.hiMTU; MTUBytes = toString lib.my.c.home.hiMTU;
}; };
}; };
"10-lan-core-ctrs" = {
matchConfig = {
Driver = "virtio_net";
PermanentMACAddress = "52:54:00:72:67:51";
};
linkConfig.Name = "lan-core-ctrs";
};
"10-lan-lo-ctrs" = { "10-lan-lo-ctrs" = {
matchConfig = { matchConfig = {
Driver = "virtio_net"; Driver = "virtio_net";
@@ -131,6 +142,11 @@ in
linkConfig.RequiredForOnline = "no"; linkConfig.RequiredForOnline = "no";
networkConfig = networkd.noL3; networkConfig = networkd.noL3;
}; };
"30-lan-core-ctrs" = {
matchConfig.Name = "lan-core-ctrs";
linkConfig.RequiredForOnline = "no";
networkConfig = networkd.noL3;
};
"30-lan-lo-ctrs" = { "30-lan-lo-ctrs" = {
matchConfig.Name = "lan-lo-ctrs"; matchConfig.Name = "lan-lo-ctrs";
linkConfig.RequiredForOnline = "no"; linkConfig.RequiredForOnline = "no";
@@ -145,6 +161,11 @@ in
MACVLAN = mkForce "lan-hi-ctrs:host0 lan-lo-ctrs:lan-lo"; MACVLAN = mkForce "lan-hi-ctrs:host0 lan-lo-ctrs:lan-lo";
}; };
}; };
unifi = {
networkConfig = {
MACVLAN = mkForce "lan-hi-ctrs:host0 lan-core-ctrs:lan-core";
};
};
}; };
systemd.services = { systemd.services = {
@@ -174,9 +195,13 @@ in
containers.instances = containers.instances =
let let
instances = { instances = {
# unifi = {}; unifi = {};
hass = { hass = {
bindMounts = { bindMounts = {
"/mnt/frigate" = {
mountPoint = "/var/lib/frigate";
readOnly = false;
};
"/dev/bus/usb/001/002".readOnly = false; "/dev/bus/usb/001/002".readOnly = false;
"/dev/video0".readOnly = false; "/dev/video0".readOnly = false;
"/dev/serial/by-id/usb-Nabu_Casa_Home_Assistant_Connect_ZBT-1_ce549704fe38ef11a2c2e5d154516304-if00-port0" = { "/dev/serial/by-id/usb-Nabu_Casa_Home_Assistant_Connect_ZBT-1_ce549704fe38ef11a2c2e5d154516304-if00-port0" = {
+1
View File
@@ -223,6 +223,7 @@ in
dave-lo IN AAAA ${net.cidr.host (65536+2) prefixes.lo.v6} dave-lo IN AAAA ${net.cidr.host (65536+2) prefixes.lo.v6}
shytzel IN A ${net.cidr.host 12 prefixes.core.v4} shytzel IN A ${net.cidr.host 12 prefixes.core.v4}
brian IN A ${net.cidr.host 13 prefixes.core.v4}
wave IN A ${net.cidr.host 12 prefixes.hi.v4} wave IN A ${net.cidr.host 12 prefixes.hi.v4}
; wave IN AAAA ${net.cidr.host (65536+3) prefixes.hi.v6} ; wave IN AAAA ${net.cidr.host (65536+3) prefixes.hi.v6}
@@ -33,7 +33,7 @@ def main():
print(f'Updating {args.record} -> {address}') print(f'Updating {args.record} -> {address}')
cf.dns.records.edit( cf.dns.records.edit(
zone_id=zone.id, dns_record_id=record.id, name=args.record, zone_id=zone.id, dns_record_id=record.id, name=args.record, ttl=60,
type='A', content=address) type='A', content=address)
if __name__ == '__main__': if __name__ == '__main__':
+5 -2
View File
@@ -3,11 +3,14 @@ let
# TODO: Move into nixpkgs # TODO: Move into nixpkgs
mstpd = pkgs.mstpd.overrideAttrs { mstpd = pkgs.mstpd.overrideAttrs {
patches = [ ./mstpd.patch ]; patches = [ ./mstpd.patch ];
# Delete postInstall since it nukes the bridge-stp script we need
postInstall = "";
}; };
in in
{ {
environment = { environment = {
systemPackages = [ systemPackages = [
# For kernel to call bridge-stp (see ./pkgs/os-specific/linux/kernel/bridge-stp-helper.patch)
mstpd mstpd
]; ];
etc = { etc = {
@@ -39,8 +42,8 @@ in
before = [ "network-pre.target" ]; before = [ "network-pre.target" ];
serviceConfig = { serviceConfig = {
Type = "forking"; Type = "forking";
ExecStart = "${mstpd}/sbin/bridge-stp restart"; ExecStart = "${mstpd}/bin/bridge-stp restart";
ExecReload = "${mstpd}/sbin/bridge-stp restart_config"; ExecReload = "${mstpd}/bin/bridge-stp restart_config";
PIDFile = "/run/mstpd.pid"; PIDFile = "/run/mstpd.pid";
Restart = "always"; Restart = "always";
PrivateTmp = true; PrivateTmp = true;
+1 -1
View File
@@ -8,7 +8,7 @@ let
tftpRoot = pkgs.linkFarm "tftp-root" [ tftpRoot = pkgs.linkFarm "tftp-root" [
{ {
name = "ipxe-x86_64.efi"; name = "ipxe-x86_64.efi";
path = "${pkgs.ipxe}/ipxe.efi"; path = "${pkgs.ipxe}/snp.efi";
} }
]; ];
menuFile = pkgs.runCommand "menu.ipxe" { menuFile = pkgs.runCommand "menu.ipxe" {