Major configuration rewrite, so... 2.0.0
This commit is contained in:
parent
53639d6c34
commit
1c9aff3028
3
PKGBUILD
3
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)
|
||||
|
461
neostrophic.vim
461
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', "<args>") | let g:Guifont="<args>"
|
||||
" 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 <SID>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 <SID>on_goyo_enter()
|
||||
autocmd! User GoyoLeave nested call <SID>on_goyo_leave()
|
||||
|
||||
|
||||
" Keybinds
|
||||
|
||||
" Tab controls
|
||||
nnoremap <silent> <C-Left> :tabprevious<CR>
|
||||
nnoremap <silent> <C-Right> :tabnext<CR>
|
||||
nnoremap <silent> <C-Up> :tabnew<CR>
|
||||
nnoremap <silent> <C-Down> :tabclose<CR>
|
||||
" ----------------
|
||||
nnoremap <silent> <F2> :tabnew<CR>
|
||||
nnoremap <silent> <A-F2> :tabclose<CR>
|
||||
nnoremap <silent> <F3> :tabprevious<CR>
|
||||
nnoremap <silent> <F4> :tabnext<CR>
|
||||
" Markdown
|
||||
let g:markdown_include_jekyll_support = 0
|
||||
|
||||
|
||||
" Commonly used commands
|
||||
|
||||
" Undo
|
||||
" --- Keymaps
|
||||
" Commonly used commands
|
||||
nnoremap <silent> <C-z> :u<CR>
|
||||
" Quit
|
||||
nnoremap <silent> <C-x> :q<CR>
|
||||
" Just write
|
||||
nnoremap <silent> <C-o> :w<CR>
|
||||
" Quit without writing
|
||||
nnoremap <silent> <C-x> :q<CR>
|
||||
nnoremap <silent> <C-A-x> :q!<CR>
|
||||
" Remove search highlighting
|
||||
nnoremap <silent> <C-A-a> :noh<CR>
|
||||
" Preview toggle
|
||||
nnoremap <silent> <Leader>p :call <SID>preview_toggle()<CR>
|
||||
|
||||
" F-line
|
||||
nnoremap <F5> :so %<CR>
|
||||
nnoremap <F6> :GundoToggle<CR>
|
||||
nnoremap <F7> :term<CR>
|
||||
nnoremap <F8> :Goyo<CR>
|
||||
|
||||
" Git
|
||||
nmap <Leader>hr <Plug>GitGutterUndoHunk
|
||||
nmap <Leader>hp <Plug>GitGutterPreviewHunk
|
||||
|
||||
" Shut up annoying stuff
|
||||
nnoremap <silent> <C-A-f> :SyntasticToggleMode<CR>
|
||||
nnoremap <silent> <Leader>p :call <SID>preview_toggle()<CR>
|
||||
|
||||
" Increase/decrease numbers with Alt key and A/X
|
||||
nnoremap <A-a> <C-a>
|
||||
nnoremap <A-x> <C-x>
|
||||
|
||||
" Commands from plugins
|
||||
|
||||
" File listing
|
||||
nnoremap <silent> <C-n> :NERDTreeToggle<CR>
|
||||
" Gist
|
||||
nnoremap <silent> <C-A-g> :Gist -p<CR>
|
||||
" Toggle Syntastic
|
||||
nnoremap <silent> <C-A-f> :SyntasticToggleMode<CR>
|
||||
" Goyo mode
|
||||
nnoremap <silent> <F5> :Goyo<CR>
|
||||
" neovim term
|
||||
nnoremap <silent> <F6> :term<CR>
|
||||
" neovim terminal mode -> normal mode with Alt-q
|
||||
" Terminal
|
||||
tnoremap <A-q> <C-\><C-n>
|
||||
" Unite
|
||||
nnoremap <silent> <F7> :Unite<CR>
|
||||
" Show/hide tags
|
||||
nnoremap <silent> <F8> :TagbarToggle<CR>
|
||||
" vim-easy-align
|
||||
" xnoremap / nnoremap won't work here somehow
|
||||
xmap <leader>ga :EasyAlign<CR>
|
||||
nmap <leader>ga :EasyAlign<CR>
|
||||
" GitGutter
|
||||
nmap <Leader>hr <Plug>GitGutterUndoHunk
|
||||
nmap <Leader>hp <Plug>GitGutterPrevHunk
|
||||
|
||||
" Re-apply fake $MYVIMRC
|
||||
silent! call s:fake_vimrc()
|
||||
|
||||
" Load color scheme (reuse function)
|
||||
call Load_color_scheme({'status': 'installed', 'name': 'molokai'})
|
||||
|
Reference in New Issue
Block a user