Skip to content

Instantly share code, notes, and snippets.

@furrycatherder
Created September 15, 2021 18:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save furrycatherder/f39be04c3e7065013bf03e9eba726e83 to your computer and use it in GitHub Desktop.
Save furrycatherder/f39be04c3e7065013bf03e9eba726e83 to your computer and use it in GitHub Desktop.
-- install packer
local install_path = vim.fn.stdpath 'data' .. '/site/pack/packer/start/packer.nvim'
if vim.fn.empty(vim.fn.glob(install_path)) > 0 then
vim.fn.execute('!git clone https://github.com/wbthomason/packer.nvim ' .. install_path)
end
vim.api.nvim_exec(
[[
augroup Packer
autocmd!
autocmd BufWritePost init.lua PackerCompile
augroup end
]],
false
)
local packer = require('packer')
local use = packer.use
packer.startup(function()
use 'wbthomason/packer.nvim' -- package manager
-- style plugins
use 'hoob3rt/lualine.nvim'
use 'arkav/lualine-lsp-progress'
use 'folke/tokyonight.nvim'
-- editor plugins
use 'tpope/vim-vinegar'
use 'tpope/vim-fugitive'
use 'mhinz/vim-startify'
use 'ojroques/nvim-lspfuzzy'
use 'junegunn/fzf'
use 'junegunn/fzf.vim'
use 'editorconfig/editorconfig-vim'
use 'airblade/vim-gitgutter'
use 'iamcco/markdown-preview.nvim'
use 'kyazdani42/nvim-web-devicons' -- for file icons
-- language plugins
use 'sheerun/vim-polyglot'
use 'nvim-treesitter/nvim-treesitter'
use 'neovim/nvim-lspconfig'
use 'onsails/lspkind-nvim'
use 'windwp/nvim-ts-autotag'
use 'mhartington/formatter.nvim'
use 'L3MON4D3/LuaSnip'
use 'rafamadriz/friendly-snippets'
use 'hrsh7th/nvim-cmp'
use 'hrsh7th/cmp-nvim-lsp'
use 'saadparwaiz1/cmp_luasnip'
use 'ray-x/lsp_signature.nvim'
end)
vim.cmd [[colorscheme tokyonight]]
local lualine = require('lualine')
lualine.setup {
options = { theme = 'tokyonight' },
}
local treesitter = require('nvim-treesitter.configs')
treesitter.setup {
ensure_installed = "maintained",
highlight = {
enable = true,
},
indent = {
enable = true,
},
autotag = {
enable = true,
}
}
local lsp = require('lspconfig')
local on_attach = function(_, bufnr)
require('lsp_signature').on_attach()
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
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>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>D', '<cmd>lua vim.lsp.buf.type_definition()<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', 'gl', '<cmd>lua vim.lsp.buf.document_symbol()<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, 'v', '<leader>ca', '<cmd>lua vim.lsp.buf.range_code_action()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>e', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>q', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts)
-- vim.cmd [[ command! Format execute 'lua vim.lsp.buf.formatting()' ]]
end
require('lspfuzzy').setup {}
vim.api.nvim_set_keymap('n', '<C-p>', '<cmd>Files %:p:h<CR>', { noremap = true })
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities)
capabilities.textDocument.completion.completionItem.tagSupport = { valueSet = { 1, 2 } }
lsp.tsserver.setup {
capabilities = capabilities,
on_attach = on_attach,
init_options = {
preferences = {
includeCompletionsWithSnippetText = true,
includeCompletionsForImportStatements = true,
},
},
}
lsp.clangd.setup {
capabilities = capabilities,
on_attach = on_attach,
}
local luasnip = require('luasnip')
require('luasnip/loaders/from_vscode').load()
local cmp = require('cmp')
cmp.setup {
sources = {
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
},
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
mapping = {
['<C-p>'] = cmp.mapping.select_prev_item(),
['<C-n>'] = cmp.mapping.select_next_item(),
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.close(),
['<CR>'] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace,
select = true,
},
['<Tab>'] = function(fallback)
if vim.fn.pumvisible() == 1 then
vim.fn.feedkeys(vim.api.nvim_replace_termcodes('<C-n>', true, true, true), 'n')
elseif luasnip.expand_or_jumpable() then
vim.fn.feedkeys(vim.api.nvim_replace_termcodes('<Plug>luasnip-expand-or-jump', true, true, true), '')
else
fallback()
end
end,
['<S-Tab>'] = function(fallback)
if vim.fn.pumvisible() == 1 then
vim.fn.feedkeys(vim.api.nvim_replace_termcodes('<C-p>', true, true, true), 'n')
elseif luasnip.jumpable(-1) then
vim.fn.feedkeys(vim.api.nvim_replace_termcodes('<Plug>luasnip-jump-prev', true, true, true), '')
else
fallback()
end
end,
},
formatting = {
format = function(entry, vim_item)
-- fancy icons and a name of kind
vim_item.kind = require("lspkind").presets.default[vim_item.kind] .. " " .. vim_item.kind
return vim_item
end
}
}
local prettier = function()
return {
exe = "prettier",
args = {
"--stdin-filepath",
vim.api.nvim_buf_get_name(0),
},
stdin = true,
}
end
require('formatter').setup {
filetype = {
javascript = {
prettier,
},
javascriptreact = {
prettier,
},
}
}
vim.o.mouse = 'a'
vim.o.termguicolors = true
vim.o.updatetime = 200
vim.o.title = true
vim.lsp.set_log_level("debug")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment