Inconsistencies of the conda configuration system

Checklist

  • I added a descriptive title
  • I searched open reports and couldn't find a duplicate

Summary

There are a number of inconsistencies and/or surprising behavior in the conda configuration system. Part of it comes from the homemade Configuration object, plus the singleton pattern, plus the kitchen-sink approach to store many convenience variables and state in the conda.base.context.context object.

There are also many sources of the configuration values:

  • Hardcoded defaults in the Python modules
  • Several .condarc / condarc.d/* files, at the system, user and environment level
  • Auto-generated CONDA_* environment variables (but no warning if they are mispelled)

On top of this we have:

  • Surprising merging rules like extended lists and updated dictionaries instead of overrides.
  • Lacking documentation
  • Intricate conda config implementation with way too many flags but a simplistic implementation with some undefined behaviours.
  • No schema! The tooling ecosystem might add their own data to the config files, and conda will ignore it, or silently delete it or who knows what.

The cherry on top is that at some point this will have to be made extensible to accommodate the plugin system in some sane way...

Linked Issues & PRs

Environment specific configuration

Channels

$CONDARC and .condarc search paths

Other bugs

Other feature requests

Documentation

The conda configuration documentation is particularly intricate. There are three pages, each with overlapping but different content. In particular, the "reference" (as per the Diátaxis framework) should be better separated.

More issues / PRs: