{ config, lib, ... }: let inherit (lib.modules) mkIf mkMerge; inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.binds) addDescriptionsToMappings mkSetBinding; inherit (lib.nvim.lua) toLuaObject; cfg = config.vim.assistant.chatgpt; self = import ./chatgpt.nix {inherit lib;}; mappingDefinitions = self.options.vim.assistant.chatgpt.mappings; mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; maps = mkMerge [ (mkSetBinding mappings.editWithInstructions "ChatGPTEditWithInstruction") (mkSetBinding mappings.grammarCorrection "ChatGPTRun grammar_correction") (mkSetBinding mappings.translate "ChatGPTRun translate") (mkSetBinding mappings.keyword "ChatGPTRun keywords") (mkSetBinding mappings.docstring "ChatGPTRun docstring") (mkSetBinding mappings.addTests "ChatGPTRun add_tests") (mkSetBinding mappings.optimize "ChatGPTRun optimize_code") (mkSetBinding mappings.summarize "ChatGPTRun summarize") (mkSetBinding mappings.fixBugs "ChatGPTRun fix_bugs") (mkSetBinding mappings.explain "ChatGPTRun explain_code") (mkSetBinding mappings.roxygenEdit "ChatGPTRun roxygen_edit") (mkSetBinding mappings.readabilityanalysis "ChatGPTRun code_readability_analysis") ]; in { config = mkIf cfg.enable { vim = { startPlugins = [ "chatgpt" ]; luaConfigRC.chagpt = entryAnywhere '' require("chatgpt").setup(${toLuaObject cfg.setupOpts}) ''; maps.normal = mkMerge [ (mkSetBinding mappings.chatGpt "ChatGPT") maps ]; maps.visual = maps; }; }; }