docs: function _from_dir (opts, cfg_so_far, cb) { 
    var cfg = {};
    var file_root_dir_tmpl = (opts && opts.files) || __dirname + '/etc';
    
    var vals = {
      env: process.env.NODE_ENV || 'development'
    };
  
    _.merge (vals, cfg_so_far);
    
    var file_root_dir = interpolator.parse (file_root_dir_tmpl, vals);
  
    klaw (file_root_dir, {})
    .on('data', function(item){
      if (item.stats.isFile() && isCfg (item.path)) {
        var pat = item.path
          .substr (file_root_dir.length + 1)
          .substr (0, item.path.length - (file_root_dir.length + 1) - (path.extname (item.path).length))
          .replace (/\./g, '_')
          .replace (/\//g, '.');
  
        var item_cfg = {};
        _.set (item_cfg, pat, importFresh (item.path));
        _.merge (cfg, item_cfg);
      }
    })
    .on ('error', function (err) {
      if ((err.code === 'ENOENT') && (err.path === file_root_dir)) {
        // ignore
  
        // expand variables in loaded object
        _expand (cfg, vals, cb);
      }
      else {
        console.error ('got error reading recursive config from %s: ', file_root_dir, err);
        return cb (err);
      }
    })
    .on('end', function () {
      // expand variables in loaded object
      _expand (cfg, vals, cb);
    });
  }