From 3c3cfd333d30d0aa6ca3a34b8b8cbdf46e5e7c5d Mon Sep 17 00:00:00 2001 From: tiyn Date: Thu, 26 Mar 2026 07:01:33 +0100 Subject: [PATCH] NVIM: Keymap layout is now Lazy-centric --- .config/nvim/after/ftplugin/csv.lua | 6 - .config/nvim/after/ftplugin/lilypond.lua | 61 --- .config/nvim/after/ftplugin/markdown.lua | 25 - .config/nvim/after/ftplugin/tex.lua | 37 -- .config/nvim/lazy-lock.json | 2 +- .config/nvim/lua/keymap.lua | 471 ++---------------- .config/nvim/lua/plugins/auto-session.lua | 1 - .config/nvim/lua/plugins/barbecue.lua | 22 +- .config/nvim/lua/plugins/blink-pairs.lua | 3 +- .config/nvim/lua/plugins/conform.lua | 9 + .config/nvim/lua/plugins/csvview.lua | 26 +- .config/nvim/lua/plugins/dial.lua | 24 +- .config/nvim/lua/plugins/diffview.lua | 14 + .config/nvim/lua/plugins/fterm.lua | 26 + .config/nvim/lua/plugins/goto-preview.lua | 48 +- .config/nvim/lua/plugins/knap.lua | 111 +++-- .config/nvim/lua/plugins/leap.lua | 23 +- .config/nvim/lua/plugins/molten.lua | 80 ++- .config/nvim/lua/plugins/nvim-docs-view.lua | 10 +- .config/nvim/lua/plugins/nvim-hlslens.lua | 12 + .../nvim/lua/plugins/nvim-lilypond-suite.lua | 50 +- .config/nvim/lua/plugins/nvim-lspconfig.lua | 5 + .config/nvim/lua/plugins/nvim-tree.lua | 39 +- .config/nvim/lua/plugins/nvim-treesitter.lua | 8 - .config/nvim/lua/plugins/nvim-ufo.lua | 17 + .config/nvim/lua/plugins/ogpt.lua | 268 +++++----- .config/nvim/lua/plugins/outline.lua | 22 +- .config/nvim/lua/plugins/pantran.lua | 8 + .config/nvim/lua/plugins/projections.lua | 14 +- .config/nvim/lua/plugins/renamer.lua | 9 + .config/nvim/lua/plugins/spelunker.lua | 12 + .config/nvim/lua/plugins/tccs.lua | 18 +- .config/nvim/lua/plugins/telescope.lua | 35 +- .config/nvim/lua/plugins/tidy.lua | 23 +- .config/nvim/lua/plugins/todo-comments.lua | 32 +- .config/nvim/lua/plugins/treesj.lua | 14 +- .config/nvim/lua/plugins/treewalker.lua | 50 ++ .config/nvim/lua/plugins/trouble.lua | 8 + .config/nvim/lua/plugins/undotree.lua | 8 + .config/nvim/lua/plugins/vim-abolish.lua | 15 +- .config/nvim/lua/plugins/which-key.lua | 17 + .config/nvim/lua/plugins/wilder.lua | 130 +++-- .config/nvim/lua/plugins/winshift.lua | 7 + 43 files changed, 886 insertions(+), 934 deletions(-) delete mode 100644 .config/nvim/after/ftplugin/lilypond.lua diff --git a/.config/nvim/after/ftplugin/csv.lua b/.config/nvim/after/ftplugin/csv.lua index 7efed8b..2d0c0fc 100644 --- a/.config/nvim/after/ftplugin/csv.lua +++ b/.config/nvim/after/ftplugin/csv.lua @@ -1,7 +1 @@ -vim.api.nvim_create_autocmd({ "VimEnter" }, { - callback = function() - require("csvview").enable() - end, -}) - vim.o.textwidth = 0 diff --git a/.config/nvim/after/ftplugin/lilypond.lua b/.config/nvim/after/ftplugin/lilypond.lua deleted file mode 100644 index 0a285e4..0000000 --- a/.config/nvim/after/ftplugin/lilypond.lua +++ /dev/null @@ -1,61 +0,0 @@ -local wk = require("which-key") - -local fluidsynth_job = nil - --- setup interactive midi player -wk.add({ - { mode = "n", "p", desc = "Lilypond: output" }, - { - mode = "n", - "pm", - function() - local midi = vim.fn.expand("%:r") .. ".midi" - - if fluidsynth_job then - vim.fn.jobstop(fluidsynth_job) - fluidsynth_job = nil - print("fluidsynth stopped") - return - end - - fluidsynth_job = vim.fn.jobstart({ "fluidsynth", "-i", midi }) - print("fluidsynth playing (Ctrl-C to stop)") - end, - desc = "Lilypond: output MIDI", - buffer = true, - }, - { - mode = "n", - "pp", - "Viewer", - desc = "Lilypond: open PDF", - buffer = true, - }, - { - mode = "n", - "", - function() - if fluidsynth_job then - vim.fn.jobstop(fluidsynth_job) - fluidsynth_job = nil - print("fluidsynth stopped") - else - vim.cmd("normal! ") - end - end, - desc = "Stop MIDI playback", - buffer = true, - }, -}) - --- autostart -if vim.b.first_start_lilypond then - return -end -vim.b.first_start_lilypond = true - -vim.schedule(function() - if vim.fn.exists(":Viewer") == 2 then - vim.cmd.Viewer() - end -end) diff --git a/.config/nvim/after/ftplugin/markdown.lua b/.config/nvim/after/ftplugin/markdown.lua index 888d867..4c8c3e2 100644 --- a/.config/nvim/after/ftplugin/markdown.lua +++ b/.config/nvim/after/ftplugin/markdown.lua @@ -1,23 +1,9 @@ -vim.api.nvim_create_autocmd({ "VimEnter" }, { - callback = function() - require("tidy").opts.enabled_on_save = false - end, -}) - vim.api.nvim_create_autocmd({ "BufEnter" }, { callback = function() vim.o.foldenable = false end, }) -vim.api.nvim_create_autocmd({ "BufLeave" }, { - callback = function() - if vim.o.ma then - require("tidy").run() - end - end, -}) - vim.api.nvim_create_autocmd({ "VimLeave" }, { callback = function() os.execute("mdclear " .. vim.fn.expand("%")) @@ -27,14 +13,3 @@ vim.api.nvim_create_autocmd({ "VimLeave" }, { vim.o.shiftwidth = 2 vim.o.softtabstop = 2 vim.o.textwidth = 100 - --- frabjous/knap -vim.keymap.set( - "n", - "p", - require("knap").toggle_autopreviewing, - { noremap = true, desc = "Knap: toggle autopreview" } -) - --- benlubas/molten-nvim -require("quarto").activate() diff --git a/.config/nvim/after/ftplugin/tex.lua b/.config/nvim/after/ftplugin/tex.lua index f022461..8cb5a4c 100644 --- a/.config/nvim/after/ftplugin/tex.lua +++ b/.config/nvim/after/ftplugin/tex.lua @@ -1,18 +1,3 @@ -vim.api.nvim_create_autocmd({ "VimEnter" }, { - callback = function() - require("tidy").opts.enabled_on_save = false - require("knap").toggle_autopreviewing() - end, -}) - -vim.api.nvim_create_autocmd({ "BufLeave" }, { - callback = function() - if vim.o.ma then - require("tidy").run() - end - end, -}) - vim.api.nvim_create_autocmd({ "VimLeave" }, { callback = function() os.execute("texclear " .. vim.fn.expand("%")) @@ -22,25 +7,3 @@ vim.api.nvim_create_autocmd({ "VimLeave" }, { vim.o.shiftwidth = 2 vim.o.softtabstop = 2 vim.o.textwidth = 80 - -local wk = require("which-key") - --- frabjous/knap -wk.add({ - { - mode = "n", - "p", - require("knap").toggle_autopreviewing, - desc = "Knap: toggle autopreview", - buffer = true, - }, - { - mode = { "n", "v", "i" }, - "", - function() - require("knap").forward_jump() - end, - desc = "Knap: jump to cursor", - buffer = true, - }, -}) diff --git a/.config/nvim/lazy-lock.json b/.config/nvim/lazy-lock.json index efe4f77..6f578bc 100644 --- a/.config/nvim/lazy-lock.json +++ b/.config/nvim/lazy-lock.json @@ -18,6 +18,7 @@ "diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" }, "edgy.nvim": { "branch": "main", "commit": "8bfd2808994a988c975694122f68624b8a219f5f" }, "file-renamer.nvim": { "branch": "master", "commit": "893e8e7bf0050daf1b94a429bf7d14146f1b78df" }, + "flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" }, "fterm.nvim": { "branch": "master", "commit": "d1320892cc2ebab472935242d9d992a2c9570180" }, "fzy-lua-native": { "branch": "master", "commit": "9d720745d5c2fb563c0d86c17d77612a3519c506" }, "git-blame.nvim": { "branch": "main", "commit": "5c536e2d4134d064aa3f41575280bc8a2a0e03d7" }, @@ -28,7 +29,6 @@ "jupytext.nvim": { "branch": "main", "commit": "c8baf3ad344c59b3abd461ecc17fc16ec44d0f7b" }, "knap": { "branch": "main", "commit": "7db44d0bb760120142cc1e8f43e44976de59c2f6" }, "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" }, - "leap.nvim": { "branch": "main", "commit": "774c452da3521d4434f912b6ca6dd97318aca4b0" }, "logger.nvim": { "branch": "main", "commit": "63dd10c9b9a159fd6cfe08435d9606384ff103c5" }, "lsp_signature.nvim": { "branch": "master", "commit": "af7e4074d85d785cf6614352ba9ad3b28a1f8a56" }, "lspkind-nvim": { "branch": "master", "commit": "c7274c48137396526b59d86232eabcdc7fed8a32" }, diff --git a/.config/nvim/lua/keymap.lua b/.config/nvim/lua/keymap.lua index 1c35f75..7643dea 100644 --- a/.config/nvim/lua/keymap.lua +++ b/.config/nvim/lua/keymap.lua @@ -1,441 +1,42 @@ --- setup keymap function -local lazygit = require("FTerm"):new({ cmd = "lazygit" }) -local telescope = require("telescope") -local wk = require("which-key") +-- unmap unwanted commands +vim.keymap.set("n", "Zt", "", { noremap = true }) +vim.keymap.set("n", "ZT", "", { noremap = true }) +vim.keymap.set("n", "", "", { noremap = true }) +-- vim.keymap.set("n", "", "", { noremap = true }) +-- vim.keymap.set("n", "", "", { noremap = true }) +-- vim.keymap.set("n", "", "", { noremap = true }) +-- vim.keymap.set("n", "", "", { noremap = true }) +-- vim.keymap.set("n", "", "", { noremap = true }) +vim.keymap.set("n", "", "", { noremap = true }) +-- vim.keymap.set("n", "", "", { noremap = true }) +-- vim.keymap.set("n", "", "", { noremap = true }) +vim.keymap.set("n", "", "", { noremap = true }) +vim.keymap.set("n", "", "", { noremap = true }) +vim.keymap.set("n", "", "", { noremap = true }) +vim.keymap.set("n", "", "", { noremap = true }) -wk.add({ - -- setup keymap groups - { mode = "n", "g", desc = "LSP: goto" }, - { mode = "n", "gp", desc = "LSP: preview" }, - { mode = "c", "w", desc = "Write" }, - { mode = "c", "w!", desc = "Write: overwrite" }, - { mode = "n", "a", desc = "AI" }, - { mode = "n", "g", desc = "Git" }, - { mode = "n", "f", desc = "Telescope: find" }, - { mode = "n", "gd", desc = "Git: diff" }, - { mode = "n", "s", desc = "Substitute" }, - { mode = "n", "t", desc = "Terminal" }, - { mode = "n", "r", desc = "Quarto" }, - { mode = "n", "", desc = "Navigation" }, - -- unmap unwanted commands - { mode = "n", "Zt", "", noremap = true }, - { mode = "n", "ZT", "", noremap = true }, - { mode = "n", "", "", noremap = true }, - { mode = "n", "", "", noremap = true }, - { mode = "n", "", "", noremap = true }, - { mode = "n", "", "", noremap = true }, - { mode = "n", "", "", noremap = true }, - { mode = "n", "", "", noremap = true }, - { mode = "n", "", "", noremap = true }, - { mode = "n", "", "", noremap = true }, - { mode = "n", "", "", noremap = true }, - { mode = "n", "", "", noremap = true }, - { mode = "n", "", "", noremap = true }, - { mode = "n", "", "", noremap = true }, - { mode = "n", "", "", noremap = true }, - -- shortcuts for quitting - { mode = "n", "ZA", ":xa", desc = "Exit: write and quit all buffers", noremap = true }, - { mode = "n", "ZQ", ":conf q", desc = "Exit: quit current buffer", noremap = true }, - { mode = "n", "ZZ", ":x", desc = "Exit: write and quit current buffer", noremap = true }, - -- shortcut for split navigation - { mode = "n", "", "h", desc = "Navigation: go to left window", noremap = true }, - { mode = "n", "", "j", desc = "Navigation: go to lower window", noremap = true }, - { mode = "n", "", "k", desc = "Navigation: go to upper window", noremap = true }, - { mode = "n", "", "l", desc = "Navigation: go to right window", noremap = true }, - -- remap for dealing with word wrap - { mode = "n", "j", "gj", desc = "Navigation: go down in wrapped lines", silent = true }, - { mode = "n", "k", "gk", desc = "Navigation: go up in wrapped lines", silent = true }, - -- compiler for languages - { - mode = "n", - "c", - ":w! | !compiler %", - desc = "Compile: current file", - noremap = true, - }, - { - mode = "n", - "w!!", - 'execute "silent! write !sudo tee % >/dev/null" edit!', - desc = "Write: overwrite file over with sudo", - noremap = true, - }, - -- tpope/vim-abolish - { - mode = "n", - "sa", - ":%S//g", - desc = "Substitute: free form", - noremap = true, - }, - { - mode = "n", - "ss", - ":%S/\\<\\>//g", - desc = "Substitute: word under cursor", - noremap = true, - }, - -- simrat39/symbols-outline.nvim - { mode = "n", "", ":Outline", desc = "CTags: toggle" }, - -- nvim-tree/nvim-tree.lua - { mode = "n", "", ":NvimTreeToggle toggle", desc = "File tree: toggle" }, - -- mbbill/undotree - { mode = "n", "", ":UndotreeToggle", desc = "Undo tree: toggle" }, - -- amrbashir/nvim-docs-view - { - mode = "n", - "go", - ":DocsViewToggle", - desc = "LSP: toggle documentation window", - noremap = true, - }, - -- numtostr/fterm.nvim - { mode = "n", "tt", require("FTerm").toggle, desc = "Terminal: open", noremap = true }, - { - mode = "n", - "gt", - function() - lazygit:toggle() - end, - desc = "Git: open lazygit", - noremap = true, - }, - { - mode = "n", - "tg", - function() - lazygit:toggle() - end, - desc = "Terminal: open lazygit", - noremap = true, - }, - -- sindrets/diffview.nvim - { mode = "n", "gdo", ":DiffviewOpen", desc = "Git: open diff" }, - { mode = "n", "gdc", ":DiffviewClose", desc = "Git: close diff" }, - -- folke/trouble.nvim - { mode = "n", "", ":Trouble diagnostics toggle", desc = "LSP: toggle error list" }, - -- hrsh7th/nvim-cmp - { - mode = "n", - "gd", - function() - vim.lsp.buf.definition() - end, - desc = "LSP: goto definition", - noremap = true, - }, - { - mode = "n", - "gD", - function() - vim.lsp.buf.declaration() - end, - desc = "LSP: goto declaration", - noremap = true, - }, - { - mode = "n", - "gT", - function() - vim.lsp.buf.type_definition() - end, - desc = "LSP: goto type definition", - noremap = true, - }, - { - mode = "n", - "gi", - function() - vim.lsp.buf.implementation() - end, - desc = "LSP: list implementation", - noremap = true, - }, - { - mode = "n", - "gr", - function() - vim.lsp.buf.references() - end, - desc = "LSP: list references", - noremap = true, - }, - { - mode = "n", - "", - function() - require("conform").format({ async = true, lsp_fallback = true }) - end, - desc = "LSP: format", - noremap = true, - }, - -- rmagatti/goto-preview - { - mode = "n", - "gpd", - function() - require("goto-preview").goto_preview_definition() - end, - desc = "LSP: preview definition", - noremap = true, - }, - { - mode = "n", - "gpy", - function() - require("goto-preview").goto_preview_type_definition() - end, - desc = "LSP: preview type definition", - noremap = true, - }, - { - mode = "n", - "gpi", - function() - require("goto-preview").goto_preview_implementation() - end, - desc = "LSP: list preview implementation", - noremap = true, - }, - { - mode = "n", - "gpD", - function() - require("goto-preview").goto_preview_declaration() - end, - desc = "LSP: preview declaration", - noremap = true, - }, - { - mode = "n", - "gpr", - function() - require("goto-preview").goto_preview_references() - end, - desc = "LSP: list preview references", - noremap = true, - }, - { - mode = "n", - "gpc", - function() - require("goto-preview").close_all_win() - end, - desc = "LSP: close all preview windows", - noremap = true, - }, - -- filipdutescu/renamer.nvim - { - mode = "n", - "", - function() - require("renamer").rename() - end, - desc = "LSP: rename", - noremap = true, - }, - -- nvim-telescope/telescope.nvim - { - mode = "n", - "ff", - ":Telescope find_files", - desc = "Telescope: find files", - noremap = true, - }, - { - mode = "n", - "ff", - ":Telescope find_files", - desc = "Telescope: find files", - noremap = true, - }, - -- archie-judd/telescope-words.nvim - { - mode = "n", - "wd", - telescope.extensions.telescope_words.search_dictionary, - desc = "Telescope: search dictionary", - noremap = true, - }, - { - mode = "n", - "wt", - telescope.extensions.telescope_words.search_thesaurus, - desc = "Telescope: search thesaurus", - noremap = true, - }, - -- gnikdroy/projections.nvim - { - mode = "n", - "fp", - function() - vim.cmd("Telescope projections") - end, - desc = "Telescope: find projects", - noremap = true, - }, - -- kamykn/spelunker.vim - { - mode = "n", - "t", - ":call spelunker#toggle()", - desc = "Spelunker: toggle spell check", - noremap = true, - }, - { mode = "n", "s", "z=", desc = "Spell: display suggestions" }, - -- kevinhwang91/nvim-hlslens - { - mode = "n", - "n", - [[execute('normal! ' . v:count1 . 'n')lua require('hlslens').start()]], - desc = "Search: search forward", - noremap = true, - silent = true, - }, - { - mode = "n", - "N", - [[execute('normal! ' . v:count1 . 'N')lua require('hlslens').start()]], - desc = "Search: search backwards", - noremap = true, - silent = true, - }, - -- sindrets/winshift.nvim - { - mode = "n", - "m", - ":WinShift", - desc = "Navigation: enter window shift mode", - noremap = true, - }, - -- ggandor/leap.nvim - { - mode = "n", - "f", - "(leap-forward)", - desc = "Navigation: enter leap mode for forward movement", - noremap = true, - }, - { - mode = "n", - "F", - "(leap-backward)", - desc = "Navigation: enter leap mode for backwards movement", - noremap = true, - }, - { - mode = "n", - "gf", - "(leap-from-window)", - desc = "Navigation: enter leap mode for other windows", - noremap = true, - }, - -- quarto-dev/quarto-nvim - { - mode = "n", - "rc", - require("quarto.runner").run_cell, - desc = "Quarto: Run cell", - noremap = true, - silent = true, - }, - { - mode = "n", - "ra", - require("quarto.runner").run_above, - desc = "Quarto: Run cell and above", - noremap = true, - silent = true, - }, - { - mode = "n", - "rA", - require("quarto.runner").run_all, - desc = "Quarto: Run all cells", - noremap = true, - silent = true, - }, - { - mode = "n", - "rl", - require("quarto.runner").run_line, - desc = "Quarto: Run line", - noremap = true, - silent = true, - }, - { - mode = "n", - "rr", - require("quarto.runner").run_range, - desc = "Quarto: Run visual range", - noremap = true, - silent = true, - }, - { - mode = "n", - "rL", - function() - require("quarto.runner").run_all(true) - end, - desc = "Quarto: Run all cells of all languages", - noremap = true, - silent = true, - }, - -- huynle/ogpt-nvim - { mode = "n", "ai", ":OGPT", desc = "OGTP: Open AI View", noremap = true }, - -- potamides/pantran.nvim - { - mode = { "n", "v" }, - "tr", - ":Pantran", - desc = "Pantran: translate", - noremap = true, - }, - -- aaronik/treewalkr.nvim - { mode = { "n", "v" }, "", "Treewalker Up", silent = true }, - { mode = { "n", "v" }, "", "Treewalker Down", silent = true }, - { mode = { "n", "v" }, "", "Treewalker Left", silent = true }, - { mode = { "n", "v" }, "", "Treewalker Right", silent = true }, - { mode = { "n" }, "", "Treewalker SwapUp", silent = true }, - { mode = { "n" }, "", "Treewalker SwapDown", silent = true }, - { mode = { "n" }, "", "Treewalker SwapLeft", silent = true }, - { mode = { "n" }, "", "Treewalker SwapRight", silent = true }, +-- shortcuts for quitting +vim.keymap.set("n", "ZA", ":xa", { desc = "Exit: write and quit all buffers", noremap = true }) +vim.keymap.set("n", "ZQ", ":conf q", { desc = "Exit: quit current buffer", noremap = true }) +vim.keymap.set("n", "ZZ", ":x", { desc = "Exit: write and quit current buffer", noremap = true }) - -- monaqa/dial.nvim - { - mode = { "n" }, - "", - function() - require("dial.map").manipulate("increment", "normal") - end, - silent = true, - }, - { - mode = { "n" }, - "", - function() - require("dial.map").manipulate("decrement", "normal") - end, - silent = true, - }, +-- shortcut for split navigation +vim.keymap.set("n", "", "h", { desc = "Navigation: go to left window", noremap = true }) +vim.keymap.set("n", "", "j", { desc = "Navigation: go to lower window", noremap = true }) +vim.keymap.set("n", "", "k", { desc = "Navigation: go to upper window", noremap = true }) +vim.keymap.set("n", "", "l", { desc = "Navigation: go to right window", noremap = true }) - -- Wansmer/treesj - { - mode = { "n" }, - "m", - function() - require("treesj").toggle() - end, - }, +-- remap for dealing with word wrap +vim.keymap.set("n", "j", "gj", { desc = "Navigation: go down in wrapped lines", silent = true }) +vim.keymap.set("n", "k", "gk", { desc = "Navigation: go up in wrapped lines", silent = true }) + +-- compiler for languages +vim.keymap.set("n", "c", ":w! | !compiler %", { + desc = "Compile: current file", + noremap = true, }) --- kevinhwang91/nvim-ufo - lspconfig -vim.keymap.set("n", "K", function() - local winid = require("ufo").peekFoldedLinesUnderCursor() - if not winid then - vim.lsp.buf.hover({ border = "rounded", focusable = false, max_width = 100 }) - end -end, { - buffer = bufnr, - desc = "LSP: show documentation / peek folded section", +vim.keymap.set("n", "w!!", 'execute "silent! write !sudo tee % >/dev/null" edit!', { + desc = "Write: overwrite file over with sudo", + noremap = true, }) diff --git a/.config/nvim/lua/plugins/auto-session.lua b/.config/nvim/lua/plugins/auto-session.lua index a60f5ad..eb6e1df 100644 --- a/.config/nvim/lua/plugins/auto-session.lua +++ b/.config/nvim/lua/plugins/auto-session.lua @@ -2,7 +2,6 @@ return { -- session management with git support "rmagatti/auto-session", lazy = false, - ---enables autocomplete for opts ---@module "auto-session" ---@type AutoSession.Config diff --git a/.config/nvim/lua/plugins/barbecue.lua b/.config/nvim/lua/plugins/barbecue.lua index ad8a9ce..dd999dc 100644 --- a/.config/nvim/lua/plugins/barbecue.lua +++ b/.config/nvim/lua/plugins/barbecue.lua @@ -1,15 +1,15 @@ return { -- vs code like topbar - "utilyre/barbecue.nvim", - name = "barbecue", - version = "*", - dependencies = { - "SmiteshP/nvim-navic", - "nvim-tree/nvim-web-devicons", -- optional dependency - }, - opts = { - theme = { - normal = { bg = "#272727" }, - }, + "utilyre/barbecue.nvim", + name = "barbecue", + version = "*", + dependencies = { + "SmiteshP/nvim-navic", + "nvim-tree/nvim-web-devicons", -- optional dependency + }, + opts = { + theme = { + normal = { bg = "#272727" }, }, + }, } diff --git a/.config/nvim/lua/plugins/blink-pairs.lua b/.config/nvim/lua/plugins/blink-pairs.lua index 802dcf1..f0bf665 100644 --- a/.config/nvim/lua/plugins/blink-pairs.lua +++ b/.config/nvim/lua/plugins/blink-pairs.lua @@ -2,8 +2,7 @@ return { -- rainbow auto-pairs "saghen/blink.pairs", version = "*", -- (recommended) only required with prebuilt binaries - -- download prebuilt binaries from github releases - dependencies = "saghen/blink.download", + dependencies = "saghen/blink.download", -- download prebuilt binaries from github releases --- @module 'blink.pairs' --- @type blink.pairs.Config opts = { diff --git a/.config/nvim/lua/plugins/conform.lua b/.config/nvim/lua/plugins/conform.lua index 9696260..e8ce805 100644 --- a/.config/nvim/lua/plugins/conform.lua +++ b/.config/nvim/lua/plugins/conform.lua @@ -1,6 +1,15 @@ return { -- improved refactoring "stevearc/conform.nvim", + keys = { + { + "", + function() + require("conform").format({ async = true, lsp_fallback = true }) + end, + desc = "LSP: format", + }, + }, config = function() require("conform").setup({ formatters_by_ft = { diff --git a/.config/nvim/lua/plugins/csvview.lua b/.config/nvim/lua/plugins/csvview.lua index 8dd6008..89fdd3a 100644 --- a/.config/nvim/lua/plugins/csvview.lua +++ b/.config/nvim/lua/plugins/csvview.lua @@ -1,16 +1,20 @@ return { -- improved csv handling "hat0uma/csvview.nvim", - opts = { - parser = { comments = { "#", "//" } }, - keymaps = { - textobject_field_inner = { "if", mode = { "o", "x" } }, - textobject_field_outer = { "af", mode = { "o", "x" } }, - jump_next_field_end = { "", mode = { "n", "v" } }, - jump_prev_field_end = { "", mode = { "n", "v" } }, - jump_next_row = { "", mode = { "n", "v" } }, - jump_prev_row = { "", mode = { "n", "v" } }, - }, - }, + ft = "csv", cmd = { "CsvViewEnable", "CsvViewDisable", "CsvViewToggle" }, + config = function() + require("csvview").setup({ + parser = { comments = { "#", "//" } }, + keymaps = { + textobject_field_inner = { "if", mode = { "o", "x" } }, + textobject_field_outer = { "af", mode = { "o", "x" } }, + jump_next_field_end = { "", mode = { "n", "v" } }, + jump_prev_field_end = { "", mode = { "n", "v" } }, + jump_next_row = { "", mode = { "n", "v" } }, + jump_prev_row = { "", mode = { "n", "v" } }, + }, + }) + require("csvview").enable() + end, } diff --git a/.config/nvim/lua/plugins/dial.lua b/.config/nvim/lua/plugins/dial.lua index cfdf0e4..9f91556 100644 --- a/.config/nvim/lua/plugins/dial.lua +++ b/.config/nvim/lua/plugins/dial.lua @@ -1,9 +1,27 @@ return { -- improves vims increment and decrement functions "monaqa/dial.nvim", + keys = { + { + "", + function() + require("dial.map").manipulate("increment", "normal") + end, + silent = true, + desc = "Increment value", + }, + { + "", + function() + require("dial.map").manipulate("decrement", "normal") + end, + silent = true, + desc = "Decrement value", + }, + }, config = function() local augend = require("dial.augend") - require("dial.config").augends:register_group{ + require("dial.config").augends:register_group({ default = { augend.integer.alias.decimal, augend.integer.alias.hex, @@ -19,6 +37,6 @@ return { augend.constant.alias.en_weekday, augend.constant.alias.en_weekday_full, }, - } - end + }) + end, } diff --git a/.config/nvim/lua/plugins/diffview.lua b/.config/nvim/lua/plugins/diffview.lua index 6785998..4cc5d70 100644 --- a/.config/nvim/lua/plugins/diffview.lua +++ b/.config/nvim/lua/plugins/diffview.lua @@ -1,5 +1,19 @@ return { -- side by side git diff mode coloring "sindrets/diffview.nvim", + keys = { + { + "gdo", + "DiffviewOpen", + mode = "n", + desc = "Git: open diff", + }, + { + "gdc", + "DiffviewClose", + mode = "n", + desc = "Git: close diff", + }, + }, opts = {}, } diff --git a/.config/nvim/lua/plugins/fterm.lua b/.config/nvim/lua/plugins/fterm.lua index 0566a38..fe477af 100644 --- a/.config/nvim/lua/plugins/fterm.lua +++ b/.config/nvim/lua/plugins/fterm.lua @@ -1,5 +1,31 @@ return { -- floating terminal to toggle "numtostr/fterm.nvim", + keys = { + { + "tt", + function() + require("FTerm").toggle() + end, + mode = "n", + desc = "Terminal: open", + }, + { + "gt", + function() + require("FTerm"):new({ cmd = "lazygit" }):toggle() + end, + mode = "n", + desc = "Git: open lazygit", + }, + { + "tg", + function() + require("FTerm"):new({ cmd = "lazygit" }):toggle() + end, + mode = "n", + desc = "Terminal: open lazygit", + }, + }, opts = {}, } diff --git a/.config/nvim/lua/plugins/goto-preview.lua b/.config/nvim/lua/plugins/goto-preview.lua index a0bb8a0..6b35dee 100644 --- a/.config/nvim/lua/plugins/goto-preview.lua +++ b/.config/nvim/lua/plugins/goto-preview.lua @@ -2,6 +2,50 @@ return { -- preview definitions using floating windows "rmagatti/goto-preview", dependencies = "rmagatti/logger.nvim", + keys = { + { + "gpd", + function() + require("goto-preview").goto_preview_definition() + end, + desc = "LSP: preview definition", + }, + { + "gpy", + function() + require("goto-preview").goto_preview_type_definition() + end, + desc = "LSP: preview type definition", + }, + { + "gpi", + function() + require("goto-preview").goto_preview_implementation() + end, + desc = "LSP: list preview implementation", + }, + { + "gpD", + function() + require("goto-preview").goto_preview_declaration() + end, + desc = "LSP: preview declaration", + }, + { + "gpr", + function() + require("goto-preview").goto_preview_references() + end, + desc = "LSP: list preview references", + }, + { + "gpc", + function() + require("goto-preview").close_all_win() + end, + desc = "LSP: close all preview windows", + }, + }, config = function() require("goto-preview").setup({ border = "rounded", @@ -12,8 +56,8 @@ return { require("goto-preview").close_all_win() end - vim.keymap.set("n", "", close, { buffer = bufnr, silent = true }) - vim.keymap.set("n", "q", close, { buffer = bufnr, silent = true }) + vim.keymap.set("n", "", close, { buffer = bufnr, silent = true }) + vim.keymap.set("n", "q", close, { buffer = bufnr, silent = true }) end, }) end, diff --git a/.config/nvim/lua/plugins/knap.lua b/.config/nvim/lua/plugins/knap.lua index 1489942..7a72f34 100644 --- a/.config/nvim/lua/plugins/knap.lua +++ b/.config/nvim/lua/plugins/knap.lua @@ -1,50 +1,67 @@ return { - { - "frabjous/knap", - ft = { "tex" }, - config = function() - local function detect_engine() - local first_line = vim.api.nvim_buf_get_lines(0, 0, 1, false)[1] or "" - if first_line:match("^%%%s*xelatex") then - return "xelatex" - else - return "pdflatex" - end - end - - local function set_engine() - local engine = detect_engine() - - if engine == "xelatex" then - vim.g.knap_settings.textopdf = "xelatex -synctex=1 -interaction=batchmode %docroot%" - else - vim.g.knap_settings.textopdf = "pdflatex -synctex=1 -interaction=batchmode %docroot%" - end - end - - vim.g.knap_settings = { - delay = 100, - texoutputext = "pdf", - textopdf = "xelatex -synctex=1 -interaction=batchmode %docroot%", - textopdfviewerlaunch = "zathura --synctex-editor-command 'nvim --headless -es --cmd \"lua require('\"'\"'knaphelper'\"'\"').relayjump('\"'\"'%servername%'\"'\"','\"'\"'%{input}'\"'\"',%{line},0)\"' ./%outputfile%", - textopdfviewerrefresh = "reload", - textopdfforwardjump = "zathura --synctex-forward=%line%:%column%:%srcfile% %outputfile%", - } - - vim.api.nvim_create_autocmd("User", { - pattern = "KnapShowView", - callback = set_engine, - }) - - vim.api.nvim_create_autocmd("User", { - pattern = "KnapCompile", - callback = set_engine, - }) - - vim.api.nvim_create_autocmd("BufWritePost", { - pattern = "*.tex", - callback = set_engine, - }) - end, + "frabjous/knap", + ft = { "tex", "markdown" }, + keys = { + { + "p", + function() + require("knap").toggle_autopreviewing() + end, + desc = "Knap: toggle autopreview", + }, }, + config = function() + local knap = require("knap") + local function detect_engine() + local first_line = vim.api.nvim_buf_get_lines(0, 0, 1, false)[1] or "" + if first_line:match("^%%%s*xelatex") then + return "xelatex" + else + return "pdflatex" + end + end + local function set_engine() + local engine = detect_engine() + if engine == "xelatex" then + vim.g.knap_settings.textopdf = "xelatex -synctex=1 -interaction=batchmode %docroot%" + else + vim.g.knap_settings.textopdf = "pdflatex -synctex=1 -interaction=batchmode %docroot%" + end + end + vim.g.knap_settings = { + delay = 100, + texoutputext = "pdf", + textopdf = "xelatex -synctex=1 -interaction=batchmode %docroot%", + textopdfviewerlaunch = "zathura --synctex-editor-command 'nvim --headless -es --cmd \"lua require('\"'\"'knaphelper'\"'\"').relayjump('\"'\"'%servername%'\"'\"','\"'\"'%{input}'\"'\"',%{line},0)\"' ./%outputfile%", + textopdfviewerrefresh = "reload", + textopdfforwardjump = "zathura --synctex-forward=%line%:%column%:%srcfile% %outputfile%", + } + vim.api.nvim_create_autocmd("User", { + pattern = "KnapShowView", + callback = set_engine, + }) + vim.api.nvim_create_autocmd("User", { + pattern = "KnapCompile", + callback = set_engine, + }) + vim.api.nvim_create_autocmd("BufWritePost", { + pattern = "*.tex", + callback = set_engine, + }) + vim.api.nvim_create_autocmd("FileType", { + pattern = { "tex", "markdown" }, + callback = function(args) + local bufnr = args.buf + vim.keymap.set({ "n", "v", "i" }, "", function() + knap.forward_jump() + end, { + buffer = bufnr, + desc = "Knap: jump to cursor", + }) + if vim.bo[bufnr].filetype == "tex" then + knap.toggle_autopreviewing() + end + end, + }) + end, } diff --git a/.config/nvim/lua/plugins/leap.lua b/.config/nvim/lua/plugins/leap.lua index e4d1598..7eaa672 100644 --- a/.config/nvim/lua/plugins/leap.lua +++ b/.config/nvim/lua/plugins/leap.lua @@ -1,11 +1,32 @@ return { -- improved movement - url = "https://codeberg.org/andyg/leap.nvim", + "ggandor/leap.nvim", + keys = { + { + "f", + "(leap-forward)", + mode = "n", + desc = "Navigation: enter leap mode for forward movement", + }, + { + "F", + "(leap-backward)", + mode = "n", + desc = "Navigation: enter leap mode for backwards movement", + }, + { + "gf", + "(leap-from-window)", + mode = "n", + desc = "Navigation: enter leap mode for other windows", + }, + }, config = function() require("leap").opts.highlight_unlabeled_phase_one_targets = true require("leap").opts.equivalence_classes = { " \t\r\n", "([{", ")]}", "'\"`" } require("leap").opts.special_keys.prev_target = "" require("leap").opts.special_keys.prev_group = "" + require("leap.user").set_repeat_keys("", "") require("leap").opts.safe_labels = "sfnut/SFNLHMUGTZ?" require("leap").opts.labels = "sfnjklhodweimbuyvrgtaqpcxz/SFNJKLHODWEIMBUYVRGTAQPCXZ?" end, diff --git a/.config/nvim/lua/plugins/molten.lua b/.config/nvim/lua/plugins/molten.lua index c016d4d..b2c8315 100644 --- a/.config/nvim/lua/plugins/molten.lua +++ b/.config/nvim/lua/plugins/molten.lua @@ -21,23 +21,75 @@ return { "jmbuhr/otter.nvim", "nvim-treesitter/nvim-treesitter", }, - opts = { - lspFeatures = { - languages = { "python" }, - chunks = "all", - diagnostics = { - enabled = true, - triggers = { "BufWritePost" }, - }, - completion = { - enabled = true, - }, + keys = { + { + "rc", + function() + require("quarto.runner").run_cell() + end, + desc = "Quarto: Run cell", }, - codeRunner = { - enabled = true, - default_method = "molten", + { + "ra", + function() + require("quarto.runner").run_above() + end, + desc = "Quarto: Run cell and above", + }, + { + "rA", + function() + require("quarto.runner").run_all() + end, + desc = "Quarto: Run all cells", + }, + { + "rl", + function() + require("quarto.runner").run_line() + end, + desc = "Quarto: Run line", + }, + { + "rr", + function() + require("quarto.runner").run_range() + end, + desc = "Quarto: Run visual range", + }, + { + "rL", + function() + require("quarto.runner").run_all(true) + end, + desc = "Quarto: Run all cells of all languages", }, }, + config = function() + require("quarto").setup({ + lspFeatures = { + languages = { "python" }, + chunks = "all", + diagnostics = { + enabled = true, + triggers = { "BufWritePost" }, + }, + completion = { + enabled = true, + }, + }, + codeRunner = { + enabled = true, + default_method = "molten", + }, + }) + vim.api.nvim_create_autocmd("FileType", { + pattern = "markdown", + callback = function() + require("quarto").activate() + end, + }) + end, }, { "GCBallesteros/jupytext.nvim", diff --git a/.config/nvim/lua/plugins/nvim-docs-view.lua b/.config/nvim/lua/plugins/nvim-docs-view.lua index becf6b4..da937cf 100644 --- a/.config/nvim/lua/plugins/nvim-docs-view.lua +++ b/.config/nvim/lua/plugins/nvim-docs-view.lua @@ -1,8 +1,14 @@ return { -- hover documentation "tiyn/nvim-docs-view", - lazy = true, - cmd = "DocsViewToggle", + keys = { + { + "go", + "DocsViewToggle", + mode = "n", + desc = "LSP: toggle documentation window", + }, + }, opts = { position = "bottom", }, diff --git a/.config/nvim/lua/plugins/nvim-hlslens.lua b/.config/nvim/lua/plugins/nvim-hlslens.lua index 88575f5..fa0f4fb 100644 --- a/.config/nvim/lua/plugins/nvim-hlslens.lua +++ b/.config/nvim/lua/plugins/nvim-hlslens.lua @@ -1,6 +1,18 @@ return { -- improved virtual text "kevinhwang91/nvim-hlslens", + keys = { + { + "n", + [[execute('normal! ' . v:count1 . 'n')lua require('hlslens').start()]], + desc = "Search: search forward", + }, + { + "N", + [[execute('normal! ' . v:count1 . 'N')lua require('hlslens').start()]], + desc = "Search: search backwards", + }, + }, opts = { calm_down = true, }, diff --git a/.config/nvim/lua/plugins/nvim-lilypond-suite.lua b/.config/nvim/lua/plugins/nvim-lilypond-suite.lua index 85740aa..7f42095 100644 --- a/.config/nvim/lua/plugins/nvim-lilypond-suite.lua +++ b/.config/nvim/lua/plugins/nvim-lilypond-suite.lua @@ -28,7 +28,6 @@ return { }, }, }) - local lily_dicts = { "~/.local/share/nvim/lazy/nvim-lilypond-suite/lilywords/keywords", "~/.local/share/nvim/lazy/nvim-lilypond-suite/lilywords/musicCommands", @@ -36,7 +35,6 @@ return { "~/.local/share/nvim/lazy/nvim-lilypond-suite/lilywords/articulations", "~/.local/share/nvim/lazy/nvim-lilypond-suite/lilywords/dynamics", } - vim.api.nvim_create_autocmd("FileType", { pattern = "lilypond", callback = function() @@ -45,5 +43,53 @@ return { }) end, }) + + local fluidsynth_job = nil + + vim.keymap.set("n", "pm", function() + local midi = vim.fn.expand("%:r") .. ".midi" + + if fluidsynth_job then + vim.fn.jobstop(fluidsynth_job) + fluidsynth_job = nil + print("fluidsynth stopped") + return + end + + fluidsynth_job = vim.fn.jobstart({ "fluidsynth", "-i", midi }) + print("fluidsynth playing (Ctrl-C to stop)") + end, { + buffer = bufnr, + desc = "Lilypond: output MIDI", + }) + + vim.keymap.set("n", "pp", "Viewer", { + buffer = bufnr, + desc = "Lilypond: open PDF", + }) + + vim.keymap.set("n", "", function() + if fluidsynth_job then + vim.fn.jobstop(fluidsynth_job) + fluidsynth_job = nil + print("fluidsynth stopped") + else + vim.cmd("normal! ") + end + end, { + buffer = bufnr, + desc = "Stop MIDI playback", + }) + + if vim.b.first_start_lilypond then + return + end + vim.b.first_start_lilypond = true + + vim.schedule(function() + if vim.fn.exists(":Viewer") == 2 then + vim.cmd.Viewer() + end + end) end, } diff --git a/.config/nvim/lua/plugins/nvim-lspconfig.lua b/.config/nvim/lua/plugins/nvim-lspconfig.lua index 4c0211e..51e86bd 100644 --- a/.config/nvim/lua/plugins/nvim-lspconfig.lua +++ b/.config/nvim/lua/plugins/nvim-lspconfig.lua @@ -95,5 +95,10 @@ return { }) ) end + vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) + vim.keymap.set("n", "gD", vim.lsp.buf.declaration, opts) + vim.keymap.set("n", "gT", vim.lsp.buf.type_definition, opts) + vim.keymap.set("n", "gi", vim.lsp.buf.implementation, opts) + vim.keymap.set("n", "gr", vim.lsp.buf.references, opts) end, } diff --git a/.config/nvim/lua/plugins/nvim-tree.lua b/.config/nvim/lua/plugins/nvim-tree.lua index 078a8be..403c791 100644 --- a/.config/nvim/lua/plugins/nvim-tree.lua +++ b/.config/nvim/lua/plugins/nvim-tree.lua @@ -8,21 +8,30 @@ return { lazy = true, }, }, - opts = { - sort_by = "case_sensitive", - view = { - width = 30, - }, - filters = { - dotfiles = true, - }, - renderer = { - group_empty = true, - icons = { - glyphs = { - git = Git_signs, - }, - }, + keys = { + { + "", + "NvimTreeToggle", + desc = "File tree: toggle", }, }, + config = function() + require("nvim-tree").setup({ + sort_by = "case_sensitive", + view = { + width = 30, + }, + filters = { + dotfiles = true, + }, + renderer = { + group_empty = true, + icons = { + glyphs = { + git = Git_signs, + }, + }, + }, + }) + end, } diff --git a/.config/nvim/lua/plugins/nvim-treesitter.lua b/.config/nvim/lua/plugins/nvim-treesitter.lua index 8ebd0e5..3859bc7 100644 --- a/.config/nvim/lua/plugins/nvim-treesitter.lua +++ b/.config/nvim/lua/plugins/nvim-treesitter.lua @@ -30,13 +30,5 @@ return { enable_rename = true, }, }) - -- WARN: not directly compatible anymore - -- highlight = { enable = true }, - -- rainbow = { - -- enable = true, - -- extended_mode = true, - -- max_file_lines = nil, - -- -- colors = {}, - -- -- termcolors = {} end, } diff --git a/.config/nvim/lua/plugins/nvim-ufo.lua b/.config/nvim/lua/plugins/nvim-ufo.lua index 0ac57da..b18f6e1 100644 --- a/.config/nvim/lua/plugins/nvim-ufo.lua +++ b/.config/nvim/lua/plugins/nvim-ufo.lua @@ -2,6 +2,23 @@ return { -- folding improvements "kevinhwang91/nvim-ufo", dependencies = { "kevinhwang91/promise-async" }, + keys = { + { + "K", + function() + local winid = require("ufo").peekFoldedLinesUnderCursor() + if not winid then + vim.lsp.buf.hover({ + border = "rounded", + focusable = false, + max_width = 100, + }) + end + end, + mode = "n", + desc = "LSP: show documentation / peek folded section", + }, + }, config = function() require("ufo").setup() vim.api.nvim_create_autocmd({ "BufEnter", "FileType" }, { diff --git a/.config/nvim/lua/plugins/ogpt.lua b/.config/nvim/lua/plugins/ogpt.lua index b216ae5..3e04ed3 100644 --- a/.config/nvim/lua/plugins/ogpt.lua +++ b/.config/nvim/lua/plugins/ogpt.lua @@ -1,139 +1,147 @@ return { -- ollama llm integration - { - "huynle/ogpt.nvim", - event = "VeryLazy", - opts = { - default_provider = "ollama", - edgy = true, -- enable this! - single_window = false, -- set this to true if you want only one OGPT window to appear at a time - providers = { - ollama = { - api_host = "http://localhost:11434", -- free resources: https://github.com/cheahjs/free-llm-api-resources - api_key = "", - model = "deepseek-r1:7b", + "huynle/ogpt.nvim", + event = "VeryLazy", + dependencies = { + "MunifTanjim/nui.nvim", + "nvim-lua/plenary.nvim", + "nvim-telescope/telescope.nvim", + { + "folke/edgy.nvim", + + event = "VeryLazy", + + init = function() + vim.opt.laststatus = 3 + vim.opt.splitkeep = "screen" -- or "topline" or "screen" + end, + + opts = { + exit_when_last = false, + animate = { + enabled = false, + }, + wo = { + winbar = true, + winfixwidth = true, + winfixheight = false, + winhighlight = "WinBar:EdgyWinBar,Normal:EdgyNormal", + spell = false, + signcolumn = "no", + }, + keys = { + -- -- close window + ["q"] = function(win) + win:close() + end, + -- close sidebar + ["Q"] = function(win) + win.view.edgebar:close() + end, + -- increase width + [""] = function(win) + win:resize("width", 3) + end, + -- decrease width + [""] = function(win) + win:resize("width", -3) + end, + -- increase height + [""] = function(win) + win:resize("height", 3) + end, + -- decrease height + [""] = function(win) + win:resize("height", -3) + end, + }, + right = { + { + title = "OGPT Popup", + ft = "ogpt-popup", + size = { width = 0.2 }, + wo = { + wrap = true, + }, + }, + { + title = "OGPT Parameters", + ft = "ogpt-parameters-window", + size = { height = 6 }, + wo = { + wrap = true, + }, + }, + { + title = "OGPT Template", + ft = "ogpt-template", + size = { height = 6 }, + }, + { + title = "OGPT Sessions", + ft = "ogpt-sessions", + size = { height = 6 }, + wo = { + wrap = true, + }, + }, + { + title = "OGPT System Input", + ft = "ogpt-system-window", + size = { height = 6 }, + }, + { + title = "OGPT", + ft = "ogpt-window", + size = { height = 0.5 }, + wo = { + wrap = true, + }, + }, + { + title = "OGPT {{{selection}}}", + ft = "ogpt-selection", + size = { width = 80, height = 4 }, + wo = { + wrap = true, + }, + }, + { + title = "OGPt {{{instruction}}}", + ft = "ogpt-instruction", + size = { width = 80, height = 4 }, + wo = { + wrap = true, + }, + }, + { + title = "OGPT Chat", + ft = "ogpt-input", + size = { width = 80, height = 4 }, + wo = { + wrap = true, + }, + }, }, }, }, - dependencies = { - "MunifTanjim/nui.nvim", - "nvim-lua/plenary.nvim", - "nvim-telescope/telescope.nvim", - }, }, - { - "folke/edgy.nvim", - event = "VeryLazy", - init = function() - vim.opt.laststatus = 3 - vim.opt.splitkeep = "screen" -- or "topline" or "screen" - end, - opts = { - exit_when_last = false, - animate = { - enabled = false, - }, - wo = { - winbar = true, - winfixwidth = true, - winfixheight = false, - winhighlight = "WinBar:EdgyWinBar,Normal:EdgyNormal", - spell = false, - signcolumn = "no", - }, - keys = { - -- -- close window - ["q"] = function(win) - win:close() - end, - -- close sidebar - ["Q"] = function(win) - win.view.edgebar:close() - end, - -- increase width - [""] = function(win) - win:resize("width", 3) - end, - -- decrease width - [""] = function(win) - win:resize("width", -3) - end, - -- increase height - [""] = function(win) - win:resize("height", 3) - end, - -- decrease height - [""] = function(win) - win:resize("height", -3) - end, - }, - right = { - { - title = "OGPT Popup", - ft = "ogpt-popup", - size = { width = 0.2 }, - wo = { - wrap = true, - }, - }, - { - title = "OGPT Parameters", - ft = "ogpt-parameters-window", - size = { height = 6 }, - wo = { - wrap = true, - }, - }, - { - title = "OGPT Template", - ft = "ogpt-template", - size = { height = 6 }, - }, - { - title = "OGPT Sessions", - ft = "ogpt-sessions", - size = { height = 6 }, - wo = { - wrap = true, - }, - }, - { - title = "OGPT System Input", - ft = "ogpt-system-window", - size = { height = 6 }, - }, - { - title = "OGPT", - ft = "ogpt-window", - size = { height = 0.5 }, - wo = { - wrap = true, - }, - }, - { - title = "OGPT {{{selection}}}", - ft = "ogpt-selection", - size = { width = 80, height = 4 }, - wo = { - wrap = true, - }, - }, - { - title = "OGPt {{{instruction}}}", - ft = "ogpt-instruction", - size = { width = 80, height = 4 }, - wo = { - wrap = true, - }, - }, - { - title = "OGPT Chat", - ft = "ogpt-input", - size = { width = 80, height = 4 }, - wo = { - wrap = true, - }, - }, + keys = { + { + "ai", + "OGPT", + desc = "OGPT: Open AI View", + }, + }, + opts = { + default_provider = "ollama", + edgy = true, -- enable this! + single_window = false, -- set this to true if you want only one OGPT window to appear at a time + providers = { + ollama = { + api_host = "http://localhost:11434", -- free resources: https://github.com/cheahjs/free-llm-api-resources + api_key = "", + model = "deepseek-r1:7b", }, }, }, diff --git a/.config/nvim/lua/plugins/outline.lua b/.config/nvim/lua/plugins/outline.lua index 644ea6b..6fc2e38 100644 --- a/.config/nvim/lua/plugins/outline.lua +++ b/.config/nvim/lua/plugins/outline.lua @@ -1,12 +1,20 @@ return { - -- outline for code "hedyhli/outline.nvim", - opts = { - outline_window = { - width = 25, - }, - symbols = { - icon_source = "lspkind", + keys = { + { + "", + "Outline", + desc = "CTags: toggle", }, }, + config = function() + require("outline").setup({ + outline_window = { + width = 25, + }, + symbols = { + icon_source = "lspkind", + }, + }) + end, } diff --git a/.config/nvim/lua/plugins/pantran.lua b/.config/nvim/lua/plugins/pantran.lua index 312dfad..b9ff339 100644 --- a/.config/nvim/lua/plugins/pantran.lua +++ b/.config/nvim/lua/plugins/pantran.lua @@ -1,6 +1,14 @@ return { -- translator "potamides/pantran.nvim", + keys = { + { + "tr", + "Pantran", + mode = { "n", "v" }, + desc = "Pantran: translate", + }, + }, opts = { default_engine = "google", -- default_engine = "deepl", diff --git a/.config/nvim/lua/plugins/projections.lua b/.config/nvim/lua/plugins/projections.lua index 7ec70cc..718aaf1 100644 --- a/.config/nvim/lua/plugins/projections.lua +++ b/.config/nvim/lua/plugins/projections.lua @@ -1,8 +1,19 @@ return { -- navigate between projects using telescope "gnikdroy/projections.nvim", - dependencies = { "nvim-telescope/telescope.nvim" }, + dependencies = { + "nvim-telescope/telescope.nvim", + }, branch = "pre_release", + keys = { + { + "fp", + function() + vim.cmd("Telescope projections") + end, + desc = "Telescope: find projects", + }, + }, config = function() require("projections").setup({ workspaces = { -- Default workspaces to search for @@ -19,7 +30,6 @@ return { end, }, }) - require("telescope").load_extension("projections") end, } diff --git a/.config/nvim/lua/plugins/renamer.lua b/.config/nvim/lua/plugins/renamer.lua index 0430967..524c0b5 100644 --- a/.config/nvim/lua/plugins/renamer.lua +++ b/.config/nvim/lua/plugins/renamer.lua @@ -3,5 +3,14 @@ return { "filipdutescu/renamer.nvim", branch = "master", dependencies = { "nvim-lua/plenary.nvim" }, + keys = { + { + "", + function() + require("renamer").rename() + end, + desc = "LSP: rename", + }, + }, opts = {}, } diff --git a/.config/nvim/lua/plugins/spelunker.lua b/.config/nvim/lua/plugins/spelunker.lua index 16c9282..cda6fb2 100644 --- a/.config/nvim/lua/plugins/spelunker.lua +++ b/.config/nvim/lua/plugins/spelunker.lua @@ -3,6 +3,18 @@ return { { "kamykn/spelunker.vim", dependencies = { "kamykn/popup-menu.nvim" }, + keys = { + { + "t", + "call spelunker#toggle()", + desc = "Spelunker: toggle spell check", + }, + { + "s", + "z=", + desc = "Spell: display suggestions", + }, + }, config = function() -- vim.o.nospell = true vim.g.enable_spelunker_vim = 0 diff --git a/.config/nvim/lua/plugins/tccs.lua b/.config/nvim/lua/plugins/tccs.lua index 0878635..6f515c0 100644 --- a/.config/nvim/lua/plugins/tccs.lua +++ b/.config/nvim/lua/plugins/tccs.lua @@ -1,13 +1,11 @@ return { -- colorscheme - { - "tiyn/tccs.nvim", - lazy = false, - priority = 1000, - config = function() - require("tccs").setup({ - require("tccs").load(), - }) - end, - }, + "tiyn/tccs.nvim", + lazy = false, + priority = 1000, + config = function() + require("tccs").setup({ + require("tccs").load(), + }) + end, } diff --git a/.config/nvim/lua/plugins/telescope.lua b/.config/nvim/lua/plugins/telescope.lua index 41dfce9..05a5ec6 100644 --- a/.config/nvim/lua/plugins/telescope.lua +++ b/.config/nvim/lua/plugins/telescope.lua @@ -1,12 +1,31 @@ return { -- fuzzy finder - { - "nvim-telescope/telescope.nvim", - version = "0.1.2", - dependencies = { - "nvim-lua/plenary.nvim", - "archie-judd/telescope-words.nvim", - }, - opts = {}, + "nvim-telescope/telescope.nvim", + version = "0.1.2", + dependencies = { + "nvim-lua/plenary.nvim", + "archie-judd/telescope-words.nvim", }, + keys = { + { + "ff", + "Telescope find_files", + desc = "Telescope: find files", + }, + { + "wd", + function() + require("telescope").extensions.telescope_words.search_dictionary() + end, + desc = "Telescope: search dictionary", + }, + { + "wt", + function() + require("telescope").extensions.telescope_words.search_thesaurus() + end, + desc = "Telescope: search thesaurus", + }, + }, + opts = {}, } diff --git a/.config/nvim/lua/plugins/tidy.lua b/.config/nvim/lua/plugins/tidy.lua index 73d45e1..b632776 100644 --- a/.config/nvim/lua/plugins/tidy.lua +++ b/.config/nvim/lua/plugins/tidy.lua @@ -1,10 +1,21 @@ return { -- clean up white spaces and empty lines before writing - { - "mcauley-penney/tidy.nvim", - branch = "main", - opts = { + "mcauley-penney/tidy.nvim", + branch = "main", + ft = { "markdown", "tex" }, + config = function() + local tidy = require("tidy") + tidy.setup({ filetype_exclude = { "diff" }, - }, - }, + }) + tidy.opts.enabled_on_save = false + vim.api.nvim_create_autocmd("BufLeave", { + pattern = { "*.md", "*.tex" }, + callback = function() + if vim.bo.modifiable then + tidy.run() + end + end, + }) + end, } diff --git a/.config/nvim/lua/plugins/todo-comments.lua b/.config/nvim/lua/plugins/todo-comments.lua index 0bf34ce..08422ae 100644 --- a/.config/nvim/lua/plugins/todo-comments.lua +++ b/.config/nvim/lua/plugins/todo-comments.lua @@ -1,22 +1,20 @@ return { -- todo symbols and highlighting - { - "folke/todo-comments.nvim", - dependencies = { "nvim-lua/plenary.nvim" }, - opts = { - keywords = { - ERRO = { icon = Error_sign, color = "error" }, - WARN = { icon = Warn_sign, color = "warning" }, - HACK = { icon = Hack_sign, color = "warning" }, - HINT = { icon = Hint_sign, color = "hint" }, - TODO = { icon = Todo_sign, color = "info" }, - INFO = { icon = Info_sign, color = "hint", alt = { "NOTE" } }, - PERF = { icon = Perfect_sign, color = "default" }, - TEST = { icon = Test_sign, color = "test" }, - }, - colors = { - default = { "Operator" }, - }, + "folke/todo-comments.nvim", + dependencies = { "nvim-lua/plenary.nvim" }, + opts = { + keywords = { + ERRO = { icon = Error_sign, color = "error" }, + WARN = { icon = Warn_sign, color = "warning" }, + HACK = { icon = Hack_sign, color = "warning" }, + HINT = { icon = Hint_sign, color = "hint" }, + TODO = { icon = Todo_sign, color = "info" }, + INFO = { icon = Info_sign, color = "hint", alt = { "NOTE" } }, + PERF = { icon = Perfect_sign, color = "default" }, + TEST = { icon = Test_sign, color = "test" }, + }, + colors = { + default = { "Operator" }, }, }, } diff --git a/.config/nvim/lua/plugins/treesj.lua b/.config/nvim/lua/plugins/treesj.lua index 9017427..cbe5a84 100644 --- a/.config/nvim/lua/plugins/treesj.lua +++ b/.config/nvim/lua/plugins/treesj.lua @@ -1,8 +1,16 @@ return { -- improves splitting and joining blocks - 'Wansmer/treesj', - dependencies = { 'nvim-treesitter/nvim-treesitter' }, + "Wansmer/treesj", + dependencies = { "nvim-treesitter/nvim-treesitter" }, + keys = { + { + "m", + function() + require("treesj").toggle() + end, + }, + }, config = function() - require('treesj').setup() + require("treesj").setup() end, } diff --git a/.config/nvim/lua/plugins/treewalker.lua b/.config/nvim/lua/plugins/treewalker.lua index 9ea6c31..e2b493b 100644 --- a/.config/nvim/lua/plugins/treewalker.lua +++ b/.config/nvim/lua/plugins/treewalker.lua @@ -1,4 +1,54 @@ return { -- improved movement for code "aaronik/treewalker.nvim", + keys = { + { + "", + "Treewalker Up", + mode = { "n", "v" }, + silent = true, + }, + { + "", + "Treewalker Down", + mode = { "n", "v" }, + silent = true, + }, + { + "", + "Treewalker Left", + mode = { "n", "v" }, + silent = true, + }, + { + "", + "Treewalker Right", + mode = { "n", "v" }, + silent = true, + }, + { + "", + "Treewalker SwapUp", + mode = "n", + silent = true, + }, + { + "", + "Treewalker SwapDown", + mode = "n", + silent = true, + }, + { + "", + "Treewalker SwapLeft", + mode = "n", + silent = true, + }, + { + "", + "Treewalker SwapRight", + mode = "n", + silent = true, + }, + }, } diff --git a/.config/nvim/lua/plugins/trouble.lua b/.config/nvim/lua/plugins/trouble.lua index a2652b6..0c2e580 100644 --- a/.config/nvim/lua/plugins/trouble.lua +++ b/.config/nvim/lua/plugins/trouble.lua @@ -7,5 +7,13 @@ return { lazy = true, }, }, + keys = { + { + "", + "Trouble diagnostics toggle", + mode = "n", + desc = "LSP: toggle error list", + }, + }, opts = {}, } diff --git a/.config/nvim/lua/plugins/undotree.lua b/.config/nvim/lua/plugins/undotree.lua index 0c59e95..7edc673 100644 --- a/.config/nvim/lua/plugins/undotree.lua +++ b/.config/nvim/lua/plugins/undotree.lua @@ -1,4 +1,12 @@ return { -- tree style undo visualizer "mbbill/undotree", + keys = { + { + "", + "UndotreeToggle", + mode = "n", + desc = "Undo tree: toggle", + }, + }, } diff --git a/.config/nvim/lua/plugins/vim-abolish.lua b/.config/nvim/lua/plugins/vim-abolish.lua index cb2536e..22393ca 100644 --- a/.config/nvim/lua/plugins/vim-abolish.lua +++ b/.config/nvim/lua/plugins/vim-abolish.lua @@ -1,5 +1,18 @@ return { -- better substitutions "tpope/vim-abolish", - config = function() end, + keys = { + { + "sa", + ":%s//g", + mode = "n", + desc = "Substitute: free form", + }, + { + "ss", + ":%s/\\<\\>//g", + mode = "n", + desc = "Substitute: word under cursor", + }, + }, } diff --git a/.config/nvim/lua/plugins/which-key.lua b/.config/nvim/lua/plugins/which-key.lua index 3c69889..7f38237 100644 --- a/.config/nvim/lua/plugins/which-key.lua +++ b/.config/nvim/lua/plugins/which-key.lua @@ -1,4 +1,21 @@ return { -- improved keybindings, previewing them "folke/which-key.nvim", + config = function() + require("which-key").add({ + { mode = "n", "g", desc = "LSP: goto" }, + { mode = "n", "gp", desc = "LSP: preview" }, + { mode = "c", "w", desc = "Write" }, + { mode = "c", "w!", desc = "Write: overwrite" }, + { mode = "n", "a", desc = "AI" }, + { mode = "n", "g", desc = "Git" }, + { mode = "n", "f", desc = "Telescope: find" }, + { mode = "n", "gd", desc = "Git: diff" }, + { mode = "n", "s", desc = "Substitute" }, + { mode = "n", "t", desc = "Terminal" }, + { mode = "n", "r", desc = "Quarto" }, + { mode = "n", "", desc = "Navigation" }, + { mode = "n", "p", desc = "Lilypond" }, + }) + end, } diff --git a/.config/nvim/lua/plugins/wilder.lua b/.config/nvim/lua/plugins/wilder.lua index 9c5b46c..a6b5999 100644 --- a/.config/nvim/lua/plugins/wilder.lua +++ b/.config/nvim/lua/plugins/wilder.lua @@ -1,74 +1,72 @@ return { -- improved wild menu - { - "gelguy/wilder.nvim", - dependencies = { - { - "nvim-tree/nvim-web-devicons", - lazy = true, - }, - "roxma/nvim-yarp", - "roxma/vim-hug-neovim-rpc", - "romgrk/fzy-lua-native", - "nixprime/cpsm", + "gelguy/wilder.nvim", + dependencies = { + { + "nvim-tree/nvim-web-devicons", + lazy = true, }, - config = function() - local wilder = require("wilder") - wilder.setup({ - modes = { ":", "/", "?" }, - accept_key = "", - reject_key = "", - }) - wilder.set_option("pipeline", { - wilder.branch( - wilder.python_file_finder_pipeline({ - file_command = function(ctx, arg) - if string.find(arg, ".") ~= nil then - return { "fd", "-tf", "-H" } - else - return { "fd", "-tf" } - end - end, - dir_command = { "fd", "-td" }, - filters = { "cpsm_filter" }, - }), - wilder.substitute_pipeline({ - pipeline = wilder.python_search_pipeline({ - skip_cmdtype_check = 1, - pattern = wilder.python_fuzzy_pattern({ - start_at_boundary = 0, - }), - }), - }), - wilder.cmdline_pipeline({ - fuzzy = 2, - fuzzy_filter = wilder.lua_fzy_filter(), - }), - { - wilder.check(function(ctx, x) - return x == "" - end), - wilder.history(), - }, - wilder.python_search_pipeline({ + "roxma/nvim-yarp", + "roxma/vim-hug-neovim-rpc", + "romgrk/fzy-lua-native", + "nixprime/cpsm", + }, + config = function() + local wilder = require("wilder") + wilder.setup({ + modes = { ":", "/", "?" }, + accept_key = "", + reject_key = "", + }) + wilder.set_option("pipeline", { + wilder.branch( + wilder.python_file_finder_pipeline({ + file_command = function(ctx, arg) + if string.find(arg, ".") ~= nil then + return { "fd", "-tf", "-H" } + else + return { "fd", "-tf" } + end + end, + dir_command = { "fd", "-td" }, + filters = { "cpsm_filter" }, + }), + wilder.substitute_pipeline({ + pipeline = wilder.python_search_pipeline({ + skip_cmdtype_check = 1, pattern = wilder.python_fuzzy_pattern({ start_at_boundary = 0, }), - }) - ), - }) - local highlighters = { - wilder.pcre2_highlighter(), - wilder.lua_fzy_highlighter(), - } - wilder.set_option( - "renderer", - wilder.popupmenu_renderer({ - highlighter = highlighters, - left = { " ", wilder.popupmenu_devicons() }, - right = { " ", wilder.popupmenu_scrollbar() }, + }), + }), + wilder.cmdline_pipeline({ + fuzzy = 2, + fuzzy_filter = wilder.lua_fzy_filter(), + }), + { + wilder.check(function(ctx, x) + return x == "" + end), + wilder.history(), + }, + wilder.python_search_pipeline({ + pattern = wilder.python_fuzzy_pattern({ + start_at_boundary = 0, + }), }) - ) - end, - }, + ), + }) + local highlighters = { + wilder.pcre2_highlighter(), + wilder.lua_fzy_highlighter(), + } + wilder.set_option( + "renderer", + wilder.popupmenu_renderer({ + highlighter = highlighters, + left = { " ", wilder.popupmenu_devicons() }, + right = { " ", wilder.popupmenu_scrollbar() }, + }) + ) + end, } diff --git a/.config/nvim/lua/plugins/winshift.lua b/.config/nvim/lua/plugins/winshift.lua index f8f9adb..be139c1 100644 --- a/.config/nvim/lua/plugins/winshift.lua +++ b/.config/nvim/lua/plugins/winshift.lua @@ -1,5 +1,12 @@ return { -- improved movement of windows "sindrets/winshift.nvim", + keys = { + { + "m", + "WinShift", + desc = "Navigation: enter window shift mode", + }, + }, opts = {}, }