roles: add role-based host composition in flake
- mkHost now takes a role list, roles resolve to ./roles/<name>.nix - roles/core.nix = shared baseline (modules/) - roles/k3s-server.nix = core + k3s (goyplex-vm) - roles/hermes.nix = core + hermes (hermes-vm) - host configuration.nix trimmed to hardware + boot + stateVersion - optional hosts/<name>/custom.nix loads last for per-host overrides - new hosts: one flake line + hosts/<name>/ dir
This commit is contained in:
@@ -27,26 +27,40 @@
|
|||||||
let
|
let
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
username = "poslop";
|
username = "poslop";
|
||||||
|
lib = nixpkgs.lib;
|
||||||
|
|
||||||
|
# mkHost <hostname> <role list>
|
||||||
|
# roles resolve to ./roles/<name>.nix; list entries may also be
|
||||||
|
# inline attrsets or paths, which load after (and override) roles.
|
||||||
|
# hosts/<host>/custom.nix, if present, always loads last.
|
||||||
mkHost =
|
mkHost =
|
||||||
host: modules:
|
name: roles:
|
||||||
nixpkgs.lib.nixosSystem {
|
nixpkgs.lib.nixosSystem {
|
||||||
modules = [ { nixpkgs.hostPlatform = system; } ] ++ modules;
|
modules =
|
||||||
|
[ { nixpkgs.hostPlatform = system; } ]
|
||||||
|
++ [ ./hosts/${name}/configuration.nix ]
|
||||||
|
++ map (
|
||||||
|
role:
|
||||||
|
if builtins.isString role then ./roles/${role}.nix else role
|
||||||
|
) roles
|
||||||
|
++ lib.optional (builtins.pathExists ./hosts/${name}/custom.nix)
|
||||||
|
./hosts/${name}/custom.nix;
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
inherit
|
inherit
|
||||||
self
|
self
|
||||||
inputs
|
inputs
|
||||||
username
|
username
|
||||||
host
|
|
||||||
;
|
;
|
||||||
|
host = name;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
nixosConfigurations = {
|
nixosConfigurations = {
|
||||||
nixos-vm2 = mkHost "nixos-vm2" [ ./hosts/nixos-vm2/configuration.nix ];
|
nixos-vm2 = mkHost "nixos-vm2" [ "core" ];
|
||||||
qemu-vm = mkHost "qemu-vm" [ ./hosts/qemu-vm/configuration.nix ];
|
qemu-vm = mkHost "qemu-vm" [ "core" ];
|
||||||
goyplex-vm = mkHost "goyplex-vm" [ ./hosts/goyplex-vm/configuration.nix ];
|
goyplex-vm = mkHost "goyplex-vm" [ "k3s-server" ];
|
||||||
hermes-vm = mkHost "hermes-vm" [ ./hosts/hermes-vm/configuration.nix ];
|
hermes-vm = mkHost "hermes-vm" [ "hermes" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
{ pkgs, ... }:
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
../../modules
|
|
||||||
../../modules/k3s/k3s.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
{ pkgs, ... }:
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
../../modules/core
|
|
||||||
../../modules/hermes
|
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
../../modules
|
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.loader.grub.enable = true;
|
boot.loader.grub.enable = true;
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
../../modules
|
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.loader.grub.enable = true;
|
boot.loader.grub.enable = true;
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
# shared baseline: core system + home manager config
|
||||||
|
imports = [
|
||||||
|
../modules
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
# hermes agent host: core + hermes container + secrets
|
||||||
|
imports = [
|
||||||
|
./core.nix
|
||||||
|
../modules/hermes
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
# k3s server node (goyplex-vm): k3s + manifests + firewall
|
||||||
|
imports = [
|
||||||
|
./core.nix
|
||||||
|
../modules/k3s/k3s.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user