       description: "Remember query per provider basis and apply it at startup"
   )
 
-module.exports = new Settings('narrow', _.defaults(globalSettings, providerSettings))
+module.exports = new Settings('narrow', Object.assign(complimentField(globalSettings), providerSettings))

  default: 'inherit'
  enum: ['inherit', globalSettings[name].enum...]

# inhe
newProviderConfig = (otherProperties) ->
  properties =
    directionToOpen: inheritGlobalEnum('directionToOpen')
    caseSensitivityForNarrowQuery: inheritGlobalEnum('caseSensitivityForNarrowQuery')
    revealOnStartCondition:
      default: 'always'
      enum: ['always', 'never', 'on-input']
    focusOnStartCondition:
      default: 'always'
      description: "[Experiment] In-eval if this is really useful( I don't use this )"
      enum: ['always', 'never', 'no-input']
    negateNarrowQueryByEndingExclamation: false
    autoPreview: true
    autoPreviewOnQueryChange: true
    closeOnConfirm: true

  _.deepExtend(properties, complimentField(otherProperties)) if otherProperties?

  return {
    type: 'object'
    collapsed: true
    properties: complimentField(properties, true)
  }

newProviderConfigForScanAndSearchAndAtomScan = (otherProperties={}) ->
  properties =
    caseSensitivityForSearchTerm:
      default: 'smartcase'
      enum: ['smartcase', 'sensitive', 'insensitive']
    revealOnStartCondition: 'on-input'
    searchWholeWord: false
    searchUseRegex: false
    minimumLengthToStartRegexSearch: 3
    rememberUseRegex: false
  newProviderConfig(_.extend(properties, otherProperties))

providerSettings =
  Scan: newProviderConfigForScanAndSearchAndAtomScan()


    value = config[key]
    value.type ?= inferType(value.default)

    # To remove provider prefix
    # e.g. "Scan.AutoPreview" config to appear as "Auto Preview"
    value.title ?= _.uncamelcase(key) if injectTitle

  # Inject order props to display orderd in setting-view
