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.