code: def set_value(ctx, key, value):
      
      scrubbing = False
      if value is None:
          scrubbing = key in SECRET_KEYS
          value = click.prompt('Value for `{}`'.format(key), hide_input=scrubbing)
  
      if key in ('core', 'extras', 'agent') and not value.startswith('~'):
          value = os.path.abspath(value)
  
      user_config = new_config = ctx.obj
      user_config.pop('repo_choice', None)
  
      data = [value]
      data.extend(reversed(key.split('.')))
      key = data.pop()
      value = data.pop()
  
      # Use a separate mapping to show only what has changed in the end
      branch_config_root = branch_config = {}
  
      # Consider dots as keys
      while data:
          default_branch = {value: ''}
          branch_config[key] = default_branch
          branch_config = branch_config[key]
  
          new_value = new_config.get(key)
          if not hasattr(new_value, 'get'):
              new_value = default_branch
  
          new_config[key] = new_value
          new_config = new_config[key]
  
          key = value
          value = data.pop()
  
      value = string_to_toml_type(value)
      branch_config[key] = new_config[key] = value
  
      save_config(user_config)
  
      output_config = scrub_secrets(branch_config_root) if scrubbing else branch_config_root
      echo_success('New setting:')
      echo_info(toml.dumps(output_config).rstrip())
docs: Assigns values to config file entries. If the value is omitted,
      you will be prompted, with the input hidden if it is sensitive.
  
      \b
      $ ddev config set github.user foo
      New setting:
      [github]
      user = "foo"