]> git.sev.monster Git - dotfiles.git/blobdiff - etc/zsh/.zshrc
vimrc: fix modeline aucmd
[dotfiles.git] / etc / zsh / .zshrc
index bfe0d9fe440dd2a80992192738c37ebad2d0aec3..893cac58c9b02faa60c9adc61db9f6614bbbe68b 100644 (file)
@@ -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,18 +32,12 @@ 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
 export VIMINIT='let$MYVIMRC=($XDG_CONFIG_HOME??($HOME."/.config"))."/vim/.vimrc"|execute"source"$MYVIMRC'
-## wayland/gui env
-export XDG_SESSION_TYPE=${XDG_SESSION_TYPE:-wayland}
-export QT_QPA_PLATFORM=${QT_QPA_PLATFORM:-wayland-egl}
-export QT_WAYLAND_DISABLE_WINDOWDECORATION=${QT_WAYLAND_DISABLE_WINDOWDECORATION:--1}
-export SDL_VIDEODRIVER=${SDL_VIDEODRIVER:-wayland}
-export TERMINAL=${TERMINAL:-$(whence -p konsole footclient urxvt xterm)[(f)1]}
 
 ### imports
 autoload -Uz zmv
@@ -143,7 +153,7 @@ if [[ ! -v _sev_force_zkbd && ( -v terminfo || -v termcap ) ]] {
     if [[ -n $keymap ]] {
         source $keymap
     } else {
-        echo "Failed to source keymap file $keymap" >&2
+        echo -E "Failed to source keymap file $keymap" >&2
     }
     unfunction find_keymap; unset keymap
 }
@@ -190,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'
@@ -205,9 +229,24 @@ 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'
+alias sm='noglob zmv -Wip"sudo mv"'
+alias sc='noglob zmv -Wip"sudo cp"'
+alias sl='noglob zmv -Wip"sudo ln"'
 if [[ "$OSTYPE" =~ '^freebsd' ]] {
     # don't confirm if only a few files are deleted
     alias rm='rm -I'
@@ -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,14 +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}})
@@ -265,12 +315,28 @@ if [[ -v commands[zoxide] ]] {
     eval "${$(zoxide init zsh):s#_files -/#_cd#}"
     alias cd=z
 }
+alias cd..=up
 ## dotfiles
-alias dfu='d=${$(echo ~/.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\\"
@@ -339,7 +405,7 @@ case $OSTYPE; in
         function vol {
             if [[ -z "$1" ]] {
                 for x in $(mixerctl -a | grep 'outputs\.master'); do
-                    echo $x
+                    echo -E - $x
                 done
                 return
             }
@@ -356,5 +422,8 @@ esac
 autoload -Uz promptinit && promptinit
 prompt arrows
 
+### plugins
+load-plugins zshrc
+
 ### load site-specific
 load-site-dotfile zshrc
This page took 0.043591 seconds and 4 git commands to generate.