docs: def get_bool(self, key: str) -> Optional[bool]:
          """
          Returns an optional configuration value, as a bool, by its key, or None if it doesn't exist.
          If the configuration value isn't a legal boolean, this function will throw an error.
  
          :param str key: The requested configuration key.
          :return: The configuration key's value, or None if one does not exist.
          :rtype: Optional[bool]
          :raises ConfigTypeError: The configuration value existed but couldn't be coerced to bool.
          """
          v = self.get(key)
          if v is None:
              return None
          if v in ['true', 'True']:
              return True
          if v in ['false', 'False']:
              return False
          raise ConfigTypeError(self.full_key(key), v, 'bool')