1
1
Fork 1
mirror of https://github.com/oddlama/nix-config.git synced 2025-10-11 07:10:39 +02:00

feat: prepare structure for microvm.nix

This commit is contained in:
oddlama 2023-03-30 01:29:05 +02:00
parent aa2a660c61
commit 66bea99eb6
No known key found for this signature in database
GPG key ID: 14EFE510775FE39A
13 changed files with 124 additions and 82 deletions

View file

@ -63,6 +63,7 @@
hosts = import ./nix/hosts.nix inputs; hosts = import ./nix/hosts.nix inputs;
colmena = import ./nix/colmena.nix inputs; colmena = import ./nix/colmena.nix inputs;
homeConfigurations = import ./nix/home-manager.nix inputs; homeConfigurations = import ./nix/home-manager.nix inputs;
microVms = import ./nix/microvms.nix inputs;
inherit ((colmena.lib.makeHive self.colmena).introspect (x: x)) nodes; inherit ((colmena.lib.makeHive self.colmena).introspect (x: x)) nodes;
} }

View file

@ -1,7 +1,9 @@
{ {
inputs,
lib, lib,
pkgs, pkgs,
config, config,
nodeName,
nodeSecrets, nodeSecrets,
... ...
}: let }: let
@ -20,6 +22,16 @@ in {
./xdg.nix ./xdg.nix
]; ];
# Setup secret rekeying parameters
rekey.forceRekeyOnSystem = "x86_64-linux";
rekey.hostPubkey = let
pubkeyPath = ../.. + "/${nodeName}/secrets/host.pub";
in
lib.mkIf (lib.pathExists pubkeyPath || lib.trace "Missing pubkey for ${nodeName}: ${toString pubkeyPath} not found, using dummy replacement key for now." false)
pubkeyPath;
rekey.masterIdentities = inputs.self.secrets.masterIdentities;
rekey.extraEncryptionPubkeys = inputs.self.secrets.extraEncryptionPubkeys;
boot = { boot = {
kernelParams = ["log_buf_len=10M"]; kernelParams = ["log_buf_len=10M"];
tmpOnTmpfs = true; tmpOnTmpfs = true;
@ -40,6 +52,7 @@ in {
}; };
networking = { networking = {
hostName = lib.mkDefault nodeName;
# FIXME: would like to use mkForce false for useDHCP, but nixpkgs#215908 blocks that. # FIXME: would like to use mkForce false for useDHCP, but nixpkgs#215908 blocks that.
useDHCP = true; useDHCP = true;
useNetworkd = true; useNetworkd = true;

View file

@ -1,4 +1,8 @@
{pkgs, ...}: { {
inputs,
pkgs,
...
}: {
nix = { nix = {
settings = { settings = {
auto-optimise-store = true; auto-optimise-store = true;
@ -28,5 +32,12 @@
''; '';
optimise.automatic = true; optimise.automatic = true;
gc.automatic = true; gc.automatic = true;
# Define global flakes for this system
registry = {
nixpkgs.flake = inputs.nixpkgs;
p.flake = inputs.nixpkgs;
pkgs.flake = inputs.nixpkgs;
templates.flake = inputs.templates;
};
}; };
} }

View file

@ -3,9 +3,8 @@
pkgs, pkgs,
... ...
}: { }: {
sound.enable = true;
environment.systemPackages = with pkgs; [pulseaudio pulsemixer]; environment.systemPackages = with pkgs; [pulseaudio pulsemixer];
sound.enable = false; # ALSA
hardware.pulseaudio.enable = lib.mkForce false; hardware.pulseaudio.enable = lib.mkForce false;
security.rtkit.enable = true; security.rtkit.enable = true;
services.pipewire = { services.pipewire = {

View file

@ -1,7 +1,7 @@
{ {
type = "nixos"; type = "nixos";
system = "x86_64-linux"; system = "x86_64-linux";
physical_connections = { physicalConnections = {
"10-lan1" = "LAN 1"; "10-lan1" = "LAN 1";
"10-wlan1" = "WiFi"; "10-wlan1" = "WiFi";
}; };

View file

@ -10,7 +10,7 @@
../common/core ../common/core
../common/hardware/intel.nix ../common/hardware/intel.nix
../common/initrd-ssh.nix #../common/initrd-ssh.nix
../common/efi.nix ../common/efi.nix
../common/zfs.nix ../common/zfs.nix
@ -22,22 +22,9 @@
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" "sdhci_pci"]; boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" "sdhci_pci"];
services.home-assistant = { microvm.vms.agag = {
enable = true; flake = self;
extraComponents = ["default_config" "met" "zha"]; updateFlake = microvm;
openFirewall = true;
config = {
default_config = {};
met = {};
};
}; };
#networking.firewall.allowedTCPPorts = [1883]; autostart = ["guest"];
#services.zigbee2mqtt.enable = true;
#services.zigbee2mqtt.settings = {
# homeassistant = config.services.home-assistant.enable;
# permit_join = true;
# serial = {
# port = "/dev/serial/by-id/usb-Silicon_Labs_Sonoff_Zigbee_3.0_USB_Dongle_Plus_0001-if00-port0";
# };
#};
} }

View file

@ -1,7 +1,8 @@
{ {
type = "nixos"; type = "nixos";
system = "x86_64-linux"; system = "x86_64-linux";
physical_connections = { microVmHost = true;
physicalConnections = {
"10-lan1" = "LAN 1"; "10-lan1" = "LAN 1";
"10-lan2" = "LAN 2"; "10-lan2" = "LAN 2";
}; };

View file

@ -1,7 +1,7 @@
{ {
type = "nixos"; type = "nixos";
system = "aarch64-linux"; system = "aarch64-linux";
physical_connections = { physicalConnections = {
"10-lan1" = "LAN 1"; "10-lan1" = "LAN 1";
}; };
} }

View file

@ -1,45 +1,18 @@
{ {
self, self,
colmena,
home-manager,
#impermanence,
nixos-hardware,
nixpkgs, nixpkgs,
agenix,
agenix-rekey,
templates,
... ...
}: } @ inputs: let
with nixpkgs.lib; let inherit
nixosHosts = filterAttrs (_: x: x.type == "nixos") self.hosts; (nixpkgs.lib)
generateColmenaNode = hostName: _: { filterAttrs
imports = [ mapAttrs
({config, ...}: { ;
# By default, set networking.hostName to the hostName
networking.hostName = mkDefault hostName; nixosNodes = filterAttrs (_: x: x.type == "nixos") self.hosts;
# Define global flakes for this system nodes = mapAttrs (import ./generate-node.nix inputs) nixosNodes;
nix.registry = { generateColmenaNode = nodeName: _: {
nixpkgs.flake = nixpkgs; inherit (nodes.${nodeName}) imports;
p.flake = nixpkgs;
pkgs.flake = nixpkgs;
templates.flake = templates;
};
# Setup parameters for Secrets
rekey.forceRekeyOnSystem = "x86_64-linux";
rekey.hostPubkey = let
pubkeyPath = ../hosts + "/${hostName}/secrets/host.pub";
in
mkIf (pathExists pubkeyPath || trace "Missing pubkey for ${hostName}: ${toString pubkeyPath} not found, using dummy replacement key for now." false)
pubkeyPath;
rekey.masterIdentities = self.secrets.masterIdentities;
rekey.extraEncryptionPubkeys = self.secrets.extraEncryptionPubkeys;
})
(../hosts + "/${hostName}")
home-manager.nixosModules.default
#impermanence.nixosModules.default
agenix.nixosModules.default
agenix-rekey.nixosModules.default
];
}; };
in in
{ {
@ -47,18 +20,8 @@ in
description = "oddlama's colmena configuration"; description = "oddlama's colmena configuration";
# Just a required dummy for colmena, overwritten on a per-node basis by nodeNixpkgs below. # Just a required dummy for colmena, overwritten on a per-node basis by nodeNixpkgs below.
nixpkgs = self.pkgs.x86_64-linux; nixpkgs = self.pkgs.x86_64-linux;
nodeNixpkgs = mapAttrs (hostName: {system, ...}: self.pkgs.${system}) nixosHosts; nodeNixpkgs = mapAttrs (_: node: node.pkgs) nodes;
nodeSpecialArgs = nodeSpecialArgs = mapAttrs (_: node: node.specialArgs) nodes;
mapAttrs (hostName: _: {
nodeSecrets = self.secrets.content.nodes.${hostName};
})
nixosHosts;
specialArgs = {
inherit (nixpkgs) lib;
secrets = self.secrets.content;
nixos-hardware = nixos-hardware.nixosModules;
#impermanence = impermanence.nixosModules;
};
}; };
} }
// mapAttrs generateColmenaNode nixosHosts // mapAttrs generateColmenaNode nodes

45
nix/generate-node.nix Normal file
View file

@ -0,0 +1,45 @@
{
self,
colmena,
home-manager,
#impermanence,
nixos-hardware,
nixpkgs,
microvm,
agenix,
agenix-rekey,
...
} @ inputs: let
inherit
(nixpkgs.lib)
optionals
;
in
nodeName: nodeMeta: {
inherit (nodeMeta) system;
pkgs = self.pkgs.${nodeMeta.system};
specialArgs = {
inherit (nixpkgs) lib;
inherit inputs;
inherit nodeName;
inherit nodeMeta;
secrets = self.secrets.content;
nodeSecrets = self.secrets.content.nodes.${nodeName};
nixos-hardware = nixos-hardware.nixosModules;
#impermanence = impermanence.nixosModules;
};
imports =
[
(../hosts + "/${nodeName}")
home-manager.nixosModules.default
#impermanence.nixosModules.default
agenix.nixosModules.default
agenix-rekey.nixosModules.default
]
++ optionals nodeMeta.microVmHost [
microvm.nixosModules.host
]
++ optionals (nodeMeta.type == "microvm") [
microvm.nixosModules.microvm
];
}

View file

@ -1,5 +1,10 @@
{nixpkgs, ...}: {nixpkgs, ...}: let
nixpkgs.lib.concatMapAttrs (nodeName: fileType: hostDefaults = {
physicalConnections = {};
microVmHost = false;
};
in
nixpkgs.lib.concatMapAttrs (nodeName: fileType:
if fileType == "directory" && nodeName != "common" if fileType == "directory" && nodeName != "common"
then {${nodeName} = import (../hosts + "/${nodeName}/meta.nix");} then {${nodeName} = hostDefaults // import (../hosts + "/${nodeName}/meta.nix");}
else {}) (builtins.readDir ../hosts) else {}) (builtins.readDir ../hosts)

21
nix/microvms.nix Normal file
View file

@ -0,0 +1,21 @@
{
self,
nixpkgs,
...
} @ inputs: let
inherit
(nixpkgs.lib)
filterAttrs
mapAttrs
nixosSystem
;
microvmNodes = filterAttrs (_: x: x.type == "microvm") self.hosts;
nodes = mapAttrs (import ./generate-node.nix inputs) microvmNodes;
generateMicrovmNode = nodeName: _:
nixosSystem {
inherit (nodes.${nodeName}) system pkgs specialArgs;
modules = nodes.${nodeName}.imports;
};
in
mapAttrs generateMicrovmNode nodes

View file

@ -1,8 +1,4 @@
{ {
lib,
pkgs,
...
}: {
programs.nushell = { programs.nushell = {
enable = true; enable = true;
}; };