Skip to content

Instantly share code, notes, and snippets.

@rosnovsky
Created March 31, 2023 19:22
Show Gist options
  • Save rosnovsky/25ad0e2671f084702735a07def9c26b6 to your computer and use it in GitHub Desktop.
Save rosnovsky/25ad0e2671f084702735a07def9c26b6 to your computer and use it in GitHub Desktop.
My neovim configuration
" requires:
" npm i typescript typescript-language-server --location=global
" brew install fzf
" "FiraCode Nerd Font Mono Retina" patched font
call plug#begin('~/.local/share/nvim/plugged')
" Add your plugins here
Plug 'EdenEast/nightfox.nvim'
Plug 'leafgarland/typescript-vim'
Plug 'HerringtonDarkholme/yats.vim'
Plug 'neovim/nvim-lspconfig'
Plug 'hrsh7th/nvim-cmp'
Plug 'hrsh7th/cmp-nvim-lsp'
Plug 'hrsh7th/cmp-buffer'
Plug 'saadparwaiz1/cmp_luasnip'
Plug 'L3MON4D3/LuaSnip'
Plug 'nvim-lualine/lualine.nvim'
Plug 'kyazdani42/nvim-tree.lua'
Plug 'nvim-tree/nvim-web-devicons'
Plug 'preservim/nerdtree'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
Plug 'airblade/vim-gitgutter'
Plug 'wakatime/vim-wakatime'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'github/copilot.vim'
Plug 'wuelnerdotexe/vim-astro'
call plug#end()
syntax enable
set number
set relativenumber
set guifont=FiraCode\ Nerd\ Font\ Mono\ Retina:h12
set viminfo+='100,<1000,s10,h
set autoindent expandtab tabstop=2 shiftwidth=2
lua require'nvim-tree'.setup {}
let g:astro_typescript = 'enable'
if executable('rg')
let $FZF_DEFAULT_COMMAND = 'rg --files --hidden --follow --glob "!{node_modules/*,.git/*}"'
endif
" NvimTree keybindings
nnoremap ' :NvimTreeToggle<CR>
nnoremap <leader>r :NvimTreeRefresh<CR>
nnoremap <leader>n :NvimTreeFindFile<CR>
vnoremap <leader>y "+y
nnoremap <leader>g :GitGutterToggle<CR>
nnoremap <leader><Left> <C-w>h
nnoremap <leader><Right> <C-w>l
nnoremap <Leader>f :Files<CR>
nnoremap <Leader>a :call FzfRecentFiles()<CR>
let g:gitgutter_sign_added = '✚'
let g:gitgutter_sign_modified = '✹'
let g:gitgutter_sign_deleted = '-'
function! FzfCustomExtensions()
let extensions = 'txt,md,js,ts,tsx,astro,jsx,svelte,vim'
let root = has('win32') || has('win64') ? 'C:\\' : '~/'
let cmd = 'rg --files --type-add "custom:*.{' . extensions . '}" --type custom --no-ignore --hidden --glob "!{node_modules/*,.git/*,.cache/*}"' . root
call fzf#run(fzf#wrap('custom-extensions', {'source': cmd, 'sink': 'e'}))
endfunction
" NvimTree options
let g:nvim_tree_auto_open = 1
let g:nvim_tree_auto_close = 1
let g:nvim_tree_quit_on_open = 1
let g:nvim_tree_follow = 1
let g:nvim_tree_indent_markers = 1
let g:nvim_tree_hide_dotfiles = 0
let g:nvim_tree_show_hidden = 1
let g:nvim_tree_git_hl = 1
let g:nvim_tree_highlight_opened_files = 1
let g:nvim_tree_root_folder_modifier = ':~'
let g:nvim_tree_add_trailing = 1
let g:nvim_tree_group_empty = 1
let g:nvim_tree_lsp_diagnostics = 1
let g:nvim_tree_disable_netrw = 1
let g:nvim_tree_hijack_netrw = 1
let g:nvim_tree_update_cwd = 1
let g:nvim_tree_ignore = []
" nvim-web-devicons options
let g:nvim_web_devicons_enable = 1
let g:nvim_tree_show_icons = 1
let g:nvim_web_devicons_enable_airline_tabline = 1
let g:nvim_web_devicons_enable_vimfiler = 1
" NvimTree icons
let g:nvim_tree_show_icons = {
\ 'git': 1,
\ 'folders': 1,
\ 'files': 1,
\ 'folder_arrows': 1,
\ }
" NvimTree devicons
let g:nvim_tree_icons = {
\ 'default': '',
\ 'symlink': '',
\ 'git': {
\ 'unstaged': '',
\ 'staged': 'S',
\ 'unmerged': '',
\ 'renamed': '➜',
\ 'deleted': '',
\ 'untracked': 'U',
\ 'ignored': '◌',
\ },
\ 'folder': {
\ 'arrow_open': '',
\ 'arrow_closed': '',
\ 'default': '',
\ 'open': '',
\ 'empty': '',
\ 'empty_open': '',
\ 'symlink': '',
\ },
\ 'lsp': {
\ 'hint': '',
\ 'info': '',
\ 'warning': '',
\ 'error': '',
\ },
\ }
augroup lsp_hover
autocmd!
autocmd CursorHold * silent! lua vim.lsp.buf.hover()
set updatetime=1000
augroup END
augroup lsp_hover_insert
autocmd!
autocmd CursorHoldI * silent! lua vim.lsp.buf.hover()
augroup END
lua <<EOF
local nvim_lsp = require('lspconfig')
local cmp = require'cmp'
require('nightfox').setup({
options = {
styles = {
comments = "italic",
keywords = "bold",
types = "italic,bold",
}
}
})
require('lualine').setup()
vim.cmd("colorscheme nightfox")
-- TypeScript language server
nvim_lsp.tsserver.setup{
on_attach = function(client)
client.server_capabilities.document_formatting = false
end
}
-- TypeScript autocomplete
cmp.setup {
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
mapping = {
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.close(),
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<Down>'] = cmp.mapping.select_next_item(),
['<Up>'] = cmp.mapping.select_prev_item(),
},
sources = {
{ name = 'nvim_lsp' },
{ name = 'buffer' },
{ name = 'luasnip' },
},
}
-- Hints in INSERT mode
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
vim.lsp.diagnostic.on_publish_diagnostics, {
virtual_text = {
prefix = "■",
spacing = 2,
},
signs = true,
update_in_insert = true,
}
)
local tree_cb = require'nvim-tree.config'.nvim_tree_callback
require'nvim-tree'.setup {
update_cwd = true,
view = {
options = {
show_hidden = true
},
mappings = {
list = {
{ key = {"<CR>", "o"}, cb = tree_cb("edit") },
{ key = "t", cb = tree_cb("tabnew") },
{ key = "v", cb = tree_cb("vsplit") }
}
}
}
}
EOF
@rosnovsky
Copy link
Author

forgot to include coc-settings.json

{
  "eslint.enable": true,
  "eslint.autoFixOnSave": true,
  "eslint.filetypes": ["javascript", "javascriptreact", "typescript", "typescriptreact"],
  "prettier.enable": true,
  "prettier.disableLanguages": []
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment