diff --git a/.config/bashrc.d/10_common.sh b/.config/bashrc.d/10_common.sh index a7cf2dc..bc4c4b0 100644 --- a/.config/bashrc.d/10_common.sh +++ b/.config/bashrc.d/10_common.sh @@ -33,7 +33,9 @@ vimdiff() { # Neovim shortcuts alias nv='nvim' alias nvimr='nvim -R' -alias nvim-config='nvim ~/.config/nvim/init.lua' +function nvim-config() { + ( cd ~/.config/nvim/ && nvim init.lua ) +} # yay without parameters does "pacman -Syu" but I don't want it to do this yay() { diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index 9524df8..53c2ecc 100644 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -1,8 +1,10 @@ -- Config shortcuts local o = vim.o -local opt = vim.opt local keymap = vim.keymap +-- Autocommand group for this file to allow config reloading +local augroup = vim.api.nvim_create_augroup('init', { clear = true }) + ------------------ -- GENERAL OPTIONS @@ -36,9 +38,20 @@ o.softtabstop = -1 -- Don't auto-insert comment leader when entering insert mode with o/O vim.api.nvim_create_autocmd('FileType', { + group = augroup, command = 'set formatoptions-=o', }) +-- Open new split windows at the bottom / right side +o.splitbelow = true +o.splitright = true + +-- Pseudo-transparency for floating windows +o.winblend = 10 + +-- Show inline diagnostics (LSP) +vim.diagnostic.config { virtual_text = true } + ------------- -- FILE TYPES @@ -54,6 +67,13 @@ vim.filetype.add { vim.g.html_indent_autotags = 'html,body' vim.g.html_indent_inctags = 'p' +-- In filetypes that use tab indentation, render tabs as 4 spaces +vim.api.nvim_create_autocmd('FileType', { + group = augroup, + pattern = 'go', + command = 'setlocal tabstop=4', +}) + ----------- -- MAPPINGS @@ -61,22 +81,26 @@ vim.g.html_indent_inctags = 'p' -- For keys that are safe to be mapped, see: https://vim.fandom.com/wiki/Unused_keys --- Exit insert mode with jk +-- Exit insert/command mode with jk keymap.set('i', 'jk', '') +keymap.set('c', 'jk', '') --- Quick exit with Ctrl-q -keymap.set('n', '', ':q') +-- Quick exit (:qall) with Ctrl-q +keymap.set('n', '', 'qall') + +-- Close current buffer (:q) with Alt-q +keymap.set('n', '', 'q') -- Quick save all open buffers with Ctrl-s -keymap.set('n', '', ':wall') -keymap.set('i', '', ':wall') +keymap.set('n', '', 'wall') +keymap.set('i', '', 'wall') -- Simple copy and paste to/from system clipboard with Ctrl-c in visual mode -- and Ctrl-v in insert mode keymap.set('v', '', '"+y') keymap.set('i', '', '"+P') --- Navigate between windows with Alt and hjkl +-- Navigate between windows in normal mode with Alt and hjkl keymap.set('n', '', 'h') keymap.set('n', '', 'j') keymap.set('n', '', 'k') @@ -92,32 +116,61 @@ keymap.set('n', '', '4>') keymap.set({'n', 'x'}, 'H', '^') keymap.set({'n', 'x'}, 'L', '$') --- Use comma (,) as a "modifier prefix" for alternative functions of regular --- commands (e.g. yank to system clipboard) or for random shortcuts. --- TODO: Comma or semicolon or single quote? -keymap.set({'n', 'x'}, ',', '') +-- Move cursor in insert mode with Alt and hjkl +keymap.set('i', '', '') +keymap.set('i', '', '') +keymap.set('i', '', '') +keymap.set('i', '', '') --- Prefix yank/delete/change/paste commands with "," to use system clipboard -keymap.set({'n', 'x'}, ',y', '"+y') -keymap.set({'n', 'x'}, ',Y', '"+y$') -keymap.set({'n', 'x'}, ',d', '"+d') -keymap.set({'n', 'x'}, ',D', '"+D') -keymap.set({'n', 'x'}, ',c', '"+c') -keymap.set({'n', 'x'}, ',C', '"+C') -keymap.set({'n', 'x'}, ',p', '"+p') -keymap.set({'n', 'x'}, ',P', '"+P') +-- Visual mode: Extend selection to parent node with "." +-- ("an" will be remapped to "around next" by mini.ai) +local _an_keymap = vim.fn.maparg('an', 'x', false, true) +keymap.set('x', '.', _an_keymap.callback, { desc = 'Extend selection to parent node' }) + +-- Visual mode: Move selected lines upwards/downwards with Alt-j/k +keymap.set('x', '', ":m '>+1gv=gv") +keymap.set('x', '', ":m '<-2gv=gv") + +-- Visual mode: Stay in visual mode when indenting +keymap.set('v', '<', '', '>gv') + +-- Use space as a "modifier prefix" for alternative functions of regular commands +-- (e.g. yank to system clipboard) or for random shortcuts. +keymap.set({'n', 'x'}, ' ', '') + +-- Prefix yank/delete/change/paste commands to use system clipboard +keymap.set({'n', 'x'}, ' y', '"+y', { desc = 'Yank (clipboard)' }) +keymap.set({'n', 'x'}, ' Y', '"+y$', { desc = 'Yank rest of line (clipboard)' }) +keymap.set({'n', 'x'}, ' d', '"+d', { desc = 'Delete (clipboard)' }) +keymap.set({'n', 'x'}, ' D', '"+D', { desc = 'Delete rest of line (clipboard)' }) +keymap.set({'n', 'x'}, ' c', '"+c', { desc = 'Change (clipboard)' }) +keymap.set({'n', 'x'}, ' C', '"+C', { desc = 'Change rest of line (clipboard)' }) +keymap.set({'n', 'x'}, ' p', '"+p', { desc = 'Paste after cursor (clipboard)' }) +keymap.set({'n', 'x'}, ' P', '"+P', { desc = 'Paste before cursor (clipboard)' }) + +-- Paste from system clipboard on a new line (before/after the current line) +keymap.set('n', ' lp', ':put +', { desc = 'Paste on new line below cursor (clipboard)' }) +keymap.set('n', ' lP', ':put! +', { desc = 'Paste on new line above cursor (clipboard)' }) + +-- Select previously changed or yanked text (e.g. pasted text) in visual mode +keymap.set('n', ' v', '`[v`]', { desc = 'Select previously changed/yanked text' }) -- Insert empty line(s) below or above current line without moving the cursor -keymap.set('n', ',o', function() +keymap.set('n', ' o', function() local line = vim.api.nvim_win_get_cursor(0)[1] local repeated = vim.fn['repeat']({''}, vim.v.count1) vim.api.nvim_buf_set_lines(0, line, line, true, repeated) -end) -keymap.set('n', ',O', function() +end, { desc = 'Insert empty line below cursor' }) +keymap.set('n', ' O', function() local line = vim.api.nvim_win_get_cursor(0)[1] - 1 local repeated = vim.fn['repeat']({''}, vim.v.count1) vim.api.nvim_buf_set_lines(0, line, line, true, repeated) -end) +end, { desc = 'Insert empty line above cursor' }) + +-- LSP mappings (more in plugins.lua) +keymap.set('n', 'K', vim.lsp.buf.hover) +keymap.set('n', 'gq', vim.lsp.buf.format, { desc = 'Auto-format file (LSP)' }) ---------- diff --git a/.config/nvim/lua/init/plugins.lua b/.config/nvim/lua/init/plugins.lua index 9f95917..b4b2620 100644 --- a/.config/nvim/lua/init/plugins.lua +++ b/.config/nvim/lua/init/plugins.lua @@ -2,29 +2,128 @@ local keymap = vim.keymap local vr = vim.version.range +-- Autocommand group for this file to allow config reloading +local augroup = vim.api.nvim_create_augroup('init-plugins', { clear = true }) + ------------------ -- INSTALL PLUGINS ------------------ +-- Run commands to build or update things when installing/upgrading plugins +vim.api.nvim_create_autocmd('PackChanged', { + group = augroup, + callback = function(ev) + local name, kind = ev.data.spec.name, ev.data.kind + + if kind == 'install' or kind == 'update' then + if name == 'nvim-treesitter' then + -- nvim-treesitter requires installed parsers to be updated when upgrading the plugin. + vim.cmd(':TSUpdate') + end + end + end, +}) + + vim.pack.add { + -- [ Libraries ] + + -- Plenary: Library with helper functions (needed by neovim-session-manager) + 'https://github.com/nvim-lua/plenary.nvim', + + -- UI component library (needed by neo-tree) + 'https://github.com/MunifTanjim/nui.nvim', + + -- Nerd font icons (e.g. file types) + 'https://github.com/nvim-tree/nvim-web-devicons', + + + -- [ General / plugin collections ] + + -- mini.nvim plugin collection + { src = 'https://github.com/nvim-mini/mini.nvim', version = 'stable' }, + + -- snacks.nvim plugin collection + 'https://github.com/folke/snacks.nvim', + + -- Session manager + 'https://github.com/Shatur/neovim-session-manager', + + -- File browser sidebar + { src = 'https://github.com/nvim-neo-tree/neo-tree.nvim', version = vr '3.*' }, + + + -- [ UI ] + + -- Better status line + 'https://github.com/nvim-lualine/lualine.nvim', + + -- Better tab bar + 'https://github.com/romgrk/barbar.nvim', + + -- Breadcrumbs + 'https://github.com/Bekaboo/dropbar.nvim', + + -- Git integration for buffers (added/changed/deleted signs and more) + 'https://github.com/lewis6991/gitsigns.nvim', + + -- Code exploration picker + 'https://github.com/error311/wayfinder.nvim', + + -- Show keybindings while typing + 'https://github.com/folke/which-key.nvim', + + -- Easier window management/navigation + { src = 'https://github.com/rvaccone/wind.nvim', version = vr '1.*' }, + + + -- [ Editing ] + -- Better code completion { src = 'https://github.com/saghen/blink.cmp', version = vr '1.*' }, - -- Better marks - 'https://github.com/chentoast/marks.nvim', + -- Auto-pairs + 'https://github.com/ZhiyuanLck/smart-pairs', + + -- Auto-close structures with "end" keyword (e.g. in Lua) + 'https://github.com/RRethy/nvim-treesitter-endwise', + + -- Substitute and exchange operator + 'https://github.com/gbprod/substitute.nvim', -- Surround selections with quotes etc. { src = 'https://github.com/kylechui/nvim-surround', version = vr '4.*' }, - -- Substitute and exchange operator - 'https://github.com/gbprod/substitute.nvim', + -- Snippet collection + 'https://github.com/rafamadriz/friendly-snippets', + + + -- [ Text rendering ] + + -- Highlight word under cursor + 'https://github.com/sontungexpt/stcursorword', -- Highlight todo comments 'https://github.com/folke/todo-comments.nvim', -- Highlight colors (hex codes etc.) 'https://github.com/brenoprata10/nvim-highlight-colors', + + + -- [ Language support ] + + -- Treesitter parser manager + 'https://github.com/nvim-treesitter/nvim-treesitter', + + -- Collection of LSP configurations + 'https://github.com/neovim/nvim-lspconfig', + + -- LSP manager + 'https://github.com/mason-org/mason.nvim', + + -- Bridge between Mason and lspconfig + 'https://github.com/mason-org/mason-lspconfig.nvim', } @@ -32,11 +131,273 @@ vim.pack.add { -- INITIALIZE PLUGINS --------------------- --- Better code completion +------------ +-- mini.nvim +------------ + +-- Extended a/i text objects +require('mini.ai').setup {} + +-- Icon provider +require('mini.icons').setup {} + + +-------------- +-- snacks.nvim +-------------- + +-- Enable and configure selected plugins +require('snacks').setup { + bigfile = { enabled = true }, + git = { enabled = true }, + indent = { + enabled = true, + animate = { enabled = false }, + }, + input = { enabled = true }, + notifier = { + enabled = true, + timeout = 5000, -- milliseconds, default: 3000 + }, + picker = { enabled = true }, + scroll = { enabled = true }, + scratch = { enabled = true }, + statuscolumn = { enabled = true }, + terminal = { enabled = true }, +} + +-- Mappings for various pickers +-- See also: https://github.com/folke/snacks.nvim/blob/main/docs/picker.md#general +keymap.set('n', 'fb', Snacks.picker.buffers, { desc = 'Buffers' }) +keymap.set('n', 'ff', Snacks.picker.files, { desc = 'Find files' }) +keymap.set('n', 'fg', Snacks.picker.grep, { desc = 'Live grep' }) +keymap.set('n', 'fj', Snacks.picker.jumps, { desc = 'Jump list' }) +keymap.set('n', 'fr', Snacks.picker.resume, { desc = 'Resume previous search' }) +keymap.set('n', 'fu', Snacks.picker.undo, { desc = 'Undo history' }) + +-- Mappings for LSP-related pickers +-- TODO: Add more LSP shortcuts +keymap.set('n', 'dx', Snacks.picker.diagnostics, { desc = 'List diagnostics' }) +keymap.set('n', 'gd', Snacks.picker.lsp_definitions, { desc = 'Go to definition' }) + +-- Mappings for scratchpads +keymap.set('n', '.', Snacks.scratch.open) +keymap.set('n', 'scr', Snacks.scratch.select) + +-- Mappings for git +keymap.set('n', 'gg', Snacks.lazygit.open, { desc = 'Open lazygit' }) +keymap.set('n', 'gl', Snacks.lazygit.log, { desc = 'Open git log' }) +keymap.set('n', 'gL', Snacks.lazygit.log_file, { desc = 'Open git log for file' }) +keymap.set('n', 'gB', Snacks.gitbrowse.open, { desc = 'Open git repository in browser' }) + +-- Toggle terminal with Ctrl-/ +keymap.set({ 'n', 't' }, '', Snacks.terminal.toggle) + + +------------------------- +-- neovim-session-manager +------------------------- + +local session_manager_config = require('session_manager.config') + +require('session_manager').setup { + -- Only autoload session for the current directory or git repository if it exists. + -- (Default: Always load the last session) + autoload_mode = { + session_manager_config.AutoloadMode.CurrentDir, + session_manager_config.AutoloadMode.GitSession, + }, + + -- A list of directories where the session will not be autosaved. + autosave_ignore_dirs = {}, + + -- Only autosave if a session is active. + autosave_only_in_session = true, + + -- List currently loaded session in the load_session UI. + load_include_current = true, +} + +-- Keymaps (all with \ss prefix) +keymap.set('n', 'ssl', 'SessionManager load_session') +keymap.set('n', 'ss0', 'SessionManager load_last_session') +keymap.set('n', 'ss.', 'SessionManager load_current_dir_session') +keymap.set('n', 'ssg', 'SessionManager load_git_session') +keymap.set('n', 'ssv', 'SessionManager save_current_session') + + +---------------------------------- +-- neo-tree (file browser sidebar) +---------------------------------- + +require('neo-tree').setup { + enable_cursor_hijack = true, + source_selector = { + statusline = true, + }, + default_component_configs = { + indent = { with_expanders = true }, + symlink_target = { enabled = true }, + }, + window = { + -- TODO: Mappings for h/l to open/close directories? + mappings = {}, + }, + filesystem = { + bind_to_cwd = false, + filtered_items = { + hide_dotfiles = false, + hide_gitignored = false, + hide_by_name = { + '.ansible', + '.cache', + '.idea', + '.git', + 'node_modules', + }, + always_show = { + '.gitignore', + }, + }, + follow_current_file = { enabled = true }, + use_libuv_file_watcher = true, + }, + buffers = { + bind_to_cwd = false, + }, +} + +-- Make symbolic link targets less visible +vim.cmd.highlight { "NeoTreeSymbolicLinkTarget", "guifg=#626262" } + +-- Focus file explorer with space+e, toggle with uppercase E +keymap.set('n', ' e', 'Neotree focus') +keymap.set('n', ' E', 'Neotree toggle') + + +------------------------------- +-- lualine (better status line) +------------------------------- + +local lualine_filename_component = { + 'filename', + path = 1, -- Show relative paths + symbols = { + readonly = '[readonly]', + }, +} + +require('lualine').setup { + options = { + disabled_filetypes = { + 'neo-tree', + }, + }, + sections = { + lualine_c = { lualine_filename_component }, + lualine_x = { + 'lsp_status', + -- Display warning if treesitter parser is missing + { 'vim.b._treesitter_missing and "No Treesitter" or ""', color = { fg = '#cc6600' } }, + 'filetype', + }, + }, + inactive_sections = { + lualine_c = { lualine_filename_component }, + }, +} + +-- Disable builtin mode indicator in bottom line since the statusline contains it too +vim.o.showmode = false + + +-------------------------- +-- barbar (buffer/tab bar) +-------------------------- + +require('barbar').setup {} + +-- Close tab +keymap.set('n', '', 'BufferClose') + +-- Move to previous/next tab +keymap.set('n', '', 'BufferPrevious') +keymap.set('n', '', 'BufferNext') + +-- Re-order tab +keymap.set('n', '', 'BufferMovePrevious') +keymap.set('n', '>', 'BufferMoveNext') + +-- Jump to buffer by letter +keymap.set('n', '', 'BufferPick') + + +------------------------ +-- dropbar (breadcrumbs) +------------------------ + +require('dropbar').setup {} + + +----------------------------------------- +-- gitsigns (git integration for buffers) +----------------------------------------- + +require('gitsigns').setup {} + + +-------------------------------------- +-- wayfinder (code exploration picker) +-------------------------------------- + +require('wayfinder').setup {} + +-- Open wayfinder +keymap.set('n', 'wf', '(WayfinderOpen)', { desc = 'Wayfinder' }) + + + +------------------------------- +-- which-key (show keybindings) +------------------------------- + +require('which-key').setup { + preset = 'modern', +} + +-- Mapping for showing normal mode keymaps +keymap.set('n', '?', require('which-key').show) + + +---------------------------------- +-- wind (easier window management) +---------------------------------- + +local wind = require('wind') + +wind.setup { + windows = { + max = 4, + }, + breaths = { + max = 4, + }, + -- TODO: Adjust keymaps? + -- keymaps = false, +} + + +------------------------------ +-- blink.cmp (code completion) +------------------------------ + require('blink.cmp').setup { keymap = { preset = 'super-tab', }, + completion = { + trigger = { show_in_snippet = false }, + }, cmdline = { keymap = { preset = 'inherit', @@ -53,35 +414,75 @@ require('blink.cmp').setup { } --- Better marks -require('marks').setup { - -- Show builtin marks in gutter: last jump position (`), last change (.), - -- last selection in visual mode (). - -- TODO: See which of those are really helpful and remove the others. - builtin_marks = { '`', '.', '<', '>' }, +-------------- +-- smart-pairs +-------------- + +require('pairs'):setup { + pairs = { + -- TODO: For now, disable auto-pairs for single quotes to avoid unnecessary quotes in + -- comments and strings (e.g. "don't"). Not a good solution though. + ['*'] = { + { '(', ')' }, + { '[', ']' }, + { '{', '}' }, + { "'", "'", { ignore_pre = '.*' }}, + { '"', '"' }, + }, + }, } --- Surround selections with quotes etc. -require('nvim-surround').setup {} +--------------------------------------------- +-- substitute (substitute/exchange operators) +--------------------------------------------- - --- Substitute and exchange operator local substitute = require('substitute') +local substitute_exchange = require('substitute.exchange') + substitute.setup {} --- ... Use "s" key for substitute (by default "s" is equivalent to "cl") +-- Use "s" key for substitute (by default "s" is equivalent to "cl") keymap.set('n', 's', substitute.operator) keymap.set('n', 'ss', substitute.line) keymap.set('n', 'S', substitute.eol) keymap.set('x', 's', substitute.visual) --- ... Prefix with "," to use system clipboard (remap to use the substitute mappings above) -keymap.set({'n', 'x'}, ',s', '"+s', { remap = true }) -keymap.set({'n', 'x'}, ',S', '"+S', { remap = true }) +-- Use "sx" for exchange (use twice to swap text objects) +-- TODO: Maybe actually use x/X or space+x for this? +keymap.set('n', 'sx', substitute_exchange.operator) +keymap.set('n', 'sxx', substitute_exchange.line) +keymap.set('x', 'X', substitute_exchange.visual) + +-- Prefix with space to use system clipboard (remap to use the substitute mappings above) +keymap.set({'n', 'x'}, ' s', '"+s', { remap = true, desc = 'Substitute (clipboard)' }) +keymap.set({'n', 'x'}, ' S', '"+S', { remap = true, desc = 'Substitute rest of line (clipboard)' }) --- Highlight todo comments +-------------------------------------- +-- nvim-surround (surround selections) +-------------------------------------- + +require('nvim-surround').setup {} + + +--------------------------------------------- +-- stcursorword (highlight word under cursor) +--------------------------------------------- + +require('stcursorword').setup { + excluded = { + filetypes = { + 'neo-tree', + }, + }, +} + + +---------------- +-- todo-comments +---------------- + require('todo-comments').setup { -- Disable gutter icons signs = false, @@ -99,5 +500,74 @@ require('todo-comments').setup { } --- Highlight colors (hex codes etc.) +------------------------------------------------- +-- nvim-highlight-colors (display colors in code) +------------------------------------------------- + require('nvim-highlight-colors').setup {} + + +---------------------------------------------- +-- nvim-treesitter (manage treesitter parsers) +---------------------------------------------- + +-- Install Tree-sitter parsers +require('nvim-treesitter').install { + 'bash', + 'cmake', + 'cpp', + 'css', + 'dockerfile', + 'editorconfig', + 'git_config', + 'gitignore', + 'go', + 'html', + 'jinja', + 'json', + 'python', + 'sway', + 'yaml', +} + +-- Collect a list of all currently installed Tree-sitter parsers +local function get_installed_treesitter_parsers() + local parsers = {} + for _, path in pairs(vim.api.nvim_get_runtime_file('parser/*.so', true)) do + local name, _ = vim.fs.basename(path):gsub('%.so$', '') + table.insert(parsers, name) + end + return parsers +end + +local treesitter_parsers = get_installed_treesitter_parsers() + +-- Autocommand to load treesitter parser +vim.api.nvim_create_autocmd("FileType", { + group = augroup, + callback = function(args) + local lang = vim.treesitter.language.get_lang(args.match) + + if vim.list_contains(treesitter_parsers, lang) then + vim.treesitter.start(args.buf) + -- TODO: Enable folds, indentation? + vim.b[args.buf]._treesitter_missing = false + else + vim.b[args.buf]._treesitter_missing = true + end + end +}) + + +---------------------- +-- mason (LSP manager) +---------------------- + +require('mason').setup {} + + +------------------------------------------- +-- mason-lspconfig (Mason/lspconfig bridge) +------------------------------------------- + +require('mason-lspconfig').setup {} diff --git a/.config/nvim/lua/init/theme.lua b/.config/nvim/lua/init/theme.lua index c805b9b..1d991e3 100644 --- a/.config/nvim/lua/init/theme.lua +++ b/.config/nvim/lua/init/theme.lua @@ -5,6 +5,8 @@ vim.pack.add { -- { src = 'https://github.com/nickkadutskyi/jb.nvim', name = 'jetbrains-theme' }, } +local dim_inactive_windows = true + -- Initialize and customize themes require('kanagawa').setup { -- Compile colorscheme for fast startup times. @@ -12,7 +14,7 @@ require('kanagawa').setup { compile = true, -- Dim inactive windows - dimInactive = true, + dimInactive = dim_inactive_windows, -- Customize colors colors = { @@ -25,6 +27,18 @@ require('kanagawa').setup { }, }, }, + + -- Add or modify highlight groups + overrides = function(colors) + local theme = colors.theme + return { + -- Make window separator more visible + WinSeparator = { + fg = theme.ui.bg_p1, -- default: bg_m3 + bg = dim_inactive_windows and theme.ui.bg_dim or "NONE", -- default + }, + } + end, } --require('rose-pine').setup {} diff --git a/.config/nvim/nvim-pack-lock.json b/.config/nvim/nvim-pack-lock.json index 7308339..383d833 100644 --- a/.config/nvim/nvim-pack-lock.json +++ b/.config/nvim/nvim-pack-lock.json @@ -1,27 +1,101 @@ { "plugins": { + "barbar.nvim": { + "rev": "337ecfadb8bf005050990bf2f624dc4fc828dabd", + "src": "https://github.com/romgrk/barbar.nvim" + }, "blink.cmp": { "rev": "78336bc89ee5365633bcf754d93df01678b5c08f", "src": "https://github.com/saghen/blink.cmp", "version": "1.0.0 - 2.0.0" }, + "dropbar.nvim": { + "rev": "808ba31cde89aec8833e9789f5e04557cd31c9e1", + "src": "https://github.com/Bekaboo/dropbar.nvim" + }, + "friendly-snippets": { + "rev": "6cd7280adead7f586db6fccbd15d2cac7e2188b9", + "src": "https://github.com/rafamadriz/friendly-snippets" + }, + "gitsigns.nvim": { + "rev": "5be654f2232c10ddcad19c1607a67b6b4b78fc29", + "src": "https://github.com/lewis6991/gitsigns.nvim" + }, "kanagawa": { "rev": "bb85e4bfc8d89b0e62c8fa53ccdd13d12e2f77b3", "src": "https://github.com/rebelot/kanagawa.nvim" }, - "marks.nvim": { - "rev": "f353e8c08c50f39e99a9ed474172df7eddd89b72", - "src": "https://github.com/chentoast/marks.nvim" + "lualine.nvim": { + "rev": "221ce6b2d999187044529f49da6554a92f740a96", + "src": "https://github.com/nvim-lualine/lualine.nvim" + }, + "mason-lspconfig.nvim": { + "rev": "40276c4df7e6bdce6801d6c035c6227f9115a855", + "src": "https://github.com/mason-org/mason-lspconfig.nvim" + }, + "mason.nvim": { + "rev": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d", + "src": "https://github.com/mason-org/mason.nvim" + }, + "mini.nvim": { + "rev": "1345d191bb3da9c7b0e977f4387c5761f9bff68d", + "src": "https://github.com/nvim-mini/mini.nvim", + "version": "'stable'" + }, + "neo-tree.nvim": { + "rev": "83e7a2982fd12b9c3d35bc39dd5877cd91a02a61", + "src": "https://github.com/nvim-neo-tree/neo-tree.nvim", + "version": "3.0.0 - 4.0.0" + }, + "neovim-session-manager": { + "rev": "89d253a6c68af60b49570044591d5b8701866601", + "src": "https://github.com/Shatur/neovim-session-manager" + }, + "nui.nvim": { + "rev": "10fc361835c856ba4233ef5ea135b919bf3dce97", + "src": "https://github.com/MunifTanjim/nui.nvim" }, "nvim-highlight-colors": { "rev": "e4c7af0211866162d999ce0bdd6a029302e19139", "src": "https://github.com/brenoprata10/nvim-highlight-colors" }, + "nvim-lspconfig": { + "rev": "16286347bdba1333c7d124d9de9fe6630731b2b2", + "src": "https://github.com/neovim/nvim-lspconfig" + }, "nvim-surround": { "rev": "2e93e154de9ff326def6480a4358bfc149d5da2c", "src": "https://github.com/kylechui/nvim-surround", "version": "4.0.0 - 5.0.0" }, + "nvim-treesitter": { + "rev": "19071296d3d643b48615ee574a20e8a03ac40872", + "src": "https://github.com/nvim-treesitter/nvim-treesitter" + }, + "nvim-treesitter-endwise": { + "rev": "8fe8a95630f4f2c72a87ba1927af649e0bfaa244", + "src": "https://github.com/RRethy/nvim-treesitter-endwise" + }, + "nvim-web-devicons": { + "rev": "5f032a85be210cd1c6ac98861eb3b187ff3bd5eb", + "src": "https://github.com/nvim-tree/nvim-web-devicons" + }, + "plenary.nvim": { + "rev": "74b06c6c75e4eeb3108ec01852001636d85a932b", + "src": "https://github.com/nvim-lua/plenary.nvim" + }, + "smart-pairs": { + "rev": "ac18bf42ac653593ea97cc425596b01c8643662a", + "src": "https://github.com/ZhiyuanLck/smart-pairs" + }, + "snacks.nvim": { + "rev": "882c996cf28183f4d63640de0b4c02ec886d01f2", + "src": "https://github.com/folke/snacks.nvim" + }, + "stcursorword": { + "rev": "ab099f1682a0b251cda8f089d028a31426b83a06", + "src": "https://github.com/sontungexpt/stcursorword" + }, "substitute.nvim": { "rev": "0d2077398552f069abccbd964a26dd7cd26882cd", "src": "https://github.com/gbprod/substitute.nvim" @@ -29,6 +103,19 @@ "todo-comments.nvim": { "rev": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668", "src": "https://github.com/folke/todo-comments.nvim" + }, + "wayfinder.nvim": { + "rev": "2ce480d35626ddb533ba594fa7ca865d61184ec6", + "src": "https://github.com/error311/wayfinder.nvim" + }, + "which-key.nvim": { + "rev": "3aab2147e74890957785941f0c1ad87d0a44c15a", + "src": "https://github.com/folke/which-key.nvim" + }, + "wind.nvim": { + "rev": "89231ff08ce160c6d44a0b281a1663b676967147", + "src": "https://github.com/rvaccone/wind.nvim", + "version": "1.0.0 - 2.0.0" } } }