docs: def load(self):
          """
          read dotfile and populate self
          opts will override the dotfile settings,
          make sure everything is synced in both
          opts and this object
  
          """
          if self.exists():
              with open(self.dot_file, 'r') as handle:
                  self.update(json.load(handle))
          if self.options['context'] is not None:
              self['context'] = self.options['context']
          else:
              self.options['context'] = self['context']
          if self.options['defaults'] is not None:
              self['defaults'] = self.options['defaults']
          else:
              self.options['defaults'] = self['defaults']
          if self.options['output'] is not None:
              self['output'] = self.options['output']
  
          if self.options.get('inclusive', False):
              self['inclusive'] = True
  
          if self.options.get('exclude', []):
              self['exclude'].extend(self.options['exclude'])
  
          if self['output'] is None:
              self['output'] = os.path.join(os.getcwd(), 'dockerstache-output')
          self['output_path'] = self.abs_output_dir()
          self['input_path'] = self.abs_input_dir()
          if self['context'] is not None:
              self['context_path'] = absolute_path(self['context'])
          if self['defaults'] is not None:
              self['defaults_path'] = absolute_path(self['defaults'])