You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
275 lines
6.8 KiB
275 lines
6.8 KiB
" vim: set sw=2 et :
|
|
|
|
" Configure plug.vim
|
|
if has('nvim')
|
|
let vimautoloaddir='~/.config/nvim/site/autoload'
|
|
else
|
|
let vimautoloaddir='~/.vim/autoload'
|
|
endif
|
|
|
|
call plug#begin()
|
|
|
|
" This is taking care of the plugins
|
|
Plug 'junegunn/vim-plug'
|
|
|
|
" Neovim is sensible by default
|
|
if !has('nvim')
|
|
Plug 'tpope/vim-sensible'
|
|
endif
|
|
|
|
" Editing eye-candy
|
|
Plug 'junegunn/goyo.vim'
|
|
Plug 'junegunn/limelight.vim'
|
|
|
|
" Solarized colorscheme
|
|
Plug 'altercation/vim-colors-solarized'
|
|
|
|
" Tmux .conf
|
|
Plug 'tmux-plugins/vim-tmux'
|
|
" Tmux Focus Events
|
|
Plug 'tmux-plugins/vim-tmux-focus-events'
|
|
|
|
" Automatically detect indentation
|
|
Plug 'tpope/vim-sleuth'
|
|
|
|
if has('nvim')
|
|
" Asynchronous make for neovim
|
|
Plug 'neomake/neomake'
|
|
" Automated code formatter
|
|
Plug 'sbdchd/neoformat'
|
|
" Popup terminal
|
|
Plug 'kassio/neoterm'
|
|
" Nice tree view
|
|
Plug 'kyazdani42/nvim-tree.lua'
|
|
" Icons for the tree view
|
|
Plug 'kyazdani42/nvim-web-devicons'
|
|
" A buffer bar
|
|
Plug 'noib3/nvim-cokeline'
|
|
" Better syntax recognition
|
|
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
|
|
" Mason is now preferred over LSP Installer
|
|
Plug 'williamboman/mason.nvim'
|
|
" LSP config
|
|
Plug 'neovim/nvim-lspconfig'
|
|
Plug 'williamboman/mason-lspconfig.nvim'
|
|
" Auto completion
|
|
Plug 'hrsh7th/cmp-nvim-lsp'
|
|
Plug 'hrsh7th/cmp-nvim-lsp-signature-help'
|
|
Plug 'hrsh7th/cmp-buffer'
|
|
Plug 'hrsh7th/cmp-path'
|
|
Plug 'hrsh7th/cmp-cmdline'
|
|
Plug 'hrsh7th/nvim-cmp'
|
|
" Snippets
|
|
Plug 'hrsh7th/cmp-vsnip'
|
|
Plug 'hrsh7th/vim-vsnip'
|
|
Plug 'rafamadriz/friendly-snippets'
|
|
" Telescope for quick switching
|
|
Plug 'nvim-lua/plenary.nvim'
|
|
Plug 'nvim-telescope/telescope.nvim'
|
|
Plug 'nvim-telescope/telescope-fzf-native.nvim', { 'do': 'make' }
|
|
" Copliot here
|
|
Plug 'github/copilot.vim'
|
|
" Nice colours for our NeoVim
|
|
Plug 'ishan9299/nvim-solarized-lua'
|
|
Plug 'shaunsingh/solarized.nvim'
|
|
|
|
" Show indent lines
|
|
Plug 'lukas-reineke/indent-blankline.nvim'
|
|
" Status line
|
|
Plug 'feline-nvim/feline.nvim'
|
|
" Dim inactive windows
|
|
Plug 'sunjon/shade.nvim'
|
|
endif
|
|
|
|
call plug#end()
|
|
|
|
if has('nvim')
|
|
" Add some colors
|
|
set termguicolors
|
|
colorscheme solarized-high
|
|
|
|
" When writing a buffer (no delay), and on normal mode changes (after 750ms).
|
|
call neomake#configure#automake('nw', 750)
|
|
" Call Neomake when writing a buffer (no delay)
|
|
let g:neomake_open_list = 2
|
|
|
|
" Configure Cokeline
|
|
lua << EOF
|
|
require('cokeline').setup({
|
|
show_if_buffers_are_at_least = 2
|
|
})
|
|
|
|
local map = vim.api.nvim_set_keymap
|
|
|
|
map('n', '<S-Tab>', '<Plug>(cokeline-focus-prev)', { silent = true })
|
|
map('n', '<Tab>', '<Plug>(cokeline-focus-next)', { silent = true })
|
|
map('n', '<Leader>h', '<Plug>(cokeline-focus-prev)', { silent = true })
|
|
map('n', '<Leader>l', '<Plug>(cokeline-focus-next)', { silent = true })
|
|
EOF
|
|
|
|
" Configure completion and LSP
|
|
set completeopt=menu,menuone,noselect
|
|
autocmd BufWritePre * lua vim.lsp.buf.formatting_sync(nil, 4000)
|
|
|
|
lua <<EOF
|
|
-- Setup nvim-cmp.
|
|
local cmp = require'cmp'
|
|
|
|
cmp.setup({
|
|
snippet = {
|
|
expand = function(args)
|
|
vim.fn["vsnip#anonymous"](args.body)
|
|
end,
|
|
},
|
|
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 = 'nvim_lsp_signature_help' },
|
|
{ name = 'vsnip' },
|
|
}, {
|
|
{ name = 'buffer' },
|
|
})
|
|
})
|
|
|
|
require("mason").setup({
|
|
automatic_installation = true,
|
|
})
|
|
require("mason-lspconfig").setup()
|
|
EOF
|
|
|
|
" Configure NvimTree
|
|
lua << EOF
|
|
require('nvim-tree').setup()
|
|
EOF
|
|
nmap <leader>n :NvimTreeToggle<CR>
|
|
|
|
" Configure Telescope
|
|
lua << EOF
|
|
require('telescope').load_extension('fzf')
|
|
EOF
|
|
" Find files using Telescope command-line sugar.
|
|
nnoremap <leader>ff <cmd>Telescope find_files<cr>
|
|
nnoremap <leader>fg <cmd>Telescope live_grep<cr>
|
|
nnoremap <leader>fb <cmd>Telescope buffers<cr>
|
|
nnoremap <leader>fh <cmd>Telescope help_tags<cr>
|
|
|
|
" Configure tree-sitter with folding
|
|
lua <<EOF
|
|
if vim.loop.os_uname().sysname == "Darwin" then
|
|
require('nvim-treesitter.install').compilers = { os.getenv("HOME")..'/.local/bin/clang-wrapper' }
|
|
end
|
|
require('nvim-treesitter.configs').setup({
|
|
-- One of "all", or a list of languages
|
|
ensure_installed = "all",
|
|
ignore_install = { "godot_resource", "teal" },
|
|
highlight = {
|
|
enable = true
|
|
},
|
|
indent = {
|
|
enable = true
|
|
},
|
|
})
|
|
EOF
|
|
set foldmethod=expr
|
|
set foldexpr=nvim_treesitter#foldexpr()
|
|
|
|
" Configure feline
|
|
lua <<EOF
|
|
require('feline').setup()
|
|
EOF
|
|
|
|
" Configure Shade
|
|
lua <<EOF
|
|
require('shade').setup({
|
|
overlay_opacity = 50,
|
|
opacity_step = 1,
|
|
keys = {
|
|
brightness_up = '<C-Up>',
|
|
brightness_down = '<C-Down>',
|
|
toggle = '<Leader>s',
|
|
}
|
|
})
|
|
EOF
|
|
endif
|
|
|
|
set background=light
|
|
" Keep at least 5 lines anove or below the cursor
|
|
set scrolloff=5
|
|
|
|
" use F2 to switch to paste mode
|
|
set pastetoggle=<F2>
|
|
|
|
" Configure Goyo
|
|
nmap <leader>] :Goyo<CR>
|
|
function! s:goyo_enter()
|
|
if exists('$TMUX')
|
|
" Hide the status panel and zoom in the current pane
|
|
silent !tmux set status off
|
|
" This hackery checks whether the pane is zoomed and toggles the status if
|
|
" not
|
|
silent !tmux list-panes -F '\#F'|grep -q Z || tmux resize-pane -Z
|
|
endif
|
|
" All eyes on me
|
|
Limelight
|
|
" Resize after zoom
|
|
if !exists("g:goyo_width")
|
|
let g:goyo_width=80
|
|
endif
|
|
if !exists("g:goyo_height")
|
|
let g:goyo_height='85%'
|
|
endif
|
|
execute "Goyo ".g:goyo_width."x".g:goyo_height
|
|
set scrolloff=999
|
|
endfunction
|
|
|
|
function! s:goyo_leave()
|
|
if exists('$TMUX')
|
|
" Show the status panel and zoom out the current pane
|
|
silent !tmux set status on
|
|
silent !tmux list-panes -F '\#F'|grep -q Z && tmux resize-pane -Z
|
|
endif
|
|
Limelight!
|
|
set scrolloff=5
|
|
endfunction
|
|
|
|
autocmd! User GoyoEnter nested call <SID>goyo_enter()
|
|
autocmd! User GoyoLeave nested call <SID>goyo_leave()
|
|
|
|
" Configure Limelight
|
|
let g:limelight_conceal_ctermfg = 245 " Solarized Base1
|
|
let g:limelight_conceal_guifg = '#8a8a8a' " Solarized Base1
|
|
|
|
"""
|
|
""" Visually indicate long columns
|
|
""" Taken from https://www.youtube.com/watch?v=aHm36-na4-4
|
|
"""
|
|
highlight ColorColumn ctermbg=magenta
|
|
call matchadd('ColorColumn', '\%81v', 100)
|
|
|
|
" Prefer two spaces
|
|
set shiftwidth=2
|
|
set softtabstop=2
|
|
|
|
" Show me those tabs, BTW
|
|
set list
|
|
set listchars=trail:~,nbsp:␣,tab:▸\
|
|
|
|
" Easy moves through wrapped lines
|
|
nnoremap j gj
|
|
nnoremap k gk
|
|
|
|
" Work with tmux mouse integration
|
|
set mouse=a
|
|
|
|
if has('nvim')
|
|
set undodir=~/.config/nvim/undodir
|
|
else
|
|
set undodir=~/.vim/undodir
|
|
endif
|
|
set undofile
|