import json import os from pathlib import Path from PyInquirer import prompt from AbstractModule import AbstractModule def get_vim_root(): # return Path().home().joinpath(".vim") return Path(os.getcwd()).joinpath("devenv", ".vim") class VimModule(AbstractModule): def __init__(self): super().__init__() self.json_config = {} with open("modules/vim/vimrc_conf.json") as plugins: self.json_config = json.load(plugins) self.plugins = self.json_config['plugins'] self.settings = self.json_config['settings'] def do_plugin_selection(self): mapped_list = [] for choice in self.plugins.keys(): mapped_list.append({ "name": choice }) print("Available Plugins:") module_selection = [ { 'type': 'checkbox', 'message': 'Select plugins', 'name': 'modules', 'choices': mapped_list } ] return prompt(module_selection)['modules'] def run(self): # Create necessary folder structure for vim os.makedirs(str(get_vim_root().joinpath("autoload")), exist_ok=True) os.makedirs(str(get_vim_root().joinpath("plugged")), exist_ok=True) selected_plugins = self.do_plugin_selection() default_settings = list(self.settings.values()) # print out selected plugins print("\033[4mYour selection:\033[0m") [print(x) for x in selected_plugins] print("\n\033[4mDefault settings:\033[0m") [print(i) for i in default_settings] # Create vimrc file vimrc_path = str(get_vim_root().joinpath(".vimrc")) try: with open(vimrc_path, "r") as vimrc_file: vimrc_content = vimrc_file.readlines() except FileNotFoundError: vimrc_content = [] try: index = vimrc_content.index("call plug#begin('~/.vim/plugged')\n") + 1 for plugin in selected_plugins: vimrc_content.insert(index, self.plugins[plugin] + "\n") except ValueError: vimrc_content.append("call plug#begin('~/.vim/plugged')\n") for element in selected_plugins: vimrc_content.append(self.plugins[element] + "\n") vimrc_content.append("call plug#end()\n") default_settings.reverse() for setting in default_settings: vimrc_content.insert(0, setting + "\n") seen = set() seen_add = seen.add vimrc_content = [x1 for x1 in vimrc_content if not (x1 in seen or seen_add(x1))] with open(vimrc_path, "w") as vimrc_file: for line in vimrc_content: vimrc_file.write(line) # TODO: check if existing plugin manager file # TODO: else download plugin manager