diff --git a/Xresources b/Xresources index f19d0c2..bcb9fc2 100644 --- a/Xresources +++ b/Xresources @@ -1,56 +1,9 @@ ! DPI settings Xft.dpi: 276 +!Xft.dpi: 220 Xft.autohint: 0 Xft.lcdfilter: lcddefault Xft.hintstyle: hintfull Xft.hinting: 1 Xft.antialias: 1 Xft.rgba: rgb - -! urxvt config -URxvt.scrollBar: False -!URxvt.font: xft:Source Code Pro:size=10 -URxvt.font: xft:Inconsolata :size=10 - -URxvt.perl-ext-common: default,clipboard -URxvt.keysym.M-c: perl:clipboard:copy -URxvt.keysym.M-v: perl:clipboard:paste -URxvt.keysym.M-C-c: perl:clipboard:paste_escaped - -! terminal colours -URxvt.foreground:#a0a0a0 -URxvt.background:#1b1d1e - -!molokai inspired colors - -!!black -URxvt.color0: #1b1d1e -URxvt.color8: #505354 - -!red -URxvt.color1: #f92672 -URxvt.color9: #ff5995 - -!green -URxvt.color2: #82b414 -URxvt.color10: #b6e354 - -!yellow -URxvt.color3: #fd971f -URxvt.color11: #feed6c - -!blue -URxvt.color4: #56c2d6 -URxvt.color12: #8cedff - -!magenta -URxvt.color5: #8c54fe -URxvt.color13: #9e6ffe - -!cyan -URxvt.color6: #465457 -URxvt.color14: #899ca1 - -!white -URxvt.color7: #ccccc6 -URxvt.color15: #f8f8f2 diff --git a/i3/config b/i3/config index 99de604..8d898c9 100644 --- a/i3/config +++ b/i3/config @@ -8,9 +8,19 @@ # i3 config file (v4) # # Please see http://i3wm.org/docs/userguide.html for a complete reference! - + set $mod Mod4 +exec --no-startup-id /usr/bin/unity-settings-daemon +exec xrandr --dpi 200 #109 #200 # 163 +exec compton -CGb +exec --no-startup-id feh --bg-fill ~/Pictures/dark_spots_texture_background_50355_3840x2160.jpg +exec --no-startup-id "xautolock -time 10 -locker 'i3lock -e -i /home/cugini/Pictures/dark_spots_texture_background_50355_3840x2160.png'" +exec synclient TapButton3=2 ClickFinger3=2 +exec --no-startup-id nm-applet +exec --no-startup-id udiskie -t +exec --no-startup-id dropbox start + # Font for window titles. Will also be used by the bar unless a different font # is used in the bar {} block below. #font pango:M+ 1m, FontAwesome, monospace 8 @@ -31,7 +41,8 @@ bindsym $mod+Return exec st bindsym $mod+Shift+q kill # start dmenu (a program launcher) -bindsym $mod+d exec dmenu_run -fn 'Monotype Noto Sans-8' +bindsym $mod+d exec dmenu_run -fn 'Monotype Noto Sans-10' +#bindsym $mod+d exec --no-startup-id i3-dmenu-desktop --dmenu="dmenu_run -fn 'Monotype Noto Sans-8'" # There also is the (new) i3-dmenu-desktop which only displays applications # shipping a .desktop file. It is a wrapper around dmenu, so you need that # installed. @@ -120,7 +131,7 @@ bindsym $mod+Control+l move workspace to output right # scratchpad setup -# make current window a scratchpad +# make current window to scratchpad bindsym $mod+Shift+minus move scratchpad # show the first scratchpad window @@ -157,22 +168,29 @@ mode "resize" { bindsym Escape mode "default" } -bindsym $mod+r mode "resize" +#bindsym $mod+r mode "resize" # Start i3bar to display a workspace bar (plus the system information i3status # finds out, if available) bar { - status_command i3status + #status_command i3status + status_command i3status | ~/bin/my_i3status.py } -# brightness control -bindsym XF86MonBrightnessDown exec xbacklight -steps 1 -time 0 -dec 5 -bindsym XF86MonBrightnessUp exec xbacklight -steps 1 -time 0 -inc 10 +bindsym XF86AudioPlay exec playerctl play-pause && killall -USR1 i3status +bindsym XF86AudioPrev exec playerctl previous +bindsym XF86AudioNext exec playerctl next -bindsym XF86AudioRaiseVolume exec amixer -q set Master 4%+ unmute && killall -USR1 i3status -bindsym XF86AudioLowerVolume exec amixer -q set Master 4%- unmute && killall -USR1 i3status -bindsym XF86AudioMute exec amixer -q set Master toggle && killall -USR1 i3status +# brightness control +bindsym XF86MonBrightnessDown exec xbacklight -time 100 -dec 5 +bindsym XF86MonBrightnessUp exec xbacklight -time 200 -inc 10 + +bindsym XF86AudioRaiseVolume exec ~/bin/raise_volume && killall -USR1 i3status +bindsym XF86AudioLowerVolume exec ~/bin/lower_volume && killall -USR1 i3status +bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle && killall -USR1 i3status #lock and suspend -bindsym $mod+p exec i3lock +#bindsym $mod+p exec i3lock +# bindsym $mod+p exec xdg-screensaver lock +bindsym $mod+p exec dm-tool lock bindsym $mod+Shift+p exec systemctl suspend diff --git a/i3/i3status.conf b/i3/i3status.conf index aa3932b..9ff0134 100644 --- a/i3/i3status.conf +++ b/i3/i3status.conf @@ -7,6 +7,7 @@ # If the above line is not correctly displayed, fix your editor first! general { + output_format="i3bar" colors = true interval = 5 } @@ -14,19 +15,20 @@ general { order += "volume master" order += "disk /" #order += "run_watch DHCP" -#order += "run_watch VPN" +order += "path_exists VPN" order += "wireless _first_" -#order += "ethernet _first_" +order += "ethernet _first_" order += "battery 0" order += "load" order += "tztime local" +order += "tztime utc" volume master { - format = " %volume" - format_muted = " %volume" - device = "default" - mixer = "Master" - mixer_idx = 0 + format = " %volume" + format_muted = " %volume" + device = "default" + mixer = "Master" + mixer_idx = 0 } wireless _first_ { @@ -44,24 +46,35 @@ ethernet _first_ { battery 0 { format = "%status %percentage %remaining" - status_bat = "" - status_chr = "" - status_full = "" - #status_full = "" - hide_seconds = true - integer_battery_capacity = true + status_bat = "" + status_chr = "" + status_full = "" + #status_full = "" + hide_seconds = true + integer_battery_capacity = true } run_watch DHCP { pidfile = "/var/run/dhclient*.pid" } -run_watch VPN { - pidfile = "/var/run/vpnc/pid" +#run_watch VPN { +# pidfile = "/var/run/vpnc/pid" +#} + +path_exists VPN { + #path = "/proc/sys/net/ipv4/conf/vpn0" + path = "/proc/sys/net/ipv4/conf/tun0" } tztime local { format = "%Y-%m-%d %I:%M:%S %p" + timezone = "US/Eastern" +} + +tztime utc { + format = "%Z: %H:%M" + timezone = "Etc/UTC" } load { diff --git a/tmux.conf b/tmux.conf index 3ea94e1..92c3b9e 100644 --- a/tmux.conf +++ b/tmux.conf @@ -1,6 +1,8 @@ # setup 256 color set -g default-terminal "screen-256color" +set -ga terminal-overrides ",st-256color:Tc" + # increase scrollback set -g history-limit 10000 diff --git a/vimrc b/vimrc index f225652..aed101e 100644 --- a/vimrc +++ b/vimrc @@ -5,12 +5,23 @@ call pathogen#infect() set nocompatible set encoding=utf-8 +set shortmess+=c set showcmd +set noshowmode + +set completeopt-=preview +set completeopt+=noinsert +set completeopt+=noselect + +if has("termguicolors") + set termguicolors +endif set background=dark -set termguicolors -colorscheme molokai "gruvbox zenburn -let g:molokai_original = 1 +"colorscheme molokai "gruvbox zenburn +" colorscheme material-monokai +"let g:molokai_original = 1 +colorscheme deep-space "always show status bar set laststatus=2 @@ -20,51 +31,15 @@ syntax enable filetype plugin on filetype plugin indent on -"Go specific settings -set rtp+=$GOROOT/misc/vim -au BufRead,BufNewFile *.go set list noexpandtab syntax=go listchars=tab:\|\ ,trail:- -set completeopt-=preview - -function! InsertTabWrapper() - if pumvisible() - return "\" - endif - let col = col('.') - 1 - if !col || getline('.')[col - 1] !~ '\k' - return "\" - else - return "\\" - endif -endfunction -inoremap InsertTabWrapper() -inoremap pumvisible()?"\":"\" - -let g:deoplete#enable_at_startup = 1 - -let g:syntastic_go_checkers = ['go', 'goimports', 'govet', 'golint'] -let g:deoplete#sources#go#gocode_binary = '~/bin/gocode' -let g:deoplete#sources#go#use_cache = 1 -let g:deoplete#sources#go#json_directory = '~/.cache/deoplete/go/$GOOS_$GOARCH' - -let g:go_fmt_command = "goimports" -let g:go_highlight_functions = 1 -let g:go_highlight_methods = 1 -let g:go_highlight_fields = 1 -let g:go_highlight_structs = 1 -let g:go_highlight_interfaces = 1 -let g:go_highlight_operators = 1 -let g:go_highlight_build_constraints = 1 - -if filereadable(expand("~/.vim/local.vim")) - source ~/.vim/local.vim -endif - "indent and tab set nowrap set expandtab set tabstop=4 shiftwidth=4 softtabstop=4 set backspace=indent,eol,start +"turn paste mode on and off with F3 +set pastetoggle= + "search set hlsearch set incsearch @@ -79,54 +54,129 @@ set wildmode=longest:full,full nnoremap za vnoremap zf -"turn paste mode on and off with F3 -set pastetoggle= +"Better split navigation +nnoremap +nnoremap +nnoremap +nnoremap + +set splitbelow +set splitright + +function! s:goyo_enter() + set wrap + Limelight +endfunction + +function! s:goyo_leave() + set nowrap + Limelight! +endfunction + +autocmd! User GoyoEnter nested call goyo_enter() +autocmd! User GoyoLeave nested call goyo_leave() + +au BufRead,BufNewFile *.txt :Goyo + +let g:goyo_width = 120 + +" choose the fastest available searcher +if executable('rg') + let g:ctrlp_user_command = 'rg --files %s' + set grepprg=rg\ --no-heading\ --vimgrep\ --smart-case +elseif executable('ag') + let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""' + set grepprg=ag\ --nogroup\ --nocolor +endif + +" vim-signify +let g:signify_vcs_list = [ 'git', 'hg' ] +let g:signify_sign_change = "~" + + +"Go specific settings +set rtp+=$GOROOT/misc/vim +au BufRead,BufNewFile *.go set list noexpandtab syntax=go listchars=tab:\|\ ,trail:- +autocmd FileType go map :GoDoc + +" FZF +set rtp+=$HOME/.fzf +command! -bang -nargs=* RgFzf + \ call fzf#run(fzf#wrap('rgfzf', {'source': "rg --files"}, 0)) +" nmap :Files +nmap :RgFzf +nnoremap b :Buffers +nnoremap g :Rg +nnoremap l :BLines +nnoremap c :Commands + +" use ripgrep instead of ag/grep +command! -bang -nargs=* Rg + \ call fzf#vim#grep( + \ 'rg --column --line-number --no-heading --color=always '.shellescape(), 1, + \ 0 ? fzf#vim#with_preview('up:60%') + \ : fzf#vim#with_preview('right:50%:hidden', '?'), + \ 0) + +function! InsertTabWrapper() + if pumvisible() + return "\" + endif + let col = col('.') - 1 + if !col || getline('.')[col - 1] !~ '\k' + return "\" + else + return "\\" + endif +endfunction +inoremap InsertTabWrapper() +inoremap pumvisible()?"\":"\" + +" let g:LanguageClient_serverCommands = { +" \ 'python': ['pyls'], +" \ } + +let g:go_fmt_command = "goimports" +let g:syntastic_go_checkers = ['go', 'goimports', 'govet', 'golint'] + +let g:go_highlight_functions = 1 +let g:go_highlight_function_calls = 1 +let g:go_highlight_methods = 1 +let g:go_highlight_types = 1 +let g:go_highlight_fields = 1 +let g:go_highlight_operators = 1 +let g:go_highlight_build_constraints = 1 +"let g:go_highlight_variable_declarations = 1 +"let g:go_highlight_variable_assignments = 1 + +" vim-jedi settings +" disable vim-jedi autocomplete as we get it with deoplete-jedi +" but we want all the other functionality +let g:jedi#completions_enabled = 0 +let g:jedi#use_splits_not_buffers = 'winwidth' + +" deoplete configuration +let g:deoplete#enable_at_startup = 1 + +" deoplete Go +let g:deoplete#sources#go#sort_class = ['package', 'func', 'type', 'var', 'const'] +let g:deoplete#sources#go#gocode_binary = '/home/cugini/go/bin/gocode' +let g:deoplete#sources#go#use_cache = 1 +let g:deoplete#sources#go#json_directory = '~/.cache/deoplete/go/$GOOS_$GOARCH' + +" deoplete Rust +let g:deoplete#sources#rust#racer_binary = '/home/cugini/.cargo/bin/racer' +let g:deoplete#sources#rust#rust_source_path = '/home/cugini/Projects/rust/src' + +" deoplete Python (jedi) +let g:deoplete#sources#jedi#python_path = '/usr/drte/v1/python-2.7.7/bin/python2.7' +let g:deoplete#sources#jedi#extra_path = ['/home/cugini/src/server','/home/cugini/src/server/pip'] "configure tagbar nmap :TagbarToggle let g:tagbar_width = 60 let g:tagbar_sort = 0 -let g:tagbar_type_scala = { - \ 'ctagstype' : 'Scala', - \ 'kinds' : [ - \ 'p:packages:1', - \ 'V:values', - \ 'v:variables', - \ 'T:types', - \ 't:traits', - \ 'o:objects', - \ 'a:aclasses', - \ 'c:classes', - \ 'r:cclasses', - \ 'm:methods' - \ ] -\ } - -let g:tagbar_type_go = { - \ 'ctagstype' : 'go', - \ 'kinds' : [ - \ 'p:package', - \ 'i:imports:1', - \ 'c:constants', - \ 'v:variables', - \ 't:types', - \ 'n:interfaces', - \ 'w:fields', - \ 'e:embedded', - \ 'm:methods', - \ 'r:constructor', - \ 'f:functions' - \ ], - \ 'sro' : '.', - \ 'kind2scope' : { - \ 't' : 'ctype', - \ 'n' : 'ntype' - \ }, - \ 'scope2kind' : { - \ 'ctype' : 't', - \ 'ntype' : 'n' - \ }, - \ 'ctagsbin' : 'gotags', - \ 'ctagsargs' : '-sort -silent' -\ } +if filereadable(expand("~/.vim/local.vim")) + source ~/.vim/local.vim +endif diff --git a/zsh/completions/_rg b/zsh/completions/_rg index 6fcae09..cd5b5ac 100644 --- a/zsh/completions/_rg +++ b/zsh/completions/_rg @@ -1,125 +1,255 @@ #compdef rg +## +# zsh completion function for ripgrep +# +# Run ci/test_complete.sh after building to ensure that the options supported by +# this function stay in synch with the `rg` binary. +# +# @see https://github.com/zsh-users/zsh/blob/master/Etc/completion-style-guide +# +# Based on code from the zsh-users project — see copyright notice below. + _rg() { - typeset -A opt_args - local ret=1 + local state_descr ret curcontext="${curcontext:-}" + local -a context line state + local -A opt_args val_args + local -a rg_args - local context curcontext="$curcontext" state line - _arguments -s -S -C \ -"*-e+[A regular expression used for searching.]" \ -"*--regexp+[A regular expression used for searching.]" \ -"--color+[When to use color. \[default: auto\]]: :(never auto always ansi)" \ -"*--colors+[Configure color settings and styles.]" \ -"-E+[Specify the text encoding of files to search.]" \ -"--encoding+[Specify the text encoding of files to search.]" \ -"*-g+[Include or exclude files/directories.]" \ -"*--glob+[Include or exclude files/directories.]" \ -"*-t+[Only search files matching TYPE.]" \ -"*--type+[Only search files matching TYPE.]" \ -"*-T+[Do not search files matching TYPE.]" \ -"*--type-not+[Do not search files matching TYPE.]" \ -"-A+[Show NUM lines after each match.]" \ -"--after-context+[Show NUM lines after each match.]" \ -"-B+[Show NUM lines before each match.]" \ -"--before-context+[Show NUM lines before each match.]" \ -"-C+[Show NUM lines before and after each match.]" \ -"--context+[Show NUM lines before and after each match.]" \ -"--context-separator+[Set the context separator string. \[default: --\]]" \ -"--dfa-size-limit+[The upper size limit of the generated dfa.]" \ -"*-f+[Search for patterns from the given file.]" \ -"*--file+[Search for patterns from the given file.]" \ -"*--ignore-file+[Specify additional ignore files.]" \ -"-m+[Limit the number of matches.]" \ -"--max-count+[Limit the number of matches.]" \ -"--max-filesize+[Ignore files larger than NUM in size.]" \ -"--maxdepth+[Descend at most NUM directories.]" \ -"--path-separator+[Path separator to use when printing file paths.]" \ -"-r+[Replace matches with string given.]" \ -"--replace+[Replace matches with string given.]" \ -"--regex-size-limit+[The upper size limit of the compiled regex.]" \ -"-j+[The approximate number of threads to use.]" \ -"--threads+[The approximate number of threads to use.]" \ -"-M+[Don't print lines longer than this limit in bytes.]" \ -"--max-columns+[Don't print lines longer than this limit in bytes.]" \ -"*--type-add+[Add a new glob for a file type.]" \ -"*--type-clear+[Clear globs for given file type.]" \ -"(-f --file -e --regexp --type-list)--files[Print each file that would be searched.]" \ -"(-f --file --files -e --regexp)--type-list[Show all supported file types.]" \ -"-a[Search binary files as if they were text.]" \ -"--text[Search binary files as if they were text.]" \ -"-c[Only show count of matches for each file.]" \ -"--count[Only show count of matches for each file.]" \ -"-F[Treat the pattern as a literal string.]" \ -"--fixed-strings[Treat the pattern as a literal string.]" \ -"-i[Case insensitive search.]" \ -"--ignore-case[Case insensitive search.]" \ -"-n[Show line numbers.]" \ -"--line-number[Show line numbers.]" \ -"-N[Suppress line numbers.]" \ -"--no-line-number[Suppress line numbers.]" \ -"-q[Do not print anything to stdout.]" \ -"--quiet[Do not print anything to stdout.]" \ -"*-u[Reduce the level of "smart" searching.]" \ -"*--unrestricted[Reduce the level of "smart" searching.]" \ -"-v[Invert matching.]" \ -"--invert-match[Invert matching.]" \ -"-w[Only show matches surrounded by word boundaries.]" \ -"--word-regexp[Only show matches surrounded by word boundaries.]" \ -"--column[Show column numbers]" \ -"--debug[Show debug messages.]" \ -"-l[Only show the paths with at least one match.]" \ -"--files-with-matches[Only show the paths with at least one match.]" \ -"--files-without-match[Only show the paths that contains zero matches.]" \ -"-H[Show file name for each match.]" \ -"--with-filename[Show file name for each match.]" \ -"--no-filename[Never show the file name for a match.]" \ -"--heading[Show matches grouped by each file.]" \ -"--no-heading[Don't group matches by each file.]" \ -"--hidden[Search hidden files and directories.]" \ -"-L[Follow symbolic links.]" \ -"--follow[Follow symbolic links.]" \ -"--mmap[Searching using memory maps when possible.]" \ -"--no-messages[Suppress all error messages.]" \ -"--no-mmap[Never use memory maps.]" \ -"--no-ignore[Don't respect ignore files.]" \ -"--no-ignore-parent[Don't respect ignore files in parent directories.]" \ -"--no-ignore-vcs[Don't respect VCS ignore files]" \ -"-0[Print NUL byte after file names]" \ -"--null[Print NUL byte after file names]" \ -"(-r --replace)-o[Print only matched parts of a line.]" \ -"(-r --replace)--only-matching[Print only matched parts of a line.]" \ -"-p[Alias for --color always --heading -n.]" \ -"--pretty[Alias for --color always --heading -n.]" \ -"-s[Search case sensitively.]" \ -"--case-sensitive[Search case sensitively.]" \ -"-S[Smart case search.]" \ -"--smart-case[Smart case search.]" \ -"--sort-files[Sort results by file path. Implies --threads=1.]" \ -"--vimgrep[Show results in vim compatible format.]" \ -"-h[Prints help information. Use --help for more details.]" \ -"--help[Prints help information. Use --help for more details.]" \ -"-V[Prints version information]" \ -"--version[Prints version information]" \ -"1:: :_rg_commands" \ -&& ret=0 - + # Sort by long option name to match `rg --help` + rg_args=( + '(-A -C --after-context --context)'{-A+,--after-context=}'[specify lines to show after each match]:number of lines' + '(-B -C --before-context --context)'{-B+,--before-context=}'[specify lines to show before each match]:number of lines' + '(-i -s -S --ignore-case --case-sensitive --smart-case)'{-s,--case-sensitive}'[search case-sensitively]' + '--color=[specify when to use colors in output]:when:( never auto always ansi )' + '*--colors=[specify color settings and styles]: :->colorspec' + '--column[show column numbers]' + '(-A -B -C --after-context --before-context --context)'{-C+,--context=}'[specify lines to show before and after each match]:number of lines' + '--context-separator=[specify string used to separate non-continuous context lines in output]:separator' + '(-c --count)'{-c,--count}'[only show count of matches for each file]' + '--debug[show debug messages]' + '--dfa-size-limit=[specify upper size limit of generated DFA]:DFA size' + '(-E --encoding)'{-E+,--encoding=}'[specify text encoding of files to search]: :_rg_encodings' + '*'{-f+,--file=}'[specify file containing patterns to search for]:file:_files' + "(1)--files[show each file that would be searched (but don't search)]" + '(-l --files-with-matches --files-without-match)'{-l,--files-with-matches}'[only show names of files with matches]' + '(-l --files-with-matches --files-without-match)--files-without-match[only show names of files without matches]' + '(-F --fixed-strings)'{-F,--fixed-strings}'[treat pattern as literal string instead of regular expression]' + '(-L --follow)'{-L,--follow}'[follow symlinks]' + '*'{-g+,--glob=}'[include or exclude files for searching that match the specified glob]:glob' + '(: -)'{-h,--help}'[display help information]' + '(-p --no-heading --pretty --vimgrep)--heading[show matches grouped by file name]' + '--hidden[search hidden files and directories]' + '*--iglob=[include or exclude files for searching that match the specified case-insensitive glob]:glob' + '(-i -s -S --case-sensitive --ignore-case --smart-case)'{-i,--ignore-case}'[search case-insensitively]' + '--ignore-file=[specify additional ignore file]:file:_files' + '(-v --invert-match)'{-v,--invert-match}'[invert matching]' + '(-n -N --line-number --no-line-number)'{-n,--line-number}'[show line numbers]' + '(-w -x --line-regexp --word-regexp)'{-x,--line-regexp}'[only show matches surrounded by line boundaries]' + '(-M --max-columns)'{-M+,--max-columns=}'[specify max length of lines to print]:number of bytes' + '(-m --max-count)'{-m+,--max-count=}'[specify max number of matches per file]:number of matches' + '--max-filesize=[specify size above which files should be ignored]:file size' + '--maxdepth=[specify max number of directories to descend]:number of directories' + '(--mmap --no-mmap)--mmap[search using memory maps when possible]' + '(-H --with-filename --no-filename)--no-filename[suppress all file names]' + "(-p --heading --pretty --vimgrep)--no-heading[don't group matches by file name]" + "(--no-ignore-parent)--no-ignore[don't respect ignore files]" + "--no-ignore-parent[don't respect ignore files in parent directories]" + "--no-ignore-vcs[don't respect version control ignore files]" + '(-n -N --line-number --no-line-number)'{-N,--no-line-number}'[suppress line numbers]' + '--no-messages[suppress all error messages]' + "(--mmap --no-mmap)--no-mmap[don't search using memory maps]" + '(-0 --null)'{-0,--null}'[print NUL byte after file names]' + '(-o --only-matching -r --replace)'{-o,--only-matching}'[show only matching part of each line]' + '--path-separator=[specify path separator to use when printing file names]:separator' + '(-p --heading --no-heading --pretty --vimgrep)'{-p,--pretty}'[alias for --color=always --heading -n]' + '(-q --quiet)'{-q,--quiet}'[suppress normal output]' + '--regex-size-limit=[specify upper size limit of compiled regex]:regex size' + '(1 -f --file)*'{-e+,--regexp=}'[specify pattern]:pattern' + '(-o --only-matching -r --replace)'{-r+,--replace=}'[specify string used to replace matches]:replace string' + '(-i -s -S --ignore-case --case-sensitive --smart-case)'{-S,--smart-case}'[search case-insensitively if the pattern is all lowercase]' + '(-j --threads)--sort-files[sort results by file path (disables parallelism)]' + '(-a --text)'{-a,--text}'[search binary files as if they were text]' + '(-j --sort-files --threads)'{-j+,--threads=}'[specify approximate number of threads to use]:number of threads' + '*'{-t+,--type=}'[only search files matching specified type]: :_rg_types' + '*--type-add=[add new glob for file type]: :->typespec' + '*--type-clear=[clear globs previously defined for specified file type]: :_rg_types' + # This should actually be exclusive with everything but other type options + '(:)--type-list[show all supported file types and their associated globs]' + '*'{-T+,--type-not=}"[don't search files matching specified type]: :_rg_types" + '*'{-u,--unrestricted}'[reduce level of "smart" searching]' + '(: -)'{-V,--version}'[display version information]' + '(-p --heading --no-heading --pretty)--vimgrep[show results in vim-compatible format]' + '(-H --no-filename --with-filename)'{-H,--with-filename}'[display the file name for matches]' + '(-w -x --line-regexp --word-regexp)'{-w,--word-regexp}'[only show matches surrounded by word boundaries]' + '(-e -f --file --files --regexp --type-list)1: :_rg_pattern' + '(--type-list)*:file:_files' + ) + + [[ ${_RG_COMPLETE_LIST_ARGS:-} == (1|t*|y*) ]] && { + printf '%s\n' "${rg_args[@]}" + return 0 + } + + _arguments -s -S : "${rg_args[@]}" && return 0 + + while (( $#state )); do + case "${state[1]}" in + colorspec) + # @todo I don't like this because it allows you to do weird things like + # `line:line:bg:`. Also, i would like the `compadd -q` behaviour + [[ -prefix *:none: ]] && return 1 + [[ -prefix *:*:*:* ]] && return 1 + + _values -S ':' 'color/style type' \ + 'column[specify coloring for column numbers]: :->attribute' \ + 'line[specify coloring for line numbers]: :->attribute' \ + 'match[specify coloring for match text]: :->attribute' \ + 'path[specify color for file names]: :->attribute' && return 0 + + [[ "${state}" == 'attribute' ]] && + _values -S ':' 'color/style attribute' \ + 'none[clear color/style for type]' \ + 'bg[specify background color]: :->color' \ + 'fg[specify foreground color]: :->color' \ + 'style[specify text style]: :->style' && return 0 + + [[ "${state}" == 'color' ]] && + _values -S ':' 'color value' \ + black blue green red cyan magenta yellow white && return 0 + + [[ "${state}" == 'style' ]] && + _values -S ':' 'style value' \ + bold nobold intense nointense && return 0 + ;; + + typespec) + if compset -P '[^:]##:include:'; then + _sequence -s ',' _rg_types && return 0 + # @todo This bit in particular could be better, but it's a little + # complex, and attempting to solve it seems to run us up against a crash + # bug — zsh # 40362 + elif compset -P '[^:]##:'; then + _message 'glob or include directive' && return 1 + elif [[ ! -prefix *:* ]]; then + _rg_types -qS ':' && return 0 + fi + ;; + esac + shift state + done + + return 1 } -(( $+functions[_rg_commands] )) || -_rg_commands() { - local commands; commands=( - "PATTERN:A regular expression used for searching." \ -"PATH:A file or directory to search." \ - ) - _describe -t commands 'rg commands' commands "$@" -} -(( $+functions[_rg_commands] )) || -_rg_commands() { - local commands; commands=( - "PATTERN:A regular expression used for searching." \ -"PATH:A file or directory to search." \ - ) - _describe -t commands 'rg commands' commands "$@" +# zsh 5.1 refuses to complete options if a 'match-less' operand like our pattern +# could be 'completed' instead. We can use _guard() to avoid this problem, but +# it introduces another one: zsh won't print the message if we try to complete +# the pattern after having passed `--`. To work around *that* problem, we can +# use this function to bypass the _guard() when `--` is on the command line. +# This is inaccurate (it'd get confused by e.g. `rg -e --`), but zsh's handling +# of `--` isn't accurate anyway +_rg_pattern() { + if (( ${words[(I)--]} )); then + _message 'pattern' + else + _guard '^-*' 'pattern' + fi } -_rg "$@" \ No newline at end of file +# Complete encodings +_rg_encodings() { + local -a expl + local -aU _encodings + + # This is impossible to read, but these encodings rarely if ever change, so it + # probably doesn't matter. They are derived from the list given here: + # https://encoding.spec.whatwg.org/#concept-encoding-get + _encodings=( + {{,us-}ascii,arabic,chinese,cyrillic,greek{,8},hebrew,korean} + logical visual mac {,cs}macintosh x-mac-{cyrillic,roman,ukrainian} + 866 ibm{819,866} csibm866 + big5{,-hkscs} {cn-,cs}big5 x-x-big5 + cp{819,866,125{0..8}} x-cp125{0..8} + csiso2022{jp,kr} csiso8859{6,8}{e,i} + csisolatin{{1..6},9} csisolatin{arabic,cyrillic,greek,hebrew} + ecma-{114,118} asmo-708 elot_928 sun_eu_greek + euc-{jp,kr} x-euc-jp cseuckr cseucpkdfmtjapanese + {,x-}gbk csiso58gb231280 gb18030 {,cs}gb2312 gb_2312{,-80} hz-gb-2312 + iso-2022-{cn,cn-ext,jp,kr} + iso8859{,-}{{1..11},13,14,15} + iso-8859-{{1..11},{6,8}-{e,i},13,14,15,16} iso_8859-{{1..9},15} + iso_8859-{1,2,6,7}:1987 iso_8859-{3,4,5,8}:1988 iso_8859-9:1989 + iso-ir-{58,100,101,109,110,126,127,138,144,148,149,157} + koi{,8,8-r,8-ru,8-u,8_r} cskoi8r + ks_c_5601-{1987,1989} ksc{,_}5691 csksc56011987 + latin{1..6} l{{1..6},9} + shift{-,_}jis csshiftjis {,x-}sjis ms_kanji ms932 + utf{,-}8 utf-16{,be,le} unicode-1-1-utf-8 + windows-{31j,874,949,125{0..8}} dos-874 tis-620 ansi_x3.4-1968 + x-user-defined auto + ) + + _wanted rg-encodings expl 'encoding' compadd -a "${@}" - _encodings +} + +# Complete file types +_rg_types() { + local -a expl + local -aU _types + + _types=( ${${(f)"$( _call_program rg-types rg --type-list )"}%%:*} ) + + _wanted rg-types expl 'file type' compadd -a "${@}" - _types +} + +_rg "${@}" + +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for ripgrep +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * arcizan +# * MaskRay +# +# ------------------------------------------------------------------------------ + +# Local Variables: +# mode: shell-script +# coding: utf-8-unix +# indent-tabs-mode: nil +# sh-indentation: 2 +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et diff --git a/zsh/functions/omz_directories.zsh b/zsh/functions/omz_directories.zsh deleted file mode 100644 index a50a692..0000000 --- a/zsh/functions/omz_directories.zsh +++ /dev/null @@ -1,34 +0,0 @@ -# Changing/making/removing directory -setopt auto_pushd -setopt pushd_ignore_dups -setopt pushdminus - -alias -g ...='../..' -alias -g ....='../../..' -alias -g .....='../../../..' -alias -g ......='../../../../..' - -alias -- -='cd -' -alias 1='cd -' -alias 2='cd -2' -alias 3='cd -3' -alias 4='cd -4' -alias 5='cd -5' -alias 6='cd -6' -alias 7='cd -7' -alias 8='cd -8' -alias 9='cd -9' - -alias md='mkdir -p' -alias rd=rmdir -alias d='dirs -v | head -10' - -# List directory contents -alias lsa='ls -lah' -alias l='ls -lah' -alias ll='ls -lh' -alias la='ls -lAh' - -# Push and pop directories on directory stack -alias pu='pushd' -alias po='popd' diff --git a/zsh/functions/omz_theme-and-appearance.zsh b/zsh/functions/omz_theme-and-appearance.zsh index 96f34aa..ecb7b63 100644 --- a/zsh/functions/omz_theme-and-appearance.zsh +++ b/zsh/functions/omz_theme-and-appearance.zsh @@ -1,55 +1,20 @@ # ls colors autoload -U colors && colors -# Enable ls colors +# default LSCOLORS export LSCOLORS="Gxfxcxdxbxegedabagacad" -# TODO organise this chaotic logic - -if [[ "$DISABLE_LS_COLORS" != "true" ]]; then - # Find the option for using colors in ls, depending on the version - if [[ "$OSTYPE" == netbsd* ]]; then - # On NetBSD, test if "gls" (GNU ls) is installed (this one supports colors); - # otherwise, leave ls as is, because NetBSD's ls doesn't support -G - gls --color -d . &>/dev/null && alias ls='gls --color=tty' - elif [[ "$OSTYPE" == openbsd* ]]; then - # On OpenBSD, "gls" (ls from GNU coreutils) and "colorls" (ls from base, - # with color and multibyte support) are available from ports. "colorls" - # will be installed on purpose and can't be pulled in by installing - # coreutils, so prefer it to "gls". - gls --color -d . &>/dev/null && alias ls='gls --color=tty' - colorls -G -d . &>/dev/null && alias ls='colorls -G' - elif [[ "$OSTYPE" == darwin* ]]; then - # this is a good alias, it works by default just using $LSCOLORS - ls -G . &>/dev/null && alias ls='ls -G' - - # only use coreutils ls if there is a dircolors customization present ($LS_COLORS or .dircolors file) - # otherwise, gls will use the default color scheme which is ugly af - [[ -n "$LS_COLORS" || -f "$HOME/.dircolors" ]] && gls --color -d . &>/dev/null && alias ls='gls --color=tty' - else - # For GNU ls, we use the default ls color theme. They can later be overwritten by themes. - if [[ -z "$LS_COLORS" ]]; then - (( $+commands[dircolors] )) && eval "$(dircolors -b)" - fi - - ls --color -d . &>/dev/null && alias ls='ls --color=tty' || { ls -G . &>/dev/null && alias ls='ls -G' } - - # Take advantage of $LS_COLORS for completion as well. - zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" - fi +if [[ -f $HOME/.dircolors ]]; then + eval $(dircolors -b $HOME/.dircolors) +elif [[ -z "$LS_COLORS" ]]; then + (( $+commands[dircolors] )) && eval "$(dircolors -b)" fi +# Take advantage of $LS_COLORS for completion as well. +zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" + setopt auto_cd setopt multios setopt prompt_subst [[ -n "$WINDOW" ]] && SCREEN_NO="%B$WINDOW%b " || SCREEN_NO="" - -# Apply theming defaults -PS1="%n@%m:%~%# " - -# git theming default: Variables for theming the git info prompt -ZSH_THEME_GIT_PROMPT_PREFIX="git:(" # Prefix at the very beginning of the prompt, before the branch name -ZSH_THEME_GIT_PROMPT_SUFFIX=")" # At the very end of the prompt -ZSH_THEME_GIT_PROMPT_DIRTY="*" # Text to display if the branch is dirty -ZSH_THEME_GIT_PROMPT_CLEAN="" # Text to display if the branch is clean diff --git a/zsh/load.sh b/zsh/load.sh index 844e2fd..8c49ab0 100644 --- a/zsh/load.sh +++ b/zsh/load.sh @@ -1,5 +1,6 @@ # path to my zsh configs ZSH=$HOME/.zsh +ZSH_CACHE_DIR=$ZSH/cache # load the things fpath=($ZSH/functions $ZSH/completions $fpath)