          if set(self.config.sections()) != set(self.defaults.keys()):
              logger.debug("Default config has new section(s)")
              return True
  
          for section, items in self.defaults.items():
              opts = [opt for opt in items.keys() if opt != "helptext"]
              exists = [opt for opt in self.config[section].keys()
                        if not opt.startswith(("# ", "\n# "))]
              if set(exists) != set(opts):
                  logger.debug("Default config has new item(s)")
                  return True
          logger.debug("Default config has not changed")
 
</s> remove     def check_config_change(self):
        """ Check whether new default items have been added or removed
            from the config file compared to saved version """
 </s> add     def _check_config_change(self) -> bool:
        """ Check whether new default items have been added or removed from the config file
        compared to saved version

        Returns
        -------
        bool
            ``True`` if a config option has been added or removed
        """ </s> remove     def handle_config(self):
 </s> add     def _handle_config(self) -> None: </s> remove         for section, items in self.defaults.items():
            self.insert_config_section(section, items["helptext"], new_config)
            for item, opt in items.items():
                if item == "helptext":
                    continue
                if section not in self.config.sections():
                    logger.debug("Adding new config section: '%s'", section)
                    opt_value = opt["default"]
 </s> add         for section_name, section in self.defaults.items():
            self.insert_config_section(section_name, section.helptext, new_config)
            for item, opt in section.items.items():
                if section_name not in self.config.sections():
                    logger.debug("Adding new config section: '%s'", section_name)
                    opt_value = opt.default </s> remove         for section, items in self.defaults.items():
            for item, opt in items.items():
                if item == "helptext" or not opt["choices"]:
 </s> add         for section_name, section in self.defaults.items():
            for item, opt in section.items.items():
                if not opt.choices: </s> remove     def check_config_choices(self):
 </s> add     def _check_config_choices(self) -> None:
        for section_name, section in self.defaults.items():
            opts = list(section.items)
            exists = [opt for opt in self.config[section_name].keys()
          if set(self.config.sections()) != set(self.defaults.keys()):
              logger.debug("Default config has new section(s)")
              return True
  
        for section_name, section in self.defaults.items():
            opts = list(section.items)
            exists = [opt for opt in self.config[section_name].keys()
        for section_name, section in self.defaults.items():
            opts = list(section.items)
            exists = [opt for opt in self.config[section_name].keys()
        for section_name, section in self.defaults.items():
            opts = list(section.items)
            exists = [opt for opt in self.config[section_name].keys()
                        if not opt.startswith(("# ", "\n# "))]
              if set(exists) != set(opts):
                  logger.debug("Default config has new item(s)")
                  return True
          logger.debug("Default config has not changed")
keep keep keep keep replace replace replace keep keep keep keep keep
 Preview - Allow mask color/opacity configuration
  - typing: lib.config
  - docs: lib.config
  - bugfix: popup_configure - keep assets on top 
lib/config.py