Skip to content

Commit 7831c6f

Browse files
sysvms: create a parent attrset for all system vms
Similar to how app vms are created and defined do the same for the system vms. This will provide a consistent mechanism for interrogating which system vms are available. Signed-off-by: Brian McGillion <bmg.avoin@gmail.com>
1 parent c7b33e6 commit 7831c6f

File tree

8 files changed

+60
-52
lines changed

8 files changed

+60
-52
lines changed

docs/src/content/docs/ghaf/dev/guides/creating-vms.mdx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -406,9 +406,11 @@ The `vmConfig` parameter in `mkGhafConfiguration` allows per-target resource cus
406406
mkGhafConfiguration {
407407
# ... other params ...
408408
vmConfig = {
409-
guivm = { mem = 4096; vcpu = 4; };
410-
netvm = { mem = 512; vcpu = 1; };
411-
myvm = { mem = 2048; vcpu = 2; };
409+
sysvms = {
410+
guivm = { mem = 4096; vcpu = 4; };
411+
netvm = { mem = 512; vcpu = 1; };
412+
myvm = { mem = 2048; vcpu = 2; };
413+
};
412414
};
413415
}
414416
```

docs/src/content/docs/ghaf/dev/library/vm-helpers.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ applyVmConfig :: { config, vmName } -> [ Module ]
212212
1. Base module (e.g., guivm-base.nix) - sets mkDefault values
213213
2. resourceModule - applies `vmConfig.mem`/`vcpu`
214214
3. hwModules - `hardware.definition.<vm>.extraModules`
215-
4. vmConfigModules - `vmConfig.<vm>.extraModules` (highest priority)
215+
4. vmConfigModules - `vmConfig.sysvms.<vm>.extraModules` (highest priority)
216216

217217
**Example:**
218218

@@ -229,7 +229,7 @@ guivmBase.extendModules {
229229
**What it returns:**
230230

231231
```nix
232-
# If vmConfig.guivm = { mem = 4096; vcpu = 4; extraModules = [ myModule ]; }
232+
# If vmConfig.sysvms.guivm = { mem = 4096; vcpu = 4; extraModules = [ myModule ]; }
233233
# And hardware.definition.guivm = { extraModules = [ hwModule ]; }
234234
# Returns:
235235
[

lib/builders/mkGhafConfiguration.nix

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
# extraModules = [ ... ];
2222
# extraConfig = { ... };
2323
# vmConfig = {
24-
# guivm = { mem = 16384; vcpu = 8; };
24+
# sysvms.guivm = { mem = 16384; vcpu = 8; };
2525
# };
2626
# }
2727
#
@@ -167,6 +167,31 @@ let
167167
# Helper: Extend a specific VM with additional modules
168168
extendVm =
169169
vmName: modules:
170+
let
171+
inSysvms = (vmConfig.sysvms or { }) ? ${vmName};
172+
inAppvms = (vmConfig.appvms or { }) ? ${vmName};
173+
updatedVmConfig =
174+
if inSysvms then
175+
vmConfig
176+
// {
177+
sysvms = vmConfig.sysvms // {
178+
${vmName} = vmConfig.sysvms.${vmName} // {
179+
extraModules = (vmConfig.sysvms.${vmName}.extraModules or [ ]) ++ modules;
180+
};
181+
};
182+
}
183+
else if inAppvms then
184+
vmConfig
185+
// {
186+
appvms = vmConfig.appvms // {
187+
${vmName} = vmConfig.appvms.${vmName} // {
188+
extraModules = (vmConfig.appvms.${vmName}.extraModules or [ ]) ++ modules;
189+
};
190+
};
191+
}
192+
else
193+
throw "extendVm: '${vmName}' not found in vmConfig.sysvms or vmConfig.appvms";
194+
in
170195
mkGhafConfiguration' {
171196
inherit
172197
name
@@ -177,11 +202,7 @@ let
177202
extraModules
178203
extraConfig
179204
;
180-
vmConfig = vmConfig // {
181-
${vmName} = (vmConfig.${vmName} or { }) // {
182-
extraModules = (vmConfig.${vmName}.extraModules or [ ]) ++ modules;
183-
};
184-
};
205+
vmConfig = updatedVmConfig;
185206
};
186207

187208
# Helper: Get a VM's final configuration

lib/global-config.nix

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -679,7 +679,7 @@ rec {
679679
# 1. Base module (guivm-base.nix) - sets mkDefault values
680680
# 2. resourceModule - applies vmConfig.mem/vcpu
681681
# 3. hwModules - hardware.definition.<vm>.extraModules
682-
# 4. vmConfigModules - vmConfig.<vm>.extraModules (highest priority)
682+
# 4. vmConfigModules - vmConfig.sysvms.<vm>.extraModules (highest priority)
683683
#
684684
# Arguments:
685685
# config - Host configuration (with ghaf.hardware.definition and ghaf.virtualization.vmConfig)
@@ -698,7 +698,7 @@ rec {
698698
}:
699699
let
700700
hwDef = config.ghaf.hardware.definition.${vmName} or { };
701-
vmCfg = config.ghaf.virtualization.vmConfig.${vmName} or { };
701+
vmCfg = config.ghaf.virtualization.vmConfig.sysvms.${vmName} or { };
702702

703703
hwModules = hwDef.extraModules or [ ];
704704
vmConfigModules = vmCfg.extraModules or [ ];

modules/hardware/definition.nix

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ in
359359
# These options allow hardware modules to specify VM-level configs
360360
# that profiles include via extendModules
361361
#
362-
# NOTE: For resource allocation (mem, vcpu), use ghaf.virtualization.vmConfig.guivm
362+
# NOTE: For resource allocation (mem, vcpu), use ghaf.virtualization.vmConfig.sysvms.guivm
363363
guivm = {
364364
extraModules = mkOption {
365365
description = ''
@@ -372,7 +372,7 @@ in
372372
- Device-specific drivers/services
373373
374374
For resource allocation (memory, vCPUs) or profile-specific modules,
375-
use ghaf.virtualization.vmConfig.guivm instead.
375+
use ghaf.virtualization.vmConfig.sysvms.guivm instead.
376376
'';
377377
type = types.listOf types.unspecified;
378378
default = [ ];
@@ -389,7 +389,7 @@ in
389389
# These options allow hardware modules to specify VM-level configs
390390
# that profiles include via extendModules
391391
#
392-
# NOTE: For resource allocation (mem, vcpu), use ghaf.virtualization.vmConfig.audiovm
392+
# NOTE: For resource allocation (mem, vcpu), use ghaf.virtualization.vmConfig.sysvms.audiovm
393393
audiovm = {
394394
extraModules = mkOption {
395395
description = ''
@@ -402,7 +402,7 @@ in
402402
- Hardware detection modules
403403
404404
For resource allocation (memory, vCPUs) or profile-specific modules,
405-
use ghaf.virtualization.vmConfig.audiovm instead.
405+
use ghaf.virtualization.vmConfig.sysvms.audiovm instead.
406406
'';
407407
type = types.listOf types.unspecified;
408408
default = [ ];
@@ -429,7 +429,7 @@ in
429429
- Custom kernel parameters
430430
431431
For resource allocation (memory, vCPUs) or profile-specific modules,
432-
use ghaf.virtualization.vmConfig.netvm instead.
432+
use ghaf.virtualization.vmConfig.sysvms.netvm instead.
433433
'';
434434
type = types.listOf types.unspecified;
435435
default = [ ];

modules/microvm/vm-config.nix

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
# 1. Base module (guivm-base.nix) <- mkDefault (sensible defaults)
2626
# 2. Feature modules (desktop-features) <- profile features
2727
# 3. hardware.definition.guivm.extraModules <- hardware-specific (GPU quirks)
28-
# 4. virtualization.vmConfig.guivm.extraModules <- profile/downstream (highest priority)
28+
# 4. virtualization.vmConfig.sysvms.guivm.extraModules <- profile/downstream (highest priority)
2929
#
3030
{
3131
lib,
@@ -119,34 +119,19 @@ in
119119
_file = ./vm-config.nix;
120120

121121
options.ghaf.virtualization.vmConfig = {
122-
guivm = mkOption {
123-
type = systemVmConfigType;
122+
sysvms = mkOption {
123+
type = types.attrsOf systemVmConfigType;
124124
default = { };
125-
description = "GUI VM resource allocation and profile configuration.";
126-
};
127-
128-
netvm = mkOption {
129-
type = systemVmConfigType;
130-
default = { };
131-
description = "Network VM resource allocation and profile configuration.";
132-
};
133-
134-
audiovm = mkOption {
135-
type = systemVmConfigType;
136-
default = { };
137-
description = "Audio VM resource allocation and profile configuration.";
138-
};
139-
140-
adminvm = mkOption {
141-
type = systemVmConfigType;
142-
default = { };
143-
description = "Admin VM resource allocation and profile configuration.";
144-
};
145-
146-
idsvm = mkOption {
147-
type = systemVmConfigType;
148-
default = { };
149-
description = "IDS VM resource allocation and profile configuration.";
125+
description = ''
126+
Per-system-VM configuration. Keys should match system VM names
127+
(e.g., guivm, netvm, audiovm, adminvm, idsvm).
128+
'';
129+
example = literalExpression ''
130+
{
131+
guivm = { mem = 16384; vcpu = 8; };
132+
netvm = { extraModules = [ ./my-net-config.nix ]; };
133+
}
134+
'';
150135
};
151136

152137
appvms = mkOption {

modules/reference/profiles/mvp-orinuser-trial.nix

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ in
3131

3232
# Net VM profile-specific modules - use vmConfig for resource allocation and profile services
3333
# Hardware-specific modules should go in hardware.definition.netvm.extraModules
34-
vmConfig.netvm.extraModules = [
34+
vmConfig.sysvms.netvm.extraModules = [
3535
../services
3636
../personalize
3737
{ ghaf.reference.personalize.keys.enable = true; }

targets/laptop/flake-module.nix

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ let
103103
};
104104
};
105105
vmConfig = {
106-
guivm.mem = 6144;
106+
sysvms.guivm.mem = 6144;
107107
appvms.flatpak.mem = 5120;
108108
};
109109
})
@@ -147,7 +147,7 @@ let
147147
partitioning.disko.enable = true;
148148
};
149149
vmConfig = {
150-
guivm.mem = 6144;
150+
sysvms.guivm.mem = 6144;
151151
appvms.flatpak.mem = 5120;
152152
};
153153
})
@@ -178,7 +178,7 @@ let
178178
partitioning.disko.enable = true;
179179
};
180180
vmConfig = {
181-
guivm.mem = 2047;
181+
sysvms.guivm.mem = 2047;
182182
};
183183
})
184184

@@ -389,7 +389,7 @@ let
389389
};
390390
};
391391
vmConfig = {
392-
guivm.mem = 6144;
392+
sysvms.guivm.mem = 6144;
393393
appvms.flatpak.mem = 5120;
394394
};
395395
})
@@ -419,7 +419,7 @@ let
419419
partitioning.disko.enable = true;
420420
};
421421
vmConfig = {
422-
guivm.mem = 6144;
422+
sysvms.guivm.mem = 6144;
423423
appvms.flatpak.mem = 5120;
424424
};
425425
})

0 commit comments

Comments
 (0)