From 9e5256058d68fe49b5058277c6c4784c677817cc Mon Sep 17 00:00:00 2001 From: Wojciech Pietraszuk Date: Fri, 9 May 2025 17:55:33 +0200 Subject: [PATCH] Added more plugins --- README.md | 2 +- init.lua | 100 +++++++++++++++++++---------- lua/custom/plugins/autopairs.lua | 28 ++++++++ lua/custom/plugins/flash.lua | 14 ++++ lua/custom/plugins/init.lua | 6 +- lua/custom/plugins/lazygit.lua | 19 ++++++ lua/custom/plugins/wilder.lua | 56 ++++++++++++++++ lua/kickstart/plugins/neo-tree.lua | 77 ++++++++++++++++++++-- 8 files changed, 260 insertions(+), 42 deletions(-) create mode 100644 lua/custom/plugins/autopairs.lua create mode 100644 lua/custom/plugins/flash.lua create mode 100644 lua/custom/plugins/lazygit.lua create mode 100644 lua/custom/plugins/wilder.lua diff --git a/README.md b/README.md index 8ace8b9b..5784d988 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ too - it's ignored in the kickstart repo to make maintenance easier, but it's
Linux and Mac ```sh -git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim +git clone https://github.com/wojtek0123/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim ```
diff --git a/init.lua b/init.lua index 776c6873..141b4714 100644 --- a/init.lua +++ b/init.lua @@ -154,7 +154,7 @@ vim.opt.inccommand = 'split' vim.opt.cursorline = true -- Minimal number of screen lines to keep above and below the cursor. -vim.opt.scrolloff = 10 +vim.opt.scrolloff = 99999999 -- if performing an operation that would fail due to unsaved changes in the buffer (like `:q`), -- instead raise a dialog asking if you wish to save the current file(s) @@ -399,11 +399,19 @@ require('lazy').setup({ -- You can put your default mappings / updates / etc. in here -- All the info you're looking for is in `:help telescope.setup()` -- - -- defaults = { - -- mappings = { - -- i = { [''] = 'to_fuzzy_refine' }, - -- }, - -- }, + defaults = { + mappings = { + i = { [''] = 'to_fuzzy_refine' }, + n = { + -- I'm used to closing buffers with "d" from bufexplorer + ['d'] = require('telescope.actions').delete_buffer, + -- I'm also used to quitting bufexplorer with q instead of escape + ['q'] = require('telescope.actions').close, + ['v'] = require('telescope.actions').select_vertical, + ['h'] = require('telescope.actions').select_horizontal, + }, + }, + }, -- pickers = {} extensions = { ['ui-select'] = { @@ -827,7 +835,9 @@ require('lazy').setup({ -- : Toggle signature help -- -- See :h blink-cmp-config-keymap for defining your own keymap - preset = 'default', + preset = 'enter', + [''] = { 'select_prev', 'fallback' }, + [''] = { 'select_next', 'fallback' }, -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps @@ -868,25 +878,13 @@ require('lazy').setup({ }, }, - { -- You can easily change to a different colorscheme. - -- Change the name of the colorscheme plugin below, and then - -- change the command in the config to whatever the name of that colorscheme is. - -- - -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`. - 'folke/tokyonight.nvim', - priority = 1000, -- Make sure to load this before all the other start plugins. + { + 'catppuccin/nvim', + lazy = false, + name = 'catppuccin', + priority = 1000, config = function() - ---@diagnostic disable-next-line: missing-fields - require('tokyonight').setup { - styles = { - comments = { italic = false }, -- Disable italics in comments - }, - } - - -- Load the colorscheme here. - -- Like many other themes, this one has different styles, and you could load - -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'. - vim.cmd.colorscheme 'tokyonight-night' + vim.cmd.colorscheme 'catppuccin-frappe' end, }, @@ -916,7 +914,41 @@ require('lazy').setup({ -- and try some other statusline plugin local statusline = require 'mini.statusline' -- set use_icons to true if you have a Nerd Font - statusline.setup { use_icons = vim.g.have_nerd_font } + statusline.setup { use_icons = true } + + local function get_winbar_path() + local full_path = vim.fn.expand '%:p' + return full_path:gsub(vim.fn.expand '$HOME', '~') + end + -- Function to get the number of open buffers using the :ls command + local function get_buffer_count() + local buffers = vim.fn.execute 'ls' + local count = 0 + -- Match only lines that represent buffers, typically starting with a number followed by a space + for line in string.gmatch(buffers, '[^\r\n]+') do + if string.match(line, '^%s*%d+') then + count = count + 1 + end + end + return count + end + -- Function to update the winbar + local function update_winbar() + local home_replaced = get_winbar_path() + local buffer_count = get_buffer_count() + + local path = '%#WinBar2#(' .. buffer_count .. ') ' .. '%#WinBar1#' .. home_replaced .. '%*%=%#WinBar2#' + + -- Override the section_filename function to disable file path + ---@diagnostic disable-next-line: duplicate-set-field + statusline.section_filename = function() + return path + end + end + -- Autocmd to update the winbar on BufEnter and WinEnter events + vim.api.nvim_create_autocmd({ 'BufEnter', 'WinEnter' }, { + callback = update_winbar, + }) -- You can configure sections in the statusline by overriding their -- default behavior. For example, here we set the section for @@ -944,9 +976,9 @@ require('lazy').setup({ -- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules. -- If you are experiencing weird indenting issues, add the language to -- the list of additional_vim_regex_highlighting and disabled languages for indent. - additional_vim_regex_highlighting = { 'ruby' }, + additional_vim_regex_highlighting = false, }, - indent = { enable = true, disable = { 'ruby' } }, + indent = { enable = true }, }, -- There are additional nvim-treesitter modules that you can use to interact -- with nvim-treesitter. You should go explore a few and see what interests you: @@ -966,17 +998,17 @@ require('lazy').setup({ -- Uncomment any of the lines below to enable them (you will need to restart nvim). -- -- require 'kickstart.plugins.debug', - -- require 'kickstart.plugins.indent_line', - -- require 'kickstart.plugins.lint', - -- require 'kickstart.plugins.autopairs', - -- require 'kickstart.plugins.neo-tree', - -- require 'kickstart.plugins.gitsigns', -- adds gitsigns recommend keymaps + require 'kickstart.plugins.indent_line', + require 'kickstart.plugins.lint', + require 'kickstart.plugins.autopairs', + require 'kickstart.plugins.neo-tree', + require 'kickstart.plugins.gitsigns', -- adds gitsigns recommend keymaps -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` -- This is the easiest way to modularize your config. -- -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. - -- { import = 'custom.plugins' }, + { import = 'custom.plugins' }, -- -- For additional information with loading, sourcing and examples see `:help lazy.nvim-🔌-plugin-spec` -- Or use telescope! diff --git a/lua/custom/plugins/autopairs.lua b/lua/custom/plugins/autopairs.lua new file mode 100644 index 00000000..00421999 --- /dev/null +++ b/lua/custom/plugins/autopairs.lua @@ -0,0 +1,28 @@ +return { + 'windwp/nvim-autopairs', + event = 'InsertEnter', + dependencies = { + 'hrsh7th/nvim-cmp', + }, + config = function() + local autopairs = require 'nvim-autopairs' + + autopairs.setup { + check_ts = true, -- enable treesitter + ts_config = { + lua = { 'string' }, -- don't add pairs in lua string treesitter nodes + javascript = { 'template_string' }, -- don't add pairs in javscript template_string treesitter nodes + java = false, -- don't check treesitter on java + }, + } + + -- import nvim-autopairs completion functionality + local cmp_autopairs = require 'nvim-autopairs.completion.cmp' + + -- import nvim-cmp plugin (completions plugin) + local cmp = require 'cmp' + + -- make autopairs and completion work together + cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done()) + end, +} diff --git a/lua/custom/plugins/flash.lua b/lua/custom/plugins/flash.lua new file mode 100644 index 00000000..224516c7 --- /dev/null +++ b/lua/custom/plugins/flash.lua @@ -0,0 +1,14 @@ +return { + 'folke/flash.nvim', + event = 'VeryLazy', + ---@type Flash.Config + opts = {}, + -- stylua: ignore + keys = { + { "gs", mode = { "n", "x", "o" }, function() require("flash").jump() end, desc = "Flash" }, + { "gS", mode = { "n", "x", "o" }, function() require("flash").treesitter() end, desc = "Flash Treesitter" }, + { "r", mode = "o", function() require("flash").remote() end, desc = "Remote Flash" }, + { "R", mode = { "o", "x" }, function() require("flash").treesitter_search() end, desc = "Treesitter Search" }, + { "", mode = { "c" }, function() require("flash").toggle() end, desc = "Toggle Flash Search" }, + }, +} diff --git a/lua/custom/plugins/init.lua b/lua/custom/plugins/init.lua index be0eb9d8..6fdb9e03 100644 --- a/lua/custom/plugins/init.lua +++ b/lua/custom/plugins/init.lua @@ -2,4 +2,8 @@ -- I promise not to create any merge conflicts in this directory :) -- -- See the kickstart.nvim README for more information -return {} +return { + require 'custom.plugins.flash', + require 'custom.plugins.autopairs', + require 'custom.plugins.wilder', +} diff --git a/lua/custom/plugins/lazygit.lua b/lua/custom/plugins/lazygit.lua new file mode 100644 index 00000000..0bf4956d --- /dev/null +++ b/lua/custom/plugins/lazygit.lua @@ -0,0 +1,19 @@ +return { + 'kdheepak/lazygit.nvim', + cmd = { + 'LazyGit', + 'LazyGitConfig', + 'LazyGitCurrentFile', + 'LazyGitFilter', + 'LazyGitFilterCurrentFile', + }, + -- optional for floating window border decoration + dependencies = { + 'nvim-lua/plenary.nvim', + }, + -- setting the keybinding for LazyGit with 'keys' is recommended in + -- order to load the plugin when the command is run for the first time + keys = { + { 'lg', 'LazyGit', desc = 'Open [L]azy[G]it' }, + }, +} diff --git a/lua/custom/plugins/wilder.lua b/lua/custom/plugins/wilder.lua new file mode 100644 index 00000000..258891e8 --- /dev/null +++ b/lua/custom/plugins/wilder.lua @@ -0,0 +1,56 @@ +return { + { + 'gelguy/wilder.nvim', + keys = { + ':', + '/', + '?', + }, + dependencies = { + + 'catppuccin/nvim', + }, + config = function() + local wilder = require 'wilder' + local macchiato = require('catppuccin.palettes').get_palette 'macchiato' + + -- Create a highlight group for the popup menu + local text_highlight = wilder.make_hl('WilderText', { { a = 1 }, { a = 1 }, { foreground = macchiato.text } }) + local mauve_highlight = wilder.make_hl('WilderMauve', { { a = 1 }, { a = 1 }, { foreground = macchiato.mauve } }) + + -- Enable wilder when pressing :, / or ? + wilder.setup { modes = { ':', '/', '?' } } + + -- Enable fuzzy matching for commands and buffers + -- wilder.set_option("pipeline", { + -- wilder.branch( + -- wilder.cmdline_pipeline({ + -- fuzzy = 1, + -- }), + -- wilder.vim_search_pipeline({ + -- fuzzy = 1, + -- }) + -- ), + -- }) + + wilder.set_option( + 'renderer', + wilder.popupmenu_renderer(wilder.popupmenu_border_theme { + highlighter = wilder.basic_highlighter(), + highlights = { + default = text_highlight, + border = mauve_highlight, + accent = mauve_highlight, + }, + pumblend = 5, + min_height = '25%', + max_height = '25%', + border = 'rounded', + left = { ' ', wilder.popupmenu_devicons() }, + right = { ' ', wilder.popupmenu_scrollbar() }, + }) + ) + end, + build = ':UpdateRemotePlugins', + }, +} diff --git a/lua/kickstart/plugins/neo-tree.lua b/lua/kickstart/plugins/neo-tree.lua index bd442269..f99a5cd2 100644 --- a/lua/kickstart/plugins/neo-tree.lua +++ b/lua/kickstart/plugins/neo-tree.lua @@ -1,25 +1,90 @@ --- Neo-tree is a Neovim plugin to browse the file system --- https://github.com/nvim-neo-tree/neo-tree.nvim - return { 'nvim-neo-tree/neo-tree.nvim', version = '*', dependencies = { 'nvim-lua/plenary.nvim', - 'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended + 'nvim-tree/nvim-web-devicons', 'MunifTanjim/nui.nvim', }, cmd = 'Neotree', + init = function() + vim.api.nvim_create_autocmd('VimEnter', { + pattern = '*', + command = 'Neotree current', + }) + end, keys = { - { '\\', ':Neotree reveal', desc = 'NeoTree reveal', silent = true }, + { 'e', ':Neotree toggle', { desc = 'NeoTree toggle' } }, }, opts = { + event_handlers = { + { + event = 'neo_tree_buffer_enter', + handler = function() + vim.opt.relativenumber = true + end, + }, + { + event = 'file_opened', + handler = function() + require('neo-tree.command').execute { action = 'close' } + end, + }, + }, filesystem = { + bind_to_cwd = false, + follow_current_file = { enabled = true }, + use_libuv_file_watcher = true, + hijack_netrw_behavior = 'open_current', window = { mappings = { - ['\\'] = 'close_window', + [''] = 'none', + ['E'] = 'close_window', + ['J'] = function(state) + local tree = state.tree + local node = tree:get_node() + local siblings = tree:get_nodes(node:get_parent_id()) + local renderer = require 'neo-tree.ui.renderer' + renderer.focus_node(state, siblings[#siblings]:get_id()) + end, + ['K'] = function(state) + local tree = state.tree + local node = tree:get_node() + local siblings = tree:get_nodes(node:get_parent_id()) + local renderer = require 'neo-tree.ui.renderer' + renderer.focus_node(state, siblings[1]:get_id()) + end, + ['l'] = 'open', + ['h'] = 'close_node', }, }, + filtered_items = { + hide_dotfiles = false, + hide_gitignored = false, + }, }, }, } + +-- return { +-- 'nvim-neo-tree/neo-tree.nvim', +-- version = '*', +-- dependencies = { +-- 'nvim-lua/plenary.nvim', +-- 'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended +-- 'MunifTanjim/nui.nvim', +-- }, +-- cmd = 'Neotree', +-- keys = { +-- { 'e', ':Neotree reveal', desc = 'NeoTree reveal', silent = true }, +-- }, +-- opts = { +-- filesystem = { +-- window = { +-- mappings = { +-- ['e'] = 'close_window', +-- }, +-- }, +-- }, +-- }, +-- }