Scratch Org Definition File: config/project-scratch-def.json

List of Scratch Org Configuration Values:

https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_scratch_orgs_def_file_config_values.htm

orgPreferences and features should ideally be configured with the same parameters as you have in production. For example, if you’re using Territory Management, make sure you include that as an option since you can’t enable it later. Unfortunately, if you’re not a totally new org just starting on DX, that means you’ll have to discover which features you have enabled, which may require a lot of hunting around for settings and/or trial and error.

However, you will eventually be able to use the Org Shape feature to just copy the permissions directly from the org and deploy it to your scratch orgs. However, it’s still a pilot, as far as I can tell, so you’ll have to sign up for this feature if you want it, or wait until it goes GA (typically takes a release or two for pilots to make it to beta, but it may also never materialize). If you need a way to do this now, trial and error or the pilot are your two choices.

You’ll have to basically look at the feature in the documentation, figure out what they’re talking about, find the relevant setting in Setup, and then, if enabled, add it to your config file. Expect this to take a few days. If you’re not on the pilot, there is no magical way to get at all this configuration in one place.

https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_scratch_orgs_def_file.htm

Once you start using Packaging 2.0 (2GP), you can choose to create different scratch orgs for different packages, thus minimizing the scratch org creation time. However, again, this will take time to build the packages and then determine the dependent features. There’s no shortcut to this, other than to actually apply work hours to this.
Source: https://salesforce.stackexchange.com/questions/209651/how-should-i-configure-project-scratch-def-json-to-match-my-production-scratch-o

Metadata Coverage Report

The Metadata Coverage report is now available from the Salesforce Developer site rather than from your org. You can select a release version from within the coverage report to view different release versions. We provide coverage information for Summer ʼ18/v43 onward.

The sample scratch definition is available starting in Winter ʼ19/v44. In this example, to work with the Network metadata type in a Developer Edition scratch org, your scratch org definition must include the Communities feature and the networksEnabled setting.