docs: def get_config(self,
  	               module_id,
  	               option,
  	               default=None,
  	               boolean=False,
  	               secret=False,
  	               forceask=False,
  	               forcenone=False,
  	               hint=None):
  		"""Gets a specific config from the config files, allowing for a default.
  
  		Handles booleans vs strings appropriately.
  
  		@param module_id:    module id this relates to, eg com.mycorp.mymodule.mymodule
  		@param option:       config item to set
  		@param default:      default value if not set in files
  		@param boolean:      whether this is a boolean value or not (default False)
  		@param secret:       whether the config item is a secret
  		@param forceask: if set to True, allows you to override any value already set (default False)
  		@param forcenone:    if set to True, allows you to set the value to None (default False)
  		@param hint:         if we are interactive, then show this prompt to help the user input a useful value
  
  		@type module_id:     string
  		@type option:        string
  		@type default:       string
  		@type boolean:       boolean
  		@type secret:        boolean
  		@type forceask:  boolean
  		@type forcenone:     boolean
  		@type hint:          string
  		"""
  		shutit_global.shutit_global_object.yield_to_draw()
  		cfg = self.cfg
  		if module_id not in cfg.keys():
  			cfg[module_id] = {}
  		if not self.config_parser.has_section(module_id):
  			self.config_parser.add_section(module_id)
  		if not forceask and self.config_parser.has_option(module_id, option):
  			if boolean:
  				cfg[module_id][option] = self.config_parser.getboolean(module_id, option)
  			else:
  				cfg[module_id][option] = self.config_parser.get(module_id, option)
  		else:
  			if not forcenone:
  				if shutit_global.shutit_global_object.interactive > 0:
  					if self.build['accept_defaults'] is None:
  						answer = None
  						# util_raw_input may change the interactive level, so guard for this.
  						while answer not in ('yes','no','') and shutit_global.shutit_global_object.interactive > 1:
  							answer = shutit_util.util_raw_input(prompt=shutit_util.colorise('32', 'Do you want to accept the config option defaults? ' + '(boolean - input "yes" or "no") (default: yes): \n'),default='yes',ispass=secret)
  						# util_raw_input may change the interactive level, so guard for this.
  						self.build['accept_defaults'] = answer in ('yes','') or shutit_global.shutit_global_object.interactive < 2
  					if self.build['accept_defaults'] and default != None:
  						cfg[module_id][option] = default
  					else:
  						# util_raw_input may change the interactive level, so guard for this.
  						prompt = '\n\nPlease input a value for ' + module_id + '.' + option
  						if default != None:
  							prompt = prompt + ' (default: ' + str(default) + ')'
  						if hint != None:
  							prompt = prompt + '\n\n' + hint
  						answer = None
  						if boolean:
  							while answer not in ('yes','no'):
  								answer =  shutit_util.util_raw_input(prompt=shutit_util.colorise('32',prompt + ' (boolean - input "yes" or "no"): \n'),ispass=secret)
  							if answer == 'yes':
  								answer = True
  							elif answer == 'no':
  								answer = False
  						else:
  							if re.search('assw',option) is None:
  								answer =  shutit_util.util_raw_input(prompt=shutit_util.colorise('32',prompt) + ': \n',ispass=secret)
  							else:
  								answer =  shutit_util.util_raw_input(ispass=True,prompt=shutit_util.colorise('32',prompt) + ': \n')
  						if answer == '' and default != None:
  							answer = default
  						cfg[module_id][option] = answer
  				else:
  					if default != None:
  						cfg[module_id][option] = default
  					else:
  						self.fail('Config item: ' + option + ':\nin module:\n[' + module_id + ']\nmust be set!\n\nOften this is a deliberate requirement to place in your ~/.shutit/config file, or you can pass in with:\n\n-s ' + module_id + ' ' + option + ' yourvalue\n\nto the build command', throw_exception=False) # pragma: no cover
  			else:
  				cfg[module_id][option] = default
  		return True