update nvim

This commit is contained in:
kYasuda
2026-08-31 13:48:36 -07:00
parent 67afa82778
commit 17086f43ec
59 changed files with 860 additions and 1798 deletions
+3
View File
@@ -0,0 +1,3 @@
std = "lua51"
globals = { "vim", "Snacks" }
max_line_length = false
+10
View File
@@ -0,0 +1,10 @@
WRN 2026-02-24T11:33:23.184 ?.27376 server_start:199: Failed to start server: operation not permitted: /run/user/1000//nvim.27376.0
WRN 2026-02-24T12:04:35.999 ?.29592 server_start:199: Failed to start server: operation not permitted: /run/user/1000//nvim.29592.0
WRN 2026-08-28T15:33:15.778 ?.2 server_start:199: Failed to start server: operation not permitted: /run/user/1000/nvim.2.0
WRN 2026-08-28T15:38:46.688 ?.2 server_start:199: Failed to start server: operation not permitted: /run/user/1000/nvim.2.0
WRN 2026-08-28T16:08:02.008 ?.2 server_start:199: Failed to start server: operation not permitted: /run/user/1000/nvim.2.0
WRN 2026-08-28T16:08:06.345 ?.2 server_start:199: Failed to start server: operation not permitted: /run/user/1000/nvim.2.0
WRN 2026-08-28T16:41:19.378 ?.2 server_start:199: Failed to start server: operation not permitted: /run/user/1000/nvim.2.0
WRN 2026-08-31T13:42:03.306 ?.2 server_start:199: Failed to start server: operation not permitted: /run/user/1000/nvim.2.0
WRN 2026-08-31T13:42:57.702 ?.2 server_start:199: Failed to start server: operation not permitted: /run/user/1000/nvim.2.0
WRN 2026-08-31T13:43:16.053 ?.2 server_start:199: Failed to start server: operation not permitted: /run/user/1000/nvim.2.0
+6
View File
@@ -0,0 +1,6 @@
column_width = 120
line_endings = "Unix"
indent_type = "Tabs"
quote_style = "AutoPreferDouble"
call_parentheses = "Always"
collapse_simple_statement = "Never"
+50
View File
@@ -0,0 +1,50 @@
# Neovim Config
read_when: updating keymaps, startup order, or plugin layout
## Load Order
1. `init.lua`
2. `core.lazy` (bootstraps lazy.nvim, loads options)
3. colorscheme
4. `core.keymaps` (core editing, LSP, commands, and which-key groups)
5. `core.autocmds`
6. `core.highlights`
7. Hyprland LSP helper
## Where To Edit
- Options: `lua/core/options.lua`
- Autocmds: `lua/core/autocmds.lua`
- Highlights: `lua/core/highlights.lua`
- Keymaps entrypoint: `lua/core/keymaps/init.lua`
- Keymaps by domain:
- `lua/core/keymaps/editing.lua`
- `lua/core/keymaps/lsp.lua`
- `lua/core/keymaps/commands.lua`
- `lua/core/keymaps/groups.lua`
- Plugin setup and plugin-owned mappings: `lua/plugins/*.lua`
## Structure Notes
- Keep plugin specs in `lua/plugins/`.
- Keep core logic in `lua/core/`.
- Keep reusable helpers in `lua/utils/`.
- Put plugin mappings in the plugin spec's `keys` table so Lazy can load them on demand.
- Use `which-key` only to label mapping groups.
## Tool Ownership
- Formatting: Conform, with explicit formatters and no LSP fallback.
- Linting: nvim-lint on save. Codespell and pydoclint are linters.
- Completion: nvim-cmp with LuaSnip. None-ls is not part of completion.
- File browsing: Snacks Explorer.
- Notifications: Snacks Notifier. Fidget owns LSP progress, and Noice owns command/message UI.
## Checks
```sh
stylua --check .
luacheck .
nvim --headless -i NONE -u ./init.lua '+qa'
```
-5
View File
@@ -3,9 +3,4 @@ vim.cmd("colorscheme catppuccin")
require("core.keymaps")
require("core.autocmds")
require("core.highlights")
-- require("core.lsp-notifications")
require("utils.extensions")
require("utils.telescope_extra").setup()
require("utils.functions.git_paste").setup({ telescope_key = "<leader>pg" })
-- require("utils.treesitter.parsers.hyprlang")
require("utils.hyprland.lsp")
+60
View File
@@ -0,0 +1,60 @@
{
"LuaSnip": { "branch": "master", "commit": "642b0c595e11608b4c18219e93b88d7637af27bc" },
"any-jump.vim": { "branch": "master", "commit": "f95674d9a4251ac02f452d5f1861e4422f4652c7" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
"catppuccin": { "branch": "main", "commit": "edefef779ab08ce1a4a404713e3012b0d202bd35" },
"cmp-async-path": { "branch": "main", "commit": "98185a91d49ff5dd249aebf2f7456e18063fa2a0" },
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
"cmp-cmdline": { "branch": "main", "commit": "d126061b624e0af6c3a556428712dd4d4194ec6d" },
"cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" },
"cmp-nvim-lsp-document-symbol": { "branch": "main", "commit": "f94f7ba948e32cd302caba1c2ca3f7c697fb4fcf" },
"cmp-nvim-lsp-signature-help": { "branch": "main", "commit": "fd3e882e56956675c620898bf1ffcf4fcbe7ec84" },
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
"codecompanion.nvim": { "branch": "main", "commit": "6eec6b429de1340096553036a7aa3b08067eab32" },
"conform.nvim": { "branch": "master", "commit": "016802de402556da54c36bd7359b441266b01cdd" },
"copilot-cmp": { "branch": "master", "commit": "15fc12af3d0109fa76b60b5cffa1373697e261d1" },
"copilot-lualine": { "branch": "main", "commit": "222e90bd8dcdf16ca1efc4e784416afb5f011c31" },
"copilot.lua": { "branch": "master", "commit": "7e6723aabea044519462958ffcea68d7985c5ed0" },
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
"fidget.nvim": { "branch": "main", "commit": "6f793b2bcd2d35e201c09520f698bb763220908a" },
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
"gitsigns.nvim": { "branch": "main", "commit": "5be654f2232c10ddcad19c1607a67b6b4b78fc29" },
"goto-preview": { "branch": "main", "commit": "d2d6923c9b9e0e43f0b9b566f261a8b1ae016540" },
"image.nvim": { "branch": "master", "commit": "5c6f29a5069e1f7bd5773ce5907454063b0f125d" },
"img-clip.nvim": { "branch": "main", "commit": "b6ddfb97b5600d99afe3452d707444afda658aca" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" },
"lspkind.nvim": { "branch": "master", "commit": "c7274c48137396526b59d86232eabcdc7fed8a32" },
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
"mcphub.nvim": { "branch": "main", "commit": "7cd5db330f41b7bae02b2d6202218a061c3ebc1f" },
"mini.diff": { "branch": "main", "commit": "626b8a5b93874c4d05ca25aedec56cfff0b378fb" },
"mini.nvim": { "branch": "main", "commit": "a311ed247d527db9592bb434356badc705363746" },
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
"nui.nvim": { "branch": "main", "commit": "10fc361835c856ba4233ef5ea135b919bf3dce97" },
"nvim-autopairs": { "branch": "master", "commit": "430522f95fe4fb7c511ec64f8c1a90cc6a66c05c" },
"nvim-cmp": { "branch": "main", "commit": "2ffe79f1f021def8dd1fcd81deb16f1bb0d989f3" },
"nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" },
"nvim-html-css": { "branch": "main", "commit": "3f246f6166e75fb8afc1866ce8f1e4cb8d95757a" },
"nvim-lint": { "branch": "master", "commit": "3d55c8f67c6ae5c15e1042571e107c7a3d5c5f4e" },
"nvim-lspconfig": { "branch": "master", "commit": "16286347bdba1333c7d124d9de9fe6630731b2b2" },
"nvim-nio": { "branch": "master", "commit": "edcc181a875301dd21840189aa2f2f9ad69fc172" },
"nvim-treesitter": { "branch": "master", "commit": "cf12346a3414fa1b06af75c79faebe7f76df080a" },
"nvim-treesitter-context": { "branch": "master", "commit": "f3061339b8eaf9fda873600bc425b8d2d8502533" },
"nvim-web-devicons": { "branch": "master", "commit": "5f032a85be210cd1c6ac98861eb3b187ff3bd5eb" },
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
"presence.nvim": { "branch": "main", "commit": "87c857a56b7703f976d3a5ef15967d80508df6e6" },
"rainbow-delimiters.nvim": { "branch": "master", "commit": "012f1480cd9a5fc99fce7678e0a536421a53fc46" },
"render-markdown.nvim": { "branch": "main", "commit": "4663eb3ecd538bd5062628fb6d95bbe6bdca78f6" },
"snacks.nvim": { "branch": "main", "commit": "882c996cf28183f4d63640de0b4c02ec886d01f2" },
"telescope-color-names.nvim": { "branch": "main", "commit": "95b372b9a8ba0fc7cf6a67be637ee37453f322da" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "b25b749b9db64d375d782094e2b9dce53ad53a40" },
"telescope-glyph.nvim": { "branch": "master", "commit": "6e0bdece0d0382e664b2dc716a9c5641994148c9" },
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
"telescope.nvim": { "branch": "master", "commit": "40aedd8a68c78a656a10a8d62d80c54af59420fb" },
"toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" },
"vim-commentary": { "branch": "master", "commit": "64a654ef4a20db1727938338310209b6a63f60c9" },
"vim-dotenv": { "branch": "master", "commit": "5c51cfcf8d87280d6414e03cd6b253eb70ecb800" },
"vim-surround": { "branch": "master", "commit": "3d188ed2113431cf8dac77be61b842acb64433d9" },
"vim-wakatime": { "branch": "master", "commit": "9f8a1d3b9c6f3a948988a0896b3227c1e1f74a58" },
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }
}
+2 -18
View File
@@ -39,29 +39,13 @@ autocmd("TextYankPost", {
group = highlight_yank,
pattern = "*",
callback = function()
vim.highlight.on_yank({ higroup = "IncSearch", timeout = 420 })
vim.hl.on_yank({ higroup = "IncSearch", timeout = 420 })
end,
})
-- }}}
-- {{{ Disable indent-blankline for dashboard
function disable_for_dashboard()
local buftype = vim.api.nvim_buf_get_option(0, "buftype")
local filetype = vim.api.nvim_buf_get_option(0, "filetype")
if buftype == "nofile" and filetype == "dashboard" then
vim.b.indent_blankline_enabled = false
end
end
vim.cmd([[
augroup IndentBlankline
autocmd!
autocmd FileType dashboard lua disable_for_dashboard()
augroup END
]])
-- }}}
-- {{{ Code companion hook
local group = augroup("CodeCompanionHooks", {})
local group = augroup("CodeCompanionHooks", { clear = true })
autocmd({ "User" }, {
pattern = "CodeCompanionInline*",
-681
View File
@@ -1,681 +0,0 @@
local map = vim.keymap.set
local map_from_table = require("utils.keymaps.converters.from_table").set_keybindings
local add_to_whichkey = require("utils.keymaps.converters.whichkey").addToWhichKey
local telescope_paste_img = require("utils.telescope_extra").find_and_paste_image
local mkdir_under_cursor = require("utils.functions.mkdir_under_cursor").setup()
local term = require("utils.terminal")
local term_factory = term.term_factory
local term_toggle = term.term_toggle
local nosilent = { silent = false, noremap = true }
-- Leader key
vim.g.mapleader = " "
vim.g.maplocalleader = ","
-- Create a custom command with the given trigger, command, and description
--- @param trigger string The command trigger
--- @param command string The command to execute
--- @param description string Description of the command
--- @return nil
local create_custom_command = function(trigger, command, description)
vim.api.nvim_create_user_command(trigger, command, { desc = description })
end
-- Custom commands
create_custom_command("Config", "edit ~/.config/nvim", "Edit nvim configuration")
create_custom_command("Keymaps", "edit ~/.config/nvim/lua/core/keymaps.lua", "Edit Hyprland keybindings")
create_custom_command("Hypr", "edit ~/.config/hypr/hyprland.conf", "Edit Hyprland configuration")
vim.keymap.set("", "<Leader>tl", function()
vim.diagnostic.enable(not vim.diagnostic.is_enabled())
end, { desc = "Toggle diagnostics virtual text" })
-- {{{ Basic Mappings
local basic_mappings = {
{ key = "<C-u>", cmd = "<C-u>zz", desc = "Scroll up and center", mode = "n" },
{ key = "n", cmd = "nzzzv", desc = "Next search result and center", mode = "n" },
{ key = "N", cmd = "Nzzzv", desc = "Previous search result and center", mode = "n" },
{ key = "<leader>pp", cmd = '"_dP', desc = "Paste without yanking", mode = "x" },
{ key = "<", cmd = "<gv", desc = "Reselect after indent", mode = "v" },
{ key = ">", cmd = ">gv", desc = "Reselect after indent", mode = "v" },
{ key = "J", cmd = ":m '>+1<CR>gv=gv", desc = "Move line down", mode = "v" },
{ key = "K", cmd = ":m '<-2<CR>gv=gv", desc = "Move line up", mode = "v" },
}
--}}}
--{{{ Buffer Navigation Mappings
local buffer_navigation_mappings = {
{ key = "<C-J>", cmd = ":bnext<CR>", desc = "Next buffer", mode = "n" },
{ key = "<C-K>", cmd = ":bprev<CR>", desc = "Previous buffer", mode = "n" },
{ key = "<leader>bb", cmd = ":Telescope buffers<CR>", desc = "List buffers", mode = "n" },
{ key = "<leader>bk", cmd = ":bdelete<CR>", desc = "Delete buffer", mode = "n" },
{ key = "<leader>bn", cmd = ":bnext<CR>", desc = "Next buffer", mode = "n" },
{ key = "<leader>bp", cmd = ":bprev<CR>", desc = "Previous buffer", mode = "n" },
}
--}}}
--{{{ Terminal Mappings
local terminal_mappings = {
-- {
-- key = "op",
-- cmd = "<C-\\><C-N>:ToggleTerm name=ipython",
-- desc = "Open IPython",
-- mode = "v",
-- group = "Open",
-- },
-- {
-- key = "oP",
-- cmd = "<C-\\><C-N>:ToggleTerm name=ipython-full",
-- desc = "Open full IPython",
-- mode = "v",
-- group = "Open",
-- },
{
key = "<C-T>",
cmd = ":ToggleTerm name=toggleterm<CR>",
desc = "Toggle terminal",
mode = "n",
},
{
key = "<leader>tt",
cmd = ":ToggleTerm name=toggleterm<CR>",
desc = "Toggle terminal",
mode = "n",
},
{
key = "<leader>tT",
cmd = ":ToggleTerm name=toggleterm-full direction=tab<CR>",
desc = "Toggle full terminal",
mode = "n",
},
{
key = "<leader>ot",
cmd = ":ToggleTerm name=toggleterm<CR>",
desc = "Open terminal",
mode = "n",
},
{
key = "<leader>oT",
cmd = ":ToggleTerm name=toggleterm-full direction=tab<CR>",
desc = "Open full terminal",
mode = "n",
},
{
key = "<leader>ts",
cmd = ":TermSelect<CR>",
desc = "Select terminal",
mode = "n",
},
{
key = "<leader>tv",
cmd = ":ToggleTerm direction=vertical name=toggleterm-vert<CR>",
desc = "Toggle vertical terminal",
mode = "n",
},
{
key = "<leader>th",
cmd = ":ToggleTerm direction=horizontal name=toggleterm-hori<CR>",
desc = "Toggle horizontal terminal",
mode = "n",
},
{
key = "<leader>ov",
cmd = ":ToggleTerm direction=vertical name=toggleterm-vert<CR>",
desc = "Open vertical terminal",
mode = "n",
},
{
key = "<leader>oh",
cmd = ":ToggleTerm direction=horizontal name=toggleterm-hori<CR>",
desc = "Open horizontal terminal",
mode = "n",
},
{
key = "<leader>tf",
cmd = ":ToggleTerm name=toggleterm<CR>",
desc = "Toggle terminal",
mode = "n",
},
{
key = "<leader>-",
cmd = ":ToggleTerm direction='horizontal'<CR>",
desc = "Toggle horizontal terminal",
mode = "n",
},
{
key = "<leader>|",
cmd = ":ToggleTerm direction='vertical'<CR>",
desc = "Toggle vertical terminal",
mode = "n",
},
}
--}}}
-- {{{ LSP Mappings
local lsp_mappings = {
{ mode = "n", key = "gA", cmd = vim.lsp.buf.code_action, group = "Code Action" },
{ mode = "n", key = "gd", cmd = ":Telescope lsp_definitions<CR>", group = "LSP Definitions" },
{ mode = "n", key = "gDc", cmd = ":Telescope lsp_implementations<CR>", group = "LSP Implementations" },
{ mode = "n", key = "gDf", cmd = ":Telescope lsp_definitions<CR>", group = "LSP Definitions" },
{ mode = "n", key = "gF", cmd = ":edit <cfile><CR>", group = "Edit File" },
{ mode = "n", key = "gT", cmd = ":Telescope lsp_type_definitions<CR>", group = "LSP Type Definitions" },
{ mode = "n", key = "gb", cmd = ":Gitsigns blame_line<CR>", group = "Blame Line" },
{ mode = "n", key = "<leader>gb", cmd = ":Gitsigns blame<CR>", group = "Git Blame" },
{ mode = "n", key = "gi", cmd = ":Telescope lsp_implementations<CR>", group = "Telescope Implementations" },
{ mode = "n", key = "gj", cmd = ":Telescope jumplist<CR>", group = "Telescope Jumplist" },
{ mode = "n", key = "gr", cmd = ":Telescope lsp_references<CR>", group = "LSP References" },
{ mode = "n", key = "gs", cmd = vim.lsp.buf.signature_help },
-- { mode = "n", key = "K", cmd = vim.lsp.buf.hover },
{ mode = "n", key = "<leader>ca", cmd = vim.lsp.buf.code_action, group = "Code" },
{ mode = "n", key = "<leader>ch", cmd = ":lua vim.lsp.buf.signature_help()<CR>", group = "Signature Help" },
{ mode = "n", key = "<leader>cR", cmd = ":lua vim.lsp.buf.rename()<CR>", group = "Rename" },
{ mode = "n", key = "<leader>cr", cmd = ":Telescope lsp_references<CR>", group = "LSP References" },
{ mode = "n", key = "<leader>cs", cmd = ":Telescope lsp_document_symbols<CR>", group = "LSP Document Symbols" },
{ mode = "n", key = "<leader>ct", cmd = ":Telescope lsp_type_definitions<CR>", group = "LSP Definitions" },
{
mode = "n",
key = "<leader>cw",
cmd = ":Telescope lsp_dynamic_workspace_symbols<CR>",
group = "LSP Workspace Symbols",
},
{ mode = "n", key = "<leader>ci", cmd = ":Telescope lsp_implementations<CR>", group = "LSP Implementations" },
{ mode = "n", key = "<leader>cci", cmd = ":Telescope lsp_incoming_calls<CR>", group = "LSP Incoming Calls" },
{ mode = "n", key = "<leader>cco", cmd = ":Telescope lsp_outgoing_calls<CR>", group = "LSP Outgoing Calls" },
{
mode = "n",
key = "<leader>cd",
cmd = ":Telescope diagnostics theme=dropdown layout_config={width=0.8}<CR>",
group = "Telecope Diagnostics",
},
{
mode = "n",
key = "<leader>cDs",
cmd = ":Telescope diagnostics theme=dropdown layout_config={width=0.8}<CR>",
group = "Telecope Diagnostics",
},
{ mode = "n", key = "<leader>cDn", cmd = ":lua vim.diagnostic.goto_next()<CR>", group = "Goto Next Preview" },
{
mode = "n",
key = "<leader>cDp",
cmd = ":lua vim.diagnostic.goto_prev()<CR>",
group = "Goto Previous Preview",
},
{ mode = "n", key = "<leader>cl", cmd = ":lua vim.diagnostic.setloclist()<CR>", group = "Set Loclist" },
{ mode = "n", key = "<leader>Clr", cmd = ":LspRestart<CR>", group = "Restart LSP" },
{
mode = "n",
key = "<leader>cPs",
cmd = function()
vim.cmd("!pyright --createstub " .. vim.fn.expand("<cword>"))
end,
group = "Generate Stub File",
},
}
-- }}}
-- {{{ Code Companion Mappings
local code_companion_mappings = {
{ mode = "n", key = "<leader>cp", cmd = ":vert Copilot panel<CR>", group = "Copilot Panel" },
{
mode = "n",
key = "<leader>Cf",
cmd = function()
local chat = require("codecompanion").chat
chat({ window_opts = { height = 1.0, layout = "buffer" } })
end,
group = "Codecompanion Fullscreen",
},
{
mode = "n",
key = "<leader>Ch",
cmd = function()
local chat = require("codecompanion").chat
chat({ window_opts = { height = 0.24, layout = "horizontal", position = "bottom" } })
end,
group = "Codecompanion Horizontal Split",
},
{ mode = "n", key = "<leader>Cc", cmd = ":CodeCompanionChat Toggle<CR>", group = "Toggle Codecompanion" },
{ mode = "n", key = "<leader>oc", cmd = ":CodeCompanionChat Toggle<CR>", group = "Toggle Codecompanion" },
{
mode = "n",
key = "<leader>Ci",
cmd = function()
vim.api.nvim_feedkeys(":CodeCompanion #{buffer} ", "n", false)
end,
group = "Inline CodeCompanion",
opts = nosilent,
},
{ mode = "n", key = "<leader>Ct", cmd = ":CodeCompanionChat Toggle<CR>", group = "CodeCompanion Toggle" },
{ mode = "n", key = "<leader>CA", cmd = ":CodeCompanionActions<CR>", group = "CodeCompanion Actions" },
{ mode = "v", key = "<leader>Ca", cmd = ":CodeCompanionChat Add<CR>", group = "CodeCompanion Add" },
{
mode = "v",
key = "<leader>Ci",
cmd = function()
vim.api.nvim_feedkeys(":CodeCompanion #{buffer} ", "n", false)
end,
group = "CodeCompanion Inline",
opts = nosilent,
},
{ mode = "v", key = "<leader>Ce", cmd = ":CodeCompanion /explain<CR>", group = "CodeCompanion /explain" },
{ mode = "v", key = "<leader>Cf", cmd = ":CodeCompanion /fix<CR>", group = "CodeCompanion /fix" },
{ mode = "v", key = "<leader>Cl", cmd = ":CodeCompanion /lsp<CR>", group = "CodeCompanion /lsp" },
{ mode = "v", key = "<leader>Ct", cmd = ":CodeCompanion /tests<CR>", group = "CodeCompanion /tests" },
}
-- }}}
-- {{{ Telescope mappings
local telescope_mappings = {
{
mode = "n",
key = "//",
cmd = ":Telescope current_buffer_fuzzy_find previewer=false<CR>",
desc = "Current buffer fuzzy find",
},
{
mode = "n",
key = "??",
cmd = ":Telescope lsp_document_symbols theme=dropdown layout_config={width=0.5}<CR>",
group = "Lsp document symbols",
},
{
mode = "n",
key = "<leader>fc",
cmd = ':Telescope color_names theme=dropdown layout_config={width=0.45,height=25,prompt_position="bottom"} layout_strategy=vertical<CR>',
group = "Telescope color names",
},
{
mode = "n",
key = "<leader>Tc",
cmd = ":Telescope colorscheme<CR>",
group = "Telescope colorscheme",
},
{
mode = "n",
key = "<leader>TC",
cmd = ':Telescope color_names theme=dropdown layout_config={width=0.45,height=25,prompt_position="bottom"} layout_strategy=vertical<CR>',
group = "Telescope color names",
},
{
mode = "n",
key = "<leader>Tn",
cmd = ":Telescope notify theme=dropdown layout_config={width=0.75}<CR>",
group = "Telescope notify",
},
{
mode = "n",
key = "<leader>TN",
cmd = ":Telescope noice theme=dropdown layout_config={width=0.75}<CR>",
group = "Telescope Noice",
},
{
mode = "n",
key = "<leader>Ti",
cmd = function()
telescope_paste_img()
end,
desc = "Find and Paste Image",
},
{
mode = "n",
key = "<leader>ff",
cmd = ":Telescope find_files find_command=rg,--ignore,--follow,--hidden,--files prompt_prefix=🔍<CR>",
group = "Find files",
},
{ mode = "n", key = "<leader>fg", cmd = ":Telescope live_grep<CR>", group = "Live Grep" },
{
mode = "n",
key = "<leader>Tg",
cmd = ':Telescope glyph theme=dropdown layout_config={width=0.45,height=35,prompt_position="bottom"} layout_strategy=vertical<CR>',
group = "Telescope Glyph",
},
{
mode = "n",
key = "<leader>fG",
cmd = ':Telescope glyph theme=dropdown layout_config={width=0.45,height=35,prompt_position="bottom"} layout_strategy=vertical<CR>',
group = "Glhph",
},
{ mode = "n", key = "<leader>fb", cmd = ":Telescope file_browser<CR>", group = "File browser" },
{
mode = "n",
key = "<leader>fr",
cmd = ":Telescope oldfiles theme=dropdown layout_config={width=0.5}<CR>",
group = "Oldfiles",
},
{
mode = "n",
key = "<leader>hc",
cmd = ":Telescope commands<CR>",
group = "Commands",
},
{
mode = "n",
key = "<leader>hv",
cmd = ":Telescope vim_options<CR>",
group = "Vim options",
},
{
mode = "n",
key = "<leader>hk",
cmd = ":Telescope keymaps<CR>",
group = "Keymaps",
},
{
mode = "n",
key = "<leader>hs",
cmd = ":Telescope spell_suggest<CR>",
group = "Spell suggest",
},
{
mode = "n",
key = "<leader>ht",
cmd = ":Telescope help_tags<CR>",
group = "Help tags",
},
{
mode = "n",
key = "<leader>hm",
cmd = ":Telescope man_pages theme=dropdown layout_config={width=0.75}<CR>",
group = "Man pages",
},
{
mode = "n",
key = "<leader>sf",
cmd = ":Telescope find_files find_command=rg,--ignore,--follow,--hidden,--files prompt_prefix=🔍<CR>",
group = "Search files",
},
{ mode = "n", key = "<leader>sF", cmd = ":Telescope fidget<CR>", group = "Fidget" },
{ mode = "n", key = "<leader>sg", cmd = ":Telescope live_grep<CR>", group = "Live grep" },
{ mode = "n", key = "<leader>sh", cmd = ":Telescope command_history<CR>", group = "Command history" },
{
mode = "n",
key = "<leader>sn",
cmd = function()
Snacks.win({
file = vim.api.nvim_get_runtime_file("doc/news.txt", false)[1],
width = 0.6,
height = 0.6,
wo = {
spell = false,
wrap = false,
signcolumn = "yes",
statuscolumn = " ",
conceallevel = 3,
},
})
end,
group = "News",
},
{ mode = "n", key = "<leader>sm", cmd = ":Telescope man_pages<CR>", group = "Man pages" },
{ mode = "n", key = "<leader>s/", cmd = ":Telescope search_history<CR>", group = "Search history" },
{ mode = "n", key = "<leader>gc", cmd = ":Telescope git_commits<CR>", group = "Git commits" },
{ mode = "n", key = "<leader>gf", cmd = ":Telescope git_files<CR>", group = "Git files" },
{ mode = "n", key = "<leader>Tr", cmd = ":Telescope reloader<CR>", group = "Telescope reloader" },
}
--}}}
-- {{{ File Explorer Mappings (i guess)
local file_explorer_mappings = {
{ mode = "n", key = "<leader>nt", cmd = ":NvimTreeToggle<CR>" },
{ mode = "n", key = "<leader>nc", cmd = ":lua Snacks.notifier.hide()<CR>" },
{ mode = "n", key = "<leader>nh", cmd = ":lua Snacks.notifier.show_history()<CR>" },
}
-- }}}
-- {{{ Misc Utilities Mappings
local misc_utilities_mappings = {
{ mode = "n", key = "<leader>x", cmd = "<cmd>!chmod +x %<CR>", group = "Make Executable" },
{ mode = "n", key = "<leader>y", cmd = '"+y', group = "System Yank" },
{ mode = "v", key = "<leader>y", cmd = '"+y', group = "System Yank" },
{ mode = "n", key = "<leader>sc", cmd = ":nohls<CR>", group = "Search" },
{
mode = "n",
key = "<leader>m",
cmd = function()
mkdir_under_cursor()
end,
group = "mkdir under cursor",
},
{
mode = "v",
key = "<leader>m",
cmd = function()
mkdir_under_cursor()
end,
group = "mkdir selection",
},
}
-- }}}
-- {{{ Goto Preview Mappings
local goto_preview_mappings = {
{ mode = "n", key = "gpc", cmd = ':lua require("goto-preview").close_all_win()<CR>', group = "Goto Preview" },
{
mode = "n",
key = "gpd",
cmd = ':lua require("goto-preview").goto_preview_definition()<CR>',
group = "Goto Preview",
},
{
mode = "n",
key = "gpi",
cmd = ':lua require("goto-preview").goto_preview_implementation()<CR>',
group = "Goto Preview",
},
}
-- }}}
-- {{{ Workspace Management Mappings
local workspace_management_mappings = {
{ mode = "n", key = "<leader>wa", cmd = vim.lsp.buf.add_workspace_folder },
{ mode = "n", key = "<leader>wr", cmd = vim.lsp.buf.remove_workspace_folder },
{
mode = "n",
key = "<leader>wl",
cmd = function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end,
},
}
-- }}}
-- {{{ Noice Mappings
local noice_mappings = {
{ mode = "n", key = "<leader>Nh", cmd = ":Noice telescope<CR>", group = "Noice" },
{ mode = "n", key = "<leader>Nl", cmd = ":Noice last<CR>", group = "Noice" },
{ mode = "n", key = "<leader>Nd", cmd = ":Noice dismiss<CR>", group = "Noice" },
{ mode = "n", key = "<leader>Ne", cmd = ":Noice errors<CR>", group = "Noice" },
{ mode = "n", key = "<leader>Ns", cmd = ":Noice stats<CR>", group = "Noice" },
}
-- }}}
-- {{{ ODIS Mappings
local odis_mappings = {
{
mode = "n",
key = "<leader>dv",
cmd = ':lua require("odis").show_documentation("vsplit")<CR>',
group = "Vertical split",
},
{ mode = "n", key = "<leader>dh", cmd = ':lua require("odis").show_documentation("split")<CR>', group = "Split" },
{ mode = "n", key = "<leader>db", cmd = ':lua require("odis").show_documentation("buffer")<CR>', group = "Buffer" },
{ mode = "n", key = "<leader>dt", cmd = ':lua require("odis").show_documentation("tab")<CR>', group = "Tab" },
{ mode = "n", key = "<leader>df", cmd = ':lua require("odis").show_documentation("float")<CR>', group = "Float" },
}
-- }}}
-- {{{ Diffview Mappings
local diffview_mappings = {
{
mode = "n",
key = "<leader>gdo",
cmd = ":DiffviewOpen<CR>",
group = "DiffviewOpen",
},
{
mode = "n",
key = "<leader>gdf",
cmd = ":DiffviewFileHistory %<CR>",
group = "Git",
},
{
mode = "n",
key = "<leader>gdh",
cmd = ":DiffviewHistory<CR>",
group = "Git",
},
{
mode = "n",
key = "<leader>gdc",
cmd = ":DiffviewClose<CR>",
group = "Git",
},
{
mode = "n",
key = "<leader>gdt",
cmd = ":DiffviewToggleFiles<CR>",
group = "Git",
desc = "Toggle files view",
},
{
mode = "n",
key = "<leader>gdr",
cmd = ":DiffviewRefresh<CR>",
desc = "Refresh diffview",
group = "Git",
},
{
mode = "n",
key = "<leader>gg",
cmd = ":lua Snacks.lazygit()<CR>",
desc = "Open Lazygit",
},
}
-- }}}
--{{{ Custom Terminals
local programs_map = {
op = { cmd = "ipython", display_name = "ipython", direction = "vertical", hidden = true },
oP = {
cmd = "ipython",
display_name = "ipython-full",
direction = "tab",
hidden = true,
},
oi = { cmd = "sudo iotop", display_name = "iotop", direction = "tab", hidden = true },
on = { cmd = "rmpc", display_name = "rmpc", direction = "tab", hidden = true },
oN = { cmd = "nvtop", display_name = "nvtop", direction = "tab", hidden = true },
ob = { cmd = "/usr/bin/btop", display_name = "btop", direction = "tab", hidden = true },
od = { cmd = "lazydocker", display_name = "lazydocker", direction = "tab", hidden = true },
}
local temp
local tbl = {}
for key, value in pairs(programs_map) do
temp = {
cmd = function()
term_toggle(term_factory(value))
end,
key = "<leader>" .. key,
group = value.group,
mode = "n",
desc = "Open " .. value.display_name,
}
table.insert(tbl, temp)
end
add_to_whichkey(tbl, { key = "<leader>o", group = "Open" })
function _G.set_terminal_keymaps()
local opts = { buffer = 0 }
map("t", "<esc>", [[<C-\><C-n>]], opts)
map("t", "<C-w>", [[<C-\><C-n><C-w>]], opts)
end
vim.cmd("autocmd! TermOpen term://* lua set_terminal_keymaps()")
--}}}
-- {{{ IMAGE
local image_mappings = {
{
mode = "n",
key = "<leader>id",
cmd = ":lua require('image').disable()<CR>",
desc = "Disable image rendering",
},
{
mode = "n",
key = "<leader>ie",
cmd = ":lua require('image').enable()<CR>",
desc = "Enable image rendering",
},
{
mode = "n",
key = "<leader>pi",
cmd = function()
telescope_paste_img()
end,
desc = "Find and Paste Image",
},
}
-- }}}
--{{{ Groups
add_to_whichkey(nil, { key = "<leader>a", group = "AnyJump" })
add_to_whichkey(nil, { key = "<leader>b", group = "Buffers" })
add_to_whichkey(nil, { key = "<leader>c", group = "Code" })
add_to_whichkey(nil, { key = "<leader>ca", group = "Code Actions" })
add_to_whichkey(nil, { key = "<leader>cc", group = "Calls" })
add_to_whichkey(nil, { key = "<leader>C", group = "CodeCompanion" })
add_to_whichkey(nil, { key = "<leader>cL", group = "LSP" })
add_to_whichkey(nil, { key = "<leader>d", group = "ODIS" })
add_to_whichkey(nil, { key = "<leader>f", group = "Find" })
add_to_whichkey(nil, { key = "<leader>g", group = "Git" })
add_to_whichkey(nil, { key = "<leader>gd", group = "DiffView" })
add_to_whichkey(nil, { key = "<leader>h", group = "Help" })
add_to_whichkey(nil, { key = "<leader>i", group = "Image" })
add_to_whichkey(nil, { key = "<leader>j", group = "AnyJump" })
add_to_whichkey(nil, { key = "<leader>N", group = "Noice" })
-- add_to_whichkey(nil, { key = "<leader>o", group = "Open" })
add_to_whichkey(nil, { key = "<leader>p", group = "Paste" })
add_to_whichkey(nil, { key = "<leader>pg", group = "Paste Git Raw" })
add_to_whichkey(nil, { key = "<leader>s", group = "Search" })
add_to_whichkey(nil, { key = "<leader>t", group = "Terminal" })
add_to_whichkey(nil, { key = "<leader>T", group = "Telescope" })
add_to_whichkey(nil, { key = "<leader>w", group = "Workspace" })
add_to_whichkey(nil, { key = "<leader>x", group = "Make Executable" })
add_to_whichkey(nil, { key = "<leader>y", group = "System Yank" })
add_to_whichkey(nil, { key = "<leader>0", group = "Horizontal Terminal" })
add_to_whichkey(nil, { key = "<leader>cP", group = "Python" })
--}}}
--{{{ Whichkey Mappings
local mappings_tables = {
basic_mappings,
buffer_navigation_mappings,
terminal_mappings,
lsp_mappings,
code_companion_mappings,
telescope_mappings,
file_explorer_mappings,
misc_utilities_mappings,
goto_preview_mappings,
workspace_management_mappings,
noice_mappings,
odis_mappings,
diffview_mappings,
image_mappings,
}
for _, mapping in ipairs(mappings_tables) do
add_to_whichkey(map_from_table(mapping))
end
add_to_whichkey(nil, { key = "<leader>dc", group = "Close" })
--}}}
@@ -0,0 +1,21 @@
local M = {}
function M.setup()
vim.api.nvim_create_user_command("Config", "edit ~/.config/nvim", { desc = "Edit Neovim configuration" })
vim.api.nvim_create_user_command(
"Keymaps",
"edit ~/.config/nvim/lua/core/keymaps/init.lua",
{ desc = "Edit keymaps" }
)
vim.api.nvim_create_user_command(
"Hypr",
"edit ~/.config/hypr/hyprland.conf",
{ desc = "Edit Hyprland configuration" }
)
vim.keymap.set("", "<Leader>tl", function()
vim.diagnostic.enable(not vim.diagnostic.is_enabled())
end, { desc = "Toggle diagnostics" })
end
return M
+38
View File
@@ -0,0 +1,38 @@
local M = {}
local map = vim.keymap.set
function M.setup()
map("n", "<C-u>", "<C-u>zz", { desc = "Scroll up and center" })
map("n", "n", "nzzzv", { desc = "Next search result and center" })
map("n", "N", "Nzzzv", { desc = "Previous search result and center" })
map("x", "<leader>pp", '"_dP', { desc = "Paste without yanking" })
map("v", "<", "<gv", { desc = "Reselect after indent" })
map("v", ">", ">gv", { desc = "Reselect after indent" })
map("v", "J", ":m '>+1<CR>gv=gv", { desc = "Move line down" })
map("v", "K", ":m '<-2<CR>gv=gv", { desc = "Move line up" })
map("n", "<C-J>", "<cmd>bnext<cr>", { desc = "Next buffer" })
map("n", "<C-K>", "<cmd>bprevious<cr>", { desc = "Previous buffer" })
map("n", "<leader>bk", "<cmd>bdelete<cr>", { desc = "Delete buffer" })
map("n", "<leader>bn", "<cmd>bnext<cr>", { desc = "Next buffer" })
map("n", "<leader>bp", "<cmd>bprevious<cr>", { desc = "Previous buffer" })
map("n", "<leader>x", "<cmd>!chmod +x %<cr>", { desc = "Make file executable" })
map({ "n", "v" }, "<leader>y", '"+y', { desc = "Yank to system clipboard" })
map("n", "<leader>sc", "<cmd>nohlsearch<cr>", { desc = "Clear search highlights" })
map({ "n", "v" }, "<leader>m", require("utils.functions.mkdir_under_cursor").mkdir_under_cursor, {
desc = "Create directory from text",
})
map("n", "<leader>pg", require("utils.functions.git_paste").git_paste_prompt, {
desc = "Paste content from Git raw URL",
})
map("n", "<leader>wa", vim.lsp.buf.add_workspace_folder, { desc = "Add workspace folder" })
map("n", "<leader>wr", vim.lsp.buf.remove_workspace_folder, { desc = "Remove workspace folder" })
map("n", "<leader>wl", function()
vim.print(vim.lsp.buf.list_workspace_folders())
end, { desc = "List workspace folders" })
end
return M
+33
View File
@@ -0,0 +1,33 @@
local M = {}
function M.setup()
require("which-key").add({
{ "<leader>a", group = "AnyJump" },
{ "<leader>b", group = "Buffers" },
{ "<leader>c", group = "Code" },
{ "<leader>ca", group = "Code actions" },
{ "<leader>cc", group = "Calls" },
{ "<leader>cL", group = "LSP" },
{ "<leader>cP", group = "Python" },
{ "<leader>C", group = "CodeCompanion" },
{ "<leader>f", group = "Find" },
{ "<leader>g", group = "Git" },
{ "<leader>gd", group = "Diffview" },
{ "<leader>h", group = "Help" },
{ "<leader>i", group = "Image" },
{ "<leader>j", group = "AnyJump" },
{ "<leader>n", group = "Navigation and notifications" },
{ "<leader>N", group = "Noice" },
{ "<leader>o", group = "Open" },
{ "<leader>p", group = "Paste" },
{ "<leader>pg", group = "Paste Git raw" },
{ "<leader>s", group = "Search" },
{ "<leader>t", group = "Terminal" },
{ "<leader>T", group = "Telescope" },
{ "<leader>w", group = "Workspace" },
{ "<leader>x", group = "Executable bit" },
{ "<leader>y", group = "System clipboard" },
})
end
return M
+4
View File
@@ -0,0 +1,4 @@
require("core.keymaps.commands").setup()
require("core.keymaps.editing").setup()
require("core.keymaps.lsp").setup()
require("core.keymaps.groups").setup()
+47
View File
@@ -0,0 +1,47 @@
local M = {}
local map = vim.keymap.set
function M.setup()
map("n", "gA", vim.lsp.buf.code_action, { desc = "Code action" })
map("n", "gd", "<cmd>Telescope lsp_definitions<cr>", { desc = "Definitions" })
map("n", "gDc", "<cmd>Telescope lsp_implementations<cr>", { desc = "Implementations" })
map("n", "gDf", "<cmd>Telescope lsp_definitions<cr>", { desc = "Definitions" })
map("n", "gF", "<cmd>edit <cfile><cr>", { desc = "Edit file under cursor" })
map("n", "gT", "<cmd>Telescope lsp_type_definitions<cr>", { desc = "Type definitions" })
map("n", "gb", "<cmd>Gitsigns blame_line<cr>", { desc = "Blame line" })
map("n", "<leader>gb", "<cmd>Gitsigns blame<cr>", { desc = "Git blame" })
map("n", "gi", "<cmd>Telescope lsp_implementations<cr>", { desc = "Implementations" })
map("n", "gj", "<cmd>Telescope jumplist<cr>", { desc = "Jumplist" })
map("n", "gr", "<cmd>Telescope lsp_references<cr>", { desc = "References" })
map("n", "gs", vim.lsp.buf.signature_help, { desc = "Signature help" })
map("n", "<leader>ca", vim.lsp.buf.code_action, { desc = "Code action" })
map("n", "<leader>ch", vim.lsp.buf.signature_help, { desc = "Signature help" })
map("n", "<leader>cR", vim.lsp.buf.rename, { desc = "Rename" })
map("n", "<leader>cr", "<cmd>Telescope lsp_references<cr>", { desc = "References" })
map("n", "<leader>cs", "<cmd>Telescope lsp_document_symbols<cr>", { desc = "Document symbols" })
map("n", "<leader>ct", "<cmd>Telescope lsp_type_definitions<cr>", { desc = "Type definitions" })
map("n", "<leader>cw", "<cmd>Telescope lsp_dynamic_workspace_symbols<cr>", { desc = "Workspace symbols" })
map("n", "<leader>ci", "<cmd>Telescope lsp_implementations<cr>", { desc = "Implementations" })
map("n", "<leader>cci", "<cmd>Telescope lsp_incoming_calls<cr>", { desc = "Incoming calls" })
map("n", "<leader>cco", "<cmd>Telescope lsp_outgoing_calls<cr>", { desc = "Outgoing calls" })
map("n", "<leader>cd", "<cmd>Telescope diagnostics theme=dropdown layout_config={width=0.8}<cr>", {
desc = "Diagnostics",
})
map("n", "<leader>cDs", "<cmd>Telescope diagnostics theme=dropdown layout_config={width=0.8}<cr>", {
desc = "Diagnostics",
})
map("n", "<leader>cDn", function()
vim.diagnostic.jump({ count = 1, float = true })
end, { desc = "Next diagnostic" })
map("n", "<leader>cDp", function()
vim.diagnostic.jump({ count = -1, float = true })
end, { desc = "Previous diagnostic" })
map("n", "<leader>cl", vim.diagnostic.setloclist, { desc = "Diagnostics to location list" })
map("n", "<leader>Clr", "<cmd>LspRestart<cr>", { desc = "Restart LSP" })
map("n", "<leader>cPs", function()
vim.cmd("!pyright --createstub " .. vim.fn.expand("<cword>"))
end, { desc = "Generate Python stub" })
end
return M
+12 -39
View File
@@ -1,60 +1,33 @@
-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
require("core.options")
-- Setup lazy.nvim
require("lazy").setup({
spec = {
-- import your plugins
{ import = "plugins" },
},
-- Configure any other settings here. See the documentation for more details.
-- colorscheme that will be used when installing plugins.
install = { colorscheme = { "habamax" } },
-- automatically check for plugin updates
checker = { enabled = true },
dev = {
-- Directory where you store your local plugin projects. If a function is used,
-- the plugin directory (e.g. `~/projects/plugin-name`) must be returned.
---@type string | fun(plugin: LazyPlugin): string
path = "~/.config/nvim/test",
---@type string[] plugins that match these patterns will use your local versions instead of being fetched from GitHub
patterns = {}, -- For example {"folke"}
fallback = false, -- Fallback to git when local plugin doesn't exist
},
-- lazy can generate helptags from the headings in markdown readme files,
-- so :help works even for plugins that don't have vim docs.
-- when the readme opens with :help it will be correctly displayed as markdown
readme = {
enabled = true,
root = vim.fn.stdpath("state") .. "/lazy/readme",
files = { "README.md", "lua/**/README.md" },
-- only generate markdown helptags for plugins that don't have docs
skip_if_doc_exists = true,
},
state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things
-- Enable profiling of lazy.nvim. This will add some overhead,
-- so only enable this when you are debugging lazy.nvim
profiling = {
-- Enables extra stats on the debug tab related to the loader cache.
-- Additionally gathers stats about all package.loaders
loader = false,
-- Track each new require in the Lazy profiling tab
require = false,
},
state = vim.fn.stdpath("state") .. "/lazy/state.json",
})
-107
View File
@@ -1,107 +0,0 @@
-- Utility functions shared between progress reports for LSP and DAP
vim.notify = require("notify")
local client_notifs = {}
local function get_notif_data(client_id, token)
if not client_notifs[client_id] then
client_notifs[client_id] = {}
end
if not client_notifs[client_id][token] then
client_notifs[client_id][token] = {}
end
return client_notifs[client_id][token]
end
local spinner_frames = { "", "", "", "", "", "", "", "" }
local function update_spinner(client_id, token, title)
local notif_data = get_notif_data(client_id, token)
if notif_data.spinner then
local new_spinner = (notif_data.spinner + 1) % #spinner_frames
notif_data.spinner = new_spinner
notif_data.notification = vim.notify("", nil, {
hide_from_history = true,
icon = spinner_frames[new_spinner],
replace = notif_data.notification,
title = title,
})
vim.defer_fn(function()
update_spinner(client_id, token, title)
end, 100)
end
end
local function format_title(title, client_name)
return client_name .. (title and #title > 0 and ": " .. title or "")
end
local function format_message(message, percentage)
return (percentage and percentage .. "%\t" or "") .. (message or "")
end
-- LSP integration
-- Make sure to also have the snippet with the common helper functions in your config!
vim.lsp.handlers["$/progress"] = function(_, result, ctx)
local client_id = ctx.client_id
local val = result.value
if not val.kind then
return
end
local notif_data = get_notif_data(client_id, result.token)
if val.kind == "begin" then
local message = format_message(val.message, val.percentage)
notif_data.notification = vim.notify(message, "info", {
title = format_title("", vim.lsp.get_client_by_id(client_id).name),
icon = spinner_frames[1],
timeout = false,
hide_from_history = false,
})
notif_data.spinner = 1
update_spinner(client_id, result.token, val.title)
elseif val.kind == "report" and notif_data then
notif_data.notification = vim.notify(format_message(val.message, val.percentage), "info", {
replace = notif_data.notification,
title = format_title("", vim.lsp.get_client_by_id(client_id).name),
hide_from_history = false,
})
elseif val.kind == "end" and notif_data then
notif_data.notification = vim.notify(val.message and format_message(val.message) or "Complete", "info", {
icon = "",
replace = notif_data.notification,
title = format_title("", vim.lsp.get_client_by_id(client_id).name),
timeout = 3000,
})
notif_data.spinner = nil
end
end
vim.lsp.handlers["window/showMessage"] = function(err, result, ctx)
local client = vim.lsp.get_client_by_id(ctx.client_id)
local lvl = ({
"ERROR",
"WARN",
"INFO",
"DEBUG",
})[result.type]
vim.notify("LSP Message: " .. result.message, lvl, {
title = client.name,
timeout = 5000,
keep = function()
return lvl == "ERROR" or lvl == "WARN"
end,
})
end
+1 -15
View File
@@ -1,7 +1,5 @@
local g = vim.g
local o = vim.o
local A = vim.api
local l = vim.lsp
g.mapleader = " "
g.maplocalleader = ","
@@ -11,14 +9,12 @@ o.showmode = false
o.termguicolors = true
o.background = "dark"
o.mouse = "a"
o.syntax = "on"
o.laststatus = 3
o.number = true
o.relativenumber = true
o.colorcolumn = "88"
o.textwidth = 80
o.shiftwidth = 4
o.expandtab = true
o.tabstop = 4
o.autoindent = true
o.ignorecase = true
@@ -37,29 +33,19 @@ o.wildignore = ".git,.hg,.svn,CVS,.DS_Store,.idea,.vscode,.vscode-test,node_modu
o.showmatch = true
o.list = true
o.listchars = "tab:»·,trail:·,nbsp:·,extends:>,precedes:<"
o.encoding = "utf-8"
o.guifont = "JetBrainsMono Nerd Font 14"
o.expandtab = true
o.hidden = true
o.cmdheight = 1
o.updatetime = 300
o.timeoutlen = 500
o.pumwidth = 35
o.foldmethod = "marker"
o.conceallevel = 1
g.db_ui_use_nerd_fonts = 1
-- vim.cmd.colorscheme = 'catppuccin-macchiato'
vim.cmd.colorscheme = "catppuccin"
-- set border for floating windows and signature help
-- UNSUPPPORTED: https://github.com/neovim/neovim/issues/32242#issuecomment-2777120640
-- l.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = border })
-- l.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { border = border })
o.winborder = "rounded"
vim.diagnostic.config({
virtual_text = false,
virtual_lines = { current_line = true },
signs = true,
underline = true,
severity_sort = true,
@@ -1,137 +0,0 @@
return {
"sontungexpt/better-diagnostic-virtual-text",
-- event = "LspAttach",
enabled = true,
config = function()
local diagnostic = require("better-diagnostic-virtual-text")
local vt = require("better-diagnostic-virtual-text.api")
local tbl_insert = table.insert
local strdisplaywidth = vim.fn.strdisplaywidth
local space = function(n)
return string.rep(" ", n)
end
local SEVERITY_SUFFIXS = {
[vim.diagnostic.severity.ERROR] = "Error",
[vim.diagnostic.severity.WARN] = "Warn",
[vim.diagnostic.severity.INFO] = "Info",
[vim.diagnostic.severity.HINT] = "Hint",
}
vt.format_line_chunks = function(
ui_opts,
line_idx,
line_msg,
severity,
max_line_length,
lasted_line,
virt_text_offset,
should_display_below,
above_instead,
removed_parts,
diagnostic
)
local chunks = {}
local first_line = line_idx == 1
local severity_suffix = SEVERITY_SUFFIXS[severity]
local msg = string.format("[%s]: %s", diagnostic.code, line_msg)
local function hls(extend_hl_groups)
local default_groups = {
"DiagnosticVirtualText" .. severity_suffix,
"BetterDiagnosticVirtualText" .. severity_suffix,
}
if extend_hl_groups then
for i, hl in ipairs(extend_hl_groups) do
default_groups[2 + i] = hl
end
end
return default_groups
end
local message_highlight = hls()
if should_display_below then
local arrow_symbol = (above_instead and ui_opts.down_arrow or ui_opts.up_arrow):match("^%s*(.*)")
local space_offset = space(virt_text_offset)
if first_line then
if not removed_parts.arrow then
tbl_insert(chunks, {
space_offset .. arrow_symbol,
hls({
"BetterDiagnosticVirtualTextArrow",
"BetterDiagnosticVirtualTextArrow" .. severity_suffix,
}),
})
end
else
tbl_insert(chunks, {
space_offset .. space(strdisplaywidth(arrow_symbol)),
message_highlight,
})
end
else
local arrow_symbol = ui_opts.arrow
if first_line then
if not removed_parts.arrow then
tbl_insert(chunks, {
arrow_symbol,
hls({
"BetterDiagnosticVirtualTextArrow",
"BetterDiagnosticVirtualTextArrow" .. severity_suffix,
}),
})
end
else
tbl_insert(chunks, {
space(virt_text_offset + strdisplaywidth(arrow_symbol)),
message_highlight,
})
end
end
if not removed_parts.left_kept_space then
local tree_symbol = " "
if first_line then
if not lasted_line then
tree_symbol = above_instead and "" or ""
end
elseif lasted_line then
tree_symbol = above_instead and "" or ""
else
tree_symbol = ""
end
tbl_insert(chunks, {
tree_symbol,
hls({ "BetterDiagnosticVirtualTextTree", "BetterDiagnosticVirtualTextTree" .. severity_suffix }),
})
end
tbl_insert(chunks, {
msg,
message_highlight,
})
if not removed_parts.right_kept_space then
local last_space = space(max_line_length - strdisplaywidth(msg) + ui_opts.right_kept_space)
tbl_insert(chunks, { last_space, message_highlight })
end
return chunks
end
diagnostic.setup({
ui = {
wrap_line_after = 150, -- wrap the line after this length to avoid the virtual text is too long
left_kept_space = 3, --- the number of spaces kept on the left side of the virtual text, make sure it enough to custom for each line
right_kept_space = 3, --- the number of spaces kept on the right side of the virtual text, make sure it enough to custom for each line
arrow = "",
up_arrow = "",
down_arrow = "",
above = false, -- the virtual text will be displayed above the line
},
priority = 10000, -- the priority of virtual text
inline = true,
})
end,
}
+2 -2
View File
@@ -7,7 +7,7 @@ return {
-- numbers = function(opts)
-- return string.format("%s", opts.id)
-- end,
numbers = function(opts)
numbers = function(_opts)
return ""
end,
-- number_style = "superscript" | "subscript" | "" | { "none", "subscript" }, -- buffer_id at index 1, ordinal at index 2
@@ -45,7 +45,7 @@ return {
-- diagnostics = false | "nvim_lsp" | "coc",
diagnostics = "nvim_lsp",
diagnostics_update_in_insert = false,
diagnostics_indicator = function(count, level, diagnostics_dict, context)
diagnostics_indicator = function(_count, _level, diagnostics_dict, _context)
local s = " "
for e, n in pairs(diagnostics_dict) do
local sym = e == "error" and ""
+1 -7
View File
@@ -41,7 +41,6 @@ return {
integrations = {
cmp = true,
gitsigns = true,
nvimtree = true,
mini = {
enabled = true,
indentscope_color = "",
@@ -51,11 +50,7 @@ return {
diffview = true,
fidget = true,
noice = true,
indent_blankline = {
enabled = true,
scope_color = "lavendar", -- catppuccin color (eg. `lavender`) Default: text
colored_indent_levels = true,
},
snacks = true,
copilot_vim = true,
native_lsp = {
enabled = true,
@@ -77,7 +72,6 @@ return {
background = true,
},
},
notify = true,
treesitter = true,
rainbow_delimiters = true,
render_markdown = true,
+40 -4
View File
@@ -6,6 +6,42 @@ return {
"j-hui/fidget.nvim",
"ravitemer/mcphub.nvim",
},
keys = {
{
"<leader>Cf",
function()
require("codecompanion").chat({ window_opts = { height = 1, layout = "buffer" } })
end,
desc = "Fullscreen chat",
},
{
"<leader>Ch",
function()
require("codecompanion").chat({
window_opts = { height = 0.24, layout = "horizontal", position = "bottom" },
})
end,
desc = "Horizontal chat",
},
{ "<leader>Cc", "<cmd>CodeCompanionChat Toggle<cr>", desc = "Toggle chat" },
{ "<leader>oc", "<cmd>CodeCompanionChat Toggle<cr>", desc = "Toggle chat" },
{
"<leader>Ci",
function()
vim.api.nvim_feedkeys(":CodeCompanion #{buffer} ", "n", false)
end,
mode = { "n", "v" },
desc = "Inline prompt",
silent = false,
},
{ "<leader>Ct", "<cmd>CodeCompanionChat Toggle<cr>", desc = "Toggle chat" },
{ "<leader>CA", "<cmd>CodeCompanionActions<cr>", desc = "Actions" },
{ "<leader>Ca", "<cmd>CodeCompanionChat Add<cr>", mode = "v", desc = "Add selection to chat" },
{ "<leader>Ce", "<cmd>CodeCompanion /explain<cr>", mode = "v", desc = "Explain selection" },
{ "<leader>Cf", "<cmd>CodeCompanion /fix<cr>", mode = "v", desc = "Fix selection" },
{ "<leader>Cl", "<cmd>CodeCompanion /lsp<cr>", mode = "v", desc = "Explain LSP diagnostics" },
{ "<leader>Ct", "<cmd>CodeCompanion /tests<cr>", mode = "v", desc = "Generate tests" },
},
opts = {
adapters = {
-- {{{ HTTP
@@ -177,7 +213,7 @@ return {
---@param adapter CodeCompanion.Adapter
---@param context table
---@return string
prompt_decorator = function(message, adapter, context)
prompt_decorator = function(message, _adapter, _context)
return string.format([[<prompt>%s</prompt>]], message)
end,
completion_provider = "cmp",
@@ -202,7 +238,7 @@ return {
action_palette = {
provider = "telescope",
width = 75,
heigth = 45,
height = 45,
},
chat = {
layout = "vertical",
@@ -291,7 +327,7 @@ return {
---@param tokens number
---@param adapter CodeCompanion.Adapter
---@return string
token_count = function(tokens, adapter)
token_count = function(tokens, _adapter)
return " (" .. tokens .. " tokens)"
end,
},
@@ -343,7 +379,7 @@ return {
},
},
init = function()
require("utils.codecompanion.fidget-spinner"):init()
require("utils.codecompanion.fidget-spinner").init()
require("utils.codecompanion.extmarks").setup()
end,
}
+8 -10
View File
@@ -1,18 +1,13 @@
return {
"stevearc/conform.nvim",
opts = {
on_init = function(client)
require("conform").formatters.shfmt = {
append_args = { "-i", "0", "-ci", "-sr" },
}
end,
formatters_by_ft = {
python = function(bufnr)
if require("conform").get_formatter_info("ruff_format", bufnr).available then
return {
"ruff_fix",
"ruff_format",
"ruff_organize_imports",
"ruff_format",
}
else
return { "isort", "black" }
@@ -25,14 +20,17 @@ return {
javascriptreact = { "prettier" },
typescript = { "prettier" },
typescriptreact = { "prettier" },
md = { "markdownlint" },
["*"] = { "codespell" },
markdown = { "markdownlint" },
["_"] = { "trim_whitespace" },
},
formatters = {
shfmt = {
append_args = { "-i", "0", "-ci", "-sr" },
},
},
format_on_save = {
-- These options will be passed to conform.format()
timeout_ms = 500,
-- lsp_format = "fallback",
lsp_format = "never",
},
},
}
@@ -1,3 +0,0 @@
return {
'AndreM222/copilot-lualine'
}
+3
View File
@@ -2,6 +2,9 @@ return {
"zbirenbaum/copilot.lua",
cmd = "Copilot",
event = "InsertEnter",
keys = {
{ "<leader>cp", "<cmd>vertical Copilot panel<cr>", desc = "Copilot panel" },
},
opts = {
panel = {
enabled = true,
+22 -15
View File
@@ -1,6 +1,14 @@
return {
"sindrets/diffview.nvim",
dependencies = "nvim-tree/nvim-web-devicons",
keys = {
{ "<leader>gdc", "<cmd>DiffviewClose<cr>", desc = "Close Diffview" },
{ "<leader>gdf", "<cmd>DiffviewFileHistory %<cr>", desc = "File history" },
{ "<leader>gdh", "<cmd>DiffviewHistory<cr>", desc = "Repository history" },
{ "<leader>gdo", "<cmd>DiffviewOpen<cr>", desc = "Open Diffview" },
{ "<leader>gdr", "<cmd>DiffviewRefresh<cr>", desc = "Refresh Diffview" },
{ "<leader>gdt", "<cmd>DiffviewToggleFiles<cr>", desc = "Toggle files" },
},
opts = {
view = {
-- Disable the default normal mode mapping for `<tab>`:
@@ -8,20 +16,19 @@ return {
-- Disable the default visual mode mapping for `gf`:
-- { "x", "gf", false },
},
},
hooks = {
diff_buf_read = function(bufnr)
-- Change local options in diff buffers
vim.opt_local.wrap = false
vim.opt_local.list = false
vim.opt_local.colorcolumn = { 80 }
end,
view_opened = function(view)
require("notify").notify(
("A new %s was opened on tab page %d!"):format(view.class:name(), view.tabpage),
"info",
{ timeout = 5000, title = "Diffview" }
)
end,
hooks = {
diff_buf_read = function()
vim.opt_local.wrap = false
vim.opt_local.list = false
vim.opt_local.colorcolumn = { 80 }
end,
view_opened = function(view)
vim.notify(
("A new %s was opened on tab page %d!"):format(view.class:name(), view.tabpage),
vim.log.levels.INFO,
{ timeout = 5000, title = "Diffview" }
)
end,
},
},
}
-19
View File
@@ -42,8 +42,6 @@ return {
icon_style = "Question", -- Highlight group for group icons
priority = 30, -- Ordering priority for LSP notification group
skip_history = true, -- Whether progress notifications should be omitted from history
-- How to format a progress message
format_message = require("fidget.progress.display").default_format_message,
-- How to format a progress annotation
format_annote = function(msg)
return msg.title
@@ -71,15 +69,6 @@ return {
filter = vim.log.levels.INFO, -- Minimum notifications level
history_size = 128, -- Number of removed messages to retain in history
override_vim_notify = false, -- Automatically override vim.notify() with Fidget
-- How to configure notification groups when instantiated
configs = { default = require("fidget.notification").default_config },
-- Conditionally redirect notifications to another backend
redirect = function(msg, level, opts)
if opts and opts.on_open then
return require("fidget.integration.nvim-notify").delegate(msg, level, opts)
end
end,
-- Options related to how notifications are rendered as text
view = {
stack_upwards = true, -- Display notification items from bottom to top
@@ -87,14 +76,6 @@ return {
group_separator = "---", -- Separator between notification groups
},
},
integration = {
["nvim-tree"] = {
enable = true, -- Integrate with nvim-tree/nvim-tree.lua (if installed)
},
["xcodebuild-nvim"] = {
enable = false, -- Integrate with wojciech-kulik/xcodebuild.nvim (if installed)
},
},
-- Options related to logging
logger = {
level = vim.log.levels.WARN, -- Minimum logging level
+26 -1
View File
@@ -1 +1,26 @@
return { "rmagatti/goto-preview" }
return {
"rmagatti/goto-preview",
keys = {
{
"gpc",
function()
require("goto-preview").close_all_win()
end,
desc = "Close preview windows",
},
{
"gpd",
function()
require("goto-preview").goto_preview_definition()
end,
desc = "Preview definition",
},
{
"gpi",
function()
require("goto-preview").goto_preview_implementation()
end,
desc = "Preview implementation",
},
},
}
+16
View File
@@ -1,5 +1,21 @@
return {
"3rd/image.nvim",
keys = {
{
"<leader>id",
function()
require("image").disable()
end,
desc = "Disable image rendering",
},
{
"<leader>ie",
function()
require("image").enable()
end,
desc = "Enable image rendering",
},
},
opts = {
backend = "kitty",
-- processor = "magick_rock", -- or "magick_cli"
+24
View File
@@ -1,6 +1,30 @@
local function find_and_paste_image()
local builtin = require("telescope.builtin")
local actions = require("telescope.actions")
local action_state = require("telescope.actions.state")
builtin.find_files({
attach_mappings = function(_, map)
local function paste_image(prompt_bufnr)
local entry = action_state.get_selected_entry()
actions.close(prompt_bufnr)
require("img-clip").paste_image(nil, entry.path or entry[1])
end
map("i", "<CR>", paste_image)
map("n", "<CR>", paste_image)
return true
end,
})
end
return {
"HakonHarnes/img-clip.nvim",
event = "VeryLazy",
keys = {
{ "<leader>pi", find_and_paste_image, desc = "Find and paste image" },
{ "<leader>Ti", find_and_paste_image, desc = "Find and paste image" },
},
opts = {
default = {
-- file and directory options
+44 -94
View File
@@ -1,7 +1,7 @@
return {
"neovim/nvim-lspconfig",
dependencies = { "hrsh7th/cmp-nvim-lsp" },
config = function()
vim.notify = require("notify")
local servers = {
"bashls",
"basedpyright",
@@ -13,113 +13,63 @@ return {
"html",
"cssls",
"lua_ls",
"eslint",
-- "ts_ls",
"vtsls",
"ansiblels",
"docker_compose_language_service",
"docker_language_server",
"golangci_lint_ls",
"gopls",
"ruff",
}
local capabilities = require("cmp_nvim_lsp").default_capabilities()
for _, lsp in ipairs(servers) do
if lsp == "lua_ls" then
vim.lsp.config("lua_ls", {
capabilities = capabilities,
on_init = function(client)
if client.workspace_folders then
local path = client.workspace_folders[1].name
if
path ~= vim.fn.stdpath("config")
and (vim.uv.fs_stat(path .. "/.luarc.json") or vim.uv.fs_stat(path .. "/.luarc.jsonc"))
then
return
end
end
vim.lsp.config("*", { capabilities = capabilities })
client.config.settings.Lua = vim.tbl_deep_extend("force", client.config.settings.Lua, {
runtime = {
-- Tell the language server which version of Lua you're using
-- (most likely LuaJIT in the case of Neovim)
version = "LuaJIT",
},
-- Make the server aware of Neovim runtime files
workspace = {
checkThirdParty = false,
library = {
vim.env.VIMRUNTIME,
-- Depending on the usage, you might want to add additional paths here.
-- "${3rd}/luv/library",
-- "${3rd}/busted/library",
"/usr/lib/lua-language-server/meta/3rd/busted/library",
},
-- or pull in all of 'runtimepath'. NOTE: this is a lot slower and will cause issues when working on your own configuration (see https://github.com/neovim/nvim-lspconfig/issues/3189)
-- library = vim.api.nvim_get_runtime_file("", true)
},
})
end,
settings = {
Lua = {},
vim.lsp.config("lua_ls", {
on_init = function(client)
if client.workspace_folders then
local path = client.workspace_folders[1].name
if
path ~= vim.fn.stdpath("config")
and (vim.uv.fs_stat(path .. "/.luarc.json") or vim.uv.fs_stat(path .. "/.luarc.jsonc"))
then
return
end
end
client.config.settings.Lua = vim.tbl_deep_extend("force", client.config.settings.Lua, {
runtime = {
version = "LuaJIT",
},
workspace = {
checkThirdParty = false,
library = {
vim.env.VIMRUNTIME,
"/usr/lib/lua-language-server/meta/3rd/busted/library",
},
},
handlers = {},
root_dir = function(bufnr, on_dir)
if not vim.fn.bufname(bufnr):match("%.txt$") then
on_dir(vim.fn.getcwd())
end
end,
})
elseif lsp == "basedpyright" then
vim.lsp.config(lsp, {
capabilities = capabilities,
settings = {
basedpyright = {
analysis = {
autoSearchPaths = true,
diagnosticMode = "openFilesOnly",
useLibraryCodeForTypes = true,
autoFormatStrings = true,
},
diagnosticMode = "openFilesOnly",
inlayHints = {
callArgumentNames = true,
},
allowedUntypedLibraries = true,
end,
settings = { Lua = {} },
})
vim.lsp.config("basedpyright", {
settings = {
basedpyright = {
analysis = {
autoSearchPaths = true,
diagnosticMode = "openFilesOnly",
autoFormatStrings = true,
inlayHints = {
callArgumentNames = true,
},
diagnosticSeverityOverrides = {
reportMissingTypeStubs = true,
reportImportCycles = true,
reportUnusedImport = true,
},
python = {
analysis = {
ignore = { "*" },
},
},
},
})
elseif lsp == "ruff" then
vim.api.nvim_create_autocmd("LspAttach", {
group = vim.api.nvim_create_augroup("lsp_attach_disable_ruff_hover", { clear = true }),
callback = function(args)
local client = vim.lsp.get_client_by_id(args.data.client_id)
if client == nil then
return
end
if client.name == "ruff" then
-- Disable hover in favor of Pyright
client.server_capabilities.hoverProvider = false
end
end,
desc = "LSP: Disable hover capability from Ruff",
})
vim.lsp.config(lsp, {
settings = {
configuration = vim.fn.stdpath("config") .. "/lua/utils/ruff.toml",
logLevel = "info",
},
})
end
vim.lsp.enable(lsp)
end
},
},
})
vim.lsp.enable(servers)
end,
}
+25 -35
View File
@@ -1,62 +1,56 @@
return {
"nvim-lualine/lualine.nvim",
dependencies = {
"AndreM222/copilot-lualine",
"nvim-tree/nvim-web-devicons",
"ravitemer/mcphub.nvim",
},
config = function()
require("lualine").setup({
options = {
icons_enabled = true,
theme = "catppuccin",
-- theme = 'dracula',
-- theme = 'horizon',
-- theme = 'onedark',
component_separators = { left = "", right = "" },
section_separators = { left = "", right = "" },
disabled_filetypes = {},
always_divide_middle = true,
},
sections = {
lualine_a = { "mode" },
lualine_b = { "branch", "diff" },
lualine_c = { "filename" },
lualine_x = {
"searchcount",
require("mcphub.extensions.lualine"),
{
"seachcount",
{ require("mcphub.extensions.lualine") },
"copilot",
symbols = {
status = {
icons = {
enabled = "",
sleep = "", -- auto-trigger disabled
disabled = "",
warning = " ",
enabled = " ",
sleep = "",
unknown = "",
warning = "",
},
hl = {
disabled = "#6272A4",
enabled = "#50FA7B",
sleep = "#AEB7D0",
disabled = "#6272A4",
warning = "#FFB86C",
unknown = "#FF5555",
warning = "#FFB86C",
},
},
spinners = "dots", -- has some premade spinners
spinners = "dots",
spinner_color = "#6272A4",
},
show_colors = true,
show_loading = true,
},
{
"diagnostics",
"fileformat",
symbols = {
unix = "", -- e712
dos = "", -- e70f
mac = "", -- e711
},
},
"diagnostics",
"encoding",
"fileformat",
{ "filetype", colored = true, icon_only = false },
{
"fileformat",
symbols = { dos = "", mac = "", unix = "" },
},
{ "filetype", colored = true },
},
lualine_y = { "progress" },
lualine_z = { "location" },
@@ -67,24 +61,20 @@ return {
lualine_c = {
{
"filename",
file_status = true, -- Displays file status (readonly status, modified status)
path = 0, -- 0: Just the filename
shorting_target = 40, -- Shortens path to leave 40 spaces in the window
file_status = true,
path = 0,
symbols = {
modified = "[+]", -- Text to show when the file is modified.
readonly = "[-]", -- Text to show when the file is non-modifiable or readonly.
unnamed = "[No Name]", -- Text to show for unnamed buffers.
modified = "[+]",
readonly = "[-]",
unnamed = "[No Name]",
},
},
M,
},
lualine_x = { "location" },
lualine_y = {},
lualine_z = {},
},
tabline = {},
extensions = { "quickfix", "fzf", "nvim-tree", "symbols-outline", "fugitive", "toggleterm", "man" },
extensions = { "man", "quickfix", "toggleterm" },
})
end,
depends = { "kyazdani42/nvim-web-devicons" },
}
-1
View File
@@ -1,6 +1,5 @@
return {
"echasnovski/mini.diff",
depends = { "echasnovski/mini.nvim" },
config = function()
local diff = require("mini.diff")
diff.setup({
+13 -10
View File
@@ -1,10 +1,17 @@
return {
"folke/noice.nvim",
event = "VeryLazy",
keys = {
{ "<leader>Nd", "<cmd>Noice dismiss<cr>", desc = "Dismiss messages" },
{ "<leader>Ne", "<cmd>Noice errors<cr>", desc = "Errors" },
{ "<leader>Nh", "<cmd>Noice telescope<cr>", desc = "Message history" },
{ "<leader>Nl", "<cmd>Noice last<cr>", desc = "Last message" },
{ "<leader>Ns", "<cmd>Noice stats<cr>", desc = "Statistics" },
},
opts = {
lsp = {
progress = {
enabled = true,
enabled = false,
-- Lsp Progress is formatted using the builtins for lsp_progress. See config.format.builtin
-- See the section on formatting for more details on how to customize.
--- @type NoiceFormat|string
@@ -99,10 +106,9 @@ return {
-- Noice can be used as `vim.notify` so you can route any notification like other messages
-- Notification messages have their level and other properties set.
-- event is always "notify" and kind can be any log level as a string
-- The default routes will forward notifications to nvim-notify
-- Keep command and message history available through Noice.
-- Benefit of using Noice for this is the routing and consistent history view
enabled = true,
view = "notify",
enabled = false,
},
documentation = {
view = "hover",
@@ -118,7 +124,9 @@ return {
markdown = {
hover = {
["|(%S-)|"] = vim.cmd.help, -- vim help links
["%[.-%]%((%S-)%)"] = require("noice.util").open, -- markdown links
["%[.-%]%((%S-)%)"] = function(url)
require("noice.util").open(url)
end, -- markdown links
},
highlights = {
["|%S-|"] = "@text.reference",
@@ -131,11 +139,6 @@ return {
},
},
dependencies = {
-- if you lazy-load any plugin below, make sure to add proper `module="..."` entries
"MunifTanjim/nui.nvim",
-- OPTIONAL:
-- `nvim-notify` is only needed, if you want to use the notification view.
-- If not available, we use `mini` as the fallback
"rcarriga/nvim-notify",
},
}
-75
View File
@@ -1,75 +0,0 @@
return {
"nvimtools/none-ls.nvim",
config = function()
local null_ls = require("null-ls")
local helpers = require("null-ls.helpers")
-- syncronous formatting
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
local sources = {
null_ls.builtins.completion.luasnip,
-- null_ls.builtins.diagnostics.mypy,
null_ls.builtins.diagnostics.pydoclint,
null_ls.builtins.diagnostics.markdownlint,
null_ls.builtins.formatting.black,
null_ls.builtins.formatting.isort,
null_ls.builtins.formatting.stylua,
null_ls.builtins.formatting.markdownlint,
null_ls.builtins.formatting.prettier, -- handled by lsp server
null_ls.builtins.formatting.shfmt.with({
filetypes = { "sh", "bash" },
extra_args = { "-i", "0", "-ci", "-sr" },
}),
null_ls.builtins.formatting.gofmt,
null_ls.builtins.formatting.goimports,
null_ls.builtins.formatting.goimports_reviser,
null_ls.builtins.hover.printenv,
}
require("null-ls").setup({
border = "rounded",
cmd = { "nvim" },
debounce = 250,
debug = false,
default_timeout = 5000,
diagnostic_config = {
virtual_text = false,
signs = true,
underline = true,
float = { border = "rounded", source = true },
severity_sort = true,
},
-- diagnostics_format = "#{m}",
diagnostics_format = "[#{c}] #{m} (#{s})",
fallback_severity = vim.diagnostic.severity.ERROR,
log_level = "warn",
notify_format = "[null-ls] %s",
on_init = nil,
on_exit = nil,
root_dir = require("null-ls.utils").root_pattern(".null-ls-root", "Makefile", ".git"),
root_dir_async = nil,
should_attach = nil,
sources = sources,
temp_dir = nil,
update_in_insert = false,
on_attach = function(client, bufnr)
if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = function()
vim.lsp.buf.format({
async = false,
bufnr = bufnr,
filter = function(client)
return client.name == "null-ls"
end,
})
end,
})
end
end,
})
end,
}
-20
View File
@@ -1,20 +0,0 @@
return {
"rcarriga/nvim-notify",
opts = {
background_colour = "#000000",
fps = 144,
icons = {
DEBUG = "",
ERROR = "",
INFO = "",
TRACE = "",
WARN = "",
},
level = 2,
minimum_width = 50,
render = "default",
stages = "fade_in_slide_out",
timeout = 3000,
top_down = true,
},
}
+1 -1
View File
@@ -3,7 +3,7 @@ return {
event = "InsertEnter",
config = true,
opts = {
enabled = function(bufnr)
enabled = function(_bufnr)
return true
end,
disable_filetype = { "TelescopePrompt", "spectre_panel" },
+4 -4
View File
@@ -22,7 +22,7 @@ return {
local cmp_autopairs = require("nvim-autopairs.completion.cmp")
local has_words_before = function()
if vim.api.nvim_buf_get_option(0, "buftype") == "prompt" then
if vim.api.nvim_get_option_value("buftype", { buf = 0 }) == "prompt" then
return false
end
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
@@ -43,7 +43,7 @@ return {
cmp.setup.cmdline(":", {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({ { name = "path" } }, {
sources = cmp.config.sources({ { name = "async_path" } }, {
{ name = "cmdline", option = { ignore_cmds = { "Man", "!" } } },
}),
matching = { disallow_symbol_nonprefix_matching = false },
@@ -51,7 +51,7 @@ return {
cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done())
require("cmp").setup({
cmp.setup({
snippet = {
expand = function(args)
-- vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users.
@@ -180,7 +180,7 @@ return {
{ name = "render-markdown", group_index = 2 },
{
name = "html-css",
group_indx = 2,
group_index = 2,
option = {
enable_on = { "html", "jsx", "tsx", "typescript", "typescriptreact" }, -- html is enabled by default
notify = false,
+41 -27
View File
@@ -1,39 +1,53 @@
return {
"mfussenegger/nvim-lint",
event = { "BufNewFile", "BufReadPre" },
config = function()
local lint = require("lint")
local parser = require("lint.parser")
lint.linters.pydoclint = {
cmd = "pydoclint",
args = { "--show-filenames-in-every-violation-message=true", "-q" },
stdin = false,
stream = "stderr",
ignore_exitcode = true,
parser = parser.from_pattern("(.+):(%d+): (DOC%d+): (.+)", { "file", "lnum", "code", "message" }, nil, {
severity = vim.diagnostic.severity.WARN,
source = "pydoclint",
}),
}
local python_linters = { "ruff" }
if vim.fn.executable("pydoclint") == 1 then
table.insert(python_linters, "pydoclint")
end
lint.linters_by_ft = {
markdown = { "markdownlint" },
lua = { "luacheck" },
python = { "ruff" },
sh = { "shellcheck" },
json = { "jsonlint" },
yaml = { "yamllint" },
vim = { "vint" },
go = { "golangcilint" },
json = { "jsonlint" },
lua = { "luacheck" },
markdown = { "markdownlint" },
python = python_linters,
sh = { "shellcheck" },
typescript = { "eslint" },
typescriptreact = { "eslint" },
vim = { "vint" },
yaml = { "yamllint" },
}
lint.linters.jsonlint.cmd = "vscode-json-language-server"
lint.linters.shellcheck.args = {
"-s",
"bash",
"-o",
"all",
"-e",
"2250",
}
-- Save original function
local orig_try_lint = lint.try_lint
lint.try_lint = function(...)
local opts = select(2, ...)
local bufnr = (type(opts) == "table" and opts.bufnr) or vim.api.nvim_get_current_buf()
if vim.api.nvim_get_option_value("buftype", { buf = bufnr }) ~= "" then
return
end
return orig_try_lint(...)
end
lint.linters.shellcheck.args = { "-s", "bash", "-o", "all", "-e", "2250" }
local lint_group = vim.api.nvim_create_augroup("LintOnSave", { clear = true })
vim.api.nvim_create_autocmd("BufWritePost", {
group = lint_group,
callback = function(args)
if vim.bo[args.buf].buftype ~= "" then
return
end
lint.try_lint(nil, { bufnr = args.buf })
if vim.fn.executable("codespell") == 1 then
lint.try_lint("codespell", { bufnr = args.buf })
end
end,
})
end,
event = { "BufReadPre", "BufNewFile" },
}
-11
View File
@@ -1,11 +0,0 @@
return {
"nvim-tree/nvim-tree.lua",
version = "*",
lazy = false,
dependencies = {
"nvim-tree/nvim-web-devicons",
},
config = function()
require("nvim-tree").setup({})
end,
}
+64 -38
View File
@@ -2,6 +2,68 @@ return {
"folke/snacks.nvim",
priority = 1000,
lazy = false,
keys = {
{
"<leader>fb",
function()
Snacks.explorer()
end,
desc = "File browser",
},
{
"<leader>gg",
function()
Snacks.lazygit()
end,
desc = "Lazygit",
},
{
"<leader>nc",
function()
Snacks.notifier.hide()
end,
desc = "Dismiss notifications",
},
{
"<leader>nh",
function()
Snacks.notifier.show_history()
end,
desc = "Notification history",
},
{
"<leader>nt",
function()
Snacks.explorer()
end,
desc = "File explorer",
},
{
"<leader>sn",
function()
Snacks.win({
file = vim.api.nvim_get_runtime_file("doc/news.txt", false)[1],
width = 0.6,
height = 0.6,
wo = {
spell = false,
wrap = false,
signcolumn = "yes",
statuscolumn = " ",
conceallevel = 3,
},
})
end,
desc = "Neovim news",
},
{
"<leader>Tn",
function()
Snacks.notifier.show_history()
end,
desc = "Notifications",
},
},
---@type snacks.Config
opts = {
-- your configuration comes here
@@ -73,7 +135,7 @@ return {
debug = "",
trace = "",
},
keep = function(notif)
keep = function()
return vim.fn.getcmdpos() > 0
end,
---@type snacks.notifier.style
@@ -92,43 +154,7 @@ return {
scroll = { enabled = false },
statuscolumn = { enabled = false },
words = { enabled = false },
terminal = {
enabled = true,
bo = {
filetype = "snacks_terminal",
},
wo = {},
keys = {
q = "hide",
gf = function(self)
local f = vim.fn.findfile(vim.fn.expand("<cfile>"), "**")
if f == "" then
Snacks.notify.warn("No file under cursor")
else
self:hide()
vim.schedule(function()
vim.cmd("e " .. f)
end)
end
end,
term_normal = {
"<esc>",
function(self)
self.esc_timer = self.esc_timer or (vim.uv or vim.loop).new_timer()
if self.esc_timer:is_active() then
self.esc_timer:stop()
vim.cmd("stopinsert")
else
self.esc_timer:start(200, 0, function() end)
return "<esc>"
end
end,
mode = "t",
expr = true,
desc = "Double escape to normal mode",
},
},
},
terminal = { enabled = false },
win = { enabled = true },
styles = {
input = {
+78 -15
View File
@@ -2,9 +2,7 @@ return {
"nvim-telescope/telescope.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
-- "jonarrien/telescope-cmdline.nvim",
"nat-418/telescope-color-names.nvim",
"nvim-telescope/telescope-file-browser.nvim",
"ghassan0/telescope-glyph.nvim",
"nvim-telescope/telescope-ui-select.nvim",
{
@@ -13,6 +11,64 @@ return {
},
"folke/noice.nvim",
},
cmd = "Telescope",
keys = {
{ "//", "<cmd>Telescope current_buffer_fuzzy_find previewer=false<cr>", desc = "Find in current buffer" },
{
"??",
"<cmd>Telescope lsp_document_symbols theme=dropdown layout_config={width=0.5}<cr>",
desc = "Document symbols",
},
{ "<leader>bb", "<cmd>Telescope buffers<cr>", desc = "Buffers" },
{
"<leader>fc",
'<cmd>Telescope color_names theme=dropdown layout_config={width=0.45,height=25,prompt_position="bottom"} layout_strategy=vertical<cr>',
desc = "Color names",
},
{
"<leader>ff",
"<cmd>Telescope find_files find_command=rg,--ignore,--follow,--hidden,--files prompt_prefix=🔍<cr>",
desc = "Find files",
},
{ "<leader>fg", "<cmd>Telescope live_grep<cr>", desc = "Live grep" },
{
"<leader>fG",
'<cmd>Telescope glyph theme=dropdown layout_config={width=0.45,height=35,prompt_position="bottom"} layout_strategy=vertical<cr>',
desc = "Glyphs",
},
{ "<leader>fr", "<cmd>Telescope oldfiles theme=dropdown layout_config={width=0.5}<cr>", desc = "Recent files" },
{ "<leader>gc", "<cmd>Telescope git_commits<cr>", desc = "Git commits" },
{ "<leader>gf", "<cmd>Telescope git_files<cr>", desc = "Git files" },
{ "<leader>hc", "<cmd>Telescope commands<cr>", desc = "Commands" },
{ "<leader>hk", "<cmd>Telescope keymaps<cr>", desc = "Keymaps" },
{ "<leader>hm", "<cmd>Telescope man_pages theme=dropdown layout_config={width=0.75}<cr>", desc = "Man pages" },
{ "<leader>hs", "<cmd>Telescope spell_suggest<cr>", desc = "Spelling suggestions" },
{ "<leader>ht", "<cmd>Telescope help_tags<cr>", desc = "Help tags" },
{ "<leader>hv", "<cmd>Telescope vim_options<cr>", desc = "Neovim options" },
{ "<leader>s/", "<cmd>Telescope search_history<cr>", desc = "Search history" },
{ "<leader>sF", "<cmd>Telescope fidget<cr>", desc = "Fidget history" },
{
"<leader>sf",
"<cmd>Telescope find_files find_command=rg,--ignore,--follow,--hidden,--files prompt_prefix=🔍<cr>",
desc = "Search files",
},
{ "<leader>sg", "<cmd>Telescope live_grep<cr>", desc = "Live grep" },
{ "<leader>sh", "<cmd>Telescope command_history<cr>", desc = "Command history" },
{ "<leader>sm", "<cmd>Telescope man_pages<cr>", desc = "Man pages" },
{ "<leader>Tc", "<cmd>Telescope colorscheme<cr>", desc = "Colorschemes" },
{
"<leader>TC",
'<cmd>Telescope color_names theme=dropdown layout_config={width=0.45,height=25,prompt_position="bottom"} layout_strategy=vertical<cr>',
desc = "Color names",
},
{
"<leader>Tg",
'<cmd>Telescope glyph theme=dropdown layout_config={width=0.45,height=35,prompt_position="bottom"} layout_strategy=vertical<cr>',
desc = "Glyphs",
},
{ "<leader>TN", "<cmd>Telescope noice theme=dropdown layout_config={width=0.75}<cr>", desc = "Noice history" },
{ "<leader>Tr", "<cmd>Telescope reloader<cr>", desc = "Reload Lua module" },
},
opts = {
defaults = {
-- Default configuration for telescope goes here:
@@ -95,19 +151,6 @@ return {
enabled = true,
},
},
file_browser = {
theme = "ivy",
-- disables netrw and use telescope-file-browser in its place
hijack_netrw = true,
mappings = {
["i"] = {
-- your custom insert mode mappings
},
["n"] = {
-- your custom normal mode mappings
},
},
},
-- ["ui-select"] = {
-- require("telescope.themes").get_dropdown({
-- winblend = 10,
@@ -119,4 +162,24 @@ return {
-- },
},
},
config = function(_, opts)
local telescope = require("telescope")
local actions = require("telescope.actions")
local config = require("telescope.config")
local vimgrep_arguments = vim.deepcopy(config.values.vimgrep_arguments)
vim.list_extend(vimgrep_arguments, { "--hidden", "--glob", "!**/.git/*" })
opts.defaults.vimgrep_arguments = vimgrep_arguments
opts.defaults.mappings = vim.tbl_deep_extend("force", opts.defaults.mappings or {}, {
i = {
["<C-h>"] = actions.results_scrolling_left,
["<C-l>"] = actions.results_scrolling_right,
},
})
telescope.setup(opts)
for _, extension in ipairs({ "color_names", "fzf", "glyph", "noice", "ui-select" }) do
pcall(telescope.load_extension, extension)
end
end,
}
+80 -1
View File
@@ -1,6 +1,52 @@
local terminals = {}
local function toggle(name)
return function()
terminals[name]:toggle()
end
end
return {
"akinsho/toggleterm.nvim",
version = "*",
keys = {
{ "<C-T>", "<cmd>ToggleTerm name=toggleterm<cr>", desc = "Toggle terminal" },
{ "<leader>-", "<cmd>ToggleTerm direction=horizontal<cr>", desc = "Toggle horizontal terminal" },
{ "<leader>|", "<cmd>ToggleTerm direction=vertical<cr>", desc = "Toggle vertical terminal" },
{ "<leader>ob", toggle("btop"), desc = "Open btop" },
{ "<leader>od", toggle("lazydocker"), desc = "Open Lazydocker" },
{
"<leader>oh",
"<cmd>ToggleTerm direction=horizontal name=toggleterm-hori<cr>",
desc = "Open horizontal terminal",
},
{ "<leader>oi", toggle("iotop"), desc = "Open iotop" },
{ "<leader>on", toggle("rmpc"), desc = "Open rmpc" },
{ "<leader>oN", toggle("nvtop"), desc = "Open nvtop" },
{ "<leader>op", toggle("ipython"), desc = "Open IPython" },
{ "<leader>oP", toggle("ipython-full"), desc = "Open full IPython" },
{ "<leader>ot", "<cmd>ToggleTerm name=toggleterm<cr>", desc = "Open terminal" },
{ "<leader>oT", "<cmd>ToggleTerm name=toggleterm-full direction=tab<cr>", desc = "Open full terminal" },
{
"<leader>ov",
"<cmd>ToggleTerm direction=vertical name=toggleterm-vert<cr>",
desc = "Open vertical terminal",
},
{ "<leader>tf", "<cmd>ToggleTerm name=toggleterm<cr>", desc = "Toggle terminal" },
{
"<leader>th",
"<cmd>ToggleTerm direction=horizontal name=toggleterm-hori<cr>",
desc = "Toggle horizontal terminal",
},
{ "<leader>ts", "<cmd>TermSelect<cr>", desc = "Select terminal" },
{ "<leader>tt", "<cmd>ToggleTerm name=toggleterm<cr>", desc = "Toggle terminal" },
{ "<leader>tT", "<cmd>ToggleTerm name=toggleterm-full direction=tab<cr>", desc = "Toggle full terminal" },
{
"<leader>tv",
"<cmd>ToggleTerm direction=vertical name=toggleterm-vert<cr>",
desc = "Toggle vertical terminal",
},
},
opts = {
-- size can be a number or function which is passed the current terminal
size = function(term)
@@ -10,7 +56,6 @@ return {
return vim.o.columns * 0.45
end
end,
open_mapping = { [[<c-t>]] }, -- or { [[<c-\>]], [[<c-¥>]] } if you also use a Japanese keyboard.
-- on_create = fun(t: Terminal), -- function to run when the terminal is first created
-- on_open = fun(t: Terminal), -- function to run when the terminal opens
-- on_close = fun(t: Terminal), -- function to run when the terminal closes
@@ -82,4 +127,38 @@ return {
horizontal_breakpoint = 135,
},
},
config = function(_, opts)
require("toggleterm").setup(opts)
local Terminal = require("toggleterm.terminal").Terminal
local programs = {
btop = { cmd = "/usr/bin/btop", display_name = "btop", direction = "tab", hidden = true },
ipython = { cmd = "ipython", display_name = "ipython", direction = "vertical", hidden = true },
["ipython-full"] = { cmd = "ipython", display_name = "ipython-full", direction = "tab", hidden = true },
iotop = { cmd = "sudo iotop", display_name = "iotop", direction = "tab", hidden = true },
lazydocker = { cmd = "lazydocker", display_name = "lazydocker", direction = "tab", hidden = true },
nvtop = { cmd = "nvtop", display_name = "nvtop", direction = "tab", hidden = true },
rmpc = { cmd = "rmpc", display_name = "rmpc", direction = "tab", hidden = true },
}
for name, program in pairs(programs) do
program.on_stderr = function(_, job, data, process_name)
vim.notify(
("%s encountered an error on job %d\n%s"):format(process_name, job, table.concat(data, "\n")),
vim.log.levels.ERROR
)
end
terminals[name] = Terminal:new(program)
end
local terminal_keys = vim.api.nvim_create_augroup("TerminalKeys", { clear = true })
vim.api.nvim_create_autocmd("TermOpen", {
group = terminal_keys,
pattern = "term://*",
callback = function(args)
vim.keymap.set("t", "<esc>", [[<C-\><C-n>]], { buffer = args.buf })
vim.keymap.set("t", "<C-w>", [[<C-\><C-n><C-w>]], { buffer = args.buf })
end,
})
end,
}
@@ -1 +0,0 @@
return { "tpope/vim-commentary" }
@@ -1,126 +0,0 @@
local notify = require("notify")
local spinner_frames = { "", "", "", "", "", "", "", "", "", "" }
local spinner_len = #spinner_frames -- cache spinner length
local M = {}
local timeout = 2999
-- Helper function to safely call notify
local function safe_notify(msg, level, opts)
local ok, res = pcall(notify, msg, level, opts)
return ok, res
end
function M:init()
local group = vim.api.nvim_create_augroup("CodeCompanionFidgetHooks", {})
vim.api.nvim_create_autocmd({ "User" }, {
pattern = "CodeCompanionRequestStarted",
group = group,
callback = function(request)
local handle = M:create_progress_handle(request)
M:store_progress_handle(request.data.id, handle)
end,
})
vim.api.nvim_create_autocmd({ "User" }, {
pattern = "CodeCompanionRequestFinished",
group = group,
callback = function(request)
local handle = M:pop_progress_handle(request.data.id)
if handle then
M:report_exit_status(handle, request)
handle:finish()
end
end,
})
end
M.handles = {}
function M:store_progress_handle(id, handle)
M.handles[id] = handle
end
function M:pop_progress_handle(id)
local handle = M.handles[id]
M.handles[id] = nil
return handle
end
function M:create_progress_handle(request)
local title = " Requesting assistance"
.. " ("
.. request.data.interaction
.. ") from "
.. request.data.adapter.formatted_name
.. " using "
.. request.data.adapter.model
local idx = 1
local start_time = os.time()
local notification_id =
notify(spinner_frames[idx] .. " In progress (" .. "0s" .. ")...", "info", { title = title, timeout = false })
local handle = { notification_id = notification_id, title = title, finished = false }
local timer = vim.loop.new_timer()
timer:start(
0,
100,
vim.schedule_wrap(function()
if handle.finished then
return
end -- stop updating if finished
idx = idx % spinner_len + 1
local elapsed = os.difftime(os.time(), start_time)
local opts = { replace = handle.notification_id, title = title, timeout = false }
local ok, new_id = safe_notify(spinner_frames[idx] .. " In progress (" .. elapsed .. "s)...", "info", opts)
if ok then
handle.notification_id = new_id
else
handle.notification_id = notify(
spinner_frames[idx] .. " In progress (" .. elapsed .. "s)...",
"info",
{ title = title, timeout = false }
)
end
end)
)
handle.timer = timer
handle.finish = function()
handle.finished = true -- mark as finished to abort future updates
if handle.timer then
handle.timer:stop()
handle.timer:close()
handle.timer = nil
end
end
return handle
end
function M:report_exit_status(handle, request)
local title = handle.title
or (
" Requesting assistance"
.. " ("
.. request.data.strategy
.. ") from "
.. request.data.adapter.formatted_name
.. " using "
.. request.data.adapter.model
)
local function report(msg, level)
local opts = { replace = handle.notification_id, title = title, timeout = timeout }
local ok = safe_notify(msg, level, opts)
if not ok then
notify(msg, level, { title = title, timeout = timeout })
end
end
if request.data.status == "success" then
report("Completed", "info")
elseif request.data.status == "error" then
report(" Error", "error")
else
report("󰜺 Cancelled", "warn")
end
end
return M
@@ -1,18 +1,16 @@
-- lua/plugins/codecompanion/fidget-spinner.lua
local progress = require("fidget.progress")
local M = {}
function M:init()
local group = vim.api.nvim_create_augroup("CodeCompanionFidgetHooks", {})
function M.init()
local group = vim.api.nvim_create_augroup("CodeCompanionFidgetHooks", { clear = true })
vim.api.nvim_create_autocmd({ "User" }, {
pattern = "CodeCompanionRequestStarted",
group = group,
callback = function(request)
local handle = M:create_progress_handle(request)
M:store_progress_handle(request.data.id, handle)
local handle = M.create_progress_handle(request)
M.store_progress_handle(request.data.id, handle)
end,
})
@@ -20,9 +18,9 @@ function M:init()
pattern = "CodeCompanionRequestFinished",
group = group,
callback = function(request)
local handle = M:pop_progress_handle(request.data.id)
local handle = M.pop_progress_handle(request.data.id)
if handle then
M:report_exit_status(handle, request)
M.report_exit_status(handle, request)
handle:finish()
end
end,
@@ -31,27 +29,28 @@ end
M.handles = {}
function M:store_progress_handle(id, handle)
function M.store_progress_handle(id, handle)
M.handles[id] = handle
end
function M:pop_progress_handle(id)
function M.pop_progress_handle(id)
local handle = M.handles[id]
M.handles[id] = nil
return handle
end
function M:create_progress_handle(request)
function M.create_progress_handle(request)
local adapter = request.data.adapter
return progress.handle.create({
title = " Requesting assistance (" .. request.data.adapter.model .. ")",
title = " Requesting assistance (" .. (adapter.model or "default") .. ")",
message = "In progress...",
lsp_client = {
name = M:llm_role_title(request.data.adapter.name),
name = M.llm_role_title(adapter),
},
})
end
function M:llm_role_title(adapter)
function M.llm_role_title(adapter)
local parts = {}
table.insert(parts, adapter.formatted_name)
if adapter.model and adapter.model ~= "" then
@@ -60,7 +59,7 @@ function M:llm_role_title(adapter)
return table.concat(parts, " ")
end
function M:report_exit_status(handle, request)
function M.report_exit_status(handle, request)
if request.data.status == "success" then
handle.message = "Completed"
elseif request.data.status == "error" then
@@ -1,3 +0,0 @@
return {
require("utils.extensions.telescope"),
}
@@ -1,7 +0,0 @@
local ts = require("telescope")
-- ts.load_extension("fzf")
ts.load_extension("color_names")
ts.load_extension("file_browser")
ts.load_extension("glyph")
ts.load_extension("ui-select")
ts.load_extension("noice")
@@ -42,16 +42,4 @@ function M.git_paste_prompt()
end)
end
--- Sets up the git-paste module.
---
--- The module expects an optional configuration table:
--- { telescope_key = "<leader>pg" } (or any other keymap you prefer)
---
---@param opts table|nil
function M.setup(opts)
opts = opts or {}
local telescope_key = opts.telescope_key or "<leader>pg"
vim.keymap.set("n", telescope_key, M.git_paste_prompt, { desc = "Git Paste: paste content from git raw URL" })
end
return M
@@ -1,4 +0,0 @@
return {
require("utils.functions.git_paste"),
require("utils.functions.mkdir_under_cursor"),
}
@@ -1,5 +1,4 @@
local M = {}
vim.notify = require("notify")
function M.mkdir_under_cursor()
local word
@@ -19,18 +18,16 @@ function M.mkdir_under_cursor()
-- Remove quotes if present
word = word:gsub("^[\"']", ""):gsub("[\"']$", "")
-- Check if directory exists
local stat = vim.loop.fs_stat(word)
local stat = vim.uv.fs_stat(word)
if not stat then
-- Create directory (recursive)
vim.loop.fs_mkdir(word, 493) -- 493 = 0755 in decimal
vim.notify("Directory created: " .. word, vim.log.levels.INFO)
if vim.fn.mkdir(word, "p") == 1 then
vim.notify("Directory created: " .. word, vim.log.levels.INFO)
else
vim.notify("Failed to create directory: " .. word, vim.log.levels.ERROR)
end
else
vim.notify("Directory already exists: " .. word, vim.log.levels.WARN)
end
end
function M.setup(opts)
return M.mkdir_under_cursor
end
return M
+6 -5
View File
@@ -1,5 +1,3 @@
vim.notify = require("notify")
local client_notifs = {}
local function get_notif_data(client_id, token)
@@ -20,7 +18,7 @@ local function update_spinner(client_id, token)
local notif_data = get_notif_data(client_id, token)
if notif_data.spinner then
local new_spinner = (notif_data.spinner + 1) % #spinner_frames
local new_spinner = (notif_data.spinner % #spinner_frames) + 1
notif_data.spinner = new_spinner
notif_data.notification = vim.notify("", nil, {
@@ -42,10 +40,12 @@ end
local function format_message(message, percentage)
return (percentage and percentage .. "%\t" or "") .. (message or "")
end
local hyprland_lsp = vim.api.nvim_create_augroup("HyprlandLsp", { clear = true })
vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, {
group = hyprland_lsp,
pattern = { "*.hl", "hypr*.conf" },
callback = function(event)
-- print(string.format("starting hyprls for %s", vim.inspect(event)))
callback = function()
vim.lsp.start({
name = "hyprlang",
cmd = { "hyprls" },
@@ -94,6 +94,7 @@ vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, {
})
notif_data.spinner = nil
client_notifs[client_id][result.token] = nil
end
end,
},
@@ -1,19 +0,0 @@
local M = {}
local map = vim.keymap.set
local opts = { noremap = true, silent = false }
--- Set keybindings from a table of mappings.
--- @param bindings table A list of keybinding mappings.
--- Each mapping should be a table with the following keys:
--- - mode: string, the mode in which the keybinding applies (e.g., 'n', 'i', 'v').
--- - key: string, the key to bind.
--- - cmd: string, the command to execute when the key is pressed.
--- - opts: table, optional, additional options for the keybinding (default:
function M.set_keybindings(bindings)
for _, binding in ipairs(bindings) do
map(binding.mode, binding.key, binding.cmd, binding.opts or opts)
end
return bindings
end
return M
@@ -1,51 +0,0 @@
local M = {}
local whichkey = require("which-key")
vim.notify = require("notify")
---Helper function to add mappings to which-key
---@param mappings table List of mappings to add
---@param group table Group to add mappings to (optional)
---@return nil
---@usage addToWhichKey(mappings, group)
---@example addToWhichKey({{key = "n", cmd = "next", mode = "n", desc = "Next Line", group = "Navigation"}, {key = "t", group = "example"})
function M.addToWhichKey(mappings, group)
if group then
whichkey.add({ group.key, group = group.group })
end
if not mappings and not group then
vim.notify("Error: Mappings is nil", "error")
return
elseif not mappings and group then
return
end
local wk_mappings = {}
for _, mapping in ipairs(mappings) do
wk_mappings = {}
if not mapping.key or mapping.key == "" then
vim.notify("Error: Key is empty or nil", "error")
return
end
if not mapping.cmd or mapping.cmd == "" then
vim.notify("Error: Command is empty or nil for key: " .. mapping.key, "error")
return
end
if not mapping.mode or mapping.mode == "" then
vim.notify("Error: Mode is empty or nil for key: " .. mapping.key, "error")
return
end
wk_mappings[1] = mapping.key
wk_mappings[2] = mapping.cmd
wk_mappings.mode = mapping.mode or "n"
wk_mappings.desc = mapping.desc
if mapping.group then
wk_mappings.group = mapping.group
end
whichkey.add(wk_mappings)
end
end
return M
-4
View File
@@ -1,4 +0,0 @@
return {
require('utils.keymaps.converters.whichkey'),
require('utils.keymaps.converters.from_table'),
}
@@ -1,50 +0,0 @@
local telescope = require("telescope")
local telescopeConfig = require("telescope.config")
local actions = require("telescope.actions")
local M = {}
function M.find_and_paste_image()
local telescope = require("telescope.builtin")
local actions = require("telescope.actions")
local action_state = require("telescope.actions.state")
telescope.find_files({
attach_mappings = function(_, map)
local function embed_image(prompt_bufnr)
local entry = action_state.get_selected_entry()
local filepath = entry[1]
actions.close(prompt_bufnr)
local img_clip = require("img-clip")
img_clip.paste_image(nil, filepath)
end
map("i", "<CR>", embed_image)
map("n", "<CR>", embed_image)
return true
end,
})
end
function M.setup()
-- Clone the default Telescope configuration
local vimgrep_arguments = { unpack(telescopeConfig.values.vimgrep_arguments) }
-- I want to search in hidden/dot files.
table.insert(vimgrep_arguments, "--hidden")
-- I don't want to search in the `.git` directory.
table.insert(vimgrep_arguments, "--glob")
table.insert(vimgrep_arguments, "!**/.git/*")
vim.tbl_deep_extend("force", telescopeConfig.values, {
mappings = {
i = {
["<C-h>"] = actions.results_scrolling_left,
["<C-l>"] = actions.results_scrolling_right,
},
},
})
end
return M
-6
View File
@@ -1,6 +0,0 @@
local M = {}
M.term_factory = require("utils.terminal.term_factory").term_factory
M.term_toggle = require("utils.terminal.toggle").term_toggle
return M
@@ -1,12 +0,0 @@
local Terminal = require("toggleterm.terminal").Terminal
local notify = require("notify")
local M = {}
function M.term_factory(cfg)
cfg["on_stderr"] = function(_, job, data, name)
notify(name .. " encountered an error on job: " .. job .. "\nData: " .. data, "error")
end
return Terminal:new(cfg)
end
return M
@@ -1,9 +0,0 @@
local M = {}
function M.term_toggle(term)
if term then
term:toggle()
end
end
return M
@@ -1,15 +0,0 @@
local parser_config = require("nvim-treesitter.parsers").get_parser_configs()
parser_config.hyprlang = {
install_info = {
url = "~/github/tree-sitter-hyprlang", -- local path or git repo
files = { "src/parser.c" }, -- note that some parsers also require src/scanner.c or src/scanner.cc
-- optional entries:
branch = "main", -- default branch in case of git repo if different from master
generate_requires_npm = false, -- if stand-alone parser without npm dependencies
requires_generate_from_grammar = true, -- if folder contains pre-generated src/parser.c
},
filetype = "conf", -- if filetype does not match the parser name
}
vim.filetype.add({
pattern = { [".*/hypr/.*%.conf"] = "hyprlang" },
})