X-Git-Url: https://git.sev.monster/~sev/dotfiles.git/blobdiff_plain/294ed44e1a8dd7a6026213380c41bceb1a4a162a..HEAD:/etc/zsh/.zshrc diff --git a/etc/zsh/.zshrc b/etc/zsh/.zshrc index 90f4870..893cac5 100644 --- a/etc/zsh/.zshrc +++ b/etc/zsh/.zshrc @@ -1,11 +1,27 @@ ### options -setopt NO_BEEP NO_CLOBBER \ - AUTO_CD CDABLE_VARS \ - EXTENDED_GLOB GLOB_DOTS GLOB_STAR_SHORT MARK_DIRS NUMERIC_GLOB_SORT \ - CORRECT_ALL INTERACTIVE_COMMENTS \ - GLOB_COMPLETE \ - AUTO_CONTINUE LONG_LIST_JOBS \ - NO_HIST_SAVE_BY_COPY HIST_IGNORE_DUPS SHARE_HISTORY HIST_REDUCE_BLANKS +setopts=( + ## 16.2.1 Changing Directories + AUTO_CD CDABLE_VARS + ## 16.2.2 Completion + COMPLETE_IN_WORD GLOB_COMPLETE REC_EXACT + ## 16.2.3 Expansion and Globbing + EXTENDED_GLOB GLOB_DOTS GLOB_STAR_SHORT MAGIC_EQUAL_SUBST MARK_DIRS + NUMERIC_GLOB_SORT + ## 16.2.4 History + # NOTE: NO_HIST_SAVE_BY_COPY to allow saving histfile if updating another + # user's histfile. this is for compatibility with zsu. + HIST_FCNTL_LOCK HIST_IGNORE_DUPS HIST_IGNORE_SPACE HIST_LEX_WORDS + HIST_NO_STORE HIST_REDUCE_BLANKS NO_HIST_SAVE_BY_COPY SHARE_HISTORY + ## 16.2.6 Input/Output + NO_CLOBBER CLOBBER_EMPTY CORRECT_ALL INTERACTIVE_COMMENTS + HASH_EXECUTABLES_ONLY + ## 16.2.7 Job Control + AUTO_CONTINUE LONG_LIST_JOBS + ## 16.2.12 Zle + NO_BEEP +) +setopt $setopts +unset setopts ### exports ## common @@ -16,8 +32,8 @@ export PAGER=${$(whence -p less micro nano more)[(f)1]:s/micro/& -readonly true export GREP_OPTIONS=--color=auto ## histfile export HISTFILE=~/.histfile -export HISTSIZE=1000 -export SAVEHIST=1000 +export HISTSIZE=10000 +export SAVEHIST=$HISTSIZE ## python export PYTHONSTARTUP=${XDG_CONFIG_HOME:-~/.config}/pythonrc ## vim @@ -184,6 +200,20 @@ for k v (${(kv)a}) { } unset a k v +## fzf +# bash-style reverse-search-history (i.e. reverse-i-search) +if [[ -v commands[fzf] ]] { + function _history-incremental-pattern-search-fzf { + l=(${(f)"$(fc -li -1 0 | fzf -e -m -n 1 +s --preview-window=hidden ${BUFFER:+-q $BUFFER})"}) + l=$(for x ("${l[@]}") { echo ${${=x}:3}; }) + BUFFER="$l" + } + zle -N _history-incremental-pattern-search-fzf + bindkey '^R' _history-incremental-pattern-search-fzf +} else { + bindkey '^R' history-incremental-pattern-search-backward +} + ### aliases ## builtins alias rehash='_sev_setpath; rehash' @@ -199,9 +229,18 @@ if [[ "$OSTYPE" =~ '^(free|net)bsd' ]] { alias p=\$PAGER alias e=\$EDITOR alias se=sudoedit +alias syncwatch='sync & watch -d grep -Fe Dirty: -e Writeback: /proc/meminfo' +if [[ -v commands[grep] ]] { + [[ -v commands[fgrep] ]] || alias fgrep='grep -F' + [[ -v commands[egrep] ]] || alias fgrep='grep -E' +} +for x (cat cmp diff grep test update) { + [[ -v commands[zutils-z$x] ]] || alias z$x=zutils-z$x +} # be paranoid alias cp='cp -ip' alias mv='mv -i' +# zsh zmv with noglob wildcards alias zm='noglob zmv -WiM' alias zc='noglob zmv -WiC' alias zl='noglob zmv -WiL' @@ -216,29 +255,24 @@ if [[ "$OSTYPE" =~ '^freebsd' ]] { alias rm='rm -i' } [[ -v commands[trash-put] ]] && alias t=trash-put -## py venv -alias va='source bin/activate' -alias vd=deactivate -## ps -source ~/.local/bin/.check-busybox -if [[ -v commands[pstree] ]] && ! check-busybox pstree; then +# ps +if [[ -v commands[pstree] && $commands[pstree]:A:t != busybox ]] { # use pstree, but NOT busybox pstree because it kinda sucks - ps="pstree -wg3" -elif [[ "$OSTYPE" =~ '^freebsd' ]]; then - ps="ps -aSdfxwwouser=USR -ogroup=GRP -opid,nice=NI \ - -o%cpu,%mem,tty,stat,start=START -oetime,command" -elif check-busybox ps; then + ps='pstree -wg3' +} elif [[ "$OSTYPE" =~ '^freebsd' ]] { + ps='ps -aSdfxwwouser=USR -ogroup=GRP -opid,nice=NI \ + -o%cpu,%mem,tty,stat,start=START -oetime,command' +} elif [[ $commands[ps]:A:t == busybox ]] { # busybox compatible ps="ps -eouser='USR ' -ogroup='GRP ' \ -opid=' PID' -onice=' NI' -ovsz=' MEM' \ -otty,stat,etime,comm" -else +} else { # XXX: untested, posix # TODO: support gnu ps - ps="ps -eouser=USR -ogroup=GRP -opid,nice=NI \ - -opcpu=CPU -ovsz=MEM -otty,stat,etime,comm" -fi -unfunction check-busybox + ps='ps -eouser=USR -ogroup=GRP -opid,nice=NI \ + -opcpu=CPU -ovsz=MEM -otty,stat,etime,comm' +} if [[ "$(basename "$PAGER")" = "less" ]] { ps="$ps | less -S" } else { @@ -247,15 +281,30 @@ if [[ "$(basename "$PAGER")" = "less" ]] { alias pa=$ps alias spa="sudo $ps" unset ps +## py venv +alias va='source bin/activate' +alias vd=deactivate +alias vu="python3 -mvenv --upgrade" +alias svu="sudo python3 -mvenv --upgrade" ## git +alias g=git alias gd='git diff' alias gdh='git diff HEAD' +alias gds='git diff --staged' alias ga='git add' alias ga.='git add .' +alias gai='git add -i' +alias gap='git add -p' alias gc='git commit' alias gca='git commit --amend' alias gp='git push' alias gu='git pull' +alias gl='git log' +alias gt='git tree' # from gitconfig +alias gsh='git show' +alias gst='git status' +alias gs='git stash' +alias gsp='git stash pop' ## cd/zoxide function up { \cd $(printf '../%.0s' {1..${1:-1}}) @@ -268,11 +317,26 @@ if [[ -v commands[zoxide] ]] { } alias cd..=up ## dotfiles -alias dfu='d=${$(echo -E - ~/.zshenv):P:h:h};GIT_DIR=$d/.git GIT_WORK_TREE=$d git pull' +alias dfu='function { + pushd -q ${$(echo -E - ~/.zshenv):P:h:h} + git pull && + git submodule init && + git submodule sync && + git submodule update + popd -q +}' +## nocorrect +# zsh doesnt really handle sudo very well, so ignore it +alias sudo='nocorrect sudo' +## docker compose +alias dcp='sudo docker compose pull' +alias dcu='sudo docker compose up -d' +alias dcr='sudo docker compose restart' +alias dcl='sudo docker compose logs -f' ### hooks autoload -Uz add-zsh-hook -_sev_exectime= +typeset -gi _sev_exectime function sev_preexec { # change terminal title to show command print -n "\e]2;$(print -P '%#')${SSH_CLIENT+$USER@$HOST:}$1\e\\" @@ -358,5 +422,8 @@ esac autoload -Uz promptinit && promptinit prompt arrows +### plugins +load-plugins zshrc + ### load site-specific load-site-dotfile zshrc