Package: devcontainer-manager
VSCode Devcontainer ManagerDevcontainer Manager is a command line tool that manages Visual Studio Code
devcontainer configurations written in python.InstallationProject can be installed using pip:pipinstalldevcontainer-managerThis installs command line utilitydevcontainer_manager, see--helpoption for
all available commands.UsageConfigurationFirst step is to create default master configuration withdevcontainer_managercreate-template<config-path>This creates yaml file with all available options set to default. You can then
open the file and change the options in editor.If you specifyconfig-pathwithout.yamlsuffix then it is considered
global template.  Global templates are saved to~/.devcontainer_manager/templates/<config-path>.yamland alias is created.
This can then be used in generate directly asconfig-path, for example:devcontainer_manager create-template python
# modify ~/.devcontainer_manager/templates/python.yaml
devcontainer_manager generate pythonThe following code displays all of the options and defaults# root path for current project relative to current working directory or# absolute pathproject_path:.devcontainer:# dev container namename:'{{project_root_basename}}'# path in container where source will be mountedworkspace_folder:/mnt/workspace# same as workspaceMount in devcontainer.json - path for workspace and where# to mount it; there are two available formats:#    - same as devcontainer.json#    - shortened form - '<local-path>:<remote-path>' - this will be translated#      to 'src=<local-path>,dst=<remote-path>,type=bind,consistency=cached'workspace_mount:${localWorkspaceFolder}:{{ devcontainer.workspace_folder }}# same as shutdownAction in devcontainer.jsonshutdown_action:none# same as userEnvProbe in devcontainer.jsonuser_env_probe:loginInteractiveShell# devcontainer image to useimage:'{{devcontainer.name}}-dev'# additional mounts for container in format: `src:dst`, for example this# will mount home folder to /mnt/home in the container# mounts:#    - /home/developer:/mnt/homemounts:[]# name of the container - this will be passed as `--name <arg>` in `docker run`container_name:'{{devcontainer.name}}'# container hostname - this will be passed as `--hostname <arg>` in `docker run`# this option is to make shell display the hostname as specified name instead# of randomly generated container hex codecontainer_hostname:'{{devcontainer.name}}'# aditional arguments that will be passed to `docker run` - i.e. adding gpus:# run_args:# - gpus=allrun_args:[]# default extensions to install - will be directly translated to devcontainer.json# extensionsextensions:[]# list of additional options to that will be appended to devcontainer config# for example:# additional_options:#   - >#     "dockerFile": "{{ docker.file }}"#   - '"appPort": "8080"'additional_options:[]docker:# path for base dockerfile to use for building custom image# null means that the dockerfile will not be generated# if the path is valid, two files will be generated - devcontainer.Dockerfile# and build.sh script for building this dockerfilefile:# additional lines to append to dockerfile - this is useful if the main dockerfile# does not contain developer tools, for example to add fish and git:## additional_commands:# - >#   RUN apt-get update && apt-get install#      fish procps git git-lfs#   && rm -rf /var/lib/apt/lists/*# - ENV SHELL="/usr/bin/fish"# - ENV LANG=C.UTF-8 LANGUAGE=C.UTF-8 LC_ALL=C.UTF-8# - SHELL ["fish", "--command"]# - ENTRYPOINT ["fish"]additional_commands:[]Note that you can usejinja2templates in the config itself to reference other
options as displayed incontainer_nameandcontainer_hostname.Pre-defined VariablesThere are several variables that are calculated before generation and can be used
in your configs:{{ project_root_basename }}: root directory of current project
{{ uid }}: id of current user
{{ login }}: username of current user
{{ hostname }}: hostname of current machineDevconfig GenerationTo generate the configurationdevcontainer_managergenerate[config-paths]Using default config, this would generatedevcontainer.jsonandoverrides.yaml(more in theProject Overridessection) files
(as docker.path is null by default).If you specify more configs, then they are merged from left to right.If config-paths is not specified then.devcontainer/overrides.yamlis used for
generation if it exists.Global ConfigurationGlobal configuration can be found in~/.devcontainer_manager/config.yamland
contains following options:base_config:[]# directory for global templatestemplate_dir:templates# default path for per-project override config (. is in '.devcontainer/')override_config_path:.devcontainer/overrides.yaml# path to global config that will be used as base for all other configsdefault_config_path:'{{template_dir}}/default.yaml'Per Project Template OverridesTo edit overrides, you can manually edit generated.devcontainer/overrides.yaml.Once the overrides exist, you can then call each subsequent generation usingdevcontainer_managergenerateThis is also useful for easy generation when the master template changes.