diff --git a/zsh/distro/archlinux.base.zsh b/zsh/distro/archlinux.base.zsh index 9f7bd4e..0bee41d 100644 --- a/zsh/distro/archlinux.base.zsh +++ b/zsh/distro/archlinux.base.zsh @@ -21,13 +21,13 @@ setopt autocd setopt inc_append_history setopt histignorespace # Ignore putting in history commands beginning with a space -#zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # Case insensitive completion +zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # Case insensitive completion zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" # Color completion zstyle ':completion:*' rehash true # automatically updates new paths # Speed completion zstyle ':completion:*' accept-exact '*(N)' -#zstyle ':completion:*' use-cache on -#zstyle ':completion:*' cache-path ~/.zsh/cache +zstyle ':completion:*' use-cache on +zstyle ':completion:*' cache-path ~/.zsh/cache # History HISTFILE=~/.zhistory diff --git a/zsh/distro/archlinux.nocasecomp.zsh b/zsh/distro/archlinux.nocasecomp.zsh new file mode 100644 index 0000000..9f7bd4e --- /dev/null +++ b/zsh/distro/archlinux.nocasecomp.zsh @@ -0,0 +1,50 @@ +# Theming +autoload -Uz promptinit vcs_info +promptinit +zstyle ':vcs_info:*' enable git svn +setopt prompt_subst # Prompting +if [[ -f /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme ]]; then + source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme +else + source ${DOTFILES}/zsh/themes/gentoo.zsh-theme +fi + +setopt correct # Auto correct mistakes +setopt extendedglob # allows regexp with * +setopt nocaseglob # Case insensitive globbing +setopt rcexpandparam # array expansion with parameters +setopt nocheckjobs # No warn about running processes on exiting +setopt nobeep +setopt appendhistory +setopt histignorealldups +setopt autocd +setopt inc_append_history +setopt histignorespace # Ignore putting in history commands beginning with a space + +#zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # Case insensitive completion +zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" # Color completion +zstyle ':completion:*' rehash true # automatically updates new paths +# Speed completion +zstyle ':completion:*' accept-exact '*(N)' +#zstyle ':completion:*' use-cache on +#zstyle ':completion:*' cache-path ~/.zsh/cache + +# History +HISTFILE=~/.zhistory +HISTSIZE=10000 +SAVEHIST=10000 +WORDCHARS=${WORDCHARS//\/[&.;]} + +# Color man pages +export LESS_TERMCAP_mb=$'\E[01;32m' +export LESS_TERMCAP_md=$'\E[01;32m' +export LESS_TERMCAP_me=$'\E[0m' +export LESS_TERMCAP_se=$'\E[0m' +export LESS_TERMCAP_so=$'\E[01;47;34m' +export LESS_TERMCAP_ue=$'\E[0m' +export LESS_TERMCAP_us=$'\E[01;36m' +export LESS=-R + +# Importing other packages +[ -e /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh ] && source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh +[ -e /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ] && source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh diff --git a/zsh/distro/manjaro.nocasecomp.zsh b/zsh/distro/manjaro.nocasecomp.zsh new file mode 100644 index 0000000..39530b5 --- /dev/null +++ b/zsh/distro/manjaro.nocasecomp.zsh @@ -0,0 +1,302 @@ +## Options section +setopt correct # Auto correct mistakes +setopt extendedglob # Extended globbing. Allows using regular expressions with * +setopt nocaseglob # Case insensitive globbing +setopt rcexpandparam # Array expension with parameters +setopt nocheckjobs # Don't warn about running processes when exiting +setopt numericglobsort # Sort filenames numerically when it makes sense +setopt nobeep # No beep +setopt appendhistory # Immediately append history instead of overwriting +setopt histignorealldups # If a new command is a duplicate, remove the older one +setopt autocd # if only directory path is entered, cd there. +setopt inc_append_history # save commands are added to the history immediately, otherwise only when shell exits. +setopt histignorespace # Don't save commands that start with space + +#zstyle ':completion:*' matcher-list 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' # Case insensitive tab completion +zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" # Colored completion (different colors for dirs/files/etc) +zstyle ':completion:*' rehash true # automatically find new executables in path +zstyle ':completion:*' menu select # Highlight menu selection +# Speed up completions +zstyle ':completion:*' accept-exact '*(N)' +#zstyle ':completion:*' use-cache on +#zstyle ':completion:*' cache-path ~/.zsh/cache +HISTFILE=~/.zhistory +HISTSIZE=10000 +SAVEHIST=10000 +#export EDITOR=/usr/bin/nano +#export VISUAL=/usr/bin/nano +WORDCHARS=${WORDCHARS//\/[&.;]} # Don't consider certain characters part of the word + + +## Keybindings section +bindkey -e +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 +fi +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 +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 + +# 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 + +## Alias section +alias cp="cp -i" # Confirm before overwriting something +alias df='df -h' # Human-readable sizes +alias free='free -m' # Show sizes in MB +alias gitu='git add . && git commit && git push' + +# Theming section +autoload -U compinit colors zcalc +compinit -d +colors + +# Color man pages +export LESS_TERMCAP_mb=$'\E[01;32m' +export LESS_TERMCAP_md=$'\E[01;32m' +export LESS_TERMCAP_me=$'\E[0m' +export LESS_TERMCAP_se=$'\E[0m' +export LESS_TERMCAP_so=$'\E[01;47;34m' +export LESS_TERMCAP_ue=$'\E[0m' +export LESS_TERMCAP_us=$'\E[01;36m' +export LESS=-R + + +## Plugins section: Enable fish style features +# Use syntax highlighting +source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +# Use history substring search +source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh +# bind UP and DOWN arrow keys to history substring search +zmodload zsh/terminfo +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 + +# 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:%~" + +# 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 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* + job_id=${(k)jobtexts[(r)*${(Q)jobspec}*]} ;; + *) # %string argument: + # use $jobtexts to match for a job whose command *starts with* + 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%<<' +} + +autoload -U add-zsh-hook +add-zsh-hook precmd mzc_termsupport_precmd +add-zsh-hook preexec mzc_termsupport_preexec + + +# Required for $langinfo +zmodload zsh/langinfo + +# 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] [ ...] +# +# -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] + local safe_encodings + safe_encodings=(UTF-8 utf8 US-ASCII) + if [[ -z ${safe_encodings[(r)$encoding]} ]]; then + str=$(echo -E "$str" | iconv -f $encoding -t UTF-8) + if [[ $? != 0 ]]; then + echo "Error converting string from $encoding to UTF-8" >&2 + return 1 + fi + fi + + # 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" +} + +# 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}" +} + +# 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 + +# File and Dir colors for ls and other outputs +export LS_OPTIONS='--color=auto' +eval "$(dircolors -b)" +alias ls='ls $LS_OPTIONS' + +source /usr/share/zsh/manjaro-zsh-prompt