commit 728c25827612cc3c8cf128cb344c44c090adf2ac Author: Yohanes Bandung <bandungpenting@gmail.com> Date: Tue, 19 May 2020 01:51:45 +0700 feat: first dump 💩 Diffstat:
| A | .config/nvim/coc-settings.json | | | 62 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | .config/nvim/init.vim | | | 437 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | .vimrc | | | 424 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | .zshrc | | | 284 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
4 files changed, 1207 insertions(+), 0 deletions(-)
diff --git a/.config/nvim/coc-settings.json b/.config/nvim/coc-settings.json @@ -0,0 +1,62 @@ +{ + "coc.preferences.formatOnSaveFiletypes": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "json", + "reason", + "reasonreact" + ], + "flow.pathToFlow": "${workspaceRoot}/node_modules/.bin/flow", + "html.validate.styles": true, + "scss.validate": true, + "html.validate.scripts": true, + "javascript.validate.enable": false, + "prettier.eslintIntegration": true, + "prettier.tslintIntegration": true, + "prettier.ignorePath": ".prettierignore", + "languageserver": { + "ccls": { + "command": "ccls", + "filetypes": ["c", "cpp", "objc", "objcpp"], + "rootPatterns": [".ccls", "compile_commands.json", ".vim/", ".git/", ".hg/"], + "initializationOptions": { + "cache": { + "directory": "/tmp/ccls" + }, + "clang": { + "resourceDir": "/Library/Developer/CommandLineTools/usr/lib/clang/11.0.0", + "extraArgs": [ + "-isystem", + "/usr/local/include", + "-L", + "/usr/local/lib", + "-l", + "SDL2", + "-isystem", + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1", + "-isystem", + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include", + "-isystem", + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include", + "-isystem", + "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include", + "-isystem", + "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks", + "-isystem", + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1", + "-I", + "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/" + ] + } + } + }, + "golang": { + "command": "gopls", + "args": [], + "rootPatterns": ["go.mod", ".vim/", ".git/", ".hg/"], + "filetypes": ["go"] + } + } +} diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim @@ -0,0 +1,437 @@ +" For Vim +set nocompatible +set encoding=UTF-8 + +let s:plugin_location = '~/.vim/plugged' +if has('nvim') + let s:plugin_location = '~/.local/share/nvim/plugged' +endif + +" PlugIns +call plug#begin(s:plugin_location) + Plug 'sainnhe/gruvbox-material' + let g:gruvbox_material_enable_italic = 1 + + " *fzf.vim* + Plug '/usr/local/opt/fzf' + Plug 'ybbond/fzf.vim' + + " *bufkill* + Plug 'qpkorr/vim-bufkill' + + Plug 'junegunn/goyo.vim' + Plug 'junegunn/limelight.vim' + let g:limelight_conceal_ctermfg = 'gray' + let g:limelight_conceal_ctermfg = 240 + + " *vim-fugitive* + Plug 'tpope/vim-fugitive' + Plug 'tpope/vim-rhubarb' + Plug 'mhinz/vim-signify' + let g:signify_realtime = 1 + let g:signify_cursorhold_normal = 0 + let g:signify_cursorhold_insert = 0 + Plug 'shumphrey/fugitive-gitlab.vim' + let g:fugitive_gitlab_domains = ['https://gitlab.kumparan.com'] + " *git-messenger* + Plug 'rhysd/git-messenger.vim' + let g:git_messenger_git_command = 'hub' + let g:git_messenger_no_default_mappings = v:true + + " *vim-easymotion* + " Plug 'easymotion/vim-easymotion' + Plug 'justinmk/vim-sneak' + + " *vim-airline* + Plug 'vim-airline/vim-airline' + let g:airline#extensions#tabline#enabled = 1 + let g:airline#extensions#tabline#show_tabs = 0 + let g:airline#extensions#tabline#buffer_nr_show = 1 + let g:airline#extensions#tabline#formatter = 'jsformatter' + + let g:airline_section_x = [] + let g:airline_section_y = [] + + let g:airline#extensions#coc#enabled = 1 + " use error & warning count of diagnostics form coc.nvim + let g:airline_section_error = '%{airline#util#wrap(airline#extensions#coc#get_error(),0)}' + let g:airline_section_warning = '%{airline#util#wrap(airline#extensions#coc#get_warning(),0)}' + let g:airline#extensions#vimtex#enabled = 0 + let g:airline_theme = 'gruvbox_material' + + " *tmux* + Plug 'tmux-plugins/vim-tmux' + Plug 'tmux-plugins/vim-tmux-focus-events' + + " *nerdtree* + Plug 'scrooloose/nerdtree' + Plug 'Xuyuanp/nerdtree-git-plugin' + + Plug 'junegunn/vim-peekaboo' + Plug 'machakann/vim-highlightedyank' + Plug 'jiangmiao/auto-pairs' + let g:AutoPairsMultilineClose = 0 + + Plug 'tpope/vim-commentary' + Plug 'tpope/vim-surround' + Plug 'tpope/vim-repeat' + + " *coc.nvim* + Plug 'neoclide/coc.nvim', {'branch': 'release'} + function! s:show_documentation() + if &filetype == 'vim' + execute 'h '.expand('<cword>') + else + call CocAction('doHover') + endif + endfunction + au BufNewFile,BufRead *.c setlocal tabstop=4 + au BufNewFile,BufRead *.c setlocal shiftwidth=4 + au BufNewFile,BufRead *.c setlocal set noexpandtab + + " *vim-clap* + Plug 'liuchengxu/vim-clap', { 'do': ':Clap install-binary!' } + let g:clap_provider_grep_delay = 100 + let g:clap_disable_run_rooter = v:true + let g:clap_layout = { 'relative': 'editor' } + + " JavaScript + Plug 'pangloss/vim-javascript' + let g:javascript_plugin_flow = 1 + let g:javascript_plugin_jsdoc = 1 + Plug 'othree/yajs.vim' + Plug 'maxmellon/vim-jsx-pretty' + let g:vim_jsx_pretty_colorful_config = 1 + let g:jsx_ext_required = 0 + + " styled-components + Plug 'styled-components/vim-styled-components', { 'branch': 'main' } + + " TypeScript + Plug 'leafgarland/typescript-vim' + Plug 'HerringtonDarkholme/yats.vim' + + " Markdown + Plug 'ybbond/vim-markdown' + let g:vim_markdown_folding_disabled = 1 + let g:vim_markdown_conceal = 0 + let g:vim_markdown_strikethrough = 1 + let g:tex_conceal = "" + let g:vim_markdown_math = 1 + let g:vim_markdown_frontmatter = 1 " for YAML format + let g:vim_markdown_toml_frontmatter = 1 " for TOML format + let g:vim_markdown_json_frontmatter = 1 " for JSON format + Plug 'godlygeek/tabular' + + Plug 'cespare/vim-toml' + Plug 'stephpy/vim-yaml' + + " GRAPHQL + Plug 'jparise/vim-graphql' + + " Go + Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' } + + " Rust + Plug 'rust-lang/rust.vim' + let g:rustfmt_autosave = 1 + + " Reason + Plug 'reasonml-editor/vim-reason-plus' + autocmd BufNewFile,BufRead *.re nnoremap <leader>w :!refmt --in-place %<CR> + + " vlang + Plug 'cheap-glitch/vim-v' + let g:v_warnings=1 + au BufNewFile,BufRead *.v setlocal tabstop=4 + au BufNewFile,BufRead *.v setlocal shiftwidth=4 + au BufNewFile,BufRead *.v setlocal set noexpandtab + + " LaTex + Plug 'lervag/vimtex' + let g:vimtex_compiler_progname = 'nvr' + let g:vimtex_view_method = 'skim' + let g:vimtex_texcount_custom_arg = 'macro \cmt [state1]' + +call plug#end() + +colorscheme gruvbox-material +set background=dark +set termguicolors + +syntax enable +syntax on +filetype plugin on +filetype plugin indent on + +set nopaste +set pastetoggle=<F2> + +set tabstop=2 +set softtabstop=2 +set shiftwidth=2 +set scrolloff=3 +set expandtab +set nowrap +set linebreak +set list +set listchars=tab:▷\ ,trail:◻,nbsp:𐩒 + +set mouse=n +set noshowmode + +set number +set relativenumber + +set ruler +set showmatch +set cursorline + +set ignorecase +set smartcase +set incsearch +set hlsearch + +if has('nvim') + set inccommand=split +endif + +" Let's save undo info! +if has('nvim') + if has('persistent_undo') + set undofile + set undolevels=250 + set undoreload=500 + endif +else + if !isdirectory($HOME."/.vim") + call mkdir($HOME."/.vim", "", 0770) + endif + if !isdirectory($HOME."/.vim/undo-dir") + call mkdir($HOME."/.vim/undo-dir", "", 0700) + endif + set undodir=~/.vim/undo-dir + " Then set persistent undo! + if has('persistent_undo') + set undofile + set undolevels=250 + set undoreload=500 + endif +endif + +nnoremap <expr> j &wrap == 1 ? 'gj' : 'j' +nnoremap <expr> k &wrap == 1 ? 'gk' : 'k' +nnoremap <expr> $ &wrap == 1 ? 'g$' : '$' +nnoremap <expr> 0 &wrap == 1 ? 'g0' : '0' + + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" NORMAL MODE +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + + +" reload all opened buffer +nnoremap <leader>br :bufdo e<cr> + +" Copy, Paste and Copy Whole File to clipboard +map <leader>c "+y<cr> +map <leader>v :r !pbpaste<cr><cr> +map <leader>ac :%w !pbcopy<cr><cr> + +" Unhighlight search +nnoremap <silent> <LEADER><SPACE> :nohlsearch<CR> + +" Toggle check spelling +nnoremap <leader>s :set spell! spelllang=en_us<CR> + +map <silent> <A-h> <C-w>< +map <silent> <A-k> <C-W>- +map <silent> <A-j> <C-W>+ +map <silent> <A-l> <C-w>> + +" Remap leader-% to source % +nnoremap <leader>% :source %<cr> + +" navigating buffers +nnoremap gb :bnext<cr> +nnoremap gB :bprevious<cr> + +" |vim-sneak| + map f <Plug>Sneak_f + map F <Plug>Sneak_F + map t <Plug>Sneak_t + map T <Plug>Sneak_T + " 2-character Sneak (default) + nmap Q <Plug>Sneak_s + nmap <leader>Q <Plug>Sneak_S + " visual-mode + xmap Q <Plug>Sneak_s + xmap <leader>Q <Plug>Sneak_S + " operator-pending-mode + omap Q <Plug>Sneak_s + omap <leader>Q <Plug>Sneak_S + +" |vim-fugitive| + map <leader>kp :Gdiff!<cr> + map <leader>kb :Gblame<cr> + +" |coc.nvim| + nmap gd <Plug>(coc-definition) + nmap <2-LeftMouse> <Plug>(coc-definition) + nmap gh :call <SID>show_documentation()<cr> + nmap <2-LeftMouse> :call <SID>show_documentation()<cr> + nmap <leader>gd <Plug>(coc-diagnostics-info) + nmap ]C <Plug>(coc-diagnostic-next) + nmap [C <Plug>(coc-diagnostic-prev) + nmap gi <Plug>(coc-implementation) + nmap gr <Plug>(coc-references) + nmap <leader>. :call CocAction("codeAction")<cr> + +" |git-messenger| + nmap <C-w>m <Plug>(git-messenger) + nmap <C-w><C-m> <Plug>(git-messenger) + +" |bufkill| + nnoremap gx :BD<cr> + +" |fzf.vim| + let g:rg_command = ' + \ rg --column --line-number --no-heading --fixed-strings --ignore-case --hidden --follow --color "always" + \ -g "*.{css,js,jsx,ts,tsx,json,re,php,md,styl,jade,html,config,py,cpp,c,go,hs,rb,conf}" + \ -g "!{.git,node_modules,coverage,vendor,build}/*" ' + " :F for Ripgrep + command! -bang -nargs=* Strings call fzf#vim#grep(g:rg_command .shellescape(<q-args>), 1, <bang>0) + " nnoremap <C-p> <C-o> + " nnoremap <C-o> :Strings<cr> + " nnoremap <C-i> :Files<cr> + +" |vim-clap| + nnoremap <C-i> :Clap grep ++opt=--hidden ++opt=-g=!.git<CR> + nnoremap <C-p> :Clap files --hidden<CR> + nnoremap <leader>* :Clap grep ++query=<cword> ++opt=--hidden ++opt=-g=!.git<CR> + nnoremap <C-b> :Clap buffers<CR> + +" |nerdtree| + map <leader>e :NERDTreeToggle<cr> + map <leader>r :NERDTreeFind<cr> + + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" INSERT MODE +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +" Remap <c-f> to delete +inoremap <C-f> <Del> + +" Remap <c-b> to delete within word +inoremap <C-b> <ESC>lcw + +" Remap escape to j + k +inoremap jk <ESC> +inoremap <C-c> <ESC> + +" |fzf.vim| + inoremap <expr> <C-x><C-h> fzf#vim#complete#path_relative('rg --files') + + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" APPEARANCE +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +augroup numbertoggle + if &number == 1 + autocmd! + autocmd BufEnter,FocusGained,InsertLeave * set relativenumber + autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber + endif +augroup end + +function ToggleNumberToggle(numberVar) + " Reset group + augroup numbertoggle + autocmd! + augroup end + + " Enable if toggled on + if a:numberVar + augroup numbertoggle + if &number == 1 + autocmd! + autocmd BufEnter,FocusGained,InsertLeave * set relativenumber + autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber + endif + augroup end + endif +endfunction + +function! s:goyo_enter() + if executable('tmux') && strlen($TMUX) + silent !tmux set status off + silent !tmux list-panes -F '\#F' | grep -q Z || tmux resize-pane -Z + endif + set noshowcmd + set wrap + set nonumber + set norelativenumber + set eventignore=FocusGained,BufEnter + set nocursorline + Limelight + :call ToggleNumberToggle(0) +endfunction + +function! s:goyo_leave() + if executable('tmux') && strlen($TMUX) + silent !tmux set status on + silent !tmux list-panes -F '\#F' | grep -q Z && tmux resize-pane -Z + endif + set showcmd + set nowrap + set number + set relativenumber + set eventignore= + set cursorline + Limelight! + :call ToggleNumberToggle(1) +endfunction + +autocmd! User GoyoEnter nested call <SID>goyo_enter() +autocmd! User GoyoLeave nested call <SID>goyo_leave() + +" change cursor in different mode +if has('nvim') + set t_SI=[5\ q + set t_SR=[4\ q + set t_EI=[1\ q +else + if exists('$TMUX') + " tmux will only forward escape sequences to the terminal if surrounded by a DCS sequence + let &t_SI .= "\<Esc>Ptmux;\<Esc>\<Esc>[5 q\<Esc>\\" + let &t_SR .= "\<Esc>Ptmux;\<Esc>\<Esc>[4 q\<Esc>\\" + let &t_EI .= "\<Esc>Ptmux;\<Esc>\<Esc>[1 q\<Esc>\\" + autocmd VimLeave * silent !echo -ne "\033Ptmux;\033\033[0 q\033\\" + else + set t_SI=[5\ q + set t_SR=[4\ q + set t_EI=[1\ q + autocmd VimLeave * silent !echo -ne "\033[0 q" + endif +endif + +" |vim-fugitive| +set diffopt+=vertical + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" COLOR RELATED +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +" TODO highlight +" FIXME highlight +" XXX highlight + +" Change comment color +" hi Comment guifg=LightBlue +hi Comment gui=bold cterm=bold +hi htmlStrike gui=strikethrough cterm=strikethrough guibg=Black ctermbg=Black +hi Todo guibg=White ctermbg=White guifg=Black ctermfg=Black gui=bold,italic cterm=bold,italic +hi NonText guifg=#4a4a59 ctermfg=Gray +hi SpecialKey guifg=#4a4a59 ctermfg=Gray diff --git a/.vimrc b/.vimrc @@ -0,0 +1,424 @@ +" For Vim +set nocompatible +set encoding=UTF-8 + +let s:plugin_location = '~/.vim/plugged' +if has('nvim') + let s:plugin_location = '~/.local/share/nvim/plugged' +endif + +" PlugIns +call plug#begin(s:plugin_location) + Plug 'sainnhe/gruvbox-material' + let g:gruvbox_material_enable_italic = 1 + + " *fzf.vim* + Plug '/usr/local/opt/fzf' + Plug 'ybbond/fzf.vim' + + " *bufkill* + Plug 'qpkorr/vim-bufkill' + + Plug 'junegunn/goyo.vim' + Plug 'junegunn/limelight.vim' + let g:limelight_conceal_ctermfg = 'gray' + let g:limelight_conceal_ctermfg = 240 + + " *vim-fugitive* + Plug 'tpope/vim-fugitive' + Plug 'tpope/vim-rhubarb' + Plug 'mhinz/vim-signify' + let g:signify_realtime = 1 + let g:signify_cursorhold_normal = 0 + let g:signify_cursorhold_insert = 0 + Plug 'shumphrey/fugitive-gitlab.vim' + let g:fugitive_gitlab_domains = ['https://gitlab.kumparan.com'] + " *git-messenger* + Plug 'rhysd/git-messenger.vim' + let g:git_messenger_git_command = 'hub' + let g:git_messenger_no_default_mappings = v:true + + " *vim-easymotion* + " Plug 'easymotion/vim-easymotion' + Plug 'justinmk/vim-sneak' + + " *vim-airline* + Plug 'vim-airline/vim-airline' + let g:airline#extensions#tabline#enabled = 1 + let g:airline#extensions#tabline#show_tabs = 0 + let g:airline#extensions#tabline#buffer_nr_show = 1 + let g:airline#extensions#tabline#formatter = 'jsformatter' + + let g:airline_section_x = [] + let g:airline_section_y = [] + + let g:airline#extensions#coc#enabled = 1 + " use error & warning count of diagnostics form coc.nvim + let g:airline_section_error = '%{airline#util#wrap(airline#extensions#coc#get_error(),0)}' + let g:airline_section_warning = '%{airline#util#wrap(airline#extensions#coc#get_warning(),0)}' + let g:airline#extensions#vimtex#enabled = 0 + let g:airline_theme = 'gruvbox_material' + + " *tmux* + Plug 'tmux-plugins/vim-tmux' + Plug 'tmux-plugins/vim-tmux-focus-events' + Plug 'edkolev/tmuxline.vim' + let g:tmuxline_powerline_separators = 0 + let g:tmuxline_preset = { + \'win' : '#I #W #F', + \'cwin' : '#I #W #F', + \'y' : '#[bg=colour236] #(sh ~/.config/pane-border-format.sh --pane-current-path=#{pane_current_path} --pane-active=#{pane_active})', + \'z' : '#[bold]:D', + \'options' : {'status-justify' : 'left'}} + + " *nerdtree* + Plug 'scrooloose/nerdtree' + Plug 'Xuyuanp/nerdtree-git-plugin' + + Plug 'junegunn/vim-peekaboo' + Plug 'machakann/vim-highlightedyank' + Plug 'jiangmiao/auto-pairs' + let g:AutoPairsMultilineClose = 0 + + Plug 'tpope/vim-commentary' + Plug 'tpope/vim-surround' + Plug 'tpope/vim-repeat' + + " *coc.nvim* + Plug 'neoclide/coc.nvim', {'branch': 'release'} + function! s:show_documentation() + if &filetype == 'vim' + execute 'h '.expand('<cword>') + else + call CocAction('doHover') + endif + endfunction + + " *vim-clap* + Plug 'liuchengxu/vim-clap', { 'do': ':Clap install-binary!' } + let g:clap_provider_grep_delay = 100 + let g:clap_disable_run_rooter = v:true + let g:clap_layout = { 'relative': 'editor' } + + " JavaScript + Plug 'pangloss/vim-javascript' + let g:javascript_plugin_flow = 1 + let g:javascript_plugin_jsdoc = 1 + Plug 'othree/yajs.vim' + Plug 'maxmellon/vim-jsx-pretty' + let g:vim_jsx_pretty_colorful_config = 1 + let g:jsx_ext_required = 0 + + " styled-components + Plug 'styled-components/vim-styled-components', { 'branch': 'main' } + + " TypeScript + Plug 'leafgarland/typescript-vim' + Plug 'HerringtonDarkholme/yats.vim' + + " Markdown + Plug 'ybbond/vim-markdown' + let g:vim_markdown_folding_disabled = 1 + let g:vim_markdown_conceal = 0 + let g:vim_markdown_strikethrough = 1 + let g:tex_conceal = "" + let g:vim_markdown_math = 1 + let g:vim_markdown_frontmatter = 1 " for YAML format + let g:vim_markdown_toml_frontmatter = 1 " for TOML format + let g:vim_markdown_json_frontmatter = 1 " for JSON format + Plug 'godlygeek/tabular' + + " GRAPHQL + Plug 'jparise/vim-graphql' + + " Go + Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' } + + " Rust + Plug 'rust-lang/rust.vim' + let g:rustfmt_autosave = 1 + + " Reason + Plug 'reasonml-editor/vim-reason-plus' + autocmd BufNewFile,BufRead *.re nnoremap <leader>w :!refmt --in-place %<CR> + + " vlang + Plug 'cheap-glitch/vim-v' + let g:v_warnings=1 + au BufNewFile,BufRead *.v setlocal tabstop=4 + au BufNewFile,BufRead *.v setlocal softtabstop=4 + au BufNewFile,BufRead *.v setlocal shiftwidth=4 + + " LaTex + Plug 'lervag/vimtex' + let g:vimtex_compiler_progname = 'nvr' + let g:vimtex_view_method = 'skim' + let g:vimtex_texcount_custom_arg = 'macro \cmt [state1]' + +call plug#end() + +colorscheme gruvbox-material +set background=dark +set termguicolors + +syntax enable +syntax on +filetype plugin on +filetype plugin indent on + +set nopaste +set pastetoggle=<F2> + +set tabstop=2 +set softtabstop=2 +set shiftwidth=2 +set scrolloff=3 +set expandtab +set nowrap +set linebreak +" set listchars=tab:▷\ ,trail:·,extends:◣,precedes:◢,nbsp:○,eol:↪ + +set mouse=n +set noshowmode + +set number +set relativenumber + +set ruler +set showmatch +set cursorline + +set ignorecase +set smartcase +set incsearch +set hlsearch + +if has('nvim') + set inccommand=split +endif + +" Let's save undo info! +if has('nvim') + if has('persistent_undo') + set undofile + set undolevels=250 + set undoreload=500 + endif +else + if !isdirectory($HOME."/.vim") + call mkdir($HOME."/.vim", "", 0770) + endif + if !isdirectory($HOME."/.vim/undo-dir") + call mkdir($HOME."/.vim/undo-dir", "", 0700) + endif + set undodir=~/.vim/undo-dir + " Then set persistent undo! + if has('persistent_undo') + set undofile + set undolevels=250 + set undoreload=500 + endif +endif + +nnoremap <expr> j &wrap == 1 ? 'gj' : 'j' +nnoremap <expr> k &wrap == 1 ? 'gk' : 'k' +nnoremap <expr> $ &wrap == 1 ? 'g$' : '$' +nnoremap <expr> 0 &wrap == 1 ? 'g0' : '0' + + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" NORMAL MODE +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + + +" reload all opened buffer +nnoremap <leader>br :bufdo e<cr> + +" Copy, Paste and Copy Whole File to clipboard +map <leader>c :w !pbcopy<cr><cr> +map <leader>v :r !pbpaste<cr><cr> +map <leader>ac :%w !pbcopy<cr><cr> + +" Unhighlight search +nnoremap <silent> <LEADER><SPACE> :nohlsearch<CR> + +" Toggle check spelling +nnoremap <leader>s :set spell! spelllang=en_us<CR> + +map <silent> ˙ <C-w>< +map <silent> ˚ <C-W>- +map <silent> ∆ <C-W>+ +map <silent> ¬ <C-w>> + +" Remap leader-% to source % +nnoremap <leader>% :source %<cr> + +" navigating buffers +nnoremap gb :bnext<cr> +nnoremap gB :bprevious<cr> + +" |vim-sneak| + map f <Plug>Sneak_f + map F <Plug>Sneak_F + map t <Plug>Sneak_t + map T <Plug>Sneak_T + " 2-character Sneak (default) + nmap Q <Plug>Sneak_s + nmap <leader>Q <Plug>Sneak_S + " visual-mode + xmap Q <Plug>Sneak_s + xmap <leader>Q <Plug>Sneak_S + " operator-pending-mode + omap Q <Plug>Sneak_s + omap <leader>Q <Plug>Sneak_S + +" |vim-fugitive| + map <leader>kp :Gdiff!<cr> + map <leader>kb :Gblame<cr> + +" |coc.nvim| + nmap gd <Plug>(coc-definition) + nmap <2-LeftMouse> <Plug>(coc-definition) + nmap gh :call <SID>show_documentation()<cr> + nmap <2-LeftMouse> :call <SID>show_documentation()<cr> + nmap <leader>gd <Plug>(coc-diagnostics-info) + nmap ]C <Plug>(coc-diagnostic-next) + nmap [C <Plug>(coc-diagnostic-prev) + nmap gi <Plug>(coc-implementation) + nmap gr <Plug>(coc-references) + nmap <leader>. :call CocAction("codeAction")<cr> + +" |git-messenger| + nmap <C-w>m <Plug>(git-messenger) + nmap <C-w><C-m> <Plug>(git-messenger) + +" |bufkill| + nnoremap gx :BD<cr> + +" |fzf.vim| + let g:rg_command = ' + \ rg --column --line-number --no-heading --fixed-strings --ignore-case --hidden --follow --color "always" + \ -g "*.{css,js,jsx,ts,tsx,json,re,php,md,styl,jade,html,config,py,cpp,c,go,hs,rb,conf}" + \ -g "!{.git,node_modules,coverage,vendor,build}/*" ' + " :F for Ripgrep + command! -bang -nargs=* Strings call fzf#vim#grep(g:rg_command .shellescape(<q-args>), 1, <bang>0) + " nnoremap <C-p> <C-o> + " nnoremap <C-o> :Strings<cr> + " nnoremap <C-i> :Files<cr> + +" |vim-clap| + nnoremap <C-i> :Clap grep ++opt=--hidden ++opt=-g=!.git<CR> + nnoremap <C-p> :Clap files --hidden<CR> + nnoremap <leader>* :Clap grep ++query=<cword> ++opt=--hidden ++opt=-g=!.git<CR> + nnoremap <C-b> :Clap buffers<CR> + +" |nerdtree| + map <leader>e :NERDTreeToggle<cr> + map <leader>r :NERDTreeFind<cr> + + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" INSERT MODE +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +" Remap <c-f> to delete +inoremap <C-f> <Del> + +" Remap <c-b> to delete within word +inoremap <C-b> <ESC>lcw + +" Remap escape to j + k +inoremap jk <ESC> +inoremap <C-c> <ESC> + +" |fzf.vim| + inoremap <expr> <C-x><C-h> fzf#vim#complete#path_relative('rg --files') + + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" APPEARANCE +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +augroup numbertoggle + if &number == 1 + autocmd! + autocmd BufEnter,FocusGained,InsertLeave * set relativenumber + autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber + endif +augroup end + +function ToggleNumberToggle(numberVar) + " Reset group + augroup numbertoggle + autocmd! + augroup end + + " Enable if toggled on + if a:numberVar + augroup numbertoggle + if &number == 1 + autocmd! + autocmd BufEnter,FocusGained,InsertLeave * set relativenumber + autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber + endif + augroup end + endif +endfunction + +function! s:goyo_enter() + if executable('tmux') && strlen($TMUX) + silent !tmux set status off + silent !tmux list-panes -F '\#F' | grep -q Z || tmux resize-pane -Z + endif + set noshowcmd + set wrap + set nonumber + set norelativenumber + set eventignore=FocusGained,BufEnter + set nocursorline + Limelight + :call ToggleNumberToggle(0) +endfunction + +function! s:goyo_leave() + if executable('tmux') && strlen($TMUX) + silent !tmux set status on + silent !tmux list-panes -F '\#F' | grep -q Z && tmux resize-pane -Z + endif + colorscheme gruvbox-material + set showcmd + set nowrap + set number + set relativenumber + set eventignore= + set cursorline + Limelight! + :call ToggleNumberToggle(1) +endfunction + +autocmd! User GoyoEnter nested call <SID>goyo_enter() +autocmd! User GoyoLeave nested call <SID>goyo_leave() + +" change cursor in different mode + let &t_SI .= "\e[5 q" + let &t_SR .= "\e[4 q" + let &t_EI .= "\e[1 q" + +" |vim-fugitive| +set diffopt+=vertical + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" COLOR RELATED +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +" TODO highlight +" FIXME highlight +" XXX highlight + +" Change comment color +" hi Comment guifg=LightBlue +hi Comment gui=bold cterm=bold +hi htmlStrike gui=strikethrough cterm=strikethrough guibg=Black ctermbg=Black +hi Todo guibg=White ctermbg=White guifg=Black ctermfg=Black gui=bold,italic cterm=bold,italic +hi NonText guifg=#4a4a59 ctermfg=Gray +hi SpecialKey guifg=#4a4a59 ctermfg=Gray diff --git a/.zshrc b/.zshrc @@ -0,0 +1,284 @@ +######################################################################## +# EXPORTS +######################################################################## + +export EDITOR='nvim' +export SHELL='zsh' +export LANG=en_US.UTF-8 +export TERM=xterm-256color + +export PATH=$HOME/bin:/usr/local/bin:$PATH +export PATH="/usr/local/sbin:$PATH" + +export PATH=$PATH:$HOME/go/bin +export PATH=$PATH:$HOME/.cargo/bin +# export PATH=$PATH:/usr/local/bin +# export PATH=/usr/local/opt/node@8/bin:$PATH +export PATH=/.config/yarn/global/node_modules/.bin:$PATH./node_modules/.bin:$HOME/.yarn/bin:$HOME +export PATH=/usr/local/opt/openssl/bin:$PATH +export PATH=$HOME/Library/Frameworks/Python.framework/Versions/3.6/bin:$PATH +export PATH=$PATH:$KUMPATH/yowez-cli/bin +export GOPATH=$HOME/go +export PATH=$GOPATH/bin:$PATH +export PATH=/Users/yohanesbandung/.nimble/bin:$PATH +# export INITVIM=$HOME/.config/nvim/init.vim +# export PATH=$HOME/bin:$PATH + +export JAVA_HOME="/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home" +export ANDROID_HOME=${HOME}/Library/Android/sdk +export PATH=${PATH}:${ANDROID_HOME}/emulator +export PATH=${PATH}:${ANDROID_HOME}/tool +export PATH="${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools" + +######################################################################## +# FUNCTIONS +######################################################################## + +# retry command after n times +function gagal { + echo $1 >&2 + exit 1 +} +function kantal { + local n=1 + local max="$1"; shift + local delay=3 + while true; do + "$@" && break || { + if [[ $n -lt $max ]]; then + ((n++)) + echo "Gagal nih. OTW percobaan ke $n/$max:" + sleep $delay; + else + gagal "Gagal muluk abis $n kali coba." + fi + } + done +} + +# test +function test_kantal { + echo "your first argument $1" + echo "your @ argument $@" + echo "your 0 argument $0" + local first="$1"; shift + echo "now your first argument $1" + echo "now your @ argument $@" +} + +function commit { + git add . && git commit -m "$1" +} + +n () +{ + # Block nesting of nnn in subshells + if [ -n $NNNLVL ] && [ "${NNNLVL:-0}" -ge 1 ]; then + echo "nnn is already running" + return + fi + + # The default behaviour is to cd on quit (nnn checks if NNN_TMPFILE is set) + # To cd on quit only on ^G, remove the "export" as in: + # NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd" + # NOTE: NNN_TMPFILE is fixed, should not be modified + NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd" + + # Unmask ^Q (, ^V etc.) (if required, see `stty -a`) to Quit nnn + # stty start undef + # stty stop undef + # stty lwrap undef + # stty lnext undef + + nnn -e "$@" + + if [ -f "$NNN_TMPFILE" ]; then + . "$NNN_TMPFILE" + rm -f "$NNN_TMPFILE" > /dev/null + fi +} + +export NNN_USE_EDITOR=1 +export NNN_TRASH=1 +[ -n "$NNNLVL" ] && PS1="N$NNNLVL $PS1" + + +######################################################################## +# ALIASES +######################################################################## + +eval "$(hub alias -s)" + +# projects +alias kapp="cd ${KUMPATH}/app" +alias kweb="cd ${KUMPATH}/web" +alias kmag="cd ${KUMPATH}/dashboard" +alias kwid="cd ${KUMPATH}/widget" +alias uikit="cd ${KUMPATH}/js/packages/kumparan-uikit" +alias slatep="cd ${KUMPATH}/js/packages/slate-plugins" +alias ktrack="cd ${KUMPATH}/js/packages/kumparan-tracker" +alias ybbond="cd ${YBPATH}/ybbond" +alias ybreason="cd ${YBPATH}/reason-ybbond" +alias ybgo="cd ${YBPATH}/ybbond-hugo" +alias ftex="cd ${YBPATH}/latex" +alias todo="nvim ~/todo.md" +alias mine="nvim ~/Library/Mobile\ Documents/27N4MQEA55~pro~writer/Documents" + +# settings +alias zshrc="nvim ~/.zshrc" +alias vimrc="vim ~/.vimrc" +alias bashpro="nvim ~/.bash_profile" +alias bashrc="nvim ~/.bashrc" +alias neorc="nvim ~/.config/nvim/init.vim" + +# git +alias wip="git add . && git commit -m 'wip'" +alias rehead="git reset HEAD~" +alias lg="lazygit" + +# misc +alias ld="lazydocker" +alias r="ranger" +alias nexus5x="~/Library/Android/sdk/emulator/emulator -avd Nexus_5X_API_28 -netdelay none -netspeed full" + +alias cdb="cd .." +alias konak="kantal 10 yarn add" + +# better cli +alias ls='exa' +alias top='htop' +alias cat='bat' +alias find='fd' +alias du='ncdu --color dark -rr' + +alias tarex='tar -xzf' + +source ~/Library/Preferences/org.dystroy.broot/launcher/bash/br + + +######################################################################## +# SPACESHIP +######################################################################## + +SPACESHIP_PROMPT_ORDER=( + battery + time + user + dir + host + git + exec_time + jobs + exit_code + vi_mode + char + ) +SPACESHIP_PROMPT_FIRST_PREFIX_SHOW=true +SPACESHIP_PROMPT_SEPARATE_LINE=false +SPACESHIP_BATTERY_SHOW=always +SPACESHIP_BATTERY_PREFIX='[' +SPACESHIP_BATTERY_SUFFIX=']' +SPACESHIP_BATTERY_THRESHOLD=100 +SPACESHIP_GIT_PREFIX='[' +SPACESHIP_GIT_SUFFIX=']' +SPACESHIP_GIT_BRANCH_PREFIX='•' +SPACESHIP_GIT_BRANCH_SUFFIX='•' +SPACESHIP_GIT_STATUS_PREFIX='<' +SPACESHIP_GIT_STATUS_SUFFIX='>' +SPACESHIP_DIR_PREFIX='[' +SPACESHIP_DIR_SUFFIX=']' +SPACESHIP_CHAR_SYMBOL='λ' +SPACESHIP_CHAR_PREFIX=' ' +SPACESHIP_CHAR_SUFFIX=' ' +SPACESHIP_TIME_SHOW=true +SPACESHIP_TIME_PREFIX='[' +SPACESHIP_TIME_SUFFIX=']' +SPACESHIP_VI_MODE_PREFIX='' + +######################################################################## +# ZINIT +######################################################################## + +### Added by Zinit's installer +if [[ ! -f $HOME/.zinit/bin/zinit.zsh ]]; then + print -P "%F{33}▓▒░ %F{220}Installing DHARMA Initiative Plugin Manager (zdharma/zinit)…%f" + command mkdir -p "$HOME/.zinit" && command chmod g-rwX "$HOME/.zinit" + command git clone https://github.com/zdharma/zinit "$HOME/.zinit/bin" && \ + print -P "%F{33}▓▒░ %F{34}Installation successful.%f%b" || \ + print -P "%F{160}▓▒░ The clone has failed.%f%b" +fi + +source "$HOME/.zinit/bin/zinit.zsh" +autoload -Uz _zinit +(( ${+_comps} )) && _comps[zinit]=_zinit + +# Load a few important annexes, without Turbo +# (this is currently required for annexes) +zinit light-mode for \ + zinit-zsh/z-a-patch-dl \ + zinit-zsh/z-a-as-monitor \ + zinit-zsh/z-a-bin-gem-node + +### End of Zinit's installer chunk + +# Plugins + +zplugin light zsh-users/zsh-autosuggestions + bindkey -M viins '^F' autosuggest-accept + +zplugin light zsh-users/zsh-history-substring-search + bindkey -M viins '^P' history-substring-search-up + bindkey -M viins '^N' history-substring-search-down + +zplugin light zdharma/fast-syntax-highlighting + +zplugin light denysdovhan/spaceship-prompt + +export NVM_LAZY_LOAD=true +zplugin light lukechilds/zsh-nvm + +zplugin load zdharma/history-search-multi-word + +zplugin load zsh-users/zsh-completions + autoload -Uz compinit + if [ $(date +'%j') != $(/usr/bin/stat -f '%Sm' -t '%j' ${ZDOTDIR:-$HOME}/.zcompdump) ]; then + compinit + else + compinit -C + fi + + { + # Compile zcompdump, if modified, to increase startup speed. + zcompdump="${ZDOTDIR:-$HOME}/.zcompdump" + if [[ -s "$zcompdump" && (! -s "${zcompdump}.zwc" || "$zcompdump" -nt "${zcompdump}.zwc") ]]; then + zcompile "$zcompdump" + fi + } &! + +zplugin load softmoth/zsh-vim-mode + bindkey -M viins "jk" vi-cmd-mode + export KEYTIMEOUT=10 + +precmd () { + echo -n -e "\a" +} + +# Change cursor shape for different vi modes. +function zle-keymap-select { + if [[ ${KEYMAP} == vicmd ]] || + [[ $1 = 'block' ]]; then + echo -ne '\e[1 q' + + elif [[ ${KEYMAP} == main ]] || + [[ ${KEYMAP} == viins ]] || + [[ ${KEYMAP} = '' ]] || + [[ $1 = 'beam' ]]; then + echo -ne '\e[5 q' + fi +} +zle -N zle-keymap-select +_fix_cursor() { + echo -ne '\e[5 q' +} +precmd_functions+=(_fix_cursor) +alias config=$CONFTREE