Plugin System Overview
The devc tool uses a modular plugin architecture. It is divided into commands , plugins and plugin-extensions.
devc <command> <plugin> --plugin-flag_1 --plugin_flag_m --plugin-extensions-flag_1 --plugin-extensions-flag_n
The order of the plugin-flags and the plugin-extensions-flags does not matter. For explanatory purpose the plugin-flags are enclosed with brackets like [--plugin-flag] which is not valid syntax.
For example:
devc dev-json ros2-dektop-full [--name="my_ros2_project" --ros-domain-id=5] --nvidia=auto --ssh=mount
So in this case [--name="my_ros2_project" --ros-domain-id=5] would be the plugins own flags while --nvidia=auto --ssh=mount are plugin-extension-flags which are available for any plugin.
Command
would be dev-json, which tells devc we want to create a devcontainer.json. Another example would be the dockerfile command.
Plugin
the plugin would be ros2-desktop-full, which tells exactly what type to create. In this case a devcontainer.json specific for ROS2. This includes additional VS Code extensions and ROS2-specific configurations such as setting the ROS_DOMAIN_ID.
Plugin Extensions
are the flags --nvidia=auto and --ssh=mount. These modify the behavior of the created devcontainer.json by adding NVIDIA GPU support and SSH key mounting, respectively. The special thing about them is, that they are not plugin specific and can be added to any plugin of the dev-json command not only the ros2-desktop-full plugin.
Plugin Flags
are the flags --name="my_ros2_project" and --ros-domain-id=5 which are specific to the ros2-desktop-full.