From 05874830dd743dcbc0c9478aedcbb0ba5a70466e Mon Sep 17 00:00:00 2001 From: Daniel McKnight Date: Tue, 3 Jun 2025 08:34:58 -0700 Subject: [PATCH] Include copilot chat and completions. Refactor configuration into more modules --- .config/nvim/init.lua | 18 +- .config/nvim/lua/plugins/language-server.lua | 159 +++++++----------- .config/nvim/lua/plugins/llm.lua | 31 ++++ .../nvim/lua/plugins/syntax_highlighting.lua | 55 ++++++ 4 files changed, 160 insertions(+), 103 deletions(-) create mode 100644 .config/nvim/lua/plugins/llm.lua create mode 100644 .config/nvim/lua/plugins/syntax_highlighting.lua diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index 4bfd935..b5edf96 100644 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -12,6 +12,8 @@ vim.cmd("set shiftwidth=2") -- Configure Editor Settings vim.cmd("set number") +vim.cmd("set splitbelow") +vim.cmd("set splitright") vim.cmd("set spl=en_us spell") vim.opt.guifont = "JetBrainsMonoNerdFontMono:14" -- Custom Key Binds @@ -20,18 +22,28 @@ vim.g.mapleader = " " -- Init Lazy Plugin Manager require("config.lazy") +-- Configure nvim Keymaps +vim.keymap.set("n", "r", ":source %", { desc = "Reload Config" }) + -- Configure Telescope Keymaps local builtin = require("telescope.builtin") -vim.keymap.set("n", "", builtin.find_files, {}) -vim.keymap.set("n", "gg", builtin.live_grep, { desc = "Grep Files" }) +vim.keymap.set("n", "ff", builtin.find_files, { desc = "Find File"}) +vim.keymap.set("n", "fg", builtin.live_grep, { desc = "Grep Files" }) vim.keymap.set("n", "fb", builtin.buffers, { desc = "Open Editors" }) -- Init Treesitter Syntax Highlighting --require("config.treesitter") -- Configure NeoTree (FS View) -vim.keymap.set("n", "ft", ":Neotree filesystem reveal left") +vim.keymap.set("n", "ft", ":Neotree filesystem toggle left") -- Configure Git vim.keymap.set("n", "gd", ":Gitsigns preview_hunk", { desc = "Git Diff" }) vim.keymap.set("n", "gb", ":Gitsigns toggle_current_line_blame", { desc = "Git Blame" }) + +-- Configure Copilot +--vim.keymap.set("n", "cp", ":Copilot panel", { desc = "Open Copilot Panel" }) +vim.keymap.set("n", "ce", ":Copilot enable", { desc = "Enable Copilot Completions" }) +vim.keymap.set("n", "cd", ":Copilot disable", { desc = "Disable Copilot Completions" }) +vim.keymap.set("n", "cc", ":CopilotChatToggle", { desc = "Toggle Copilot Chat" }) +vim.keymap.set("n", "cx", ":CopilotChatReset", { desc = "Reset Copilot Chat" }) diff --git a/.config/nvim/lua/plugins/language-server.lua b/.config/nvim/lua/plugins/language-server.lua index e39e982..27d179f 100644 --- a/.config/nvim/lua/plugins/language-server.lua +++ b/.config/nvim/lua/plugins/language-server.lua @@ -1,102 +1,61 @@ return { - { - "mason-org/mason.nvim", - tag = "v1.11.0", - config = function() - require("mason").setup({}) - end, - }, - { - "mason-org/mason-lspconfig.nvim", - tag = "v1.32.0", - config = function() - require("mason-lspconfig").setup({ - ensure_installed = { - "lua_ls", - "bashls", - "dockerls", - --"gh-actions-language-server", - "helm_ls", - "jsonls", - "marksman", - "nginx_language_server", - "ruff", - "yamlls", - }, - }) - end, - }, - { - "nvimtools/none-ls.nvim", - config = function() - local null_ls = require("null-ls") - null_ls.setup({ - sources = { - null_ls.builtins.formatting.stylua, - null_ls.builtins.formatting.mdformat, - }, - }) - vim.keymap.set("n", "af", vim.lsp.buf.format, { desc = "Auto-Format File" }) - end, - }, - { - "neovim/nvim-lspconfig", - tag = "v1.8.0", - config = function() - local lspconfig = require("lspconfig") - lspconfig.lua_ls.setup({}) - lspconfig.bashls.setup({}) - lspconfig.dockerls.setup({}) - lspconfig.helm_ls.setup({}) - lspconfig.jsonls.setup({}) - lspconfig.nginx_language_server.setup({}) - lspconfig.marksman.setup({}) - lspconfig.ruff.setup({}) - lspconfig.yamlls.setup({}) - vim.keymap.set("n", "d", vim.lsp.buf.hover, { desc = "Show Docstring" }) - vim.keymap.set("n", "gt", vim.lsp.buf.definition, { desc = "Go To Definition" }) - vim.keymap.set("n", "ca", vim.lsp.buf.code_action, { desc = "Show Code Actions" }) - end, - }, - { - "nvim-treesitter/nvim-treesitter", - config = function() - local config = require("nvim-treesitter.configs") - config.setup({ - -- A list of parser names, or "all" (the listed parsers MUST always be installed) - ensure_installed = { - "lua", - "vim", - "vimdoc", - "query", - "markdown", - "markdown_inline", - "json", - "jsonc", - "python", - "yaml", - }, - - -- Install parsers synchronously (only applied to `ensure_installed`) - sync_install = false, - - -- Automatically install missing parsers when entering buffer - -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally - auto_install = true, - - -- List of parsers to ignore installing (or "all") - ignore_install = { "javascript" }, - - highlight = { - enable = true, - - -- Setting this to true will run `:h syntax` and tree-sitter at the same time. - -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). - -- Using this option may slow down your editor, and you may see some duplicate highlights. - -- Instead of true it can also be a list of languages - additional_vim_regex_highlighting = false, - }, - }) - end, - }, + { + "mason-org/mason.nvim", + tag = "v1.11.0", + config = function() + require("mason").setup({}) + end, + }, + { + "mason-org/mason-lspconfig.nvim", + tag = "v1.32.0", + config = function() + require("mason-lspconfig").setup({ + ensure_installed = { + "lua_ls", + "bashls", + "dockerls", + --"gh-actions-language-server", + "helm_ls", + "jsonls", + "marksman", + "nginx_language_server", + "ruff", + "yamlls", + }, + }) + end, + }, + { + "nvimtools/none-ls.nvim", + config = function() + local null_ls = require("null-ls") + null_ls.setup({ + sources = { + null_ls.builtins.formatting.stylua, + null_ls.builtins.formatting.mdformat, + }, + }) + vim.keymap.set("n", "af", vim.lsp.buf.format, { desc = "Auto-Format File" }) + end, + }, + { + "neovim/nvim-lspconfig", + tag = "v1.8.0", + config = function() + local lspconfig = require("lspconfig") + lspconfig.lua_ls.setup({}) + lspconfig.bashls.setup({}) + lspconfig.dockerls.setup({}) + lspconfig.helm_ls.setup({}) + lspconfig.jsonls.setup({}) + lspconfig.nginx_language_server.setup({}) + lspconfig.marksman.setup({}) + lspconfig.ruff.setup({}) + lspconfig.yamlls.setup({}) + vim.keymap.set("n", "d", vim.lsp.buf.hover, { desc = "Show Docstring" }) + vim.keymap.set("n", "gt", vim.lsp.buf.definition, { desc = "Go To Definition" }) + vim.keymap.set("n", "ca", vim.lsp.buf.code_action, { desc = "Show Code Actions" }) + end, + }, } diff --git a/.config/nvim/lua/plugins/llm.lua b/.config/nvim/lua/plugins/llm.lua new file mode 100644 index 0000000..ffc0a07 --- /dev/null +++ b/.config/nvim/lua/plugins/llm.lua @@ -0,0 +1,31 @@ +return { + { + "github/copilot.vim", + }, + { + "CopilotC-Nvim/CopilotChat.nvim", + tag = "v3.4.0", + dependencies = { + { "nvim-lua/plenary.nvim" }, + { "github/copilot.vim" }, + }, + build = "make tiktoken", + config = function() + require("CopilotChat").setup({ + question_header = "", + answer_header = "", + separator = "", + error_header = "> [!ERROR] Error", + window = { + layout = "horizontal", + height = 0.3, + width = 0.25, + }, + auto_insert_mode = false, + chat_autocomplete = false, + highlight_headers = false, + show_help = false, + }) + end, + }, +} diff --git a/.config/nvim/lua/plugins/syntax_highlighting.lua b/.config/nvim/lua/plugins/syntax_highlighting.lua new file mode 100644 index 0000000..ac07741 --- /dev/null +++ b/.config/nvim/lua/plugins/syntax_highlighting.lua @@ -0,0 +1,55 @@ +return { + { + "nvim-treesitter/nvim-treesitter", + config = function() + local config = require("nvim-treesitter.configs") + config.setup({ + -- A list of parser names, or "all" (the listed parsers MUST always be installed) + ensure_installed = { + "lua", + "vim", + "vimdoc", + "query", + "markdown", + "markdown_inline", + "json", + "jsonc", + "python", + "yaml", + }, + + -- Install parsers synchronously (only applied to `ensure_installed`) + sync_install = false, + + -- Automatically install missing parsers when entering buffer + -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally + auto_install = true, + + -- List of parsers to ignore installing (or "all") + ignore_install = { "javascript" }, + + highlight = { + enable = true, + + -- Setting this to true will run `:h syntax` and tree-sitter at the same time. + -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). + -- Using this option may slow down your editor, and you may see some duplicate highlights. + -- Instead of true it can also be a list of languages + additional_vim_regex_highlighting = false, + }, + }) + end, + }, + { + "MeanderingProgrammer/render-markdown.nvim", + dependencies = { + { "nvim-treesitter/nvim-treesitter" }, + { "nvim-tree/nvim-web-devicons" }, + }, + config = function() + require("render-markdown").setup({ + file_types = { "markdown", "copilot-chat" }, + }) + end, + }, +}