code: def get_user_config(config_file=None, default_config=False):
      
      # Do NOT load a config. Return defaults instead.
      if default_config:
          return copy.copy(DEFAULT_CONFIG)
  
      # Load the given config file
      if config_file and config_file is not USER_CONFIG_PATH:
          return get_config(config_file)
  
      try:
          # Does the user set up a config environment variable?
          env_config_file = os.environ['COOKIECUTTER_CONFIG']
      except KeyError:
          # Load an optional user config if it exists
          # otherwise return the defaults
          if os.path.exists(USER_CONFIG_PATH):
              return get_config(USER_CONFIG_PATH)
          else:
              return copy.copy(DEFAULT_CONFIG)
      else:
          # There is a config environment variable. Try to load it.
          # Do not check for existence, so invalid file paths raise an error.
          return get_config(env_config_file)
docs: Return the user config as a dict.
  
      If ``default_config`` is True, ignore ``config_file`` and return default
      values for the config parameters.
  
      If a path to a ``config_file`` is given, that is different from the default
      location, load the user config from that.
  
      Otherwise look up the config file path in the ``COOKIECUTTER_CONFIG``
      environment variable. If set, load the config from this path. This will
      raise an error if the specified path is not valid.
  
      If the environment variable is not set, try the default config file path
      before falling back to the default config values.