diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index 9732076..fa5d44e 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -1,105 +1,15 @@ - - " setup plugins - call plug#begin() -" theme -Plug 'altercation/vim-colors-solarized' +" TODO: switch to language server -" razer -Plug 'https://github.com/DanManN/vim-razer' - -" completion -" TODO: REMOVE ALL OUR CUSTOM COMPLETIONS AND USE LANGUAGE SERVER -" TODO: CHOOSE LINTING AND FORMATTING TOOLS -function! DoNvimPluginUpdate(arg) - UpdateRemotePlugins -endfunction -"Plug 'Shougo/deoplete.nvim', { 'do': function('DoNvimPluginUpdate') } -let g:deoplete#enable_at_startup = 1 " enable at startup -"let g:deoplete#max_abbr_width = 0 " no width limit -"let g:deoplete#max_menu_width = 0 " no width limit -let g:deoplete#enable_smart_case = 1 " enable smart case -"let g:deoplete#file#enable_buffer_path = 1 -set completeopt=menuone,noinsert,longest -"inoremap pumvisible() ? "\" : "\" - -" git -Plug 'tpope/vim-fugitive' -" [c] Git commit -nnoremap c :Gcommit -" [p] Git pull -nnoremap p :Gpull -" [u] Git push -nnoremap u :Gpush -" [w] Git write and add -nnoremap w :Gwrite -" [l] Git blame -nnoremap l :Gblame -" [s] Git status -nnoremap s :Gstatus - -" c, c++ -Plug 'zchee/deoplete-clang', { 'for': [ 'c', 'cpp', 'h' ] } - -" html, css -Plug 'mattn/emmet-vim', { 'for': [ 'html', 'css', 'scss', 'vue', 'javascript' ] } -let g:user_emmet_leader_key = '' -function! s:setup_emmet_shortcut() - imap emmet#expandAbbrIntelligent("\") -endfunction -autocmd FileType html,css,scss,vue,javascript call s:setup_emmet_shortcut() - -" markdown (better) -Plug 'plasticboy/vim-markdown', { 'for': [ 'markdown' ] } -let g:vim_markdown_folding_style_pythonic = 1 - -" javascript -Plug 'wokalski/autocomplete-flow', { 'for': [ 'javascript' ] } -Plug 'Quramy/vim-js-pretty-template', { 'for': [ 'javascript' ] } -function! s:setup_prettytemplate() - JsPreTmpl -endfunction -"autocmd FileType javascript call s:setup_prettytemplate() -" Moved to plugin init -Plug 'posva/vim-vue', { 'for': [ 'vue' ] } +" rust +Plug 'rust-lang/rust.vim' +let g:rustfmt_autosave = 1 " go -function! BuildDeopleteGo(arg) - :echom "install/update github.com/nsf/gocode" - :silent !go get -u github.com/nsf/gocode - :silent !make -endfunction -Plug 'zchee/deoplete-go', { 'for': [ 'go' ], 'do': function('BuildDeopleteGo') } -function! BuildVimGo(arg) - :echom "install/update github.com/nsf/gocode" - :silent !go get -u github.com/nsf/gocode - :echom "install/update github.com/alecthomas/gometalinter" - :silent !go get -u github.com/alecthomas/gometalinter - :echom "install/update golang.org/x/tools/cmd/goimports" - :silent !go get -u golang.org/x/tools/cmd/goimports - :echom "install/update golang.org/x/tools/cmd/guru" - :silent !go get -u golang.org/x/tools/cmd/guru - :echom "install/update golang.org/x/tools/cmd/gorename" - :silent !go get -u golang.org/x/tools/cmd/gorename - :echom "install/update github.com/golang/lint/golint" - :silent !go get -u github.com/golang/lint/golint - :echom "install/update github.com/kisielk/errcheck" - :silent !go get -u github.com/kisielk/errcheck - :echom "install/update github.com/jstemmer/gotags" - :silent !go get -u github.com/jstemmer/gotags - :echom "install/update github.com/klauspost/asmfmt/cmd/asmfmt" - :silent !go get -u github.com/klauspost/asmfmt/cmd/asmfmt - :echom "install/update github.com/fatih/motion" - :silent !go get -u github.com/fatih/motion - :echom "install/update github.com/zmb3/gogetdoc" - :silent !go get -u github.com/zmb3/gogetdoc - :echom "install/update github.com/josharian/impl" - :silent !go get -u github.com/josharian/impl -endfunction -Plug 'fatih/vim-go', { 'for': [ 'go' ], 'do': function('BuildVimGo') } +Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' } let g:go_term_enabled = 1 let g:go_highlight_array_whitespace_error = 1 let g:go_highlight_chan_whitespace_error = 1 @@ -135,51 +45,8 @@ let g:pymode_rope = 1 "let g:pymode_rope_completion = 1 "let g:pymode_rope_completion_bind = '' -" plantuml -Plug 'aklt/plantuml-syntax', { 'for': [ 'plantuml' ] } - -" ansible -Plug 'pearofducks/ansible-vim', { 'do': './UltiSnips/generate.sh' } - call plug#end() - -" main configuration - - -" plugin init - -" javascript -autocmd FileType javascript JsPreTmpl - -" mapping init - -" disable arrow keys in normal mode -map -map -map -map -map -map - -" disable arrow keys in insert mode -imap -imap -imap -imap -imap -imap - -" other init - -" theme -set background=dark -if $LIGHT == 'true' - set background=light -endif -let g:solarized_termtrans=1 -silent! colorscheme solarized - " statusline function! GitBranch() return system("git rev-parse --abbrev-ref HEAD 2>/dev/null | tr -d '\n'") @@ -214,7 +81,7 @@ highlight StatuslineGit ctermfg=14 ctermbg=8 cterm=none highlight StatuslineGitDirty ctermfg=14 ctermbg=8 cterm=bold highlight StatuslineFileInfo ctermfg=11 ctermbg=0 cterm=italic highlight StatuslineFileStats ctermfg=14 ctermbg=8 cterm=none -highlight StatuslineCursor ctermfg=15 ctermbg=9 cterm=none +highlight StatuslineCursor ctermfg=15 ctermbg=6 cterm=none " assembly set statusline= set statusline+=%#StatuslineModeNormal#%{(mode()=='n')?'\ \ NORMAL\ \ ':''} @@ -259,7 +126,10 @@ highlight TabLineSel ctermfg=15 ctermbg=9 cterm=italic highlight VertSplit ctermfg=0 ctermbg=0 cterm=none " highlighting -highlight SpellBad cterm=undercurl +highlight SpellBad cterm=undercurl ctermbg=0 +highlight SpellCap cterm=undercurl ctermbg=0 +highlight SpellLocal cterm=undercurl ctermbg=0 +highlight SpellRare cterm=undercurl ctermbg=0 " folding highlight Folded ctermfg=10 ctermbg=none cterm=bold @@ -278,6 +148,9 @@ set cursorline highlight CursorLine ctermfg=none ctermbg=none cterm=none highlight CursorLineNR ctermfg=12 ctermbg=none cterm=bold +" selection +highlight Visual ctermfg=none ctermbg=0 cterm=none + " indentation set tabstop=4 set softtabstop=4 @@ -287,8 +160,9 @@ set shiftwidth=4 " TODO: figure out how to properly use the runtime overrides " width +highlight ColorColumn ctermfg=none ctermbg=0 cterm=none "set textwidth=80 -set colorcolumn=+1 +set colorcolumn=80 " skel augroup Skel @@ -333,4 +207,7 @@ let g:netrw_winsize=25 " spellcheck set spell spelllang=en_gb +" modeline +set modeline + " vim: set expandtab ts=2 sw=2: diff --git a/.zshrc b/.zshrc index 755be04..63d46c9 100644 --- a/.zshrc +++ b/.zshrc @@ -1,7 +1,5 @@ -# zsh settings export HISTSIZE=10000 export SAVEHIST=100000 -export HISTFILE=$HOME/.zsh_history setopt append_history setopt extended_history setopt share_history @@ -9,110 +7,97 @@ setopt histignorespace setopt longlistjobs setopt notify setopt completeinword -setopt noshwordsplit -setopt auto_cd setopt interactivecomments setopt extended_glob -autoload -U compinit; compinit -# basic keybindings bindkey -v bindkey "^R" history-incremental-pattern-search-backward -# zsh imports -fpath=( $HOME/.config/zsh/functions $fpath ) - -# ls colors -if [[ "$(uname -s)" == "Darwin" ]]; then - #eval $(gdircolors -b $HOME/.dircolors) - export CLICOLOR=1 -else - eval $(dircolors -b $HOME/.dircolors) - if [[ -L ~/.config/sway/enabled/home ]]; then - alias ls='ls --color=auto -l -h --time-style=iso -N' - else - alias ls='ls --color=auto' - fi -fi -zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} -alias list='exa --git --long --header --tree --level 2' - -# completion menu -zstyle ':completion:*' menu select - -# documents -if [[ "$(uname -s)" == "Darwin" ]]; then - export DOC="$HOME/Documents" -else - export DOC="$HOME" -fi - -# editor +alias vim=nvim export EDITOR=nvim -# pure -export PURE_PROMPT_SYMBOL="%1{❯%}" -export PURE_PROMPT_VICMD_SYMBOL="%1{❮%}" -zstyle :prompt:pure:git:dirty color 242 -# Fixes it's treatment as a double width character, see https://github.com/geometry-zsh/geometry/commit/dbd28b23293b0862055deda8e59db57ebd6d6606#diff-37d2e8a43274d6fbaf5b762a55f5138cR211 -autoload -U promptinit; promptinit -prompt pure +export LS_COLORS='no=00:fi=00:di=36:ow=34;40:ln=35:pi=30;44:so=35;44:do=35;44:bd=33;44:cd=37;44:or=05;37;41:mi=05;37;41:ex=01;31:*.cmd=01;31:*.exe=01;31:*.com=01;31:*.bat=01;31:*.reg=01;31:*.app=01;31:*.txt=32:*.org=32:*.md=32:*.mkd=32:*.h=32:*.hpp=32:*.c=32:*.C=32:*.cc=32:*.cpp=32:*.cxx=32:*.objc=32:*.cl=32:*.sh=32:*.bash=32:*.csh=32:*.zsh=32:*.el=32:*.vim=32:*.java=32:*.pl=32:*.pm=32:*.py=32:*.rb=32:*.hs=32:*.php=32:*.htm=32:*.html=32:*.shtml=32:*.erb=32:*.haml=32:*.xml=32:*.rdf=32:*.css=32:*.sass=32:*.scss=32:*.less=32:*.js=32:*.coffee=32:*.man=32:*.0=32:*.1=32:*.2=32:*.3=32:*.4=32:*.5=32:*.6=32:*.7=32:*.8=32:*.9=32:*.l=32:*.n=32:*.p=32:*.pod=32:*.tex=32:*.go=32:*.sql=32:*.csv=32:*.sv=32:*.svh=32:*.v=32:*.vh=32:*.vhd=32:*.bmp=33:*.cgm=33:*.dl=33:*.dvi=33:*.emf=33:*.eps=33:*.gif=33:*.jpeg=33:*.jpg=33:*.JPG=33:*.mng=33:*.pbm=33:*.pcx=33:*.pdf=33:*.pgm=33:*.png=33:*.PNG=33:*.ppm=33:*.pps=33:*.ppsx=33:*.ps=33:*.svg=33:*.svgz=33:*.tga=33:*.tif=33:*.tiff=33:*.xbm=33:*.xcf=33:*.xpm=33:*.xwd=33:*.xwd=33:*.yuv=33:*.nef=33:*.NEF=33:*.aac=33:*.au=33:*.flac=33:*.m4a=33:*.mid=33:*.midi=33:*.mka=33:*.mp3=33:*.mpa=33:*.mpeg=33:*.mpg=33:*.ogg=33:*.opus=33:*.ra=33:*.wav=33:*.anx=33:*.asf=33:*.avi=33:*.axv=33:*.flc=33:*.fli=33:*.flv=33:*.gl=33:*.m2v=33:*.m4v=33:*.mkv=33:*.mov=33:*.MOV=33:*.mp4=33:*.mp4v=33:*.mpeg=33:*.mpg=33:*.nuv=33:*.ogm=33:*.ogv=33:*.ogx=33:*.qt=33:*.rm=33:*.rmvb=33:*.swf=33:*.vob=33:*.webm=33:*.wmv=33:*.doc=31:*.docx=31:*.rtf=31:*.odt=31:*.dot=31:*.dotx=31:*.ott=31:*.xls=31:*.xlsx=31:*.ods=31:*.ots=31:*.ppt=31:*.pptx=31:*.odp=31:*.otp=31:*.fla=31:*.psd=31:*.7z=1;35:*.apk=1;35:*.arj=1;35:*.bin=1;35:*.bz=1;35:*.bz2=1;35:*.cab=1;35:*.deb=1;35:*.dmg=1;35:*.gem=1;35:*.gz=1;35:*.iso=1;35:*.jar=1;35:*.msi=1;35:*.rar=1;35:*.rpm=1;35:*.tar=1;35:*.tbz=1;35:*.tbz2=1;35:*.tgz=1;35:*.tx=1;35:*.war=1;35:*.xpi=1;35:*.xz=1;35:*.z=1;35:*.Z=1;35:*.zip=1;35:*.zst=1;35:*.ANSI-30-black=30:*.ANSI-01;30-brblack=01;30:*.ANSI-31-red=31:*.ANSI-01;31-brred=01;31:*.ANSI-32-green=32:*.ANSI-01;32-brgreen=01;32:*.ANSI-33-yellow=33:*.ANSI-01;33-bryellow=01;33:*.ANSI-34-blue=34:*.ANSI-01;34-brblue=01;34:*.ANSI-35-magenta=35:*.ANSI-01;35-brmagenta=01;35:*.ANSI-36-cyan=36:*.ANSI-01;36-brcyan=01;36:*.ANSI-37-white=37:*.ANSI-01;37-brwhite=01;37:*.log=01;32:*~=01;32:*#=01;32:*.bak=01;33:*.BAK=01;33:*.old=01;33:*.OLD=01;33:*.org_archive=01;33:*.off=01;33:*.OFF=01;33:*.dist=01;33:*.DIST=01;33:*.orig=01;33:*.ORIG=01;33:*.swp=01;33:*.swo=01;33:*.v=01;33:*.gpg=34:*.gpg=34:*.pgp=34:*.asc=34:*.3des=34:*.aes=34:*.enc=34:*.sqlite=34:' +export CLICOLOR=1 +export TIME_STYLE=iso +if [[ -f "$(which exa)" ]]; then + alias ls=exa +fi -# autosuggestions -source $HOME/.config/zsh/zsh-autosuggestions/zsh-autosuggestions.zsh -export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=10' -export ZSH_AUTOSUGGEST_USE_ASYNC=true -bindkey '^e' autosuggest-execute +autoload -U compinit; compinit +autoload -U +X bashcompinit && bashcompinit +zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} -# syntax highlighting -source $HOME/.config/zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +autoload -Uz vcs_info +precmd_vcs_info() { vcs_info } +precmd_functions+=( precmd_vcs_info ) +setopt prompt_subst +zstyle ':vcs_info:git:*' formats ' %b ' +zstyle ':vcs_info:*' enable git +PROMPT_HISTORY=$'%F{10}%{\e[3m%} %h %{\e[0m%}%f' +PROMPT_USER_MACHINE=$'' +if [[ ! -z "$SSH_CLIENT" ]]; then + PROMPT_USER_MACHINE=$'@%m' +fi +PROMPT_USER=$'%F{white}%{\e[3m%}%(!.%K{9}.%K{4}) %n'"$PROMPT_USER_MACHINE"$' %k%{\e[0m%}%f' +RPROMPT="$PROMPT_HISTORY$PROMPT_USER" +PROMPT_ERROR=$'%F{white}%{\e[3m%}%(?.%K{2} .%K{9} %? )%k%{\e[0m%}%f' +PROMPT_VCS=$'%B%K{8}$vcs_info_msg_0_%k%b' +PROMPT_DIRECTORY=$'%K{black} %2~ %k' +PROMPT="$PROMPT_ERROR$PROMPT_VCS$PROMPT_DIRECTORY " + +AUTOSUGGESTIONS="/usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh" +if [[ -f "$AUTOSUGGESTIONS" ]]; then + export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=10' + export ZSH_AUTOSUGGEST_USE_ASYNC=true + bindkey '^e' autosuggest-execute + source "$AUTOSUGGESTIONS" +fi +SYNTAX_HIGHLIGHTING="/usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" +if [[ -f "$SYNTAX_HIGHLIGHTING" ]]; then + source "$SYNTAX_HIGHLIGHTING" +fi +if [[ -f "$(which thefuck)" ]]; then + eval $(thefuck --alias nope) +fi -# thefuck export PATH="$HOME/.local/bin:$PATH" -eval $(thefuck --alias nope) -# golang +if [[ -f "$HOME/.deno" ]]; then + export DENO_INSTALL="$HOME/.deno" + export PATH="$DENO_INSTALL/bin:$PATH" +fi +if [[ -f "$HOME/.gem/ruby/2.6.0/bin" ]]; then + export PATH="$HOME/.gem/ruby/2.6.0/bin:$PATH" +fi if [[ -f "$(which go 2>/dev/null)" ]]; then export PATH="$(go env GOPATH)/bin:$PATH" fi - -# rust -if [[ -f "$HOME/.cargo/env" ]]; then - source "$HOME/.cargo/env" +if [[ -f "$(which cargo 2>/dev/null)" ]]; then + export PATH="$HOME/.cargo/bin:$PATH" fi -# deno -export DENO_INSTALL="$HOME/.deno" -export PATH="$DENO_INSTALL/bin:$PATH" - -# yarn bin -export PATH="$HOME/.yarn/bin:$PATH" - -# minio client -autoload -U +X bashcompinit && bashcompinit -complete -o nospace -C /usr/local/bin/mc mc - -# kubectl +if [[ -f "$(which mc 2>/dev/null)" ]]; then + complete -o nospace -C /usr/local/bin/mc mc +fi if [[ -f "$(which kubectl 2>/dev/null)" ]]; then source <(kubectl completion zsh) fi -# python path + if [[ "$(uname -s)" == "Darwin" ]]; then - export PATH="$PATH:$HOME/Library/Python/3.7/bin" - export PATH="$PATH:$HOME/Library/Python/2.7/bin" + export PATH="$PATH:$HOME/Library/Python/3.8/bin" +fi +if [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then + if [[ -f "$HOME/.iterm2_shell_integration.zsh" ]]; then + source "$HOME/.iterm2_shell_integration.zsh" + fi + alias icat="imgcat" +fi +if [[ "$TERM" == "xterm-kitty" ]]; then + alias icat="kitty +kitten icat" + alias ssh="kitty +kitten ssh" fi -# android sdk -export ANDROID_SDK_ROOT="/usr/local/share/android-sdk" -export PATH="$PATH:$ANDROID_SDK_ROOT/tools/bin:$ANDROID_SDK_ROOT/platform-tools" -# flutter sdk -export PATH="$PATH:$HOME/flutter/bin" -# aliases -alias vim=nvim -alias icat="kitty +kitten icat" - -# gpg help function gpg_start { # gpg tty fix for macOS pinentry. also ensures agent is started export GPG_TTY="$(tty)" @@ -120,59 +105,3 @@ function gpg_start { # gpg ssh agent test -e "$(which gpgconf 2>/dev/null)" && export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" } - -# Ensure LANG is set -if [[ -z "$LANG" ]]; then - export LANG=en_GB.UTF-8 -fi - -# iTerm2 integration -if [[ -f "$HOME/.iterm2_shell_integration.zsh" ]]; then - source "$HOME/.iterm2_shell_integration.zsh" -fi - -# hack to optionally get some oh-my-zsh back -if [[ "$(uname -s)" == "Darwin" ]]; then - - export ZSH="$HOME/.oh-my-zsh" - test -e "$HOME/.oh-my-zsh/plugins/osx/osx.plugin.zsh" && source "$HOME/.oh-my-zsh/plugins/osx/osx.plugin.zsh" - # legacy scripts - test -e "$HOME/.bin" && export PATH="$HOME/.bin:$PATH" # TODO: move to .local/bin - - # tips - function tips { - echo "Some useful commands:" - echo " - spotify || itunes Chill out to 🎧" - echo " - cdf Jumps to the folder open in finder" - echo " - quick-look Opens file in quick look 👀" - echo " - asciinema Records a terminal session" - echo " - http Make HTTP requests" - echo " - ghi GitHub Issues" - echo " - todo [task] What it says on the tin 🗒" - echo " - nope When you give up on life 😖" - echo " - imgcat photo Preview photo inline" - echo " - it2dl file Downloads file" - echo " - ^R Searches history" - echo " - ^Z Suspend process" - echo " - ^E Executes suggestion or Emmet" - echo " - ⌘ B In Finder, open a iTerm window" - echo - echo "In vim:" - echo " - ctrl-v, shift-i, [chars]" - echo " - o (insert in new line) a (append) A (append at end) c (change selection)" - echo " - w (start of word) e (end of word) 0 (start of line) $ (end of line)" - echo " - k (up) j (down) h (left) l (right)" - echo " - ~ (swap case) U (uppercase) u (lowercase) gUU guu gu$ gu0 gUaw" - echo " - % (jump to matching brackets)" - echo " - cc (intent line) = (indent selection)" - echo " - (insert mode) ctrl-y (indent) ctrl-d (unindent)" - echo " - (jump to line in screen) H (top) M (middle) L (bottom)" - echo " - (jump by screen to line) ctrl-u (half up) ctrl-d (half down)" - echo " - (scroll screen, put current line at) zz (center) zt (top) zb (bottom)" - echo " - (scroll screen by one line) ctrl-y (up) ctrl-e (down)" - echo " - mx (mark as x) \`x (return to x)" - echo " - f[char] (find char)" - } - -fi -