2022-01-02 20:45:45 -08:00
-- general
lvim.log . level = " warn "
lvim.format_on_save = true
lvim.colorscheme = " onedarker "
lvim.leader = " space "
lvim.keys . normal_mode [ " <C-s> " ] = " :w<cr> "
lvim.builtin . dashboard.active = true
lvim.builtin . terminal.active = true
2022-01-04 23:01:21 -08:00
-- Nvimtree
2022-01-02 20:45:45 -08:00
lvim.builtin . nvimtree.setup . view.side = " left "
lvim.builtin . nvimtree.show_icons . git = 1
2022-01-04 23:01:21 -08:00
lvim.builtin . nvimtree.hide_dotfiles = 0
-- Treesitter
lvim.builtin . treesitter.highlight . enabled = true
lvim.builtin . treesitter.matchup . enable = true
lvim.builtin . treesitter.context_commentstring . enable = true
2022-01-02 20:45:45 -08:00
local components = require ( " lvim.core.lualine.components " )
lvim.builtin . lualine.sections . lualine_a = { " mode " }
lvim.builtin . lualine.sections . lualine_c = { components.python_env }
2022-01-21 17:21:04 -08:00
lvim.builtin . lualine.sections . lualine_y = { components.location , }
2022-01-02 20:45:45 -08:00
lvim.builtin . treesitter.ensure_installed = {
" bash " ,
" c " ,
" javascript " ,
" json " ,
" lua " ,
" python " ,
" typescript " ,
" css " ,
" rust " ,
" java " ,
" yaml " ,
2022-01-21 17:21:04 -08:00
" dockerfile " ,
" markdown " ,
" make "
2022-01-02 20:45:45 -08:00
}
lvim.builtin . treesitter.ignore_install = { " haskell " }
lvim.builtin . treesitter.highlight . enabled = true
2022-01-21 17:21:04 -08:00
-- formatters
2022-01-02 20:45:45 -08:00
local formatters = require " lvim.lsp.null-ls.formatters "
formatters.setup {
{ exe = " black " , filetypes = { " python " } } ,
{ exe = " isort " , filetypes = { " python " } } ,
{
exe = " prettier " ,
args = { " --print-with " , " 80 " } ,
filetypes = { " typescript " , " typescriptreact " , " javascript " , " javascriptreact " } ,
} ,
{ exe = " shfmt " , filetypes = { " shell " , " sh " } , args = { ' -i=0 ' , ' -sr ' , ' -ci ' } } ,
}
2022-01-21 17:21:04 -08:00
-- linters
2022-01-02 20:45:45 -08:00
local linters = require " lvim.lsp.null-ls.linters "
linters.setup {
{ exe = " flake8 " , filetypes = { " python " } } ,
{
exe = " shellcheck " ,
2022-01-21 17:21:04 -08:00
filetypes = { " shell " , " sh " } ,
args = { " --severity " , " warning " , " --shell " , " /bin/bash " , " --enable " , " check-unassigned-uppercase,add-default-case,deprecate-which " } ,
} ,
2022-01-04 23:01:21 -08:00
}
2022-01-21 17:21:04 -08:00
-- lsp signature cfg
2022-01-04 23:01:21 -08:00
local lsp_signature_cfg = {
debug = false , -- set to true to enable debug logging
2022-01-21 17:21:04 -08:00
-- log_path = vim.fn.stdpath("cache") .. "/lsp_signature.log", -- log dir when debug is on
2022-01-04 23:01:21 -08:00
-- default is ~/.cache/nvim/lsp_signature.log
verbose = false , -- show debug line number
bind = true , -- This is mandatory, otherwise border config won't get registered.
-- If you want to hook lspsaga or other signature handler, pls set to false
doc_lines = 15 , -- will show two lines of comment/doc(if there are more than two lines in doc, will be truncated);
-- set to 0 if you DO NOT want any API comments be shown
-- This setting only take effect in insert mode, it does not affect signature help in normal
-- mode, 10 by default
floating_window = true , -- show hint in a floating window, set to false for virtual text only mode
floating_window_above_cur_line = true , -- try to place the floating above the current line when possible Note:
-- will set to true when fully tested, set to false will use whichever side has more space
-- this setting will be helpful if you do not want the PUM and floating win overlap
fix_pos = true , -- set to true, the floating window will not auto-close until finish all parameters
hint_enable = true , -- virtual hint enable
hint_prefix = " 🐼 " , -- Panda for parameter
hint_scheme = " String " ,
use_lspsaga = false , -- set to true if you want to use lspsaga popup
hi_parameter = " LspSignatureActiveParameter " , -- how your parameter will be highlight
max_height = 20 , -- max height of signature floating_window, if content is more than max_height, you can scroll down
-- to view the hiding contents
2022-01-21 17:21:04 -08:00
max_width = 120 , -- max_width of signature floating_window, line will be wrapped if exceed max_width
2022-01-04 23:01:21 -08:00
handler_opts = {
border = " rounded " -- double, rounded, single, shadow, none
2022-01-02 20:45:45 -08:00
} ,
2022-01-04 23:01:21 -08:00
always_trigger = false , -- sometime show signature on new line or in middle of parameter can be confusing, set it to false for #58
auto_close_after = nil , -- autoclose signature float win after x sec, disabled if nil.
extra_trigger_chars = { } , -- Array of extra characters that will trigger signature completion, e.g., {"(", ","}
zindex = 200 , -- by default it will be on top of all floating windows, set to <= 50 send it to bottom
padding = ' ' , -- character to pad on left and right of signature can be ' ', or '|' etc
2022-01-21 17:21:04 -08:00
transparency = 85 , -- disabled by default, allow floating win transparent value 1~100
2022-01-04 23:01:21 -08:00
shadow_blend = 36 , -- if you using shadow as border use this set the opacity
shadow_guibg = ' Black ' , -- if you using shadow as border use this set the color e.g. 'Green' or '#121315'
timer_interval = 200 , -- default timer check interval set to lower value if you want to reduce latency
2022-01-21 17:21:04 -08:00
toggle_key = ' <C-l> ' -- toggle signature on and off in insert mode, e.g. toggle_key = '<M-x>'
2022-01-02 20:45:45 -08:00
}
-- Additional Plugins
lvim.plugins = {
{
" folke/trouble.nvim " ,
cmd = " TroubleToggle " ,
} ,
{
" simrat39/symbols-outline.nvim " ,
cmd = " SymbolsOutline " ,
} ,
{
" ray-x/lsp_signature.nvim " ,
event = " BufRead " ,
config = function ( )
2022-01-04 23:01:21 -08:00
require " lsp_signature " . setup ( lsp_signature_cfg )
2022-01-02 20:45:45 -08:00
end
} ,
{
" rmagatti/goto-preview " ,
config = function ( )
require ( ' goto-preview ' ) . setup {
2022-01-21 17:21:04 -08:00
width = 100 ; -- Width of the floating window
2022-01-02 20:45:45 -08:00
height = 25 ; -- Height of the floating window
default_mappings = false ; -- Bind default mappings
debug = false ; -- Print debug information
opacity = nil ; -- 0-100 opacity level of the floating window where 100 is fully transparent.
post_open_hook = nil -- A function taking two arguments, a buffer and a window to be ran as a hook.
-- You can use "default_mappings = true" setup option
-- Or explicitly set keybindings
-- vim.cmd("nnoremap gpd <cmd>lua require('goto-preview').goto_preview_definition()<CR>")
-- vim.cmd("nnoremap gpi <cmd>lua require('goto-preview').goto_preview_implementation()<CR>")
-- vim.cmd("nnoremap gP <cmd>lua require('goto-preview').close_all_win()<CR>")
}
end
} ,
2022-01-04 23:01:21 -08:00
{
" iamcco/markdown-preview.nvim " ,
run = " cd app && npm install " ,
ft = " markdown " ,
config = function ( )
vim.g . mkdp_auto_start = 1
end ,
} ,
{
" ethanholz/nvim-lastplace " ,
event = " BufRead " ,
config = function ( )
require ( " nvim-lastplace " ) . setup ( {
lastplace_ignore_buftype = { " quickfix " , " nofile " , " help " } ,
lastplace_ignore_filetype = {
" gitcommit " , " gitrebase " , " svn " , " hgcommit " ,
} ,
lastplace_open_folds = true ,
} )
end ,
} ,
2022-01-02 20:45:45 -08:00
' wakatime/vim-wakatime ' ,
2022-01-04 23:01:21 -08:00
' ap/vim-css-color ' ,
" p00f/nvim-ts-rainbow " ,
2022-01-21 17:21:04 -08:00
" tzachar/cmp-tabnine " ,
" onsails/lspkind-nvim "
2022-01-02 20:45:45 -08:00
}
-- add jedi_language_server
lvim.lsp . templates_dir = join_paths ( get_runtime_dir ( ) , " after " , " ftplugin " )
local opts = { }
require ( " lvim.lsp.manager " ) . setup ( " jedi_language_server " , opts )
require ' lspconfig ' . sqlls.setup { }
-- add bashls
-- require('lspconfig').bashls.setup{}
require ' lspconfig ' . bashls.setup { }
2022-01-21 17:21:04 -08:00
-- Setup nvim-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.
-- end,
-- },
-- mapping = {
-- ['<C-b>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }),
-- ['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }),
-- ['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }),
-- ['<C-y>'] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping.
-- ['<C-e>'] = cmp.mapping({
-- i = cmp.mapping.abort(),
-- c = cmp.mapping.close(),
-- }),
-- ['<CR>'] = 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 = 'buffer' },
-- })
-- })
-- -- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore).
-- cmp.setup.cmdline('/', {
-- sources = {
-- { name = 'buffer' }
-- }
-- })
-- -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
-- cmp.setup.cmdline(':', {
-- sources = cmp.config.sources({
-- { name = 'path' }
-- }, {
-- { name = 'cmdline' }
-- })
-- })
-- Setup lspconfig.
local capabilities = require ( ' cmp_nvim_lsp ' ) . update_capabilities ( vim.lsp . protocol.make_client_capabilities ( ) )
-- Replace <YOUR_LSP_SERVER> with each lsp server you've enabled.
require ( ' lspconfig ' ) [ ' jedi_language_server ' ] . setup {
capabilities = capabilities
}
require ( ' lspconfig ' ) [ ' bashls ' ] . setup {
capabilities = capabilities
}
require ( ' lspconfig ' ) [ ' dockerls ' ] . setup {
capabilities = capabilities
}
require ( ' lspconfig ' ) [ ' jsonls ' ] . setup {
capabilities = capabilities
}
require ( ' lspconfig ' ) [ ' sumneko_lua ' ] . setup {
capabilities = capabilities
}
require ( ' lspconfig ' ) [ ' pyright ' ] . setup {
capabilities = capabilities
}
require ( ' lspconfig ' ) [ ' dotls ' ] . setup {
capabilities = capabilities
}
require ( ' lspconfig ' ) [ ' yamlls ' ] . setup {
capabilities = capabilities
}
require ( ' lspconfig ' ) [ ' html ' ] . setup {
capabilities = capabilities
}
require ( ' lspconfig ' ) [ ' eslint ' ] . setup {
capabilities = capabilities
}
2022-01-02 20:45:45 -08:00
-- lsp_signature
2022-01-21 17:21:04 -08:00
-- require'lsp_signature'.setup(lsp_signature_cfg)
2022-01-02 20:45:45 -08:00
require ( ' goto-preview ' ) . setup {
2022-01-21 17:21:04 -08:00
width = 150 ; -- Width of the floating window
height = 45 ; -- Height of the floating window
2022-01-02 20:45:45 -08:00
border = { " ↖ " , " ─ " , " ┐ " , " │ " , " ┘ " , " ─ " , " └ " , " │ " } ; -- Border characters of the floating window
default_mappings = true ; -- Bind default mappings
debug = false ; -- Print debug information
2022-01-21 17:21:04 -08:00
opacity = 55 ; -- 0-100 opacity level of the floating window where 100 is fully transparent.
2022-01-02 20:45:45 -08:00
resizing_mappings = false ; -- Binds arrow keys to resizing the floating window.
post_open_hook = nil ; -- A function taking two arguments, a buffer and a window to be ran as a hook.
-- These two configs can also be passed down to the goto-preview definition and implementation calls for one off "peak" functionality.
focus_on_open = true ; -- Focus the floating window when opening it.
dismiss_on_move = false ; -- Dismiss the floating window when moving the cursor.
force_close = true , -- passed into vim.api.nvim_win_close's second argument. See :h nvim_win_close
bufhidden = " wipe " , -- the bufhidden option to set on the floating window. See :h bufhidden
}
-- init.lua
vim.g . symbols_outline = {
highlight_hovered_item = true ,
show_guides = true ,
auto_preview = true ,
position = ' right ' ,
relative_width = true ,
2022-01-21 17:21:04 -08:00
width = 30 ,
2022-01-02 20:45:45 -08:00
show_numbers = false ,
show_relative_numbers = false ,
show_symbol_details = true ,
preview_bg_highlight = ' Pmenu ' ,
keymaps = { -- These keymaps can be a string or a table for multiple keys
close = { " <Esc> " , " q " } ,
goto_location = " <Cr> " ,
focus_location = " o " ,
hover_symbol = " <C-space> " ,
toggle_preview = " K " ,
rename_symbol = " r " ,
code_actions = " a " ,
} ,
lsp_blacklist = { } ,
symbol_blacklist = { } ,
symbols = {
File = { icon = " " , hl = " TSURI " } ,
Module = { icon = " " , hl = " TSNamespace " } ,
Namespace = { icon = " " , hl = " TSNamespace " } ,
Package = { icon = " " , hl = " TSNamespace " } ,
Class = { icon = " 𝓒 " , hl = " TSType " } ,
Method = { icon = " ƒ " , hl = " TSMethod " } ,
Property = { icon = " " , hl = " TSMethod " } ,
Field = { icon = " " , hl = " TSField " } ,
Constructor = { icon = " " , hl = " TSConstructor " } ,
Enum = { icon = " ℰ " , hl = " TSType " } ,
Interface = { icon = " ﰮ " , hl = " TSType " } ,
Function = { icon = " " , hl = " TSFunction " } ,
Variable = { icon = " " , hl = " TSConstant " } ,
Constant = { icon = " " , hl = " TSConstant " } ,
String = { icon = " 𝓐 " , hl = " TSString " } ,
Number = { icon = " # " , hl = " TSNumber " } ,
Boolean = { icon = " ⊨ " , hl = " TSBoolean " } ,
Array = { icon = " " , hl = " TSConstant " } ,
Object = { icon = " ⦿ " , hl = " TSType " } ,
Key = { icon = " 🔐 " , hl = " TSType " } ,
Null = { icon = " NULL " , hl = " TSType " } ,
EnumMember = { icon = " " , hl = " TSField " } ,
Struct = { icon = " 𝓢 " , hl = " TSType " } ,
Event = { icon = " 🗲 " , hl = " TSType " } ,
Operator = { icon = " + " , hl = " TSOperator " } ,
TypeParameter = { icon = " 𝙏 " , hl = " TSParameter " }
}
}
2022-01-21 17:21:04 -08:00
-- lsp-kind
local lspkind = require ( ' lspkind ' )
cmp.setup {
formatting = {
format = lspkind.cmp_format ( {
with_text = false , -- do not show text alongside icons
maxwidth = 50 , -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters)
-- The function below will be called before any actual modifications from lspkind
-- so that you can provide more controls on popup customization. (See [#30](https://github.com/onsails/lspkind-nvim/pull/30))
-- before = function (entry, vim_item)
-- ...
-- return vim_item
-- end
} )
2022-01-04 23:01:21 -08:00
}
}
2022-01-21 17:21:04 -08:00
-- tabnine
require ' cmp ' . setup {
sources = {
{ name = ' cmp_tabnine ' } ,
} ,
2022-01-04 23:01:21 -08:00
}
2022-01-21 17:21:04 -08:00
local source_mapping = {
buffer = " [Buffer] " ,
nvim_lsp = " [LSP] " ,
nvim_lua = " [Lua] " ,
cmp_tabnine = " [TN] " ,
path = " [Path] " ,
2022-01-04 23:01:21 -08:00
}
2022-01-21 17:21:04 -08:00
require ' cmp ' . setup {
sources = {
{ name = ' cmp_tabnine ' } ,
} ,
formatting = {
format = function ( entry , vim_item )
vim_item.kind = lspkind.presets . default [ vim_item.kind ]
local menu = source_mapping [ entry.source . name ]
if entry.source . name == ' cmp_tabnine ' then
if entry.completion_item . data ~= nil and entry.completion_item . data.detail ~= nil then
menu = entry.completion_item . data.detail .. ' ' .. menu
end
vim_item.kind = ' '
end
vim_item.menu = menu
return vim_item
end
} ,
2022-01-04 23:01:21 -08:00
}
2022-01-02 20:45:45 -08:00
2022-01-21 17:21:04 -08:00
-- custom settings
local init_custom_options = function ( )
local custom_options = {
relativenumber = true ,
colorcolumn = " 80 " ,
scrolloff = 10 ,
ignorecase = true ,
smartcase = true ,
tabstop = 4 ,
shiftwidth = 4 ,
undofile = false ,
}
for k , v in pairs ( custom_options ) do
vim.opt [ k ] = v
end
end
init_custom_options ( )
-- move windows to right side of screen
vim.cmd ( " autocmd! BufEnter * if &ft ==# 'help' | wincmd L | endif " )
vim.cmd ( " autocmd! BufEnter * if &ft ==# 'man' | wincmd L | endif " )
2022-01-02 20:45:45 -08:00
-- Autocommands (https://neovim.io/doc/user/autocmd.html)
-- lvim.autocommands.custom_groups = {
-- { "BufWinEnter", "*.lua", "setlocal ts=8 sw=8" },
-- }