diff --git a/PKGBUILD b/PKGBUILD index 715382e..c1d22a7 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,7 +1,6 @@ pkgname=neostrophic -pkgver=0.6 +pkgver=2.0.0 pkgrel=1 -epoch=1 pkgdesc="mikroskeem's personal neovim config (read: go away)" url="https://mikroskeem.eu/pages/neostrophic" arch=(any) diff --git a/neostrophic.vim b/neostrophic.vim index cf633a6..6ec5642 100644 --- a/neostrophic.vim +++ b/neostrophic.vim @@ -1,74 +1,193 @@ " mikroskeem's neovim config -" Bail if config is already loaded -if exists("g:loaded_neostrophic") - finish -endif -let g:loaded_neostrophic = 1 +" Toggle preview +function! s:preview_toggle() + if &completeopt =~# "preview" + setlocal completeopt-=preview + pc + silent execute "!echo -n Preview turned off" + else + setlocal completeopt+=preview + silent execute "!echo -n Preview turned on" + endif +endfunction -" neovim-qt Guifont command -command -nargs=? Guifont call rpcnotify(0, 'Gui', 'SetFont', "") | let g:Guifont="" +" Fake $MYVIMRC +function! s:fake_vimrc() + let $MYVIMRC=$HOME . "/.config/nvim/init.vim" +endfunction -" Set options +" UpdateRemotePlugins wrapper (used in vim-plug) +function! URP(info) + if a:info.status == 'installed' + silent! call s:fake_vimrc() + silent! UpdateRemotePlugins + endif +endfunction + +" Center text (for vim startify) +function! s:center_header(lines) abort + let longest_line = max(map(copy(a:lines), 'len(v:val)')) + let centered_lines = map(copy(a:lines), + \ 'repeat(" ", (&columns / 2) - (longest_line / 2)) . v:val') + return centered_lines +endfunction + +" mkdir -p +function! s:mkdir_p(p) + if !isdirectory(expand(a:p)) + call mkdir(expand(a:p), "p") + endif +endfunction + +" Custom indendations +function! s:set_indent() + if &ft =~ 'yaml\|coffee\|vim\|jade' + set softtabstop=4 shiftwidth=4 + endif + if &ft =~ 'make' + set shiftwidth=2 tabstop=2 noexpandtab + endif +endfunction + + +" --- Start +if(!has("python3")) + echo "You should install python neovim module. `pip install neovim`" +end + + +" Plugins +call plug#begin('~/.config/nvim/neostrophic_plugins') +" --- Completion and syntax check engine +Plug 'Shougo/deoplete.nvim', {'do': function('URP')} +Plug 'scrooloose/syntastic' +Plug 'ervandew/supertab' +Plug 'Shougo/echodoc.vim' + +" --- Syntax and completion engine components + +Plug 'Shougo/context_filetype.vim' +"Plug 'Shougo/denite.nvim', {'do': function('URP')} +Plug 'Shougo/vimproc.vim', {'do' : 'make'} + +" C++ +Plug 'Rip-Rip/clang_complete', {'for': ['c', 'cpp']} + +" Python +Plug 'zchee/deoplete-jedi', {'for': 'python'} +Plug 'jmcantrell/vim-virtualenv' + +" Vimscript +Plug 'Shougo/neco-vim', {'for': 'vim'} +Plug 'Shougo/neco-syntax', {'for': 'vim'} + +" JSON +Plug 'elzr/vim-json', {'for': 'json'} + +" Java +"Plug 'artur-shaik/vim-javacomplete2', {'for': 'java'} + +" Markdown +Plug 'gabrielelana/vim-markdown' + +" Misc +Plug 'vim-scripts/nginx.vim', {'for': 'nginx'} +Plug 'Matt-Deacalion/vim-systemd-syntax', {'for': 'systemd'} +Plug 'PotatoesMaster/i3-vim-syntax', {'for': 'i3'} + +" --- Git +Plug 'airblade/vim-gitgutter' +Plug 'tpope/vim-fugitive' + + +" --- Themes +"Plug 'crater2150/vim-theme-chroma' +Plug 'justinmk/molokai' + +" --- Workflow + +" Startup screen +Plug 'mhinz/vim-startify' + + +" Undo tree +Plug 'sjl/gundo.vim' + +" Status line +Plug 'itchyny/lightline.vim' + +" Pathenses +Plug 'luochen1990/rainbow' + +" Indendation aids +Plug 'Yggdroot/indentLine' +Plug 'godlygeek/tabular' + +" Distraction-free +Plug 'junegunn/goyo.vim', {'on': 'Goyo'} +Plug 'junegunn/limelight.vim', {'on': 'Limelight'} + +call plug#end() + +" Apply color scheme +colorscheme molokai + +" --- Neovim options +set updatetime=250 set wildmode=longest,list,full -set completeopt-=preview set shortmess+=cI set noshowmode -set shortmess+=I set nostartofline set wrap set textwidth=0 set wrapmargin=0 -set background=dark + +" Our leader is comma +let mapleader = "," + +" Show line numbers set number set numberwidth=3 + +" Disable preview by default, because it is annoying imo +set completeopt-=preview + +" Use X11 clipboard if $DISPLAY != '' set clipboard+=unnamedplus endif + +" Search options set showmatch set smartcase set ignorecase + +" Backup, undo and viminfo +set backup set undofile set undoreload=100 set viminfo+=n$HOME/.config/nvim/tmp/viminfo -set showtabline=0 -set backup set backupdir=$HOME/.config/nvim/tmp/backup/ set undodir=$HOME/.config/nvim/tmp/undo/ set directory=$HOME/.config/nvim/tmp/swap/ -set title -set cursorline -let mapleader = ',' -function! s:center_header(lines) abort - let longest_line = max(map(copy(a:lines), 'len(v:val)')) - let centered_lines = map(copy(a:lines), - \ 'repeat(" ", (&columns / 2) - (longest_line / 2)) . v:val') - return centered_lines -endfunction - -function! s:mkdir_p(p) - if !isdirectory(expand(a:p)) - call mkdir(expand(a:p), "p") - endif -endfunction - -function! s:set_indent() - if &ft =~ 'yaml\|coffee\|vim\|jade' - set softtabstop=2 shiftwidth=2 - endif - if &ft =~ 'make' - set shiftwidth=2 tabstop=2 noexpandtab - endif -endfunction - -" Make missing dirs +" Create missing directories silent! call s:mkdir_p(&undodir) silent! call s:mkdir_p(&backupdir) silent! call s:mkdir_p(&directory) +set title +set cursorline +set showtabline=0 -" Default indent settings +" Terminal tweaks +function! s:on_terminal_open() + setlocal nocursorline +endfunction +autocmd TermOpen * nested call on_terminal_open() + +" Default indendation settings set softtabstop=4 set shiftwidth=4 set expandtab @@ -79,60 +198,51 @@ set copyindent " if opened filetype was defined in function autocmd! FileType * call s:set_indent() -" Fake $MYVIMRC -function! s:fake_vimrc() - let $MYVIMRC=$HOME . "/.config/nvim/init.vim" -endfunction +" Neovim python +" Note: Read https://github.com/zchee/deoplete-jedi#virtual-environments +let g:python_host_prog = '/usr/bin/python2' +let g:python3_host_prog = '/usr/bin/python3' -" UpdateRemotePlugins wrapper (used in vim-plug) -function! URP(info) - if a:info.status == 'installed' - silent! call s:fake_vimrc() - silent! UpdateRemotePlugins - endif -endfunction +" --- Plugin configurations -" Eyecandy: loads color scheme after it's installation :3 -function! Load_color_scheme(info) - if a:info.status == 'installed' - let s = printf("colorscheme %s", a:info.name) - silent! execute s - endif -endfunction +" Deoplete and echodoc +let g:deoplete#enable_at_startup = 1 +let g:deoplete#enable_camel_case = 1 +let g:echodoc_enable_at_startup = 1 -" Toggle preview -function! s:preview_toggle() - if &completeopt =~# "preview" - setlocal completeopt-=preview - pc - else - setlocal completeopt+=preview - endif -endfunction +" Rainbow +let g:rainbow_active = 1 +let g:rainbow_conf = {'ctermfgs': ['red', 'lightgreen', 'lightred', 'lightblue', 'yellow']} +" Gitgutter +let g:gitgutter_map_keys = 0 +let g:gitgutter_highlight_lines = 0 -" Plugin configurations -let g:lightline = { - \ 'active': { - \ 'left': [['mode', 'paste',], ['readonly', 'modified', 'fugitive'], ['bufferinfo'], ['bufferbefore', 'buffercurrent', 'bufferafter']], - \ }, - \ 'component_expand': { - \ 'buffercurrent': 'lightline#buffer#buffercurrent2', - \ }, - \ 'component_function': { - \ 'bufferbefore': 'lightline#buffer#bufferbefore', - \ 'bufferafter': 'lightline#buffer#bufferafter', - \ 'bufferinfo': 'lightline#buffer#bufferinfo', - \ 'fugitive': 'LlFugitive', - \ }, - \ 'separator': { 'left': '>', 'right': '<' }, - \ 'subseparator': { 'left': '>', 'right': '<' } - \ } -function! LlFugitive() - return exists('*fugitive#head') ? fugitive#head() : '' -endfunction +" indentLine +let g:indentLine_char = '┆' -let g:lightline_buffer_readonly_icon = '' +" Startify +let g:startify_session_dir = '~/.config/nvim/startify-session' +let g:startify_custom_header = s:center_header(map(split(system('fortune | cowsay'), '\n'), '" ". v:val') + ['','']) + +" Syntastic +let g:syntastic_enable_balloons = 1 +let g:syntastic_always_populate_loc_list = 1 +let g:syntastic_auto_loc_list = 1 +let g:syntastic_check_on_open = 1 +let g:syntastic_check_on_wq = 0 +let g:syntastic_mode_map = { + \ "mode": "active", + \ "active_filetypes": ["javascript", "python", "coffee", "jade", "yaml"], + \ "passive_filetypes": ["java", "c"]} +let g:syntastic_python_checkers = ['flake8', 'pylint'] +let g:syntastic_javascript_checkers = ['eslint'] +let g:syntastic_yaml_checkers = ['yamllint', 'yamlxs'] +let g:syntastic_cpp_checkers = ['clang_check'] +let g:syntastic_cpp_compiler = 'clang++' + +" Lightline +let g:lightline_buffer_readonly_icon = 'R' let g:lightline_buffer_modified_icon = '+' let g:lightline_buffer_active_buffer_left_icon = '[' let g:lightline_buffer_active_buffer_right_icon = ']' @@ -149,168 +259,63 @@ let g:lightline_buffer_minflen = 16 let g:lightline_buffer_minfextlen = 3 let g:lightline_buffer_reservelen = 20 -let g:molokai_original = 0 -let g:rehash256 = 1 - -let g:syntastic_enable_balloons = 1 -let g:syntastic_always_populate_loc_list = 1 -let g:syntastic_auto_loc_list = 1 -let g:syntastic_check_on_open = 1 -let g:syntastic_check_on_wq = 0 -let g:syntastic_mode_map = { - \ "mode": "active", - \ "active_filetypes": ["javascript", "python", "coffee", "jade", "yaml"], - \ "passive_filetypes": ["java", "c"]} -let g:syntastic_python_checkers = ['flake8', 'pylint'] -let g:syntastic_javascript_checkers = ['eslint'] -let g:syntastic_yaml_checkers = ['yamllint', 'yamlxs'] - -let g:startify_session_dir = '~/.config/nvim/startify-session' -let g:startify_custom_header = s:center_header(map(split(system('fortune | cowsay'), '\n'), '" ". v:val') + ['','']) - -let g:deoplete#enable_at_startup = 1 -let g:deoplete#enable_camel_case = 1 -let g:python3_host_prog = '/usr/bin/python3' -let g:python3_host_skip_check = 1 - -let g:NERDTreeHijackNetrw = 1 - - -let g:gitgutter_map_keys = 0 -let g:gitgutter_highlight_lines = 0 - -let g:echodoc_enable_at_startup = 1 - -let g:rainbow_active = 1 -let g:rainbow_conf = { - \ 'ctermfgs': ['red', 'lightgreen', 'lightred', 'lightblue', 'yellow']} - -" Plugins -call plug#begin('~/.config/nvim/neostrophic_plugins') -Plug 'tpope/vim-sensible' -Plug 'Konfekt/FastFold' -Plug 'Matt-Deacalion/vim-systemd-syntax', {'for': 'systemd'} -Plug 'PotatoesMaster/i3-vim-syntax', {'for': 'i3'} -Plug 'Shougo/context_filetype.vim' -Plug 'Shougo/deoplete.nvim', {'do': function('URP')} -Plug 'Shougo/echodoc.vim' -Plug 'Shougo/unite.vim', {'on': 'Unite' } -Plug 'Shougo/vimproc.vim', {'do': 'make'} -Plug 'airblade/vim-gitgutter' -Plug 'digitaltoad/vim-pug', {'for': ['jade', 'pug']} -Plug 'elzr/vim-json', {'for': 'json'} -Plug 'itchyny/lightline.vim' -Plug 'jelera/vim-javascript-syntax', {'for': 'javascript'} -Plug 'jmcantrell/vim-virtualenv' -Plug 'junegunn/goyo.vim', {'on': 'Goyo'} -Plug 'junegunn/limelight.vim', {'on': 'Limelight'} -Plug 'junegunn/vim-easy-align', {'on': 'EasyAlign'} -Plug 'justinmk/molokai', {'do': function('Load_color_scheme')} -Plug 'kchmck/vim-coffee-script', {'for': 'coffee'} -Plug 'luochen1990/rainbow' -Plug 'majutsushi/tagbar' -Plug 'mattn/gist-vim', {'on': 'Gist'} -Plug 'mattn/webapi-vim', {'on': 'Gist'} -Plug 'matze/vim-move' -Plug 'mhinz/vim-startify' -Plug 'mikroskeem/vim-sk-syntax', {'for': 'skript'} -Plug 'nelstrom/vim-markdown-folding', {'for': 'markdown'} -Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'} -Plug 'scrooloose/syntastic' -Plug 'taohex/lightline-buffer' -Plug 'tpope/vim-fugitive' -Plug 'tpope/vim-markdown', {'for': 'markdown'} -Plug 'vim-scripts/nginx.vim', {'for': 'nginx'} -Plug 'wavded/vim-stylus', {'for': 'stylus'} -Plug 'Yggdroot/indentLine' -Plug 'zchee/deoplete-jedi' -call plug#end() - -" Terminal -autocmd TermOpen * setlocal nocursorline - -" Goyo +let g:lightline = { + \ 'active': { + \ 'left': [['mode', 'paste'], ['filename', 'readonly', 'modified', 'fugitive']], + \ }, + \ 'component_function': { + \ 'fugitive': 'LlFugitive', + \ }, + \ 'separator': { 'left': '>', 'right': '<' }, + \ 'subseparator': { 'left': '>', 'right': '<' } + \ } +function! LlFugitive() + return exists('*fugitive#head') ? fugitive#head() : '' +endfunction +" Goyo & Lightline function! s:on_goyo_enter() - if exists('$TMUX') - silent !tmux set status off - endif setlocal nocursorline Limelight endfunction function! s:on_goyo_leave() - if exists('$TMUX') - silent !tmux set status on - endif setlocal cursorline Limelight! endfunction - autocmd! User GoyoEnter nested call on_goyo_enter() autocmd! User GoyoLeave nested call on_goyo_leave() - -" Keybinds - -" Tab controls -nnoremap :tabprevious -nnoremap :tabnext -nnoremap :tabnew -nnoremap :tabclose -" ---------------- -nnoremap :tabnew -nnoremap :tabclose -nnoremap :tabprevious -nnoremap :tabnext +" Markdown +let g:markdown_include_jekyll_support = 0 -" Commonly used commands - -" Undo +" --- Keymaps +" Commonly used commands nnoremap :u -" Quit -nnoremap :q -" Just write nnoremap :w -" Quit without writing +nnoremap :q nnoremap :q! -" Remove search highlighting nnoremap :noh -" Preview toggle nnoremap p :call preview_toggle() + +" F-line +nnoremap :so % +nnoremap :GundoToggle +nnoremap :term +nnoremap :Goyo + +" Git +nmap hr GitGutterUndoHunk +nmap hp GitGutterPreviewHunk + +" Shut up annoying stuff +nnoremap :SyntasticToggleMode +nnoremap p :call preview_toggle() + " Increase/decrease numbers with Alt key and A/X nnoremap nnoremap -" Commands from plugins - -" File listing -nnoremap :NERDTreeToggle -" Gist -nnoremap :Gist -p -" Toggle Syntastic -nnoremap :SyntasticToggleMode -" Goyo mode -nnoremap :Goyo -" neovim term -nnoremap :term -" neovim terminal mode -> normal mode with Alt-q +" Terminal tnoremap -" Unite -nnoremap :Unite -" Show/hide tags -nnoremap :TagbarToggle -" vim-easy-align -" xnoremap / nnoremap won't work here somehow -xmap ga :EasyAlign -nmap ga :EasyAlign -" GitGutter -nmap hr GitGutterUndoHunk -nmap hp GitGutterPrevHunk - -" Re-apply fake $MYVIMRC -silent! call s:fake_vimrc() - -" Load color scheme (reuse function) -call Load_color_scheme({'status': 'installed', 'name': 'molokai'})