dotfiles

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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