aboutsummaryrefslogtreecommitdiff
path: root/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua308
1 files changed, 188 insertions, 120 deletions
diff --git a/init.lua b/init.lua
index 2dc45ee..ce9d584 100644
--- a/init.lua
+++ b/init.lua
@@ -1,43 +1,165 @@
1vim.cmd('source ~/.vim/vimrc') 1--------------------------------------------------------------------------------
2-- lazy plugin manager
3--------------------------------------------------------------------------------
4local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
5if not (vim.uv or vim.loop).fs_stat(lazypath) then
6 vim.fn.system({
7 "git",
8 "clone",
9 "--filter = blob:none",
10 "https://github.com/folke/lazy.nvim.git",
11 "--branch = stable", -- latest stable release
12 lazypath,
13 })
14end
15vim.opt.rtp:prepend(lazypath)
16require("lazy").setup({
17 'nvim-tree/nvim-web-devicons',
18 'lewis6991/gitsigns.nvim',
19 'folke/neodev.nvim',
20 'neovim/nvim-lspconfig',
21 'hrsh7th/cmp-nvim-lsp',
22 'hrsh7th/cmp-buffer',
23 'hrsh7th/cmp-path',
24 'hrsh7th/cmp-cmdline',
25 'hrsh7th/nvim-cmp',
26 'hrsh7th/vim-vsnip',
27 'octaltree/cmp-look',
28 'L3MON4D3/LuaSnip',
29 'saadparwaiz1/cmp_luasnip',
30 'RRethy/base16-nvim',
31 'nvim-treesitter/nvim-treesitter',
32 'nvim-lua/popup.nvim',
33 'nvim-lua/plenary.nvim',
34 'nvim-telescope/telescope.nvim',
35 'nvim-telescope/telescope-media-files.nvim',
36 'coderonline/vim-fancy-line',
37 'coderonline/vim-recently-used',
38 'norcalli/nvim-colorizer.lua',
39 'folke/trouble.nvim',
40})
2 41
42--------------------------------------------------------------------------------
43-- vim options, first sourced from vimrc, then appended by Neovim specific stuff
44--------------------------------------------------------------------------------
45local configdir = vim.fn.fnamemodify(vim.fn.expand("$MYVIMRC"), ":p:h")
46vim.cmd('source ' .. configdir .. '/vimrc')
47vim.cmd.colorscheme "base16-rebecca"
48-- vim.cmd.colorscheme "base16-katy"
49
50vim.opt.encoding = 'utf-8'
51vim.opt.number = true
52vim.opt.number = true
53vim.opt.shiftwidth = 2
54vim.opt.tabstop = 2
55vim.opt.softtabstop = 2
56vim.opt.inccommand = "nosplit" -- Neovim only: preview substitute and such things in real time
3vim.opt.termguicolors = true 57vim.opt.termguicolors = true
4vim.opt.exrc = true 58vim.opt.shadafile = configdir .. "/shada.file"
5vim.opt.foldmethod = 'syntax' 59
60-- Restore cursor position
61vim.api.nvim_create_autocmd({ "BufReadPost" }, {
62 callback = function() vim.cmd('silent! normal! g`"zv') end
63})
64
65vim.api.nvim_create_user_command(
66 'LspFix',
67 function()
68 vim.lsp.buf.code_action()
69 end, {}
70)
6 71
7if vim.fn.has("win32") then 72if vim.fn.has("win32") then
8 vim.opt.rtp:append(vim.fn.expand("$HOME\\scoop\\shims")) 73 vim.opt.rtp:append(vim.fn.expand("$HOME\\scoop\\shims"))
9end 74end
10 75
11vim.opt.runtimepath:remove("/usr/share/vim/vimfiles") 76vim.g.lsp_log_verbose = 1
12vim.keymap.set('n', '<F12>', ':Buffers<CR>') 77vim.g.lsp_log_file = configdir .. ('/vim-lsp.log')
13 78
79if vim.g.neovide then
80 vim.guifont = "monospace:h11:b"
81 vim.g.neovide_cursor_animation_length = 0.03
82 vim.g.neovide_cursor_trail_size = 0.8
83 vim.g.neovide_scroll_animation_length = 0.05
84 vim.g.neovide_transparency = 0.9
85 vim.g.neovide_cursor_animation_length=0
86 vim.g.neovide_cursor_vfx_mode = ""
87 vim.g.neovide_floating_blur_amount_x = 4.0
88 vim.g.neovide_floating_blur_amount_y = 4.0
89 vim.g.neovide_background_color = '#383a62'
90 vim.g.neovide_scale_factor = 1.0
91end
14 92
93--------------------------------------------------------------------------------
94-- plugin setup and options
95--------------------------------------------------------------------------------
96require'nvim-treesitter.configs'.setup {
97 -- A list of parser names, or "all" (the five listed parsers should always be installed)
98 ensure_installed = { "c", "lua", "vim", "vimdoc", "query" },
99 modules = {},
100 -- Install parsers synchronously (only applied to `ensure_installed`)
101 sync_install = false,
102 -- Automatically install missing parsers when entering buffer
103 -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally
104 auto_install = true,
105 ignore_install = { "javascript" },
106 highlight = {
107 enable = true,
108 -- NOTE: these are the names of the parsers and not the filetype. (for example if you want to
109 -- disable highlighting for the `tex` filetype, you need to include `latex` in this list as this is
110 -- the name of the parser)
111 -- list of language that will be disabled
112 disable = function(_, buf)
113 local max_filesize = 100 * 1024 -- 100 KB
114 local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf))
115 if ok and stats and stats.size > max_filesize then
116 return true
117 end
118 end,
119 -- Setting this to true will run `:h syntax` and tree-sitter at the same time.
120 -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation).
121 -- Using this option may slow down your editor, and you may see some duplicate highlights.
122 -- Instead of true it can also be a list of languages
123 additional_vim_regex_highlighting = false,
124 },
125}
15 126
16-- vim.o.shadafile = "/tmp/shada" 127-- vim.wo.foldtext = 'v:lua.vim.treesitter.foldtext()' -- not available yet in my installation
128vim.wo.foldexpr = 'v:lua.vim.treesitter.foldexpr()'
129vim.wo.foldlevel = 1
17 130
18-- only on Linux... 131require('telescope').load_extension('media_files')
19-- vim.o.shadafile = (os.getenv("XDG_CACHE_HOME") or
20-- os.getenv("HOME") .. "/.cache"
21-- ) .. "/vim.shada"
22-- vimscript: get(environ(), "XDG_CACHE_HOME", "~/.cache")."/vim.shada"
23-- require'man'
24 132
25require'colorizer'.setup() 133vim.lsp.set_log_level 'error'
134if vim.fn.has 'nvim-0.5.1' == 1 then
135 require('vim.lsp.log').set_format_func(vim.inspect)
136end
137require'nvim-web-devicons'.setup {
138 color_icons = true;
139 default = true;
140 strict = true;
141}
142require('colorizer').setup()
143require('gitsigns').setup()
144require('trouble').setup()
145require('neodev').setup()
26 146
27-- The nvim-cmp almost supports LSP's capabilities so You should advertise it to LSP servers.. 147local builtin = require('telescope.builtin')
28require('cmp_nvim_lsp').setup{} 148vim.keymap.set('n', '<leader>ff', builtin.find_files, {})
29local capabilities = require('cmp_nvim_lsp').default_capabilities() 149vim.keymap.set('n', '<leader>fg', builtin.live_grep, {})
150vim.keymap.set('n', '<leader>fb', builtin.buffers, {})
151vim.keymap.set('n', '<leader>fh', builtin.help_tags, {})
30 152
153vim.keymap.set({"i", "s"}, "<leader><Tab>", function() require('luasnip').jump(1) end, {silent = true})
154vim.keymap.set({"i", "s"}, "<leader><S-Tab>", function() require('luasnip').jump(-1) end, {silent = true})
31 155
32local cmp = require('cmp'); 156local cmp = require'cmp'
33cmp.setup({ 157cmp.setup({
34 snippet = { 158 snippet = {
35 -- REQUIRED - you must specify a snippet engine 159 -- REQUIRED - you must specify a snippet engine
36 expand = function(args) 160 expand = function(args)
37 vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users. 161 require('luasnip').lsp_expand(args.body) -- For `luasnip` users.
38 -- require('luasnip').lsp_expand(args.body) -- For `luasnip` users. 162 -- vim.snippet.expand(args.body) -- For native neovim snippets (Neovim v0.10+)
39 -- require('snippy').expand_snippet(args.body) -- For `snippy` users.
40 -- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users.
41 end, 163 end,
42 }, 164 },
43 window = { 165 window = {
@@ -47,34 +169,13 @@ cmp.setup({
47 mapping = cmp.mapping.preset.insert({ 169 mapping = cmp.mapping.preset.insert({
48 ['<C-b>'] = cmp.mapping.scroll_docs(-4), 170 ['<C-b>'] = cmp.mapping.scroll_docs(-4),
49 ['<C-f>'] = cmp.mapping.scroll_docs(4), 171 ['<C-f>'] = cmp.mapping.scroll_docs(4),
50 ["<Tab>"] = cmp.mapping.select_next_item({behavior=cmp.SelectBehavior.Insert}),
51 ["<S-Tab>"] = cmp.mapping.select_prev_item({behavior=cmp.SelectBehavior.Insert}),
52 ['<C-Space>'] = cmp.mapping.complete(), 172 ['<C-Space>'] = cmp.mapping.complete(),
53 ['<C-e>'] = cmp.mapping.abort(), 173 ['<C-e>'] = cmp.mapping.abort(),
54 -- ['<CR>'] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. 174 ['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
55
56 ["<CR>"] = cmp.mapping.confirm({
57 behavior = cmp.ConfirmBehavior.Replace,
58 select = true,
59 }),
60
61 ['<C-s>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
62 }), 175 }),
63 sources = cmp.config.sources({ 176 sources = cmp.config.sources({
64 { name = 'nvim_lsp' }, 177 { name = 'nvim_lsp' },
65 { name = 'vsnip' }, -- For vsnip users. 178 { name = 'luasnip' }, -- For luasnip users.
66 -- { name = 'luasnip' }, -- For luasnip users.
67 -- { name = 'ultisnips' }, -- For ultisnips users.
68 -- { name = 'snippy' }, -- For snippy users.
69 }, {
70 { name = 'buffer' },
71 })
72})
73
74-- Set configuration for specific filetype.
75cmp.setup.filetype('gitcommit', {
76 sources = cmp.config.sources({
77 { name = 'cmp_git' }, -- You can specify the `cmp_git` source if you were installed it.
78 }, { 179 }, {
79 { name = 'buffer' }, 180 { name = 'buffer' },
80 }) 181 })
@@ -82,75 +183,88 @@ cmp.setup.filetype('gitcommit', {
82 183
83-- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore). 184-- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore).
84cmp.setup.cmdline({ '/', '?' }, { 185cmp.setup.cmdline({ '/', '?' }, {
85 -- mapping = cmp.mapping.preset.cmdline(), 186 mapping = cmp.mapping.preset.cmdline({
86 sources = { 187 ['<Down>'] = { c = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }) },
87 { name = 'buffer' } 188 ['<Up>'] = { c = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }) },
88 } 189 }),
190 sources = {{ name = 'buffer' }}
89}) 191})
90 192
91-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). 193-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
92cmp.setup.cmdline(':', { 194cmp.setup.cmdline(':', {
93 -- mapping = cmp.mapping.preset.cmdline(), 195 mapping = cmp.mapping.preset.cmdline({
94 sources = cmp.config.sources({ 196 ['<Down>'] = { c = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }) },
95 { name = 'cmdline' } 197 ['<Up>'] = { c = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }) },
96 }) 198 }),
199 sources = cmp.config.sources(
200 {{ name = 'path' }},
201 {{ name = 'cmdline' }}
202 ),
203 matching = {
204 disallow_symbol_nonprefix_matching = false,
205 disallow_partial_matching = false,
206 disallow_fullfuzzy_matching = false,
207 disallow_fuzzy_matching = false,
208 disallow_partial_fuzzy_matching = false,
209 disallow_prefix_unmatching = false,
210 }
97}) 211})
98 212
213-- Set up lspconfig.
214local capabilities = require('cmp_nvim_lsp').default_capabilities()
99 215
100-- # Language Servers 216-- # Language Servers
101-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md 217-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md
102 218
103-- The following example advertise capabilities to `clangd`.
104-- C/C++ | clang 219-- C/C++ | clang
105require('lspconfig')['clangd'].setup{capabilities = capabilities} 220require('lspconfig')['clangd'].setup{capabilities = capabilities}
106 221-- lua (but not init.lua entirely, hence why neodev)
222require('lspconfig')['lua_ls'].setup { capabilities = capabilities }
223-- 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 }
224require'lspconfig'.jdtls.setup{}
107-- bash | bash-language-server 225-- bash | bash-language-server
108require('lspconfig')['bashls'].setup{capabilities = capabilities} 226require('lspconfig')['bashls'].setup{capabilities = capabilities}
109
110-- ccs | vscode-css-languageserver 227-- ccs | vscode-css-languageserver
111require('lspconfig')['cssls'].setup{capabilities = capabilities} 228require('lspconfig')['cssls'].setup{capabilities = capabilities}
112
113-- rust | rust-analyzer 229-- rust | rust-analyzer
114require('lspconfig')['rust_analyzer'].setup{capabilities = capabilities} 230require('lspconfig')['rust_analyzer'].setup{capabilities = capabilities}
115
116-- javascript | eslint 231-- javascript | eslint
117require('lspconfig')['eslint'].setup{capabilities = capabilities} 232require('lspconfig')['eslint'].setup{capabilities = capabilities}
118
119-- javascript | typescript-language-server 233-- javascript | typescript-language-server
120require('lspconfig')['tsserver'].setup{capabilities = capabilities} 234require('lspconfig')['tsserver'].setup{capabilities = capabilities}
121
122-- vimscript | vim-language-server 235-- vimscript | vim-language-server
123require('lspconfig')['vimls'].setup{capabilities = capabilities} 236require('lspconfig')['vimls'].setup{capabilities = capabilities}
124 237-- html
125require('lspconfig')['html'].setup{capabilities = capabilities} 238require('lspconfig')['html'].setup{capabilities = capabilities}
126 239-- jsonls
127require('lspconfig')['jsonls'].setup{capabilities = capabilities} 240require('lspconfig')['jsonls'].setup{capabilities = capabilities}
128
129-- C/C++ | clang 241-- C/C++ | clang
130require('lspconfig')['clangd'].setup{capabilities = capabilities} 242require('lspconfig')['clangd'].setup{capabilities = capabilities}
131
132-- bash | bash-language-server 243-- bash | bash-language-server
133require('lspconfig')['bashls'].setup{capabilities = capabilities} 244require('lspconfig')['bashls'].setup{capabilities = capabilities}
134
135-- ccs | vscode-css-languageserver 245-- ccs | vscode-css-languageserver
136require('lspconfig')['cssls'].setup{capabilities = capabilities} 246require('lspconfig')['cssls'].setup{capabilities = capabilities}
137
138-- rust | rust-analyzer 247-- rust | rust-analyzer
139require('lspconfig')['rust_analyzer'].setup{capabilities = capabilities} 248require('lspconfig')['rust_analyzer'].setup{capabilities = capabilities}
140
141-- javascript | eslint 249-- javascript | eslint
142require('lspconfig')['eslint'].setup{capabilities = capabilities} 250require('lspconfig')['eslint'].setup{capabilities = capabilities}
143
144-- javascript | typescript-language-server 251-- javascript | typescript-language-server
145require('lspconfig')['tsserver'].setup{capabilities = capabilities} 252require('lspconfig')['tsserver'].setup{capabilities = capabilities}
146
147-- vimscript | vim-language-server 253-- vimscript | vim-language-server
148require('lspconfig')['vimls'].setup{capabilities = capabilities} 254require('lspconfig')['vimls'].setup{capabilities = capabilities}
149 255-- configure html server
150require('lspconfig')['html'].setup{capabilities = capabilities} 256require('lspconfig')["html"].setup({
151 257 capabilities = capabilities,
152require('lspconfig')['jsonls'].setup{capabilities = capabilities} 258 -- on_attach = on_attach,
153 259 init_options = {
260 configurationSection = { "html", "css", "javascript" },
261 embeddedLanguages = {
262 css = true,
263 javascript = true,
264 },
265 provideFormatter = true,
266 },
267})
154require('lspconfig')['pylsp'].setup{ 268require('lspconfig')['pylsp'].setup{
155 settings = { 269 settings = {
156 pylsp = { 270 pylsp = {
@@ -164,50 +278,4 @@ require('lspconfig')['pylsp'].setup{
164 } 278 }
165} 279}
166 280
167-- lua
168require('lspconfig')['lua_ls'].setup{
169 settings = {
170 Lua = {
171 diagnostics = {
172 globals = { 'vim', 'require', 'cmp' }
173 }
174 }
175 }
176}
177
178
179require'nvim-treesitter.configs'.setup {
180 -- A list of parser names, or "all"
181 ensure_installed = { "c", "bash", "javascript" },
182
183 -- Install parsers synchronously (only applied to `ensure_installed`)
184 sync_install = false,
185
186 -- Automatically install missing parsers when entering buffer
187 -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally
188 auto_install = true,
189
190 -- List of parsers to ignore installing (for "all")
191 ignore_install = { "javascript" },
192
193 ---- If you need to change the installation directory of the parsers (see -> Advanced Setup)
194 -- parser_install_dir = "/some/path/to/store/parsers", -- Remember to run vim.opt.runtimepath:append("/some/path/to/store/parsers")!
195
196 highlight = {
197 -- `false` will disable the whole extension
198 enable = true,
199
200 -- Setting this to true will run `:h syntax` and tree-sitter at the same time.
201 -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation).
202 -- Using this option may slow down your editor, and you may see some duplicate highlights.
203 -- Instead of true it can also be a list of languages
204 additional_vim_regex_highlighting = false,
205 },
206}
207
208-- vim.wo.foldtext = 'v:lua.vim.treesitter.foldtext()' -- not available yet in my installation
209vim.wo.foldexpr = 'v:lua.vim.treesitter.foldexpr()'
210vim.wo.foldlevel = 1
211
212
213-- vim: tabstop=2 shiftwidth=2 softtabstop=2 281-- vim: tabstop=2 shiftwidth=2 softtabstop=2
..