From: Arthur Taft Date: Sun, 12 Oct 2025 17:18:07 +0000 (-0600) Subject: Initial commit X-Git-Url: https://gitweb.arthurtaft.net/nvim.git/commitdiff_plain/813e8ec7c6e8993984f746d7f186244efd4ab4b3?ds=inline Initial commit --- 813e8ec7c6e8993984f746d7f186244efd4ab4b3 diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..eb18f37 --- /dev/null +++ b/init.lua @@ -0,0 +1,12 @@ +vim.g.mapleader = " " +vim.g.maplocalleader = " " + +require("config.options") +require("config.keymaps") +require("config.autocmds") + +-- load lazy bootstrap here (NOT under lua/plugins/) +require("config.lazy") + +-- colors after plugins +vim.cmd.colorscheme("catppuccin-mocha") diff --git a/lazy-lock.json b/lazy-lock.json new file mode 100644 index 0000000..0eb4a4a --- /dev/null +++ b/lazy-lock.json @@ -0,0 +1,39 @@ +{ + "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" }, + "LuaSnip": { "branch": "master", "commit": "73813308abc2eaeff2bc0d3f2f79270c491be9d7" }, + "catppuccin": { "branch": "main", "commit": "af58927c55c9f3272c940ff02b3cee94a1249f26" }, + "cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" }, + "cmp-nvim-lsp": { "branch": "main", "commit": "bd5a7d6db125d4654b50eeae9f5217f24bb22fd3" }, + "cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" }, + "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, + "conform.nvim": { "branch": "master", "commit": "fbcb4fa7f34bfea9be702ffff481a8e336ebf6ed" }, + "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, + "gitsigns.nvim": { "branch": "main", "commit": "1ee5c1fd068c81f9dd06483e639c2aa4587dc197" }, + "gruvbox.nvim": { "branch": "main", "commit": "5e0a460d8e0f7f669c158dedd5f9ae2bcac31437" }, + "harpoon": { "branch": "harpoon2", "commit": "ed1f853847ffd04b2b61c314865665e1dadf22c7" }, + "indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" }, + "lazy.nvim": { "branch": "main", "commit": "1ea3c4085785f460fb0e46d2fe1ee895f5f9e7c1" }, + "lazygit.nvim": { "branch": "main", "commit": "2305deed25bc61b866d5d39189e9105a45cf1cfb" }, + "lualine.nvim": { "branch": "master", "commit": "b8c23159c0161f4b89196f74ee3a6d02cdc3a955" }, + "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "6bdb14f230de0904229ec367b410fb817e59b072" }, + "mason.nvim": { "branch": "main", "commit": "ad7146aa61dcaeb54fa900144d768f040090bff0" }, + "neo-tree.nvim": { "branch": "v3.x", "commit": "4c60a198e3f92098778a32a1c76d2bd7ba46a3b5" }, + "none-ls.nvim": { "branch": "main", "commit": "5cf63841461b49989972d35bf886e076a1ab3649" }, + "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, + "nvim-cmp": { "branch": "main", "commit": "b5311ab3ed9c846b585c0c15b7559be131ec4be9" }, + "nvim-lspconfig": { "branch": "master", "commit": "ac98db2f9f06a56498ec890a96928774eae412c3" }, + "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, + "nvim-web-devicons": { "branch": "master", "commit": "b8221e42cf7287c4dcde81f232f58d7b947c210d" }, + "oil.nvim": { "branch": "master", "commit": "919e155fdf38e9148cdb5304faaaf53c20d703ea" }, + "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, + "render-markdown.nvim": { "branch": "main", "commit": "d53856423be5ef3c267d26ee261b0981b372f718" }, + "telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" }, + "todo-comments.nvim": { "branch": "main", "commit": "19d461ddd543e938eb22505fb03fa878800270b6" }, + "toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" }, + "trouble.nvim": { "branch": "main", "commit": "c098362fe603d3922095e7db595961e020bdf2d0" }, + "vim-fugitive": { "branch": "master", "commit": "61b51c09b7c9ce04e821f6cf76ea4f6f903e3cf4" }, + "vimtex": { "branch": "master", "commit": "5c457a8a4dd57ca942260ff843a5482b064d9d9b" }, + "which-key.nvim": { "branch": "main", "commit": "b4177e3eaf15fe5eb8357ebac2286d488be1ed00" }, + "window-picker": { "branch": "main", "commit": "6382540b2ae5de6c793d4aa2e3fe6dbb518505ec" } +} diff --git a/lua/config/autocmds.lua b/lua/config/autocmds.lua new file mode 100644 index 0000000..bd47c0c --- /dev/null +++ b/lua/config/autocmds.lua @@ -0,0 +1,6 @@ +-- Format on save (sync, safe fallback to LSP) +vim.api.nvim_create_autocmd("BufWritePre", { + callback = function(args) + require("conform").format({ bufnr = args.buf, async = false, lsp_fallback = true }) + end, +}) diff --git a/lua/config/keymaps.lua b/lua/config/keymaps.lua new file mode 100644 index 0000000..008ef92 --- /dev/null +++ b/lua/config/keymaps.lua @@ -0,0 +1,40 @@ +local map = vim.keymap.set + +map("n", "q", "q") +map("n", "w", "w") + +-- Files / search +map("n", "e", "Oil", { desc = "File Explorer (oil)" }) +map("n", "ff", "Telescope find_files", { desc = "Find files" }) +map("n", "fg", "Telescope live_grep", { desc = "Grep" }) +map("n", "fb", "Telescope buffers", { desc = "Buffers" }) +map("n", "fh", "Telescope help_tags", { desc = "Help" }) + +-- Git / terminal / diagnostics +map("n", "gg", "LazyGit", { desc = "LazyGit" }) +map("n", "tt", "ToggleTerm", { desc = "Terminal" }) +map("n", "xx", "Trouble diagnostics toggle", { desc = "Diagnostics (Trouble)" }) + +-- LSP +map("n", "rn", vim.lsp.buf.rename, { desc = "LSP Rename" }) +map({ "n", "v" }, "ca", vim.lsp.buf.code_action, { desc = "LSP Code Action" }) +map("n", "gd", vim.lsp.buf.definition, { desc = "Go to definition" }) +map("n", "K", vim.lsp.buf.hover, { desc = "Hover" }) + +-- Format +map("n", "lf", function() + require("conform").format({ async = true }) +end, { desc = "Format" }) + +-- QoL +map("n", "s", [[:%s/\s\+$//e]], { desc = "Strip trailing spaces" }) + +-- Neotree + +-- Focus the sidebar (or open it if closed) +map("n", "nf", function() + require("neo-tree.command").execute({ action = "focus", source = "filesystem", position = "left" }) +end, { desc = "Neo-tree: focus sidebar" }) + +-- Reveal current file in the sidebar (and focus it) +map("n", "fE", "Neotree reveal left", { desc = "Neo-tree: reveal current file" }) diff --git a/lua/config/lazy.lua b/lua/config/lazy.lua new file mode 100644 index 0000000..79b993b --- /dev/null +++ b/lua/config/lazy.lua @@ -0,0 +1,13 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.loop.fs_stat(lazypath) then + vim.fn.system({ "git", "clone", "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath }) +end +vim.opt.rtp:prepend(lazypath) + +require("lazy").setup({ + { import = "plugins" }, -- load all specs from lua/plugins/*.lua +}, { + ui = { border = "rounded" }, + change_detection = { notify = false }, +}) diff --git a/lua/config/options.lua b/lua/config/options.lua new file mode 100644 index 0000000..db942f1 --- /dev/null +++ b/lua/config/options.lua @@ -0,0 +1,13 @@ +local o, wo = vim.o, vim.wo +o.termguicolors = true +o.number = true +wo.signcolumn = "yes" +o.expandtab = true +o.shiftwidth = 2 +o.tabstop = 2 +o.ignorecase = true +o.smartcase = true +o.clipboard = "unnamedplus" +o.updatetime = 250 +o.splitbelow = true +o.splitright = true diff --git a/lua/plugins/cmp.lua b/lua/plugins/cmp.lua new file mode 100644 index 0000000..cfe8a65 --- /dev/null +++ b/lua/plugins/cmp.lua @@ -0,0 +1,33 @@ +return { + { + "hrsh7th/nvim-cmp", + dependencies = { + "hrsh7th/cmp-nvim-lsp","hrsh7th/cmp-path","hrsh7th/cmp-buffer", + "L3MON4D3/LuaSnip","saadparwaiz1/cmp_luasnip","rafamadriz/friendly-snippets", + }, + config = function() + local cmp = require("cmp") + local luasnip = require("luasnip") + require("luasnip.loaders.from_vscode").lazy_load() + + cmp.setup({ + snippet = { expand = function(args) luasnip.lsp_expand(args.body) end }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.confirm({ select = true }), + [""] = cmp.mapping(function(fb) + if cmp.visible() then cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then luasnip.expand_or_jump() + else fb() end + end, { "i","s" }), + [""] = cmp.mapping(function(fb) + if cmp.visible() then cmp.select_prev_item() + elseif luasnip.jumpable(-1) then luasnip.jump(-1) + else fb() end + end, { "i","s" }), + }), + sources = { {name="nvim_lsp"},{name="path"},{name="buffer"},{name="luasnip"} }, + }) + end, + }, +} diff --git a/lua/plugins/comments.lua b/lua/plugins/comments.lua new file mode 100644 index 0000000..3cf2447 --- /dev/null +++ b/lua/plugins/comments.lua @@ -0,0 +1,3 @@ +return { + { "numToStr/Comment.nvim", opts = {} }, +} diff --git a/lua/plugins/files.lua b/lua/plugins/files.lua new file mode 100644 index 0000000..7e28476 --- /dev/null +++ b/lua/plugins/files.lua @@ -0,0 +1,3 @@ +return { + { "stevearc/oil.nvim", opts = {} }, -- file explorer as buffer +} diff --git a/lua/plugins/format.lua b/lua/plugins/format.lua new file mode 100644 index 0000000..d69bad7 --- /dev/null +++ b/lua/plugins/format.lua @@ -0,0 +1,31 @@ +return { + { + "stevearc/conform.nvim", + opts = { + formatters_by_ft = { + python = { "ruff_fix", "ruff_format", "black" }, + lua = { "stylua" }, + sh = { "shfmt" }, + bash = { "shfmt" }, + markdown = { "prettier", "mdformat" }, + yaml = { "prettier" }, + json = { "prettier" }, + tex = {}, -- optionally "latexindent" + }, + notify_on_error = true, + }, + }, + { + "nvimtools/none-ls.nvim", + dependencies = { "nvim-lua/plenary.nvim" }, + config = function() + local nls = require("null-ls") + nls.setup({ + sources = { + nls.builtins.diagnostics.shellcheck, + nls.builtins.diagnostics.markdownlint, + }, + }) + end, + }, +} diff --git a/lua/plugins/git.lua b/lua/plugins/git.lua new file mode 100644 index 0000000..a63f450 --- /dev/null +++ b/lua/plugins/git.lua @@ -0,0 +1,6 @@ +return { + { "lewis6991/gitsigns.nvim", opts = {} }, + { "kdheepak/lazygit.nvim" }, + { "tpope/vim-fugitive" }, +} + diff --git a/lua/plugins/harpoon.lua b/lua/plugins/harpoon.lua new file mode 100644 index 0000000..1b22448 --- /dev/null +++ b/lua/plugins/harpoon.lua @@ -0,0 +1,13 @@ +return { + { + "ThePrimeagen/harpoon", + branch = "harpoon2", + config = function() + local harpoon = require("harpoon") + harpoon:setup() + local map = vim.keymap.set + map("n", "ha", function() harpoon:list():add() end, { desc = "Harpoon add" }) + map("n", "hm", function() harpoon.ui:toggle_quick_menu(harpoon:list()) end, { desc = "Harpoon menu" }) + end, + }, +} diff --git a/lua/plugins/latex.lua b/lua/plugins/latex.lua new file mode 100644 index 0000000..f76a21f --- /dev/null +++ b/lua/plugins/latex.lua @@ -0,0 +1,3 @@ +return { + { "lervag/vimtex", ft = { "tex" } }, +} diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua new file mode 100644 index 0000000..40d955b --- /dev/null +++ b/lua/plugins/lsp.lua @@ -0,0 +1,60 @@ +return { + { "williamboman/mason.nvim", opts = {} }, + + { + "williamboman/mason-lspconfig.nvim", + dependencies = { "williamboman/mason.nvim", "neovim/nvim-lspconfig" }, + opts = { + ensure_installed = { + "pyright", + "ruff", + "bashls", + "lua_ls", + "texlab", + "dockerls", + "yamlls", + "marksman", + }, + -- v2 can auto-enable; installation still happens via Mason + automatic_enable = true, + }, + }, + + { + "neovim/nvim-lspconfig", + dependencies = { "hrsh7th/cmp-nvim-lsp" }, + config = function() + local caps = require("cmp_nvim_lsp").default_capabilities() + + vim.diagnostic.config({ + virtual_text = { spacing = 2, prefix = "●" }, + float = { border = "rounded" }, + severity_sort = true, + }) + + local function on_attach(_, _) end + + vim.lsp.config("pyright", { capabilities = caps, on_attach = on_attach }) + vim.lsp.config( + "ruff", + { capabilities = caps, on_attach = on_attach, init_options = { settings = { args = {} } } } + ) + vim.lsp.config("bashls", { capabilities = caps, on_attach = on_attach }) + vim.lsp.config("lua_ls", { + capabilities = caps, + on_attach = on_attach, + settings = { + Lua = { + diagnostics = { globals = { "vim" } }, + workspace = { checkThirdParty = false }, + format = { enable = false }, + }, + }, + }) + vim.lsp.config("texlab", { capabilities = caps, on_attach = on_attach }) + vim.lsp.config("dockerls", { capabilities = caps, on_attach = on_attach }) + vim.lsp.config("yamlls", { capabilities = caps, on_attach = on_attach }) + vim.lsp.config("marksman", { capabilities = caps, on_attach = on_attach }) + end, + }, +} diff --git a/lua/plugins/markdown.lua b/lua/plugins/markdown.lua new file mode 100644 index 0000000..5ea26d1 --- /dev/null +++ b/lua/plugins/markdown.lua @@ -0,0 +1,32 @@ +return { + -- Browser preview (unchanged) + { "iamcco/markdown-preview.nvim", build = "cd app && npm install", ft = { "markdown" } }, + + -- Right-side Glow preview, lazy-loaded for Markdown buffers + { + "nvim-lua/plenary.nvim", -- just a safe carrier plugin + ft = { "markdown" }, + config = function() + -- Key: toggle right-side preview for the current markdown buffer + vim.keymap.set("n", "mp", function() + require("config.md_preview").toggle() + end, { buffer = true, desc = "Markdown: preview (toggle right split)" }) + + -- Command: :MarkdownPane + vim.api.nvim_buf_create_user_command(0, "MarkdownPane", function() + require("config.md_preview").toggle() + end, {}) + + -- OPTIONAL auto-open preview for *.md files. + -- If you don't want auto-open, delete this block. + vim.api.nvim_create_autocmd("BufReadPost", { + buffer = 0, -- current markdown buffer only + once = true, -- run once per buffer + callback = function() + -- comment this out if you prefer manual toggle only + -- require("config.md_preview").toggle() + end, + }) + end, + }, +} diff --git a/lua/plugins/neo-tree.lua b/lua/plugins/neo-tree.lua new file mode 100644 index 0000000..f435302 --- /dev/null +++ b/lua/plugins/neo-tree.lua @@ -0,0 +1,71 @@ +return { + { + "nvim-neo-tree/neo-tree.nvim", + branch = "v3.x", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-tree/nvim-web-devicons", -- you already have this + "MunifTanjim/nui.nvim", + }, + cmd = { "Neotree" }, + keys = { + { "fe", "Neotree toggle left", desc = "Files (toggle sidebar)" }, + { "fE", "Neotree reveal left", desc = "Files (reveal current)" }, + { "fgs", "Neotree float git_status", desc = "Git status (float)" }, + }, + opts = { + close_if_last_window = true, + popup_border_style = "rounded", + enable_git_status = true, + enable_diagnostics = false, + default_component_configs = { + indent = { padding = 1 }, + name = { use_git_status_colors = true }, + git_status = { + symbols = { unstaged = "●", staged = "✓", untracked = "★", renamed = "➡", deleted = "✖" }, + }, + }, + filesystem = { + filtered_items = { + hide_dotfiles = false, + hide_gitignored = true, + }, + follow_current_file = { enabled = true }, + hijack_netrw_behavior = "open_default", + use_libuv_file_watcher = true, + }, + window = { + width = 34, + mappings = { + [""] = "none", + ["l"] = "open", + ["h"] = "close_node", + ["o"] = "open", + [""] = "open_with_window_picker", + ["s"] = "open_split", + ["v"] = "open_vsplit", + ["C"] = "close_all_nodes", + ["R"] = "refresh", + ["a"] = { "add", config = { show_path = "relative" } }, + ["d"] = "delete", + ["r"] = "rename", + ["y"] = "copy_to_clipboard", + ["x"] = "cut_to_clipboard", + ["p"] = "paste_from_clipboard", + }, + }, + source_selector = { winbar = true, statusline = false }, -- nice tabs for Files/Git/Buffers + }, + init = function() + -- Optional: open the sidebar when you start in a directory or no file + if vim.fn.argc() == 0 then + vim.api.nvim_create_autocmd("VimEnter", { + once = true, + callback = function() + vim.cmd("Neotree show left") + end, + }) + end + end, + }, +} diff --git a/lua/plugins/render_markdown.lua b/lua/plugins/render_markdown.lua new file mode 100644 index 0000000..13168bd --- /dev/null +++ b/lua/plugins/render_markdown.lua @@ -0,0 +1,78 @@ +return { + { + "MeanderingProgrammer/render-markdown.nvim", + ft = { "markdown" }, + dependencies = { + "nvim-treesitter/nvim-treesitter", + "nvim-tree/nvim-web-devicons", + }, + keys = { + -- Open a right split showing the SAME buffer, render only in that right window + { + "mr", + function() + local cur = vim.api.nvim_get_current_buf() + vim.cmd("vsplit") + vim.cmd("wincmd l") + vim.api.nvim_win_set_buf(0, cur) + + -- Optional: fix the width of the preview pane (comment out if not desired) + -- vim.cmd("vertical resize 88") + + require("render-markdown").enable() -- enable only in the right window + end, + desc = "Markdown: open rendered view (right split)", + }, + + -- Disable rendering in the current window and close the split + { + "mR", + function() + require("render-markdown").disable() + -- Close the right split if you're currently in it + if #vim.api.nvim_list_wins() > 1 then + vim.cmd("wincmd l | close") + end + end, + desc = "Markdown: close rendered view", + }, + + -- Toggle inline rendering in the current window (no split) + { + "mi", + function() + vim.cmd("RenderMarkdown toggle") -- built-in toggle command + end, + desc = "Markdown: toggle inline render", + }, + }, + opts = { + -- Good starting defaults; tweak as you like + heading = { + enabled = true, + sign = true, + icons = { "▎", "▎", "▎", "▎", "▎", "▎" }, + }, + bullet = { enabled = true }, + checkbox = { enabled = true }, + code = { enabled = true, sign = true }, -- prettify fenced code blocks + link = { enabled = true }, + table = { enabled = true }, + }, + config = function(_, opts) + require("render-markdown").setup(opts) + + -- Nice conceal defaults for markdown buffers + vim.api.nvim_create_autocmd("FileType", { + pattern = { "markdown" }, + callback = function(ev) + local win = vim.fn.bufwinid(ev.buf) + if win ~= -1 then + vim.api.nvim_win_set_option(win, "conceallevel", 2) + vim.api.nvim_win_set_option(win, "concealcursor", "nc") + end + end, + }) + end, + }, +} diff --git a/lua/plugins/telescope.lua b/lua/plugins/telescope.lua new file mode 100644 index 0000000..d40cb6e --- /dev/null +++ b/lua/plugins/telescope.lua @@ -0,0 +1,10 @@ +return { + { "nvim-lua/plenary.nvim" }, + { + "nvim-telescope/telescope.nvim", + opts = { + defaults = { layout_config = { prompt_position = "top" }, sorting_strategy = "ascending" }, + pickers = { find_files = { hidden = true } }, + }, + }, +} diff --git a/lua/plugins/terminal.lua b/lua/plugins/terminal.lua new file mode 100644 index 0000000..15c7767 --- /dev/null +++ b/lua/plugins/terminal.lua @@ -0,0 +1,3 @@ +return { + { "akinsho/toggleterm.nvim", version = "*", opts = { open_mapping = [[]] } }, +} diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua new file mode 100644 index 0000000..17c1b2c --- /dev/null +++ b/lua/plugins/treesitter.lua @@ -0,0 +1,15 @@ +return { + { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + opts = { + ensure_installed = { + "bash","python","lua","json","yaml","markdown","markdown_inline", + "dockerfile","regex","vim","vimdoc","latex" + }, + highlight = { enable = true }, + indent = { enable = true }, + }, + config = function(_, opts) require("nvim-treesitter.configs").setup(opts) end, + }, +} diff --git a/lua/plugins/trouble.lua b/lua/plugins/trouble.lua new file mode 100644 index 0000000..7a63dba --- /dev/null +++ b/lua/plugins/trouble.lua @@ -0,0 +1,4 @@ +return { + { "folke/trouble.nvim", opts = {} }, + { "folke/todo-comments.nvim", dependencies = { "nvim-lua/plenary.nvim" }, opts = {} }, +} diff --git a/lua/plugins/ui.lua b/lua/plugins/ui.lua new file mode 100644 index 0000000..03e9b08 --- /dev/null +++ b/lua/plugins/ui.lua @@ -0,0 +1,8 @@ +return { + { "folke/which-key.nvim", opts = {} }, + { "nvim-tree/nvim-web-devicons" }, + { "nvim-lualine/lualine.nvim", opts = { options = { theme = "auto" } } }, + { "catppuccin/nvim", name = "catppuccin", priority = 1000 }, + { "ellisonleao/gruvbox.nvim", priority = 1000 }, + { "lukas-reineke/indent-blankline.nvim", main = "ibl", opts = {} }, +} diff --git a/lua/plugins/window_picker.lua b/lua/plugins/window_picker.lua new file mode 100644 index 0000000..42859b0 --- /dev/null +++ b/lua/plugins/window_picker.lua @@ -0,0 +1,19 @@ +return { + { + "s1n7ax/nvim-window-picker", + name = "window-picker", + version = "2.*", + event = "VeryLazy", + opts = { + autoselect_one = true, + include_current = false, + filter_rules = { + bo = { + filetype = { "neo-tree", "neo-tree-popup", "notify", "quickfix" }, + buftype = { "terminal" }, + }, + }, + -- remove the `highlights = ...` block entirely + }, + }, +}