diff options
Diffstat (limited to 'zsh/zshrc')
| -rw-r--r-- | zsh/zshrc | 290 |
1 files changed, 37 insertions, 253 deletions
@@ -10,7 +10,9 @@ if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]] fi source ~/.config/zsh/p10k/powerlevel10k.zsh-theme -source ~/.config/zsh/p10k.zsh +source ~/.config/zsh/conf.d/*.zsh +source ~/.config/zsh/termsupport.zsh +source ~/.config/zsh/title.zsh antigen bundle zsh-users/zsh-syntax-highlighting antigen bundle zsh-users/zsh-history-substring-search @@ -20,8 +22,7 @@ antigen bundle ael-code/zsh-colored-man-pages antigen theme romkatv/powerlevel10k antigen apply -# Exports - +# {{{ Exports #export GOPROXY=https://proxy.neonxp.ru export GOPRIVATE=devopar.hippoparking.ru,gitlab.sovcombank.group export EDITOR="nvim" @@ -36,9 +37,9 @@ export LS_OPTIONS='--color=auto' eval "$(dircolors -b)" fpath+="~/.config/zsh/comp" +# }}} - -# Aliases +# {{{ Aliases alias ls='ls $LS_OPTIONS -F' alias l='ls $LS_OPTIONS -F' alias j="sudo journalctl" @@ -57,13 +58,14 @@ alias gitu='git add . && git commit && git push' alias g=git alias nsh='wl-paste | curl -d @- https://nixshare.ru/upload 2>/dev/null | wl-copy' alias p=python3 - [[ ! -f `which exa` ]] || alias ls="exa" && alias ll="exa -l" +# }}} -# Functions +# {{{ Functions function tk() { mkdir -p $1; cd $1; } +# }}} -## Options section +# {{{ Options section setopt correct # Auto correct mistakes setopt extendedglob # Extended globbing. Allows using regular expressions with * setopt nocaseglob # Case insensitive globbing @@ -100,278 +102,60 @@ HISTSIZE=100000 SAVEHIST=100000 WORDCHARS=${WORDCHARS//\/[&.;]} - autoload -U compinit colors zcalc compinit -d -# Runs before showing the prompt -function mzc_termsupport_precmd { - [[ "${DISABLE_AUTO_TITLE:-}" == true ]] && return - title $ZSH_THEME_TERM_TAB_TITLE_IDLE $ZSH_THEME_TERM_TITLE_IDLE -} - -# Runs before executing the command -function mzc_termsupport_preexec { - [[ "${DISABLE_AUTO_TITLE:-}" == true ]] && return - - emulate -L zsh - - # split command into array of arguments - local -a cmdargs - cmdargs=("${(z)2}") - # if running fg, extract the command from the job description - if [[ "${cmdargs[1]}" = fg ]]; then - # get the job id from the first argument passed to the fg command - local job_id jobspec="${cmdargs[2]#%}" - # logic based on jobs arguments: - # http://zsh.sourceforge.net/Doc/Release/Jobs-_0026-Signals.html#Jobs - # https://www.zsh.org/mla/users/2007/msg00704.html - case "$jobspec" in - <->) # %number argument: - # use the same <number> passed as an argument - job_id=${jobspec} ;; - ""|%|+) # empty, %% or %+ argument: - # use the current job, which appears with a + in $jobstates: - # suspended:+:5071=suspended (tty output) - job_id=${(k)jobstates[(r)*:+:*]} ;; - -) # %- argument: - # use the previous job, which appears with a - in $jobstates: - # suspended:-:6493=suspended (signal) - job_id=${(k)jobstates[(r)*:-:*]} ;; - [?]*) # %?string argument: - # use $jobtexts to match for a job whose command *contains* <string> - job_id=${(k)jobtexts[(r)*${(Q)jobspec}*]} ;; - *) # %string argument: - # use $jobtexts to match for a job whose command *starts with* <string> - job_id=${(k)jobtexts[(r)${(Q)jobspec}*]} ;; - esac - - # override preexec function arguments with job command - if [[ -n "${jobtexts[$job_id]}" ]]; then - 1="${jobtexts[$job_id]}" - 2="${jobtexts[$job_id]}" - fi - fi - - # cmd name only, or if this is sudo or ssh, the next cmd - local CMD=${1[(wr)^(*=*|sudo|ssh|mosh|rake|-*)]:gs/%/%%} - local LINE="${2:gs/%/%%}" - - title '$CMD' '%100>...>$LINE%<<' -} - -# Emits the control sequence to notify many terminal emulators -# of the cwd -# -# Identifies the directory using a file: URI scheme, including -# the host name to disambiguate local vs. remote paths. -function mzc_termsupport_cwd { - # Percent-encode the host and path names. - local URL_HOST URL_PATH - URL_HOST="$(zsh_urlencode -P $HOST)" || return 1 - URL_PATH="$(zsh_urlencode -P $PWD)" || return 1 - - # common control sequence (OSC 7) to set current host and path - printf "\e]7;%s\a" "file://${URL_HOST}${URL_PATH}" -} - autoload -U add-zsh-hook add-zsh-hook precmd mzc_termsupport_precmd add-zsh-hook preexec mzc_termsupport_preexec -# Use a precmd hook instead of a chpwd hook to avoid contaminating output -# i.e. when a script or function changes directory without `cd -q`, chpwd -# will be called the output may be swallowed by the script or function. add-zsh-hook precmd mzc_termsupport_cwd -source ~/.config/zsh/conf.d/*.zsh - colors - -## Plugins section: Enable fish style features -# Use syntax highlighting -#source ${HOME}/.zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -# Use history substring search -#source ${HOME}/.zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh -# bind UP and DOWN arrow keys to history substring search zmodload zsh/terminfo +# }}} + +# {{{ Binds bindkey "$terminfo[kcuu1]" history-substring-search-up bindkey "$terminfo[kcud1]" history-substring-search-down bindkey "^[[A" history-substring-search-up bindkey "^[[B" history-substring-search-down bindkey -e -bindkey "^[[7~" beginning-of-line # Home key -bindkey "^[[H" beginning-of-line # Home key +bindkey "^[[7~" beginning-of-line # Home key +bindkey "^[[H" beginning-of-line # Home key if [[ "${terminfo[khome]}" != "" ]]; then - bindkey "${terminfo[khome]}" beginning-of-line # [Home] - Go to beginning of line + bindkey "${terminfo[khome]}" beginning-of-line # [Home] - Go to beginning fi -bindkey "^[[8~" end-of-line # End key -bindkey "^[[F" end-of-line # End key +bindkey "^[[8~" end-of-line # End key +bindkey "^[[F" end-of-line # End key if [[ "${terminfo[kend]}" != "" ]]; then - bindkey "${terminfo[kend]}" end-of-line # [End] - Go to end of line + bindkey "${terminfo[kend]}" end-of-line # [End] - Go to end of line fi -bindkey "^[[2~" overwrite-mode # Insert key -bindkey "^[[3~" delete-char # Delete key -bindkey "^[[C" forward-char # Right key -bindkey "^[[D" backward-char # Left key -bindkey "^[[5~" history-beginning-search-backward # Page up key -bindkey "^[[6~" history-beginning-search-forward # Page down key +bindkey "^[[2~" overwrite-mode # Insert key +bindkey "^[[3~" delete-char # Delete key +bindkey "^[[C" forward-char # Right key +bindkey "^[[D" backward-char # Left key +bindkey "^[[5~" history-beginning-search-backward # Page up key +bindkey "^[[6~" history-beginning-search-forward # Page down key # Navigate words with ctrl+arrow keys -bindkey "^[Oc" forward-word # -bindkey "^[Od" backward-word # -bindkey "^[[1;5D" backward-word # -bindkey "^[[1;5C" forward-word # -bindkey "^H" backward-kill-word # delete previous word with ctrl+backspace -bindkey "^[[Z" undo # Shift+tab undo last action +bindkey "^[Oc" forward-word +bindkey "^[Od" backward-word +bindkey "^[[1;5D" backward-word +bindkey "^[[1;5C" forward-word +bindkey "^H" backward-kill-word # delete previous word with ctrl+backspace +bindkey "^[[Z" undo # Shift+tab undo last action # ctrl + space accept suggestion bindkey "^ " autosuggest-accept - -dotenv() { - if [ $# -eq 0 ]; then - [ -f .env.gpg ] && set -- .env.gpg "$@" - [ -f .env ] && set -- .env "$@" - fi - - set -a - while [ $# -gt 0 ]; do - echo "dotenv: Loading $1" - case "$1" in - *.gpg) - eval "$(gpg --quiet --decrypt --yes "$1")" - ;; - */*) - . "$1" - ;; - *) - . "./$1" - esac - shift - done - set +a -} - -# Set terminal window and tab/icon title -# -# usage: title short_tab_title [long_window_title] -# -# See: http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#ss3.1 -# Fully supports screen and probably most modern xterm and rxvt -# (In screen, only short_tab_title is used) -function title { - emulate -L zsh - setopt prompt_subst - - [[ "$EMACS" == *term* ]] && return - - # if $2 is unset use $1 as default - # if it is set and empty, leave it as is - : ${2=$1} - - case "$TERM" in - xterm*|putty*|rxvt*|konsole*|ansi|mlterm*|alacritty|kitty|wezterm|st*) - print -Pn "\e]2;${2:q}\a" # set window name - print -Pn "\e]1;${1:q}\a" # set tab name - ;; - screen*|tmux*) - print -Pn "\ek${1:q}\e\\" # set screen hardstatus - ;; - *) - # Try to use terminfo to set the title - # If the feature is available set title - if [[ -n "$terminfo[fsl]" ]] && [[ -n "$terminfo[tsl]" ]]; then - echoti tsl - print -Pn "$1" - echoti fsl - fi - ;; - esac -} +# }}} ZSH_THEME_TERM_TAB_TITLE_IDLE="%15<..<%~%<<" #15 char left truncated PWD ZSH_THEME_TERM_TITLE_IDLE="%n@%m:%~" - -# URL-encode a string -# -# Encodes a string using RFC 2396 URL-encoding (%-escaped). -# See: https://www.ietf.org/rfc/rfc2396.txt -# -# By default, reserved characters and unreserved "mark" characters are -# not escaped by this function. This allows the common usage of passing -# an entire URL in, and encoding just special characters in it, with -# the expectation that reserved and mark characters are used appropriately. -# The -r and -m options turn on escaping of the reserved and mark characters, -# respectively, which allows arbitrary strings to be fully escaped for -# embedding inside URLs, where reserved characters might be misinterpreted. -# -# Prints the encoded string on stdout. -# Returns nonzero if encoding failed. -# -# Usage: -# zsh_urlencode [-r] [-m] [-P] <string> [<string> ...] -# -# -r causes reserved characters (;/?:@&=+$,) to be escaped -# -# -m causes "mark" characters (_.!~*''()-) to be escaped -# -# -P causes spaces to be encoded as '%20' instead of '+' -function zsh_urlencode() { - emulate -L zsh - local -a opts - zparseopts -D -E -a opts r m P - - local in_str="$@" - local url_str="" - local spaces_as_plus - if [[ -z $opts[(r)-P] ]]; then spaces_as_plus=1; fi - local str="$in_str" - - # URLs must use UTF-8 encoding; convert str to UTF-8 if required - local encoding=$langinfo[CODESET] - - - # Use LC_CTYPE=C to process text byte-by-byte - local i byte ord LC_ALL=C - export LC_ALL - local reserved=';/?:@&=+$,' - local mark='_.!~*''()-' - local dont_escape="[A-Za-z0-9" - if [[ -z $opts[(r)-r] ]]; then - dont_escape+=$reserved - fi - # $mark must be last because of the "-" - if [[ -z $opts[(r)-m] ]]; then - dont_escape+=$mark - fi - dont_escape+="]" - - # Implemented to use a single printf call and avoid subshells in the loop, - # for performance - local url_str="" - for (( i = 1; i <= ${#str}; ++i )); do - byte="$str[i]" - if [[ "$byte" =~ "$dont_escape" ]]; then - url_str+="$byte" - else - if [[ "$byte" == " " && -n $spaces_as_plus ]]; then - url_str+="+" - else - ord=$(( [##16] #byte )) - url_str+="%$ord" - fi - fi - done - echo -E "$url_str" -} - -if [ -f env.sh ]; then - source ./env.sh -fi - -[[ ! -f ~/.zshrc.local ]] || source ~/.zshrc.local -[[ ! -f ~/.config/zsh/p10k.zsh ]] || source ~/.config/zsh/p10k.zsh - -# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. +# {{{ Overwriting +source ~/.config/zsh/theme.zsh +[[ ! -f env.sh ]] || source ./env.sh +[[ ! -f ~/.zshrc.local.zsh ]] || source ~/.zshrc.local.zsh [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh +# }}} |
