{ config, lib, options, ... }: let inherit (lib.modules) mkIf; inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.binds) mkKeymap; inherit (lib.nvim.lua) toLuaObject; cfg = config.vim.assistant.chatgpt; inherit (options.vim.assistant.chatgpt) mappings; in { config = mkIf cfg.enable { vim = { startPlugins = [ "chatgpt-nvim" # Dependencies "nui-nvim" "plenary-nvim" ]; # ChatGPT.nvim explicitly depends on Telescope. telescope.enable = true; pluginRC.chagpt = entryAnywhere '' require("chatgpt").setup(${toLuaObject cfg.setupOpts}) ''; keymaps = [ (mkKeymap ["n" "v"] cfg.mappings.editWithInstructions "ChatGPTEditWithInstruction" {desc = mappings.editWithInstructions.description;}) (mkKeymap ["n" "v"] cfg.mappings.grammarCorrection "ChatGPTRun grammar_correction" {desc = mappings.grammarCorrection.description;}) (mkKeymap ["n" "v"] cfg.mappings.translate "ChatGPTRun translate" {desc = mappings.translate.description;}) (mkKeymap ["n" "v"] cfg.mappings.keyword "ChatGPTRun keywords" {desc = mappings.keyword.description;}) (mkKeymap ["n" "v"] cfg.mappings.docstring "ChatGPTRun docstring" {desc = mappings.docstring.description;}) (mkKeymap ["n" "v"] cfg.mappings.addTests "ChatGPTRun add_tests" {desc = mappings.addTests.description;}) (mkKeymap ["n" "v"] cfg.mappings.optimize "ChatGPTRun optimize_code" {desc = mappings.optimize.description;}) (mkKeymap ["n" "v"] cfg.mappings.summarize "ChatGPTRun summarize" {desc = mappings.summarize.description;}) (mkKeymap ["n" "v"] cfg.mappings.fixBugs "ChatGPTRun fix_bugs" {desc = mappings.fixBugs.description;}) (mkKeymap ["n" "v"] cfg.mappings.explain "ChatGPTRun explain_code" {desc = mappings.explain.description;}) (mkKeymap ["n" "v"] cfg.mappings.roxygenEdit "ChatGPTRun roxygen_edit" {desc = mappings.roxygenEdit.description;}) (mkKeymap ["n" "v"] cfg.mappings.readabilityanalysis "ChatGPTRun code_readability_analysis" {desc = mappings.readabilityanalysis.description;}) (mkKeymap "n" cfg.mappings.chatGpt "ChatGPT" {desc = mappings.chatGpt.description;}) ]; }; }; }