I didn't read the whole topic, so hope I guess corretly what is it about. I add my approach to having different configs for each environment. I did it very simple, just used environment variables, so I have one configurable config for all ?
(I am using docker on localhost so it is easy to work with environment variables)
<?php namespace ProcessWire;
/**
* ProcessWire Configuration File
*
* Site-specific configuration for ProcessWire
*
* Please see the file /wire/config.php which contains all configuration options you may
* specify here. Simply copy any of the configuration options from that file and paste
* them into this file in order to modify them.
*
* SECURITY NOTICE
* In non-dedicated environments, you should lock down the permissions of this file so
* that it cannot be seen by other users on the system. For more information, please
* see the config.php section at: https://processwire.com/docs/security/file-permissions/
*
* This file is licensed under the MIT license
* https://processwire.com/about/license/mit/
*
* ProcessWire 3.x, Copyright 2019 by Ryan Cramer
* https://processwire.com
*
*/
if(!defined("PROCESSWIRE")) die();
/*** SITE CONFIG *************************************************************************/
/** @var Config $config */
/**
* Allow core API variables to also be accessed as functions?
*
* Recommended. This enables API varibles like $pages to also be accessed as pages(),
* as an example. And so on for most other core variables.
*
* Benefits are better type hinting, always in scope, and potentially shorter API calls.
* See the file /wire/core/FunctionsAPI.php for details on these functions.
*
* @var bool
*
*/
$config->useFunctionsAPI = true;
/*** INSTALLER CONFIG ********************************************************************/
/**
* Installer: Database Configuration
*
*/
$config->dbHost = getenv("DB_HOST");
$config->dbName = getenv("DB_NAME");
$config->dbUser = getenv("DB_USER");
$config->dbPass = getenv("DB_PASS");
$config->dbPort = getenv("DB_PORT");
$config->dbEngine = 'InnoDB';
/**
* Installer: User Authentication Salt
*
* This value was randomly generated for your system on 2021/12/14.
* This should be kept as private as a password and never stored in the database.
* Must be retained if you migrate your site from one server to another.
* Do not change this value, or user passwords will no longer work.
*
*/
$config->userAuthSalt = getenv("USER_AUTH_SALT");
/**
* Installer: Table Salt (General Purpose)
*
* Use this rather than userAuthSalt when a hashing salt is needed for non user
* authentication purposes. Like with userAuthSalt, you should never change
* this value or it may break internal system comparisons that use it.
*
*/
$config->tableSalt = getenv("TABLE_SALT");
/**
* Installer: File Permission Configuration
*
*/
$config->chmodDir = '0755'; // permission for directories created by ProcessWire
$config->chmodFile = '0644'; // permission for files created by ProcessWire
/**
* Installer: Time zone setting
*
*/
$config->timezone = 'Europe/Prague';
/**
* Installer: Admin theme
*
*/
$config->defaultAdminTheme = 'AdminThemeUikit';
/**
* Installer: Unix timestamp of date/time installed
*
* This is used to detect which when certain behaviors must be backwards compatible.
* Please leave this value as-is.
*
*/
$config->installed = 1639521804;
/**
* Installer: HTTP Hosts Whitelist
*
*/
$config->httpHosts = preg_split('/\s*,\s*/', getenv('HTTP_HOSTS'));
/**
* Installer: Debug mode?
*
* When debug mode is true, errors and exceptions are visible.
* When false, they are not visible except to superuser and in logs.
* Should be true for development sites and false for live/production sites.
*
*/
$config->debug = filter_var(getenv("DEBUG"), FILTER_VALIDATE_BOOLEAN);
$config->advanced = true;