|
|
" 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
|