From eec48ff71881d8757b79dcd95aac9dac4d71bf72 Mon Sep 17 00:00:00 2001 From: Max Christian Pohle Date: Sun, 12 May 2024 21:01:00 +0200 Subject: tidied this repo up and uploaded my new nvim from scratch config --- init.lua | 308 ++++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 188 insertions(+), 120 deletions(-) (limited to 'init.lua') diff --git a/init.lua b/init.lua index 2dc45ee..ce9d584 100644 --- a/init.lua +++ b/init.lua @@ -1,43 +1,165 @@ -vim.cmd('source ~/.vim/vimrc') +-------------------------------------------------------------------------------- +-- lazy plugin manager +-------------------------------------------------------------------------------- +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or 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) +require("lazy").setup({ + 'nvim-tree/nvim-web-devicons', + 'lewis6991/gitsigns.nvim', + 'folke/neodev.nvim', + 'neovim/nvim-lspconfig', + 'hrsh7th/cmp-nvim-lsp', + 'hrsh7th/cmp-buffer', + 'hrsh7th/cmp-path', + 'hrsh7th/cmp-cmdline', + 'hrsh7th/nvim-cmp', + 'hrsh7th/vim-vsnip', + 'octaltree/cmp-look', + 'L3MON4D3/LuaSnip', + 'saadparwaiz1/cmp_luasnip', + 'RRethy/base16-nvim', + 'nvim-treesitter/nvim-treesitter', + 'nvim-lua/popup.nvim', + 'nvim-lua/plenary.nvim', + 'nvim-telescope/telescope.nvim', + 'nvim-telescope/telescope-media-files.nvim', + 'coderonline/vim-fancy-line', + 'coderonline/vim-recently-used', + 'norcalli/nvim-colorizer.lua', + 'folke/trouble.nvim', +}) +-------------------------------------------------------------------------------- +-- vim options, first sourced from vimrc, then appended by Neovim specific stuff +-------------------------------------------------------------------------------- +local configdir = vim.fn.fnamemodify(vim.fn.expand("$MYVIMRC"), ":p:h") +vim.cmd('source ' .. configdir .. '/vimrc') +vim.cmd.colorscheme "base16-rebecca" +-- vim.cmd.colorscheme "base16-katy" + +vim.opt.encoding = 'utf-8' +vim.opt.number = true +vim.opt.number = true +vim.opt.shiftwidth = 2 +vim.opt.tabstop = 2 +vim.opt.softtabstop = 2 +vim.opt.inccommand = "nosplit" -- Neovim only: preview substitute and such things in real time vim.opt.termguicolors = true -vim.opt.exrc = true -vim.opt.foldmethod = 'syntax' +vim.opt.shadafile = configdir .. "/shada.file" + +-- Restore cursor position +vim.api.nvim_create_autocmd({ "BufReadPost" }, { + callback = function() vim.cmd('silent! normal! g`"zv') end +}) + +vim.api.nvim_create_user_command( + 'LspFix', + function() + vim.lsp.buf.code_action() + end, {} +) if vim.fn.has("win32") then vim.opt.rtp:append(vim.fn.expand("$HOME\\scoop\\shims")) end -vim.opt.runtimepath:remove("/usr/share/vim/vimfiles") -vim.keymap.set('n', '', ':Buffers') - +vim.g.lsp_log_verbose = 1 +vim.g.lsp_log_file = configdir .. ('/vim-lsp.log') + +if vim.g.neovide then + vim.guifont = "monospace:h11:b" + vim.g.neovide_cursor_animation_length = 0.03 + vim.g.neovide_cursor_trail_size = 0.8 + vim.g.neovide_scroll_animation_length = 0.05 + vim.g.neovide_transparency = 0.9 + vim.g.neovide_cursor_animation_length=0 + vim.g.neovide_cursor_vfx_mode = "" + vim.g.neovide_floating_blur_amount_x = 4.0 + vim.g.neovide_floating_blur_amount_y = 4.0 + vim.g.neovide_background_color = '#383a62' + vim.g.neovide_scale_factor = 1.0 +end +-------------------------------------------------------------------------------- +-- plugin setup and options +-------------------------------------------------------------------------------- +require'nvim-treesitter.configs'.setup { + -- A list of parser names, or "all" (the five listed parsers should always be installed) + ensure_installed = { "c", "lua", "vim", "vimdoc", "query" }, + modules = {}, + -- Install parsers synchronously (only applied to `ensure_installed`) + sync_install = false, + -- Automatically install missing parsers when entering buffer + -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally + auto_install = true, + ignore_install = { "javascript" }, + highlight = { + enable = true, + -- NOTE: these are the names of the parsers and not the filetype. (for example if you want to + -- disable highlighting for the `tex` filetype, you need to include `latex` in this list as this is + -- the name of the parser) + -- list of language that will be disabled + disable = function(_, buf) + local max_filesize = 100 * 1024 -- 100 KB + local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf)) + if ok and stats and stats.size > max_filesize then + return true + end + end, + -- Setting this to true will run `:h syntax` and tree-sitter at the same time. + -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). + -- Using this option may slow down your editor, and you may see some duplicate highlights. + -- Instead of true it can also be a list of languages + additional_vim_regex_highlighting = false, + }, +} --- vim.o.shadafile = "/tmp/shada" +-- vim.wo.foldtext = 'v:lua.vim.treesitter.foldtext()' -- not available yet in my installation +vim.wo.foldexpr = 'v:lua.vim.treesitter.foldexpr()' +vim.wo.foldlevel = 1 --- only on Linux... --- vim.o.shadafile = (os.getenv("XDG_CACHE_HOME") or --- os.getenv("HOME") .. "/.cache" --- ) .. "/vim.shada" --- vimscript: get(environ(), "XDG_CACHE_HOME", "~/.cache")."/vim.shada" --- require'man' +require('telescope').load_extension('media_files') -require'colorizer'.setup() +vim.lsp.set_log_level 'error' +if vim.fn.has 'nvim-0.5.1' == 1 then + require('vim.lsp.log').set_format_func(vim.inspect) +end +require'nvim-web-devicons'.setup { + color_icons = true; + default = true; + strict = true; +} +require('colorizer').setup() +require('gitsigns').setup() +require('trouble').setup() +require('neodev').setup() --- The nvim-cmp almost supports LSP's capabilities so You should advertise it to LSP servers.. -require('cmp_nvim_lsp').setup{} -local capabilities = require('cmp_nvim_lsp').default_capabilities() +local builtin = require('telescope.builtin') +vim.keymap.set('n', 'ff', builtin.find_files, {}) +vim.keymap.set('n', 'fg', builtin.live_grep, {}) +vim.keymap.set('n', 'fb', builtin.buffers, {}) +vim.keymap.set('n', 'fh', builtin.help_tags, {}) +vim.keymap.set({"i", "s"}, "", function() require('luasnip').jump(1) end, {silent = true}) +vim.keymap.set({"i", "s"}, "", function() require('luasnip').jump(-1) end, {silent = true}) -local cmp = require('cmp'); +local cmp = require'cmp' cmp.setup({ snippet = { -- REQUIRED - you must specify a snippet engine expand = function(args) - vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users. - -- require('luasnip').lsp_expand(args.body) -- For `luasnip` users. - -- require('snippy').expand_snippet(args.body) -- For `snippy` users. - -- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users. + require('luasnip').lsp_expand(args.body) -- For `luasnip` users. + -- vim.snippet.expand(args.body) -- For native neovim snippets (Neovim v0.10+) end, }, window = { @@ -47,34 +169,13 @@ cmp.setup({ mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), - [""] = cmp.mapping.select_next_item({behavior=cmp.SelectBehavior.Insert}), - [""] = cmp.mapping.select_prev_item({behavior=cmp.SelectBehavior.Insert}), [''] = cmp.mapping.complete(), [''] = cmp.mapping.abort(), - -- [''] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. - - [""] = cmp.mapping.confirm({ - behavior = cmp.ConfirmBehavior.Replace, - select = true, - }), - - [''] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. + [''] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. }), sources = cmp.config.sources({ { name = 'nvim_lsp' }, - { name = 'vsnip' }, -- For vsnip users. - -- { name = 'luasnip' }, -- For luasnip users. - -- { name = 'ultisnips' }, -- For ultisnips users. - -- { name = 'snippy' }, -- For snippy users. - }, { - { name = 'buffer' }, - }) -}) - --- Set configuration for specific filetype. -cmp.setup.filetype('gitcommit', { - sources = cmp.config.sources({ - { name = 'cmp_git' }, -- You can specify the `cmp_git` source if you were installed it. + { name = 'luasnip' }, -- For luasnip users. }, { { name = 'buffer' }, }) @@ -82,75 +183,88 @@ cmp.setup.filetype('gitcommit', { -- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline({ '/', '?' }, { - -- mapping = cmp.mapping.preset.cmdline(), - sources = { - { name = 'buffer' } - } + mapping = cmp.mapping.preset.cmdline({ + [''] = { c = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }) }, + [''] = { c = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }) }, + }), + sources = {{ name = 'buffer' }} }) -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline(':', { - -- mapping = cmp.mapping.preset.cmdline(), - sources = cmp.config.sources({ - { name = 'cmdline' } - }) + mapping = cmp.mapping.preset.cmdline({ + [''] = { c = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }) }, + [''] = { c = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }) }, + }), + sources = cmp.config.sources( + {{ name = 'path' }}, + {{ name = 'cmdline' }} + ), + matching = { + disallow_symbol_nonprefix_matching = false, + disallow_partial_matching = false, + disallow_fullfuzzy_matching = false, + disallow_fuzzy_matching = false, + disallow_partial_fuzzy_matching = false, + disallow_prefix_unmatching = false, + } }) +-- Set up lspconfig. +local capabilities = require('cmp_nvim_lsp').default_capabilities() -- # Language Servers -- https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md --- The following example advertise capabilities to `clangd`. -- C/C++ | clang require('lspconfig')['clangd'].setup{capabilities = capabilities} - +-- lua (but not init.lua entirely, hence why neodev) +require('lspconfig')['lua_ls'].setup { capabilities = capabilities } +-- require('lspconfig')['java_language_server'].setup{ cmd = { "/usr/share/java/java-language-server/lang_server_linux.sh" }, root_dir = function () return vim.fn.getcwd() end } +require'lspconfig'.jdtls.setup{} -- bash | bash-language-server require('lspconfig')['bashls'].setup{capabilities = capabilities} - -- ccs | vscode-css-languageserver require('lspconfig')['cssls'].setup{capabilities = capabilities} - -- rust | rust-analyzer require('lspconfig')['rust_analyzer'].setup{capabilities = capabilities} - -- javascript | eslint require('lspconfig')['eslint'].setup{capabilities = capabilities} - -- javascript | typescript-language-server require('lspconfig')['tsserver'].setup{capabilities = capabilities} - -- vimscript | vim-language-server require('lspconfig')['vimls'].setup{capabilities = capabilities} - +-- html require('lspconfig')['html'].setup{capabilities = capabilities} - +-- jsonls require('lspconfig')['jsonls'].setup{capabilities = capabilities} - -- C/C++ | clang require('lspconfig')['clangd'].setup{capabilities = capabilities} - -- bash | bash-language-server require('lspconfig')['bashls'].setup{capabilities = capabilities} - -- ccs | vscode-css-languageserver require('lspconfig')['cssls'].setup{capabilities = capabilities} - -- rust | rust-analyzer require('lspconfig')['rust_analyzer'].setup{capabilities = capabilities} - -- javascript | eslint require('lspconfig')['eslint'].setup{capabilities = capabilities} - -- javascript | typescript-language-server require('lspconfig')['tsserver'].setup{capabilities = capabilities} - -- vimscript | vim-language-server require('lspconfig')['vimls'].setup{capabilities = capabilities} - -require('lspconfig')['html'].setup{capabilities = capabilities} - -require('lspconfig')['jsonls'].setup{capabilities = capabilities} - +-- configure html server +require('lspconfig')["html"].setup({ + capabilities = capabilities, + -- on_attach = on_attach, + init_options = { + configurationSection = { "html", "css", "javascript" }, + embeddedLanguages = { + css = true, + javascript = true, + }, + provideFormatter = true, + }, +}) require('lspconfig')['pylsp'].setup{ settings = { pylsp = { @@ -164,50 +278,4 @@ require('lspconfig')['pylsp'].setup{ } } --- lua -require('lspconfig')['lua_ls'].setup{ - settings = { - Lua = { - diagnostics = { - globals = { 'vim', 'require', 'cmp' } - } - } - } -} - - -require'nvim-treesitter.configs'.setup { - -- A list of parser names, or "all" - ensure_installed = { "c", "bash", "javascript" }, - - -- Install parsers synchronously (only applied to `ensure_installed`) - sync_install = false, - - -- Automatically install missing parsers when entering buffer - -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally - auto_install = true, - - -- List of parsers to ignore installing (for "all") - ignore_install = { "javascript" }, - - ---- If you need to change the installation directory of the parsers (see -> Advanced Setup) - -- parser_install_dir = "/some/path/to/store/parsers", -- Remember to run vim.opt.runtimepath:append("/some/path/to/store/parsers")! - - highlight = { - -- `false` will disable the whole extension - enable = true, - - -- Setting this to true will run `:h syntax` and tree-sitter at the same time. - -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). - -- Using this option may slow down your editor, and you may see some duplicate highlights. - -- Instead of true it can also be a list of languages - additional_vim_regex_highlighting = false, - }, -} - --- vim.wo.foldtext = 'v:lua.vim.treesitter.foldtext()' -- not available yet in my installation -vim.wo.foldexpr = 'v:lua.vim.treesitter.foldexpr()' -vim.wo.foldlevel = 1 - - -- vim: tabstop=2 shiftwidth=2 softtabstop=2 -- cgit v1.2.3