def configure(self, arguments=None, config=None):
        """
        Merge command line arguments, config files, and default configs

        :type arguments: argparse.Namespace
        :params arguments: Arguments produced by Cli.parse_args
        :type config: dict
        :params config: configuration dict to merge and validate
        """

        if arguments is not None:
            args_config = self.configure_args(arguments)
            base_config = copy.deepcopy(default_config)
            working_config = self.merge_config(base_config, args_config)
        if config is not None:
            self.validate_config(config)
            base_config = copy.deepcopy(default_config)
            working_config = self.merge_config(base_config, config)

        # override configuration with environment variables
        repo = self.get_env_default('LIME_REPOSITORY', 'disabled')
        repo_url = self.get_env_default('LIME_REPOSITORY_URL',
                                    working_config['repository']['url'])
        if repo.lower() == 'enabled':
            working_config['repository']['enabled'] = True

        working_config['repository']['url'] = repo_url

        return working_config
Merge command line arguments, config files, and default configs

        :type arguments: argparse.Namespace
        :params arguments: Arguments produced by Cli.parse_args
        :type config: dict
        :params config: configuration dict to merge and validate