Last active
October 21, 2024 08:53
-
-
Save logotip4ik/5e7796a48ef104e5cb2452647f67d689 to your computer and use it in GitHub Desktop.
my nvim config
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" | |
| if not vim.loop.fs_stat(lazypath) then | |
| vim.fn.system({ | |
| "git", | |
| "clone", | |
| "--filter=blob:none", | |
| "https://github.com/folke/lazy.nvim.git", | |
| "--branch=stable", -- latest stable release | |
| lazypath, | |
| }) | |
| end | |
| vim.opt.rtp:prepend(lazypath) | |
| vim.g.have_nerd_font = true | |
| -- vim.g.loaded_netrw = 1 | |
| -- vim.g.loadede_netrwPlugin = 1 | |
| vim.opt.compatible = false | |
| vim.opt.backspace = 'indent,eol,start' | |
| vim.opt.incsearch = true | |
| vim.opt.laststatus = 2 | |
| vim.opt.ruler = true | |
| vim.opt.wildmenu = true | |
| vim.opt.sidescroll = 1 | |
| vim.opt.sidescrolloff = 2 | |
| vim.opt.autoread = true | |
| vim.opt.langremap = false | |
| vim.opt.cursorline = true | |
| vim.opt.ignorecase = true | |
| vim.opt.signcolumn = 'yes' | |
| vim.opt.laststatus = 0 | |
| vim.opt.mouse = 'a' | |
| vim.opt.breakindent = true | |
| vim.opt.inccommand = 'split' | |
| vim.opt.tw = 100 | |
| vim.opt.smarttab = true | |
| vim.opt.number = true | |
| vim.opt.relativenumber = true | |
| vim.opt.wrap = false | |
| vim.opt.smartcase = true | |
| vim.opt.autoindent = true | |
| vim.opt.cindent = true | |
| vim.opt.expandtab = true | |
| vim.opt.shiftwidth = 2 | |
| vim.opt.shiftround = true | |
| vim.opt.smartindent = true | |
| vim.opt.softtabstop = 2 | |
| vim.opt.list = true | |
| vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' } | |
| vim.o.background = "dark" | |
| vim.opt.termguicolors = true | |
| vim.opt.ttyfast = true | |
| vim.opt.backup = false | |
| vim.opt.writebackup = false | |
| vim.opt.spell = true | |
| vim.opt.updatetime = 100 | |
| vim.opt.foldenable = false | |
| vim.opt.foldlevel = 20 | |
| vim.opt.hlsearch = true | |
| vim.o.scrolloff = 8 | |
| vim.bo.commentstring = '' | |
| -- zig specific, do not split space to show errors | |
| vim.g.zig_fmt_parse_errors = 0 | |
| local keyset = vim.keymap.set | |
| -- disable highlight for last search on esc press | |
| keyset('n', '<Esc>', '<cmd>:nohlsearch<cr>', { silent = true }) | |
| -- toggle nvim tree with \t | |
| -- keyset('n', '<leader>t', ':NvimTreeToggle<CR>', { silent = true }) | |
| function _G.check_back_space() | |
| local col = vim.fn.col('.') - 1 | |
| return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') ~= nil | |
| end | |
| local opts = { silent = true, noremap = true, expr = true, replace_keycodes = false } | |
| keyset("i", "<TAB>", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "<TAB>" : coc#refresh()', opts) | |
| keyset("i", "<S-TAB>", [[coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"]], opts) | |
| -- Make <CR> to accept selected completion item or notify coc.nvim to format | |
| -- <C-g>u breaks current undo, please make your own choice | |
| keyset("i", "<cr>", [[coc#pum#visible() ? coc#pum#confirm() : "<CR>"]], opts) | |
| -- trigger completion | |
| keyset("i", "<C-`>", [[coc#refresh()]], opts) | |
| -- Use `[g` and `]g` to navigate diagnostics | |
| -- Use `:CocDiagnostics` to get all diagnostics of current buffer in location list | |
| keyset("n", "[g", "<Plug>(coc-diagnostic-prev)", {silent = true}) | |
| keyset("n", "]g", "<Plug>(coc-diagnostic-next)", {silent = true}) | |
| -- GoTo code navigation | |
| keyset("n", "gd", "<Plug>(coc-definition)", { silent = true, noremap = true }) | |
| keyset("n", "gr", "<Plug>(coc-references)", { silent = true }) | |
| -- Use K to show documentation in preview window | |
| function _G.show_docs() | |
| local cw = vim.fn.expand('<cword>') | |
| if vim.fn.index({'vim', 'help'}, vim.bo.filetype) >= 0 then | |
| vim.api.nvim_command('h ' .. cw) | |
| elseif vim.api.nvim_eval('coc#rpc#ready()') then | |
| vim.fn.CocActionAsync('doHover') | |
| else | |
| vim.api.nvim_command('!' .. vim.o.keywordprg .. ' ' .. cw) | |
| end | |
| end | |
| keyset("n", "K", '<CMD>lua _G.show_docs()<CR>', {silent = true}) | |
| -- Symbol renaming | |
| keyset("n", "<leader>rn", "<Plug>(coc-rename)", {silent = true}) | |
| -- Formatting selected code | |
| keyset("x", "<leader>f", "<Plug>(coc-format-selected)", {silent = true}) | |
| keyset("n", "<leader>f", "<Plug>(coc-format-selected)", {silent = true}) | |
| -- Apply codeAction to the selected region | |
| -- Example: `<leader>aap` for current paragraph | |
| local opts = {silent = true, nowait = true} | |
| keyset("x", "<leader>a", "<Plug>(coc-codeaction-selected)", opts) | |
| keyset("n", "<leader>a", "<Plug>(coc-codeaction-selected)", opts) | |
| -- Remap keys for apply code actions at the cursor position. | |
| keyset("n", "<leader>aa", "<Plug>(coc-codeaction-cursor)", opts) | |
| -- Remap keys for apply source code actions for current file. | |
| -- keyset("n", "<leader>as", "<Plug>(coc-codeaction-source)", opts) | |
| -- Remap <C-f> and <C-b> to scroll float windows/popups | |
| ---@diagnostic disable-next-line: redefined-local | |
| -- local opts = {silent = true, nowait = true, expr = true} | |
| -- keyset("n", "<C-f>", 'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"', opts) | |
| -- keyset("n", "<C-b>", 'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"', opts) | |
| -- keyset("i", "<C-f>", 'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(1)<cr>" : "<Right>"', opts) | |
| -- keyset("i", "<C-b>", 'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(0)<cr>" : "<Left>"', opts) | |
| -- keyset("v", "<C-f>", 'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"', opts) | |
| -- keyset("v", "<C-b>", 'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"', opts) | |
| -- Mappings for CoCList | |
| -- code actions and coc stuff | |
| ---@diagnostic disable-next-line: redefined-local | |
| local opts = {silent = true, nowait = true} | |
| -- Show all diagnostics | |
| keyset("n", "<space>a", ":<C-u>CocList diagnostics<cr>", opts) | |
| -- Manage extensions | |
| keyset("n", "<space>e", ":<C-u>CocList extensions<cr>", opts) | |
| -- Show commands | |
| keyset("n", "<space>c", ":<C-u>CocList commands<cr>", opts) | |
| -- Find symbol of current document | |
| keyset("n", "<space>o", ":<C-u>CocList outline<cr>", opts) | |
| -- Search workspace symbols | |
| keyset("n", "<space>s", ":<C-u>CocList -I symbols<cr>", opts) | |
| -- Do default action for next item | |
| keyset("n", "<space>j", ":<C-u>CocNext<cr>", opts) | |
| -- Do default action for previous item | |
| keyset("n", "<space>k", ":<C-u>CocPrev<cr>", opts) | |
| -- Resume latest coc list | |
| keyset("n", "<space>p", ":<C-u>CocListResume<cr>", opts) | |
| keyset('n', '<leader>esf', '<cmd>CocCommand eslint.executeAutofix<cr>') | |
| require("lazy").setup({ | |
| { | |
| "neoclide/coc.nvim", | |
| branch = "release", | |
| lazy = false, | |
| }, | |
| { | |
| 'nvim-telescope/telescope.nvim', | |
| branch = '0.1.x', | |
| dependencies = { | |
| 'nvim-lua/plenary.nvim', | |
| 'nvim-tree/nvim-web-devicons', | |
| 'nvim-telescope/telescope-ui-select.nvim', | |
| { | |
| 'nvim-telescope/telescope-fzf-native.nvim', | |
| build = 'make', | |
| }, | |
| }, | |
| config = function() | |
| local actions = require('telescope.actions') | |
| require('telescope').setup { | |
| defaults = { | |
| mappings = { | |
| i = { | |
| ['<esc>'] = actions.close | |
| }, | |
| }, | |
| }, | |
| extensions = { | |
| ['ui-select'] = { | |
| require('telescope.themes').get_dropdown(), | |
| }, | |
| fzf = { | |
| fuzzy = true, | |
| override_generic_sorter = true, | |
| override_file_sorter = true, | |
| }, | |
| }, | |
| } | |
| pcall(require('telescope').load_extension, 'fzf') | |
| pcall(require('telescope').load_extension, 'ui-select') | |
| local builtin = require('telescope.builtin') | |
| keyset('n', '<C-p>', builtin.find_files, {}) | |
| keyset('n', '<leader>ff', builtin.find_files, {}) | |
| keyset('n', '<leader>fg', builtin.live_grep, {}) | |
| keyset('n', '<leader><leader>', builtin.buffers, {}) | |
| keyset('n', '<leader>fh', builtin.help_tags, {}) | |
| keyset('n', '<leader>fr', builtin.resume, {}) | |
| keyset('n', '<leader>fo', builtin.oldfiles, {}) | |
| end, | |
| }, | |
| { | |
| 'nvim-tree/nvim-tree.lua', | |
| keys = { | |
| { "<leader>t", ':NvimTreeToggle<CR>', silent = true }, | |
| }, | |
| opts = { | |
| update_cwd = true, | |
| hijack_cursor = true, | |
| update_focused_file = { | |
| enable = true, | |
| update_cwd = false, | |
| ignore_list = {} | |
| }, | |
| view = { | |
| float = { | |
| enable = true, | |
| open_win_config = function() | |
| local screen_w = vim.opt.columns:get() | |
| local screen_h = vim.opt.lines:get() - vim.opt.cmdheight:get() | |
| local window_w = screen_w * 0.8 | |
| local window_h = screen_h * 0.8 | |
| local window_w_int = math.floor(window_w) | |
| local window_h_int = math.floor(window_h) | |
| local center_x = (screen_w - window_w) / 2 | |
| local center_y = ((vim.opt.lines:get() - window_h) / 2) | |
| - vim.opt.cmdheight:get() | |
| return { | |
| border = 'rounded', | |
| relative = 'editor', | |
| row = center_y, | |
| col = center_x, | |
| width = window_w_int, | |
| height = window_h_int, | |
| } | |
| end, | |
| }, | |
| width = function() | |
| return math.floor(vim.opt.columns:get() * 0.8) | |
| end, | |
| }, | |
| filters = { | |
| dotfiles = true, | |
| }, | |
| }, | |
| }, | |
| { | |
| 'akinsho/bufferline.nvim', | |
| version = '*', | |
| config = function() | |
| local bufferline = require("bufferline") | |
| bufferline.setup { | |
| options = { | |
| themable = true, | |
| diagnostics = "coc", | |
| close_command = function(bufnum) require('mini.bufremove').delete(bufnum) end, | |
| offsets = { | |
| { | |
| filetype = 'NvimTree', | |
| text = "Explorer", | |
| text_align = "left", | |
| separator = true, | |
| } | |
| }, | |
| } | |
| } | |
| keyset('n', '[b', function () bufferline.cycle(-1) end, { silent = true }) | |
| keyset('n', ']b', function () bufferline.cycle(1) end, { silent = true }) | |
| keyset('n', '[,', function () bufferline.move(-1) end, { silent = true }) | |
| keyset('n', '],', function () bufferline.move(1) end, { silent = true }) | |
| end, | |
| }, | |
| { | |
| 'datsfilipe/vesper.nvim', | |
| lazy = 'VeryLazy', | |
| config = function() | |
| require('vesper').setup { | |
| transparent = true, | |
| italics = { | |
| comments = true, | |
| keywords = true, | |
| functions = false, | |
| strings = false, | |
| variables = true, | |
| } | |
| } | |
| -- vim.cmd.colorscheme('vesper') | |
| end, | |
| }, | |
| { | |
| 'rebelot/kanagawa.nvim', | |
| lazy = true, | |
| -- priority = 10000, | |
| config = function() | |
| require('kanagawa').setup({ | |
| transparent = true, | |
| dimInactive = true, | |
| colors = { | |
| theme = { | |
| all = { | |
| ui = { | |
| bg_gutter = "none" | |
| } | |
| } | |
| } | |
| }, | |
| }) | |
| -- setup must be called before loading | |
| -- vim.cmd([[colorscheme kanagawa-dragon]]) | |
| end, | |
| }, | |
| { | |
| 'folke/tokyonight.nvim', | |
| lazy = false, | |
| priority = 1000, | |
| config = function () | |
| vim.cmd([[colorscheme tokyonight-night]]) | |
| end, | |
| }, | |
| { | |
| "kdheepak/lazygit.nvim", | |
| dependencies = { "nvim-lua/plenary.nvim" }, | |
| keys = { | |
| { "<leader>g", "<cmd>:LazyGit<cr>", silent = true }, | |
| }, | |
| }, | |
| { | |
| 'wakatime/vim-wakatime', | |
| lazy = false | |
| }, | |
| { | |
| 'echasnovski/mini.nvim', | |
| version = '*', | |
| config = function() | |
| require('mini.pairs').setup { | |
| mappings = { | |
| ['('] = { action = 'open', pair = '()', neigh_pattern = '[^\\].', register = { cr = false } }, | |
| ['['] = { action = 'open', pair = '[]', neigh_pattern = '[^\\].', register = { cr = false } }, | |
| ['{'] = { action = 'open', pair = '{}', neigh_pattern = '[^\\].', register = { cr = false } }, | |
| [')'] = { action = 'close', pair = '()', neigh_pattern = '[^\\].', register = { cr = false } }, | |
| [']'] = { action = 'close', pair = '[]', neigh_pattern = '[^\\].', register = { cr = false } }, | |
| ['}'] = { action = 'close', pair = '{}', neigh_pattern = '[^\\].', register = { cr = false } }, | |
| ['"'] = { action = 'closeopen', pair = '""', neigh_pattern = '[^\\].', register = { cr = false } }, | |
| ["'"] = { action = 'closeopen', pair = "''", neigh_pattern = '[^%a\\].', register = { cr = false } }, | |
| ['`'] = { action = 'closeopen', pair = '``', neigh_pattern = '[^\\].', register = { cr = false } }, | |
| }, | |
| } | |
| local diff = require('mini.diff') | |
| diff.setup { | |
| view = { | |
| style = 'sign', | |
| signs = { add = '+', change = '~', delete = '-' }, | |
| }, | |
| } | |
| keyset('n', '<leader>hp', diff.toggle_overlay, { silent = true }) | |
| local bufremove = require('mini.bufremove') | |
| bufremove.setup() | |
| keyset('n', '<C-e>', bufremove.delete) | |
| require('mini.cursorword').setup() | |
| require('mini.move').setup() | |
| require('mini.splitjoin').setup() | |
| require('mini.surround').setup() | |
| require('mini.comment').setup() | |
| require('mini.git').setup() | |
| require('mini.operators').setup({ | |
| replace = { prefix = '' } | |
| }) | |
| require('mini.hipatterns').setup({ | |
| highlighters = { | |
| fixme = { pattern = '%f[%w]()FIXME()%f[%W]', group = 'MiniHipatternsFixme' }, | |
| todo = { pattern = '%f[%w]()TODO()%f[%W]', group = 'MiniHipatternsTodo' }, | |
| note = { pattern = '%f[%w]()NOTE()%f[%W]', group = 'MiniHipatternsNote' }, | |
| } | |
| }) | |
| end, | |
| }, | |
| { | |
| 'nvim-treesitter/nvim-treesitter', | |
| build = ':TSUpdate', | |
| opts = { | |
| highlight = { | |
| enable = true | |
| }, | |
| indent = { | |
| enable = true | |
| }, | |
| }, | |
| config = function() | |
| require'nvim-treesitter.configs'.setup { | |
| highlight = { enable = true }, | |
| indent = { enable = true }, | |
| sync_install = false, | |
| ensure_installed = { | |
| 'javascript', | |
| 'typescript', | |
| 'tsx', | |
| 'vue', | |
| 'html', | |
| 'css', | |
| 'scss', | |
| }, | |
| } | |
| vim.opt.foldmethod = 'expr' | |
| vim.opt.foldexpr=[[nvim_treesitter#foldexpr()]] | |
| end, | |
| }, | |
| { | |
| 'mvllow/stand.nvim', | |
| event = "VeryLazy", | |
| opts = { | |
| minute_interval = 15, | |
| } | |
| }, | |
| { | |
| 'MagicDuck/grug-far.nvim', | |
| keys = { | |
| { "<leader>far", function() require('grug-far').open() end, silent = true }, | |
| }, | |
| config = function() | |
| require('grug-far').setup({}) | |
| end, | |
| }, | |
| }, { | |
| rocks = { enabled = false }, | |
| }) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment