diff --git a/.gitignore b/.gitignore index bf4241e..8e9a3f5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ config/fish/conf.d config/fish/functions config/fish/fish_variables +config/vim/autoload/ +config/vim/pack/ +config/vim/.netrwhist config/nvim/nvim-pack-lock.json config/awesome/bling scripts/bin/Obsidian diff --git a/config/bash/bashrc b/config/bash/bashrc index 17173c1..209398a 100644 --- a/config/bash/bashrc +++ b/config/bash/bashrc @@ -11,9 +11,9 @@ export GOOGLE_DEFAULT_CLIENT_ID="no" export GOOGLE_DEFAULT_CLIENT_SECRET="no" # Core settings -export EDITOR="evi" -export VISUAL="evi" -export MANPAGER="evi +Man!" +export EDITOR="vim" +export VISUAL="vim" +export MANPAGER="vim +Man!" export BROWSER="firefox" export COLORTERM="truecolor" @@ -122,10 +122,10 @@ alias files='thunar .' alias fetch='pfetch' # Custom shortcuts -alias v='evi' -alias vi='evi' +alias v='vim' +alias vi='vim' alias reload='source ~/.bashrc' -alias dots='cd ~/.dotfiles && evi' +alias dots='cd ~/.dotfiles && vim' alias doti='bash ~/.dotfiles/install.sh -i' alias dotl='bash ~/.dotfiles/install.sh -l' alias myip='curl ipinfo.io/ip; echo ""' diff --git a/config/vim/vimrc b/config/vim/vimrc new file mode 100644 index 0000000..481bf26 --- /dev/null +++ b/config/vim/vimrc @@ -0,0 +1,202 @@ +" ============================================================================ +" Vi Configuration +" ============================================================================ +" General +" ---------------------------------------------------------------------------- +set nocompatible +set encoding=utf-8 +set hidden +set history=1000 +set clipboard=unnamedplus +set splitright +set splitbelow + +" ---------------------------------------------------------------------------- +" UI +" ---------------------------------------------------------------------------- +set number +set relativenumber +set wildmenu +set showcmd +colorscheme jellybeans + +" ---------------------------------------------------------------------------- +" Transparent UI +" ---------------------------------------------------------------------------- +augroup VimTransparent + autocmd! + autocmd ColorScheme * highlight Normal ctermbg=NONE guibg=NONE + \ | highlight NonText ctermbg=NONE guibg=NONE + \ | highlight LineNr ctermbg=NONE guibg=NONE + \ | highlight SignColumn ctermbg=NONE guibg=NONE + \ | highlight EndOfBuffer ctermbg=NONE guibg=NONE +augroup END + +" ---------------------------------------------------------------------------- +" Status Line +" ---------------------------------------------------------------------------- +set laststatus=2 +highlight EviStatus cterm=NONE ctermfg=White ctermbg=236 +set statusline=%#EviStatus#%f\ %m%r\ %=%{&filetype}\ \ %l:%c\ %p%% + +" ---------------------------------------------------------------------------- +" Editing +" ---------------------------------------------------------------------------- +set tabstop=4 +set shiftwidth=4 +set expandtab +set smartindent +set nowrap +set incsearch +set hlsearch +set ignorecase +set smartcase +set completeopt=menu,menuone,noselect + +" ---------------------------------------------------------------------------- +" File Types +" ---------------------------------------------------------------------------- +syntax on +filetype plugin indent on + +" ---------------------------------------------------------------------------- +" fzf +" ---------------------------------------------------------------------------- +if executable('rg') + let $FZF_DEFAULT_COMMAND = + \ 'rg --files --hidden --follow --glob "!.git/*"' +endif + +nnoremap :Files +nnoremap :Buffers +nnoremap :Rg +nnoremap :Build + +" ---------------------------------------------------------------------------- +" Search +" ---------------------------------------------------------------------------- +nnoremap :nohlsearch +nnoremap n nzzzv +nnoremap N Nzzzv + +" ---------------------------------------------------------------------------- +" Window Navigation +" ---------------------------------------------------------------------------- +nnoremap h +nnoremap j +nnoremap k +nnoremap l +nnoremap q + +" ---------------------------------------------------------------------------- +" LSP - OLS +" ---------------------------------------------------------------------------- +packadd lsp +call LspOptionsSet(#{ + \ autoComplete: v:false, + \ autoHighlight: v:false, + \ autoHighlightDiags: v:true, + \ autoPopulateDiags: v:true, + \ semanticHighlight: v:false, + \ showSignature: v:false, + \ completionInPreview: v:false, + \ condensedCompletionMenu: v:true, + \ }) + +if executable('ols') + call LspAddServer([#{ + \ name: 'ols', + \ filetype: ['odin'], + \ path: 'ols', + \ args: ['--stdio'], + \ features: #{ + \ diagnostic: v:false, + \ completion: v:true, + \ hover: v:true, + \ signatureHelp: v:false, + \ documentHighlight: v:true, + \ semanticHighlight: v:true, + \ }, + \ }]) +endif + +command! Action LspCodeAction +command! Rename LspRename + +autocmd FileType odin setlocal omnifunc=LspOmniFunc +inoremap +nnoremap K :LspHover + +" ---------------------------------------------------------------------------- +" Go to Definition +" ---------------------------------------------------------------------------- +function! GotoDefinitionSplit() abort + vsplit + LspGotoDefinition +endfunction + +nnoremap gd :call GotoDefinitionSplit() + +" ---------------------------------------------------------------------------- +" Diagnostics +" ---------------------------------------------------------------------------- +function! ToggleDiagnostics() abort + for l:win in getwininfo() + if get(l:win, 'quickfix', 0) + execute l:win.winnr .. 'close' + return + endif + endfor + + LspDiag show +endfunction + +command! Diagnostics call ToggleDiagnostics() +nnoremap :Diagnostics + +" ---------------------------------------------------------------------------- +" Netrw / File Tree +" ---------------------------------------------------------------------------- +let g:netrw_banner = 0 +let g:netrw_liststyle = 3 +let g:netrw_browse_split = 0 +let g:netrw_altv = 1 +let g:netrw_winsize = 33 +let g:netrw_keepdir = 0 +nnoremap :Lexplore + +" ---------------------------------------------------------------------------- +" Build System +" ---------------------------------------------------------------------------- +function! Build(...) abort + " Already in the build terminal → close it. + if get(b:, 'build_terminal', 0) && &buftype ==# 'terminal' + close + echo '' + return + endif + + if !filereadable('build.sh') + echohl WarningMsg + echo 'No build.sh found in current directory.' + echohl None + return + endif + + wall + + let l:command = './build.sh' + + if a:0 > 0 + let l:command .= ' ' .. join(a:000, ' ') + endif + + botright vsplit + execute 'vertical resize ' .. float2nr(&columns * 0.37) + execute 'terminal ++curwin ' .. l:command + + let b:build_terminal = 1 + tnoremap +endfunction + +command! -nargs=* Build call Build()