diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e033bc6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +lazy-lock.json diff --git a/lua/plugins/user.lua b/lua/plugins/user.lua index 206b5d4..b03e345 100644 --- a/lua/plugins/user.lua +++ b/lua/plugins/user.lua @@ -7,19 +7,17 @@ ---@type LazySpec return { - -- == Examples of Adding Plugins == + -- disable plugins + -- disable neo-tree + { "nvim-neo-tree/neo-tree.nvim", enabled = false }, + -- override plugin settings "andweeb/presence.nvim", { "ray-x/lsp_signature.nvim", event = "BufRead", config = function() require("lsp_signature").setup() end, }, - - "lambdalisue/vim-suda", - "folke/lsp-colors.nvim", - "dstein64/nvim-scrollview", - -- == Examples of Overriding Plugins == -- customize dashboard options @@ -92,283 +90,20 @@ return { end, }, - -- { - -- "saghen/blink.cmp", - -- -- -- optional: provides snippets for the snippet source - -- -- dependencies = { "rafamadriz/friendly-snippets" }, - -- -- - -- -- -- use a release tag to download pre-built binaries - -- -- version = "1.*", - -- -- -- AND/OR build from source, requires nightly: https://rust-lang.github.io/rustup/concepts/channels.html#working-with-nightly-rust - -- -- -- build = "cargo build --release", - -- -- -- If you use nix, you can build from source using latest nightly rust with: - -- -- -- build = 'nix run .#build-plugin', - -- -- - -- ---@module 'blink.cmp' - -- ---@type blink.cmp.Config - -- opts = { - -- -- 'default' (recommended) for mappings similar to built-in completions (C-y to accept) - -- -- 'super-tab' for mappings similar to vscode (tab to accept) - -- -- 'enter' for enter to accept - -- -- 'none' for no mappings - -- keymap = { - -- -- set to 'none' to disable the 'default' preset - -- preset = "super-tab", - -- - -- [""] = { "select_prev", "fallback" }, - -- [""] = { "select_next", "fallback" }, - -- [""] = { "hide", "fallback" }, - -- - -- -- disable a keymap from the preset - -- [""] = {}, - -- [""] = {}, - -- [""] = {}, - -- - -- -- show with a list of providers - -- -- [""] = { - -- -- function(cmp) - -- -- cmp.show({ providers = { "snippets" } }) - -- -- end, - -- -- }, - -- - -- -- control whether the next command will be run when using a function - -- -- [""] = { - -- -- function(cmp) - -- -- if some_condition then - -- -- return - -- -- end -- runs the next command - -- -- return true -- doesn't run the next command - -- -- end, - -- -- "select_next", - -- -- }, - -- }, - -- - -- -- appearance = { - -- -- -- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font' - -- -- -- Adjusts spacing to ensure icons are aligned - -- -- nerd_font_variant = "mono", - -- -- - -- -- -- highlight_ns = vim.api.nvim_create_namespace("nvim-cmp"), - -- -- -- Sets the fallback highlight groups to nvim-cmp's highlight groups - -- -- -- Useful for when your theme doesn't support blink.cmp - -- -- -- Will be removed in a future release - -- -- - -- -- use_nvim_cmp_as_default = true, - -- -- }, - -- - -- -- (Default) Only show the documentation popup when manually triggered - -- completion = { - -- keyword = { range = "full" }, - -- -- trigger = { - -- -- When true, will prefetch the completion items when entering insert mode - -- -- prefetch_on_insert = false, - -- - -- -- When false, will not show the completion window automatically when in a snippet - -- -- show_in_snippet = true, - -- - -- -- When true, will show the completion window after typing any of alphanumerics, `-` or `_` - -- -- show_on_keyword = true, - -- - -- -- When true, will show the completion window after typing a trigger character - -- -- show_on_trigger_character = true, - -- - -- -- LSPs can indicate when to show the completion window via trigger characters - -- -- however, some LSPs (i.e. tsserver) return characters that would essentially - -- -- always show the window. We block these by default. - -- -- show_on_blocked_trigger_characters = { " ", "\n", "\t" }, - -- -- You can also block per filetype with a function: - -- -- show_on_blocked_trigger_characters = function(ctx) - -- -- if vim.bo.filetype == "markdown" then - -- -- return { " ", "\n", "\t", ".", "/", "(", "[" } - -- -- end - -- -- return { " ", "\n", "\t" } - -- -- end, - -- - -- -- When both this and show_on_trigger_character are true, will show the completion window - -- -- when the cursor comes after a trigger character after accepting an item - -- -- show_on_accept_on_trigger_character = true, - -- - -- -- When both this and show_on_trigger_character are true, will show the completion window - -- -- when the cursor comes after a trigger character when entering insert mode - -- -- show_on_insert_on_trigger_character = true, - -- - -- -- List of trigger characters (on top of `show_on_blocked_trigger_characters`) that won't trigger - -- -- the completion window when the cursor comes after a trigger character when - -- -- entering insert mode/accepting an item - -- -- show_on_x_blocked_trigger_characters = { "'", '"', "(" }, - -- -- or a function, similar to show_on_blocked_trigger_character - -- -- }, - -- list = { - -- -- Maximum number of items to display - -- max_items = 128, - -- - -- selection = { - -- -- When `true`, will automatically select the first item in the completion list - -- preselect = true, - -- -- preselect = function(ctx) return vim.bo.filetype ~= 'markdown' end, - -- - -- -- When `true`, inserts the completion item automatically when selecting it - -- -- You may want to bind a key to the `cancel` command (default ) when using this option, - -- -- which will both undo the selection and hide the completion menu - -- auto_insert = false, - -- -- auto_insert = function(ctx) return vim.bo.filetype ~= 'markdown' end - -- }, - -- - -- cycle = { - -- -- When `true`, calling `select_next` at the _bottom_ of the completion list - -- -- will select the _first_ completion item. - -- from_bottom = true, - -- -- When `true`, calling `select_prev` at the _top_ of the completion list - -- -- will select the _last_ completion item. - -- from_top = true, - -- }, - -- }, - -- - -- -- documentation = { - -- -- auto_show = false, - -- -- auto_show_delay_ms = 230, - -- -- update_delay_ms = 50, - -- -- treesitter_highlighting = false, - -- -- draw = function(opts) opts.default_implementation() end, - -- -- window = { - -- -- min_width = 16, - -- -- max_width = 80, - -- -- max_height = 24, - -- -- border = "padded", -- Defaults to `vim.o.winborder` on nvim 0.11+ or 'padded' when not defined/<=0.10 - -- -- winblend = 0, - -- -- winhighlight = "Normal:BlinkCmpDoc,FloatBorder:BlinkCmpDocBorder,EndOfBuffer:BlinkCmpDoc", - -- -- -- Note that the gutter will be disabled when border ~= 'none' - -- -- scrollbar = true, - -- -- }, - -- -- }, - -- -- ghost_text = { - -- -- enabled = true, - -- -- show_with_selection = true, - -- -- show_without_selection = false, - -- -- show_with_menu = true, - -- -- show_without_menu = false, - -- -- }, - -- -- ─────────────────────────────────< mini-icons config >────────────────────────────── - -- -- menu = { - -- -- enabled = true, - -- -- min_width = 16, - -- -- max_height = 10, - -- -- border = nil, -- Defaults to `vim.o.winborder` on nvim 0.11+ - -- -- winblend = 0, - -- -- winhighlight = "Normal:BlinkCmpMenu,FloatBorder:BlinkCmpMenuBorder,CursorLine:BlinkCmpMenuSelection,Search:None", - -- -- -- Keep the cursor X lines away from the top/bottom of the window - -- -- scrolloff = 2, - -- -- -- Note that the gutter will be disabled when border ~= 'none' - -- -- scrollbar = true, - -- -- -- Which directions to show the window, - -- -- -- falling back to the next direction when there's not enough space - -- -- direction_priority = { "s", "n" }, - -- -- - -- -- -- Whether to automatically show the window when new completion items are available - -- -- auto_show = true, - -- -- - -- -- draw = { - -- -- -- Aligns the keyword you've typed to a component in the menu - -- -- align_to = "label", -- or 'none' to disable, or 'cursor' to align to the cursor - -- -- -- Left and right padding, optionally { left, right } for different padding on each side - -- -- padding = 1, - -- -- -- Gap between columns - -- -- gap = 2, - -- -- -- Use treesitter to highlight the label text for the given list of sources - -- -- -- treesitter = {}, - -- -- treesitter = { "lsp" }, - -- -- columns = { { "kind_icon" }, { "label", "label_description", gap = 1 } }, - -- -- components = { - -- -- label = { - -- -- text = function(ctx) return require("colorful-menu").blink_components_text(ctx) end, - -- -- highlight = function(ctx) return require("colorful-menu").blink_components_highlight(ctx) end, - -- -- }, - -- -- kind_icon = { - -- -- text = function(ctx) - -- -- local kind_icon, _, _ = require("mini.icons").get("lsp", ctx.kind) - -- -- return kind_icon - -- -- end, - -- -- -- (optional) use highlights from mini.icons - -- -- highlight = function(ctx) - -- -- local _, hl, _ = require("mini.icons").get("lsp", ctx.kind) - -- -- return hl - -- -- end, - -- -- }, - -- -- - -- -- -- kind = { - -- -- -- -- (optional) use highlights from mini.icons - -- -- -- highlight = function(ctx) - -- -- -- local _, hl, _ = require("mini.icons").get("lsp", ctx.kind) - -- -- -- return hl - -- -- -- end, - -- -- -- }, - -- -- - -- -- label_description = { - -- -- width = { max = 30 }, - -- -- text = function(ctx) return ctx.label_description end, - -- -- highlight = "BlinkCmpLabelDescription", - -- -- }, - -- -- - -- -- source_name = { - -- -- width = { max = 30 }, - -- -- text = function(ctx) return ctx.source_name end, - -- -- highlight = "BlinkCmpSource", - -- -- }, - -- -- - -- -- source_id = { - -- -- width = { max = 30 }, - -- -- text = function(ctx) return ctx.source_id end, - -- -- highlight = "BlinkCmpSource", - -- -- }, - -- -- }, - -- -- }, - -- -- }, - -- }, - -- - -- -- Default list of enabled providers defined so that you can extend it - -- -- elsewhere in your config, without redefining it, due to `opts_extend` - -- sources = { - -- default = { "lsp", "path", "snippets", "buffer" }, - -- }, - -- - -- -- snippets = { preset = "default" | "luasnip" }, - -- - -- -- (Default) Rust fuzzy matcher for typo resistance and significantly better performance - -- -- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation, - -- -- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"` - -- -- - -- -- See the fuzzy documentation for more information - -- fuzzy = { - -- implementation = "prefer_rust", - -- - -- -- Frecency tracks the most recently/frequently used items and boosts the score of the item - -- -- Note, this does not apply when using the Lua implementation. - -- use_frecency = true, - -- - -- -- Proximity bonus boosts the score of items matching nearby words - -- -- Note, this does not apply when using the Lua implementation. - -- use_proximity = true, - -- - -- -- UNSAFE!! When enabled, disables the lock and fsync when writing to the frecency database. This should only be used on unsupported platforms (i.e. alpine termux) - -- -- Note, this does not apply when using the Lua implementation. - -- use_unsafe_no_lock = false, - -- sorts = { - -- -- (optionally) always prioritize exact matches - -- -- 'exact', - -- - -- -- pass a function for custom behavior - -- -- function(item_a, item_b) - -- -- return item_a.score > item_b.score - -- -- end, - -- - -- "score", - -- "sort_text", - -- }, - -- }, - -- }, - -- opts_extend = { "sources.default" }, - -- }, + -- set new/missing plugins + "lambdalisue/vim-suda", + "folke/lsp-colors.nvim", + "dstein64/nvim-scrollview", + -- vim maximizer + { + "szw/vim-maximizer", + keys = { + { "", "MaximizerToggle", desc = "Maximize/minimize a split" }, + }, + }, + + -- snippets creation and management with scissors { { "chrisgrieser/nvim-scissors", @@ -382,7 +117,148 @@ return { vim.keymap.set("n", "sm", ":ScissorsEditSnippet"), vim.keymap.set("v", "sa", ":ScissorsAddNewSnippet"), }, - -- -@type LazySpec + + -- mini plugins + { + -- mini-ai for a and i selections or other --> vin" for visual in next "" + { + "echasnovski/mini.ai", + version = "false", + opts = {}, + }, + + -- ─< mini-surround for surrounding words or lines with "" or () or '' etc.. >────────── + { + "echasnovski/mini.surround", + version = "false", + opts = {}, + }, + + -- ─< miniIcons >─────────────────────────────────────────────────────────────────────── + { + "echasnovski/mini.icons", + version = "false", + opts = {}, + lazy = true, + specs = { + { "nvim-tree/nvim-web-devicons", enabled = false, optional = true }, + }, + init = function() + package.preload["nvim-web-devicons"] = function() + require("mini.icons").mock_nvim_web_devicons() + return package.loaded["nvim-web-devicons"] + end + end, + }, + }, + + -- ╭─────────────────────────────────────╮ + -- │ ╭───────────────╮ │ + -- │ │ comment boxes │<- yes, those ones │ + -- │ ╰───────────────╯ │ + -- ╰─────────────────────────────────────╯ + { + "LudoPinelli/comment-box.nvim", + lazy = false, + opts = { + comment_style = "line", + doc_width = 90, -- width of the document + box_width = 75, -- width of the boxes + line_width = 120, -- width of the lines + }, + -- ───────────────────────────────< keymaps - commentboxes >─────────────────────────────── + vim.keymap.set( + "n", + "cd", + "CBd", + { noremap = true, silent = true, desc = "[c]ommentbox [d]elete" } + ), + vim.keymap.set( + "v", + "cd", + "CBd", + { noremap = true, silent = true, desc = "[c]ommentbox [d]elete" } + ), + + vim.keymap.set( + "n", + "cy", + "CBy", + { noremap = true, silent = true, desc = "[y]ank content of Commentbox" } + ), + vim.keymap.set( + "v", + "cy", + "CBy", + { noremap = true, silent = true, desc = "[y]ank content of Commentbox" } + ), + + vim.keymap.set( + "n", + "cb", + "CBlabox1", + { noremap = true, silent = true, desc = "[c]reate comment [b]ox" } + ), + vim.keymap.set( + "v", + "cb", + "CBlabox1", + { noremap = true, silent = true, desc = "[c]reate comment [b]ox" } + ), + vim.keymap.set( + "n", + "cB", + "CBcabox1", + { noremap = true, silent = true, desc = "[c]reate comment [b]ox (centered)" } + ), + + vim.keymap.set( + "v", + "cB", + "CBcabox1", + { noremap = true, silent = true, desc = "[c]reate comment [b]ox (centered)" } + ), + vim.keymap.set( + "n", + "cc", + "CBllbox14", + { noremap = true, silent = true, desc = "[c]reate [c]omment" } + ), + vim.keymap.set( + "v", + "cc", + "CBllbox14", + { noremap = true, silent = true, desc = "[c]reate [c]omment" } + ), + vim.keymap.set( + "n", + "cC", + "CBclbox14", + { noremap = true, silent = true, desc = "[c]reate [c]omment (C)entered" } + ), + vim.keymap.set( + "v", + "cC", + "CBclbox14", + { noremap = true, silent = true, desc = "[c]reate [c]omment (C)entered" } + ), + + vim.keymap.set( + "n", + "cl", + "CBllline8", + { noremap = true, silent = true, desc = "[c]reate comment [l]ine" } + ), + vim.keymap.set( + "n", + "cL", + "CBlcline8", + { noremap = true, silent = true, desc = "[c]reate comment [L]ine" } + ), + }, + + -- yazi file manager + ---@type LazySpec { "mikavilpas/yazi.nvim", event = "VeryLazy", @@ -416,4 +292,31 @@ return { }, }, }, + + -- ╭──────────────────────────────╮ + -- │ renaming (also project wide) │ + -- ╰──────────────────────────────╯ + { + "MagicDuck/grug-far.nvim", + opts = { headerMaxWidth = 80 }, + cmd = "GrugFar", + -- ────────────────────────────────────< keybindings >───────────────────────────────── + keys = { + { + "sr", + function() + local grug = require "grug-far" + local ext = vim.bo.buftype == "" and vim.fn.expand "%:e" + grug.grug_far { + transient = true, + prefills = { + filesFilter = ext and ext ~= "" and "*." .. ext or nil, + }, + } + end, + mode = { "n", "v" }, + desc = "Search and Replace", + }, + }, + }, }