.zshrc 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. # SHELL OPTIONS
  2. setopt autocd correct globdots extendedglob nomatch notify \
  3. share_history inc_append_history hist_expire_dups_first hist_reduce_blanks \
  4. hist_find_no_dups hist_verify extended_history auto_pushd pushd_ignore_dups \
  5. prompt_subst
  6. unsetopt beep
  7. bindkey -e
  8. # COMPLETION
  9. local compdump=${XDG_CACHE_HOME:-$HOME/.cache}/zsh/zcompdump-${HOST}-${ZSH_VERSION}
  10. [[ -d ${compdump:h} ]] || mkdir -p ${compdump:h}
  11. zstyle ':completion:*' menu select
  12. zstyle ':completion:*' gain-privileges 1
  13. zstyle ':completion:*:descriptions' format '%U%B%d%b%u'
  14. zmodload zsh/complist
  15. autoload -Uz compinit && compinit -d "$compdump"
  16. # HISTORY
  17. HISTFILE=${XDG_STATE_HOME:-$HOME/.local/state}/zsh/history
  18. [[ -d $HISTFILE:h ]] || mkdir -p $HISTFILE:h
  19. HISTSIZE=100000
  20. SAVEHIST=100000
  21. autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
  22. zle -N up-line-or-beginning-search
  23. zle -N down-line-or-beginning-search
  24. # COLORS
  25. autoload -Uz colors && colors
  26. # PROMPT
  27. if [[ $EUID -eq 0 ]]; then
  28. user_color=red
  29. else
  30. user_color=white
  31. fi
  32. if [[ -v TOOLBOX_PATH ]]; then
  33. host_color=magenta
  34. elif [[ -v DISTROBOX_ENTER_PATH ]]; then
  35. host_color=15
  36. else
  37. case $HOSTNAME in
  38. laptop) host_color=green ;;
  39. workstation) host_color=red ;;
  40. bryan-pc) host_color=cyan ;;
  41. time4vps) host_color=blue ;;
  42. racknerd) host_color=yellow ;;
  43. htpc) host_color=214 ;;
  44. hartmanlab) host_color=magenta ;;
  45. router) host_color=blue ;;
  46. ax6000) host_color=87 ;;
  47. home-router) host_color=218 ;;
  48. vm-fedora*) host_color=57 ;;
  49. *) host_color=white ;;
  50. esac
  51. fi
  52. _git_prompt() {
  53. local br
  54. if br=$(git symbolic-ref --short HEAD 2>/dev/null); then
  55. print -n " %F{242}($br)%f"
  56. fi
  57. }
  58. PROMPT='[%F{'$user_color'}%n%f@%F{'$host_color'}%m%f]%~$(_git_prompt)%(!.#.$) '
  59. RPROMPT='%*'
  60. precmd() { print -Pn "\e]0;%n@%m: ${PWD/#$HOME/~}\a" }
  61. # HOSTNAME (OpenWRT)
  62. [[ -z $HOSTNAME ]] && HOSTNAME=$(noglob uci get system.@system[0].hostname 2>/dev/null)
  63. # PATHS
  64. typeset -U path PATH
  65. path=(
  66. $HOME/bin
  67. $HOME/.local/bin
  68. $HOME/Documents/develop/scripts/shell
  69. ${${GOPATH:-$HOME/go}//://bin:}/bin
  70. $path
  71. )
  72. export PATH R_LIBS_USER="$HOME/R/qhtcp-workflow"
  73. # ALIASES
  74. alias ll='ls -lh'
  75. alias la='ls -A'
  76. alias vmd='vmd -nt'
  77. alias dnf-list-files='dnf repoquery -l'
  78. alias gedit='gnome-text-editor'
  79. alias xclip='xclip -selection c'
  80. alias pdoman='podman'
  81. alias workon='virtualenv-workon'
  82. alias git-list='git ls-tree -r HEAD --name-only'
  83. alias chatgpt='chatgpt --model gpt-4o'
  84. # KEYBINDINGS
  85. typeset -g -A key
  86. for k v in \
  87. Home khome End kend Insert kich1 Backspace kbs Delete kdch1 \
  88. Up kcuu1 Down kcud1 Left kcub1 Right kcuf1 PageUp kpp PageDown knp ShiftTab kcbt; do
  89. [[ -n ${terminfo[$v]} ]] && key[$k]=${terminfo[$v]}
  90. done
  91. bindkey -- ${key[Home]-} beginning-of-line
  92. bindkey -- ${key[End]-} end-of-line
  93. bindkey -- ${key[Insert]-} overwrite-mode
  94. bindkey -- ${key[Backspace]-} backward-delete-char
  95. bindkey -- ${key[Delete]-} delete-char
  96. bindkey -- ${key[Left]-} backward-char
  97. bindkey -- ${key[Right]-} forward-char
  98. bindkey -- ${key[PageUp]-} beginning-of-buffer-or-history
  99. bindkey -- ${key[PageDown]-} end-of-buffer-or-history
  100. bindkey -- ${key[ShiftTab]-} reverse-menu-complete
  101. bindkey -- ${key[Up]-} up-line-or-beginning-search
  102. bindkey -- ${key[Down]-} down-line-or-beginning-search
  103. if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then
  104. autoload -Uz add-zle-hook-widget
  105. zle_app_start() { echoti smkx }
  106. zle_app_finish() { echoti rmkx }
  107. add-zle-hook-widget zle-line-init zle_app_start
  108. add-zle-hook-widget zle-line-finish zle_app_finish
  109. fi
  110. # FUNCTIONS
  111. podman-update-images() {
  112. podman images --format '{{.Repository}}' | grep -v '^<none>$' | xargs -r -L1 podman pull
  113. }
  114. extract() {
  115. [[ $# -eq 0 ]] && { echo "usage: extract <archive...>" >&2; return 1; }
  116. for a in "$@"; do
  117. [[ ! -f $a ]] && { echo "$a: not a file" >&2; continue; }
  118. case $a in
  119. *.tar.bz2|*.tbz2) tar xvjf "$a" ;;
  120. *.tar.gz|*.tgz) tar xvzf "$a" ;;
  121. *.tar.xz) tar --xz -xvf "$a" ;;
  122. *.tar.zst) tar --use-compress-program=unzstd -xvf "$a" ;;
  123. *.tar.lz) tar --lzip -xvf "$a" ;;
  124. *.tar) tar xvf "$a" ;;
  125. *.bz2) bunzip2 "$a" ;;
  126. *.gz) gunzip "$a" ;;
  127. *.xz) unxz "$a" ;;
  128. *.zst) unzstd "$a" ;;
  129. *.lz) unlz "$a" ;;
  130. *.zip) unzip "$a" ;;
  131. *.rar) unrar x "$a" ;;
  132. *.7z) 7z x "$a" ;;
  133. *.Z) uncompress "$a" ;;
  134. *) echo "$a: cannot extract" ;;
  135. esac
  136. done
  137. }
  138. buildah-prune() { buildah rm --all; }