diff --git a/modules/superbuild/options.nix b/modules/superbuild/options.nix index d2c7e03..af838e9 100644 --- a/modules/superbuild/options.nix +++ b/modules/superbuild/options.nix @@ -77,6 +77,24 @@ in default = [ ]; }; + mainRobot = lib.mkOption { + type = lib.types.nullOr lib.types.str; + default = null; + description = "Name of the MainRobot"; + }; + + enabled = lib.mkOption { + type = lib.types.nullOr lib.types.str; + default = null; + description = "Name of the Enabled controller"; + }; + + timeStep = lib.mkOption { + type = lib.types.nullOr lib.types.number; + default = null; + description = "TimeStep"; + }; + runtime = lib.mkOption { type = lib.types.submodule { options = runtimeOptions; }; default = { }; diff --git a/modules/superbuild/resolver.nix b/modules/superbuild/resolver.nix index d2812ca..23efef8 100644 --- a/modules/superbuild/resolver.nix +++ b/modules/superbuild/resolver.nix @@ -15,12 +15,17 @@ let mkRuntime = mkComponent; + # 1. Added defaults to mkPreset mkPreset = { + mainRobot = null; + enabled = null; + timeStep = null; runtime = mkRuntime; devel = mkComponent; }; preferString = previous: next: if next != null && next != "" then next else previous; + preferNumber = previous: next: if next != null then next else previous; mergeComponent = left: right: { apps = left.apps ++ right.apps; @@ -35,6 +40,9 @@ let mergeRuntime = mergeComponent; mergePreset = left: right: { + mainRobot = preferString (left.mainRobot or null) (right.mainRobot or null); + enabled = preferString (left.enabled or null) (right.enabled or null); + timeStep = preferNumber (left.timeStep or null) (right.timeStep or null); runtime = mergeRuntime left.runtime right.runtime; devel = mergeComponent left.devel right.devel; }; @@ -56,7 +64,11 @@ let project = cfg.project; + # 2. Ensured overlay includes configuration items from project top-level projectOverlay = { + mainRobot = project.mainRobot or null; + enabled = project.enabled or null; + timeStep = project.timeStep or null; runtime = project.runtime; devel = project.devel; }; @@ -90,7 +102,11 @@ in mkPreset selectedConfiguration ; + # 3. Made mainRobot, enabled, and timeStep directly available at the root of resolved resolved = { + mainRobot = base.mainRobot; + enabled = base.enabled; + timeStep = base.timeStep; inherit base release devel; }; } diff --git a/modules/superbuild/superbuild.nix b/modules/superbuild/superbuild.nix index 6ea91af..3cef3c4 100644 --- a/modules/superbuild/superbuild.nix +++ b/modules/superbuild/superbuild.nix @@ -18,6 +18,10 @@ let if isDevel then resolver.resolved.devel.runtime else resolver.resolved.release.runtime; develOverlay = resolver.resolved.devel.devel; + mainRobot = resolver.resolved.mainRobot; + enabled = resolver.resolved.enabled; + timeStep = resolver.resolved.timeStep; + localPath = "$PWD/${relativeLocalPath}"; localInstallPath = "${localPath}/install"; @@ -167,6 +171,9 @@ in cat < $PROJECT_DIR/mc_rtc.yaml --- + ${lib.optionalString (mainRobot != null && mainRobot != "") "MainRobot: \"${mainRobot}\""} + ${lib.optionalString (enabled != null && enabled != "") "Enabled: \"${enabled}\""} + ${lib.optionalString (timeStep != null) "Timestep: ${toString timeStep}"} ControllerModulePaths: [${mkModulePaths "mc_controller" shellControllers}] RobotModulePaths: [${mkModulePaths "mc_robots" shellRobots}] ObserverModulePaths: [${mkModulePaths "mc_observers" shellObservers}]