mirror of
https://github.com/kristoferssolo/solorice.git
synced 2025-10-21 20:10:34 +00:00
Rewrite init.vim to init.lua
This commit is contained in:
parent
7ccb2d3eb3
commit
a7bec557b8
21
.config/nvim/init.lua
Normal file
21
.config/nvim/init.lua
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
require ('user.options')
|
||||||
|
require ('user.keymaps')
|
||||||
|
require ('user.plugins')
|
||||||
|
require ('user.colorscheme')
|
||||||
|
require ('user.cmp')
|
||||||
|
require ('user.lsp')
|
||||||
|
require ('user.telescope')
|
||||||
|
require ('user.treesitter')
|
||||||
|
require ('user.autopairs')
|
||||||
|
require ('user.comment')
|
||||||
|
require ('user.gitsigns')
|
||||||
|
require ('user.nvim-tree')
|
||||||
|
require ('user.bufferline')
|
||||||
|
require ('user.lualine')
|
||||||
|
require ('user.toggleterm')
|
||||||
|
require ('user.project')
|
||||||
|
require ('user.impatient')
|
||||||
|
require ('user.indentline')
|
||||||
|
require ('user.alpha')
|
||||||
|
require ('user.whichkey')
|
||||||
|
require ('user.autocommands')
|
||||||
@ -1,344 +0,0 @@
|
|||||||
let mapleader=" "
|
|
||||||
|
|
||||||
set mouse=a
|
|
||||||
set number
|
|
||||||
set relativenumber
|
|
||||||
set autoindent
|
|
||||||
set smarttab
|
|
||||||
set ignorecase
|
|
||||||
set smartcase
|
|
||||||
set termguicolors
|
|
||||||
syntax on
|
|
||||||
|
|
||||||
" Autocompletion
|
|
||||||
set wildmode=longest,list,full
|
|
||||||
|
|
||||||
" Fix splitting
|
|
||||||
set splitbelow splitright
|
|
||||||
|
|
||||||
"Tab settings
|
|
||||||
set expandtab
|
|
||||||
set shiftwidth=4
|
|
||||||
set softtabstop=4
|
|
||||||
set tabstop=4
|
|
||||||
|
|
||||||
set clipboard+=unnamedplus
|
|
||||||
|
|
||||||
|
|
||||||
call plug#begin()
|
|
||||||
|
|
||||||
Plug 'andweeb/presence.nvim'
|
|
||||||
Plug 'ap/vim-css-color'
|
|
||||||
Plug 'jiangmiao/auto-pairs'
|
|
||||||
Plug 'kyazdani42/nvim-web-devicons'
|
|
||||||
Plug 'L3MON4D3/LuaSnip'
|
|
||||||
Plug 'lewis6991/gitsigns.nvim'
|
|
||||||
Plug 'lukas-reineke/indent-blankline.nvim'
|
|
||||||
Plug 'mattn/emmet-vim'
|
|
||||||
Plug 'Mofiqul/dracula.nvim'
|
|
||||||
Plug 'norcalli/nvim-colorizer.lua'
|
|
||||||
Plug 'numToStr/Comment.nvim'
|
|
||||||
Plug 'nvim-lualine/lualine.nvim'
|
|
||||||
Plug 'nvim-lua/plenary.nvim'
|
|
||||||
Plug 'nvim-telescope/telescope.nvim', { 'tag': '0.1.0' }
|
|
||||||
Plug 'nvim-telescope/telescope-fzf-native.nvim', { 'do': 'make' }
|
|
||||||
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
|
|
||||||
Plug 'preservim/nerdtree'
|
|
||||||
Plug 'rafi/awesome-vim-colorschemes'
|
|
||||||
Plug 'ryanoasis/vim-devicons'
|
|
||||||
Plug 'sbdchd/neoformat'
|
|
||||||
Plug 'vimwiki/vimwiki'
|
|
||||||
Plug 'saecki/crates.nvim'
|
|
||||||
" cmp
|
|
||||||
Plug 'williamboman/nvim-lsp-installer'
|
|
||||||
Plug 'neovim/nvim-lspconfig'
|
|
||||||
Plug 'hrsh7th/cmp-nvim-lsp'
|
|
||||||
Plug 'hrsh7th/cmp-buffer'
|
|
||||||
Plug 'hrsh7th/cmp-path'
|
|
||||||
Plug 'hrsh7th/cmp-cmdline'
|
|
||||||
Plug 'hrsh7th/nvim-cmp'
|
|
||||||
Plug 'saadparwaiz1/cmp_luasnip'
|
|
||||||
|
|
||||||
|
|
||||||
call plug#end()
|
|
||||||
|
|
||||||
colorscheme dracula
|
|
||||||
|
|
||||||
set cursorline
|
|
||||||
set cursorcolumn
|
|
||||||
highlight CursorLine ctermbg=Yellow cterm=bold guibg=#2b2b2b
|
|
||||||
highlight CursorColumn ctermbg=Yellow cterm=bold guibg=#2b2b2b
|
|
||||||
|
|
||||||
nnoremap <leader>n :NERDTreeFocus<CR>
|
|
||||||
nnoremap <C-n> :NERDTree<CR>
|
|
||||||
nnoremap <C-t> :NERDTreeToggle<CR>
|
|
||||||
nnoremap <C-f> :NERDTreeFind<CR>
|
|
||||||
let NERDTreeShowHidden=1
|
|
||||||
|
|
||||||
" Verticaly center document when entering insert mode
|
|
||||||
autocmd InsertEnter * norm zz
|
|
||||||
|
|
||||||
" Remove trailing whitespace on save
|
|
||||||
autocmd BufWritePre * %s/\s\+$//e
|
|
||||||
|
|
||||||
" Enable Disable auto comment
|
|
||||||
map <leader>c :setlocal formatoptions-=cro<CR>
|
|
||||||
map <leader>C :setlocal formatoptions=cro<CR>
|
|
||||||
|
|
||||||
" Enable spell checking, s for spell check
|
|
||||||
map <leader>s :setlocal spell! spelllang=en_us<CR>
|
|
||||||
|
|
||||||
" Enable Disable auto indent
|
|
||||||
map <leader>i :setlocal autoindent<Cr>
|
|
||||||
map <leader>I :setlocal noautoindent<Cr>
|
|
||||||
|
|
||||||
" Shortcutting split navigation
|
|
||||||
map <C-h> <C-w>h
|
|
||||||
map <C-j> <C-w>j
|
|
||||||
map <C-k> <C-w>k
|
|
||||||
map <C-l> <C-w>l
|
|
||||||
|
|
||||||
" Moving line up or down by one line
|
|
||||||
nmap <a-k> :m -2<CR>
|
|
||||||
nmap <a-up> :m -2<CR>
|
|
||||||
nmap <a-j> :m +1<CR>
|
|
||||||
nmap <a-down> :m +1<CR>
|
|
||||||
|
|
||||||
" Alias replace all to S
|
|
||||||
" nnoremap S :%s//gI<Left><Left><Left>
|
|
||||||
nnoremap S :%s//<Left>
|
|
||||||
|
|
||||||
" run current script with python3 by CTRL+R in command and insert mode
|
|
||||||
autocmd FileType python map <buffer> <C-r> :w<CR>:exec '!python3' shellescape(@%, 1)<CR>
|
|
||||||
autocmd FileType python imap <buffer> <C-r> <esc>:w<CR>:exec '!python3' shellescape(@%, 1)<CR>
|
|
||||||
autocmd FileType rust map <buffer> <C-r> :w<CR>:exec '!cargo run'<CR>
|
|
||||||
autocmd FileType rust imap <buffer> <C-r> :w<CR>:exec '!cargo run'<CR>
|
|
||||||
|
|
||||||
" Prettier configuration
|
|
||||||
let g:neoformat_enabled_python = ['autopep8']
|
|
||||||
let g:neoformat_try_node_exe = 1
|
|
||||||
autocmd BufWritePre,InsertLeave *.{py,rs,html,css,md,lua} Neoformat
|
|
||||||
|
|
||||||
" Find files using Telescope command-line sugar.
|
|
||||||
nnoremap <leader>ff <cmd>Telescope find_files hidden=true<cr>
|
|
||||||
nnoremap <leader>fg <cmd>Telescope live_grep<cr>
|
|
||||||
nnoremap <leader>fb <cmd>Telescope buffers<cr>
|
|
||||||
nnoremap <leader>fh <cmd>Telescope help_tags<cr>
|
|
||||||
|
|
||||||
lua << END
|
|
||||||
require('gitsigns').setup()
|
|
||||||
require('Comment').setup()
|
|
||||||
require 'colorizer'.setup()
|
|
||||||
require('crates').setup()
|
|
||||||
vim.opt.list = true
|
|
||||||
vim.opt.listchars:append "eol:↴"
|
|
||||||
vim.opt.listchars:append "space:⋅"
|
|
||||||
require('indent_blankline').setup({
|
|
||||||
space_char_blankline = " ",
|
|
||||||
show_end_of_line = true,
|
|
||||||
show_current_context = true,
|
|
||||||
show_current_context_start = true,
|
|
||||||
})
|
|
||||||
require("nvim-lsp-installer").setup({
|
|
||||||
automatic_installation = true, -- automatically detect which servers to install (based on which servers are set up via lspconfig)
|
|
||||||
ui = {
|
|
||||||
icons = {
|
|
||||||
server_installed = "✓",
|
|
||||||
server_pending = "➜",
|
|
||||||
server_uninstalled = "✗"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
require('lualine').setup {
|
|
||||||
options = {
|
|
||||||
icons_enabled = true,
|
|
||||||
theme = 'dracula',
|
|
||||||
component_separators = { left = '', right = ''},
|
|
||||||
section_separators = { left = '', right = ''},
|
|
||||||
disabled_filetypes = {},
|
|
||||||
always_divide_middle = true,
|
|
||||||
globalstatus = false,
|
|
||||||
},
|
|
||||||
sections = {
|
|
||||||
lualine_a = {'mode'},
|
|
||||||
lualine_b = {'branch', 'diff', 'diagnostics'},
|
|
||||||
lualine_c = {'filename'},
|
|
||||||
lualine_x = {'encoding', 'fileformat', 'filetype'},
|
|
||||||
lualine_y = {'progress'},
|
|
||||||
lualine_z = {'location'}
|
|
||||||
},
|
|
||||||
inactive_sections = {
|
|
||||||
lualine_a = {},
|
|
||||||
lualine_b = {},
|
|
||||||
lualine_c = {'filename'},
|
|
||||||
lualine_x = {'location'},
|
|
||||||
lualine_y = {},
|
|
||||||
lualine_z = {}
|
|
||||||
},
|
|
||||||
tabline = {},
|
|
||||||
extensions = {}
|
|
||||||
}
|
|
||||||
require('telescope').setup{
|
|
||||||
defaults = {
|
|
||||||
vimgrep_arguments = {
|
|
||||||
'rg',
|
|
||||||
'--with-filename',
|
|
||||||
'--line-number',
|
|
||||||
'--column',
|
|
||||||
'--smart-case',
|
|
||||||
'--no-ignore', -- **This is the added flag**
|
|
||||||
'--hidden' -- **Also this flag. The combination of the two is the same as `-uu`**
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-- To get fzf loaded and working with telescope, you need to call
|
|
||||||
-- load_extension, somewhere after setup function:
|
|
||||||
require('telescope').load_extension('fzf')
|
|
||||||
END
|
|
||||||
|
|
||||||
" LSP configs
|
|
||||||
lua << END
|
|
||||||
-- Mappings.
|
|
||||||
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
|
|
||||||
local opts = { noremap=true, silent=true }
|
|
||||||
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts)
|
|
||||||
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts)
|
|
||||||
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts)
|
|
||||||
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts)
|
|
||||||
|
|
||||||
-- Use an on_attach function to only map the following keys
|
|
||||||
-- after the language server attaches to the current buffer
|
|
||||||
local on_attach = function(client, bufnr)
|
|
||||||
-- Enable completion triggered by <c-x><c-o>
|
|
||||||
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
|
|
||||||
|
|
||||||
-- Mappings.
|
|
||||||
-- See `:help vim.lsp.*` for documentation on any of the below functions
|
|
||||||
local bufopts = { noremap=true, silent=true, buffer=bufnr }
|
|
||||||
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
|
|
||||||
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
|
|
||||||
vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts)
|
|
||||||
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
|
|
||||||
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
|
|
||||||
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts)
|
|
||||||
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts)
|
|
||||||
vim.keymap.set('n', '<space>wl', function()
|
|
||||||
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
|
|
||||||
end, bufopts)
|
|
||||||
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
|
|
||||||
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts)
|
|
||||||
vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts)
|
|
||||||
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
|
|
||||||
vim.keymap.set('n', '<space>f', vim.lsp.buf.formatting, bufopts)
|
|
||||||
end
|
|
||||||
|
|
||||||
local lsp_flags = {
|
|
||||||
-- This is the default in Nvim 0.7+
|
|
||||||
debounce_text_changes = 150,
|
|
||||||
}
|
|
||||||
END
|
|
||||||
|
|
||||||
|
|
||||||
" cmp configs
|
|
||||||
set completeopt=menu,menuone,noselect
|
|
||||||
|
|
||||||
lua <<EOF
|
|
||||||
-- 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,
|
|
||||||
},
|
|
||||||
window = {
|
|
||||||
-- completion = cmp.config.window.bordered(),
|
|
||||||
-- documentation = cmp.config.window.bordered(),
|
|
||||||
},
|
|
||||||
mapping = cmp.mapping.preset.insert({
|
|
||||||
['<C-b>'] = cmp.mapping.scroll_docs(-4),
|
|
||||||
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
|
||||||
['<C-Space>'] = cmp.mapping.complete(),
|
|
||||||
['<C-e>'] = cmp.mapping.abort(),
|
|
||||||
['<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 = '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 = 'buffer' },
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore).
|
|
||||||
cmp.setup.cmdline('/', {
|
|
||||||
mapping = cmp.mapping.preset.cmdline(),
|
|
||||||
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 = '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')['pyright'].setup{
|
|
||||||
on_attach = on_attach,
|
|
||||||
flags = lsp_flags,
|
|
||||||
}
|
|
||||||
require('lspconfig')['rust_analyzer'].setup{
|
|
||||||
on_attach = on_attach,
|
|
||||||
flags = lsp_flags,
|
|
||||||
-- Server-specific settings...
|
|
||||||
settings = {
|
|
||||||
["rust-analyzer"] = {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
require('lspconfig')['bashls'].setup{}
|
|
||||||
require('lspconfig')['cssls'].setup{}
|
|
||||||
require('lspconfig')['emmet_ls'].setup{}
|
|
||||||
require('lspconfig')['ltex'].setup{}
|
|
||||||
require('lspconfig')['marksman'].setup{}
|
|
||||||
require('lspconfig')['taplo'].setup{}
|
|
||||||
require('lspconfig')['vimls'].setup{}
|
|
||||||
require('lspconfig')['yamlls'].setup{}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
lua <<EOF
|
|
||||||
require'nvim-treesitter.configs'.setup {
|
|
||||||
highlight = {
|
|
||||||
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,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
42
.config/nvim/lua/user/alpha.lua
Normal file
42
.config/nvim/lua/user/alpha.lua
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
local status_ok, alpha = pcall(require, 'alpha')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local dashboard = require('alpha.themes.dashboard')
|
||||||
|
dashboard.section.header.val = {
|
||||||
|
[[ __ ]],
|
||||||
|
[[ ___ ___ ___ __ __ /\_\ ___ ___ ]],
|
||||||
|
[[ / _ `\ / __`\ / __`\/\ \/\ \\/\ \ / __` __`\ ]],
|
||||||
|
[[/\ \/\ \/\ __//\ \_\ \ \ \_/ |\ \ \/\ \/\ \/\ \ ]],
|
||||||
|
[[\ \_\ \_\ \____\ \____/\ \___/ \ \_\ \_\ \_\ \_\]],
|
||||||
|
[[ \/_/\/_/\/____/\/___/ \/__/ \/_/\/_/\/_/\/_/]],
|
||||||
|
}
|
||||||
|
dashboard.section.buttons.val = {
|
||||||
|
dashboard.button('f', ' Find file', ':Telescope find_files <CR>'),
|
||||||
|
dashboard.button('e', ' New file', ':ene <BAR> startinsert <CR>'),
|
||||||
|
dashboard.button('p', ' Find project', ':Telescope projects <CR>'),
|
||||||
|
dashboard.button('r', ' Recently used files', ':Telescope oldfiles <CR>'),
|
||||||
|
dashboard.button('t', ' Find text', ':Telescope live_grep <CR>'),
|
||||||
|
dashboard.button('c', ' Configuration', ':e ~/.config/nvim/init.lua <CR>'),
|
||||||
|
dashboard.button('q', ' Quit Neovim', ':qa<CR>'),
|
||||||
|
}
|
||||||
|
|
||||||
|
local function footer()
|
||||||
|
-- NOTE: requires the fortune-mod package to work
|
||||||
|
-- local handle = io.popen('fortune')
|
||||||
|
-- local fortune = handle:read('*a')
|
||||||
|
-- handle:close()
|
||||||
|
-- return fortune
|
||||||
|
return 'chrisatmachine.com'
|
||||||
|
end
|
||||||
|
|
||||||
|
dashboard.section.footer.val = footer()
|
||||||
|
|
||||||
|
dashboard.section.footer.opts.hl = 'Type'
|
||||||
|
dashboard.section.header.opts.hl = 'Include'
|
||||||
|
dashboard.section.buttons.opts.hl = 'Keyword'
|
||||||
|
|
||||||
|
dashboard.opts.opts.noautocmd = true
|
||||||
|
-- vim.cmd([[autocmd User AlphaReady echo 'ready']])
|
||||||
|
alpha.setup(dashboard.opts)
|
||||||
43
.config/nvim/lua/user/autocommands.lua
Normal file
43
.config/nvim/lua/user/autocommands.lua
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
vim.cmd [[
|
||||||
|
augroup _general_settings
|
||||||
|
autocmd!
|
||||||
|
autocmd FileType qf,help,man,lspinfo nnoremap <silent> <buffer> q :close<CR>
|
||||||
|
autocmd TextYankPost * silent!lua require('vim.highlight').on_yank({higroup = 'Visual', timeout = 200})
|
||||||
|
autocmd BufWinEnter * :set formatoptions-=cro
|
||||||
|
autocmd FileType qf set nobuflisted
|
||||||
|
augroup end
|
||||||
|
|
||||||
|
augroup _git
|
||||||
|
autocmd!
|
||||||
|
autocmd FileType gitcommit setlocal wrap
|
||||||
|
autocmd FileType gitcommit setlocal spell
|
||||||
|
augroup end
|
||||||
|
|
||||||
|
augroup _markdown
|
||||||
|
autocmd!
|
||||||
|
autocmd FileType markdown setlocal wrap
|
||||||
|
autocmd FileType markdown setlocal spell
|
||||||
|
augroup end
|
||||||
|
|
||||||
|
augroup _auto_resize
|
||||||
|
autocmd!
|
||||||
|
autocmd VimResized * tabdo wincmd =
|
||||||
|
augroup end
|
||||||
|
|
||||||
|
augroup _alpha
|
||||||
|
autocmd!
|
||||||
|
autocmd User AlphaReady set showtabline=0 | autocmd BufUnload <buffer> set showtabline=2
|
||||||
|
augroup end
|
||||||
|
]]
|
||||||
|
|
||||||
|
-- Autoformat
|
||||||
|
-- augroup _lsp
|
||||||
|
-- autocmd!
|
||||||
|
-- autocmd BufWritePre * lua vim.lsp.buf.formatting()
|
||||||
|
-- augroup end
|
||||||
|
|
||||||
|
-- " Verticaly center document when entering insert mode
|
||||||
|
-- autocmd InsertEnter * norm zz
|
||||||
|
|
||||||
|
-- " Remove trailing whitespace on save
|
||||||
|
-- autocmd BufWritePre * %s/\s\+$//e
|
||||||
33
.config/nvim/lua/user/autopairs.lua
Normal file
33
.config/nvim/lua/user/autopairs.lua
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
-- Setup nvim-cmp.
|
||||||
|
local status_ok, npairs = pcall(require, 'nvim-autopairs')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
npairs.setup {
|
||||||
|
check_ts = true,
|
||||||
|
ts_config = {
|
||||||
|
lua = { 'string', 'source' },
|
||||||
|
javascript = { 'string', 'template_string' },
|
||||||
|
java = false,
|
||||||
|
},
|
||||||
|
disable_filetype = { 'TelescopePrompt', 'spectre_panel' },
|
||||||
|
fast_wrap = {
|
||||||
|
map = '<M-e>',
|
||||||
|
chars = { '{', '[', '(', "'", '"' },
|
||||||
|
pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], '%s+', ''),
|
||||||
|
offset = 0, -- Offset from pattern match
|
||||||
|
end_key = '$',
|
||||||
|
keys = 'qwertyuiopzxcvbnmasdfghjkl',
|
||||||
|
check_comma = true,
|
||||||
|
highlight = 'PmenuSel',
|
||||||
|
highlight_grey = 'LineNr',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local cmp_autopairs = require 'nvim-autopairs.completion.cmp'
|
||||||
|
local cmp_status_ok, cmp = pcall(require, 'cmp')
|
||||||
|
if not cmp_status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done { map_char = { tex = '' } })
|
||||||
167
.config/nvim/lua/user/bufferline.lua
Normal file
167
.config/nvim/lua/user/bufferline.lua
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
local status_ok, bufferline = pcall(require, 'bufferline')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
bufferline.setup {
|
||||||
|
options = {
|
||||||
|
numbers = 'none', -- | 'ordinal' | 'buffer_id' | 'both' | function({ ordinal, id, lower, raise }): string,
|
||||||
|
close_command = 'Bdelete! %d', -- can be a string | function, see 'Mouse actions'
|
||||||
|
right_mouse_command = 'Bdelete! %d', -- can be a string | function, see 'Mouse actions'
|
||||||
|
left_mouse_command = 'buffer %d', -- can be a string | function, see 'Mouse actions'
|
||||||
|
middle_mouse_command = nil, -- can be a string | function, see 'Mouse actions'
|
||||||
|
-- NOTE: this plugin is designed with this icon in mind,
|
||||||
|
-- and so changing this is NOT recommended, this is intended
|
||||||
|
-- as an escape hatch for people who cannot bear it for whatever reason
|
||||||
|
indicator_icon = '▎',
|
||||||
|
buffer_close_icon = '',
|
||||||
|
-- buffer_close_icon = '',
|
||||||
|
modified_icon = '●',
|
||||||
|
close_icon = '',
|
||||||
|
-- close_icon = '',
|
||||||
|
left_trunc_marker = '',
|
||||||
|
right_trunc_marker = '',
|
||||||
|
--- name_formatter can be used to change the buffer's label in the bufferline.
|
||||||
|
--- Please note some names can/will break the
|
||||||
|
--- bufferline so use this at your discretion knowing that it has
|
||||||
|
--- some limitations that will *NOT* be fixed.
|
||||||
|
-- name_formatter = function(buf) -- buf contains a 'name', 'path' and 'bufnr'
|
||||||
|
-- -- remove extension from markdown files for example
|
||||||
|
-- if buf.name:match('%.md') then
|
||||||
|
-- return vim.fn.fnamemodify(buf.name, ':t:r')
|
||||||
|
-- end
|
||||||
|
-- end,
|
||||||
|
max_name_length = 30,
|
||||||
|
max_prefix_length = 30, -- prefix used when a buffer is de-duplicated
|
||||||
|
tab_size = 21,
|
||||||
|
diagnostics = false, -- | 'nvim_lsp' | 'coc',
|
||||||
|
diagnostics_update_in_insert = false,
|
||||||
|
-- diagnostics_indicator = function(count, level, diagnostics_dict, context)
|
||||||
|
-- return '('..count..')'
|
||||||
|
-- end,
|
||||||
|
-- NOTE: this will be called a lot so don't do any heavy processing here
|
||||||
|
-- custom_filter = function(buf_number)
|
||||||
|
-- -- filter out filetypes you don't want to see
|
||||||
|
-- if vim.bo[buf_number].filetype ~= '<i-dont-want-to-see-this>' then
|
||||||
|
-- return true
|
||||||
|
-- end
|
||||||
|
-- -- filter out by buffer name
|
||||||
|
-- if vim.fn.bufname(buf_number) ~= '<buffer-name-I-dont-want>' then
|
||||||
|
-- return true
|
||||||
|
-- end
|
||||||
|
-- -- filter out based on arbitrary rules
|
||||||
|
-- -- e.g. filter out vim wiki buffer from tabline in your work repo
|
||||||
|
-- if vim.fn.getcwd() == '<work-repo>' and vim.bo[buf_number].filetype ~= 'wiki' then
|
||||||
|
-- return true
|
||||||
|
-- end
|
||||||
|
-- end,
|
||||||
|
offsets = { { filetype = 'NvimTree', text = '', padding = 1 } },
|
||||||
|
show_buffer_icons = true,
|
||||||
|
show_buffer_close_icons = true,
|
||||||
|
show_close_icon = true,
|
||||||
|
show_tab_indicators = true,
|
||||||
|
persist_buffer_sort = true, -- whether or not custom sorted buffers should persist
|
||||||
|
-- can also be a table containing 2 custom separators
|
||||||
|
-- [focused and unfocused]. eg: { '|', '|' }
|
||||||
|
separator_style = 'thin', -- | 'thick' | 'thin' | { 'any', 'any' },
|
||||||
|
enforce_regular_tabs = true,
|
||||||
|
always_show_bufferline = true,
|
||||||
|
-- sort_by = 'id' | 'extension' | 'relative_directory' | 'directory' | 'tabs' | function(buffer_a, buffer_b)
|
||||||
|
-- -- add custom logic
|
||||||
|
-- return buffer_a.modified > buffer_b.modified
|
||||||
|
-- end
|
||||||
|
},
|
||||||
|
highlights = {
|
||||||
|
fill = {
|
||||||
|
guifg = { attribute = 'fg', highlight = '#ff0000' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'TabLine' },
|
||||||
|
},
|
||||||
|
background = {
|
||||||
|
guifg = { attribute = 'fg', highlight = 'TabLine' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'TabLine' },
|
||||||
|
},
|
||||||
|
|
||||||
|
-- buffer_selected = {
|
||||||
|
-- guifg = {attribute='fg',highlight='#ff0000'},
|
||||||
|
-- guibg = {attribute='bg',highlight='#0000ff'},
|
||||||
|
-- gui = 'none'
|
||||||
|
-- },
|
||||||
|
buffer_visible = {
|
||||||
|
guifg = { attribute = 'fg', highlight = 'TabLine' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'TabLine' },
|
||||||
|
},
|
||||||
|
|
||||||
|
close_button = {
|
||||||
|
guifg = { attribute = 'fg', highlight = 'TabLine' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'TabLine' },
|
||||||
|
},
|
||||||
|
close_button_visible = {
|
||||||
|
guifg = { attribute = 'fg', highlight = 'TabLine' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'TabLine' },
|
||||||
|
},
|
||||||
|
-- close_button_selected = {
|
||||||
|
-- guifg = {attribute='fg',highlight='TabLineSel'},
|
||||||
|
-- guibg ={attribute='bg',highlight='TabLineSel'}
|
||||||
|
-- },
|
||||||
|
|
||||||
|
tab_selected = {
|
||||||
|
guifg = { attribute = 'fg', highlight = 'Normal' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'Normal' },
|
||||||
|
},
|
||||||
|
tab = {
|
||||||
|
guifg = { attribute = 'fg', highlight = 'TabLine' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'TabLine' },
|
||||||
|
},
|
||||||
|
tab_close = {
|
||||||
|
-- guifg = {attribute='fg',highlight='LspDiagnosticsDefaultError'},
|
||||||
|
guifg = { attribute = 'fg', highlight = 'TabLineSel' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'Normal' },
|
||||||
|
},
|
||||||
|
|
||||||
|
duplicate_selected = {
|
||||||
|
guifg = { attribute = 'fg', highlight = 'TabLineSel' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'TabLineSel' },
|
||||||
|
gui = 'italic',
|
||||||
|
},
|
||||||
|
duplicate_visible = {
|
||||||
|
guifg = { attribute = 'fg', highlight = 'TabLine' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'TabLine' },
|
||||||
|
gui = 'italic',
|
||||||
|
},
|
||||||
|
duplicate = {
|
||||||
|
guifg = { attribute = 'fg', highlight = 'TabLine' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'TabLine' },
|
||||||
|
gui = 'italic',
|
||||||
|
},
|
||||||
|
|
||||||
|
modified = {
|
||||||
|
guifg = { attribute = 'fg', highlight = 'TabLine' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'TabLine' },
|
||||||
|
},
|
||||||
|
modified_selected = {
|
||||||
|
guifg = { attribute = 'fg', highlight = 'Normal' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'Normal' },
|
||||||
|
},
|
||||||
|
modified_visible = {
|
||||||
|
guifg = { attribute = 'fg', highlight = 'TabLine' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'TabLine' },
|
||||||
|
},
|
||||||
|
|
||||||
|
separator = {
|
||||||
|
guifg = { attribute = 'bg', highlight = 'TabLine' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'TabLine' },
|
||||||
|
},
|
||||||
|
separator_selected = {
|
||||||
|
guifg = { attribute = 'bg', highlight = 'Normal' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'Normal' },
|
||||||
|
},
|
||||||
|
-- separator_visible = {
|
||||||
|
-- guifg = {attribute='bg',highlight='TabLine'},
|
||||||
|
-- guibg = {attribute='bg',highlight='TabLine'}
|
||||||
|
-- },
|
||||||
|
indicator_selected = {
|
||||||
|
guifg = { attribute = 'fg', highlight = 'LspDiagnosticsDefaultHint' },
|
||||||
|
guibg = { attribute = 'bg', highlight = 'Normal' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
131
.config/nvim/lua/user/cmp.lua
Normal file
131
.config/nvim/lua/user/cmp.lua
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
local cmp_status_ok, cmp = pcall(require, 'cmp')
|
||||||
|
if not cmp_status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local snip_status_ok, luasnip = pcall(require, 'luasnip')
|
||||||
|
if not snip_status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
require('luasnip/loaders/from_vscode').lazy_load()
|
||||||
|
|
||||||
|
local check_backspace = function()
|
||||||
|
local col = vim.fn.col '.' - 1
|
||||||
|
return col == 0 or vim.fn.getline('.'):sub(col, col):match '%s'
|
||||||
|
end
|
||||||
|
|
||||||
|
-- פּ ﯟ some other good icons
|
||||||
|
local kind_icons = {
|
||||||
|
Text = '',
|
||||||
|
Method = 'm',
|
||||||
|
Function = '',
|
||||||
|
Constructor = '',
|
||||||
|
Field = '',
|
||||||
|
Variable = '',
|
||||||
|
Class = '',
|
||||||
|
Interface = '',
|
||||||
|
Module = '',
|
||||||
|
Property = '',
|
||||||
|
Unit = '',
|
||||||
|
Value = '',
|
||||||
|
Enum = '',
|
||||||
|
Keyword = '',
|
||||||
|
Snippet = '',
|
||||||
|
Color = '',
|
||||||
|
File = '',
|
||||||
|
Reference = '',
|
||||||
|
Folder = '',
|
||||||
|
EnumMember = '',
|
||||||
|
Constant = '',
|
||||||
|
Struct = '',
|
||||||
|
Event = '',
|
||||||
|
Operator = '',
|
||||||
|
TypeParameter = '',
|
||||||
|
}
|
||||||
|
-- find more here: https://www.nerdfonts.com/cheat-sheet
|
||||||
|
|
||||||
|
cmp.setup {
|
||||||
|
snippet = {
|
||||||
|
expand = function(args)
|
||||||
|
luasnip.lsp_expand(args.body) -- For `luasnip` users.
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
mapping = {
|
||||||
|
['<C-k>'] = cmp.mapping.select_prev_item(),
|
||||||
|
['<C-j>'] = cmp.mapping.select_next_item(),
|
||||||
|
['<C-b>'] = cmp.mapping(cmp.mapping.scroll_docs(-1), { 'i', 'c' }),
|
||||||
|
['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(1), { '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(),
|
||||||
|
},
|
||||||
|
-- Accept currently selected item. If none selected, `select` first item.
|
||||||
|
-- Set `select` to `false` to only confirm explicitly selected items.
|
||||||
|
['<CR>'] = cmp.mapping.confirm { select = true },
|
||||||
|
['<Tab>'] = cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_next_item()
|
||||||
|
elseif luasnip.expandable() then
|
||||||
|
luasnip.expand()
|
||||||
|
elseif luasnip.expand_or_jumpable() then
|
||||||
|
luasnip.expand_or_jump()
|
||||||
|
elseif check_backspace() then
|
||||||
|
fallback()
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end, {
|
||||||
|
'i',
|
||||||
|
's',
|
||||||
|
}),
|
||||||
|
['<S-Tab>'] = cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_prev_item()
|
||||||
|
elseif luasnip.jumpable(-1) then
|
||||||
|
luasnip.jump(-1)
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end, {
|
||||||
|
'i',
|
||||||
|
's',
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
formatting = {
|
||||||
|
fields = { 'kind', 'abbr', 'menu' },
|
||||||
|
format = function(entry, vim_item)
|
||||||
|
-- Kind icons
|
||||||
|
vim_item.kind = string.format('%s', kind_icons[vim_item.kind])
|
||||||
|
-- vim_item.kind = string.format('%s %s', kind_icons[vim_item.kind], vim_item.kind) -- This concatonates the icons with the name of the item kind
|
||||||
|
vim_item.menu = ({
|
||||||
|
nvim_lsp = '[LSP]',
|
||||||
|
luasnip = '[Snippet]',
|
||||||
|
buffer = '[Buffer]',
|
||||||
|
path = '[Path]',
|
||||||
|
})[entry.source.name]
|
||||||
|
return vim_item
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
sources = {
|
||||||
|
{ name = 'nvim_lsp' },
|
||||||
|
{ name = 'luasnip' },
|
||||||
|
{ name = 'buffer' },
|
||||||
|
{ name = 'path' },
|
||||||
|
},
|
||||||
|
confirm_opts = {
|
||||||
|
behavior = cmp.ConfirmBehavior.Replace,
|
||||||
|
select = false,
|
||||||
|
},
|
||||||
|
window = {
|
||||||
|
documentation = {
|
||||||
|
border = { '╭', '─', '╮', '│', '╯', '─', '╰', '│' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
experimental = {
|
||||||
|
ghost_text = false,
|
||||||
|
native_menu = false,
|
||||||
|
},
|
||||||
|
}
|
||||||
8
.config/nvim/lua/user/colorscheme.lua
Normal file
8
.config/nvim/lua/user/colorscheme.lua
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
vim.cmd [[
|
||||||
|
try
|
||||||
|
colorscheme dracula
|
||||||
|
catch /^Vim\%((\a\+)\)\=:E185/
|
||||||
|
colorscheme default
|
||||||
|
set background=dark
|
||||||
|
endtry
|
||||||
|
]]
|
||||||
22
.config/nvim/lua/user/comment.lua
Normal file
22
.config/nvim/lua/user/comment.lua
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
local status_ok, comment = pcall(require, 'Comment')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
comment.setup {
|
||||||
|
pre_hook = function(ctx)
|
||||||
|
local U = require 'Comment.utils'
|
||||||
|
|
||||||
|
local location = nil
|
||||||
|
if ctx.ctype == U.ctype.block then
|
||||||
|
location = require('ts_context_commentstring.utils').get_cursor_location()
|
||||||
|
elseif ctx.cmotion == U.cmotion.v or ctx.cmotion == U.cmotion.V then
|
||||||
|
location = require('ts_context_commentstring.utils').get_visual_start_location()
|
||||||
|
end
|
||||||
|
|
||||||
|
return require('ts_context_commentstring.internal').calculate_commentstring {
|
||||||
|
key = ctx.ctype == U.ctype.line and '__default' or '__multiline',
|
||||||
|
location = location,
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
}
|
||||||
48
.config/nvim/lua/user/gitsigns.lua
Normal file
48
.config/nvim/lua/user/gitsigns.lua
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
local status_ok, gitsigns = pcall(require, 'gitsigns')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
gitsigns.setup {
|
||||||
|
signs = {
|
||||||
|
add = { hl = 'GitSignsAdd', text = '▎', numhl = 'GitSignsAddNr', linehl = 'GitSignsAddLn' },
|
||||||
|
change = { hl = 'GitSignsChange', text = '▎', numhl = 'GitSignsChangeNr', linehl = 'GitSignsChangeLn' },
|
||||||
|
delete = { hl = 'GitSignsDelete', text = '契', numhl = 'GitSignsDeleteNr', linehl = 'GitSignsDeleteLn' },
|
||||||
|
topdelete = { hl = 'GitSignsDelete', text = '契', numhl = 'GitSignsDeleteNr', linehl = 'GitSignsDeleteLn' },
|
||||||
|
changedelete = { hl = 'GitSignsChange', text = '▎', numhl = 'GitSignsChangeNr', linehl = 'GitSignsChangeLn' },
|
||||||
|
},
|
||||||
|
signcolumn = true, -- Toggle with `:Gitsigns toggle_signs`
|
||||||
|
numhl = false, -- Toggle with `:Gitsigns toggle_numhl`
|
||||||
|
linehl = false, -- Toggle with `:Gitsigns toggle_linehl`
|
||||||
|
word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff`
|
||||||
|
watch_gitdir = {
|
||||||
|
interval = 1000,
|
||||||
|
follow_files = true,
|
||||||
|
},
|
||||||
|
attach_to_untracked = true,
|
||||||
|
current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame`
|
||||||
|
current_line_blame_opts = {
|
||||||
|
virt_text = true,
|
||||||
|
virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align'
|
||||||
|
delay = 1000,
|
||||||
|
ignore_whitespace = false,
|
||||||
|
},
|
||||||
|
current_line_blame_formatter_opts = {
|
||||||
|
relative_time = false,
|
||||||
|
},
|
||||||
|
sign_priority = 6,
|
||||||
|
update_debounce = 100,
|
||||||
|
status_formatter = nil, -- Use default
|
||||||
|
max_file_length = 40000,
|
||||||
|
preview_config = {
|
||||||
|
-- Options passed to nvim_open_win
|
||||||
|
border = 'single',
|
||||||
|
style = 'minimal',
|
||||||
|
relative = 'cursor',
|
||||||
|
row = 0,
|
||||||
|
col = 1,
|
||||||
|
},
|
||||||
|
yadm = {
|
||||||
|
enable = false,
|
||||||
|
},
|
||||||
|
}
|
||||||
6
.config/nvim/lua/user/impatient.lua
Normal file
6
.config/nvim/lua/user/impatient.lua
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
local status_ok, impatient = pcall(require, 'impatient')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
impatient.enable_profile()
|
||||||
73
.config/nvim/lua/user/indentline.lua
Normal file
73
.config/nvim/lua/user/indentline.lua
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
local g = vim.g
|
||||||
|
local opt = vim.opt
|
||||||
|
local cmd = vim.cmd
|
||||||
|
local status_ok, indent_blankline = pcall(require, 'indent_blankline')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
g.indent_blankline_buftype_exclude = { 'terminal', 'nofile' }
|
||||||
|
g.indent_blankline_filetype_exclude = {
|
||||||
|
'help',
|
||||||
|
'startify',
|
||||||
|
'dashboard',
|
||||||
|
'packer',
|
||||||
|
'neogitstatus',
|
||||||
|
'NvimTree',
|
||||||
|
'Trouble',
|
||||||
|
}
|
||||||
|
g.indentLine_enabled = 1
|
||||||
|
-- g.indent_blankline_char = '│'
|
||||||
|
g.indent_blankline_char = '▏'
|
||||||
|
-- g.indent_blankline_char = '▎'
|
||||||
|
g.indent_blankline_show_trailing_blankline_indent = false
|
||||||
|
g.indent_blankline_show_first_indent_level = true
|
||||||
|
g.indent_blankline_use_treesitter = true
|
||||||
|
g.indent_blankline_show_current_context = true
|
||||||
|
g.indent_blankline_context_patterns = {
|
||||||
|
'class',
|
||||||
|
'return',
|
||||||
|
'function',
|
||||||
|
'method',
|
||||||
|
'^if',
|
||||||
|
'^while',
|
||||||
|
'jsx_element',
|
||||||
|
'^for',
|
||||||
|
'^object',
|
||||||
|
'^table',
|
||||||
|
'block',
|
||||||
|
'arguments',
|
||||||
|
'if_statement',
|
||||||
|
'else_clause',
|
||||||
|
'jsx_element',
|
||||||
|
'jsx_self_closing_element',
|
||||||
|
'try_statement',
|
||||||
|
'catch_clause',
|
||||||
|
'import_statement',
|
||||||
|
'operation_type',
|
||||||
|
}
|
||||||
|
-- HACK: work-around for https://github.com/lukas-reineke/indent-blankline.nvim/issues/59
|
||||||
|
vim.wo.colorcolumn = '99999'
|
||||||
|
|
||||||
|
-- cmd [[highlight IndentBlanklineIndent1 guifg=#E06C75 gui=nocombine]]
|
||||||
|
-- cmd [[highlight IndentBlanklineIndent2 guifg=#E5C07B gui=nocombine]]
|
||||||
|
-- cmd [[highlight IndentBlanklineIndent3 guifg=#98C379 gui=nocombine]]
|
||||||
|
-- cmd [[highlight IndentBlanklineIndent4 guifg=#56B6C2 gui=nocombine]]
|
||||||
|
-- cmd [[highlight IndentBlanklineIndent5 guifg=#61AFEF gui=nocombine]]
|
||||||
|
-- cmd [[highlight IndentBlanklineIndent6 guifg=#C678DD gui=nocombine]]
|
||||||
|
-- opt.list = true
|
||||||
|
-- opt.listchars:append 'space:⋅'
|
||||||
|
-- opt.listchars:append 'space:'
|
||||||
|
-- opt.listchars:append 'eol:↴'
|
||||||
|
|
||||||
|
indent_blankline.setup({
|
||||||
|
-- show_end_of_line = true,
|
||||||
|
-- space_char_blankline = ' ',
|
||||||
|
show_current_context = true,
|
||||||
|
-- show_current_context_start = true,
|
||||||
|
-- char_highlight_list = {
|
||||||
|
-- 'IndentBlanklineIndent1',
|
||||||
|
-- 'IndentBlanklineIndent2',
|
||||||
|
-- 'IndentBlanklineIndent3',
|
||||||
|
-- },
|
||||||
|
})
|
||||||
108
.config/nvim/lua/user/keymaps.lua
Normal file
108
.config/nvim/lua/user/keymaps.lua
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
local keymap = vim.api.nvim_set_keymap
|
||||||
|
local opts = { noremap = true, silent = true }
|
||||||
|
local term_opts = { silent = true }
|
||||||
|
|
||||||
|
--Remap space as leader key
|
||||||
|
keymap('', '<Space>', '<Nop>', opts)
|
||||||
|
vim.g.mapleader = ' '
|
||||||
|
vim.g.maplocalleader = ' '
|
||||||
|
|
||||||
|
-- Modes
|
||||||
|
-- normal_mode = 'n',
|
||||||
|
-- insert_mode = 'i',
|
||||||
|
-- visual_mode = 'v',
|
||||||
|
-- visual_block_mode = 'x',
|
||||||
|
-- term_mode = 't',
|
||||||
|
-- command_mode = 'c',
|
||||||
|
|
||||||
|
-- Normal --
|
||||||
|
-- Shortcutting split navigation
|
||||||
|
keymap('n', '<C-h>', '<C-w>h', opts)
|
||||||
|
keymap('n', '<C-j>', '<C-w>j', opts)
|
||||||
|
keymap('n', '<C-k>', '<C-w>k', opts)
|
||||||
|
keymap('n', '<C-l>', '<C-w>l', opts)
|
||||||
|
|
||||||
|
-- Resize with arrows
|
||||||
|
keymap('n', '<C-Up>', '<cmd>resize -2<CR>', opts)
|
||||||
|
keymap('n', '<C-Down>', '<cmd>resize +2<CR>', opts)
|
||||||
|
keymap('n', '<C-Left>', '<cmd>vertical resize -2<CR>', opts)
|
||||||
|
keymap('n', '<C-Right>', '<cmd>vertical resize +2<CR>', opts)
|
||||||
|
|
||||||
|
-- Navigate buffers
|
||||||
|
keymap('n', '<S-l>', '<cmd>bnext<CR>', opts)
|
||||||
|
keymap('n', '<S-h>', '<cmd>bprevious<CR>', opts)
|
||||||
|
|
||||||
|
-- Move text up and down
|
||||||
|
keymap('n', '<A-j>', '<Esc><cmd>m .+1<CR>==gi', opts)
|
||||||
|
keymap('n', '<A-k>', '<Esc><cmd>m .-2<CR>==gi', opts)
|
||||||
|
|
||||||
|
-- Insert --
|
||||||
|
-- Press jk fast to exit insert mode
|
||||||
|
keymap('i', 'jk', '<ESC>', opts)
|
||||||
|
|
||||||
|
-- Visual --
|
||||||
|
-- Stay in indent mode
|
||||||
|
keymap('v', '<', '<gv', opts)
|
||||||
|
keymap('v', '>', '>gv', opts)
|
||||||
|
|
||||||
|
-- Move text up and down
|
||||||
|
keymap('v', '<A-j>', '<cmd>m .+1<CR>==', opts)
|
||||||
|
keymap('v', '<A-k>', '<cmd>m .-2<CR>==', opts)
|
||||||
|
keymap('v', 'p', '"_dP', opts)
|
||||||
|
|
||||||
|
-- Visual Block --
|
||||||
|
-- Move text up and down
|
||||||
|
keymap('x', 'J', '<cmd>move ">+1<CR>gv-gv', opts)
|
||||||
|
keymap('x', 'K', '<cmd>move "<-2<CR>gv-gv', opts)
|
||||||
|
keymap('x', '<A-j>', '<cmd>move ">+1<CR>gv-gv', opts)
|
||||||
|
keymap('x', '<A-k>', '<cmd>move "<-2<CR>gv-gv', opts)
|
||||||
|
|
||||||
|
-- Terminal --
|
||||||
|
-- Better terminal navigation
|
||||||
|
-- keymap('t', '<C-h>', '<C-\\><C-N><C-w>h', term_opts)
|
||||||
|
-- keymap('t', '<C-j>', '<C-\\><C-N><C-w>j', term_opts)
|
||||||
|
-- keymap('t', '<C-k>', '<C-\\><C-N><C-w>k', term_opts)
|
||||||
|
-- keymap('t', '<C-l>', '<C-\\><C-N><C-w>l', term_opts)
|
||||||
|
|
||||||
|
keymap('n', '<leader>n', ':NvimTreeFocus<CR>', opts)
|
||||||
|
keymap('n', 'C-t', ':NvimTreeToggle<CR>', opts)
|
||||||
|
keymap('n', 'C-f', ':NvimTreeFindFile<CR>', opts)
|
||||||
|
keymap('n', '<F5>', ':NvimTreeRefresh<CR>', opts)
|
||||||
|
|
||||||
|
-- Enable/Disable auto comment
|
||||||
|
keymap('', '<leader>c', '<cmd>setlocal formatoption-=CRo<cr>', {})
|
||||||
|
keymap('', '<leader>C', '<cmd>setlocal formatoption=CRo<cr>', {})
|
||||||
|
|
||||||
|
-- Enable spell checking, s for spell check
|
||||||
|
keymap('', '<leader>s', '<cmd>setlocal spell! spelllang=eu_us<CR>', {})
|
||||||
|
|
||||||
|
-- Enable / Disable auto indent
|
||||||
|
keymap('', '<leader>i', '<cmd>setlocal autoindent<CR>', {})
|
||||||
|
keymap('', '<leader>I', '<cmd>setlocal noautoindent<CR>', {})
|
||||||
|
|
||||||
|
-- Moving line up or down by one line
|
||||||
|
keymap('', '<A-k>', '<cmd>m -2<CR>', opts)
|
||||||
|
keymap('', '<A-up>', '<cmd>m -2<CR>', opts)
|
||||||
|
keymap('', '<A-j>', '<cmd>m +1<CR>', opts)
|
||||||
|
keymap('', '<A-down>', '<cmd>m +1<CR>', opts)
|
||||||
|
|
||||||
|
-- Find files using Telescope command-line
|
||||||
|
keymap('n', '<leader>ff', '<cmd>Telescope find_files hidden=true<CR>', opts)
|
||||||
|
keymap('n', '<leader>fg', '<cmd>Telescope live_grep<CR>', opts)
|
||||||
|
keymap('n', '<leader>fb', '<cmd>Telescope buffers<CR>', opts)
|
||||||
|
keymap('n', '<leader>fh', '<cmd>Telescope help_tags<CR>', opts)
|
||||||
|
|
||||||
|
-- Alias 'replace all' to S
|
||||||
|
keymap('n', 'S', '<cmd>s%//<Left>', opts)
|
||||||
|
|
||||||
|
|
||||||
|
-- " run current script with python3 by CTRL+R in command and insert mode
|
||||||
|
-- autocmd FileType python map <buffer> <C-r> <cmd>w<CR><cmd>exec '!python3' shellescape(@%, 1)<CR>
|
||||||
|
-- autocmd FileType python imap <buffer> <C-r> <esc><cmd>w<CR><cmd>exec '!python3' shellescape(@%, 1)<CR>
|
||||||
|
-- autocmd FileType rust map <buffer> <C-r> <cmd>w<CR><cmd>exec '!cargo run'<CR>
|
||||||
|
-- autocmd FileType rust imap <buffer> <C-r> <cmd>w<CR><cmd>exec '!cargo run'<CR>
|
||||||
|
|
||||||
|
-- autocmd BufWritePre,InsertLeave *.{py,rs,html,css,md,lua} Neoformat
|
||||||
|
-- let g:neoformat_enabled_python = ['autopep8']
|
||||||
|
-- let g:neoformat_try_node_exe = 1
|
||||||
|
|
||||||
24
.config/nvim/lua/user/lsp/configs.lua
Normal file
24
.config/nvim/lua/user/lsp/configs.lua
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
local status_ok, lsp_installer = pcall(require, 'nvim-lsp-installer')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local lspconfig = require('lspconfig')
|
||||||
|
|
||||||
|
local servers = { 'jsonls', 'sumneko_lua', 'pyright' }
|
||||||
|
|
||||||
|
lsp_installer.setup({
|
||||||
|
ensure_installed = servers,
|
||||||
|
})
|
||||||
|
|
||||||
|
for _, server in pairs(servers) do
|
||||||
|
local opts = {
|
||||||
|
on_attach = require('user.lsp.handlers').on_attach,
|
||||||
|
capabilities = require('user.lsp.handlers').capabilities,
|
||||||
|
}
|
||||||
|
local has_custom_opts, server_custom_opts = pcall(require, 'user.lsp.settings.' .. server)
|
||||||
|
if has_custom_opts then
|
||||||
|
opts = vim.tbl_deep_extend('force', opts, server_custom_opts)
|
||||||
|
end
|
||||||
|
lspconfig[server].setup(opts)
|
||||||
|
end
|
||||||
102
.config/nvim/lua/user/lsp/handlers.lua
Normal file
102
.config/nvim/lua/user/lsp/handlers.lua
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
local M = {}
|
||||||
|
|
||||||
|
-- TODO: backfill this to template
|
||||||
|
M.setup = function()
|
||||||
|
local signs = {
|
||||||
|
{ name = 'DiagnosticSignError', text = '' },
|
||||||
|
{ name = 'DiagnosticSignWarn', text = '' },
|
||||||
|
{ name = 'DiagnosticSignHint', text = '' },
|
||||||
|
{ name = 'DiagnosticSignInfo', text = '' },
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, sign in ipairs(signs) do
|
||||||
|
vim.fn.sign_define(sign.name, { texthl = sign.name, text = sign.text, numhl = '' })
|
||||||
|
end
|
||||||
|
|
||||||
|
local config = {
|
||||||
|
-- disable virtual text
|
||||||
|
virtual_text = false,
|
||||||
|
-- show signs
|
||||||
|
signs = {
|
||||||
|
active = signs,
|
||||||
|
},
|
||||||
|
update_in_insert = true,
|
||||||
|
underline = true,
|
||||||
|
severity_sort = true,
|
||||||
|
float = {
|
||||||
|
focusable = false,
|
||||||
|
style = 'minimal',
|
||||||
|
border = 'rounded',
|
||||||
|
source = 'always',
|
||||||
|
header = '',
|
||||||
|
prefix = '',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
vim.diagnostic.config(config)
|
||||||
|
|
||||||
|
vim.lsp.handlers['textDocument/hover'] = vim.lsp.with(vim.lsp.handlers.hover, {
|
||||||
|
border = 'rounded',
|
||||||
|
width = 60,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.lsp.handlers['textDocument/signatureHelp'] = vim.lsp.with(vim.lsp.handlers.signature_help, {
|
||||||
|
border = 'rounded',
|
||||||
|
width = 60,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
local function lsp_highlight_document(client)
|
||||||
|
-- Set autocommands conditional on server_capabilities
|
||||||
|
local status_ok, illuminate = pcall(require, 'illuminate')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
illuminate.on_attach(client)
|
||||||
|
-- end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function lsp_keymaps(bufnr)
|
||||||
|
local opts = { noremap = true, silent = true }
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
|
||||||
|
-- vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
|
||||||
|
-- vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
|
||||||
|
-- vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>f', '<cmd>lua vim.diagnostic.open_float()<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '[d', '<cmd>lua vim.diagnostic.goto_prev({ border = "rounded" })<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(
|
||||||
|
bufnr,
|
||||||
|
'n',
|
||||||
|
'gl',
|
||||||
|
'<cmd>lua vim.diagnostic.open_float({ border = "rounded" })<CR>',
|
||||||
|
opts
|
||||||
|
)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', ']d', '<cmd>lua vim.diagnostic.goto_next({ border = "rounded" })<CR>', opts)
|
||||||
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>q', '<cmd>lua vim.diagnostic.setloclist()<CR>', opts)
|
||||||
|
vim.cmd([[ command! Format execute 'lua vim.lsp.buf.format{async=true}' ]])
|
||||||
|
end
|
||||||
|
|
||||||
|
M.on_attach = function(client, bufnr)
|
||||||
|
-- vim.notify(client.name .. ' starting...')
|
||||||
|
-- TODO: refactor this into a method that checks if string in list
|
||||||
|
if client.name == 'tsserver' then
|
||||||
|
client.resolved_capabilities.document_formatting = false
|
||||||
|
end
|
||||||
|
lsp_keymaps(bufnr)
|
||||||
|
lsp_highlight_document(client)
|
||||||
|
end
|
||||||
|
|
||||||
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||||
|
|
||||||
|
local status_ok, cmp_nvim_lsp = pcall(require, 'cmp_nvim_lsp')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
M.capabilities = cmp_nvim_lsp.update_capabilities(capabilities)
|
||||||
|
|
||||||
|
return M
|
||||||
8
.config/nvim/lua/user/lsp/init.lua
Normal file
8
.config/nvim/lua/user/lsp/init.lua
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
local status_ok, _ = pcall(require, 'lspconfig')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
require('user.lsp.configs')
|
||||||
|
require('user.lsp.handlers').setup()
|
||||||
|
require('user.lsp.null-ls')
|
||||||
19
.config/nvim/lua/user/lsp/null-ls.lua
Normal file
19
.config/nvim/lua/user/lsp/null-ls.lua
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
local null_ls_status_ok, null_ls = pcall(require, 'null-ls')
|
||||||
|
if not null_ls_status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/formatting
|
||||||
|
local formatting = null_ls.builtins.formatting
|
||||||
|
-- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics
|
||||||
|
local diagnostics = null_ls.builtins.diagnostics
|
||||||
|
|
||||||
|
null_ls.setup({
|
||||||
|
debug = false,
|
||||||
|
sources = {
|
||||||
|
formatting.prettier.with({ extra_args = { '--no-semi', '--single-quote', '--jsx-single-quote' } }),
|
||||||
|
formatting.black.with({ extra_args = { '--fast' } }),
|
||||||
|
formatting.stylua,
|
||||||
|
-- diagnostics.flake8
|
||||||
|
},
|
||||||
|
})
|
||||||
197
.config/nvim/lua/user/lsp/settings/jsonls.lua
Normal file
197
.config/nvim/lua/user/lsp/settings/jsonls.lua
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
local default_schemas = nil
|
||||||
|
local status_ok, jsonls_settings = pcall(require, "nlspsettings.jsonls")
|
||||||
|
if status_ok then
|
||||||
|
default_schemas = jsonls_settings.get_default_schemas()
|
||||||
|
end
|
||||||
|
|
||||||
|
local schemas = {
|
||||||
|
{
|
||||||
|
description = "TypeScript compiler configuration file",
|
||||||
|
fileMatch = {
|
||||||
|
"tsconfig.json",
|
||||||
|
"tsconfig.*.json",
|
||||||
|
},
|
||||||
|
url = "https://json.schemastore.org/tsconfig.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "Lerna config",
|
||||||
|
fileMatch = { "lerna.json" },
|
||||||
|
url = "https://json.schemastore.org/lerna.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "Babel configuration",
|
||||||
|
fileMatch = {
|
||||||
|
".babelrc.json",
|
||||||
|
".babelrc",
|
||||||
|
"babel.config.json",
|
||||||
|
},
|
||||||
|
url = "https://json.schemastore.org/babelrc.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "ESLint config",
|
||||||
|
fileMatch = {
|
||||||
|
".eslintrc.json",
|
||||||
|
".eslintrc",
|
||||||
|
},
|
||||||
|
url = "https://json.schemastore.org/eslintrc.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "Bucklescript config",
|
||||||
|
fileMatch = { "bsconfig.json" },
|
||||||
|
url = "https://raw.githubusercontent.com/rescript-lang/rescript-compiler/8.2.0/docs/docson/build-schema.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "Prettier config",
|
||||||
|
fileMatch = {
|
||||||
|
".prettierrc",
|
||||||
|
".prettierrc.json",
|
||||||
|
"prettier.config.json",
|
||||||
|
},
|
||||||
|
url = "https://json.schemastore.org/prettierrc",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "Vercel Now config",
|
||||||
|
fileMatch = { "now.json" },
|
||||||
|
url = "https://json.schemastore.org/now",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "Stylelint config",
|
||||||
|
fileMatch = {
|
||||||
|
".stylelintrc",
|
||||||
|
".stylelintrc.json",
|
||||||
|
"stylelint.config.json",
|
||||||
|
},
|
||||||
|
url = "https://json.schemastore.org/stylelintrc",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "A JSON schema for the ASP.NET LaunchSettings.json files",
|
||||||
|
fileMatch = { "launchsettings.json" },
|
||||||
|
url = "https://json.schemastore.org/launchsettings.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "Schema for CMake Presets",
|
||||||
|
fileMatch = {
|
||||||
|
"CMakePresets.json",
|
||||||
|
"CMakeUserPresets.json",
|
||||||
|
},
|
||||||
|
url = "https://raw.githubusercontent.com/Kitware/CMake/master/Help/manual/presets/schema.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "Configuration file as an alternative for configuring your repository in the settings page.",
|
||||||
|
fileMatch = {
|
||||||
|
".codeclimate.json",
|
||||||
|
},
|
||||||
|
url = "https://json.schemastore.org/codeclimate.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "LLVM compilation database",
|
||||||
|
fileMatch = {
|
||||||
|
"compile_commands.json",
|
||||||
|
},
|
||||||
|
url = "https://json.schemastore.org/compile-commands.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "Config file for Command Task Runner",
|
||||||
|
fileMatch = {
|
||||||
|
"commands.json",
|
||||||
|
},
|
||||||
|
url = "https://json.schemastore.org/commands.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "AWS CloudFormation provides a common language for you to describe and provision all the infrastructure resources in your cloud environment.",
|
||||||
|
fileMatch = {
|
||||||
|
"*.cf.json",
|
||||||
|
"cloudformation.json",
|
||||||
|
},
|
||||||
|
url = "https://raw.githubusercontent.com/awslabs/goformation/v5.2.9/schema/cloudformation.schema.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "The AWS Serverless Application Model (AWS SAM, previously known as Project Flourish) extends AWS CloudFormation to provide a simplified way of defining the Amazon API Gateway APIs, AWS Lambda functions, and Amazon DynamoDB tables needed by your serverless application.",
|
||||||
|
fileMatch = {
|
||||||
|
"serverless.template",
|
||||||
|
"*.sam.json",
|
||||||
|
"sam.json",
|
||||||
|
},
|
||||||
|
url = "https://raw.githubusercontent.com/awslabs/goformation/v5.2.9/schema/sam.schema.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "Json schema for properties json file for a GitHub Workflow template",
|
||||||
|
fileMatch = {
|
||||||
|
".github/workflow-templates/**.properties.json",
|
||||||
|
},
|
||||||
|
url = "https://json.schemastore.org/github-workflow-template-properties.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "golangci-lint configuration file",
|
||||||
|
fileMatch = {
|
||||||
|
".golangci.toml",
|
||||||
|
".golangci.json",
|
||||||
|
},
|
||||||
|
url = "https://json.schemastore.org/golangci-lint.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "JSON schema for the JSON Feed format",
|
||||||
|
fileMatch = {
|
||||||
|
"feed.json",
|
||||||
|
},
|
||||||
|
url = "https://json.schemastore.org/feed.json",
|
||||||
|
versions = {
|
||||||
|
["1"] = "https://json.schemastore.org/feed-1.json",
|
||||||
|
["1.1"] = "https://json.schemastore.org/feed.json",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "Packer template JSON configuration",
|
||||||
|
fileMatch = {
|
||||||
|
"packer.json",
|
||||||
|
},
|
||||||
|
url = "https://json.schemastore.org/packer.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "NPM configuration file",
|
||||||
|
fileMatch = {
|
||||||
|
"package.json",
|
||||||
|
},
|
||||||
|
url = "https://json.schemastore.org/package.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "JSON schema for Visual Studio component configuration files",
|
||||||
|
fileMatch = {
|
||||||
|
"*.vsconfig",
|
||||||
|
},
|
||||||
|
url = "https://json.schemastore.org/vsconfig.json",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description = "Resume json",
|
||||||
|
fileMatch = { "resume.json" },
|
||||||
|
url = "https://raw.githubusercontent.com/jsonresume/resume-schema/v1.0.0/schema.json",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local function extend(tab1, tab2)
|
||||||
|
for _, value in ipairs(tab2 or {}) do
|
||||||
|
table.insert(tab1, value)
|
||||||
|
end
|
||||||
|
return tab1
|
||||||
|
end
|
||||||
|
|
||||||
|
local extended_schemas = extend(schemas, default_schemas)
|
||||||
|
|
||||||
|
local opts = {
|
||||||
|
settings = {
|
||||||
|
json = {
|
||||||
|
schemas = extended_schemas,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
setup = {
|
||||||
|
commands = {
|
||||||
|
Format = {
|
||||||
|
function()
|
||||||
|
vim.lsp.buf.range_formatting({}, { 0, 0 }, { vim.fn.line "$", 0 })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return opts
|
||||||
9
.config/nvim/lua/user/lsp/settings/pyright.lua
Normal file
9
.config/nvim/lua/user/lsp/settings/pyright.lua
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
return {
|
||||||
|
settings = {
|
||||||
|
python = {
|
||||||
|
analysis = {
|
||||||
|
typeCheckingMode = "off"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
15
.config/nvim/lua/user/lsp/settings/sumneko_lua.lua
Normal file
15
.config/nvim/lua/user/lsp/settings/sumneko_lua.lua
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
return {
|
||||||
|
settings = {
|
||||||
|
Lua = {
|
||||||
|
diagnostics = {
|
||||||
|
globals = { "vim" },
|
||||||
|
},
|
||||||
|
workspace = {
|
||||||
|
library = {
|
||||||
|
[vim.fn.expand("$VIMRUNTIME/lua")] = true,
|
||||||
|
[vim.fn.stdpath("config") .. "/lua"] = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
93
.config/nvim/lua/user/lualine.lua
Normal file
93
.config/nvim/lua/user/lualine.lua
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
local status_ok, lualine = pcall(require, 'lualine')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local hide_in_width = function()
|
||||||
|
return vim.fn.winwidth(0) > 80
|
||||||
|
end
|
||||||
|
|
||||||
|
local diagnostics = {
|
||||||
|
'diagnostics',
|
||||||
|
sources = { 'nvim_diagnostic' },
|
||||||
|
sections = { 'error', 'warn' },
|
||||||
|
symbols = { error = ' ', warn = ' ' },
|
||||||
|
colored = false,
|
||||||
|
update_in_insert = false,
|
||||||
|
always_visible = true,
|
||||||
|
}
|
||||||
|
|
||||||
|
local diff = {
|
||||||
|
'diff',
|
||||||
|
colored = false,
|
||||||
|
symbols = { added = ' ', modified = ' ', removed = ' ' }, -- changes diff symbols
|
||||||
|
cond = hide_in_width
|
||||||
|
}
|
||||||
|
|
||||||
|
local mode = {
|
||||||
|
'mode',
|
||||||
|
fmt = function(str)
|
||||||
|
return '-- ' .. str .. ' --'
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
local filetype = {
|
||||||
|
'filetype',
|
||||||
|
icons_enabled = false,
|
||||||
|
icon = nil,
|
||||||
|
}
|
||||||
|
|
||||||
|
local branch = {
|
||||||
|
'branch',
|
||||||
|
icons_enabled = true,
|
||||||
|
icon = '',
|
||||||
|
}
|
||||||
|
|
||||||
|
local location = {
|
||||||
|
'location',
|
||||||
|
padding = 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- cool function for progress
|
||||||
|
local progress = function()
|
||||||
|
local current_line = vim.fn.line('.')
|
||||||
|
local total_lines = vim.fn.line('$')
|
||||||
|
local chars = { '__', '▁▁', '▂▂', '▃▃', '▄▄', '▅▅', '▆▆', '▇▇', '██' }
|
||||||
|
local line_ratio = current_line / total_lines
|
||||||
|
local index = math.ceil(line_ratio * #chars)
|
||||||
|
return chars[index]
|
||||||
|
end
|
||||||
|
|
||||||
|
local spaces = function()
|
||||||
|
return 'spaces: ' .. vim.api.nvim_buf_get_option(0, 'shiftwidth')
|
||||||
|
end
|
||||||
|
|
||||||
|
lualine.setup({
|
||||||
|
options = {
|
||||||
|
icons_enabled = true,
|
||||||
|
theme = 'auto',
|
||||||
|
component_separators = { left = '', right = ''},
|
||||||
|
section_separators = { left = '', right = ''},
|
||||||
|
disabled_filetypes = {},
|
||||||
|
always_divide_middle = true,
|
||||||
|
globalstatus = false,
|
||||||
|
},
|
||||||
|
sections = {
|
||||||
|
lualine_a = {'mode'},
|
||||||
|
lualine_b = {'branch', 'diff', 'diagnostics'},
|
||||||
|
lualine_c = {'filename'},
|
||||||
|
lualine_x = {'encoding', 'fileformat', 'filetype'},
|
||||||
|
lualine_y = {'progress'},
|
||||||
|
lualine_z = {'location'}
|
||||||
|
},
|
||||||
|
inactive_sections = {
|
||||||
|
lualine_a = {},
|
||||||
|
lualine_b = {},
|
||||||
|
lualine_c = { 'filename' },
|
||||||
|
lualine_x = { 'location' },
|
||||||
|
lualine_y = {},
|
||||||
|
lualine_z = {},
|
||||||
|
},
|
||||||
|
tabline = {},
|
||||||
|
extensions = {},
|
||||||
|
})
|
||||||
81
.config/nvim/lua/user/nvim-tree.lua
Normal file
81
.config/nvim/lua/user/nvim-tree.lua
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
local status_ok, nvim_tree = pcall(require, 'nvim-tree')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local config_status_ok, nvim_tree_config = pcall(require, 'nvim-tree.config')
|
||||||
|
if not config_status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local tree_cb = nvim_tree_config.nvim_tree_callback
|
||||||
|
|
||||||
|
|
||||||
|
nvim_tree.setup {
|
||||||
|
sort_by = 'case_sensitive',
|
||||||
|
update_focused_file = {
|
||||||
|
enable = true,
|
||||||
|
update_cwd = true,
|
||||||
|
},
|
||||||
|
renderer = {
|
||||||
|
group_empty = true,
|
||||||
|
root_folder_modifier = ':t',
|
||||||
|
icons = {
|
||||||
|
webdev_colors = true,
|
||||||
|
show = {
|
||||||
|
file = true,
|
||||||
|
folder = true,
|
||||||
|
folder_arrow = true,
|
||||||
|
git = true,
|
||||||
|
},
|
||||||
|
glyphs = {
|
||||||
|
default = '',
|
||||||
|
symlink = '',
|
||||||
|
folder = {
|
||||||
|
arrow_open = '',
|
||||||
|
arrow_closed = '',
|
||||||
|
default = '',
|
||||||
|
open = '',
|
||||||
|
empty = '',
|
||||||
|
empty_open = '',
|
||||||
|
symlink = '',
|
||||||
|
symlink_open = '',
|
||||||
|
},
|
||||||
|
git = {
|
||||||
|
unstaged = '',
|
||||||
|
staged = 'S',
|
||||||
|
unmerged = '',
|
||||||
|
renamed = '➜',
|
||||||
|
untracked = 'U',
|
||||||
|
deleted = '',
|
||||||
|
ignored = '◌',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
diagnostics = {
|
||||||
|
enable = true,
|
||||||
|
show_on_dirs = true,
|
||||||
|
icons = {
|
||||||
|
hint = '',
|
||||||
|
info = '',
|
||||||
|
warning = '',
|
||||||
|
error = '',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
view = {
|
||||||
|
width = 30,
|
||||||
|
height = 30,
|
||||||
|
side = 'left',
|
||||||
|
mappings = {
|
||||||
|
list = {
|
||||||
|
{ key = { 'l', '<CR>', 'o' }, cb = tree_cb 'edit' },
|
||||||
|
{ key = 'h', cb = tree_cb 'close_node' },
|
||||||
|
{ key = 'v', cb = tree_cb 'vsplit' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters = {
|
||||||
|
dotfiles = false,
|
||||||
|
},
|
||||||
|
}
|
||||||
56
.config/nvim/lua/user/options.lua
Normal file
56
.config/nvim/lua/user/options.lua
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
local g = vim.g
|
||||||
|
local o = vim.o
|
||||||
|
|
||||||
|
g.mapleader = ' '
|
||||||
|
g.maplocalleader = ' '
|
||||||
|
|
||||||
|
local options = {
|
||||||
|
backup = false, -- creates a backup file
|
||||||
|
clipboard = 'unnamedplus', -- allows neovim to access the system clipboard
|
||||||
|
cmdheight = 2, -- more space in the neovim command line for displaying messages
|
||||||
|
completeopt = { 'menu', 'menuone', 'noselect' }, -- mostly just for cmp
|
||||||
|
conceallevel = 0, -- so that `` is visible in markdown files
|
||||||
|
fileencoding = 'utf-8', -- the encoding written to a file
|
||||||
|
hlsearch = true, -- highlight all matches on previous search pattern
|
||||||
|
ignorecase = true, -- ignore case in search patterns
|
||||||
|
mouse = 'a', -- allow the mouse to be used in neovim
|
||||||
|
pumheight = 10, -- pop up menu height
|
||||||
|
showmode = false, -- we don't need to see things like -- INSERT -- anymore
|
||||||
|
showtabline = 2, -- always show tabs
|
||||||
|
smartcase = true, -- smart case
|
||||||
|
smartindent = true, -- make indenting smarter again
|
||||||
|
splitbelow = true, -- force all horizontal splits to go below current window
|
||||||
|
splitright = true, -- force all vertical splits to go to the right of current window
|
||||||
|
swapfile = true, -- creates a swapfile
|
||||||
|
termguicolors = true, -- set term gui colors (most terminals support this)
|
||||||
|
timeoutlen = 100, -- time to wait for a mapped sequence to complete (in milliseconds)
|
||||||
|
undofile = true, -- enable persistent undo
|
||||||
|
updatetime = 300, -- faster completion (4000ms default)
|
||||||
|
writebackup = false, -- if a file is being edited by another program (or was written to file while editing with another program), it is not allowed to be edited
|
||||||
|
expandtab = true, -- convert tabs to spaces
|
||||||
|
shiftwidth = 4, -- the number of spaces inserted for each indentation
|
||||||
|
tabstop = 4, -- insert 4 spaces for a tab
|
||||||
|
cursorline = true, -- highlight the current line
|
||||||
|
cursorcolumn = true, -- highlight the current column
|
||||||
|
number = true, -- set numbered lines
|
||||||
|
relativenumber = true, -- set relative numbered lines
|
||||||
|
numberwidth = 4, -- set number column width to 4 {default 4}
|
||||||
|
signcolumn = 'yes', -- always show the sign column, otherwise it would shift the text each time
|
||||||
|
wrap = false, -- display lines as one long line
|
||||||
|
scrolloff = 8, -- is one of my fav
|
||||||
|
sidescrolloff = 8,
|
||||||
|
--wildmode = 'longest,list,full',
|
||||||
|
guifont = 'JetBrainsMono NF:h11', -- the font used in graphical neovim applications
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v in pairs(options) do
|
||||||
|
vim.opt[k] = v
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.cmd [[highlight CursorLine ctermbg=Yellow cterm=bold guibg=#2b2b2b]]
|
||||||
|
vim.cmd [[highlight CursorColumn ctermbg=Yellow cterm=bold guibg=#2b2b2b]]
|
||||||
|
|
||||||
|
|
||||||
|
g.dracula_transparent_bg = true
|
||||||
|
g.dracula_italic_comment = true
|
||||||
|
g.dracula_show_end_of_buffer = true
|
||||||
114
.config/nvim/lua/user/plugins.lua
Normal file
114
.config/nvim/lua/user/plugins.lua
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
local fn = vim.fn
|
||||||
|
|
||||||
|
-- Automatically install packer
|
||||||
|
local install_path = fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim'
|
||||||
|
if fn.empty(fn.glob(install_path)) > 0 then
|
||||||
|
PACKER_BOOTSTRAP = fn.system({
|
||||||
|
'git',
|
||||||
|
'clone',
|
||||||
|
'--depth',
|
||||||
|
'1',
|
||||||
|
'https://github.com/wbthomason/packer.nvim',
|
||||||
|
install_path,
|
||||||
|
})
|
||||||
|
print('Installing packer close and reopen Neovim...')
|
||||||
|
vim.cmd([[packadd packer.nvim]])
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Autocommand that reloads neovim whenever you save the plugins.lua file
|
||||||
|
vim.cmd([[
|
||||||
|
augroup packer_user_config
|
||||||
|
autocmd!
|
||||||
|
autocmd BufWritePost plugins.lua source <afile> | PackerSync
|
||||||
|
augroup end
|
||||||
|
]])
|
||||||
|
|
||||||
|
-- Use a protected call so we don't error out on first use
|
||||||
|
local status_ok, packer = pcall(require, 'packer')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Have packer use a popup window
|
||||||
|
packer.init({
|
||||||
|
display = {
|
||||||
|
open_fn = function()
|
||||||
|
return require('packer.util').float({ border = 'rounded' })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Install your plugins here
|
||||||
|
return packer.startup(
|
||||||
|
function(use)
|
||||||
|
-- My plugins here
|
||||||
|
|
||||||
|
use 'wbthomason/packer.nvim' -- Have packer manage itself
|
||||||
|
use 'nvim-lua/popup.nvim' -- Useful lua functions used by lots of plugins
|
||||||
|
use 'nvim-lua/plenary.nvim' -- Useful lua functions used by lots of plugins
|
||||||
|
use 'windwp/nvim-autopairs' -- Autopairs, integrates with both cmp and treesitter
|
||||||
|
use 'numToStr/Comment.nvim'
|
||||||
|
use 'JoosepAlviste/nvim-ts-context-commentstring'
|
||||||
|
use 'kyazdani42/nvim-web-devicons'
|
||||||
|
use 'kyazdani42/nvim-tree.lua'
|
||||||
|
use 'akinsho/bufferline.nvim'
|
||||||
|
use 'moll/vim-bbye'
|
||||||
|
use 'nvim-lualine/lualine.nvim'
|
||||||
|
use 'akinsho/toggleterm.nvim'
|
||||||
|
use 'ahmedkhalf/project.nvim'
|
||||||
|
use 'lewis6991/impatient.nvim'
|
||||||
|
use 'lukas-reineke/indent-blankline.nvim'
|
||||||
|
use 'goolord/alpha-nvim'
|
||||||
|
use 'folke/which-key.nvim'
|
||||||
|
use 'andweeb/presence.nvim'
|
||||||
|
use 'mattn/emmet-vim'
|
||||||
|
use 'sbdchd/neoformat'
|
||||||
|
use 'vimwiki/vimwiki'
|
||||||
|
use 'saecki/crates.nvim'
|
||||||
|
use {
|
||||||
|
'norcalli/nvim-colorizer.lua',
|
||||||
|
config = function()
|
||||||
|
require('colorizer').setup()
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Colorschemes
|
||||||
|
use 'Mofiqul/dracula.nvim'
|
||||||
|
use 'folke/tokyonight.nvim'
|
||||||
|
use 'lunarvim/darkplus.nvim'
|
||||||
|
|
||||||
|
-- cmp plugins
|
||||||
|
use 'hrsh7th/nvim-cmp'-- The completion plugin
|
||||||
|
use 'hrsh7th/cmp-buffer' -- buffer completions
|
||||||
|
use 'hrsh7th/cmp-path'-- path completions
|
||||||
|
use 'hrsh7th/cmp-cmdline' -- cmdline completions
|
||||||
|
use 'saadparwaiz1/cmp_luasnip' -- snippet completions
|
||||||
|
use 'hrsh7th/cmp-nvim-lsp'
|
||||||
|
use 'hrsh7th/cmp-nvim-lua'
|
||||||
|
|
||||||
|
-- snippets
|
||||||
|
use 'L3MON4D3/LuaSnip' --snippet engine
|
||||||
|
use 'rafamadriz/friendly-snippets' -- a bunch of snippets to use
|
||||||
|
|
||||||
|
-- LSP
|
||||||
|
use 'neovim/nvim-lspconfig' -- enable LSP
|
||||||
|
use 'williamboman/nvim-lsp-installer' -- simple to use language server installer
|
||||||
|
use 'jose-elias-alvarez/null-ls.nvim' -- for formatters and linters
|
||||||
|
|
||||||
|
-- Telescope
|
||||||
|
use 'nvim-telescope/telescope.nvim'
|
||||||
|
use {'nvim-telescope/telescope-fzf-native.nvim', run = 'make' }
|
||||||
|
|
||||||
|
-- Treesitter
|
||||||
|
use 'nvim-treesitter/nvim-treesitter'
|
||||||
|
|
||||||
|
-- Git
|
||||||
|
use 'lewis6991/gitsigns.nvim'
|
||||||
|
|
||||||
|
-- Automatically set up your configuration after cloning packer.nvim
|
||||||
|
-- Put this at the end after all plugins
|
||||||
|
if PACKER_BOOTSTRAP then
|
||||||
|
require('packer').sync()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
)
|
||||||
48
.config/nvim/lua/user/project.lua
Normal file
48
.config/nvim/lua/user/project.lua
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
local status_ok, project = pcall(require, "project_nvim")
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
project.setup({
|
||||||
|
---@usage set to false to disable project.nvim.
|
||||||
|
--- This is on by default since it's currently the expected behavior.
|
||||||
|
active = true,
|
||||||
|
|
||||||
|
on_config_done = nil,
|
||||||
|
|
||||||
|
---@usage set to true to disable setting the current-woriking directory
|
||||||
|
--- Manual mode doesn't automatically change your root directory, so you have
|
||||||
|
--- the option to manually do so using `:ProjectRoot` command.
|
||||||
|
manual_mode = false,
|
||||||
|
|
||||||
|
---@usage Methods of detecting the root directory
|
||||||
|
--- Allowed values: **"lsp"** uses the native neovim lsp
|
||||||
|
--- **"pattern"** uses vim-rooter like glob pattern matching. Here
|
||||||
|
--- order matters: if one is not detected, the other is used as fallback. You
|
||||||
|
--- can also delete or rearangne the detection methods.
|
||||||
|
-- detection_methods = { "lsp", "pattern" }, -- NOTE: lsp detection will get annoying with multiple langs in one project
|
||||||
|
detection_methods = { "pattern" },
|
||||||
|
|
||||||
|
---@usage patterns used to detect root dir, when **"pattern"** is in detection_methods
|
||||||
|
patterns = { ".git", "_darcs", ".hg", ".bzr", ".svn", "Makefile", "package.json" },
|
||||||
|
|
||||||
|
---@ Show hidden files in telescope when searching for files in a project
|
||||||
|
show_hidden = false,
|
||||||
|
|
||||||
|
---@usage When set to false, you will get a message when project.nvim changes your directory.
|
||||||
|
-- When set to false, you will get a message when project.nvim changes your directory.
|
||||||
|
silent_chdir = true,
|
||||||
|
|
||||||
|
---@usage list of lsp client names to ignore when using **lsp** detection. eg: { "efm", ... }
|
||||||
|
ignore_lsp = {},
|
||||||
|
|
||||||
|
---@type string
|
||||||
|
---@usage path to store the project history for use in telescope
|
||||||
|
datapath = vim.fn.stdpath("data"),
|
||||||
|
})
|
||||||
|
|
||||||
|
local tele_status_ok, telescope = pcall(require, "telescope")
|
||||||
|
if not tele_status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
telescope.load_extension('projects')
|
||||||
99
.config/nvim/lua/user/telescope.lua
Normal file
99
.config/nvim/lua/user/telescope.lua
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
local status_ok, telescope = pcall(require, 'telescope')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local actions = require 'telescope.actions'
|
||||||
|
|
||||||
|
telescope.setup {
|
||||||
|
defaults = {
|
||||||
|
|
||||||
|
prompt_prefix = ' ',
|
||||||
|
selection_caret = ' ',
|
||||||
|
path_display = { 'smart' },
|
||||||
|
|
||||||
|
mappings = {
|
||||||
|
i = {
|
||||||
|
['<C-n>'] = actions.cycle_history_next,
|
||||||
|
['<C-p>'] = actions.cycle_history_prev,
|
||||||
|
|
||||||
|
['<C-j>'] = actions.move_selection_next,
|
||||||
|
['<C-k>'] = actions.move_selection_previous,
|
||||||
|
|
||||||
|
['<C-c>'] = actions.close,
|
||||||
|
|
||||||
|
['<Down>'] = actions.move_selection_next,
|
||||||
|
['<Up>'] = actions.move_selection_previous,
|
||||||
|
|
||||||
|
['<CR>'] = actions.select_default,
|
||||||
|
['<C-x>'] = actions.select_horizontal,
|
||||||
|
['<C-v>'] = actions.select_vertical,
|
||||||
|
['<C-t>'] = actions.select_tab,
|
||||||
|
|
||||||
|
['<C-u>'] = actions.preview_scrolling_up,
|
||||||
|
['<C-d>'] = actions.preview_scrolling_down,
|
||||||
|
|
||||||
|
['<PageUp>'] = actions.results_scrolling_up,
|
||||||
|
['<PageDown>'] = actions.results_scrolling_down,
|
||||||
|
|
||||||
|
['<Tab>'] = actions.toggle_selection + actions.move_selection_worse,
|
||||||
|
['<S-Tab>'] = actions.toggle_selection + actions.move_selection_better,
|
||||||
|
['<C-q>'] = actions.send_to_qflist + actions.open_qflist,
|
||||||
|
['<M-q>'] = actions.send_selected_to_qflist + actions.open_qflist,
|
||||||
|
['<C-l>'] = actions.complete_tag,
|
||||||
|
['<C-_>'] = actions.which_key, -- keys from pressing <C-/>
|
||||||
|
},
|
||||||
|
|
||||||
|
n = {
|
||||||
|
['<esc>'] = actions.close,
|
||||||
|
['<CR>'] = actions.select_default,
|
||||||
|
['<C-x>'] = actions.select_horizontal,
|
||||||
|
['<C-v>'] = actions.select_vertical,
|
||||||
|
['<C-t>'] = actions.select_tab,
|
||||||
|
|
||||||
|
['<Tab>'] = actions.toggle_selection + actions.move_selection_worse,
|
||||||
|
['<S-Tab>'] = actions.toggle_selection + actions.move_selection_better,
|
||||||
|
['<C-q>'] = actions.send_to_qflist + actions.open_qflist,
|
||||||
|
['<M-q>'] = actions.send_selected_to_qflist + actions.open_qflist,
|
||||||
|
|
||||||
|
['j'] = actions.move_selection_next,
|
||||||
|
['k'] = actions.move_selection_previous,
|
||||||
|
['H'] = actions.move_to_top,
|
||||||
|
['M'] = actions.move_to_middle,
|
||||||
|
['L'] = actions.move_to_bottom,
|
||||||
|
|
||||||
|
['<Down>'] = actions.move_selection_next,
|
||||||
|
['<Up>'] = actions.move_selection_previous,
|
||||||
|
['gg'] = actions.move_to_top,
|
||||||
|
['G'] = actions.move_to_bottom,
|
||||||
|
|
||||||
|
['<C-u>'] = actions.preview_scrolling_up,
|
||||||
|
['<C-d>'] = actions.preview_scrolling_down,
|
||||||
|
|
||||||
|
['<PageUp>'] = actions.results_scrolling_up,
|
||||||
|
['<PageDown>'] = actions.results_scrolling_down,
|
||||||
|
|
||||||
|
['?'] = actions.which_key,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pickers = {
|
||||||
|
-- Default configuration for builtin pickers goes here:
|
||||||
|
-- picker_name = {
|
||||||
|
-- picker_config_key = value,
|
||||||
|
-- ...
|
||||||
|
-- }
|
||||||
|
-- Now the picker_config_key will be applied every time you call this
|
||||||
|
-- builtin picker
|
||||||
|
},
|
||||||
|
extensions = {
|
||||||
|
fzf = {
|
||||||
|
fuzzy = true, -- false will only do exact matching
|
||||||
|
override_generic_sorter = true, -- override the generic sorter
|
||||||
|
override_file_sorter = true, -- override the file sorter
|
||||||
|
case_mode = "smart_case", -- or "ignore_case" or "respect_case"
|
||||||
|
-- the default case_mode is "smart_case"
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
require('telescope').load_extension('fzf')
|
||||||
71
.config/nvim/lua/user/toggleterm.lua
Normal file
71
.config/nvim/lua/user/toggleterm.lua
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
local api = vim.api
|
||||||
|
local status_ok, toggleterm = pcall(require, 'toggleterm')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
toggleterm.setup({
|
||||||
|
size = 20,
|
||||||
|
open_mapping = [[<c-\>]],
|
||||||
|
hide_numbers = true,
|
||||||
|
shade_filetypes = {},
|
||||||
|
shade_terminals = true,
|
||||||
|
shading_factor = 2,
|
||||||
|
start_in_insert = true,
|
||||||
|
insert_mappings = true,
|
||||||
|
persist_size = true,
|
||||||
|
direction = 'float',
|
||||||
|
close_on_exit = true,
|
||||||
|
shell = vim.o.shell,
|
||||||
|
float_opts = {
|
||||||
|
border = 'curved',
|
||||||
|
winblend = 0,
|
||||||
|
highlights = {
|
||||||
|
border = 'Normal',
|
||||||
|
background = 'Normal',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
function _G.set_terminal_keymaps()
|
||||||
|
local opts = {noremap = true}
|
||||||
|
api.nvim_buf_set_keymap(0, 't', '<esc>', [[<C-\><C-n>]], opts)
|
||||||
|
api.nvim_buf_set_keymap(0, 't', 'jk', [[<C-\><C-n>]], opts)
|
||||||
|
api.nvim_buf_set_keymap(0, 't', '<C-h>', [[<C-\><C-n><C-W>h]], opts)
|
||||||
|
api.nvim_buf_set_keymap(0, 't', '<C-j>', [[<C-\><C-n><C-W>j]], opts)
|
||||||
|
api.nvim_buf_set_keymap(0, 't', '<C-k>', [[<C-\><C-n><C-W>k]], opts)
|
||||||
|
api.nvim_buf_set_keymap(0, 't', '<C-l>', [[<C-\><C-n><C-W>l]], opts)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()')
|
||||||
|
|
||||||
|
local Terminal = require('toggleterm.terminal').Terminal
|
||||||
|
local lazygit = Terminal:new({ cmd = 'lazygit', hidden = true })
|
||||||
|
|
||||||
|
function _LAZYGIT_TOGGLE()
|
||||||
|
lazygit:toggle()
|
||||||
|
end
|
||||||
|
|
||||||
|
local node = Terminal:new({ cmd = 'node', hidden = true })
|
||||||
|
|
||||||
|
function _NODE_TOGGLE()
|
||||||
|
node:toggle()
|
||||||
|
end
|
||||||
|
|
||||||
|
local ncdu = Terminal:new({ cmd = 'ncdu', hidden = true })
|
||||||
|
|
||||||
|
function _NCDU_TOGGLE()
|
||||||
|
ncdu:toggle()
|
||||||
|
end
|
||||||
|
|
||||||
|
local htop = Terminal:new({ cmd = 'htop', hidden = true })
|
||||||
|
|
||||||
|
function _HTOP_TOGGLE()
|
||||||
|
htop:toggle()
|
||||||
|
end
|
||||||
|
|
||||||
|
local python = Terminal:new({ cmd = 'python', hidden = true })
|
||||||
|
|
||||||
|
function _PYTHON_TOGGLE()
|
||||||
|
python:toggle()
|
||||||
|
end
|
||||||
17
.config/nvim/lua/user/treesitter.lua
Normal file
17
.config/nvim/lua/user/treesitter.lua
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
local status_ok, configs = pcall(require, 'nvim-treesitter.configs')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
configs.setup({
|
||||||
|
ensure_installed = 'all', -- one of 'all' or a list of languages
|
||||||
|
ignore_install = { '' }, -- List of parsers to ignore installing
|
||||||
|
highlight = {
|
||||||
|
enable = true, -- false will disable the whole extension
|
||||||
|
disable = { }, -- list of language that will be disabled
|
||||||
|
},
|
||||||
|
autopairs = {
|
||||||
|
enable = true,
|
||||||
|
},
|
||||||
|
indent = { enable = true, disable = { } },
|
||||||
|
})
|
||||||
187
.config/nvim/lua/user/whichkey.lua
Normal file
187
.config/nvim/lua/user/whichkey.lua
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
local status_ok, which_key = pcall(require, 'which-key')
|
||||||
|
if not status_ok then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local setup = {
|
||||||
|
plugins = {
|
||||||
|
marks = true, -- shows a list of your marks on ' and `
|
||||||
|
registers = true, -- shows your registers on ' in NORMAL or <C-r> in INSERT mode
|
||||||
|
spelling = {
|
||||||
|
enabled = true, -- enabling this will show WhichKey when pressing z= to select spelling suggestions
|
||||||
|
suggestions = 20, -- how many suggestions should be shown in the list?
|
||||||
|
},
|
||||||
|
-- the presets plugin, adds help for a bunch of default keybindings in Neovim
|
||||||
|
-- No actual key bindings are created
|
||||||
|
presets = {
|
||||||
|
operators = false, -- adds help for operators like d, y, ... and registers them for motion / text object completion
|
||||||
|
motions = true, -- adds help for motions
|
||||||
|
text_objects = true, -- help for text objects triggered after entering an operator
|
||||||
|
windows = true, -- default bindings on <c-w>
|
||||||
|
nav = true, -- misc bindings to work with windows
|
||||||
|
z = true, -- bindings for folds, spelling and others prefixed with z
|
||||||
|
g = true, -- bindings for prefixed with g
|
||||||
|
},
|
||||||
|
},
|
||||||
|
-- add operators that will trigger motion and text object completion
|
||||||
|
-- to enable all native operators, set the preset / operators plugin above
|
||||||
|
-- operators = { gc = 'Comments' },
|
||||||
|
key_labels = {
|
||||||
|
-- override the label used to display some keys. It doesn't effect WK in any other way.
|
||||||
|
-- For example:
|
||||||
|
-- ['<space>'] = 'SPC',
|
||||||
|
-- ['<cr>'] = 'RET',
|
||||||
|
-- ['<tab>'] = 'TAB',
|
||||||
|
},
|
||||||
|
icons = {
|
||||||
|
breadcrumb = '»', -- symbol used in the command line area that shows your active key combo
|
||||||
|
separator = '➜', -- symbol used between a key and it's label
|
||||||
|
group = '+', -- symbol prepended to a group
|
||||||
|
},
|
||||||
|
popup_mappings = {
|
||||||
|
scroll_down = '<c-d>', -- binding to scroll down inside the popup
|
||||||
|
scroll_up = '<c-u>', -- binding to scroll up inside the popup
|
||||||
|
},
|
||||||
|
window = {
|
||||||
|
border = 'rounded', -- none, single, double, shadow
|
||||||
|
position = 'bottom', -- bottom, top
|
||||||
|
margin = { 1, 0, 1, 0 }, -- extra window margin [top, right, bottom, left]
|
||||||
|
padding = { 2, 2, 2, 2 }, -- extra window padding [top, right, bottom, left]
|
||||||
|
winblend = 0,
|
||||||
|
},
|
||||||
|
layout = {
|
||||||
|
height = { min = 4, max = 25 }, -- min and max height of the columns
|
||||||
|
width = { min = 20, max = 50 }, -- min and max width of the columns
|
||||||
|
spacing = 3, -- spacing between columns
|
||||||
|
align = 'left', -- align columns left, center or right
|
||||||
|
},
|
||||||
|
ignore_missing = true, -- enable this to hide mappings for which you didn't specify a label
|
||||||
|
hidden = { '<silent>', '<cmd>', '<Cmd>', '<CR>', 'call', 'lua', '^:', '^ ' }, -- hide mapping boilerplate
|
||||||
|
show_help = true, -- show help message on the command line when the popup is visible
|
||||||
|
triggers = 'auto', -- automatically setup triggers
|
||||||
|
-- triggers = {'<leader>'} -- or specify a list manually
|
||||||
|
triggers_blacklist = {
|
||||||
|
-- list of mode / prefixes that should never be hooked by WhichKey
|
||||||
|
-- this is mostly relevant for key maps that start with a native binding
|
||||||
|
-- most people should not need to change this
|
||||||
|
i = { 'j', 'k' },
|
||||||
|
v = { 'j', 'k' },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local opts = {
|
||||||
|
mode = 'n', -- NORMAL mode
|
||||||
|
prefix = '<leader>',
|
||||||
|
buffer = nil, -- Global mappings. Specify a buffer number for buffer local mappings
|
||||||
|
silent = true, -- use `silent` when creating keymaps
|
||||||
|
noremap = true, -- use `noremap` when creating keymaps
|
||||||
|
nowait = true, -- use `nowait` when creating keymaps
|
||||||
|
}
|
||||||
|
|
||||||
|
local mappings = {
|
||||||
|
['a'] = { '<cmd>Alpha<cr>', 'Alpha' },
|
||||||
|
['b'] = {
|
||||||
|
'<cmd>lua require("telescope.builtin").buffers(require"telescope.themes").get_dropdown{previewer = false})<cr>',
|
||||||
|
'Buffers',
|
||||||
|
},
|
||||||
|
['e'] = { '<cmd>NvimTreeToggle<cr>', 'Explorer' },
|
||||||
|
['w'] = { '<cmd>w!<CR>', 'Save' },
|
||||||
|
['q'] = { '<cmd>q!<CR>', 'Quit' },
|
||||||
|
['c'] = { '<cmd>Bdelete!<CR>', 'Close Buffer' },
|
||||||
|
['h'] = { '<cmd>nohlsearch<CR>', 'No Highlight' },
|
||||||
|
['f'] = {
|
||||||
|
'<cmd>lua require("telescope.builtin").find_files(require("telescope.themes").get_dropdown{previewer = false})<cr>',
|
||||||
|
'Find files',
|
||||||
|
},
|
||||||
|
['F'] = { '<cmd>Telescope live_grep theme=ivy<cr>', 'Find Text' },
|
||||||
|
['P'] = { '<cmd>lua require("telescope").extensions.projects.projects()<cr>', 'Projects' },
|
||||||
|
|
||||||
|
p = {
|
||||||
|
name = 'Packer',
|
||||||
|
c = { '<cmd>PackerCompile<cr>', 'Compile' },
|
||||||
|
i = { '<cmd>PackerInstall<cr>', 'Install' },
|
||||||
|
s = { '<cmd>PackerSync<cr>', 'Sync' },
|
||||||
|
S = { '<cmd>PackerStatus<cr>', 'Status' },
|
||||||
|
u = { '<cmd>PackerUpdate<cr>', 'Update' },
|
||||||
|
},
|
||||||
|
|
||||||
|
g = {
|
||||||
|
name = 'Git',
|
||||||
|
g = { '<cmd>lua _LAZYGIT_TOGGLE()<CR>', 'Lazygit' },
|
||||||
|
j = { '<cmd>lua require "gitsigns".next_hunk()<cr>', 'Next Hunk' },
|
||||||
|
k = { '<cmd>lua require "gitsigns".prev_hunk()<cr>', 'Prev Hunk' },
|
||||||
|
l = { '<cmd>lua require "gitsigns".blame_line()<cr>', 'Blame' },
|
||||||
|
p = { '<cmd>lua require "gitsigns".preview_hunk()<cr>', 'Preview Hunk' },
|
||||||
|
r = { '<cmd>lua require "gitsigns".reset_hunk()<cr>', 'Reset Hunk' },
|
||||||
|
R = { '<cmd>lua require "gitsigns".reset_buffer()<cr>', 'Reset Buffer' },
|
||||||
|
s = { '<cmd>lua require "gitsigns".stage_hunk()<cr>', 'Stage Hunk' },
|
||||||
|
u = {
|
||||||
|
'<cmd>lua require "gitsigns".undo_stage_hunk()<cr>',
|
||||||
|
'Undo Stage Hunk',
|
||||||
|
},
|
||||||
|
o = { '<cmd>Telescope git_status<cr>', 'Open changed file' },
|
||||||
|
b = { '<cmd>Telescope git_branches<cr>', 'Checkout branch' },
|
||||||
|
c = { '<cmd>Telescope git_commits<cr>', 'Checkout commit' },
|
||||||
|
d = {
|
||||||
|
'<cmd>Gitsigns diffthis HEAD<cr>',
|
||||||
|
'Diff',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
l = {
|
||||||
|
name = 'LSP',
|
||||||
|
a = { '<cmd>lua vim.lsp.buf.code_action()<cr>', 'Code Action' },
|
||||||
|
d = {
|
||||||
|
'<cmd>Telescope lsp_document_diagnostics<cr>',
|
||||||
|
'Document Diagnostics',
|
||||||
|
},
|
||||||
|
w = {
|
||||||
|
'<cmd>Telescope lsp_workspace_diagnostics<cr>',
|
||||||
|
'Workspace Diagnostics',
|
||||||
|
},
|
||||||
|
f = { '<cmd>lua vim.lsp.buf.format{async=true}<cr>', 'Format' },
|
||||||
|
i = { '<cmd>LspInfo<cr>', 'Info' },
|
||||||
|
I = { '<cmd>LspInstallInfo<cr>', 'Installer Info' },
|
||||||
|
j = {
|
||||||
|
'<cmd>lua vim.lsp.diagnostic.goto_next()<CR>',
|
||||||
|
'Next Diagnostic',
|
||||||
|
},
|
||||||
|
k = {
|
||||||
|
'<cmd>lua vim.lsp.diagnostic.goto_prev()<cr>',
|
||||||
|
'Prev Diagnostic',
|
||||||
|
},
|
||||||
|
l = { '<cmd>lua vim.lsp.codelens.run()<cr>', 'CodeLens Action' },
|
||||||
|
q = { '<cmd>lua vim.lsp.diagnostic.set_loclist()<cr>', 'Quickfix' },
|
||||||
|
r = { '<cmd>lua vim.lsp.buf.rename()<cr>', 'Rename' },
|
||||||
|
s = { '<cmd>Telescope lsp_document_symbols<cr>', 'Document Symbols' },
|
||||||
|
S = {
|
||||||
|
'<cmd>Telescope lsp_dynamic_workspace_symbols<cr>',
|
||||||
|
'Workspace Symbols',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
s = {
|
||||||
|
name = 'Search',
|
||||||
|
b = { '<cmd>Telescope git_branches<cr>', 'Checkout branch' },
|
||||||
|
c = { '<cmd>Telescope colorscheme<cr>', 'Colorscheme' },
|
||||||
|
h = { '<cmd>Telescope help_tags<cr>', 'Find Help' },
|
||||||
|
M = { '<cmd>Telescope man_pages<cr>', 'Man Pages' },
|
||||||
|
r = { '<cmd>Telescope oldfiles<cr>', 'Open Recent File' },
|
||||||
|
R = { '<cmd>Telescope registers<cr>', 'Registers' },
|
||||||
|
k = { '<cmd>Telescope keymaps<cr>', 'Keymaps' },
|
||||||
|
C = { '<cmd>Telescope commands<cr>', 'Commands' },
|
||||||
|
},
|
||||||
|
|
||||||
|
t = {
|
||||||
|
name = 'Terminal',
|
||||||
|
n = { '<cmd>lua _NODE_TOGGLE()<cr>', 'Node' },
|
||||||
|
u = { '<cmd>lua _NCDU_TOGGLE()<cr>', 'NCDU' },
|
||||||
|
t = { '<cmd>lua _HTOP_TOGGLE()<cr>', 'Htop' },
|
||||||
|
p = { '<cmd>lua _PYTHON_TOGGLE()<cr>', 'Python' },
|
||||||
|
f = { '<cmd>ToggleTerm direction=float<cr>', 'Float' },
|
||||||
|
h = { '<cmd>ToggleTerm size=10 direction=horizontal<cr>', 'Horizontal' },
|
||||||
|
v = { '<cmd>ToggleTerm size=80 direction=vertical<cr>', 'Vertical' },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
which_key.setup(setup)
|
||||||
|
which_key.register(mappings, opts)
|
||||||
Loading…
Reference in New Issue
Block a user