# Snapshot file # Unset all aliases to avoid conflicts with functions unalias -a 2>/dev/null || true # Functions →chroma/-alias.ch () { # undefined builtin autoload -XUz } →chroma/-autoload.ch () { # undefined builtin autoload -XUz } →chroma/-autorandr.ch () { # undefined builtin autoload -XUz } →chroma/-awk.ch () { # undefined builtin autoload -XUz } →chroma/-docker.ch () { # undefined builtin autoload -XUz } →chroma/-example.ch () { # undefined builtin autoload -XUz } →chroma/-fast-theme.ch () { # undefined builtin autoload -XUz } →chroma/-fpath_peq.ch () { # undefined builtin autoload -XUz } →chroma/-git.ch () { # undefined builtin autoload -XUz } →chroma/-grep.ch () { # undefined builtin autoload -XUz } →chroma/-hub.ch () { # undefined builtin autoload -XUz } →chroma/-ionice.ch () { # undefined builtin autoload -XUz } →chroma/-lab.ch () { # undefined builtin autoload -XUz } →chroma/-make.ch () { # undefined builtin autoload -XUz } →chroma/-nice.ch () { # undefined builtin autoload -XUz } →chroma/-nmcli.ch () { # undefined builtin autoload -XUz } →chroma/-node.ch () { # undefined builtin autoload -XUz } →chroma/-ogit.ch () { # undefined builtin autoload -XUz } →chroma/-perl.ch () { # undefined builtin autoload -XUz } →chroma/-precommand.ch () { # undefined builtin autoload -XUz } →chroma/-printf.ch () { # undefined builtin autoload -XUz } →chroma/-ruby.ch () { # undefined builtin autoload -XUz } →chroma/-scp.ch () { # undefined builtin autoload -XUz } →chroma/-sh.ch () { # undefined builtin autoload -XUz } →chroma/-source.ch () { # undefined builtin autoload -XUz } →chroma/-ssh.ch () { # undefined builtin autoload -XUz } →chroma/-subcommand.ch () { # undefined builtin autoload -XUz } →chroma/-subversion.ch () { # undefined builtin autoload -XUz } →chroma/-vim.ch () { # undefined builtin autoload -XUz } →chroma/-whatis.ch () { # undefined builtin autoload -XUz } →chroma/-which.ch () { # undefined builtin autoload -XUz } →chroma/-zinit.ch () { # undefined builtin autoload -XUz } →chroma/main-chroma.ch () { # undefined builtin autoload -XUz } .fast-make-targets () { # undefined builtin autoload -XUz } .fast-read-ini-file () { # undefined builtin autoload -XUz } .fast-run-command () { # undefined builtin autoload -XUz } .fast-run-git-command () { # undefined builtin autoload -XUz } .fast-zts-read-all () { # undefined builtin autoload -XUz } /fshdbg () { print -r -- "$@" >>| /tmp/reply } VCS_INFO_formats () { setopt localoptions noksharrays NO_shwordsplit local msg tmp local -i i local -A hook_com hook_com=(action "$1" action_orig "$1" branch "$2" branch_orig "$2" base "$3" base_orig "$3" staged "$4" staged_orig "$4" unstaged "$5" unstaged_orig "$5" revision "$6" revision_orig "$6" misc "$7" misc_orig "$7" vcs "${vcs}" vcs_orig "${vcs}") hook_com[base-name]="${${hook_com[base]}:t}" hook_com[base-name_orig]="${hook_com[base-name]}" hook_com[subdir]="$(VCS_INFO_reposub ${hook_com[base]})" hook_com[subdir_orig]="${hook_com[subdir]}" : vcs_info-patch-9b9840f2-91e5-4471-af84-9e9a0dc68c1b for tmp in base base-name branch misc revision subdir do hook_com[$tmp]="${hook_com[$tmp]//\%/%%}" done VCS_INFO_hook 'post-backend' if [[ -n ${hook_com[action]} ]] then zstyle -a ":vcs_info:${vcs}:${usercontext}:${rrn}" actionformats msgs (( ${#msgs} < 1 )) && msgs[1]=' (%s)-[%b|%a]%u%c-' else zstyle -a ":vcs_info:${vcs}:${usercontext}:${rrn}" formats msgs (( ${#msgs} < 1 )) && msgs[1]=' (%s)-[%b]%u%c-' fi if [[ -n ${hook_com[staged]} ]] then zstyle -s ":vcs_info:${vcs}:${usercontext}:${rrn}" stagedstr tmp [[ -z ${tmp} ]] && hook_com[staged]='S' || hook_com[staged]=${tmp} fi if [[ -n ${hook_com[unstaged]} ]] then zstyle -s ":vcs_info:${vcs}:${usercontext}:${rrn}" unstagedstr tmp [[ -z ${tmp} ]] && hook_com[unstaged]='U' || hook_com[unstaged]=${tmp} fi if [[ ${quiltmode} != 'standalone' ]] && VCS_INFO_hook "pre-addon-quilt" then local REPLY VCS_INFO_quilt addon hook_com[quilt]="${REPLY}" unset REPLY elif [[ ${quiltmode} == 'standalone' ]] then hook_com[quilt]=${hook_com[misc]} fi (( ${#msgs} > maxexports )) && msgs[$(( maxexports + 1 )),-1]=() for i in {1..${#msgs}} do if VCS_INFO_hook "set-message" $(( $i - 1 )) "${msgs[$i]}" then zformat -f msg ${msgs[$i]} a:${hook_com[action]} b:${hook_com[branch]} c:${hook_com[staged]} i:${hook_com[revision]} m:${hook_com[misc]} r:${hook_com[base-name]} s:${hook_com[vcs]} u:${hook_com[unstaged]} Q:${hook_com[quilt]} R:${hook_com[base]} S:${hook_com[subdir]} msgs[$i]=${msg} else msgs[$i]=${hook_com[message]} fi done hook_com=() backend_misc=() return 0 } acp () { if [[ -z "$1" ]] then unset AWS_DEFAULT_PROFILE AWS_PROFILE AWS_EB_PROFILE unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN echo AWS profile cleared. return fi local -a available_profiles available_profiles=($(aws_profiles)) if [[ -z "${available_profiles[(r)$1]}" ]] then echo "${fg[red]}Profile '$1' not found in '${AWS_CONFIG_FILE:-$HOME/.aws/config}'" >&2 echo "Available profiles: ${(j:, :)available_profiles:-no profiles found}${reset_color}" >&2 return 1 fi local profile="$1" local mfa_token="$2" local aws_access_key_id="$(aws configure get aws_access_key_id --profile $profile)" local aws_secret_access_key="$(aws configure get aws_secret_access_key --profile $profile)" local aws_session_token="$(aws configure get aws_session_token --profile $profile)" local mfa_serial="$(aws configure get mfa_serial --profile $profile)" local sess_duration="$(aws configure get duration_seconds --profile $profile)" if [[ -n "$mfa_serial" ]] then local -a mfa_opt if [[ -z "$mfa_token" ]] then echo -n "Please enter your MFA token for $mfa_serial: " read -r mfa_token fi if [[ -z "$sess_duration" ]] then echo -n "Please enter the session duration in seconds (900-43200; default: 3600, which is the default maximum for a role): " read -r sess_duration fi mfa_opt=(--serial-number "$mfa_serial" --token-code "$mfa_token" --duration-seconds "${sess_duration:-3600}") fi local role_arn="$(aws configure get role_arn --profile $profile)" local sess_name="$(aws configure get role_session_name --profile $profile)" if [[ -n "$role_arn" ]] then aws_command=(aws sts assume-role --role-arn "$role_arn" "${mfa_opt[@]}") local external_id="$(aws configure get external_id --profile $profile)" if [[ -n "$external_id" ]] then aws_command+=(--external-id "$external_id") fi local source_profile="$(aws configure get source_profile --profile $profile)" if [[ -z "$sess_name" ]] then sess_name="${source_profile:-profile}" fi aws_command+=(--profile="${source_profile:-profile}" --role-session-name "${sess_name}") echo "Assuming role $role_arn using profile ${source_profile:-profile}" else aws_command=(aws sts get-session-token --profile="$profile" "${mfa_opt[@]}") echo "Obtaining session token for profile $profile" fi aws_command+=(--query '[Credentials.AccessKeyId,Credentials.SecretAccessKey,Credentials.SessionToken]' --output text) local -a credentials credentials=(${(ps:\t:)"$(${aws_command[@]})"}) if [[ -n "$credentials" ]] then aws_access_key_id="${credentials[1]}" aws_secret_access_key="${credentials[2]}" aws_session_token="${credentials[3]}" fi if [[ -n "${aws_access_key_id}" && -n "$aws_secret_access_key" ]] then export AWS_DEFAULT_PROFILE="$profile" export AWS_PROFILE="$profile" export AWS_EB_PROFILE="$profile" export AWS_ACCESS_KEY_ID="$aws_access_key_id" export AWS_SECRET_ACCESS_KEY="$aws_secret_access_key" if [[ -n "$aws_session_token" ]] then export AWS_SESSION_TOKEN="$aws_session_token" else unset AWS_SESSION_TOKEN fi echo "Switched to AWS Profile: $profile" fi } add-zsh-hook () { emulate -L zsh local -a hooktypes hooktypes=(chpwd precmd preexec periodic zshaddhistory zshexit zsh_directory_name) local usage="Usage: add-zsh-hook hook function\nValid hooks are:\n $hooktypes" local opt local -a autoopts integer del list help while getopts "dDhLUzk" opt do case $opt in (d) del=1 ;; (D) del=2 ;; (h) help=1 ;; (L) list=1 ;; ([Uzk]) autoopts+=(-$opt) ;; (*) return 1 ;; esac done shift $(( OPTIND - 1 )) if (( list )) then typeset -mp "(${1:-${(@j:|:)hooktypes}})_functions" return $? elif (( help || $# != 2 || ${hooktypes[(I)$1]} == 0 )) then print -u$(( 2 - help )) $usage return $(( 1 - help )) fi local hook="${1}_functions" local fn="$2" if (( del )) then if (( ${(P)+hook} )) then if (( del == 2 )) then set -A $hook ${(P)hook:#${~fn}} else set -A $hook ${(P)hook:#$fn} fi if (( ! ${(P)#hook} )) then unset $hook fi fi else if (( ${(P)+hook} )) then if (( ${${(P)hook}[(I)$fn]} == 0 )) then typeset -ga $hook set -A $hook ${(P)hook} $fn fi else typeset -ga $hook set -A $hook $fn fi autoload $autoopts -- $fn fi } agp () { echo $AWS_PROFILE } agr () { echo $AWS_REGION } alias_value () { (( $+aliases[$1] )) && echo $aliases[$1] } asp () { if [[ -z "$1" ]] then unset AWS_DEFAULT_PROFILE AWS_PROFILE AWS_EB_PROFILE AWS_PROFILE_REGION _aws_clear_state echo AWS profile cleared. return fi local -a available_profiles available_profiles=($(aws_profiles)) if [[ -z "${available_profiles[(r)$1]}" ]] then echo "${fg[red]}Profile '$1' not found in '${AWS_CONFIG_FILE:-$HOME/.aws/config}'" >&2 echo "Available profiles: ${(j:, :)available_profiles:-no profiles found}${reset_color}" >&2 return 1 fi export AWS_DEFAULT_PROFILE=$1 export AWS_PROFILE=$1 export AWS_EB_PROFILE=$1 export AWS_PROFILE_REGION=$(aws configure get region) _aws_update_state if [[ "$2" == "login" ]] then if [[ -n "$3" ]] then aws sso login --sso-session $3 else aws sso login fi elif [[ "$2" == "logout" ]] then aws sso logout fi } asr () { if [[ -z "$1" ]] then unset AWS_DEFAULT_REGION AWS_REGION _aws_update_state echo AWS region cleared. return fi local -a available_regions available_regions=($(aws_regions)) if [[ -z "${available_regions[(r)$1]}" ]] then echo "${fg[red]}Available regions: \n$(aws_regions)" return 1 fi export AWS_REGION=$1 export AWS_DEFAULT_REGION=$1 _aws_update_state } aws_change_access_key () { if [[ -z "$1" ]] then echo "usage: $0 " return 1 fi local profile="$1" local original_aws_access_key_id="$(aws configure get aws_access_key_id --profile $profile)" asp "$profile" || return 1 echo "Generating a new access key pair for you now." if aws --no-cli-pager iam create-access-key then echo "Insert the newly generated credentials when asked." aws --no-cli-pager configure --profile $profile else echo "Current access keys:" aws --no-cli-pager iam list-access-keys echo "Profile \"${profile}\" is currently using the $original_aws_access_key_id key. You can delete an old access key by running \`aws --profile $profile iam delete-access-key --access-key-id AccessKeyId\`" return 1 fi read -q "yn?Would you like to disable your previous access key (${original_aws_access_key_id}) now? " case $yn in ([Yy]*) echo -n "\nDisabling access key ${original_aws_access_key_id}..." if aws --no-cli-pager iam update-access-key --access-key-id ${original_aws_access_key_id} --status Inactive then echo "done." else echo "\nFailed to disable ${original_aws_access_key_id} key." fi ;; (*) echo "" ;; esac echo "You can now safely delete the old access key by running \`aws --profile $profile iam delete-access-key --access-key-id ${original_aws_access_key_id}\`" echo "Your current keys are:" aws --no-cli-pager iam list-access-keys } aws_profiles () { aws --no-cli-pager configure list-profiles 2> /dev/null && return [[ -r "${AWS_CONFIG_FILE:-$HOME/.aws/config}" ]] || return 1 grep --color=never -Eo '\[.*\]' "${AWS_CONFIG_FILE:-$HOME/.aws/config}" | sed -E 's/^[[:space:]]*\[(profile)?[[:space:]]*([^[:space:]]+)\][[:space:]]*$/\2/g' } aws_prompt_info () { local _aws_to_show local region="${AWS_REGION:-${AWS_DEFAULT_REGION:-$AWS_PROFILE_REGION}}" if [[ -n "$AWS_PROFILE" ]] then _aws_to_show+="${ZSH_THEME_AWS_PROFILE_PREFIX=""}" fi if [[ -n "$region" ]] then [[ -n "$_aws_to_show" ]] && _aws_to_show+="${ZSH_THEME_AWS_DIVIDER=" "}" _aws_to_show+="${ZSH_THEME_AWS_REGION_PREFIX=""}" fi echo "$_aws_to_show" } aws_regions () { local region if [[ -n $AWS_DEFAULT_REGION ]] then region="$AWS_DEFAULT_REGION" elif [[ -n $AWS_REGION ]] then region="$AWS_REGION" else region="us-west-1" fi if [[ -n $AWS_DEFAULT_PROFILE || -n $AWS_PROFILE ]] then aws ec2 describe-regions --region $region | grep RegionName | awk -F ':' '{gsub(/"/, "", $2);gsub(/,/, "", $2);gsub(/ /, "", $2); print $2}' else echo "You must specify a AWS profile." fi } azure_prompt_info () { return 1 } bashcompinit () { # undefined builtin autoload -XUz } bracketed-paste-magic () { # undefined builtin autoload -XUz } bzr_prompt_info () { local bzr_branch bzr_branch=$(bzr nick 2>/dev/null) || return if [[ -n "$bzr_branch" ]] then local bzr_dirty="" if [[ -n $(bzr status 2>/dev/null) ]] then bzr_dirty=" %{$fg[red]%}*%{$reset_color%}" fi printf "%s%s%s%s" "$ZSH_THEME_SCM_PROMPT_PREFIX" "bzr::${bzr_branch##*:}" "$bzr_dirty" "$ZSH_THEME_GIT_PROMPT_SUFFIX" fi } chruby_prompt_info () { return 1 } clipcopy () { unfunction clipcopy clippaste detect-clipboard || true "$0" "$@" } clippaste () { unfunction clipcopy clippaste detect-clipboard || true "$0" "$@" } colors () { emulate -L zsh typeset -Ag color colour color=(00 none 01 bold 02 faint 22 normal 03 italic 23 no-italic 04 underline 24 no-underline 05 blink 25 no-blink 07 reverse 27 no-reverse 08 conceal 28 no-conceal 30 black 40 bg-black 31 red 41 bg-red 32 green 42 bg-green 33 yellow 43 bg-yellow 34 blue 44 bg-blue 35 magenta 45 bg-magenta 36 cyan 46 bg-cyan 37 white 47 bg-white 39 default 49 bg-default) local k for k in ${(k)color} do color[${color[$k]}]=$k done for k in ${color[(I)3?]} do color[fg-${color[$k]}]=$k done for k in grey gray do color[$k]=${color[black]} color[fg-$k]=${color[$k]} color[bg-$k]=${color[bg-black]} done colour=(${(kv)color}) local lc=$'\e[' rc=m typeset -Hg reset_color bold_color reset_color="$lc${color[none]}$rc" bold_color="$lc${color[bold]}$rc" typeset -AHg fg fg_bold fg_no_bold for k in ${(k)color[(I)fg-*]} do fg[${k#fg-}]="$lc${color[$k]}$rc" fg_bold[${k#fg-}]="$lc${color[bold]};${color[$k]}$rc" fg_no_bold[${k#fg-}]="$lc${color[normal]};${color[$k]}$rc" done typeset -AHg bg bg_bold bg_no_bold for k in ${(k)color[(I)bg-*]} do bg[${k#bg-}]="$lc${color[$k]}$rc" bg_bold[${k#bg-}]="$lc${color[bold]};${color[$k]}$rc" bg_no_bold[${k#bg-}]="$lc${color[normal]};${color[$k]}$rc" done } compaudit () { # undefined builtin autoload -XUz /usr/share/zsh/functions/Completion } compdef () { local opt autol type func delete eval new i ret=0 cmd svc local -a match mbegin mend emulate -L zsh setopt extendedglob if (( ! $# )) then print -u2 "$0: I need arguments" return 1 fi while getopts "anpPkKde" opt do case "$opt" in (a) autol=yes ;; (n) new=yes ;; ([pPkK]) if [[ -n "$type" ]] then print -u2 "$0: type already set to $type" return 1 fi if [[ "$opt" = p ]] then type=pattern elif [[ "$opt" = P ]] then type=postpattern elif [[ "$opt" = K ]] then type=widgetkey else type=key fi ;; (d) delete=yes ;; (e) eval=yes ;; esac done shift OPTIND-1 if (( ! $# )) then print -u2 "$0: I need arguments" return 1 fi if [[ -z "$delete" ]] then if [[ -z "$eval" ]] && [[ "$1" = *\=* ]] then while (( $# )) do if [[ "$1" = *\=* ]] then cmd="${1%%\=*}" svc="${1#*\=}" func="$_comps[${_services[(r)$svc]:-$svc}]" [[ -n ${_services[$svc]} ]] && svc=${_services[$svc]} [[ -z "$func" ]] && func="${${_patcomps[(K)$svc][1]}:-${_postpatcomps[(K)$svc][1]}}" if [[ -n "$func" ]] then _comps[$cmd]="$func" _services[$cmd]="$svc" else print -u2 "$0: unknown command or service: $svc" ret=1 fi else print -u2 "$0: invalid argument: $1" ret=1 fi shift done return ret fi func="$1" [[ -n "$autol" ]] && autoload -rUz "$func" shift case "$type" in (widgetkey) while [[ -n $1 ]] do if [[ $# -lt 3 ]] then print -u2 "$0: compdef -K requires " return 1 fi [[ $1 = _* ]] || 1="_$1" [[ $2 = .* ]] || 2=".$2" [[ $2 = .menu-select ]] && zmodload -i zsh/complist zle -C "$1" "$2" "$func" if [[ -n $new ]] then bindkey "$3" | IFS=$' \t' read -A opt [[ $opt[-1] = undefined-key ]] && bindkey "$3" "$1" else bindkey "$3" "$1" fi shift 3 done ;; (key) if [[ $# -lt 2 ]] then print -u2 "$0: missing keys" return 1 fi if [[ $1 = .* ]] then [[ $1 = .menu-select ]] && zmodload -i zsh/complist zle -C "$func" "$1" "$func" else [[ $1 = menu-select ]] && zmodload -i zsh/complist zle -C "$func" ".$1" "$func" fi shift for i do if [[ -n $new ]] then bindkey "$i" | IFS=$' \t' read -A opt [[ $opt[-1] = undefined-key ]] || continue fi bindkey "$i" "$func" done ;; (*) while (( $# )) do if [[ "$1" = -N ]] then type=normal elif [[ "$1" = -p ]] then type=pattern elif [[ "$1" = -P ]] then type=postpattern else case "$type" in (pattern) if [[ $1 = (#b)(*)=(*) ]] then _patcomps[$match[1]]="=$match[2]=$func" else _patcomps[$1]="$func" fi ;; (postpattern) if [[ $1 = (#b)(*)=(*) ]] then _postpatcomps[$match[1]]="=$match[2]=$func" else _postpatcomps[$1]="$func" fi ;; (*) if [[ "$1" = *\=* ]] then cmd="${1%%\=*}" svc=yes else cmd="$1" svc= fi if [[ -z "$new" || -z "${_comps[$1]}" ]] then _comps[$cmd]="$func" [[ -n "$svc" ]] && _services[$cmd]="${1#*\=}" fi ;; esac fi shift done ;; esac else case "$type" in (pattern) unset "_patcomps[$^@]" ;; (postpattern) unset "_postpatcomps[$^@]" ;; (key) print -u2 "$0: cannot restore key bindings" return 1 ;; (*) unset "_comps[$^@]" ;; esac fi } compdump () { # undefined builtin autoload -XUz /usr/share/zsh/functions/Completion } compgen () { local opts prefix suffix job OPTARG OPTIND ret=1 local -a name res results jids local -A shortopts emulate -L sh setopt kshglob noshglob braceexpand nokshautoload shortopts=(a alias b builtin c command d directory e export f file g group j job k keyword u user v variable) while getopts "o:A:G:C:F:P:S:W:X:abcdefgjkuv" name do case $name in ([abcdefgjkuv]) OPTARG="${shortopts[$name]}" ;& (A) case $OPTARG in (alias) results+=("${(k)aliases[@]}") ;; (arrayvar) results+=("${(k@)parameters[(R)array*]}") ;; (binding) results+=("${(k)widgets[@]}") ;; (builtin) results+=("${(k)builtins[@]}" "${(k)dis_builtins[@]}") ;; (command) results+=("${(k)commands[@]}" "${(k)aliases[@]}" "${(k)builtins[@]}" "${(k)functions[@]}" "${(k)reswords[@]}") ;; (directory) setopt bareglobqual results+=(${IPREFIX}${PREFIX}*${SUFFIX}${ISUFFIX}(N-/)) setopt nobareglobqual ;; (disabled) results+=("${(k)dis_builtins[@]}") ;; (enabled) results+=("${(k)builtins[@]}") ;; (export) results+=("${(k)parameters[(R)*export*]}") ;; (file) setopt bareglobqual results+=(${IPREFIX}${PREFIX}*${SUFFIX}${ISUFFIX}(N)) setopt nobareglobqual ;; (function) results+=("${(k)functions[@]}") ;; (group) emulate zsh _groups -U -O res emulate sh setopt kshglob noshglob braceexpand results+=("${res[@]}") ;; (hostname) emulate zsh _hosts -U -O res emulate sh setopt kshglob noshglob braceexpand results+=("${res[@]}") ;; (job) results+=("${savejobtexts[@]%% *}") ;; (keyword) results+=("${(k)reswords[@]}") ;; (running) jids=("${(@k)savejobstates[(R)running*]}") for job in "${jids[@]}" do results+=(${savejobtexts[$job]%% *}) done ;; (stopped) jids=("${(@k)savejobstates[(R)suspended*]}") for job in "${jids[@]}" do results+=(${savejobtexts[$job]%% *}) done ;; (setopt | shopt) results+=("${(k)options[@]}") ;; (signal) results+=("SIG${^signals[@]}") ;; (user) results+=("${(k)userdirs[@]}") ;; (variable) results+=("${(k)parameters[@]}") ;; (helptopic) ;; esac ;; (F) COMPREPLY=() local -a args args=("${words[0]}" "${@[-1]}" "${words[CURRENT-2]}") () { typeset -h words $OPTARG "${args[@]}" } results+=("${COMPREPLY[@]}") ;; (G) setopt nullglob results+=(${~OPTARG}) unsetopt nullglob ;; (W) results+=(${(Q)~=OPTARG}) ;; (C) results+=($(eval $OPTARG)) ;; (P) prefix="$OPTARG" ;; (S) suffix="$OPTARG" ;; (X) if [[ ${OPTARG[0]} = '!' ]] then results=("${(M)results[@]:#${OPTARG#?}}") else results=("${results[@]:#$OPTARG}") fi ;; esac done print -l -r -- "$prefix${^results[@]}$suffix" } compinit () { # undefined builtin autoload -XUz /usr/share/zsh/functions/Completion } compinstall () { # undefined builtin autoload -XUz /usr/share/zsh/functions/Completion } complete () { emulate -L zsh local args void cmd print remove args=("$@") zparseopts -D -a void o: A: G: W: C: F: P: S: X: a b c d e f g j k u v p=print r=remove if [[ -n $print ]] then printf 'complete %2$s %1$s\n' "${(@kv)_comps[(R)_bash*]#* }" elif [[ -n $remove ]] then for cmd do unset "_comps[$cmd]" done else compdef _bash_complete\ ${(j. .)${(q)args[1,-1-$#]}} "$@" fi } conda_prompt_info () { return 1 } current_branch () { git_current_branch } d () { if [[ -n $1 ]] then dirs "$@" else dirs -v | head -n 10 fi } decode64 () { if [[ $# -eq 0 ]] then cat | base64 --decode else printf '%s' $1 | base64 --decode fi } default () { (( $+parameters[$1] )) && return 0 typeset -g "$1"="$2" && return 3 } detect-clipboard () { emulate -L zsh if [[ "${OSTYPE}" == darwin* ]] && (( ${+commands[pbcopy]} )) && (( ${+commands[pbpaste]} )) then clipcopy () { cat "${1:-/dev/stdin}" | pbcopy } clippaste () { pbpaste } elif [[ "${OSTYPE}" == (cygwin|msys)* ]] then clipcopy () { cat "${1:-/dev/stdin}" > /dev/clipboard } clippaste () { cat /dev/clipboard } elif (( $+commands[clip.exe] )) && (( $+commands[powershell.exe] )) then clipcopy () { cat "${1:-/dev/stdin}" | clip.exe } clippaste () { powershell.exe -noprofile -command Get-Clipboard } elif [ -n "${WAYLAND_DISPLAY:-}" ] && (( ${+commands[wl-copy]} )) && (( ${+commands[wl-paste]} )) then clipcopy () { cat "${1:-/dev/stdin}" | wl-copy &> /dev/null &| } clippaste () { wl-paste --no-newline } elif [ -n "${DISPLAY:-}" ] && (( ${+commands[xsel]} )) then clipcopy () { cat "${1:-/dev/stdin}" | xsel --clipboard --input } clippaste () { xsel --clipboard --output } elif [ -n "${DISPLAY:-}" ] && (( ${+commands[xclip]} )) then clipcopy () { cat "${1:-/dev/stdin}" | xclip -selection clipboard -in &> /dev/null &| } clippaste () { xclip -out -selection clipboard } elif (( ${+commands[lemonade]} )) then clipcopy () { cat "${1:-/dev/stdin}" | lemonade copy } clippaste () { lemonade paste } elif (( ${+commands[doitclient]} )) then clipcopy () { cat "${1:-/dev/stdin}" | doitclient wclip } clippaste () { doitclient wclip -r } elif (( ${+commands[win32yank]} )) then clipcopy () { cat "${1:-/dev/stdin}" | win32yank -i } clippaste () { win32yank -o } elif [[ $OSTYPE == linux-android* ]] && (( $+commands[termux-clipboard-set] )) then clipcopy () { cat "${1:-/dev/stdin}" | termux-clipboard-set } clippaste () { termux-clipboard-get } elif [ -n "${TMUX:-}" ] && (( ${+commands[tmux]} )) then clipcopy () { tmux load-buffer "${1:--}" } clippaste () { tmux save-buffer - } else _retry_clipboard_detection_or_fail () { local clipcmd="${1}" shift if detect-clipboard then "${clipcmd}" "$@" else print "${clipcmd}: Platform $OSTYPE not supported or xclip/xsel not installed" >&2 return 1 fi } clipcopy () { _retry_clipboard_detection_or_fail clipcopy "$@" } clippaste () { _retry_clipboard_detection_or_fail clippaste "$@" } return 1 fi } diff () { command diff --color "$@" } down-line-or-beginning-search () { # undefined builtin autoload -XU } edit-command-line () { # undefined builtin autoload -XU } encode64 () { if [[ $# -eq 0 ]] then cat | base64 else printf '%s' $1 | base64 fi } encodefile64 () { if [[ $# -eq 0 ]] then echo "You must provide a filename" else base64 $1 > $1.txt echo "${1}'s content encoded in base64 and saved as ${1}.txt" fi } env_default () { [[ ${parameters[$1]} = *-export* ]] && return 0 export "$1=$2" && return 3 } fast-theme () { # undefined builtin autoload -XUz } fuck () { unset -f fuck eval $(thefuck --alias) fuck "$@" } gawklibpath_append () { [ -z "$AWKLIBPATH" ] && AWKLIBPATH=`gawk 'BEGIN {print ENVIRON["AWKLIBPATH"]}'` export AWKLIBPATH="$AWKLIBPATH:$*" } gawklibpath_default () { unset AWKLIBPATH export AWKLIBPATH=`gawk 'BEGIN {print ENVIRON["AWKLIBPATH"]}'` } gawklibpath_prepend () { [ -z "$AWKLIBPATH" ] && AWKLIBPATH=`gawk 'BEGIN {print ENVIRON["AWKLIBPATH"]}'` export AWKLIBPATH="$*:$AWKLIBPATH" } gawkpath_append () { [ -z "$AWKPATH" ] && AWKPATH=`gawk 'BEGIN {print ENVIRON["AWKPATH"]}'` export AWKPATH="$AWKPATH:$*" } gawkpath_default () { unset AWKPATH export AWKPATH=`gawk 'BEGIN {print ENVIRON["AWKPATH"]}'` } gawkpath_prepend () { [ -z "$AWKPATH" ] && AWKPATH=`gawk 'BEGIN {print ENVIRON["AWKPATH"]}'` export AWKPATH="$*:$AWKPATH" } gbda () { git branch --no-color --merged | command grep -vE "^([+*]|\s*($(git_main_branch)|$(git_develop_branch))\s*$)" | command xargs git branch --delete 2> /dev/null } gbds () { local default_branch=$(git_main_branch) (( ! $? )) || default_branch=$(git_develop_branch) git for-each-ref refs/heads/ "--format=%(refname:short)" | while read branch do local merge_base=$(git merge-base $default_branch $branch) if [[ $(git cherry $default_branch $(git commit-tree $(git rev-parse $branch\^{tree}) -p $merge_base -m _)) = -* ]] then git branch -D $branch fi done } gccd () { setopt localoptions extendedglob local repo="${${@[(r)(ssh://*|git://*|ftp(s)#://*|http(s)#://*|*@*)(.git/#)#]}:-$_}" command git clone --recurse-submodules "$@" || return [[ -d "$_" ]] && cd "$_" || cd "${${repo:t}%.git/#}" } gdnolock () { git diff "$@" ":(exclude)package-lock.json" ":(exclude)*.lock" } gdv () { git diff -w "$@" | view - } getColorCode () { eval "$__p9k_intro" if (( ARGC == 1 )) then case $1 in (foreground) local k for k in "${(k@)__p9k_colors}" do local v=${__p9k_colors[$k]} print -rP -- "%F{$v}$v - $k%f" done return 0 ;; (background) local k for k in "${(k@)__p9k_colors}" do local v=${__p9k_colors[$k]} print -rP -- "%K{$v}$v - $k%k" done return 0 ;; esac fi echo "Usage: getColorCode background|foreground" >&2 return 1 } get_icon_names () { eval "$__p9k_intro" _p9k_init_icons local key for key in ${(@kon)icons} do echo -n - "POWERLEVEL9K_$key: " print -nP "%K{red} %k" if [[ $1 == original ]] then echo -n - $icons[$key] else print_icon $key fi print -P "%K{red} %k" done } ggf () { [[ "$#" != 1 ]] && local b="$(git_current_branch)" git push --force origin "${b:=$1}" } ggfl () { [[ "$#" != 1 ]] && local b="$(git_current_branch)" git push --force-with-lease origin "${b:=$1}" } ggl () { if [[ "$#" != 0 ]] && [[ "$#" != 1 ]] then git pull origin "${*}" else [[ "$#" == 0 ]] && local b="$(git_current_branch)" git pull origin "${b:=$1}" fi } ggp () { if [[ "$#" != 0 ]] && [[ "$#" != 1 ]] then git push origin "${*}" else [[ "$#" == 0 ]] && local b="$(git_current_branch)" git push origin "${b:=$1}" fi } ggpnp () { if [[ "$#" == 0 ]] then ggl && ggp else ggl "${*}" && ggp "${*}" fi } ggu () { [[ "$#" != 1 ]] && local b="$(git_current_branch)" git pull --rebase origin "${b:=$1}" } git_commits_ahead () { if __git_prompt_git rev-parse --git-dir &> /dev/null then local commits="$(__git_prompt_git rev-list --count @{upstream}..HEAD 2>/dev/null)" if [[ -n "$commits" && "$commits" != 0 ]] then echo "$ZSH_THEME_GIT_COMMITS_AHEAD_PREFIX$commits$ZSH_THEME_GIT_COMMITS_AHEAD_SUFFIX" fi fi } git_commits_behind () { if __git_prompt_git rev-parse --git-dir &> /dev/null then local commits="$(__git_prompt_git rev-list --count HEAD..@{upstream} 2>/dev/null)" if [[ -n "$commits" && "$commits" != 0 ]] then echo "$ZSH_THEME_GIT_COMMITS_BEHIND_PREFIX$commits$ZSH_THEME_GIT_COMMITS_BEHIND_SUFFIX" fi fi } git_current_branch () { local ref ref=$(__git_prompt_git symbolic-ref --quiet HEAD 2> /dev/null) local ret=$? if [[ $ret != 0 ]] then [[ $ret == 128 ]] && return ref=$(__git_prompt_git rev-parse --short HEAD 2> /dev/null) || return fi echo ${ref#refs/heads/} } git_current_user_email () { __git_prompt_git config user.email 2> /dev/null } git_current_user_name () { __git_prompt_git config user.name 2> /dev/null } git_develop_branch () { command git rev-parse --git-dir &> /dev/null || return local branch for branch in dev devel develop development do if command git show-ref -q --verify refs/heads/$branch then echo $branch return 0 fi done echo develop return 1 } git_main_branch () { command git rev-parse --git-dir &> /dev/null || return local ref for ref in refs/{heads,remotes/{origin,upstream}}/{main,trunk,mainline,default,stable,master} do if command git show-ref -q --verify $ref then echo ${ref:t} return 0 fi done echo master return 1 } git_previous_branch () { local ref ref=$(__git_prompt_git rev-parse --quiet --symbolic-full-name @{-1} 2> /dev/null) local ret=$? if [[ $ret != 0 ]] || [[ -z $ref ]] then return fi echo ${ref#refs/heads/} } git_prompt_ahead () { if [[ -n "$(__git_prompt_git rev-list origin/$(git_current_branch)..HEAD 2> /dev/null)" ]] then echo "$ZSH_THEME_GIT_PROMPT_AHEAD" fi } git_prompt_behind () { if [[ -n "$(__git_prompt_git rev-list HEAD..origin/$(git_current_branch) 2> /dev/null)" ]] then echo "$ZSH_THEME_GIT_PROMPT_BEHIND" fi } git_prompt_info () { if [[ -n "${_OMZ_ASYNC_OUTPUT[_omz_git_prompt_info]}" ]] then echo -n "${_OMZ_ASYNC_OUTPUT[_omz_git_prompt_info]}" fi } git_prompt_long_sha () { local SHA SHA=$(__git_prompt_git rev-parse HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER" } git_prompt_remote () { if [[ -n "$(__git_prompt_git show-ref origin/$(git_current_branch) 2> /dev/null)" ]] then echo "$ZSH_THEME_GIT_PROMPT_REMOTE_EXISTS" else echo "$ZSH_THEME_GIT_PROMPT_REMOTE_MISSING" fi } git_prompt_short_sha () { local SHA SHA=$(__git_prompt_git rev-parse --short HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER" } git_prompt_status () { if [[ -n "${_OMZ_ASYNC_OUTPUT[_omz_git_prompt_status]}" ]] then echo -n "${_OMZ_ASYNC_OUTPUT[_omz_git_prompt_status]}" fi } git_remote_status () { local remote ahead behind git_remote_status git_remote_status_detailed remote=${$(__git_prompt_git rev-parse --verify ${hook_com[branch]}@{upstream} --symbolic-full-name 2>/dev/null)/refs\/remotes\/} if [[ -n ${remote} ]] then ahead=$(__git_prompt_git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l) behind=$(__git_prompt_git rev-list HEAD..${hook_com[branch]}@{upstream} 2>/dev/null | wc -l) if [[ $ahead -eq 0 ]] && [[ $behind -eq 0 ]] then git_remote_status="$ZSH_THEME_GIT_PROMPT_EQUAL_REMOTE" elif [[ $ahead -gt 0 ]] && [[ $behind -eq 0 ]] then git_remote_status="$ZSH_THEME_GIT_PROMPT_AHEAD_REMOTE" git_remote_status_detailed="$ZSH_THEME_GIT_PROMPT_AHEAD_REMOTE_COLOR$ZSH_THEME_GIT_PROMPT_AHEAD_REMOTE$((ahead))%{$reset_color%}" elif [[ $behind -gt 0 ]] && [[ $ahead -eq 0 ]] then git_remote_status="$ZSH_THEME_GIT_PROMPT_BEHIND_REMOTE" git_remote_status_detailed="$ZSH_THEME_GIT_PROMPT_BEHIND_REMOTE_COLOR$ZSH_THEME_GIT_PROMPT_BEHIND_REMOTE$((behind))%{$reset_color%}" elif [[ $ahead -gt 0 ]] && [[ $behind -gt 0 ]] then git_remote_status="$ZSH_THEME_GIT_PROMPT_DIVERGED_REMOTE" git_remote_status_detailed="$ZSH_THEME_GIT_PROMPT_AHEAD_REMOTE_COLOR$ZSH_THEME_GIT_PROMPT_AHEAD_REMOTE$((ahead))%{$reset_color%}$ZSH_THEME_GIT_PROMPT_BEHIND_REMOTE_COLOR$ZSH_THEME_GIT_PROMPT_BEHIND_REMOTE$((behind))%{$reset_color%}" fi if [[ -n $ZSH_THEME_GIT_PROMPT_REMOTE_STATUS_DETAILED ]] then git_remote_status="$ZSH_THEME_GIT_PROMPT_REMOTE_STATUS_PREFIX${remote:gs/%/%%}$git_remote_status_detailed$ZSH_THEME_GIT_PROMPT_REMOTE_STATUS_SUFFIX" fi echo $git_remote_status fi } git_repo_name () { local repo_path if repo_path="$(__git_prompt_git rev-parse --show-toplevel 2>/dev/null)" && [[ -n "$repo_path" ]] then echo ${repo_path:t} fi } grename () { if [[ -z "$1" || -z "$2" ]] then echo "Usage: $0 old_branch new_branch" return 1 fi git branch -m "$1" "$2" if git push origin :"$1" then git push --set-upstream origin "$2" fi } gunwipall () { local _commit=$(git log --grep='--wip--' --invert-grep --max-count=1 --format=format:%H) if [[ "$_commit" != "$(git rev-parse HEAD)" ]] then git reset $_commit || return 1 fi } handle_completion_insecurities () { local -aU insecure_dirs insecure_dirs=(${(f@):-"$(compaudit 2>/dev/null)"}) [[ -z "${insecure_dirs}" ]] && return print "[oh-my-zsh] Insecure completion-dependent directories detected:" ls -ld "${(@)insecure_dirs}" cat < ]] do (( ++ver_cnt > ${#version} )) && return 0 if [[ ${version[ver_cnt]} = *[0-9][^0-9]* ]] then order=(${version[ver_cnt]} ${min_ver[ver_cnt]}) if [[ ${version[ver_cnt]} = <->* ]] then [[ $order != ${${(On)order}} ]] && return 1 else [[ $order != ${${(O)order}} ]] && return 1 fi [[ $order[1] != $order[2] ]] && return 0 fi part=${version[ver_cnt]##*[^0-9]} done while true do (( ++min_cnt > ${#min_ver} )) && return 0 [[ ${min_ver[min_cnt]} = <-> ]] && break done (( part > min_ver[min_cnt] )) && return 0 (( part < min_ver[min_cnt] )) && return 1 part='' done } is_plugin () { local base_dir=$1 local name=$2 builtin test -f $base_dir/plugins/$name/$name.plugin.zsh || builtin test -f $base_dir/plugins/$name/_$name } is_theme () { local base_dir=$1 local name=$2 builtin test -f $base_dir/$name.zsh-theme } jenv_prompt_info () { return 1 } kj () { kubectl "$@" -o json | jq } kjx () { kubectl "$@" -o json | fx } kres () { kubectl set env $@ REFRESHED_AT=$(date +%Y%m%d%H%M%S) } kubectx_prompt_info () { (( $+commands[kubectl] )) || return local current_ctx=$(kubectl config current-context 2> /dev/null) [[ -n "$current_ctx" ]] || return echo "${kubectx_mapping[$current_ctx]:-${current_ctx:gs/%/%%}}" } ky () { kubectl "$@" -o yaml | yh } lfcd () { tmp="$(mktemp)" lf -last-dir-path="$tmp" "$@" if [ -f "$tmp" ] then dir="$(cat "$tmp")" rm -f "$tmp" > /dev/null [ -d "$dir" ] && [ "$dir" != "$(pwd)" ] && cd "$dir" fi } mkcd () { mkdir -p $@ && cd ${@:$#} } my_git_formatter () { emulate -L zsh if [[ -n $P9K_CONTENT ]] then typeset -g my_git_format=$P9K_CONTENT return fi local meta='%7F' local clean='%0F' local modified='%0F' local untracked='%0F' local conflicted='%1F' local res if [[ -n $VCS_STATUS_LOCAL_BRANCH ]] then local branch=${(V)VCS_STATUS_LOCAL_BRANCH} (( $#branch > 32 )) && branch[13,-13]="…" res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" fi if [[ -n $VCS_STATUS_TAG && -z $VCS_STATUS_LOCAL_BRANCH ]] then local tag=${(V)VCS_STATUS_TAG} (( $#tag > 32 )) && tag[13,-13]="…" res+="${meta}#${clean}${tag//\%/%%}" fi [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]] then res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" fi if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]] then res+=" ${modified}wip" fi (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" typeset -g my_git_format=$res } nvm () { if [ -s "$NVM_DIR/nvm.sh" ] then unset -f nvm source "$NVM_DIR/nvm.sh" if [ -s "$NVM_DIR/bash_completion" ] then source "$NVM_DIR/bash_completion" fi nvm "$@" else echo "nvm is not installed" >&2 return 1 fi } nvm_add_iojs_prefix () { nvm_echo "$(nvm_iojs_prefix)-$(nvm_ensure_version_prefix "$(nvm_strip_iojs_prefix "${1-}")")" } nvm_alias () { local ALIAS ALIAS="${1-}" if [ -z "${ALIAS}" ] then nvm_err 'An alias is required.' return 1 fi ALIAS="$(nvm_normalize_lts "${ALIAS}")" if [ -z "${ALIAS}" ] then return 2 fi local NVM_ALIAS_PATH NVM_ALIAS_PATH="$(nvm_alias_path)/${ALIAS}" if [ ! -f "${NVM_ALIAS_PATH}" ] then nvm_err 'Alias does not exist.' return 2 fi command awk 'NF' "${NVM_ALIAS_PATH}" } nvm_alias_path () { nvm_echo "$(nvm_version_dir old)/alias" } nvm_auto () { local NVM_MODE NVM_MODE="${1-}" local VERSION local NVM_CURRENT if [ "_${NVM_MODE}" = '_install' ] then VERSION="$(nvm_alias default 2>/dev/null || nvm_echo)" if [ -n "${VERSION}" ] then nvm install "${VERSION}" > /dev/null elif nvm_rc_version > /dev/null 2>&1 then nvm install > /dev/null fi elif [ "_$NVM_MODE" = '_use' ] then NVM_CURRENT="$(nvm_ls_current)" if [ "_${NVM_CURRENT}" = '_none' ] || [ "_${NVM_CURRENT}" = '_system' ] then VERSION="$(nvm_resolve_local_alias default 2>/dev/null || nvm_echo)" if [ -n "${VERSION}" ] then nvm use --silent "${VERSION}" > /dev/null elif nvm_rc_version > /dev/null 2>&1 then nvm use --silent > /dev/null fi else nvm use --silent "${NVM_CURRENT}" > /dev/null fi elif [ "_${NVM_MODE}" != '_none' ] then nvm_err 'Invalid auto mode supplied.' return 1 fi } nvm_binary_available () { nvm_version_greater_than_or_equal_to "$(nvm_strip_iojs_prefix "${1-}")" v0.8.6 } nvm_cache_dir () { nvm_echo "${NVM_DIR}/.cache" } nvm_cd () { \cd "$@" } nvm_change_path () { if [ -z "${1-}" ] then nvm_echo "${3-}${2-}" elif ! nvm_echo "${1-}" | nvm_grep -q "${NVM_DIR}/[^/]*${2-}" && ! nvm_echo "${1-}" | nvm_grep -q "${NVM_DIR}/versions/[^/]*/[^/]*${2-}" then nvm_echo "${3-}${2-}:${1-}" elif nvm_echo "${1-}" | nvm_grep -Eq "(^|:)(/usr(/local)?)?${2-}:.*${NVM_DIR}/[^/]*${2-}" || nvm_echo "${1-}" | nvm_grep -Eq "(^|:)(/usr(/local)?)?${2-}:.*${NVM_DIR}/versions/[^/]*/[^/]*${2-}" then nvm_echo "${3-}${2-}:${1-}" else nvm_echo "${1-}" | command sed -e "s#${NVM_DIR}/[^/]*${2-}[^:]*#${3-}${2-}#" -e "s#${NVM_DIR}/versions/[^/]*/[^/]*${2-}[^:]*#${3-}${2-}#" fi } nvm_check_file_permissions () { nvm_is_zsh && setopt local_options nonomatch for FILE in "$1"/* "$1"/.[!.]* "$1"/..?* do if [ -d "$FILE" ] then if [ -n "${NVM_DEBUG-}" ] then nvm_err "${FILE}" fi if [ ! -L "${FILE}" ] && ! nvm_check_file_permissions "${FILE}" then return 2 fi elif [ -e "$FILE" ] && [ ! -w "$FILE" ] && [ ! -O "$FILE" ] then nvm_err "file is not writable or self-owned: $(nvm_sanitize_path "$FILE")" return 1 fi done return 0 } nvm_clang_version () { clang --version | command awk '{ if ($2 == "version") print $3; else if ($3 == "version") print $4 }' | command sed 's/-.*$//g' } nvm_command_info () { local COMMAND local INFO COMMAND="${1}" if type "${COMMAND}" | nvm_grep -q hashed then INFO="$(type "${COMMAND}" | command sed -E 's/\(|\)//g' | command awk '{print $4}')" elif type "${COMMAND}" | nvm_grep -q aliased then INFO="$(which "${COMMAND}") ($(type "${COMMAND}" | command awk '{ $1=$2=$3=$4="" ;print }' | command sed -e 's/^\ *//g' -Ee "s/\`|'//g"))" elif type "${COMMAND}" | nvm_grep -q "^${COMMAND} is an alias for" then INFO="$(which "${COMMAND}") ($(type "${COMMAND}" | command awk '{ $1=$2=$3=$4=$5="" ;print }' | command sed 's/^\ *//g'))" elif type "${COMMAND}" | nvm_grep -q "^${COMMAND} is /" then INFO="$(type "${COMMAND}" | command awk '{print $3}')" else INFO="$(type "${COMMAND}")" fi nvm_echo "${INFO}" } nvm_compare_checksum () { local FILE FILE="${1-}" if [ -z "${FILE}" ] then nvm_err 'Provided file to checksum is empty.' return 4 elif ! [ -f "${FILE}" ] then nvm_err 'Provided file to checksum does not exist.' return 3 fi local COMPUTED_SUM COMPUTED_SUM="$(nvm_compute_checksum "${FILE}")" local CHECKSUM CHECKSUM="${2-}" if [ -z "${CHECKSUM}" ] then nvm_err 'Provided checksum to compare to is empty.' return 2 fi if [ -z "${COMPUTED_SUM}" ] then nvm_err "Computed checksum of '${FILE}' is empty." nvm_err 'WARNING: Continuing *without checksum verification*' return elif [ "${COMPUTED_SUM}" != "${CHECKSUM}" ] && [ "${COMPUTED_SUM}" != "\\${CHECKSUM}" ] then nvm_err "Checksums do not match: '${COMPUTED_SUM}' found, '${CHECKSUM}' expected." return 1 fi nvm_err 'Checksums matched!' } nvm_compute_checksum () { local FILE FILE="${1-}" if [ -z "${FILE}" ] then nvm_err 'Provided file to checksum is empty.' return 2 elif ! [ -f "${FILE}" ] then nvm_err 'Provided file to checksum does not exist.' return 1 fi if nvm_has_non_aliased "sha256sum" then nvm_err 'Computing checksum with sha256sum' command sha256sum "${FILE}" | command awk '{print $1}' elif nvm_has_non_aliased "shasum" then nvm_err 'Computing checksum with shasum -a 256' command shasum -a 256 "${FILE}" | command awk '{print $1}' elif nvm_has_non_aliased "sha256" then nvm_err 'Computing checksum with sha256 -q' command sha256 -q "${FILE}" | command awk '{print $1}' elif nvm_has_non_aliased "gsha256sum" then nvm_err 'Computing checksum with gsha256sum' command gsha256sum "${FILE}" | command awk '{print $1}' elif nvm_has_non_aliased "openssl" then nvm_err 'Computing checksum with openssl dgst -sha256' command openssl dgst -sha256 "${FILE}" | command awk '{print $NF}' elif nvm_has_non_aliased "bssl" then nvm_err 'Computing checksum with bssl sha256sum' command bssl sha256sum "${FILE}" | command awk '{print $1}' elif nvm_has_non_aliased "sha1sum" then nvm_err 'Computing checksum with sha1sum' command sha1sum "${FILE}" | command awk '{print $1}' elif nvm_has_non_aliased "sha1" then nvm_err 'Computing checksum with sha1 -q' command sha1 -q "${FILE}" fi } nvm_curl_libz_support () { curl -V 2> /dev/null | nvm_grep "^Features:" | nvm_grep -q "libz" } nvm_curl_use_compression () { nvm_curl_libz_support && nvm_version_greater_than_or_equal_to "$(nvm_curl_version)" 7.21.0 } nvm_curl_version () { curl -V | command awk '{ if ($1 == "curl") print $2 }' | command sed 's/-.*$//g' } nvm_die_on_prefix () { local NVM_DELETE_PREFIX NVM_DELETE_PREFIX="${1-}" case "${NVM_DELETE_PREFIX}" in (0 | 1) ;; (*) nvm_err 'First argument "delete the prefix" must be zero or one' return 1 ;; esac local NVM_COMMAND NVM_COMMAND="${2-}" local NVM_VERSION_DIR NVM_VERSION_DIR="${3-}" if [ -z "${NVM_COMMAND}" ] || [ -z "${NVM_VERSION_DIR}" ] then nvm_err 'Second argument "nvm command", and third argument "nvm version dir", must both be nonempty' return 2 fi if [ -n "${PREFIX-}" ] && [ "$(nvm_version_path "$(node -v)")" != "${PREFIX}" ] then nvm deactivate > /dev/null 2>&1 nvm_err "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"${PREFIX}\"" nvm_err 'Run `unset PREFIX` to unset it.' return 3 fi local NVM_OS NVM_OS="$(nvm_get_os)" local NVM_NPM_CONFIG_x_PREFIX_ENV NVM_NPM_CONFIG_x_PREFIX_ENV="$(command awk 'BEGIN { for (name in ENVIRON) if (toupper(name) == "NPM_CONFIG_PREFIX") { print name; break } }')" if [ -n "${NVM_NPM_CONFIG_x_PREFIX_ENV-}" ] then local NVM_CONFIG_VALUE eval "NVM_CONFIG_VALUE=\"\$${NVM_NPM_CONFIG_x_PREFIX_ENV}\"" if [ -n "${NVM_CONFIG_VALUE-}" ] && [ "_${NVM_OS}" = "_win" ] then NVM_CONFIG_VALUE="$(cd "$NVM_CONFIG_VALUE" 2>/dev/null && pwd)" fi if [ -n "${NVM_CONFIG_VALUE-}" ] && ! nvm_tree_contains_path "${NVM_DIR}" "${NVM_CONFIG_VALUE}" then nvm deactivate > /dev/null 2>&1 nvm_err "nvm is not compatible with the \"${NVM_NPM_CONFIG_x_PREFIX_ENV}\" environment variable: currently set to \"${NVM_CONFIG_VALUE}\"" nvm_err "Run \`unset ${NVM_NPM_CONFIG_x_PREFIX_ENV}\` to unset it." return 4 fi fi local NVM_NPM_BUILTIN_NPMRC NVM_NPM_BUILTIN_NPMRC="${NVM_VERSION_DIR}/lib/node_modules/npm/npmrc" if nvm_npmrc_bad_news_bears "${NVM_NPM_BUILTIN_NPMRC}" then if [ "_${NVM_DELETE_PREFIX}" = "_1" ] then npm config --loglevel=warn delete prefix --userconfig="${NVM_NPM_BUILTIN_NPMRC}" npm config --loglevel=warn delete globalconfig --userconfig="${NVM_NPM_BUILTIN_NPMRC}" else nvm_err "Your builtin npmrc file ($(nvm_sanitize_path "${NVM_NPM_BUILTIN_NPMRC}"))" nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.' nvm_err "Run \`${NVM_COMMAND}\` to unset it." return 10 fi fi local NVM_NPM_GLOBAL_NPMRC NVM_NPM_GLOBAL_NPMRC="${NVM_VERSION_DIR}/etc/npmrc" if nvm_npmrc_bad_news_bears "${NVM_NPM_GLOBAL_NPMRC}" then if [ "_${NVM_DELETE_PREFIX}" = "_1" ] then npm config --global --loglevel=warn delete prefix npm config --global --loglevel=warn delete globalconfig else nvm_err "Your global npmrc file ($(nvm_sanitize_path "${NVM_NPM_GLOBAL_NPMRC}"))" nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.' nvm_err "Run \`${NVM_COMMAND}\` to unset it." return 10 fi fi local NVM_NPM_USER_NPMRC NVM_NPM_USER_NPMRC="${HOME}/.npmrc" if nvm_npmrc_bad_news_bears "${NVM_NPM_USER_NPMRC}" then if [ "_${NVM_DELETE_PREFIX}" = "_1" ] then npm config --loglevel=warn delete prefix --userconfig="${NVM_NPM_USER_NPMRC}" npm config --loglevel=warn delete globalconfig --userconfig="${NVM_NPM_USER_NPMRC}" else nvm_err "Your user’s .npmrc file ($(nvm_sanitize_path "${NVM_NPM_USER_NPMRC}"))" nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.' nvm_err "Run \`${NVM_COMMAND}\` to unset it." return 10 fi fi local NVM_NPM_PROJECT_NPMRC NVM_NPM_PROJECT_NPMRC="$(nvm_find_project_dir)/.npmrc" if nvm_npmrc_bad_news_bears "${NVM_NPM_PROJECT_NPMRC}" then if [ "_${NVM_DELETE_PREFIX}" = "_1" ] then npm config --loglevel=warn delete prefix npm config --loglevel=warn delete globalconfig else nvm_err "Your project npmrc file ($(nvm_sanitize_path "${NVM_NPM_PROJECT_NPMRC}"))" nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.' nvm_err "Run \`${NVM_COMMAND}\` to unset it." return 10 fi fi } nvm_download () { local CURL_COMPRESSED_FLAG if nvm_has "curl" then if nvm_curl_use_compression then CURL_COMPRESSED_FLAG="--compressed" fi curl --fail ${CURL_COMPRESSED_FLAG:-} -q "$@" elif nvm_has "wget" then ARGS=$(nvm_echo "$@" | command sed -e 's/--progress-bar /--progress=bar /' \ -e 's/--compressed //' \ -e 's/--fail //' \ -e 's/-L //' \ -e 's/-I /--server-response /' \ -e 's/-s /-q /' \ -e 's/-sS /-nv /' \ -e 's/-o /-O /' \ -e 's/-C - /-c /') eval wget $ARGS fi } nvm_download_artifact () { local FLAVOR case "${1-}" in (node | iojs) FLAVOR="${1}" ;; (*) nvm_err 'supported flavors: node, iojs' return 1 ;; esac local KIND case "${2-}" in (binary | source) KIND="${2}" ;; (*) nvm_err 'supported kinds: binary, source' return 1 ;; esac local TYPE TYPE="${3-}" local MIRROR MIRROR="$(nvm_get_mirror "${FLAVOR}" "${TYPE}")" if [ -z "${MIRROR}" ] then return 2 fi local VERSION VERSION="${4}" if [ -z "${VERSION}" ] then nvm_err 'A version number is required.' return 3 fi if [ "${KIND}" = 'binary' ] && ! nvm_binary_available "${VERSION}" then nvm_err "No precompiled binary available for ${VERSION}." return fi local SLUG SLUG="$(nvm_get_download_slug "${FLAVOR}" "${KIND}" "${VERSION}")" local COMPRESSION COMPRESSION="$(nvm_get_artifact_compression "${VERSION}")" local CHECKSUM CHECKSUM="$(nvm_get_checksum "${FLAVOR}" "${TYPE}" "${VERSION}" "${SLUG}" "${COMPRESSION}")" local tmpdir if [ "${KIND}" = 'binary' ] then tmpdir="$(nvm_cache_dir)/bin/${SLUG}" else tmpdir="$(nvm_cache_dir)/src/${SLUG}" fi command mkdir -p "${tmpdir}/files" || ( nvm_err "creating directory ${tmpdir}/files failed" return 3 ) local TARBALL TARBALL="${tmpdir}/${SLUG}.${COMPRESSION}" local TARBALL_URL if nvm_version_greater_than_or_equal_to "${VERSION}" 0.1.14 then TARBALL_URL="${MIRROR}/${VERSION}/${SLUG}.${COMPRESSION}" else TARBALL_URL="${MIRROR}/${SLUG}.${COMPRESSION}" fi if [ -r "${TARBALL}" ] then nvm_err "Local cache found: $(nvm_sanitize_path "${TARBALL}")" if nvm_compare_checksum "${TARBALL}" "${CHECKSUM}" > /dev/null 2>&1 then nvm_err "Checksums match! Using existing downloaded archive $(nvm_sanitize_path "${TARBALL}")" nvm_echo "${TARBALL}" return 0 fi nvm_compare_checksum "${TARBALL}" "${CHECKSUM}" nvm_err "Checksum check failed!" nvm_err "Removing the broken local cache..." command rm -rf "${TARBALL}" fi nvm_err "Downloading ${TARBALL_URL}..." nvm_download -L -C - "${PROGRESS_BAR}" "${TARBALL_URL}" -o "${TARBALL}" || ( command rm -rf "${TARBALL}" "${tmpdir}" nvm_err "Binary download from ${TARBALL_URL} failed, trying source." return 4 ) if nvm_grep '404 Not Found' "${TARBALL}" > /dev/null then command rm -rf "${TARBALL}" "${tmpdir}" nvm_err "HTTP 404 at URL ${TARBALL_URL}" return 5 fi nvm_compare_checksum "${TARBALL}" "${CHECKSUM}" || ( command rm -rf "${tmpdir}/files" return 6 ) nvm_echo "${TARBALL}" } nvm_echo () { command printf %s\\n "$*" 2> /dev/null } nvm_echo_with_colors () { command printf %b\\n "$*" 2> /dev/null } nvm_ensure_default_set () { local VERSION VERSION="$1" if [ -z "${VERSION}" ] then nvm_err 'nvm_ensure_default_set: a version is required' return 1 elif nvm_alias default > /dev/null 2>&1 then return 0 fi local OUTPUT OUTPUT="$(nvm alias default "${VERSION}")" local EXIT_CODE EXIT_CODE="$?" nvm_echo "Creating default alias: ${OUTPUT}" return $EXIT_CODE } nvm_ensure_version_installed () { local PROVIDED_VERSION PROVIDED_VERSION="${1-}" local IS_VERSION_FROM_NVMRC IS_VERSION_FROM_NVMRC="${2-}" if [ "${PROVIDED_VERSION}" = 'system' ] then if nvm_has_system_iojs || nvm_has_system_node then return 0 fi nvm_err "N/A: no system version of node/io.js is installed." return 1 fi local LOCAL_VERSION local EXIT_CODE LOCAL_VERSION="$(nvm_version "${PROVIDED_VERSION}")" EXIT_CODE="$?" local NVM_VERSION_DIR if [ "${EXIT_CODE}" != "0" ] || ! nvm_is_version_installed "${LOCAL_VERSION}" then if VERSION="$(nvm_resolve_alias "${PROVIDED_VERSION}")" then nvm_err "N/A: version \"${PROVIDED_VERSION} -> ${VERSION}\" is not yet installed." else local PREFIXED_VERSION PREFIXED_VERSION="$(nvm_ensure_version_prefix "${PROVIDED_VERSION}")" nvm_err "N/A: version \"${PREFIXED_VERSION:-$PROVIDED_VERSION}\" is not yet installed." fi nvm_err "" if [ "${IS_VERSION_FROM_NVMRC}" != '1' ] then nvm_err "You need to run \`nvm install ${PROVIDED_VERSION}\` to install and use it." else nvm_err 'You need to run `nvm install` to install and use the node version specified in `.nvmrc`.' fi return 1 fi } nvm_ensure_version_prefix () { local NVM_VERSION NVM_VERSION="$(nvm_strip_iojs_prefix "${1-}" | command sed -e 's/^\([0-9]\)/v\1/g')" if nvm_is_iojs_version "${1-}" then nvm_add_iojs_prefix "${NVM_VERSION}" else nvm_echo "${NVM_VERSION}" fi } nvm_err () { nvm_echo "$@" >&2 } nvm_err_with_colors () { nvm_echo_with_colors "$@" >&2 } nvm_extract_tarball () { if [ "$#" -ne 4 ] then nvm_err 'nvm_extract_tarball requires exactly 4 arguments' return 5 fi local NVM_OS NVM_OS="${1-}" local VERSION VERSION="${2-}" local TARBALL TARBALL="${3-}" local TMPDIR TMPDIR="${4-}" local tar_compression_flag tar_compression_flag='z' if nvm_supports_xz "${VERSION}" then tar_compression_flag='J' fi local tar tar='tar' if [ "${NVM_OS}" = 'aix' ] then tar='gtar' fi if [ "${NVM_OS}" = 'openbsd' ] then if [ "${tar_compression_flag}" = 'J' ] then command xzcat "${TARBALL}" | "${tar}" -xf - -C "${TMPDIR}" -s '/[^\/]*\///' || return 1 else command "${tar}" -x${tar_compression_flag}f "${TARBALL}" -C "${TMPDIR}" -s '/[^\/]*\///' || return 1 fi else command "${tar}" -x${tar_compression_flag}f "${TARBALL}" -C "${TMPDIR}" --strip-components 1 || return 1 fi } nvm_find_nvmrc () { local dir dir="$(nvm_find_up '.nvmrc')" if [ -e "${dir}/.nvmrc" ] then nvm_echo "${dir}/.nvmrc" fi } nvm_find_project_dir () { local path_ path_="${PWD}" while [ "${path_}" != "" ] && [ "${path_}" != '.' ] && [ ! -f "${path_}/package.json" ] && [ ! -d "${path_}/node_modules" ] do path_=${path_%/*} done nvm_echo "${path_}" } nvm_find_up () { local path_ path_="${PWD}" while [ "${path_}" != "" ] && [ "${path_}" != '.' ] && [ ! -f "${path_}/${1-}" ] do path_=${path_%/*} done nvm_echo "${path_}" } nvm_format_version () { local VERSION VERSION="$(nvm_ensure_version_prefix "${1-}")" local NUM_GROUPS NUM_GROUPS="$(nvm_num_version_groups "${VERSION}")" if [ "${NUM_GROUPS}" -lt 3 ] then nvm_format_version "${VERSION%.}.0" else nvm_echo "${VERSION}" | command cut -f1-3 -d. fi } nvm_get_arch () { local HOST_ARCH local NVM_OS local EXIT_CODE local LONG_BIT NVM_OS="$(nvm_get_os)" if [ "_${NVM_OS}" = "_sunos" ] then if HOST_ARCH=$(pkg_info -Q MACHINE_ARCH pkg_install) then HOST_ARCH=$(nvm_echo "${HOST_ARCH}" | command tail -1) else HOST_ARCH=$(isainfo -n) fi elif [ "_${NVM_OS}" = "_aix" ] then HOST_ARCH=ppc64 else HOST_ARCH="$(command uname -m)" LONG_BIT="$(getconf LONG_BIT 2>/dev/null)" fi local NVM_ARCH case "${HOST_ARCH}" in (x86_64 | amd64) NVM_ARCH="x64" ;; (i*86) NVM_ARCH="x86" ;; (aarch64 | armv8l) NVM_ARCH="arm64" ;; (*) NVM_ARCH="${HOST_ARCH}" ;; esac if [ "_${LONG_BIT}" = "_32" ] && [ "${NVM_ARCH}" = "x64" ] then NVM_ARCH="x86" fi if [ "$(uname)" = "Linux" ] && [ "${NVM_ARCH}" = arm64 ] && [ "$(command od -An -t x1 -j 4 -N 1 "/sbin/init" 2>/dev/null)" = ' 01' ] then NVM_ARCH=armv7l HOST_ARCH=armv7l fi if [ -f "/etc/alpine-release" ] then NVM_ARCH=x64-musl fi nvm_echo "${NVM_ARCH}" } nvm_get_artifact_compression () { local VERSION VERSION="${1-}" local NVM_OS NVM_OS="$(nvm_get_os)" local COMPRESSION COMPRESSION='tar.gz' if [ "_${NVM_OS}" = '_win' ] then COMPRESSION='zip' elif nvm_supports_xz "${VERSION}" then COMPRESSION='tar.xz' fi nvm_echo "${COMPRESSION}" } nvm_get_checksum () { local FLAVOR case "${1-}" in (node | iojs) FLAVOR="${1}" ;; (*) nvm_err 'supported flavors: node, iojs' return 2 ;; esac local MIRROR MIRROR="$(nvm_get_mirror "${FLAVOR}" "${2-}")" if [ -z "${MIRROR}" ] then return 1 fi local SHASUMS_URL if [ "$(nvm_get_checksum_alg)" = 'sha-256' ] then SHASUMS_URL="${MIRROR}/${3}/SHASUMS256.txt" else SHASUMS_URL="${MIRROR}/${3}/SHASUMS.txt" fi nvm_download -L -s "${SHASUMS_URL}" -o - | command awk "{ if (\"${4}.${5}\" == \$2) print \$1}" } nvm_get_checksum_alg () { local NVM_CHECKSUM_BIN NVM_CHECKSUM_BIN="$(nvm_get_checksum_binary 2>/dev/null)" case "${NVM_CHECKSUM_BIN-}" in (sha256sum | shasum | sha256 | gsha256sum | openssl | bssl) nvm_echo 'sha-256' ;; (sha1sum | sha1) nvm_echo 'sha-1' ;; (*) nvm_get_checksum_binary return $? ;; esac } nvm_get_checksum_binary () { if nvm_has_non_aliased 'sha256sum' then nvm_echo 'sha256sum' elif nvm_has_non_aliased 'shasum' then nvm_echo 'shasum' elif nvm_has_non_aliased 'sha256' then nvm_echo 'sha256' elif nvm_has_non_aliased 'gsha256sum' then nvm_echo 'gsha256sum' elif nvm_has_non_aliased 'openssl' then nvm_echo 'openssl' elif nvm_has_non_aliased 'bssl' then nvm_echo 'bssl' elif nvm_has_non_aliased 'sha1sum' then nvm_echo 'sha1sum' elif nvm_has_non_aliased 'sha1' then nvm_echo 'sha1' else nvm_err 'Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, or bssl not found.' nvm_err 'Unaliased sha1sum or sha1 not found.' return 1 fi } nvm_get_colors () { local COLOR local SYS_COLOR local COLORS COLORS="${NVM_COLORS:-bygre}" case $1 in (1) COLOR=$(nvm_print_color_code "$(echo "$COLORS" | awk '{ print substr($0, 1, 1); }')") ;; (2) COLOR=$(nvm_print_color_code "$(echo "$COLORS" | awk '{ print substr($0, 2, 1); }')") ;; (3) COLOR=$(nvm_print_color_code "$(echo "$COLORS" | awk '{ print substr($0, 3, 1); }')") ;; (4) COLOR=$(nvm_print_color_code "$(echo "$COLORS" | awk '{ print substr($0, 4, 1); }')") ;; (5) COLOR=$(nvm_print_color_code "$(echo "$COLORS" | awk '{ print substr($0, 5, 1); }')") ;; (6) SYS_COLOR=$(nvm_print_color_code "$(echo "$COLORS" | awk '{ print substr($0, 2, 1); }')") COLOR=$(nvm_echo "$SYS_COLOR" | command tr '0;' '1;') ;; (*) nvm_err "Invalid color index, ${1-}" return 1 ;; esac nvm_echo "$COLOR" } nvm_get_default_packages () { local NVM_DEFAULT_PACKAGE_FILE="${NVM_DIR}/default-packages" if [ -f "${NVM_DEFAULT_PACKAGE_FILE}" ] then local DEFAULT_PACKAGES DEFAULT_PACKAGES='' local line WORK=$(mktemp -d) || exit $? trap "command rm -rf '$WORK'" EXIT sed -e '$a\' "${NVM_DEFAULT_PACKAGE_FILE}" > "${WORK}/default-packages" while IFS=' ' read -r line do [ -n "${line-}" ] || continue [ "$(nvm_echo "${line}" | command cut -c1)" != "#" ] || continue case $line in (*\ *) nvm_err "Only one package per line is allowed in the ${NVM_DIR}/default-packages file. Please remove any lines with multiple space-separated values." return 1 ;; esac DEFAULT_PACKAGES="${DEFAULT_PACKAGES}${line} " done < "${WORK}/default-packages" echo "${DEFAULT_PACKAGES}" | command xargs fi } nvm_get_download_slug () { local FLAVOR case "${1-}" in (node | iojs) FLAVOR="${1}" ;; (*) nvm_err 'supported flavors: node, iojs' return 1 ;; esac local KIND case "${2-}" in (binary | source) KIND="${2}" ;; (*) nvm_err 'supported kinds: binary, source' return 2 ;; esac local VERSION VERSION="${3-}" local NVM_OS NVM_OS="$(nvm_get_os)" local NVM_ARCH NVM_ARCH="$(nvm_get_arch)" if ! nvm_is_merged_node_version "${VERSION}" then if [ "${NVM_ARCH}" = 'armv6l' ] || [ "${NVM_ARCH}" = 'armv7l' ] then NVM_ARCH="arm-pi" fi fi if nvm_version_greater '14.17.0' "${VERSION}" || ( nvm_version_greater_than_or_equal_to "${VERSION}" '15.0.0' && nvm_version_greater '16.0.0' "${VERSION}" ) then if [ "_${NVM_OS}" = '_darwin' ] && [ "${NVM_ARCH}" = 'arm64' ] then NVM_ARCH=x64 fi fi if [ "${KIND}" = 'binary' ] then nvm_echo "${FLAVOR}-${VERSION}-${NVM_OS}-${NVM_ARCH}" elif [ "${KIND}" = 'source' ] then nvm_echo "${FLAVOR}-${VERSION}" fi } nvm_get_latest () { local NVM_LATEST_URL local CURL_COMPRESSED_FLAG if nvm_has "curl" then if nvm_curl_use_compression then CURL_COMPRESSED_FLAG="--compressed" fi NVM_LATEST_URL="$(curl ${CURL_COMPRESSED_FLAG:-} -q -w "%{url_effective}\\n" -L -s -S https://latest.nvm.sh -o /dev/null)" elif nvm_has "wget" then NVM_LATEST_URL="$(wget -q https://latest.nvm.sh --server-response -O /dev/null 2>&1 | command awk '/^ Location: /{DEST=$2} END{ print DEST }')" else nvm_err 'nvm needs curl or wget to proceed.' return 1 fi if [ -z "${NVM_LATEST_URL}" ] then nvm_err "https://latest.nvm.sh did not redirect to the latest release on GitHub" return 2 fi nvm_echo "${NVM_LATEST_URL##*/}" } nvm_get_make_jobs () { if nvm_is_natural_num "${1-}" then NVM_MAKE_JOBS="$1" nvm_echo "number of \`make\` jobs: ${NVM_MAKE_JOBS}" return elif [ -n "${1-}" ] then unset NVM_MAKE_JOBS nvm_err "$1 is invalid for number of \`make\` jobs, must be a natural number" fi local NVM_OS NVM_OS="$(nvm_get_os)" local NVM_CPU_CORES case "_${NVM_OS}" in ("_linux") NVM_CPU_CORES="$(nvm_grep -c -E '^processor.+: [0-9]+' /proc/cpuinfo)" ;; ("_freebsd" | "_darwin" | "_openbsd") NVM_CPU_CORES="$(sysctl -n hw.ncpu)" ;; ("_sunos") NVM_CPU_CORES="$(psrinfo | wc -l)" ;; ("_aix") NVM_CPU_CORES="$(pmcycles -m | wc -l)" ;; esac if ! nvm_is_natural_num "${NVM_CPU_CORES}" then nvm_err 'Can not determine how many core(s) are available, running in single-threaded mode.' nvm_err 'Please report an issue on GitHub to help us make nvm run faster on your computer!' NVM_MAKE_JOBS=1 else nvm_echo "Detected that you have ${NVM_CPU_CORES} CPU core(s)" if [ "${NVM_CPU_CORES}" -gt 2 ] then NVM_MAKE_JOBS=$((NVM_CPU_CORES - 1)) nvm_echo "Running with ${NVM_MAKE_JOBS} threads to speed up the build" else NVM_MAKE_JOBS=1 nvm_echo 'Number of CPU core(s) less than or equal to 2, running in single-threaded mode' fi fi } nvm_get_minor_version () { local VERSION VERSION="$1" if [ -z "${VERSION}" ] then nvm_err 'a version is required' return 1 fi case "${VERSION}" in (v | .* | *..* | v*[!.0123456789]* | [!v]*[!.0123456789]* | [!v0123456789]* | v[!0123456789]*) nvm_err 'invalid version number' return 2 ;; esac local PREFIXED_VERSION PREFIXED_VERSION="$(nvm_format_version "${VERSION}")" local MINOR MINOR="$(nvm_echo "${PREFIXED_VERSION}" | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2)" if [ -z "${MINOR}" ] then nvm_err 'invalid version number! (please report this)' return 3 fi nvm_echo "${MINOR}" } nvm_get_mirror () { local NVM_MIRROR NVM_MIRROR='' case "${1}-${2}" in (node-std) NVM_MIRROR="${NVM_NODEJS_ORG_MIRROR:-https://nodejs.org/dist}" ;; (iojs-std) NVM_MIRROR="${NVM_IOJS_ORG_MIRROR:-https://iojs.org/dist}" ;; (*) nvm_err 'unknown type of node.js or io.js release' return 1 ;; esac case "${NVM_MIRROR}" in (*\`* | *\\* | *\'* | *\(* | *' '*) nvm_err '$NVM_NODEJS_ORG_MIRROR and $NVM_IOJS_ORG_MIRROR may only contain a URL' return 2 ;; esac if ! nvm_echo "${NVM_MIRROR}" | command awk '{ $0 ~ "^https?://[a-zA-Z0-9./_-]+$" }' then nvm_err '$NVM_NODEJS_ORG_MIRROR and $NVM_IOJS_ORG_MIRROR may only contain a URL' return 2 fi nvm_echo "${NVM_MIRROR}" } nvm_get_os () { local NVM_UNAME NVM_UNAME="$(command uname -a)" local NVM_OS case "${NVM_UNAME}" in (Linux\ *) NVM_OS=linux ;; (Darwin\ *) NVM_OS=darwin ;; (SunOS\ *) NVM_OS=sunos ;; (FreeBSD\ *) NVM_OS=freebsd ;; (OpenBSD\ *) NVM_OS=openbsd ;; (AIX\ *) NVM_OS=aix ;; (CYGWIN* | MSYS* | MINGW*) NVM_OS=win ;; esac nvm_echo "${NVM_OS-}" } nvm_grep () { GREP_OPTIONS='' command grep "$@" } nvm_has () { type "${1-}" > /dev/null 2>&1 } nvm_has_colors () { local NVM_NUM_COLORS if nvm_has tput then NVM_NUM_COLORS="$(tput -T "${TERM:-vt100}" colors)" fi [ "${NVM_NUM_COLORS:--1}" -ge 8 ] } nvm_has_non_aliased () { nvm_has "${1-}" && ! nvm_is_alias "${1-}" } nvm_has_solaris_binary () { local VERSION="${1-}" if nvm_is_merged_node_version "${VERSION}" then return 0 elif nvm_is_iojs_version "${VERSION}" then nvm_iojs_version_has_solaris_binary "${VERSION}" else nvm_node_version_has_solaris_binary "${VERSION}" fi } nvm_has_system_iojs () { [ "$(nvm deactivate >/dev/null 2>&1 && command -v iojs)" != '' ] } nvm_has_system_node () { [ "$(nvm deactivate >/dev/null 2>&1 && command -v node)" != '' ] } nvm_install_binary () { local FLAVOR case "${1-}" in (node | iojs) FLAVOR="${1}" ;; (*) nvm_err 'supported flavors: node, iojs' return 4 ;; esac local TYPE TYPE="${2-}" local PREFIXED_VERSION PREFIXED_VERSION="${3-}" if [ -z "${PREFIXED_VERSION}" ] then nvm_err 'A version number is required.' return 3 fi local nosource nosource="${4-}" local VERSION VERSION="$(nvm_strip_iojs_prefix "${PREFIXED_VERSION}")" local NVM_OS NVM_OS="$(nvm_get_os)" if [ -z "${NVM_OS}" ] then return 2 fi local TARBALL local TMPDIR local PROGRESS_BAR local NODE_OR_IOJS if [ "${FLAVOR}" = 'node' ] then NODE_OR_IOJS="${FLAVOR}" elif [ "${FLAVOR}" = 'iojs' ] then NODE_OR_IOJS="io.js" fi if [ "${NVM_NO_PROGRESS-}" = "1" ] then PROGRESS_BAR="-sS" else PROGRESS_BAR="--progress-bar" fi nvm_echo "Downloading and installing ${NODE_OR_IOJS-} ${VERSION}..." TARBALL="$(PROGRESS_BAR="${PROGRESS_BAR}" nvm_download_artifact "${FLAVOR}" binary "${TYPE-}" "${VERSION}" | command tail -1)" if [ -f "${TARBALL}" ] then TMPDIR="$(dirname "${TARBALL}")/files" fi if nvm_install_binary_extract "${NVM_OS}" "${PREFIXED_VERSION}" "${VERSION}" "${TARBALL}" "${TMPDIR}" then if [ -n "${ALIAS-}" ] then nvm alias "${ALIAS}" "${provided_version}" fi return 0 fi if [ "${nosource-}" = '1' ] then nvm_err 'Binary download failed. Download from source aborted.' return 0 fi nvm_err 'Binary download failed, trying source.' if [ -n "${TMPDIR-}" ] then command rm -rf "${TMPDIR}" fi return 1 } nvm_install_binary_extract () { if [ "$#" -ne 5 ] then nvm_err 'nvm_install_binary_extract needs 5 parameters' return 1 fi local NVM_OS local PREFIXED_VERSION local VERSION local TARBALL local TMPDIR NVM_OS="${1}" PREFIXED_VERSION="${2}" VERSION="${3}" TARBALL="${4}" TMPDIR="${5}" local VERSION_PATH [ -n "${TMPDIR-}" ] && command mkdir -p "${TMPDIR}" && VERSION_PATH="$(nvm_version_path "${PREFIXED_VERSION}")" || return 1 if [ "${NVM_OS}" = 'win' ] then VERSION_PATH="${VERSION_PATH}/bin" command unzip -q "${TARBALL}" -d "${TMPDIR}" || return 1 else nvm_extract_tarball "${NVM_OS}" "${VERSION}" "${TARBALL}" "${TMPDIR}" fi command mkdir -p "${VERSION_PATH}" || return 1 if [ "${NVM_OS}" = 'win' ] then command mv "${TMPDIR}/"*/* "${VERSION_PATH}" || return 1 command chmod +x "${VERSION_PATH}"/node.exe || return 1 command chmod +x "${VERSION_PATH}"/npm || return 1 command chmod +x "${VERSION_PATH}"/npx 2> /dev/null else command mv "${TMPDIR}/"* "${VERSION_PATH}" || return 1 fi command rm -rf "${TMPDIR}" return 0 } nvm_install_default_packages () { local DEFAULT_PACKAGES DEFAULT_PACKAGES="$(nvm_get_default_packages)" EXIT_CODE=$? if [ $EXIT_CODE -ne 0 ] || [ -z "${DEFAULT_PACKAGES}" ] then return $EXIT_CODE fi nvm_echo "Installing default global packages from ${NVM_DIR}/default-packages..." nvm_echo "npm install -g --quiet ${DEFAULT_PACKAGES}" if ! nvm_echo "${DEFAULT_PACKAGES}" | command xargs npm install -g --quiet then nvm_err "Failed installing default packages. Please check if your default-packages file or a package in it has problems!" return 1 fi } nvm_install_latest_npm () { nvm_echo 'Attempting to upgrade to the latest working version of npm...' local NODE_VERSION NODE_VERSION="$(nvm_strip_iojs_prefix "$(nvm_ls_current)")" if [ "${NODE_VERSION}" = 'system' ] then NODE_VERSION="$(node --version)" elif [ "${NODE_VERSION}" = 'none' ] then nvm_echo "Detected node version ${NODE_VERSION}, npm version v${NPM_VERSION}" NODE_VERSION='' fi if [ -z "${NODE_VERSION}" ] then nvm_err 'Unable to obtain node version.' return 1 fi local NPM_VERSION NPM_VERSION="$(npm --version 2>/dev/null)" if [ -z "${NPM_VERSION}" ] then nvm_err 'Unable to obtain npm version.' return 2 fi local NVM_NPM_CMD NVM_NPM_CMD='npm' if [ "${NVM_DEBUG-}" = 1 ] then nvm_echo "Detected node version ${NODE_VERSION}, npm version v${NPM_VERSION}" NVM_NPM_CMD='nvm_echo npm' fi local NVM_IS_0_6 NVM_IS_0_6=0 if nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 0.6.0 && nvm_version_greater 0.7.0 "${NODE_VERSION}" then NVM_IS_0_6=1 fi local NVM_IS_0_9 NVM_IS_0_9=0 if nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 0.9.0 && nvm_version_greater 0.10.0 "${NODE_VERSION}" then NVM_IS_0_9=1 fi if [ $NVM_IS_0_6 -eq 1 ] then nvm_echo '* `node` v0.6.x can only upgrade to `npm` v1.3.x' $NVM_NPM_CMD install -g npm@1.3 elif [ $NVM_IS_0_9 -eq 0 ] then if nvm_version_greater_than_or_equal_to "${NPM_VERSION}" 1.0.0 && nvm_version_greater 2.0.0 "${NPM_VERSION}" then nvm_echo '* `npm` v1.x needs to first jump to `npm` v1.4.28 to be able to upgrade further' $NVM_NPM_CMD install -g npm@1.4.28 elif nvm_version_greater_than_or_equal_to "${NPM_VERSION}" 2.0.0 && nvm_version_greater 3.0.0 "${NPM_VERSION}" then nvm_echo '* `npm` v2.x needs to first jump to the latest v2 to be able to upgrade further' $NVM_NPM_CMD install -g npm@2 fi fi if [ $NVM_IS_0_9 -eq 1 ] || [ $NVM_IS_0_6 -eq 1 ] then nvm_echo '* node v0.6 and v0.9 are unable to upgrade further' elif nvm_version_greater 1.1.0 "${NODE_VERSION}" then nvm_echo '* `npm` v4.5.x is the last version that works on `node` versions < v1.1.0' $NVM_NPM_CMD install -g npm@4.5 elif nvm_version_greater 4.0.0 "${NODE_VERSION}" then nvm_echo '* `npm` v5 and higher do not work on `node` versions below v4.0.0' $NVM_NPM_CMD install -g npm@4 elif [ $NVM_IS_0_9 -eq 0 ] && [ $NVM_IS_0_6 -eq 0 ] then local NVM_IS_4_4_OR_BELOW NVM_IS_4_4_OR_BELOW=0 if nvm_version_greater 4.5.0 "${NODE_VERSION}" then NVM_IS_4_4_OR_BELOW=1 fi local NVM_IS_5_OR_ABOVE NVM_IS_5_OR_ABOVE=0 if [ $NVM_IS_4_4_OR_BELOW -eq 0 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 5.0.0 then NVM_IS_5_OR_ABOVE=1 fi local NVM_IS_6_OR_ABOVE NVM_IS_6_OR_ABOVE=0 local NVM_IS_6_2_OR_ABOVE NVM_IS_6_2_OR_ABOVE=0 if [ $NVM_IS_5_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 6.0.0 then NVM_IS_6_OR_ABOVE=1 if nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 6.2.0 then NVM_IS_6_2_OR_ABOVE=1 fi fi local NVM_IS_9_OR_ABOVE NVM_IS_9_OR_ABOVE=0 local NVM_IS_9_3_OR_ABOVE NVM_IS_9_3_OR_ABOVE=0 if [ $NVM_IS_6_2_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 9.0.0 then NVM_IS_9_OR_ABOVE=1 if nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 9.3.0 then NVM_IS_9_3_OR_ABOVE=1 fi fi local NVM_IS_10_OR_ABOVE NVM_IS_10_OR_ABOVE=0 if [ $NVM_IS_9_3_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 10.0.0 then NVM_IS_10_OR_ABOVE=1 fi local NVM_IS_12_LTS_OR_ABOVE NVM_IS_12_LTS_OR_ABOVE=0 if [ $NVM_IS_10_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 12.13.0 then NVM_IS_12_LTS_OR_ABOVE=1 fi local NVM_IS_13_OR_ABOVE NVM_IS_13_OR_ABOVE=0 if [ $NVM_IS_12_LTS_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 13.0.0 then NVM_IS_13_OR_ABOVE=1 fi local NVM_IS_14_LTS_OR_ABOVE NVM_IS_14_LTS_OR_ABOVE=0 if [ $NVM_IS_13_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 14.15.0 then NVM_IS_14_LTS_OR_ABOVE=1 fi local NVM_IS_14_17_OR_ABOVE NVM_IS_14_17_OR_ABOVE=0 if [ $NVM_IS_14_LTS_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 14.17.0 then NVM_IS_14_17_OR_ABOVE=1 fi local NVM_IS_15_OR_ABOVE NVM_IS_15_OR_ABOVE=0 if [ $NVM_IS_14_LTS_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 15.0.0 then NVM_IS_15_OR_ABOVE=1 fi local NVM_IS_16_OR_ABOVE NVM_IS_16_OR_ABOVE=0 if [ $NVM_IS_15_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 16.0.0 then NVM_IS_16_OR_ABOVE=1 fi local NVM_IS_16_LTS_OR_ABOVE NVM_IS_16_LTS_OR_ABOVE=0 if [ $NVM_IS_16_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 16.13.0 then NVM_IS_16_LTS_OR_ABOVE=1 fi local NVM_IS_17_OR_ABOVE NVM_IS_17_OR_ABOVE=0 if [ $NVM_IS_16_LTS_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 17.0.0 then NVM_IS_17_OR_ABOVE=1 fi local NVM_IS_18_OR_ABOVE NVM_IS_18_OR_ABOVE=0 if [ $NVM_IS_17_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 18.0.0 then NVM_IS_18_OR_ABOVE=1 fi local NVM_IS_18_17_OR_ABOVE NVM_IS_18_17_OR_ABOVE=0 if [ $NVM_IS_18_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 18.17.0 then NVM_IS_18_17_OR_ABOVE=1 fi local NVM_IS_19_OR_ABOVE NVM_IS_19_OR_ABOVE=0 if [ $NVM_IS_18_17_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 19.0.0 then NVM_IS_19_OR_ABOVE=1 fi local NVM_IS_20_5_OR_ABOVE NVM_IS_20_5_OR_ABOVE=0 if [ $NVM_IS_19_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 20.5.0 then NVM_IS_20_5_OR_ABOVE=1 fi if [ $NVM_IS_4_4_OR_BELOW -eq 1 ] || { [ $NVM_IS_5_OR_ABOVE -eq 1 ] && nvm_version_greater 5.10.0 "${NODE_VERSION}" } then nvm_echo '* `npm` `v5.3.x` is the last version that works on `node` 4.x versions below v4.4, or 5.x versions below v5.10, due to `Buffer.alloc`' $NVM_NPM_CMD install -g npm@5.3 elif [ $NVM_IS_4_4_OR_BELOW -eq 0 ] && nvm_version_greater 4.7.0 "${NODE_VERSION}" then nvm_echo '* `npm` `v5.4.1` is the last version that works on `node` `v4.5` and `v4.6`' $NVM_NPM_CMD install -g npm@5.4.1 elif [ $NVM_IS_6_OR_ABOVE -eq 0 ] then nvm_echo '* `npm` `v5.x` is the last version that works on `node` below `v6.0.0`' $NVM_NPM_CMD install -g npm@5 elif { [ $NVM_IS_6_OR_ABOVE -eq 1 ] && [ $NVM_IS_6_2_OR_ABOVE -eq 0 ] } || { [ $NVM_IS_9_OR_ABOVE -eq 1 ] && [ $NVM_IS_9_3_OR_ABOVE -eq 0 ] } then nvm_echo '* `npm` `v6.9` is the last version that works on `node` `v6.0.x`, `v6.1.x`, `v9.0.x`, `v9.1.x`, or `v9.2.x`' $NVM_NPM_CMD install -g npm@6.9 elif [ $NVM_IS_10_OR_ABOVE -eq 0 ] then if nvm_version_greater 4.4.4 "${NPM_VERSION}" then nvm_echo '* `npm` `v4.4.4` or later is required to install npm v6.14.18' $NVM_NPM_CMD install -g npm@4 fi nvm_echo '* `npm` `v6.x` is the last version that works on `node` below `v10.0.0`' $NVM_NPM_CMD install -g npm@6 elif [ $NVM_IS_12_LTS_OR_ABOVE -eq 0 ] || { [ $NVM_IS_13_OR_ABOVE -eq 1 ] && [ $NVM_IS_14_LTS_OR_ABOVE -eq 0 ] } || { [ $NVM_IS_15_OR_ABOVE -eq 1 ] && [ $NVM_IS_16_OR_ABOVE -eq 0 ] } then nvm_echo '* `npm` `v7.x` is the last version that works on `node` `v13`, `v15`, below `v12.13`, or `v14.0` - `v14.15`' $NVM_NPM_CMD install -g npm@7 elif { [ $NVM_IS_12_LTS_OR_ABOVE -eq 1 ] && [ $NVM_IS_13_OR_ABOVE -eq 0 ] } || { [ $NVM_IS_14_LTS_OR_ABOVE -eq 1 ] && [ $NVM_IS_14_17_OR_ABOVE -eq 0 ] } || { [ $NVM_IS_16_OR_ABOVE -eq 1 ] && [ $NVM_IS_16_LTS_OR_ABOVE -eq 0 ] } || { [ $NVM_IS_17_OR_ABOVE -eq 1 ] && [ $NVM_IS_18_OR_ABOVE -eq 0 ] } then nvm_echo '* `npm` `v8.x` is the last version that works on `node` `v12`, `v14.13` - `v14.16`, or `v16.0` - `v16.12`' $NVM_NPM_CMD install -g npm@8 elif [ $NVM_IS_18_17_OR_ABOVE -eq 0 ] || { [ $NVM_IS_19_OR_ABOVE -eq 1 ] && [ $NVM_IS_20_5_OR_ABOVE -eq 0 ] } then nvm_echo '* `npm` `v9.x` is the last version that works on `node` `< v18.17`, `v19`, or `v20.0` - `v20.4`' $NVM_NPM_CMD install -g npm@9 else nvm_echo '* Installing latest `npm`; if this does not work on your node version, please report a bug!' $NVM_NPM_CMD install -g npm fi fi nvm_echo "* npm upgraded to: v$(npm --version 2>/dev/null)" } nvm_install_npm_if_needed () { local VERSION VERSION="$(nvm_ls_current)" if ! nvm_has "npm" then nvm_echo 'Installing npm...' if nvm_version_greater 0.2.0 "${VERSION}" then nvm_err 'npm requires node v0.2.3 or higher' elif nvm_version_greater_than_or_equal_to "${VERSION}" 0.2.0 then if nvm_version_greater 0.2.3 "${VERSION}" then nvm_err 'npm requires node v0.2.3 or higher' else nvm_download -L https://npmjs.org/install.sh -o - | clean=yes npm_install=0.2.19 sh fi else nvm_download -L https://npmjs.org/install.sh -o - | clean=yes sh fi fi return $? } nvm_install_source () { local FLAVOR case "${1-}" in (node | iojs) FLAVOR="${1}" ;; (*) nvm_err 'supported flavors: node, iojs' return 4 ;; esac local TYPE TYPE="${2-}" local PREFIXED_VERSION PREFIXED_VERSION="${3-}" if [ -z "${PREFIXED_VERSION}" ] then nvm_err 'A version number is required.' return 3 fi local VERSION VERSION="$(nvm_strip_iojs_prefix "${PREFIXED_VERSION}")" local NVM_MAKE_JOBS NVM_MAKE_JOBS="${4-}" local ADDITIONAL_PARAMETERS ADDITIONAL_PARAMETERS="${5-}" local NVM_ARCH NVM_ARCH="$(nvm_get_arch)" if [ "${NVM_ARCH}" = 'armv6l' ] || [ "${NVM_ARCH}" = 'armv7l' ] then if [ -n "${ADDITIONAL_PARAMETERS}" ] then ADDITIONAL_PARAMETERS="--without-snapshot ${ADDITIONAL_PARAMETERS}" else ADDITIONAL_PARAMETERS='--without-snapshot' fi fi if [ -n "${ADDITIONAL_PARAMETERS}" ] then nvm_echo "Additional options while compiling: ${ADDITIONAL_PARAMETERS}" fi local NVM_OS NVM_OS="$(nvm_get_os)" local make make='make' local MAKE_CXX case "${NVM_OS}" in ('freebsd' | 'openbsd') make='gmake' MAKE_CXX="CC=${CC:-cc} CXX=${CXX:-c++}" ;; ('darwin') MAKE_CXX="CC=${CC:-cc} CXX=${CXX:-c++}" ;; ('aix') make='gmake' ;; esac if nvm_has "clang++" && nvm_has "clang" && nvm_version_greater_than_or_equal_to "$(nvm_clang_version)" 3.5 then if [ -z "${CC-}" ] || [ -z "${CXX-}" ] then nvm_echo "Clang v3.5+ detected! CC or CXX not specified, will use Clang as C/C++ compiler!" MAKE_CXX="CC=${CC:-cc} CXX=${CXX:-c++}" fi fi local TARBALL local TMPDIR local VERSION_PATH if [ "${NVM_NO_PROGRESS-}" = "1" ] then PROGRESS_BAR="-sS" else PROGRESS_BAR="--progress-bar" fi nvm_is_zsh && setopt local_options shwordsplit TARBALL="$(PROGRESS_BAR="${PROGRESS_BAR}" nvm_download_artifact "${FLAVOR}" source "${TYPE}" "${VERSION}" | command tail -1)" && [ -f "${TARBALL}" ] && TMPDIR="$(dirname "${TARBALL}")/files" && if ! ( command mkdir -p "${TMPDIR}" && nvm_extract_tarball "${NVM_OS}" "${VERSION}" "${TARBALL}" "${TMPDIR}" && VERSION_PATH="$(nvm_version_path "${PREFIXED_VERSION}")" && nvm_cd "${TMPDIR}" && nvm_echo '$>'./configure --prefix="${VERSION_PATH}" $ADDITIONAL_PARAMETERS'<' && ./configure --prefix="${VERSION_PATH}" $ADDITIONAL_PARAMETERS && $make -j "${NVM_MAKE_JOBS}" ${MAKE_CXX-} && command rm -f "${VERSION_PATH}" 2> /dev/null && $make -j "${NVM_MAKE_JOBS}" ${MAKE_CXX-} install ) then nvm_err "nvm: install ${VERSION} failed!" command rm -rf "${TMPDIR-}" return 1 fi } nvm_iojs_prefix () { nvm_echo 'iojs' } nvm_iojs_version_has_solaris_binary () { local IOJS_VERSION IOJS_VERSION="$1" local STRIPPED_IOJS_VERSION STRIPPED_IOJS_VERSION="$(nvm_strip_iojs_prefix "${IOJS_VERSION}")" if [ "_${STRIPPED_IOJS_VERSION}" = "${IOJS_VERSION}" ] then return 1 fi nvm_version_greater_than_or_equal_to "${STRIPPED_IOJS_VERSION}" v3.3.1 } nvm_is_alias () { \alias "${1-}" > /dev/null 2>&1 } nvm_is_iojs_version () { case "${1-}" in (iojs-*) return 0 ;; esac return 1 } nvm_is_merged_node_version () { nvm_version_greater_than_or_equal_to "$1" v4.0.0 } nvm_is_natural_num () { if [ -z "$1" ] then return 4 fi case "$1" in (0) return 1 ;; (-*) return 3 ;; (*) [ "$1" -eq "$1" ] 2> /dev/null ;; esac } nvm_is_valid_version () { if nvm_validate_implicit_alias "${1-}" 2> /dev/null then return 0 fi case "${1-}" in ("$(nvm_iojs_prefix)" | "$(nvm_node_prefix)") return 0 ;; (*) local VERSION VERSION="$(nvm_strip_iojs_prefix "${1-}")" nvm_version_greater_than_or_equal_to "${VERSION}" 0 ;; esac } nvm_is_version_installed () { if [ -z "${1-}" ] then return 1 fi local NVM_NODE_BINARY NVM_NODE_BINARY='node' if [ "_$(nvm_get_os)" = '_win' ] then NVM_NODE_BINARY='node.exe' fi if [ -x "$(nvm_version_path "$1" 2>/dev/null)/bin/${NVM_NODE_BINARY}" ] then return 0 fi return 1 } nvm_is_zsh () { [ -n "${ZSH_VERSION-}" ] } nvm_list_aliases () { local ALIAS ALIAS="${1-}" local NVM_CURRENT NVM_CURRENT="$(nvm_ls_current)" local NVM_ALIAS_DIR NVM_ALIAS_DIR="$(nvm_alias_path)" command mkdir -p "${NVM_ALIAS_DIR}/lts" if [ "${ALIAS}" != "${ALIAS#lts/}" ] then nvm_alias "${ALIAS}" return $? fi nvm_is_zsh && unsetopt local_options nomatch ( local ALIAS_PATH for ALIAS_PATH in "${NVM_ALIAS_DIR}/${ALIAS}"* do NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_CURRENT="${NVM_CURRENT}" nvm_print_alias_path "${NVM_ALIAS_DIR}" "${ALIAS_PATH}" & done wait ) | command sort ( local ALIAS_NAME for ALIAS_NAME in "$(nvm_node_prefix)" "stable" "unstable" "$(nvm_iojs_prefix)" do { if [ ! -f "${NVM_ALIAS_DIR}/${ALIAS_NAME}" ] && { [ -z "${ALIAS}" ] || [ "${ALIAS_NAME}" = "${ALIAS}" ] } then NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_CURRENT="${NVM_CURRENT}" nvm_print_default_alias "${ALIAS_NAME}" fi } & done wait ) | command sort ( local LTS_ALIAS for ALIAS_PATH in "${NVM_ALIAS_DIR}/lts/${ALIAS}"* do { LTS_ALIAS="$(NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_LTS=true nvm_print_alias_path "${NVM_ALIAS_DIR}" "${ALIAS_PATH}")" if [ -n "${LTS_ALIAS}" ] then nvm_echo "${LTS_ALIAS}" fi } & done wait ) | command sort return } nvm_ls () { local PATTERN PATTERN="${1-}" local VERSIONS VERSIONS='' if [ "${PATTERN}" = 'current' ] then nvm_ls_current return fi local NVM_IOJS_PREFIX NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" local NVM_NODE_PREFIX NVM_NODE_PREFIX="$(nvm_node_prefix)" local NVM_VERSION_DIR_IOJS NVM_VERSION_DIR_IOJS="$(nvm_version_dir "${NVM_IOJS_PREFIX}")" local NVM_VERSION_DIR_NEW NVM_VERSION_DIR_NEW="$(nvm_version_dir new)" local NVM_VERSION_DIR_OLD NVM_VERSION_DIR_OLD="$(nvm_version_dir old)" case "${PATTERN}" in ("${NVM_IOJS_PREFIX}" | "${NVM_NODE_PREFIX}") PATTERN="${PATTERN}-" ;; (*) if nvm_resolve_local_alias "${PATTERN}" then return fi PATTERN="$(nvm_ensure_version_prefix "${PATTERN}")" ;; esac if [ "${PATTERN}" = 'N/A' ] then return fi local NVM_PATTERN_STARTS_WITH_V case $PATTERN in (v*) NVM_PATTERN_STARTS_WITH_V=true ;; (*) NVM_PATTERN_STARTS_WITH_V=false ;; esac if [ $NVM_PATTERN_STARTS_WITH_V = true ] && [ "_$(nvm_num_version_groups "${PATTERN}")" = "_3" ] then if nvm_is_version_installed "${PATTERN}" then VERSIONS="${PATTERN}" elif nvm_is_version_installed "$(nvm_add_iojs_prefix "${PATTERN}")" then VERSIONS="$(nvm_add_iojs_prefix "${PATTERN}")" fi else case "${PATTERN}" in ("${NVM_IOJS_PREFIX}-" | "${NVM_NODE_PREFIX}-" | "system") ;; (*) local NUM_VERSION_GROUPS NUM_VERSION_GROUPS="$(nvm_num_version_groups "${PATTERN}")" if [ "${NUM_VERSION_GROUPS}" = "2" ] || [ "${NUM_VERSION_GROUPS}" = "1" ] then PATTERN="${PATTERN%.}." fi ;; esac nvm_is_zsh && setopt local_options shwordsplit nvm_is_zsh && unsetopt local_options markdirs local NVM_DIRS_TO_SEARCH1 NVM_DIRS_TO_SEARCH1='' local NVM_DIRS_TO_SEARCH2 NVM_DIRS_TO_SEARCH2='' local NVM_DIRS_TO_SEARCH3 NVM_DIRS_TO_SEARCH3='' local NVM_ADD_SYSTEM NVM_ADD_SYSTEM=false if nvm_is_iojs_version "${PATTERN}" then NVM_DIRS_TO_SEARCH1="${NVM_VERSION_DIR_IOJS}" PATTERN="$(nvm_strip_iojs_prefix "${PATTERN}")" if nvm_has_system_iojs then NVM_ADD_SYSTEM=true fi elif [ "${PATTERN}" = "${NVM_NODE_PREFIX}-" ] then NVM_DIRS_TO_SEARCH1="${NVM_VERSION_DIR_OLD}" NVM_DIRS_TO_SEARCH2="${NVM_VERSION_DIR_NEW}" PATTERN='' if nvm_has_system_node then NVM_ADD_SYSTEM=true fi else NVM_DIRS_TO_SEARCH1="${NVM_VERSION_DIR_OLD}" NVM_DIRS_TO_SEARCH2="${NVM_VERSION_DIR_NEW}" NVM_DIRS_TO_SEARCH3="${NVM_VERSION_DIR_IOJS}" if nvm_has_system_iojs || nvm_has_system_node then NVM_ADD_SYSTEM=true fi fi if ! [ -d "${NVM_DIRS_TO_SEARCH1}" ] || ! ( command ls -1qA "${NVM_DIRS_TO_SEARCH1}" | nvm_grep -q . ) then NVM_DIRS_TO_SEARCH1='' fi if ! [ -d "${NVM_DIRS_TO_SEARCH2}" ] || ! ( command ls -1qA "${NVM_DIRS_TO_SEARCH2}" | nvm_grep -q . ) then NVM_DIRS_TO_SEARCH2="${NVM_DIRS_TO_SEARCH1}" fi if ! [ -d "${NVM_DIRS_TO_SEARCH3}" ] || ! ( command ls -1qA "${NVM_DIRS_TO_SEARCH3}" | nvm_grep -q . ) then NVM_DIRS_TO_SEARCH3="${NVM_DIRS_TO_SEARCH2}" fi local SEARCH_PATTERN if [ -z "${PATTERN}" ] then PATTERN='v' SEARCH_PATTERN='.*' else SEARCH_PATTERN="$(nvm_echo "${PATTERN}" | command sed 's#\.#\\\.#g;')" fi if [ -n "${NVM_DIRS_TO_SEARCH1}${NVM_DIRS_TO_SEARCH2}${NVM_DIRS_TO_SEARCH3}" ] then VERSIONS="$(command find "${NVM_DIRS_TO_SEARCH1}"/* "${NVM_DIRS_TO_SEARCH2}"/* "${NVM_DIRS_TO_SEARCH3}"/* -name . -o -type d -prune -o -path "${PATTERN}*" \ | command sed -e " s#${NVM_VERSION_DIR_IOJS}/#versions/${NVM_IOJS_PREFIX}/#; s#^${NVM_DIR}/##; \\#^[^v]# d; \\#^versions\$# d; s#^versions/##; s#^v#${NVM_NODE_PREFIX}/v#; \\#${SEARCH_PATTERN}# !d; " \ -e 's#^\([^/]\{1,\}\)/\(.*\)$#\2.\1#;' \ | command sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n \ | command sed -e 's#\(.*\)\.\([^\.]\{1,\}\)$#\2-\1#;' \ -e "s#^${NVM_NODE_PREFIX}-##;" \ )" fi fi if [ "${NVM_ADD_SYSTEM-}" = true ] then if [ -z "${PATTERN}" ] || [ "${PATTERN}" = 'v' ] then VERSIONS="${VERSIONS} system" elif [ "${PATTERN}" = 'system' ] then VERSIONS="system" fi fi if [ -z "${VERSIONS}" ] then nvm_echo 'N/A' return 3 fi nvm_echo "${VERSIONS}" } nvm_ls_current () { local NVM_LS_CURRENT_NODE_PATH if ! NVM_LS_CURRENT_NODE_PATH="$(command which node 2>/dev/null)" then nvm_echo 'none' elif nvm_tree_contains_path "$(nvm_version_dir iojs)" "${NVM_LS_CURRENT_NODE_PATH}" then nvm_add_iojs_prefix "$(iojs --version 2>/dev/null)" elif nvm_tree_contains_path "${NVM_DIR}" "${NVM_LS_CURRENT_NODE_PATH}" then local VERSION VERSION="$(node --version 2>/dev/null)" if [ "${VERSION}" = "v0.6.21-pre" ] then nvm_echo 'v0.6.21' else nvm_echo "${VERSION:-none}" fi else nvm_echo 'system' fi } nvm_ls_remote () { local PATTERN PATTERN="${1-}" if nvm_validate_implicit_alias "${PATTERN}" 2> /dev/null then local IMPLICIT IMPLICIT="$(nvm_print_implicit_alias remote "${PATTERN}")" if [ -z "${IMPLICIT-}" ] || [ "${IMPLICIT}" = 'N/A' ] then nvm_echo "N/A" return 3 fi PATTERN="$(NVM_LTS="${NVM_LTS-}" nvm_ls_remote "${IMPLICIT}" | command tail -1 | command awk '{ print $1 }')" elif [ -n "${PATTERN}" ] then PATTERN="$(nvm_ensure_version_prefix "${PATTERN}")" else PATTERN=".*" fi NVM_LTS="${NVM_LTS-}" nvm_ls_remote_index_tab node std "${PATTERN}" } nvm_ls_remote_index_tab () { local LTS LTS="${NVM_LTS-}" if [ "$#" -lt 3 ] then nvm_err 'not enough arguments' return 5 fi local FLAVOR FLAVOR="${1-}" local TYPE TYPE="${2-}" local MIRROR MIRROR="$(nvm_get_mirror "${FLAVOR}" "${TYPE}")" if [ -z "${MIRROR}" ] then return 3 fi local PREFIX PREFIX='' case "${FLAVOR}-${TYPE}" in (iojs-std) PREFIX="$(nvm_iojs_prefix)-" ;; (node-std) PREFIX='' ;; (iojs-*) nvm_err 'unknown type of io.js release' return 4 ;; (*) nvm_err 'unknown type of node.js release' return 4 ;; esac local SORT_COMMAND SORT_COMMAND='command sort' case "${FLAVOR}" in (node) SORT_COMMAND='command sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n' ;; esac local PATTERN PATTERN="${3-}" if [ "${PATTERN#"${PATTERN%?}"}" = '.' ] then PATTERN="${PATTERN%.}" fi local VERSIONS if [ -n "${PATTERN}" ] && [ "${PATTERN}" != '*' ] then if [ "${FLAVOR}" = 'iojs' ] then PATTERN="$(nvm_ensure_version_prefix "$(nvm_strip_iojs_prefix "${PATTERN}")")" else PATTERN="$(nvm_ensure_version_prefix "${PATTERN}")" fi else unset PATTERN fi nvm_is_zsh && setopt local_options shwordsplit local VERSION_LIST VERSION_LIST="$(nvm_download -L -s "${MIRROR}/index.tab" -o - \ | command sed " 1d; s/^/${PREFIX}/; " \ )" local LTS_ALIAS local LTS_VERSION command mkdir -p "$(nvm_alias_path)/lts" { command awk '{ if ($10 ~ /^\-?$/) { next } if ($10 && !a[tolower($10)]++) { if (alias) { print alias, version } alias_name = "lts/" tolower($10) if (!alias) { print "lts/*", alias_name } alias = alias_name version = $1 } } END { if (alias) { print alias, version } }' | while read -r LTS_ALIAS_LINE do LTS_ALIAS="${LTS_ALIAS_LINE%% *}" LTS_VERSION="${LTS_ALIAS_LINE#* }" nvm_make_alias "${LTS_ALIAS}" "${LTS_VERSION}" > /dev/null 2>&1 done } < /dev/null } nvm_match_version () { local NVM_IOJS_PREFIX NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" local PROVIDED_VERSION PROVIDED_VERSION="$1" case "_${PROVIDED_VERSION}" in ("_${NVM_IOJS_PREFIX}" | '_io.js') nvm_version "${NVM_IOJS_PREFIX}" ;; ('_system') nvm_echo 'system' ;; (*) nvm_version "${PROVIDED_VERSION}" ;; esac } nvm_node_prefix () { nvm_echo 'node' } nvm_node_version_has_solaris_binary () { local NODE_VERSION NODE_VERSION="$1" local STRIPPED_IOJS_VERSION STRIPPED_IOJS_VERSION="$(nvm_strip_iojs_prefix "${NODE_VERSION}")" if [ "_${STRIPPED_IOJS_VERSION}" != "_${NODE_VERSION}" ] then return 1 fi nvm_version_greater_than_or_equal_to "${NODE_VERSION}" v0.8.6 && ! nvm_version_greater_than_or_equal_to "${NODE_VERSION}" v1.0.0 } nvm_normalize_lts () { local LTS LTS="${1-}" case "${LTS}" in (lts/-[123456789] | lts/-[123456789][0123456789]*) local N N="$(echo "${LTS}" | cut -d '-' -f 2)" N=$((N+1)) if [ $? -ne 0 ] then nvm_echo "${LTS}" return 0 fi local NVM_ALIAS_DIR NVM_ALIAS_DIR="$(nvm_alias_path)" local RESULT RESULT="$(command ls "${NVM_ALIAS_DIR}/lts" | command tail -n "${N}" | command head -n 1)" if [ "${RESULT}" != '*' ] then nvm_echo "lts/${RESULT}" else nvm_err 'That many LTS releases do not exist yet.' return 2 fi ;; (*) nvm_echo "${LTS}" ;; esac } nvm_normalize_version () { command awk 'BEGIN { split(ARGV[1], a, /\./); printf "%d%06d%06d\n", a[1], a[2], a[3]; exit; }' "${1#v}" } nvm_npm_global_modules () { local NPMLIST local VERSION VERSION="$1" NPMLIST=$(nvm use "${VERSION}" >/dev/null && npm list -g --depth=0 2>/dev/null | command sed 1,1d | nvm_grep -v 'UNMET PEER DEPENDENCY') local INSTALLS INSTALLS=$(nvm_echo "${NPMLIST}" | command sed -e '/ -> / d' -e '/\(empty\)/ d' -e 's/^.* \(.*@[^ ]*\).*/\1/' -e '/^npm@[^ ]*.*$/ d' | command xargs) local LINKS LINKS="$(nvm_echo "${NPMLIST}" | command sed -n 's/.* -> \(.*\)/\1/ p')" nvm_echo "${INSTALLS} //// ${LINKS}" } nvm_npmrc_bad_news_bears () { local NVM_NPMRC NVM_NPMRC="${1-}" if [ -n "${NVM_NPMRC}" ] && [ -f "${NVM_NPMRC}" ] && nvm_grep -Ee '^(prefix|globalconfig) *=' < "${NVM_NPMRC}" > /dev/null then return 0 fi return 1 } nvm_num_version_groups () { local VERSION VERSION="${1-}" VERSION="${VERSION#v}" VERSION="${VERSION%.}" if [ -z "${VERSION}" ] then nvm_echo "0" return fi local NVM_NUM_DOTS NVM_NUM_DOTS=$(nvm_echo "${VERSION}" | command sed -e 's/[^\.]//g') local NVM_NUM_GROUPS NVM_NUM_GROUPS=".${NVM_NUM_DOTS}" nvm_echo "${#NVM_NUM_GROUPS}" } nvm_print_alias_path () { local NVM_ALIAS_DIR NVM_ALIAS_DIR="${1-}" if [ -z "${NVM_ALIAS_DIR}" ] then nvm_err 'An alias dir is required.' return 1 fi local ALIAS_PATH ALIAS_PATH="${2-}" if [ -z "${ALIAS_PATH}" ] then nvm_err 'An alias path is required.' return 2 fi local ALIAS ALIAS="${ALIAS_PATH##"${NVM_ALIAS_DIR}"\/}" local DEST DEST="$(nvm_alias "${ALIAS}" 2>/dev/null)" || : if [ -n "${DEST}" ] then NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_LTS="${NVM_LTS-}" DEFAULT=false nvm_print_formatted_alias "${ALIAS}" "${DEST}" fi } nvm_print_color_code () { case "${1-}" in ('0') return 0 ;; ('r') nvm_echo '0;31m' ;; ('R') nvm_echo '1;31m' ;; ('g') nvm_echo '0;32m' ;; ('G') nvm_echo '1;32m' ;; ('b') nvm_echo '0;34m' ;; ('B') nvm_echo '1;34m' ;; ('c') nvm_echo '0;36m' ;; ('C') nvm_echo '1;36m' ;; ('m') nvm_echo '0;35m' ;; ('M') nvm_echo '1;35m' ;; ('y') nvm_echo '0;33m' ;; ('Y') nvm_echo '1;33m' ;; ('k') nvm_echo '0;30m' ;; ('K') nvm_echo '1;30m' ;; ('e') nvm_echo '0;37m' ;; ('W') nvm_echo '1;37m' ;; (*) nvm_err "Invalid color code: ${1-}" return 1 ;; esac } nvm_print_default_alias () { local ALIAS ALIAS="${1-}" if [ -z "${ALIAS}" ] then nvm_err 'A default alias is required.' return 1 fi local DEST DEST="$(nvm_print_implicit_alias local "${ALIAS}")" if [ -n "${DEST}" ] then NVM_NO_COLORS="${NVM_NO_COLORS-}" DEFAULT=true nvm_print_formatted_alias "${ALIAS}" "${DEST}" fi } nvm_print_formatted_alias () { local ALIAS ALIAS="${1-}" local DEST DEST="${2-}" local VERSION VERSION="${3-}" if [ -z "${VERSION}" ] then VERSION="$(nvm_version "${DEST}")" || : fi local VERSION_FORMAT local ALIAS_FORMAT local DEST_FORMAT local INSTALLED_COLOR local SYSTEM_COLOR local CURRENT_COLOR local NOT_INSTALLED_COLOR local DEFAULT_COLOR local LTS_COLOR INSTALLED_COLOR=$(nvm_get_colors 1) SYSTEM_COLOR=$(nvm_get_colors 2) CURRENT_COLOR=$(nvm_get_colors 3) NOT_INSTALLED_COLOR=$(nvm_get_colors 4) DEFAULT_COLOR=$(nvm_get_colors 5) LTS_COLOR=$(nvm_get_colors 6) ALIAS_FORMAT='%s' DEST_FORMAT='%s' VERSION_FORMAT='%s' local NEWLINE NEWLINE='\n' if [ "_${DEFAULT}" = '_true' ] then NEWLINE=' (default)\n' fi local ARROW ARROW='->' if [ -z "${NVM_NO_COLORS}" ] && nvm_has_colors then ARROW='\033[0;90m->\033[0m' if [ "_${DEFAULT}" = '_true' ] then NEWLINE=" \033[${DEFAULT_COLOR}(default)\033[0m\n" fi if [ "_${VERSION}" = "_${NVM_CURRENT-}" ] then ALIAS_FORMAT="\033[${CURRENT_COLOR}%s\033[0m" DEST_FORMAT="\033[${CURRENT_COLOR}%s\033[0m" VERSION_FORMAT="\033[${CURRENT_COLOR}%s\033[0m" elif nvm_is_version_installed "${VERSION}" then ALIAS_FORMAT="\033[${INSTALLED_COLOR}%s\033[0m" DEST_FORMAT="\033[${INSTALLED_COLOR}%s\033[0m" VERSION_FORMAT="\033[${INSTALLED_COLOR}%s\033[0m" elif [ "${VERSION}" = '∞' ] || [ "${VERSION}" = 'N/A' ] then ALIAS_FORMAT="\033[${NOT_INSTALLED_COLOR}%s\033[0m" DEST_FORMAT="\033[${NOT_INSTALLED_COLOR}%s\033[0m" VERSION_FORMAT="\033[${NOT_INSTALLED_COLOR}%s\033[0m" fi if [ "_${NVM_LTS-}" = '_true' ] then ALIAS_FORMAT="\033[${LTS_COLOR}%s\033[0m" fi if [ "_${DEST%/*}" = "_lts" ] then DEST_FORMAT="\033[${LTS_COLOR}%s\033[0m" fi elif [ "_${VERSION}" != '_∞' ] && [ "_${VERSION}" != '_N/A' ] then VERSION_FORMAT='%s *' fi if [ "${DEST}" = "${VERSION}" ] then command printf -- "${ALIAS_FORMAT} ${ARROW} ${VERSION_FORMAT}${NEWLINE}" "${ALIAS}" "${DEST}" else command printf -- "${ALIAS_FORMAT} ${ARROW} ${DEST_FORMAT} (${ARROW} ${VERSION_FORMAT})${NEWLINE}" "${ALIAS}" "${DEST}" "${VERSION}" fi } nvm_print_implicit_alias () { if [ "_$1" != "_local" ] && [ "_$1" != "_remote" ] then nvm_err "nvm_print_implicit_alias must be specified with local or remote as the first argument." return 1 fi local NVM_IMPLICIT NVM_IMPLICIT="$2" if ! nvm_validate_implicit_alias "${NVM_IMPLICIT}" then return 2 fi local NVM_IOJS_PREFIX NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" local NVM_NODE_PREFIX NVM_NODE_PREFIX="$(nvm_node_prefix)" local NVM_COMMAND local NVM_ADD_PREFIX_COMMAND local LAST_TWO case "${NVM_IMPLICIT}" in ("${NVM_IOJS_PREFIX}") NVM_COMMAND="nvm_ls_remote_iojs" NVM_ADD_PREFIX_COMMAND="nvm_add_iojs_prefix" if [ "_$1" = "_local" ] then NVM_COMMAND="nvm_ls ${NVM_IMPLICIT}" fi nvm_is_zsh && setopt local_options shwordsplit local NVM_IOJS_VERSION local EXIT_CODE NVM_IOJS_VERSION="$(${NVM_COMMAND})" && : EXIT_CODE="$?" if [ "_${EXIT_CODE}" = "_0" ] then NVM_IOJS_VERSION="$(nvm_echo "${NVM_IOJS_VERSION}" | command sed "s/^${NVM_IMPLICIT}-//" | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq | command tail -1)" fi if [ "_$NVM_IOJS_VERSION" = "_N/A" ] then nvm_echo 'N/A' else ${NVM_ADD_PREFIX_COMMAND} "${NVM_IOJS_VERSION}" fi return $EXIT_CODE ;; ("${NVM_NODE_PREFIX}") nvm_echo 'stable' return ;; (*) NVM_COMMAND="nvm_ls_remote" if [ "_$1" = "_local" ] then NVM_COMMAND="nvm_ls node" fi nvm_is_zsh && setopt local_options shwordsplit LAST_TWO=$($NVM_COMMAND | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq) ;; esac local MINOR local STABLE local UNSTABLE local MOD local NORMALIZED_VERSION nvm_is_zsh && setopt local_options shwordsplit for MINOR in $LAST_TWO do NORMALIZED_VERSION="$(nvm_normalize_version "$MINOR")" if [ "_0${NORMALIZED_VERSION#?}" != "_$NORMALIZED_VERSION" ] then STABLE="$MINOR" else MOD="$(awk 'BEGIN { print int(ARGV[1] / 1000000) % 2 ; exit(0) }' "${NORMALIZED_VERSION}")" if [ "${MOD}" -eq 0 ] then STABLE="${MINOR}" elif [ "${MOD}" -eq 1 ] then UNSTABLE="${MINOR}" fi fi done if [ "_$2" = '_stable' ] then nvm_echo "${STABLE}" elif [ "_$2" = '_unstable' ] then nvm_echo "${UNSTABLE:-"N/A"}" fi } nvm_print_npm_version () { if nvm_has "npm" then local NPM_VERSION NPM_VERSION="$(npm --version 2>/dev/null)" if [ -n "${NPM_VERSION}" ] then command printf " (npm v${NPM_VERSION})" fi fi } nvm_print_versions () { local NVM_CURRENT NVM_CURRENT=$(nvm_ls_current) local INSTALLED_COLOR local SYSTEM_COLOR local CURRENT_COLOR local NOT_INSTALLED_COLOR local DEFAULT_COLOR local LTS_COLOR local NVM_HAS_COLORS NVM_HAS_COLORS=0 INSTALLED_COLOR=$(nvm_get_colors 1) SYSTEM_COLOR=$(nvm_get_colors 2) CURRENT_COLOR=$(nvm_get_colors 3) NOT_INSTALLED_COLOR=$(nvm_get_colors 4) DEFAULT_COLOR=$(nvm_get_colors 5) LTS_COLOR=$(nvm_get_colors 6) if [ -z "${NVM_NO_COLORS-}" ] && nvm_has_colors then NVM_HAS_COLORS=1 fi command awk -v remote_versions="$(printf '%s' "${1-}" | tr '\n' '|')" -v installed_versions="$(nvm_ls | tr '\n' '|')" -v current="$NVM_CURRENT" -v installed_color="$INSTALLED_COLOR" -v system_color="$SYSTEM_COLOR" -v current_color="$CURRENT_COLOR" -v default_color="$DEFAULT_COLOR" -v old_lts_color="$DEFAULT_COLOR" -v has_colors="$NVM_HAS_COLORS" ' function alen(arr, i, len) { len=0; for(i in arr) len++; return len; } BEGIN { fmt_installed = has_colors ? (installed_color ? "\033[" installed_color "%15s\033[0m" : "%15s") : "%15s *"; fmt_system = has_colors ? (system_color ? "\033[" system_color "%15s\033[0m" : "%15s") : "%15s *"; fmt_current = has_colors ? (current_color ? "\033[" current_color "->%13s\033[0m" : "%15s") : "->%13s *"; latest_lts_color = current_color; sub(/0;/, "1;", latest_lts_color); fmt_latest_lts = has_colors && latest_lts_color ? ("\033[" latest_lts_color " (Latest LTS: %s)\033[0m") : " (Latest LTS: %s)"; fmt_old_lts = has_colors && old_lts_color ? ("\033[" old_lts_color " (LTS: %s)\033[0m") : " (LTS: %s)"; split(remote_versions, lines, "|"); split(installed_versions, installed, "|"); rows = alen(lines); for (n = 1; n <= rows; n++) { split(lines[n], fields, "[[:blank:]]+"); cols = alen(fields); version = fields[1]; is_installed = 0; for (i in installed) { if (version == installed[i]) { is_installed = 1; break; } } fmt_version = "%15s"; if (version == current) { fmt_version = fmt_current; } else if (version == "system") { fmt_version = fmt_system; } else if (is_installed) { fmt_version = fmt_installed; } padding = (!has_colors && is_installed) ? "" : " "; if (cols == 1) { formatted = sprintf(fmt_version, version); } else if (cols == 2) { formatted = sprintf((fmt_version padding fmt_old_lts), version, fields[2]); } else if (cols == 3 && fields[3] == "*") { formatted = sprintf((fmt_version padding fmt_latest_lts), version, fields[2]); } output[n] = formatted; } for (n = 1; n <= rows; n++) { print output[n] } exit }' } nvm_process_parameters () { local NVM_AUTO_MODE NVM_AUTO_MODE='use' while [ "$#" -ne 0 ] do case "$1" in (--install) NVM_AUTO_MODE='install' ;; (--no-use) NVM_AUTO_MODE='none' ;; esac shift done nvm_auto "${NVM_AUTO_MODE}" } nvm_prompt_info () { which nvm &> /dev/null || return local nvm_prompt=${$(nvm current)#v} echo "${ZSH_THEME_NVM_PROMPT_PREFIX}${nvm_prompt:gs/%/%%}${ZSH_THEME_NVM_PROMPT_SUFFIX}" } nvm_rc_version () { export NVM_RC_VERSION='' local NVMRC_PATH NVMRC_PATH="$(nvm_find_nvmrc)" if [ ! -e "${NVMRC_PATH}" ] then if [ "${NVM_SILENT:-0}" -ne 1 ] then nvm_err "No .nvmrc file found" fi return 1 fi NVM_RC_VERSION="$(command head -n 1 "${NVMRC_PATH}" | command tr -d '\r')" || command printf '' if [ -z "${NVM_RC_VERSION}" ] then if [ "${NVM_SILENT:-0}" -ne 1 ] then nvm_err "Warning: empty .nvmrc file found at \"${NVMRC_PATH}\"" fi return 2 fi if [ "${NVM_SILENT:-0}" -ne 1 ] then nvm_echo "Found '${NVMRC_PATH}' with version <${NVM_RC_VERSION}>" fi } nvm_remote_version () { local PATTERN PATTERN="${1-}" local VERSION if nvm_validate_implicit_alias "${PATTERN}" 2> /dev/null then case "${PATTERN}" in ("$(nvm_iojs_prefix)") VERSION="$(NVM_LTS="${NVM_LTS-}" nvm_ls_remote_iojs | command tail -1)" && : ;; (*) VERSION="$(NVM_LTS="${NVM_LTS-}" nvm_ls_remote "${PATTERN}")" && : ;; esac else VERSION="$(NVM_LTS="${NVM_LTS-}" nvm_remote_versions "${PATTERN}" | command tail -1)" fi if [ -n "${NVM_VERSION_ONLY-}" ] then command awk 'BEGIN { n = split(ARGV[1], a); print a[1] }' "${VERSION}" else nvm_echo "${VERSION}" fi if [ "${VERSION}" = 'N/A' ] then return 3 fi } nvm_remote_versions () { local NVM_IOJS_PREFIX NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" local NVM_NODE_PREFIX NVM_NODE_PREFIX="$(nvm_node_prefix)" local PATTERN PATTERN="${1-}" local NVM_FLAVOR if [ -n "${NVM_LTS-}" ] then NVM_FLAVOR="${NVM_NODE_PREFIX}" fi case "${PATTERN}" in ("${NVM_IOJS_PREFIX}" | "io.js") NVM_FLAVOR="${NVM_IOJS_PREFIX}" unset PATTERN ;; ("${NVM_NODE_PREFIX}") NVM_FLAVOR="${NVM_NODE_PREFIX}" unset PATTERN ;; esac if nvm_validate_implicit_alias "${PATTERN-}" 2> /dev/null then nvm_err 'Implicit aliases are not supported in nvm_remote_versions.' return 1 fi local NVM_LS_REMOTE_EXIT_CODE NVM_LS_REMOTE_EXIT_CODE=0 local NVM_LS_REMOTE_PRE_MERGED_OUTPUT NVM_LS_REMOTE_PRE_MERGED_OUTPUT='' local NVM_LS_REMOTE_POST_MERGED_OUTPUT NVM_LS_REMOTE_POST_MERGED_OUTPUT='' if [ -z "${NVM_FLAVOR-}" ] || [ "${NVM_FLAVOR-}" = "${NVM_NODE_PREFIX}" ] then local NVM_LS_REMOTE_OUTPUT NVM_LS_REMOTE_OUTPUT="$(NVM_LTS="${NVM_LTS-}" nvm_ls_remote "${PATTERN-}") " && : NVM_LS_REMOTE_EXIT_CODE=$? NVM_LS_REMOTE_PRE_MERGED_OUTPUT="${NVM_LS_REMOTE_OUTPUT%%v4\.0\.0*}" NVM_LS_REMOTE_POST_MERGED_OUTPUT="${NVM_LS_REMOTE_OUTPUT#"$NVM_LS_REMOTE_PRE_MERGED_OUTPUT"}" fi local NVM_LS_REMOTE_IOJS_EXIT_CODE NVM_LS_REMOTE_IOJS_EXIT_CODE=0 local NVM_LS_REMOTE_IOJS_OUTPUT NVM_LS_REMOTE_IOJS_OUTPUT='' if [ -z "${NVM_LTS-}" ] && { [ -z "${NVM_FLAVOR-}" ] || [ "${NVM_FLAVOR-}" = "${NVM_IOJS_PREFIX}" ] } then NVM_LS_REMOTE_IOJS_OUTPUT=$(nvm_ls_remote_iojs "${PATTERN-}") && : NVM_LS_REMOTE_IOJS_EXIT_CODE=$? fi VERSIONS="$(nvm_echo "${NVM_LS_REMOTE_PRE_MERGED_OUTPUT} ${NVM_LS_REMOTE_IOJS_OUTPUT} ${NVM_LS_REMOTE_POST_MERGED_OUTPUT}" | nvm_grep -v "N/A" | command sed '/^ *$/d')" if [ -z "${VERSIONS}" ] then nvm_echo 'N/A' return 3 fi nvm_echo "${VERSIONS}" | command sed 's/ *$//g' return $NVM_LS_REMOTE_EXIT_CODE || $NVM_LS_REMOTE_IOJS_EXIT_CODE } nvm_resolve_alias () { if [ -z "${1-}" ] then return 1 fi local PATTERN PATTERN="${1-}" local ALIAS ALIAS="${PATTERN}" local ALIAS_TEMP local SEEN_ALIASES SEEN_ALIASES="${ALIAS}" local NVM_ALIAS_INDEX NVM_ALIAS_INDEX=1 while true do ALIAS_TEMP="$( (nvm_alias "${ALIAS}" 2>/dev/null | command head -n "${NVM_ALIAS_INDEX}" | command tail -n 1) || nvm_echo)" if [ -z "${ALIAS_TEMP}" ] then break fi if command printf "${SEEN_ALIASES}" | nvm_grep -q -e "^${ALIAS_TEMP}$" then ALIAS="∞" break fi SEEN_ALIASES="${SEEN_ALIASES}\\n${ALIAS_TEMP}" ALIAS="${ALIAS_TEMP}" done if [ -n "${ALIAS}" ] && [ "_${ALIAS}" != "_${PATTERN}" ] then local NVM_IOJS_PREFIX NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" local NVM_NODE_PREFIX NVM_NODE_PREFIX="$(nvm_node_prefix)" case "${ALIAS}" in ('∞' | "${NVM_IOJS_PREFIX}" | "${NVM_IOJS_PREFIX}-" | "${NVM_NODE_PREFIX}") nvm_echo "${ALIAS}" ;; (*) nvm_ensure_version_prefix "${ALIAS}" ;; esac return 0 fi if nvm_validate_implicit_alias "${PATTERN}" 2> /dev/null then local IMPLICIT IMPLICIT="$(nvm_print_implicit_alias local "${PATTERN}" 2>/dev/null)" if [ -n "${IMPLICIT}" ] then nvm_ensure_version_prefix "${IMPLICIT}" fi fi return 2 } nvm_resolve_local_alias () { if [ -z "${1-}" ] then return 1 fi local VERSION local EXIT_CODE VERSION="$(nvm_resolve_alias "${1-}")" EXIT_CODE=$? if [ -z "${VERSION}" ] then return $EXIT_CODE fi if [ "_${VERSION}" != '_∞' ] then nvm_version "${VERSION}" else nvm_echo "${VERSION}" fi } nvm_sanitize_path () { local SANITIZED_PATH SANITIZED_PATH="${1-}" if [ "_${SANITIZED_PATH}" != "_${NVM_DIR}" ] then SANITIZED_PATH="$(nvm_echo "${SANITIZED_PATH}" | command sed -e "s#${NVM_DIR}#\${NVM_DIR}#g")" fi if [ "_${SANITIZED_PATH}" != "_${HOME}" ] then SANITIZED_PATH="$(nvm_echo "${SANITIZED_PATH}" | command sed -e "s#${HOME}#\${HOME}#g")" fi nvm_echo "${SANITIZED_PATH}" } nvm_set_colors () { if [ "${#1}" -eq 5 ] && nvm_echo "$1" | nvm_grep -E "^[rRgGbBcCyYmMkKeW]{1,}$" > /dev/null then local INSTALLED_COLOR local LTS_AND_SYSTEM_COLOR local CURRENT_COLOR local NOT_INSTALLED_COLOR local DEFAULT_COLOR INSTALLED_COLOR="$(echo "$1" | awk '{ print substr($0, 1, 1); }')" LTS_AND_SYSTEM_COLOR="$(echo "$1" | awk '{ print substr($0, 2, 1); }')" CURRENT_COLOR="$(echo "$1" | awk '{ print substr($0, 3, 1); }')" NOT_INSTALLED_COLOR="$(echo "$1" | awk '{ print substr($0, 4, 1); }')" DEFAULT_COLOR="$(echo "$1" | awk '{ print substr($0, 5, 1); }')" if ! nvm_has_colors then nvm_echo "Setting colors to: ${INSTALLED_COLOR} ${LTS_AND_SYSTEM_COLOR} ${CURRENT_COLOR} ${NOT_INSTALLED_COLOR} ${DEFAULT_COLOR}" nvm_echo "WARNING: Colors may not display because they are not supported in this shell." else nvm_echo_with_colors "Setting colors to: $(nvm_wrap_with_color_code "${INSTALLED_COLOR}" "${INSTALLED_COLOR}")$(nvm_wrap_with_color_code "${LTS_AND_SYSTEM_COLOR}" "${LTS_AND_SYSTEM_COLOR}")$(nvm_wrap_with_color_code "${CURRENT_COLOR}" "${CURRENT_COLOR}")$(nvm_wrap_with_color_code "${NOT_INSTALLED_COLOR}" "${NOT_INSTALLED_COLOR}")$(nvm_wrap_with_color_code "${DEFAULT_COLOR}" "${DEFAULT_COLOR}")" fi export NVM_COLORS="$1" else return 17 fi } nvm_stdout_is_terminal () { [ -t 1 ] } nvm_strip_iojs_prefix () { local NVM_IOJS_PREFIX NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" if [ "${1-}" = "${NVM_IOJS_PREFIX}" ] then nvm_echo else nvm_echo "${1#"${NVM_IOJS_PREFIX}"-}" fi } nvm_strip_path () { if [ -z "${NVM_DIR-}" ] then nvm_err '${NVM_DIR} not set!' return 1 fi command printf %s "${1-}" | command awk -v NVM_DIR="${NVM_DIR}" -v RS=: ' index($0, NVM_DIR) == 1 { path = substr($0, length(NVM_DIR) + 1) if (path ~ "^(/versions/[^/]*)?/[^/]*'"${2-}"'.*$") { next } } # The final RT will contain a colon if the input has a trailing colon, or a null string otherwise { printf "%s%s", sep, $0; sep=RS } END { printf "%s", RT }' } nvm_supports_xz () { if [ -z "${1-}" ] then return 1 fi local NVM_OS NVM_OS="$(nvm_get_os)" if [ "_${NVM_OS}" = '_darwin' ] then local MACOS_VERSION MACOS_VERSION="$(sw_vers -productVersion)" if nvm_version_greater "10.9.0" "${MACOS_VERSION}" then return 1 fi elif [ "_${NVM_OS}" = '_freebsd' ] then if ! [ -e '/usr/lib/liblzma.so' ] then return 1 fi else if ! command which xz > /dev/null 2>&1 then return 1 fi fi if nvm_is_merged_node_version "${1}" then return 0 fi if nvm_version_greater_than_or_equal_to "${1}" "0.12.10" && nvm_version_greater "0.13.0" "${1}" then return 0 fi if nvm_version_greater_than_or_equal_to "${1}" "0.10.42" && nvm_version_greater "0.11.0" "${1}" then return 0 fi case "${NVM_OS}" in (darwin) nvm_version_greater_than_or_equal_to "${1}" "2.3.2" ;; (*) nvm_version_greater_than_or_equal_to "${1}" "1.0.0" ;; esac return $? } nvm_tree_contains_path () { local tree tree="${1-}" local node_path node_path="${2-}" if [ "@${tree}@" = "@@" ] || [ "@${node_path}@" = "@@" ] then nvm_err "both the tree and the node path are required" return 2 fi local previous_pathdir previous_pathdir="${node_path}" local pathdir pathdir=$(dirname "${previous_pathdir}") while [ "${pathdir}" != '' ] && [ "${pathdir}" != '.' ] && [ "${pathdir}" != '/' ] && [ "${pathdir}" != "${tree}" ] && [ "${pathdir}" != "${previous_pathdir}" ] do previous_pathdir="${pathdir}" pathdir=$(dirname "${previous_pathdir}") done [ "${pathdir}" = "${tree}" ] } nvm_use_if_needed () { if [ "_${1-}" = "_$(nvm_ls_current)" ] then return fi nvm use "$@" } nvm_validate_implicit_alias () { local NVM_IOJS_PREFIX NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" local NVM_NODE_PREFIX NVM_NODE_PREFIX="$(nvm_node_prefix)" case "$1" in ("stable" | "unstable" | "${NVM_IOJS_PREFIX}" | "${NVM_NODE_PREFIX}") return ;; (*) nvm_err "Only implicit aliases 'stable', 'unstable', '${NVM_IOJS_PREFIX}', and '${NVM_NODE_PREFIX}' are supported." return 1 ;; esac } nvm_version () { local PATTERN PATTERN="${1-}" local VERSION if [ -z "${PATTERN}" ] then PATTERN='current' fi if [ "${PATTERN}" = "current" ] then nvm_ls_current return $? fi local NVM_NODE_PREFIX NVM_NODE_PREFIX="$(nvm_node_prefix)" case "_${PATTERN}" in ("_${NVM_NODE_PREFIX}" | "_${NVM_NODE_PREFIX}-") PATTERN="stable" ;; esac VERSION="$(nvm_ls "${PATTERN}" | command tail -1)" if [ -z "${VERSION}" ] || [ "_${VERSION}" = "_N/A" ] then nvm_echo "N/A" return 3 fi nvm_echo "${VERSION}" } nvm_version_dir () { local NVM_WHICH_DIR NVM_WHICH_DIR="${1-}" if [ -z "${NVM_WHICH_DIR}" ] || [ "${NVM_WHICH_DIR}" = "new" ] then nvm_echo "${NVM_DIR}/versions/node" elif [ "_${NVM_WHICH_DIR}" = "_iojs" ] then nvm_echo "${NVM_DIR}/versions/io.js" elif [ "_${NVM_WHICH_DIR}" = "_old" ] then nvm_echo "${NVM_DIR}" else nvm_err 'unknown version dir' return 3 fi } nvm_version_greater () { command awk 'BEGIN { if (ARGV[1] == "" || ARGV[2] == "") exit(1) split(ARGV[1], a, /\./); split(ARGV[2], b, /\./); for (i=1; i<=3; i++) { if (a[i] && a[i] !~ /^[0-9]+$/) exit(2); if (b[i] && b[i] !~ /^[0-9]+$/) { exit(0); } if (a[i] < b[i]) exit(3); else if (a[i] > b[i]) exit(0); } exit(4) }' "${1#v}" "${2#v}" } nvm_version_greater_than_or_equal_to () { command awk 'BEGIN { if (ARGV[1] == "" || ARGV[2] == "") exit(1) split(ARGV[1], a, /\./); split(ARGV[2], b, /\./); for (i=1; i<=3; i++) { if (a[i] && a[i] !~ /^[0-9]+$/) exit(2); if (a[i] < b[i]) exit(3); else if (a[i] > b[i]) exit(0); } exit(0) }' "${1#v}" "${2#v}" } nvm_version_path () { local VERSION VERSION="${1-}" if [ -z "${VERSION}" ] then nvm_err 'version is required' return 3 elif nvm_is_iojs_version "${VERSION}" then nvm_echo "$(nvm_version_dir iojs)/$(nvm_strip_iojs_prefix "${VERSION}")" elif nvm_version_greater 0.12.0 "${VERSION}" then nvm_echo "$(nvm_version_dir old)/${VERSION}" else nvm_echo "$(nvm_version_dir new)/${VERSION}" fi } nvm_wrap_with_color_code () { local CODE CODE="$(nvm_print_color_code "${1}" 2>/dev/null ||:)" local TEXT TEXT="${2-}" if nvm_has_colors && [ -n "${CODE}" ] then nvm_echo_with_colors "\033[${CODE}${TEXT}\033[0m" else nvm_echo "${TEXT}" fi } omz () { setopt localoptions noksharrays [[ $# -gt 0 ]] || { _omz::help return 1 } local command="$1" shift (( ${+functions[_omz::$command]} )) || { _omz::help return 1 } _omz::$command "$@" } omz_diagnostic_dump () { emulate -L zsh builtin echo "Generating diagnostic dump; please be patient..." local thisfcn=omz_diagnostic_dump local -A opts local opt_verbose opt_noverbose opt_outfile local timestamp=$(date +%Y%m%d-%H%M%S) local outfile=omz_diagdump_$timestamp.txt builtin zparseopts -A opts -D -- "v+=opt_verbose" "V+=opt_noverbose" local verbose n_verbose=${#opt_verbose} n_noverbose=${#opt_noverbose} (( verbose = 1 + n_verbose - n_noverbose )) if [[ ${#*} > 0 ]] then opt_outfile=$1 fi if [[ ${#*} > 1 ]] then builtin echo "$thisfcn: error: too many arguments" >&2 return 1 fi if [[ -n "$opt_outfile" ]] then outfile="$opt_outfile" fi _omz_diag_dump_one_big_text &> "$outfile" if [[ $? != 0 ]] then builtin echo "$thisfcn: error while creating diagnostic dump; see $outfile for details" fi builtin echo builtin echo Diagnostic dump file created at: "$outfile" builtin echo builtin echo To share this with OMZ developers, post it as a gist on GitHub builtin echo at "https://gist.github.com" and share the link to the gist. builtin echo builtin echo "WARNING: This dump file contains all your zsh and omz configuration files," builtin echo "so don't share it publicly if there's sensitive information in them." builtin echo } omz_history () { local clear list stamp REPLY zparseopts -E -D c=clear l=list f=stamp E=stamp i=stamp t:=stamp if [[ -n "$clear" ]] then print -nu2 "This action will irreversibly delete your command history. Are you sure? [y/N] " builtin read -E [[ "$REPLY" = [yY] ]] || return 0 print -nu2 >| "$HISTFILE" fc -p "$HISTFILE" print -u2 History file deleted. elif [[ $# -eq 0 ]] then builtin fc "${stamp[@]}" -l 1 else builtin fc "${stamp[@]}" -l "$@" fi } omz_termsupport_cwd () { setopt localoptions unset local URL_HOST URL_PATH URL_HOST="$(omz_urlencode -P $HOST)" || return 1 URL_PATH="$(omz_urlencode -P $PWD)" || return 1 [[ -z "$KONSOLE_PROFILE_NAME" && -z "$KONSOLE_DBUS_SESSION" ]] || URL_HOST="" printf "\e]7;file://%s%s\e\\" "${URL_HOST}" "${URL_PATH}" } omz_termsupport_precmd () { [[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return 0 title "$ZSH_THEME_TERM_TAB_TITLE_IDLE" "$ZSH_THEME_TERM_TITLE_IDLE" } omz_termsupport_preexec () { [[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return 0 emulate -L zsh setopt extended_glob local -a cmdargs cmdargs=("${(z)2}") if [[ "${cmdargs[1]}" = fg ]] then local job_id jobspec="${cmdargs[2]#%}" case "$jobspec" in (<->) job_id=${jobspec} ;; ("" | % | +) job_id=${(k)jobstates[(r)*:+:*]} ;; (-) job_id=${(k)jobstates[(r)*:-:*]} ;; ([?]*) job_id=${(k)jobtexts[(r)*${(Q)jobspec}*]} ;; (*) job_id=${(k)jobtexts[(r)${(Q)jobspec}*]} ;; esac if [[ -n "${jobtexts[$job_id]}" ]] then 1="${jobtexts[$job_id]}" 2="${jobtexts[$job_id]}" fi fi local CMD="${1[(wr)^(*=*|sudo|ssh|mosh|rake|-*)]:gs/%/%%}" local LINE="${2:gs/%/%%}" title "$CMD" "%100>...>${LINE}%<<" } omz_urldecode () { emulate -L zsh local encoded_url=$1 local caller_encoding=$langinfo[CODESET] local LC_ALL=C export LC_ALL local tmp=${encoded_url:gs/+/ /} tmp=${tmp:gs/\\/\\\\/} tmp=${tmp:gs/%/\\x/} local decoded="$(printf -- "$tmp")" local -a safe_encodings safe_encodings=(UTF-8 utf8 US-ASCII) if [[ -z ${safe_encodings[(r)$caller_encoding]} ]] then decoded=$(echo -E "$decoded" | iconv -f UTF-8 -t $caller_encoding) if [[ $? != 0 ]] then echo "Error converting string from UTF-8 to $caller_encoding" >&2 return 1 fi fi echo -E "$decoded" } omz_urlencode () { emulate -L zsh setopt norematchpcre 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" 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 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 if [[ -z $opts[(r)-m] ]] then dont_escape+=$mark fi dont_escape+="]" 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+="+" elif [[ "$PREFIX" = *com.termux* ]] then url_str+="$byte" else ord=$(( [##16] #byte )) url_str+="%$ord" fi fi done echo -E "$url_str" } open_command () { local open_cmd case "$OSTYPE" in (darwin*) open_cmd='open' ;; (cygwin*) open_cmd='cygstart' ;; (linux*) [[ "$(uname -r)" != *icrosoft* ]] && open_cmd='nohup xdg-open' || { open_cmd='cmd.exe /c start ""' [[ -e "$1" ]] && { 1="$(wslpath -w "${1:a}")" || return 1 } [[ "$1" = (http|https)://* ]] && { 1="$(echo "$1" | sed -E 's/([&|()<>^])/^\1/g')" || return 1 } } ;; (msys*) open_cmd='start ""' ;; (*) echo "Platform $OSTYPE not supported" return 1 ;; esac if [[ -n "$BROWSER" && "$1" = (http|https)://* ]] then "$BROWSER" "$@" return fi ${=open_cmd} "$@" &> /dev/null } p10k () { [[ $# != 1 || $1 != finalize ]] || { p10k-instant-prompt-finalize return 0 } eval "$__p9k_intro_no_reply" if (( !ARGC )) then print -rP -- $__p9k_p10k_usage >&2 return 1 fi case $1 in (segment) local REPLY local -a reply shift local -i OPTIND local OPTARG opt state bg=0 fg icon cond text ref=0 expand=0 while getopts ':s:b:f:i:c:t:reh' opt do case $opt in (s) state=$OPTARG ;; (b) bg=$OPTARG ;; (f) fg=$OPTARG ;; (i) icon=$OPTARG ;; (c) cond=${OPTARG:-'${:-}'} ;; (t) text=$OPTARG ;; (r) ref=1 ;; (e) expand=1 ;; (+r) ref=0 ;; (+e) expand=0 ;; (h) print -rP -- $__p9k_p10k_segment_usage return 0 ;; (?) print -rP -- $__p9k_p10k_segment_usage >&2 return 1 ;; esac done if (( OPTIND <= ARGC )) then print -rP -- $__p9k_p10k_segment_usage >&2 return 1 fi if [[ -z $_p9k__prompt_side ]] then print -rP -- "%1F[ERROR]%f %Bp10k segment%b: can be called only during prompt rendering." >&2 if (( !ARGC )) then print -rP -- "" print -rP -- "For help, type:" >&2 print -rP -- "" print -rP -- " %2Fp10k%f %Bhelp%b %Bsegment%b" >&2 fi return 1 fi (( ref )) || icon=$'\1'$icon typeset -i _p9k__has_upglob "_p9k_${_p9k__prompt_side}_prompt_segment" "prompt_${_p9k__segment_name}${state:+_${${(U)state}//İ/I}}" "$bg" "${fg:-$_p9k_color1}" "$icon" "$expand" "$cond" "$text" return 0 ;; (display) if (( ARGC == 1 )) then print -rP -- $__p9k_p10k_display_usage >&2 return 1 fi shift local -i k dump local opt prev new pair list name var while getopts ':har' opt do case $opt in (r) if (( __p9k_reset_state > 0 )) then __p9k_reset_state=2 else __p9k_reset_state=-1 fi ;; (a) dump=1 ;; (h) print -rP -- $__p9k_p10k_display_usage return 0 ;; (?) print -rP -- $__p9k_p10k_display_usage >&2 return 1 ;; esac done if (( dump )) then reply=() shift $((OPTIND-1)) (( ARGC )) || set -- '*' for opt do for k in ${(u@)_p9k_display_k[(I)$opt]:/(#m)*/$_p9k_display_k[$MATCH]} do reply+=($_p9k__display_v[k,k+1]) done done if (( __p9k_reset_state == -1 )) then _p9k_reset_prompt fi return 0 fi local REPLY local -a reply for opt in "${@:$OPTIND}" do pair=(${(s:=:)opt}) list=(${(s:,:)${pair[2]}}) if [[ ${(b)pair[1]} == $pair[1] ]] then local ks=($_p9k_display_k[$pair[1]]) else local ks=(${(u@)_p9k_display_k[(I)$pair[1]]:/(#m)*/$_p9k_display_k[$MATCH]}) fi for k in $ks do if (( $#list == 1 )) then [[ $_p9k__display_v[k+1] == $list[1] ]] && continue new=$list[1] else new=${list[list[(I)$_p9k__display_v[k+1]]+1]:-$list[1]} [[ $_p9k__display_v[k+1] == $new ]] && continue fi _p9k__display_v[k+1]=$new name=$_p9k__display_v[k] if [[ $name == (empty_line|ruler) ]] then var=_p9k__${name}_i [[ $new == show ]] && unset $var || typeset -gi $var=3 elif [[ $name == (#b)(<->)(*) ]] then var=_p9k__${match[1]}${${${${match[2]//\/}/#left/l}/#right/r}/#gap/g} [[ $new == hide ]] && typeset -g $var= || unset $var fi if (( __p9k_reset_state > 0 )) then __p9k_reset_state=2 else __p9k_reset_state=-1 fi done done if (( __p9k_reset_state == -1 )) then _p9k_reset_prompt fi ;; (configure) if (( ARGC > 1 )) then print -rP -- $__p9k_p10k_configure_usage >&2 return 1 fi local REPLY local -a reply p9k_configure "$@" || return ;; (reload) if (( ARGC > 1 )) then print -rP -- $__p9k_p10k_reload_usage >&2 return 1 fi (( $+_p9k__force_must_init )) || return 0 _p9k__force_must_init=1 ;; (help) local var=__p9k_p10k_$2_usage if (( $+parameters[$var] )) then print -rP -- ${(P)var} return 0 elif (( ARGC == 1 )) then print -rP -- $__p9k_p10k_usage return 0 else print -rP -- $__p9k_p10k_usage >&2 return 1 fi ;; (finalize) print -rP -- $__p9k_p10k_finalize_usage >&2 return 1 ;; (clear-instant-prompt) if (( $+__p9k_instant_prompt_active )) then _p9k_clear_instant_prompt unset __p9k_instant_prompt_active fi return 0 ;; (*) print -rP -- $__p9k_p10k_usage >&2 return 1 ;; esac } p10k-instant-prompt-finalize () { unsetopt local_options (( ${+__p9k_instant_prompt_active} )) && unsetopt prompt_cr prompt_sp || setopt prompt_cr prompt_sp } p9k_configure () { eval "$__p9k_intro" _p9k_can_configure || return ( set -- -f builtin source $__p9k_root_dir/internal/wizard.zsh ) local ret=$? case $ret in (0) builtin source $__p9k_cfg_path _p9k__force_must_init=1 ;; (69) return 0 ;; (*) return $ret ;; esac } p9k_prompt_segment () { p10k segment "$@" } parse_git_dirty () { local STATUS local -a FLAGS FLAGS=('--porcelain') if [[ "$(__git_prompt_git config --get oh-my-zsh.hide-dirty)" != "1" ]] then if [[ "${DISABLE_UNTRACKED_FILES_DIRTY:-}" == "true" ]] then FLAGS+='--untracked-files=no' fi case "${GIT_STATUS_IGNORE_SUBMODULES:-}" in (git) ;; (*) FLAGS+="--ignore-submodules=${GIT_STATUS_IGNORE_SUBMODULES:-dirty}" ;; esac STATUS=$(__git_prompt_git status ${FLAGS} 2> /dev/null | tail -n 1) fi if [[ -n $STATUS ]] then echo "$ZSH_THEME_GIT_PROMPT_DIRTY" else echo "$ZSH_THEME_GIT_PROMPT_CLEAN" fi } powerlevel10k_plugin_unload () { prompt_powerlevel9k_teardown } preexec () { echo -ne '\e[5 q' } print_icon () { eval "$__p9k_intro" _p9k_init_icons local var=POWERLEVEL9K_$1 if (( $+parameters[$var] )) then echo -n - ${(P)var} else echo -n - $icons[$1] fi } prompt__p9k_internal_nothing () { _p9k__prompt+='${_p9k__sss::=}' } prompt_anaconda () { local msg if _p9k_python_version then P9K_ANACONDA_PYTHON_VERSION=$_p9k__ret if (( _POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION )) then msg="${P9K_ANACONDA_PYTHON_VERSION//\%/%%} " fi else unset P9K_ANACONDA_PYTHON_VERSION fi local p=${CONDA_PREFIX:-$CONDA_ENV_PATH} msg+="$_POWERLEVEL9K_ANACONDA_LEFT_DELIMITER${${p:t}//\%/%%}$_POWERLEVEL9K_ANACONDA_RIGHT_DELIMITER" _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '' "$msg" } prompt_asdf () { _p9k_asdf_check_meta || _p9k_asdf_init_meta || return local -A versions local -a stat local -i has_global local dirs=($_p9k__parent_dirs) local mtimes=($_p9k__parent_mtimes) if [[ $dirs[-1] != ~ ]] then zstat -A stat +mtime ~ 2> /dev/null || return dirs+=(~) mtimes+=($stat[1]) fi local elem for elem in ${(@)${:-{1..$#dirs}}/(#m)*/${${:-$MATCH:$_p9k__asdf_dir2files[$dirs[MATCH]]}#$MATCH:$mtimes[MATCH]:}} do if [[ $elem == *:* ]] then local dir=$dirs[${elem%%:*}] zstat -A stat +mtime $dir 2> /dev/null || return local files=($dir/.tool-versions(N) $dir/${(k)^_p9k_asdf_file_info}(N)) _p9k__asdf_dir2files[$dir]=$stat[1]:${(pj:\0:)files} else local files=(${(0)elem}) fi if [[ ${files[1]:h} == ~ ]] then has_global=1 local -A local_versions=(${(kv)versions}) versions=() fi local file for file in $files do [[ $file == */.tool-versions ]] _p9k_asdf_parse_version_file $file $? || return done done if (( ! has_global )) then has_global=1 local -A local_versions=(${(kv)versions}) versions=() fi if [[ -r $ASDF_DEFAULT_TOOL_VERSIONS_FILENAME ]] then _p9k_asdf_parse_version_file $ASDF_DEFAULT_TOOL_VERSIONS_FILENAME 0 || return fi local plugin for plugin in ${(k)_p9k_asdf_plugins} do local upper=${${(U)plugin//-/_}//İ/I} if (( $+parameters[_POWERLEVEL9K_ASDF_${upper}_SOURCES] )) then local sources=(${(P)${:-_POWERLEVEL9K_ASDF_${upper}_SOURCES}}) else local sources=($_POWERLEVEL9K_ASDF_SOURCES) fi local version="${(P)${:-ASDF_${upper}_VERSION}}" if [[ -n $version ]] then (( $sources[(I)shell] )) || continue else version=$local_versions[$plugin] if [[ -n $version ]] then (( $sources[(I)local] )) || continue else version=$versions[$plugin] [[ -n $version ]] || continue (( $sources[(I)global] )) || continue fi fi if [[ $version == $versions[$plugin] ]] then if (( $+parameters[_POWERLEVEL9K_ASDF_${upper}_PROMPT_ALWAYS_SHOW] )) then (( _POWERLEVEL9K_ASDF_${upper}_PROMPT_ALWAYS_SHOW )) || continue else (( _POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW )) || continue fi fi if [[ $version == system ]] then if (( $+parameters[_POWERLEVEL9K_ASDF_${upper}_SHOW_SYSTEM] )) then (( _POWERLEVEL9K_ASDF_${upper}_SHOW_SYSTEM )) || continue else (( _POWERLEVEL9K_ASDF_SHOW_SYSTEM )) || continue fi fi _p9k_get_icon $0_$upper ${upper}_ICON $plugin _p9k_prompt_segment $0_$upper green $_p9k_color1 $'\1'$_p9k__ret 0 '' ${version//\%/%%} done } prompt_aws () { typeset -g P9K_AWS_PROFILE="${AWS_VAULT:-${AWSUME_PROFILE:-${AWS_PROFILE:-$AWS_DEFAULT_PROFILE}}}" local pat class state for pat class in "${_POWERLEVEL9K_AWS_CLASSES[@]}" do if [[ $P9K_AWS_PROFILE == ${~pat} ]] then [[ -n $class ]] && state=_${${(U)class}//İ/I} break fi done if [[ -n ${AWS_REGION:-$AWS_DEFAULT_REGION} ]] then typeset -g P9K_AWS_REGION=${AWS_REGION:-$AWS_DEFAULT_REGION} else local cfg=${AWS_CONFIG_FILE:-~/.aws/config} if ! _p9k_cache_stat_get $0 $cfg then local -a reply _p9k_parse_aws_config $cfg _p9k_cache_stat_set $reply fi local prefix=$#P9K_AWS_PROFILE:$P9K_AWS_PROFILE: local kv=$_p9k__cache_val[(r)${(b)prefix}*] typeset -g P9K_AWS_REGION=${kv#$prefix} fi _p9k_prompt_segment "$0$state" red white 'AWS_ICON' 0 '' "${P9K_AWS_PROFILE//\%/%%}" } prompt_aws_eb_env () { _p9k_upglob .elasticbeanstalk -/ && return local dir=$_p9k__parent_dirs[$?] if ! _p9k_cache_stat_get $0 $dir/.elasticbeanstalk/config.yml then local env env="$(command eb list 2>/dev/null)" || env= env="${${(@M)${(@f)env}:#\* *}#\* }" _p9k_cache_stat_set "$env" fi [[ -n $_p9k__cache_val[1] ]] || return _p9k_prompt_segment "$0" black green 'AWS_EB_ICON' 0 '' "${_p9k__cache_val[1]//\%/%%}" } prompt_azure () { local name cfg=${AZURE_CONFIG_DIR:-$HOME/.azure}/azureProfile.json if _p9k_cache_stat_get $0 $cfg then name=$_p9k__cache_val[1] else if (( $+commands[jq] )) && name="$(jq -r '[.subscriptions[]|select(.isDefault==true)|.name][]|strings' $cfg 2>/dev/null)" then name=${name%%$'\n'*} elif ! name="$(az account show --query name --output tsv 2>/dev/null)" then name= fi _p9k_cache_stat_set "$name" fi [[ -n $name ]] || return local pat class state for pat class in "${_POWERLEVEL9K_AZURE_CLASSES[@]}" do if [[ $name == ${~pat} ]] then [[ -n $class ]] && state=_${${(U)class}//İ/I} break fi done _p9k_prompt_segment "$0$state" "blue" "white" "AZURE_ICON" 0 '' "${name//\%/%%}" } prompt_background_jobs () { local -i len=$#_p9k__prompt _p9k__has_upglob local msg if (( _POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE )) then if (( _POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS )) then msg='${(%):-%j}' else msg='${${(%):-%j}:#1}' fi fi _p9k_prompt_segment $0 "$_p9k_color1" cyan BACKGROUND_JOBS_ICON 1 '${${(%):-%j}:#0}' "$msg" (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_battery () { [[ $_p9k_os == (Linux|Android) ]] && _p9k_prompt_battery_set_args (( $#_p9k__battery_args )) && _p9k_prompt_segment "${_p9k__battery_args[@]}" } prompt_chezmoi_shell () { _p9k_prompt_segment $0 blue $_p9k_color1 CHEZMOI_ICON 0 '' '' } prompt_chruby () { local v=${(M)RUBY_ENGINE:#$~_POWERLEVEL9K_CHRUBY_SHOW_ENGINE_PATTERN} [[ $_POWERLEVEL9K_CHRUBY_SHOW_VERSION == 1 && -n $RUBY_VERSION ]] && v+=${v:+ }$RUBY_VERSION _p9k_prompt_segment "$0" "red" "$_p9k_color1" 'RUBY_ICON' 0 '' "${v//\%/%%}" } prompt_command_execution_time () { (( $+P9K_COMMAND_DURATION_SECONDS )) || return (( P9K_COMMAND_DURATION_SECONDS >= _POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD )) || return if (( P9K_COMMAND_DURATION_SECONDS < 60 )) then if (( !_POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION )) then local -i sec=$((P9K_COMMAND_DURATION_SECONDS + 0.5)) else local -F $_POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION sec=P9K_COMMAND_DURATION_SECONDS fi local text=${sec}s else local -i d=$((P9K_COMMAND_DURATION_SECONDS + 0.5)) if [[ $_POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT == "H:M:S" ]] then local text=${(l.2..0.)$((d % 60))} if (( d >= 60 )) then text=${(l.2..0.)$((d / 60 % 60))}:$text if (( d >= 36000 )) then text=$((d / 3600)):$text elif (( d >= 3600 )) then text=0$((d / 3600)):$text fi fi else local text="$((d % 60))s" if (( d >= 60 )) then text="$((d / 60 % 60))m $text" if (( d >= 3600 )) then text="$((d / 3600 % 24))h $text" if (( d >= 86400 )) then text="$((d / 86400))d $text" fi fi fi fi fi _p9k_prompt_segment "$0" "red" "yellow1" 'EXECUTION_TIME_ICON' 0 '' $text } prompt_context () { local -i len=$#_p9k__prompt _p9k__has_upglob local content if [[ $_POWERLEVEL9K_ALWAYS_SHOW_CONTEXT == 0 && -n $DEFAULT_USER && $P9K_SSH == 0 ]] then local user="${(%):-%n}" if [[ $user == $DEFAULT_USER ]] then content="${user//\%/%%}" fi fi local state if (( P9K_SSH )) then if [[ -n "$SUDO_COMMAND" ]] then state="REMOTE_SUDO" else state="REMOTE" fi elif [[ -n "$SUDO_COMMAND" ]] then state="SUDO" else state="DEFAULT" fi local cond for state cond in $state '${${(%):-%#}:#\#}' ROOT '${${(%):-%#}:#\%}' do local text=$content if [[ -z $text ]] then local var=_POWERLEVEL9K_CONTEXT_${state}_TEMPLATE if (( $+parameters[$var] )) then text=${(P)var} text=${(g::)text} else text=$_POWERLEVEL9K_CONTEXT_TEMPLATE fi fi _p9k_prompt_segment "$0_$state" "$_p9k_color1" yellow '' 0 "$cond" "$text" done (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_cpu_arch () { local -i len=$#_p9k__prompt _p9k__has_upglob local state text if _p9k_cache_ephemeral_get $0 then state=$_p9k__cache_val[1] text=$_p9k__cache_val[2] else local cmd for cmd in machine arch do (( $+commands[$cmd] )) || continue if text=$(command -- $cmd) 2> /dev/null && [[ $text == [a-zA-Z][a-zA-Z0-9_]# ]] then break else text= fi done state=_${${(U)text}//İ/I} _p9k_cache_ephemeral_set "$state" "$text" fi if [[ -n $text ]] then _p9k_prompt_segment "$0$state" "yellow" "$_p9k_color1" 'ARCH_ICON' 0 '' "$text" fi (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_date () { if [[ $_p9k__refresh_reason == precmd ]] then if [[ $+__p9k_instant_prompt_active == 1 && $__p9k_instant_prompt_date_format == $_POWERLEVEL9K_DATE_FORMAT ]] then _p9k__date=${__p9k_instant_prompt_date//\%/%%} else _p9k__date=${${(%)_POWERLEVEL9K_DATE_FORMAT}//\%/%%} fi fi _p9k_prompt_segment "$0" "$_p9k_color2" "$_p9k_color1" "DATE_ICON" 0 '' "$_p9k__date" } prompt_detect_virt () { local virt="$(systemd-detect-virt 2>/dev/null)" if [[ "$virt" == "none" ]] then local -a inode if zstat -A inode +inode / 2> /dev/null && [[ $inode[1] != 2 ]] then virt="chroot" fi fi if [[ -n "${virt}" ]] then _p9k_prompt_segment "$0" "$_p9k_color1" "yellow" '' 0 '' "${virt//\%/%%}" fi } prompt_dir () { if (( _POWERLEVEL9K_DIR_PATH_ABSOLUTE )) then local p=${(V)_p9k__cwd} local -a parts=("${(s:/:)p}") elif [[ -o auto_name_dirs ]] then local p=${(V)${_p9k__cwd/#(#b)$HOME(|\/*)/'~'$match[1]}} local -a parts=("${(s:/:)p}") else local p=${(%):-%~} if [[ $p == '~['* ]] then local func='' local -a parts=() for func in zsh_directory_name $zsh_directory_name_functions do local reply=() if (( $+functions[$func] )) && $func d $_p9k__cwd && [[ $p == '~['${(V)reply[1]}']'* ]] then parts+='~['${(V)reply[1]}']' break fi done if (( $#parts )) then parts+=(${(s:/:)${p#$parts[1]}}) else p=${(V)_p9k__cwd} parts=("${(s:/:)p}") fi else local -a parts=("${(s:/:)p}") fi fi local -i fake_first=0 expand=0 shortenlen=${_POWERLEVEL9K_SHORTEN_DIR_LENGTH:--1} if (( $+_POWERLEVEL9K_SHORTEN_DELIMITER )) then local delim=$_POWERLEVEL9K_SHORTEN_DELIMITER else if [[ $langinfo[CODESET] == (utf|UTF)(-|)8 ]] then local delim=$'\u2026' else local delim='..' fi fi case $_POWERLEVEL9K_SHORTEN_STRATEGY in (truncate_absolute | truncate_absolute_chars) if (( shortenlen > 0 && $#p > shortenlen )) then _p9k_shorten_delim_len $delim if (( $#p > shortenlen + $_p9k__ret )) then local -i n=shortenlen local -i i=$#parts while true do local dir=$parts[i] local -i len=$(( $#dir + (i > 1) )) if (( len <= n )) then (( n -= len )) (( --i )) else parts[i]=$'\1'$dir[-n,-1] parts[1,i-1]=() break fi done fi fi ;; (truncate_with_package_name | truncate_middle | truncate_from_right) () { [[ $_POWERLEVEL9K_SHORTEN_STRATEGY == truncate_with_package_name && $+commands[jq] == 1 && $#_POWERLEVEL9K_DIR_PACKAGE_FILES > 0 ]] || return local pats="(${(j:|:)_POWERLEVEL9K_DIR_PACKAGE_FILES})" local -i i=$#parts local dir=$_p9k__cwd for ((; i > 0; --i )) do local markers=($dir/${~pats}(N)) if (( $#markers )) then local pat= pkg_file= for pat in $_POWERLEVEL9K_DIR_PACKAGE_FILES do for pkg_file in $markers do [[ $pkg_file == $dir/${~pat} ]] || continue if ! _p9k_cache_stat_get $0_pkg $pkg_file then local pkg_name='' pkg_name="$(jq -j '.name | select(. != null)' <$pkg_file 2>/dev/null)" || pkg_name='' _p9k_cache_stat_set "$pkg_name" fi [[ -n $_p9k__cache_val[1] ]] || continue parts[1,i]=($_p9k__cache_val[1]) fake_first=1 return 0 done done fi dir=${dir:h} done } if (( shortenlen > 0 )) then _p9k_shorten_delim_len $delim local -i d=_p9k__ret pref=shortenlen suf=0 i=2 [[ $_POWERLEVEL9K_SHORTEN_STRATEGY == truncate_middle ]] && suf=pref for ((; i < $#parts; ++i )) do local dir=$parts[i] if (( $#dir > pref + suf + d )) then dir[pref+1,-suf-1]=$'\1' parts[i]=$dir fi done fi ;; (truncate_to_last) shortenlen=${_POWERLEVEL9K_SHORTEN_DIR_LENGTH:-1} (( shortenlen > 0 )) || shortenlen=1 local -i i='shortenlen+1' if [[ $#parts -gt i || ( $p[1] != / && $#parts -gt shortenlen ) ]] then fake_first=1 parts[1,-i]=() fi ;; (truncate_to_first_and_last) if (( shortenlen > 0 )) then local -i i=$(( shortenlen + 1 )) [[ $p == /* ]] && (( ++i )) for ((; i <= $#parts - shortenlen; ++i )) do parts[i]=$'\1' done fi ;; (truncate_to_unique) expand=1 delim=${_POWERLEVEL9K_SHORTEN_DELIMITER-'*'} shortenlen=${_POWERLEVEL9K_SHORTEN_DIR_LENGTH:-1} (( shortenlen >= 0 )) || shortenlen=1 local rp=${(g:oce:)p} local rparts=("${(@s:/:)rp}") local -i i=2 e=$(($#parts - shortenlen)) if [[ -n $_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER ]] then (( e += shortenlen )) local orig=("$parts[2]" "${(@)parts[$((shortenlen > $#parts ? -$#parts : -shortenlen)),-1]}") elif [[ $p[1] == / ]] then (( ++i )) fi if (( i <= e )) then local mtimes=(${(Oa)_p9k__parent_mtimes:$(($#parts-e)):$((e-i+1))}) local key="${(pj.:.)mtimes}" else local key= fi if ! _p9k_cache_ephemeral_get $0 $e $i $_p9k__cwd $p || [[ $key != $_p9k__cache_val[1] ]] then local rtail=${(j./.)rparts[i,-1]} local parent=$_p9k__cwd[1,-2-$#rtail] _p9k_prompt_length $delim local -i real_delim_len=_p9k__ret [[ -n $parts[i-1] ]] && parts[i-1]="\${(Q)\${:-${(qqq)${(q)parts[i-1]}}}}"$'\2' local -i d=${_POWERLEVEL9K_SHORTEN_DELIMITER_LENGTH:--1} (( d >= 0 )) || d=real_delim_len local -i m=1 for ((; i <= e; ++i, ++m )) do local sub=$parts[i] local rsub=$rparts[i] local dir=$parent/$rsub mtime=$mtimes[m] local pair=$_p9k__dir_stat_cache[$dir] if [[ $pair == ${mtime:-x}:* ]] then parts[i]=${pair#*:} else [[ $sub != *["~!#\`\$^&*()\\\"'<>?{}[]"]* ]] local -i q=$? if [[ -n $_POWERLEVEL9K_SHORTEN_FOLDER_MARKER && -n $dir/${~_POWERLEVEL9K_SHORTEN_FOLDER_MARKER}(#qN) ]] then (( q )) && parts[i]="\${(Q)\${:-${(qqq)${(q)sub}}}}" parts[i]+=$'\2' else local -i j=$rsub[(i)[^.]] for ((; j + d < $#rsub; ++j )) do local -a matching=($parent/$rsub[1,j]*/(N)) (( $#matching == 1 )) && break done local -i saved=$((${(m)#${(V)${rsub:$j}}} - d)) if (( saved > 0 )) then if (( q )) then parts[i]='${${${_p9k__d:#-*}:+${(Q)${:-'${(qqq)${(q)sub}}'}}}:-${(Q)${:-' parts[i]+=$'\3'${(qqq)${(q)${(V)${rsub[1,j]}}}}$'}}\1\3''${$((_p9k__d+='$saved'))+}}' else parts[i]='${${${_p9k__d:#-*}:+'$sub$'}:-\3'${(V)${rsub[1,j]}}$'\1\3''${$((_p9k__d+='$saved'))+}}' fi else (( q )) && parts[i]="\${(Q)\${:-${(qqq)${(q)sub}}}}" fi fi [[ -n $mtime ]] && _p9k__dir_stat_cache[$dir]="$mtime:$parts[i]" fi parent+=/$rsub done if [[ -n $_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER ]] then local _2=$'\2' if [[ $_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER == last* ]] then (( e = ${parts[(I)*$_2]} + ${_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER#*:} )) else (( e = ${parts[(ib:2:)*$_2]} + ${_POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER#*:} )) fi if (( e > 1 && e <= $#parts )) then parts[1,e-1]=() fake_first=1 elif [[ $p == /?* ]] then parts[2]="\${(Q)\${:-${(qqq)${(q)orig[1]}}}}"$'\2' fi for ((i = $#parts < shortenlen ? $#parts : shortenlen; i > 0; --i)) do [[ $#parts[-i] == *$'\2' ]] && continue if [[ $orig[-i] == *["~!#\`\$^&*()\\\"'<>?{}[]"]* ]] then parts[-i]='${(Q)${:-'${(qqq)${(q)orig[-i]}}'}}'$'\2' else parts[-i]=${orig[-i]}$'\2' fi done else for ((; i <= $#parts; ++i)) do [[ $parts[i] == *["~!#\`\$^&*()\\\"'<>?{}[]"]* ]] && parts[i]='${(Q)${:-'${(qqq)${(q)parts[i]}}'}}' parts[i]+=$'\2' done fi _p9k_cache_ephemeral_set "$key" "${parts[@]}" fi parts=("${(@)_p9k__cache_val[2,-1]}") ;; (truncate_with_folder_marker) if [[ -n $_POWERLEVEL9K_SHORTEN_FOLDER_MARKER ]] then local dir=$_p9k__cwd local -a m=() local -i i=$(($#parts - 1)) for ((; i > 1; --i )) do dir=${dir:h} [[ -n $dir/${~_POWERLEVEL9K_SHORTEN_FOLDER_MARKER}(#qN) ]] && m+=$i done m+=1 for ((i=1; i < $#m; ++i )) do (( m[i] - m[i+1] > 2 )) && parts[m[i+1]+1,m[i]-1]=($'\1') done fi ;; (*) if (( shortenlen > 0 )) then local -i len=$#parts [[ -z $parts[1] ]] && (( --len )) if (( len > shortenlen )) then parts[1,-shortenlen-1]=($'\1') fi fi ;; esac (( !_POWERLEVEL9K_DIR_SHOW_WRITABLE )) || [[ -w $_p9k__cwd ]] local -i w=$? (( w && _POWERLEVEL9K_DIR_SHOW_WRITABLE > 2 )) && [[ ! -e $_p9k__cwd ]] && w=2 if ! _p9k_cache_ephemeral_get $0 $_p9k__cwd $p $w $fake_first "${parts[@]}" then local state=$0 local icon='' local a='' b='' c='' for a b c in "${_POWERLEVEL9K_DIR_CLASSES[@]}" do if [[ $_p9k__cwd == ${~a} ]] then [[ -n $b ]] && state+=_${${(U)b}//İ/I} icon=$'\1'$c break fi done if (( w )) then if (( _POWERLEVEL9K_DIR_SHOW_WRITABLE == 1 )) then state=${0}_NOT_WRITABLE elif (( w == 2 )) then state+=_NON_EXISTENT else state+=_NOT_WRITABLE fi icon=LOCK_ICON fi local state_u=${${(U)state}//İ/I} local style=%b _p9k_color $state BACKGROUND blue _p9k_background $_p9k__ret style+=$_p9k__ret _p9k_color $state FOREGROUND "$_p9k_color1" _p9k_foreground $_p9k__ret style+=$_p9k__ret if (( expand )) then _p9k_escape_style $style style=$_p9k__ret fi parts=("${(@)parts//\%/%%}") if [[ $_POWERLEVEL9K_HOME_FOLDER_ABBREVIATION != '~' && $fake_first == 0 && $p == ('~'|'~/'*) ]] then (( expand )) && _p9k_escape $_POWERLEVEL9K_HOME_FOLDER_ABBREVIATION || _p9k__ret=$_POWERLEVEL9K_HOME_FOLDER_ABBREVIATION parts[1]=$_p9k__ret [[ $_p9k__ret == *%* ]] && parts[1]+=$style elif [[ $_POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER == 1 && $fake_first == 0 && $#parts > 1 && -z $parts[1] && -n $parts[2] ]] then parts[1]=() fi local last_style= _p9k_param $state PATH_HIGHLIGHT_BOLD '' [[ $_p9k__ret == true ]] && last_style+=%B if (( $+parameters[_POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND] || $+parameters[_POWERLEVEL9K_${state_u}_PATH_HIGHLIGHT_FOREGROUND] )) then _p9k_color $state PATH_HIGHLIGHT_FOREGROUND '' _p9k_foreground $_p9k__ret last_style+=$_p9k__ret fi if [[ -n $last_style ]] then (( expand )) && _p9k_escape_style $last_style || _p9k__ret=$last_style parts[-1]=$_p9k__ret${parts[-1]//$'\1'/$'\1'$_p9k__ret}$style fi local anchor_style= _p9k_param $state ANCHOR_BOLD '' [[ $_p9k__ret == true ]] && anchor_style+=%B if (( $+parameters[_POWERLEVEL9K_DIR_ANCHOR_FOREGROUND] || $+parameters[_POWERLEVEL9K_${state_u}_ANCHOR_FOREGROUND] )) then _p9k_color $state ANCHOR_FOREGROUND '' _p9k_foreground $_p9k__ret anchor_style+=$_p9k__ret fi if [[ -n $anchor_style ]] then (( expand )) && _p9k_escape_style $anchor_style || _p9k__ret=$anchor_style if [[ -z $last_style ]] then parts=("${(@)parts/%(#b)(*)$'\2'/$_p9k__ret$match[1]$style}") else (( $#parts > 1 )) && parts[1,-2]=("${(@)parts[1,-2]/%(#b)(*)$'\2'/$_p9k__ret$match[1]$style}") parts[-1]=${parts[-1]/$'\2'} fi else parts=("${(@)parts/$'\2'}") fi if (( $+parameters[_POWERLEVEL9K_DIR_SHORTENED_FOREGROUND] || $+parameters[_POWERLEVEL9K_${state_u}_SHORTENED_FOREGROUND] )) then _p9k_color $state SHORTENED_FOREGROUND '' _p9k_foreground $_p9k__ret (( expand )) && _p9k_escape_style $_p9k__ret local shortened_fg=$_p9k__ret (( expand )) && _p9k_escape $delim || _p9k__ret=$delim [[ $_p9k__ret == *%* ]] && _p9k__ret+=$style$shortened_fg parts=("${(@)parts/(#b)$'\3'(*)$'\1'(*)$'\3'/$shortened_fg$match[1]$_p9k__ret$match[2]$style}") parts=("${(@)parts/(#b)(*)$'\1'(*)/$shortened_fg$match[1]$_p9k__ret$match[2]$style}") else (( expand )) && _p9k_escape $delim || _p9k__ret=$delim [[ $_p9k__ret == *%* ]] && _p9k__ret+=$style parts=("${(@)parts/$'\1'/$_p9k__ret}") parts=("${(@)parts//$'\3'}") fi if [[ $_p9k__cwd == / && $_POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER == 1 ]] then local sep='/' else local sep='' if (( $+parameters[_POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND] || $+parameters[_POWERLEVEL9K_${state_u}_PATH_SEPARATOR_FOREGROUND] )) then _p9k_color $state PATH_SEPARATOR_FOREGROUND '' _p9k_foreground $_p9k__ret (( expand )) && _p9k_escape_style $_p9k__ret sep=$_p9k__ret fi _p9k_param $state PATH_SEPARATOR / _p9k__ret=${(g::)_p9k__ret} (( expand )) && _p9k_escape $_p9k__ret sep+=$_p9k__ret [[ $sep == *%* ]] && sep+=$style fi local content="${(pj.$sep.)parts}" if (( _POWERLEVEL9K_DIR_HYPERLINK && _p9k_term_has_href )) && [[ $_p9k__cwd == /* ]] then _p9k_url_escape $_p9k__cwd local header=$'%{\e]8;;file://'$_p9k__ret$'\a%}' local footer=$'%{\e]8;;\a%}' if (( expand )) then _p9k_escape $header header=$_p9k__ret _p9k_escape $footer footer=$_p9k__ret fi content=$header$content$footer fi (( expand )) && _p9k_prompt_length "${(e):-"\${\${_p9k__d::=0}+}$content"}" || _p9k__ret= _p9k_cache_ephemeral_set "$state" "$icon" "$expand" "$content" $_p9k__ret fi if (( _p9k__cache_val[3] )) then if (( $+_p9k__dir )) then _p9k__cache_val[4]='${${_p9k__d::=-1024}+}'$_p9k__cache_val[4] else _p9k__dir=$_p9k__cache_val[4] _p9k__dir_len=$_p9k__cache_val[5] _p9k__cache_val[4]='%{d%}'$_p9k__cache_val[4]'%{d%}' fi fi _p9k_prompt_segment "$_p9k__cache_val[1]" "blue" "$_p9k_color1" "$_p9k__cache_val[2]" "$_p9k__cache_val[3]" "" "$_p9k__cache_val[4]" } prompt_dir_writable () { if [[ ! -w "$_p9k__cwd_a" ]] then _p9k_prompt_segment "$0_FORBIDDEN" "red" "yellow1" 'LOCK_ICON' 0 '' '' fi } prompt_direnv () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment $0 $_p9k_color1 yellow DIRENV_ICON 0 '${DIRENV_DIR-}' '' (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_disk_usage () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment $0_CRITICAL red white DISK_ICON 1 '$_p9k__disk_usage_critical' '$_p9k__disk_usage_pct%%' _p9k_prompt_segment $0_WARNING yellow $_p9k_color1 DISK_ICON 1 '$_p9k__disk_usage_warning' '$_p9k__disk_usage_pct%%' if (( ! _POWERLEVEL9K_DISK_USAGE_ONLY_WARNING )) then _p9k_prompt_segment $0_NORMAL $_p9k_color1 yellow DISK_ICON 1 '$_p9k__disk_usage_normal' '$_p9k__disk_usage_pct%%' fi (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_docker_machine () { _p9k_prompt_segment "$0" "magenta" "$_p9k_color1" 'SERVER_ICON' 0 '' "${DOCKER_MACHINE_NAME//\%/%%}" } prompt_dotnet_version () { if (( _POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY )) then _p9k_upglob 'project.json|global.json|packet.dependencies|*.csproj|*.fsproj|*.xproj|*.sln' -. && return fi local cfg _p9k_upglob global.json -. || cfg=$_p9k__parent_dirs[$?]/global.json _p9k_cached_cmd 0 "$cfg" dotnet --version || return _p9k_prompt_segment "$0" "magenta" "white" 'DOTNET_ICON' 0 '' "$_p9k__ret" } prompt_dropbox () { local dropbox_status="$(dropbox-cli filestatus . | cut -d\ -f2-)" if [[ "$dropbox_status" != 'unwatched' && "$dropbox_status" != "isn't running!" ]] then if [[ "$dropbox_status" =~ 'up to date' ]] then dropbox_status="" fi _p9k_prompt_segment "$0" "white" "blue" "DROPBOX_ICON" 0 '' "${dropbox_status//\%/%%}" fi } prompt_example () { p10k segment -b 1 -f 3 -i '⭐' -t 'hello, %n' } prompt_fvm () { _p9k_fvm_new || _p9k_fvm_old } prompt_gcloud () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment $0_PARTIAL blue white GCLOUD_ICON 1 '${${(M)${#P9K_GCLOUD_PROJECT_NAME}:#0}:+$P9K_GCLOUD_ACCOUNT$P9K_GCLOUD_PROJECT_ID}' '${P9K_GCLOUD_ACCOUNT//\%/%%}:${P9K_GCLOUD_PROJECT_ID//\%/%%}' _p9k_prompt_segment $0_COMPLETE blue white GCLOUD_ICON 1 '$P9K_GCLOUD_PROJECT_NAME' '${P9K_GCLOUD_ACCOUNT//\%/%%}:${P9K_GCLOUD_PROJECT_ID//\%/%%}' (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_go_version () { _p9k_cached_cmd 0 '' go version || return [[ $_p9k__ret == (#b)*go([[:digit:].]##)* ]] || return local v=$match[1] if (( _POWERLEVEL9K_GO_VERSION_PROJECT_ONLY )) then local p=$GOPATH if [[ -z $p ]] then if [[ -d $HOME/go ]] then p=$HOME/go else p="$(go env GOPATH 2>/dev/null)" && [[ -n $p ]] || return fi fi if [[ $_p9k__cwd/ != $p/* && $_p9k__cwd_a/ != $p/* ]] then _p9k_upglob go.mod -. && return fi fi _p9k_prompt_segment "$0" "green" "grey93" "GO_ICON" 0 '' "${v//\%/%%}" } prompt_goenv () { local v=${(j.:.)${(@)${(s.:.)GOENV_VERSION}#go-}} if [[ -n $v ]] then (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)shell]} )) || return else (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)local|global]} )) || return _p9k__ret= if [[ $GOENV_DIR != (|.) ]] then [[ $GOENV_DIR == /* ]] && local dir=$GOENV_DIR || local dir="$_p9k__cwd_a/$GOENV_DIR" dir=${dir:A} if [[ $dir != $_p9k__cwd_a ]] then while true do if _p9k_read_pyenv_like_version_file $dir/.go-version go- then (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)local]} )) || return break fi [[ $dir == (/|.) ]] && break dir=${dir:h} done fi fi if [[ -z $_p9k__ret ]] then _p9k_upglob .go-version -. local -i idx=$? if (( idx )) && _p9k_read_pyenv_like_version_file $_p9k__parent_dirs[idx]/.go-version go- then (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)local]} )) || return else _p9k__ret= fi fi if [[ -z $_p9k__ret ]] then (( _POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW )) || return (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)global]} )) || return _p9k_goenv_global_version fi v=$_p9k__ret fi if (( !_POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW )) then _p9k_goenv_global_version [[ $v == $_p9k__ret ]] && return fi if (( !_POWERLEVEL9K_GOENV_SHOW_SYSTEM )) then [[ $v == system ]] && return fi _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'GO_ICON' 0 '' "${v//\%/%%}" } prompt_google_app_cred () { unset P9K_GOOGLE_APP_CRED_{TYPE,PROJECT_ID,CLIENT_EMAIL} if ! _p9k_cache_stat_get $0 $GOOGLE_APPLICATION_CREDENTIALS then local -a lines local q='[.type//"", .project_id//"", .client_email//"", 0][]' if lines=("${(@f)$(jq -r $q <$GOOGLE_APPLICATION_CREDENTIALS 2>/dev/null)}") && (( $#lines == 4 )) then local text="${(j.:.)lines[1,-2]}" local pat class state for pat class in "${_POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES[@]}" do if [[ $text == ${~pat} ]] then [[ -n $class ]] && state=_${${(U)class}//İ/I} break fi done _p9k_cache_stat_set 1 "${(@)lines[1,-2]}" "$text" "$state" else _p9k_cache_stat_set 0 fi fi (( _p9k__cache_val[1] )) || return P9K_GOOGLE_APP_CRED_TYPE=$_p9k__cache_val[2] P9K_GOOGLE_APP_CRED_PROJECT_ID=$_p9k__cache_val[3] P9K_GOOGLE_APP_CRED_CLIENT_EMAIL=$_p9k__cache_val[4] _p9k_prompt_segment "$0$_p9k__cache_val[6]" "blue" "white" "GCLOUD_ICON" 0 '' "$_p9k__cache_val[5]" } prompt_haskell_stack () { if [[ -n $STACK_YAML ]] then (( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)shell]} )) || return _p9k_haskell_stack_version $STACK_YAML else (( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)local|global]} )) || return if _p9k_upglob stack.yaml -. then (( _POWERLEVEL9K_HASKELL_STACK_PROMPT_ALWAYS_SHOW )) || return (( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)global]} )) || return _p9k_haskell_stack_version ${STACK_ROOT:-~/.stack}/global-project/stack.yaml else local -i idx=$? (( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)local]} )) || return _p9k_haskell_stack_version $_p9k__parent_dirs[idx]/stack.yaml fi fi [[ -n $_p9k__ret ]] || return local v=$_p9k__ret if (( !_POWERLEVEL9K_HASKELL_STACK_PROMPT_ALWAYS_SHOW )) then _p9k_haskell_stack_version ${STACK_ROOT:-~/.stack}/global-project/stack.yaml [[ $v == $_p9k__ret ]] && return fi _p9k_prompt_segment "$0" "yellow" "$_p9k_color1" 'HASKELL_ICON' 0 '' "${v//\%/%%}" } prompt_history () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment "$0" "grey50" "$_p9k_color1" '' 0 '' '%h' (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_host () { local -i len=$#_p9k__prompt _p9k__has_upglob if (( P9K_SSH )) then _p9k_prompt_segment "$0_REMOTE" "${_p9k_color1}" yellow SSH_ICON 0 '' "$_POWERLEVEL9K_HOST_TEMPLATE" else _p9k_prompt_segment "$0_LOCAL" "${_p9k_color1}" yellow HOST_ICON 0 '' "$_POWERLEVEL9K_HOST_TEMPLATE" fi (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_ip () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment "$0" "cyan" "$_p9k_color1" 'NETWORK_ICON' 1 '$P9K_IP_IP' '$P9K_IP_IP' (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_java_version () { if (( _POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY )) then _p9k_upglob 'pom.xml|build.gradle.kts|build.sbt|deps.edn|project.clj|build.boot|*.(java|class|jar|gradle|clj|cljc)' -. && return fi local java=$commands[java] if ! _p9k_cache_stat_get $0 $java ${JAVA_HOME:+$JAVA_HOME/release} then local v v="$(java -fullversion 2>&1)" || v= v=${${v#*\"}%\"*} (( _POWERLEVEL9K_JAVA_VERSION_FULL )) || v=${v%%-*} _p9k_cache_stat_set "${v//\%/%%}" fi [[ -n $_p9k__cache_val[1] ]] || return _p9k_prompt_segment "$0" "red" "white" "JAVA_ICON" 0 '' $_p9k__cache_val[1] } prompt_jenv () { if [[ -n $JENV_VERSION ]] then (( ${_POWERLEVEL9K_JENV_SOURCES[(I)shell]} )) || return local v=$JENV_VERSION else (( ${_POWERLEVEL9K_JENV_SOURCES[(I)local|global]} )) || return _p9k__ret= if [[ $JENV_DIR != (|.) ]] then [[ $JENV_DIR == /* ]] && local dir=$JENV_DIR || local dir="$_p9k__cwd_a/$JENV_DIR" dir=${dir:A} if [[ $dir != $_p9k__cwd_a ]] then while true do if _p9k_read_word $dir/.java-version then (( ${_POWERLEVEL9K_JENV_SOURCES[(I)local]} )) || return break fi [[ $dir == (/|.) ]] && break dir=${dir:h} done fi fi if [[ -z $_p9k__ret ]] then _p9k_upglob .java-version -. local -i idx=$? if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.java-version then (( ${_POWERLEVEL9K_JENV_SOURCES[(I)local]} )) || return else _p9k__ret= fi fi if [[ -z $_p9k__ret ]] then (( _POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW )) || return (( ${_POWERLEVEL9K_JENV_SOURCES[(I)global]} )) || return _p9k_jenv_global_version fi local v=$_p9k__ret fi if (( !_POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW )) then _p9k_jenv_global_version [[ $v == $_p9k__ret ]] && return fi if (( !_POWERLEVEL9K_JENV_SHOW_SYSTEM )) then [[ $v == system ]] && return fi _p9k_prompt_segment "$0" white red 'JAVA_ICON' 0 '' "${v//\%/%%}" } prompt_kubecontext () { if ! _p9k_cache_stat_get $0 ${(s.:.)${KUBECONFIG:-$HOME/.kube/config}} then local name namespace cluster user cloud_name cloud_account cloud_zone cloud_cluster text state () { local cfg && cfg=(${(f)"$(kubectl config view -o=yaml 2>/dev/null)"}) || return local qstr='"*"' local str='([^"'\''|>]*|'$qstr')' local ctx=(${(@M)cfg:#current-context: $~str}) (( $#ctx == 1 )) || return name=${ctx[1]#current-context: } local -i pos=${cfg[(i)contexts:]} { (( pos <= $#cfg )) || return shift $pos cfg pos=${cfg[(i) name: ${(b)name}]} (( pos <= $#cfg )) || return (( --pos )) for ((; pos > 0; --pos)) do local line=$cfg[pos] if [[ $line == '- context:' ]] then return 0 elif [[ $line == (#b)' cluster: '($~str) ]] then cluster=$match[1] [[ $cluster == $~qstr ]] && cluster=$cluster[2,-2] elif [[ $line == (#b)' namespace: '($~str) ]] then namespace=$match[1] [[ $namespace == $~qstr ]] && namespace=$namespace[2,-2] elif [[ $line == (#b)' user: '($~str) ]] then user=$match[1] [[ $user == $~qstr ]] && user=$user[2,-2] fi done } always { [[ $name == $~qstr ]] && name=$name[2,-2] } } if [[ -n $name ]] then : ${namespace:=default} if [[ $cluster == (#b)gke_(?*)_(asia|australia|europe|northamerica|southamerica|us)-([a-z]##<->)(-[a-z]|)_(?*) ]] then cloud_name=gke cloud_account=$match[1] cloud_zone=$match[2]-$match[3]$match[4] cloud_cluster=$match[5] if (( ${_POWERLEVEL9K_KUBECONTEXT_SHORTEN[(I)gke]} )) then text=$cloud_cluster fi elif [[ $cluster == (#b)arn:aws[[:alnum:]-]#:eks:([[:alnum:]-]##):([[:digit:]]##):cluster/(?*) ]] then cloud_name=eks cloud_zone=$match[1] cloud_account=$match[2] cloud_cluster=$match[3] if (( ${_POWERLEVEL9K_KUBECONTEXT_SHORTEN[(I)eks]} )) then text=$cloud_cluster fi fi if [[ -z $text ]] then text=$name if [[ $_POWERLEVEL9K_KUBECONTEXT_SHOW_DEFAULT_NAMESPACE == 1 || $namespace != (default|$name) ]] then text+="/$namespace" fi fi local pat class for pat class in "${_POWERLEVEL9K_KUBECONTEXT_CLASSES[@]}" do if [[ $text == ${~pat} ]] then [[ -n $class ]] && state=_${${(U)class}//İ/I} break fi done fi _p9k_cache_stat_set "${(g::)name}" "${(g::)namespace}" "${(g::)cluster}" "${(g::)user}" "${(g::)cloud_name}" "${(g::)cloud_account}" "${(g::)cloud_zone}" "${(g::)cloud_cluster}" "${(g::)text}" "$state" fi typeset -g P9K_KUBECONTEXT_NAME=$_p9k__cache_val[1] typeset -g P9K_KUBECONTEXT_NAMESPACE=$_p9k__cache_val[2] typeset -g P9K_KUBECONTEXT_CLUSTER=$_p9k__cache_val[3] typeset -g P9K_KUBECONTEXT_USER=$_p9k__cache_val[4] typeset -g P9K_KUBECONTEXT_CLOUD_NAME=$_p9k__cache_val[5] typeset -g P9K_KUBECONTEXT_CLOUD_ACCOUNT=$_p9k__cache_val[6] typeset -g P9K_KUBECONTEXT_CLOUD_ZONE=$_p9k__cache_val[7] typeset -g P9K_KUBECONTEXT_CLOUD_CLUSTER=$_p9k__cache_val[8] [[ -n $_p9k__cache_val[9] ]] || return _p9k_prompt_segment $0$_p9k__cache_val[10] magenta white KUBERNETES_ICON 0 '' "${_p9k__cache_val[9]//\%/%%}" } prompt_laravel_version () { _p9k_upglob artisan && return local dir=$_p9k__parent_dirs[$?] local app=$dir/vendor/laravel/framework/src/Illuminate/Foundation/Application.php [[ -r $app ]] || return if ! _p9k_cache_stat_get $0 $dir/artisan $app then local v="$(php $dir/artisan --version 2> /dev/null)" v="${${(M)v:#Laravel Framework *}#Laravel Framework }" v=${${v#$'\e['<->m}%$'\e['<->m} _p9k_cache_stat_set "$v" fi [[ -n $_p9k__cache_val[1] ]] || return _p9k_prompt_segment "$0" "maroon" "white" 'LARAVEL_ICON' 0 '' "${_p9k__cache_val[1]//\%/%%}" } prompt_lf () { _p9k_prompt_segment $0 6 $_p9k_color1 LF_ICON 0 '' $LF_LEVEL } prompt_load () { if [[ $_p9k_os == (OSX|BSD) ]] then local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment $0_CRITICAL red "$_p9k_color1" LOAD_ICON 1 '$_p9k__load_critical' '$_p9k__load_value' _p9k_prompt_segment $0_WARNING yellow "$_p9k_color1" LOAD_ICON 1 '$_p9k__load_warning' '$_p9k__load_value' _p9k_prompt_segment $0_NORMAL green "$_p9k_color1" LOAD_ICON 1 '$_p9k__load_normal' '$_p9k__load_value' (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] return fi [[ -r /proc/loadavg ]] || return _p9k_read_file /proc/loadavg || return local load=${${(A)=_p9k__ret}[_POWERLEVEL9K_LOAD_WHICH]//,/.} local -F pct='100. * load / _p9k_num_cpus' if (( pct > _POWERLEVEL9K_LOAD_CRITICAL_PCT )) then _p9k_prompt_segment $0_CRITICAL red "$_p9k_color1" LOAD_ICON 0 '' $load elif (( pct > _POWERLEVEL9K_LOAD_WARNING_PCT )) then _p9k_prompt_segment $0_WARNING yellow "$_p9k_color1" LOAD_ICON 0 '' $load else _p9k_prompt_segment $0_NORMAL green "$_p9k_color1" LOAD_ICON 0 '' $load fi } prompt_luaenv () { if [[ -n $LUAENV_VERSION ]] then (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)shell]} )) || return local v=$LUAENV_VERSION else (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)local|global]} )) || return _p9k__ret= if [[ $LUAENV_DIR != (|.) ]] then [[ $LUAENV_DIR == /* ]] && local dir=$LUAENV_DIR || local dir="$_p9k__cwd_a/$LUAENV_DIR" dir=${dir:A} if [[ $dir != $_p9k__cwd_a ]] then while true do if _p9k_read_word $dir/.lua-version then (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)local]} )) || return break fi [[ $dir == (/|.) ]] && break dir=${dir:h} done fi fi if [[ -z $_p9k__ret ]] then _p9k_upglob .lua-version -. local -i idx=$? if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.lua-version then (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)local]} )) || return else _p9k__ret= fi fi if [[ -z $_p9k__ret ]] then (( _POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW )) || return (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)global]} )) || return _p9k_luaenv_global_version fi local v=$_p9k__ret fi if (( !_POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW )) then _p9k_luaenv_global_version [[ $v == $_p9k__ret ]] && return fi if (( !_POWERLEVEL9K_LUAENV_SHOW_SYSTEM )) then [[ $v == system ]] && return fi _p9k_prompt_segment "$0" blue "$_p9k_color1" 'LUA_ICON' 0 '' "${v//\%/%%}" } prompt_midnight_commander () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment $0 $_p9k_color1 yellow MIDNIGHT_COMMANDER_ICON 0 '' '' (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_nix_shell () { _p9k_prompt_segment $0 4 $_p9k_color1 NIX_SHELL_ICON 0 '' "${(M)IN_NIX_SHELL:#(pure|impure)}" } prompt_nnn () { _p9k_prompt_segment $0 6 $_p9k_color1 NNN_ICON 0 '' $NNNLVL } prompt_node_version () { _p9k_upglob package.json -. local -i idx=$? (( idx || ! _POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY )) || return local node=$commands[node] local -a file_deps env_deps if [[ $node == ${NODENV_ROOT:-$HOME/.nodenv}/shims/node ]] then env_deps+=("$NODENV_VERSION") file_deps+=(${NODENV_ROOT:-$HOME/.nodenv}/version) if [[ $NODENV_DIR != (|.) ]] then [[ $NODENV_DIR == /* ]] && local dir=$NODENV_DIR || local dir="$_p9k__cwd_a/$NODENV_DIR" dir=${dir:A} if [[ $dir != $_p9k__cwd_a ]] then while true do if [[ -e $dir/.node-version ]] then file_deps+=($dir/.node-version) break fi [[ $dir == (/|.) ]] && break dir=${dir:h} done fi fi _p9k_upglob .node-version -. || file_deps+=($_p9k__parent_dirs[idx]/.node-version) elif (( idx )) then file_deps+=($_p9k__parent_dirs[idx]/package.json) fi if ! _p9k_cache_stat_get "$0 $#env_deps ${(j: :)${(@q)env_deps}} ${(j: :)${(@q)file_deps}}" $file_deps $node then local out out=$($node --version 2>/dev/null) _p9k_cache_stat_set $(( ! $? )) "$out" fi (( $_p9k__cache_val[1] )) || return local v=$_p9k__cache_val[2] [[ $v == v?* ]] || return _p9k_prompt_segment "$0" "green" "white" 'NODE_ICON' 0 '' "${${v#v}//\%/%%}" } prompt_nodeenv () { local msg if (( _POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION )) && _p9k_cached_cmd 0 '' node --version then msg="${_p9k__ret//\%/%%} " fi msg+="$_POWERLEVEL9K_NODEENV_LEFT_DELIMITER${${NODE_VIRTUAL_ENV:t}//\%/%%}$_POWERLEVEL9K_NODEENV_RIGHT_DELIMITER" _p9k_prompt_segment "$0" "black" "green" 'NODE_ICON' 0 '' "$msg" } prompt_nodenv () { if [[ -n $NODENV_VERSION ]] then (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)shell]} )) || return local v=$NODENV_VERSION else (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)local|global]} )) || return _p9k__ret= if [[ $NODENV_DIR != (|.) ]] then [[ $NODENV_DIR == /* ]] && local dir=$NODENV_DIR || local dir="$_p9k__cwd_a/$NODENV_DIR" dir=${dir:A} if [[ $dir != $_p9k__cwd_a ]] then while true do if _p9k_read_word $dir/.node-version then (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)local]} )) || return break fi [[ $dir == (/|.) ]] && break dir=${dir:h} done fi fi if [[ -z $_p9k__ret ]] then _p9k_upglob .node-version -. local -i idx=$? if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.node-version then (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)local]} )) || return else _p9k__ret= fi fi if [[ -z $_p9k__ret ]] then (( _POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW )) || return (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)global]} )) || return _p9k_nodenv_global_version fi _p9k_nodeenv_version_transform $_p9k__ret || return local v=$_p9k__ret fi if (( !_POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW )) then _p9k_nodenv_global_version _p9k_nodeenv_version_transform $_p9k__ret && [[ $v == $_p9k__ret ]] && return fi if (( !_POWERLEVEL9K_NODENV_SHOW_SYSTEM )) then [[ $v == system ]] && return fi _p9k_prompt_segment "$0" "black" "green" 'NODE_ICON' 0 '' "${v//\%/%%}" } prompt_nordvpn () { unset $__p9k_nordvpn_tag P9K_NORDVPN_COUNTRY_CODE [[ -e /run/nordvpn/nordvpnd.sock ]] || return _p9k_fetch_nordvpn_status 2> /dev/null || return if [[ $P9K_NORDVPN_SERVER == (#b)([[:alpha:]]##)[[:digit:]]##.nordvpn.com ]] then typeset -g P9K_NORDVPN_COUNTRY_CODE=${${(U)match[1]}//İ/I} fi case $P9K_NORDVPN_STATUS in (Connected) _p9k_prompt_segment $0_CONNECTED blue white NORDVPN_ICON 0 '' "$P9K_NORDVPN_COUNTRY_CODE" ;; (Disconnected | Connecting | Disconnecting) local state=${${(U)P9K_NORDVPN_STATUS}//İ/I} _p9k_get_icon $0_$state FAIL_ICON _p9k_prompt_segment $0_$state yellow white NORDVPN_ICON 0 '' "$_p9k__ret" ;; (*) return ;; esac } prompt_nvm () { [[ -n $NVM_DIR ]] && _p9k_nvm_ls_current || return local current=$_p9k__ret (( _POWERLEVEL9K_NVM_SHOW_SYSTEM )) || [[ $current != system ]] || return (( _POWERLEVEL9K_NVM_PROMPT_ALWAYS_SHOW )) || ! _p9k_nvm_ls_default || [[ $_p9k__ret != $current ]] || return _p9k_prompt_segment "$0" "magenta" "black" 'NODE_ICON' 0 '' "${${current#v}//\%/%%}" } prompt_openfoam () { if [[ -z "$WM_FORK" ]] then _p9k_prompt_segment "$0" "yellow" "$_p9k_color1" '' 0 '' "OF: ${${WM_PROJECT_VERSION:t}//\%/%%}" else _p9k_prompt_segment "$0" "yellow" "$_p9k_color1" '' 0 '' "F-X: ${${WM_PROJECT_VERSION:t}//\%/%%}" fi } prompt_os_icon () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment "$0" "black" "white" '' 0 '' "$_p9k_os_icon" (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_package () { unset P9K_PACKAGE_NAME P9K_PACKAGE_VERSION _p9k_upglob package.json -. && return local file=$_p9k__parent_dirs[$?]/package.json if ! _p9k_cache_stat_get $0 $file then () { local data field local -A found { data="$(<$file)" || return } 2> /dev/null data=${${data//$'\r'}##[[:space:]]#} [[ $data == '{'* ]] || return data[1]= local -i depth=1 while true do data=${data##[[:space:]]#} [[ -n $data ]] || return case $data[1] in ('{' | '[') data[1]= (( ++depth )) ;; ('}' | ']') data[1]= (( --depth > 0 )) || return ;; (':') data[1]= ;; (',') data[1]= field= ;; ([[:alnum:].]) data=${data##[[:alnum:].]#} ;; ('"') local tail=${data##\"([^\"\\]|\\?)#} [[ $tail == '"'* ]] || return local s=${data:1:-$#tail} data=${tail:1} (( depth == 1 )) || continue if [[ -z $field ]] then field=${s:-x} elif [[ $field == (name|version) ]] then (( ! $+found[$field] )) || return [[ -n $s ]] || return [[ $s != *($'\n'|'\')* ]] || return found[$field]=$s (( $#found == 2 )) && break fi ;; (*) return 1 ;; esac done _p9k_cache_stat_set 1 $found[name] $found[version] return 0 } || _p9k_cache_stat_set 0 fi (( _p9k__cache_val[1] )) || return P9K_PACKAGE_NAME=$_p9k__cache_val[2] P9K_PACKAGE_VERSION=$_p9k__cache_val[3] _p9k_prompt_segment "$0" "cyan" "$_p9k_color1" PACKAGE_ICON 0 '' ${P9K_PACKAGE_VERSION//\%/%%} } prompt_per_directory_history () { if [[ $_per_directory_history_is_global == true ]] then _p9k_prompt_segment ${0}_GLOBAL 3 $_p9k_color1 HISTORY_ICON 0 '' global else _p9k_prompt_segment ${0}_LOCAL 5 $_p9k_color1 HISTORY_ICON 0 '' local fi } prompt_perlbrew () { if (( _POWERLEVEL9K_PERLBREW_PROJECT_ONLY )) then _p9k_upglob 'cpanfile|.perltidyrc|(|MY)META.(yml|json)|(Makefile|Build).PL|*.(pl|pm|t|pod)' -. && return fi local v=$PERLBREW_PERL (( _POWERLEVEL9K_PERLBREW_SHOW_PREFIX )) || v=${v#*-} [[ -n $v ]] || return _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PERL_ICON' 0 '' "${v//\%/%%}" } prompt_php_version () { if (( _POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY )) then _p9k_upglob 'composer.json|*.php' -. && return fi _p9k_cached_cmd 0 '' php --version || return [[ $_p9k__ret == (#b)(*$'\n')#'PHP '([[:digit:].]##)* ]] || return local v=$match[2] _p9k_prompt_segment "$0" "fuchsia" "grey93" 'PHP_ICON' 0 '' "${v//\%/%%}" } prompt_phpenv () { if [[ -n $PHPENV_VERSION ]] then (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)shell]} )) || return local v=$PHPENV_VERSION else (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)local|global]} )) || return _p9k__ret= if [[ $PHPENV_DIR != (|.) ]] then [[ $PHPENV_DIR == /* ]] && local dir=$PHPENV_DIR || local dir="$_p9k__cwd_a/$PHPENV_DIR" dir=${dir:A} if [[ $dir != $_p9k__cwd_a ]] then while true do if _p9k_read_word $dir/.php-version then (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)local]} )) || return break fi [[ $dir == (/|.) ]] && break dir=${dir:h} done fi fi if [[ -z $_p9k__ret ]] then _p9k_upglob .php-version -. local -i idx=$? if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.php-version then (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)local]} )) || return else _p9k__ret= fi fi if [[ -z $_p9k__ret ]] then (( _POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW )) || return (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)global]} )) || return _p9k_phpenv_global_version fi local v=$_p9k__ret fi if (( !_POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW )) then _p9k_phpenv_global_version [[ $v == $_p9k__ret ]] && return fi if (( !_POWERLEVEL9K_PHPENV_SHOW_SYSTEM )) then [[ $v == system ]] && return fi _p9k_prompt_segment "$0" "magenta" "$_p9k_color1" 'PHP_ICON' 0 '' "${v//\%/%%}" } prompt_plenv () { if [[ -n $PLENV_VERSION ]] then (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)shell]} )) || return local v=$PLENV_VERSION else (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)local|global]} )) || return _p9k__ret= if [[ $PLENV_DIR != (|.) ]] then [[ $PLENV_DIR == /* ]] && local dir=$PLENV_DIR || local dir="$_p9k__cwd_a/$PLENV_DIR" dir=${dir:A} if [[ $dir != $_p9k__cwd_a ]] then while true do if _p9k_read_word $dir/.perl-version then (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)local]} )) || return break fi [[ $dir == (/|.) ]] && break dir=${dir:h} done fi fi if [[ -z $_p9k__ret ]] then _p9k_upglob .perl-version -. local -i idx=$? if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.perl-version then (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)local]} )) || return else _p9k__ret= fi fi if [[ -z $_p9k__ret ]] then (( _POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW )) || return (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)global]} )) || return _p9k_plenv_global_version fi local v=$_p9k__ret fi if (( !_POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW )) then _p9k_plenv_global_version [[ $v == $_p9k__ret ]] && return fi if (( !_POWERLEVEL9K_PLENV_SHOW_SYSTEM )) then [[ $v == system ]] && return fi _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PERL_ICON' 0 '' "${v//\%/%%}" } prompt_powerlevel9k_setup () { _p9k_restore_special_params eval "$__p9k_intro" _p9k_setup } prompt_powerlevel9k_teardown () { _p9k_restore_special_params eval "$__p9k_intro" add-zsh-hook -D precmd '(_p9k_|powerlevel9k_)*' add-zsh-hook -D preexec '(_p9k_|powerlevel9k_)*' PROMPT='%m%# ' RPROMPT= if (( __p9k_enabled )) then _p9k_deinit __p9k_enabled=0 fi } prompt_prompt_char () { local saved=$_p9k__prompt_char_saved[$_p9k__prompt_side$_p9k__segment_index$((!_p9k__status))] if [[ -n $saved ]] then _p9k__prompt+=$saved return fi local -i len=$#_p9k__prompt _p9k__has_upglob if (( __p9k_sh_glob )) then if (( _p9k__status )) then if (( _POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE )) then _p9k_prompt_segment $0_ERROR_VIINS "$_p9k_color1" 196 '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*overwrite*}}' '❯' _p9k_prompt_segment $0_ERROR_VIOWR "$_p9k_color1" 196 '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*insert*}}' '▶' else _p9k_prompt_segment $0_ERROR_VIINS "$_p9k_color1" 196 '' 0 '${${${${_p9k__keymap:#vicmd}:#vivis}:#vivli}}' '❯' fi _p9k_prompt_segment $0_ERROR_VICMD "$_p9k_color1" 196 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' '❮' _p9k_prompt_segment $0_ERROR_VIVIS "$_p9k_color1" 196 '' 0 '${$((! ${#${${${${:-$_p9k__keymap$_p9k__region_active}:#vicmd1}:#vivis?}:#vivli?}})):#0}' 'Ⅴ' else if (( _POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE )) then _p9k_prompt_segment $0_OK_VIINS "$_p9k_color1" 76 '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*overwrite*}}' '❯' _p9k_prompt_segment $0_OK_VIOWR "$_p9k_color1" 76 '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*insert*}}' '▶' else _p9k_prompt_segment $0_OK_VIINS "$_p9k_color1" 76 '' 0 '${${${${_p9k__keymap:#vicmd}:#vivis}:#vivli}}' '❯' fi _p9k_prompt_segment $0_OK_VICMD "$_p9k_color1" 76 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' '❮' _p9k_prompt_segment $0_OK_VIVIS "$_p9k_color1" 76 '' 0 '${$((! ${#${${${${:-$_p9k__keymap$_p9k__region_active}:#vicmd1}:#vivis?}:#vivli?}})):#0}' 'Ⅴ' fi else if (( _p9k__status )) then if (( _POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE )) then _p9k_prompt_segment $0_ERROR_VIINS "$_p9k_color1" 196 '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*overwrite*)}' '❯' _p9k_prompt_segment $0_ERROR_VIOWR "$_p9k_color1" 196 '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*insert*)}' '▶' else _p9k_prompt_segment $0_ERROR_VIINS "$_p9k_color1" 196 '' 0 '${_p9k__keymap:#(vicmd|vivis|vivli)}' '❯' fi _p9k_prompt_segment $0_ERROR_VICMD "$_p9k_color1" 196 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' '❮' _p9k_prompt_segment $0_ERROR_VIVIS "$_p9k_color1" 196 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#(vicmd1|vivis?|vivli?)}' 'Ⅴ' else if (( _POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE )) then _p9k_prompt_segment $0_OK_VIINS "$_p9k_color1" 76 '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*overwrite*)}' '❯' _p9k_prompt_segment $0_OK_VIOWR "$_p9k_color1" 76 '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*insert*)}' '▶' else _p9k_prompt_segment $0_OK_VIINS "$_p9k_color1" 76 '' 0 '${_p9k__keymap:#(vicmd|vivis|vivli)}' '❯' fi _p9k_prompt_segment $0_OK_VICMD "$_p9k_color1" 76 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' '❮' _p9k_prompt_segment $0_OK_VIVIS "$_p9k_color1" 76 '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#(vicmd1|vivis?|vivli?)}' 'Ⅴ' fi fi (( _p9k__has_upglob )) || _p9k__prompt_char_saved[$_p9k__prompt_side$_p9k__segment_index$((!_p9k__status))]=$_p9k__prompt[len+1,-1] } prompt_proxy () { local -U p=($all_proxy $http_proxy $https_proxy $ftp_proxy $ALL_PROXY $HTTP_PROXY $HTTPS_PROXY $FTP_PROXY) p=(${(@)${(@)${(@)p#*://}##*@}%%/*}) (( $#p == 1 )) || p=("") _p9k_prompt_segment $0 $_p9k_color1 blue PROXY_ICON 0 '' "$p[1]" } prompt_public_ip () { local -i len=$#_p9k__prompt _p9k__has_upglob local ip='${_p9k__public_ip:-$_POWERLEVEL9K_PUBLIC_IP_NONE}' if [[ -n $_POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE ]] then _p9k_prompt_segment "$0" "$_p9k_color1" "$_p9k_color2" PUBLIC_IP_ICON 1 '${_p9k__public_ip_not_vpn:+'$ip'}' $ip _p9k_prompt_segment "$0" "$_p9k_color1" "$_p9k_color2" VPN_ICON 1 '${_p9k__public_ip_vpn:+'$ip'}' $ip else _p9k_prompt_segment "$0" "$_p9k_color1" "$_p9k_color2" PUBLIC_IP_ICON 1 $ip $ip fi (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_pyenv () { _p9k_pyenv_compute || return _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '' "${_p9k__pyenv_version//\%/%%}" } prompt_ram () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment $0 yellow "$_p9k_color1" RAM_ICON 1 '$_p9k__ram_free' '$_p9k__ram_free' (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_ranger () { _p9k_prompt_segment $0 $_p9k_color1 yellow RANGER_ICON 0 '' $RANGER_LEVEL } prompt_rbenv () { if [[ -n $RBENV_VERSION ]] then (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)shell]} )) || return local v=$RBENV_VERSION else (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)local|global]} )) || return _p9k__ret= if [[ $RBENV_DIR != (|.) ]] then [[ $RBENV_DIR == /* ]] && local dir=$RBENV_DIR || local dir="$_p9k__cwd_a/$RBENV_DIR" dir=${dir:A} if [[ $dir != $_p9k__cwd_a ]] then while true do if _p9k_read_word $dir/.ruby-version then (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)local]} )) || return break fi [[ $dir == (/|.) ]] && break dir=${dir:h} done fi fi if [[ -z $_p9k__ret ]] then _p9k_upglob .ruby-version -. local -i idx=$? if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.ruby-version then (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)local]} )) || return else _p9k__ret= fi fi if [[ -z $_p9k__ret ]] then (( _POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW )) || return (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)global]} )) || return _p9k_rbenv_global_version fi local v=$_p9k__ret fi if (( !_POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW )) then _p9k_rbenv_global_version [[ $v == $_p9k__ret ]] && return fi if (( !_POWERLEVEL9K_RBENV_SHOW_SYSTEM )) then [[ $v == system ]] && return fi _p9k_prompt_segment "$0" "red" "$_p9k_color1" 'RUBY_ICON' 0 '' "${v//\%/%%}" } prompt_root_indicator () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment "$0" "$_p9k_color1" "yellow" 'ROOT_ICON' 0 '${${(%):-%#}:#\%}' '' (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_rspec_stats () { if [[ -d app && -d spec ]] then local -a code=(app/**/*.rb(N)) (( $#code )) || return local tests=(spec/**/*.rb(N)) _p9k_build_test_stats "$0" "$#code" "$#tests" "RSpec" 'TEST_ICON' fi } prompt_rust_version () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment $0 darkorange $_p9k_color1 RUST_ICON 1 '$P9K_RUST_VERSION' '${P9K_RUST_VERSION//\%/%%}' (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_rvm () { [[ $GEM_HOME == *rvm* && $ruby_string != $rvm_path/bin/ruby ]] || return local v=${GEM_HOME:t} (( _POWERLEVEL9K_RVM_SHOW_GEMSET )) || v=${v%%${rvm_gemset_separator:-@}*} (( _POWERLEVEL9K_RVM_SHOW_PREFIX )) || v=${v#*-} [[ -n $v ]] || return _p9k_prompt_segment "$0" "240" "$_p9k_color1" 'RUBY_ICON' 0 '' "${v//\%/%%}" } prompt_scalaenv () { if [[ -n $SCALAENV_VERSION ]] then (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)shell]} )) || return local v=$SCALAENV_VERSION else (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)local|global]} )) || return _p9k__ret= if [[ $SCALAENV_DIR != (|.) ]] then [[ $SCALAENV_DIR == /* ]] && local dir=$SCALAENV_DIR || local dir="$_p9k__cwd_a/$SCALAENV_DIR" dir=${dir:A} if [[ $dir != $_p9k__cwd_a ]] then while true do if _p9k_read_word $dir/.scala-version then (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)local]} )) || return break fi [[ $dir == (/|.) ]] && break dir=${dir:h} done fi fi if [[ -z $_p9k__ret ]] then _p9k_upglob .scala-version -. local -i idx=$? if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.scala-version then (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)local]} )) || return else _p9k__ret= fi fi if [[ -z $_p9k__ret ]] then (( _POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW )) || return (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)global]} )) || return _p9k_scalaenv_global_version fi local v=$_p9k__ret fi if (( !_POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW )) then _p9k_scalaenv_global_version [[ $v == $_p9k__ret ]] && return fi if (( !_POWERLEVEL9K_SCALAENV_SHOW_SYSTEM )) then [[ $v == system ]] && return fi _p9k_prompt_segment "$0" "red" "$_p9k_color1" 'SCALA_ICON' 0 '' "${v//\%/%%}" } prompt_ssh () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment "$0" "$_p9k_color1" "yellow" 'SSH_ICON' 0 '' '' (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_status () { if ! _p9k_cache_get $0 $_p9k__status $_p9k__pipestatus then (( _p9k__status )) && local state=ERROR || local state=OK if (( _POWERLEVEL9K_STATUS_EXTENDED_STATES )) then if (( _p9k__status )) then if (( $#_p9k__pipestatus > 1 )) then state+=_PIPE elif (( _p9k__status > 128 )) then state+=_SIGNAL fi elif [[ "$_p9k__pipestatus" == *[1-9]* ]] then state+=_PIPE fi fi _p9k__cache_val=(:) if (( _POWERLEVEL9K_STATUS_$state )) then if (( _POWERLEVEL9K_STATUS_SHOW_PIPESTATUS )) then local text=${(j:|:)${(@)_p9k__pipestatus:/(#b)(*)/$_p9k_exitcode2str[$match[1]+1]}} else local text=$_p9k_exitcode2str[_p9k__status+1] fi if (( _p9k__status )) then if (( !_POWERLEVEL9K_STATUS_CROSS && _POWERLEVEL9K_STATUS_VERBOSE )) then _p9k__cache_val=($0_$state red yellow1 CARRIAGE_RETURN_ICON 0 '' "$text") else _p9k__cache_val=($0_$state $_p9k_color1 red FAIL_ICON 0 '' '') fi elif (( _POWERLEVEL9K_STATUS_VERBOSE || _POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE )) then [[ $state == OK ]] && text='' _p9k__cache_val=($0_$state "$_p9k_color1" green OK_ICON 0 '' "$text") fi fi if (( $#_p9k__pipestatus < 3 )) then _p9k_cache_set "${(@)_p9k__cache_val}" fi fi _p9k_prompt_segment "${(@)_p9k__cache_val}" } prompt_swap () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment $0 yellow "$_p9k_color1" SWAP_ICON 1 '$_p9k__swap_used' '$_p9k__swap_used' (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_swift_version () { _p9k_cached_cmd 0 '' swift --version || return [[ $_p9k__ret == (#b)[^[:digit:]]#([[:digit:].]##)* ]] || return _p9k_prompt_segment "$0" "magenta" "white" 'SWIFT_ICON' 0 '' "${match[1]//\%/%%}" } prompt_symfony2_tests () { if [[ -d src && -d app && -f app/AppKernel.php ]] then local -a all=(src/**/*.php(N)) local -a code=(${(@)all##*Tests*}) (( $#code )) || return _p9k_build_test_stats "$0" "$#code" "$(($#all - $#code))" "SF2" 'TEST_ICON' fi } prompt_symfony2_version () { if [[ -r app/bootstrap.php.cache ]] then local v="${$(grep -F " VERSION " app/bootstrap.php.cache 2>/dev/null)//[![:digit:].]}" _p9k_prompt_segment "$0" "grey35" "$_p9k_color1" 'SYMFONY_ICON' 0 '' "${v//\%/%%}" fi } prompt_taskwarrior () { unset P9K_TASKWARRIOR_PENDING_COUNT P9K_TASKWARRIOR_OVERDUE_COUNT if ! _p9k_taskwarrior_check_data then _p9k_taskwarrior_data_files=() _p9k_taskwarrior_data_non_files=() _p9k_taskwarrior_data_sig= _p9k_taskwarrior_counters=() _p9k_taskwarrior_next_due=0 _p9k_taskwarrior_check_meta || _p9k_taskwarrior_init_meta || return _p9k_taskwarrior_init_data fi (( $#_p9k_taskwarrior_counters )) || return local text c=$_p9k_taskwarrior_counters[OVERDUE] if [[ -n $c ]] then typeset -g P9K_TASKWARRIOR_OVERDUE_COUNT=$c text+="!$c" fi c=$_p9k_taskwarrior_counters[PENDING] if [[ -n $c ]] then typeset -g P9K_TASKWARRIOR_PENDING_COUNT=$c [[ -n $text ]] && text+='/' text+=$c fi [[ -n $text ]] || return _p9k_prompt_segment $0 6 $_p9k_color1 TASKWARRIOR_ICON 0 '' $text } prompt_terraform () { local ws=$TF_WORKSPACE if [[ -z $TF_WORKSPACE ]] then _p9k_read_word ${${TF_DATA_DIR:-.terraform}:A}/environment && ws=$_p9k__ret fi [[ -z $ws || ( $ws == default && $_POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT == 0 ) ]] && return local pat class state for pat class in "${_POWERLEVEL9K_TERRAFORM_CLASSES[@]}" do if [[ $ws == ${~pat} ]] then [[ -n $class ]] && state=_${${(U)class}//İ/I} break fi done _p9k_prompt_segment "$0$state" $_p9k_color1 blue TERRAFORM_ICON 0 '' $ws } prompt_terraform_version () { local v cfg terraform=${commands[terraform]} _p9k_upglob .terraform-version -. || cfg=$_p9k__parent_dirs[$?]/.terraform-version if _p9k_cache_stat_get $0.$TFENV_TERRAFORM_VERSION $terraform $cfg then v=$_p9k__cache_val[1] else v=${${"$(terraform --version 2>/dev/null)"#Terraform v}%%$'\n'*} || v= _p9k_cache_stat_set "$v" fi [[ -n $v ]] || return _p9k_prompt_segment $0 $_p9k_color1 blue TERRAFORM_ICON 0 '' ${v//\%/%%} } prompt_time () { if (( _POWERLEVEL9K_EXPERIMENTAL_TIME_REALTIME )) then _p9k_prompt_segment "$0" "$_p9k_color2" "$_p9k_color1" "TIME_ICON" 0 '' "$_POWERLEVEL9K_TIME_FORMAT" else if [[ $_p9k__refresh_reason == precmd ]] then if [[ $+__p9k_instant_prompt_active == 1 && $__p9k_instant_prompt_time_format == $_POWERLEVEL9K_TIME_FORMAT ]] then _p9k__time=${__p9k_instant_prompt_time//\%/%%} else _p9k__time=${${(%)_POWERLEVEL9K_TIME_FORMAT}//\%/%%} fi fi if (( _POWERLEVEL9K_TIME_UPDATE_ON_COMMAND )) then _p9k_escape $_p9k__time local t=$_p9k__ret _p9k_escape $_POWERLEVEL9K_TIME_FORMAT _p9k_prompt_segment "$0" "$_p9k_color2" "$_p9k_color1" "TIME_ICON" 1 '' "\${_p9k__line_finished-$t}\${_p9k__line_finished+$_p9k__ret}" else _p9k_prompt_segment "$0" "$_p9k_color2" "$_p9k_color1" "TIME_ICON" 0 '' $_p9k__time fi fi } prompt_timewarrior () { local dir [[ -n ${dir::=$TIMEWARRIORDB} || -n ${dir::=~/.timewarrior}(#q-/N) ]] || dir=${XDG_DATA_HOME:-~/.local/share}/timewarrior dir+=/data local -a stat [[ $dir == $_p9k_timewarrior_dir ]] || _p9k_timewarrior_clear if [[ -n $_p9k_timewarrior_file_name ]] then zstat -A stat +mtime -- $dir $_p9k_timewarrior_file_name 2> /dev/null || stat=() if [[ $stat[1] == $_p9k_timewarrior_dir_mtime && $stat[2] == $_p9k_timewarrior_file_mtime ]] then if (( $+_p9k_timewarrior_tags )) then _p9k_prompt_segment $0 grey 255 TIMEWARRIOR_ICON 0 '' "${_p9k_timewarrior_tags//\%/%%}" fi return fi fi if [[ ! -d $dir ]] then _p9k_timewarrior_clear return fi _p9k_timewarrior_dir=$dir if [[ $stat[1] != $_p9k_timewarrior_dir_mtime ]] then local -a files=($dir/<->-<->.data(.N)) if (( ! $#files )) then if (( $#stat )) || zstat -A stat +mtime -- $dir 2> /dev/null then _p9k_timewarrior_dir_mtime=$stat[1] _p9k_timewarrior_file_mtime=$stat[1] _p9k_timewarrior_file_name=$dir unset _p9k_timewarrior_tags _p9k__state_dump_scheduled=1 else _p9k_timewarrior_clear fi return fi _p9k_timewarrior_file_name=${${(AO)files}[1]} fi if ! zstat -A stat +mtime -- $dir $_p9k_timewarrior_file_name 2> /dev/null then _p9k_timewarrior_clear return fi _p9k_timewarrior_dir_mtime=$stat[1] _p9k_timewarrior_file_mtime=$stat[2] { local tail=${${(Af)"$(<$_p9k_timewarrior_file_name)"}[-1]} } 2> /dev/null if [[ $tail == (#b)'inc '[^\ ]##(|\ #\#(*)) ]] then _p9k_timewarrior_tags=${${match[2]## #}%% #} _p9k_prompt_segment $0 grey 255 TIMEWARRIOR_ICON 0 '' "${_p9k_timewarrior_tags//\%/%%}" else unset _p9k_timewarrior_tags fi _p9k__state_dump_scheduled=1 } prompt_todo () { unset P9K_TODO_TOTAL_TASK_COUNT P9K_TODO_FILTERED_TASK_COUNT [[ -r $_p9k__todo_file && -x $_p9k__todo_command ]] || return if ! _p9k_cache_stat_get $0 $_p9k__todo_file then local count="$($_p9k__todo_command -p ls | command tail -1)" if [[ $count == (#b)'TODO: '([[:digit:]]##)' of '([[:digit:]]##)' '* ]] then _p9k_cache_stat_set 1 $match[1] $match[2] else _p9k_cache_stat_set 0 fi fi (( $_p9k__cache_val[1] )) || return typeset -gi P9K_TODO_FILTERED_TASK_COUNT=$_p9k__cache_val[2] typeset -gi P9K_TODO_TOTAL_TASK_COUNT=$_p9k__cache_val[3] if (( (P9K_TODO_TOTAL_TASK_COUNT || !_POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL) && (P9K_TODO_FILTERED_TASK_COUNT || !_POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED) )) then if (( P9K_TODO_TOTAL_TASK_COUNT == P9K_TODO_FILTERED_TASK_COUNT )) then local text=$P9K_TODO_TOTAL_TASK_COUNT else local text="$P9K_TODO_FILTERED_TASK_COUNT/$P9K_TODO_TOTAL_TASK_COUNT" fi _p9k_prompt_segment "$0" "grey50" "$_p9k_color1" 'TODO_ICON' 0 '' "$text" fi } prompt_toolbox () { _p9k_prompt_segment $0 $_p9k_color1 yellow TOOLBOX_ICON 0 '' $P9K_TOOLBOX_NAME } prompt_user () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment "${0}_ROOT" "${_p9k_color1}" yellow ROOT_ICON 0 '${${(%):-%#}:#\%}' "$_POWERLEVEL9K_USER_TEMPLATE" if [[ -n "$SUDO_COMMAND" ]] then _p9k_prompt_segment "${0}_SUDO" "${_p9k_color1}" yellow SUDO_ICON 0 '${${(%):-%#}:#\#}' "$_POWERLEVEL9K_USER_TEMPLATE" else _p9k_prompt_segment "${0}_DEFAULT" "${_p9k_color1}" yellow USER_ICON 0 '${${(%):-%#}:#\#}' "%n" fi (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_vcs () { if (( _p9k_vcs_index && $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )) then _p9k__prompt+='${(e)_p9k__vcs}' return fi local -a backends=($_POWERLEVEL9K_VCS_BACKENDS) if (( ${backends[(I)git]} && $+GITSTATUS_DAEMON_PID_POWERLEVEL9K )) && _p9k_vcs_gitstatus then _p9k_vcs_render && return backends=(${backends:#git}) fi if (( $#backends )) then VCS_WORKDIR_DIRTY=false VCS_WORKDIR_HALF_DIRTY=false local current_state="" zstyle ':vcs_info:*' enable ${backends} vcs_info local vcs_prompt="${vcs_info_msg_0_}" if [[ -n "$vcs_prompt" ]] then if [[ "$VCS_WORKDIR_DIRTY" == true ]] then current_state='MODIFIED' else if [[ "$VCS_WORKDIR_HALF_DIRTY" == true ]] then current_state='UNTRACKED' else current_state='CLEAN' fi fi _p9k_prompt_segment "${0}_${${(U)current_state}//İ/I}" "${__p9k_vcs_states[$current_state]}" "$_p9k_color1" "$vcs_visual_identifier" 0 '' "$vcs_prompt" fi fi } prompt_vi_mode () { local -i len=$#_p9k__prompt _p9k__has_upglob if (( __p9k_sh_glob )) then if (( $+_POWERLEVEL9K_VI_OVERWRITE_MODE_STRING )) then if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]] then _p9k_prompt_segment $0_INSERT "$_p9k_color1" blue '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*overwrite*}}' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING" fi _p9k_prompt_segment $0_OVERWRITE "$_p9k_color1" blue '' 0 '${${${${${${:-$_p9k__keymap.$_p9k__zle_state}:#vicmd.*}:#vivis.*}:#vivli.*}:#*.*insert*}}' "$_POWERLEVEL9K_VI_OVERWRITE_MODE_STRING" else if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]] then _p9k_prompt_segment $0_INSERT "$_p9k_color1" blue '' 0 '${${${${_p9k__keymap:#vicmd}:#vivis}:#vivli}}' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING" fi fi if (( $+_POWERLEVEL9K_VI_VISUAL_MODE_STRING )) then _p9k_prompt_segment $0_NORMAL "$_p9k_color1" white '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' "$_POWERLEVEL9K_VI_COMMAND_MODE_STRING" _p9k_prompt_segment $0_VISUAL "$_p9k_color1" white '' 0 '${$((! ${#${${${${:-$_p9k__keymap$_p9k__region_active}:#vicmd1}:#vivis?}:#vivli?}})):#0}' "$_POWERLEVEL9K_VI_VISUAL_MODE_STRING" else _p9k_prompt_segment $0_NORMAL "$_p9k_color1" white '' 0 '${$((! ${#${${${_p9k__keymap:#vicmd}:#vivis}:#vivli}})):#0}' "$_POWERLEVEL9K_VI_COMMAND_MODE_STRING" fi else if (( $+_POWERLEVEL9K_VI_OVERWRITE_MODE_STRING )) then if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]] then _p9k_prompt_segment $0_INSERT "$_p9k_color1" blue '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*overwrite*)}' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING" fi _p9k_prompt_segment $0_OVERWRITE "$_p9k_color1" blue '' 0 '${${:-$_p9k__keymap.$_p9k__zle_state}:#(vicmd.*|vivis.*|vivli.*|*.*insert*)}' "$_POWERLEVEL9K_VI_OVERWRITE_MODE_STRING" else if [[ -n $_POWERLEVEL9K_VI_INSERT_MODE_STRING ]] then _p9k_prompt_segment $0_INSERT "$_p9k_color1" blue '' 0 '${_p9k__keymap:#(vicmd|vivis|vivli)}' "$_POWERLEVEL9K_VI_INSERT_MODE_STRING" fi fi if (( $+_POWERLEVEL9K_VI_VISUAL_MODE_STRING )) then _p9k_prompt_segment $0_NORMAL "$_p9k_color1" white '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#vicmd0}' "$_POWERLEVEL9K_VI_COMMAND_MODE_STRING" _p9k_prompt_segment $0_VISUAL "$_p9k_color1" white '' 0 '${(M)${:-$_p9k__keymap$_p9k__region_active}:#(vicmd1|vivis?|vivli?)}' "$_POWERLEVEL9K_VI_VISUAL_MODE_STRING" else _p9k_prompt_segment $0_NORMAL "$_p9k_color1" white '' 0 '${(M)_p9k__keymap:#(vicmd|vivis|vivli)}' "$_POWERLEVEL9K_VI_COMMAND_MODE_STRING" fi fi (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_vim_shell () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment $0 green $_p9k_color1 VIM_ICON 0 '' '' (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_virtualenv () { local msg='' if (( _POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION )) && _p9k_python_version then msg="${_p9k__ret//\%/%%} " fi local cfg=$VIRTUAL_ENV/pyvenv.cfg if ! _p9k_cache_stat_get $0 $cfg then local -a reply _p9k_parse_virtualenv_cfg $cfg _p9k_cache_stat_set "${reply[@]}" fi if (( _p9k__cache_val[1] )) then local v=$_p9k__cache_val[2] else local v=${VIRTUAL_ENV:t} if [[ $VIRTUAL_ENV_PROMPT == '('?*') ' && $VIRTUAL_ENV_PROMPT != "($v) " ]] then v=$VIRTUAL_ENV_PROMPT[2,-3] elif [[ $v == $~_POWERLEVEL9K_VIRTUALENV_GENERIC_NAMES ]] then v=${VIRTUAL_ENV:h:t} fi fi msg+="$_POWERLEVEL9K_VIRTUALENV_LEFT_DELIMITER${v//\%/%%}$_POWERLEVEL9K_VIRTUALENV_RIGHT_DELIMITER" case $_POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV in (false) _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '${(M)${#P9K_PYENV_PYTHON_VERSION}:#0}' "$msg" ;; (if-different) _p9k_escape $v _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '${${:-'$_p9k__ret'}:#$_p9k__pyenv_version}' "$msg" ;; (*) _p9k_prompt_segment "$0" "blue" "$_p9k_color1" 'PYTHON_ICON' 0 '' "$msg" ;; esac } prompt_vpn_ip () { typeset -ga _p9k__vpn_ip_segments _p9k__vpn_ip_segments+=($_p9k__prompt_side $_p9k__line_index $_p9k__segment_index) local p='${(e)_p9k__vpn_ip_'$_p9k__prompt_side$_p9k__segment_index'}' _p9k__prompt+=$p typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$p } prompt_wifi () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment $0 green $_p9k_color1 WIFI_ICON 1 '$_p9k__wifi_on' '$P9K_WIFI_LAST_TX_RATE Mbps' (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_xplr () { local -i len=$#_p9k__prompt _p9k__has_upglob _p9k_prompt_segment $0 6 $_p9k_color1 XPLR_ICON 0 '' '' (( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1] } prompt_yazi () { _p9k_prompt_segment $0 $_p9k_color1 yellow YAZI_ICON 0 '' $YAZI_LEVEL } pyenv_prompt_info () { return 1 } rbenv () { unset -f rbenv eval "$(command rbenv init - zsh)" rbenv "$@" } rbenv_prompt_info () { return 1 } regexp-replace () { argv=("$1" "$2" "$3") 4=0 [[ -o re_match_pcre ]] && 4=1 emulate -L zsh local MATCH MBEGIN MEND local -a match mbegin mend if (( $4 )) then zmodload zsh/pcre || return 2 pcre_compile -- "$2" && pcre_study || return 2 4=0 6= local ZPCRE_OP while pcre_match -b -n $4 -- "${(P)1}" do 5=${(e)3} argv+=(${(s: :)ZPCRE_OP} "$5") 4=$((argv[-2] + (argv[-3] == argv[-2]))) done (($# > 6)) || return set +o multibyte 5= 6=1 for 2 3 4 in "$@[7,-1]" do 5+=${(P)1[$6,$2]}$4 6=$(($3 + 1)) done 5+=${(P)1[$6,-1]} else 4=${(P)1} while [[ -n $4 ]] do if [[ $4 =~ $2 ]] then 5+=${4[1,MBEGIN-1]}${(e)3} if ((MEND < MBEGIN)) then ((MEND++)) 5+=${4[1]} fi 4=${4[MEND+1,-1]} 6=1 else break fi done [[ -n $6 ]] || return 5+=$4 fi eval $1=\$5 } remote_console () { /usr/bin/env ssh $1 "( cd $2 && ruby script/console production )" } ruby_prompt_info () { echo "$(rvm_prompt_info || rbenv_prompt_info || chruby_prompt_info)" } rvm_prompt_info () { [ -f $HOME/.rvm/bin/rvm-prompt ] || return 1 local rvm_prompt rvm_prompt=$($HOME/.rvm/bin/rvm-prompt ${=ZSH_THEME_RVM_PROMPT_OPTIONS} 2>/dev/null) [[ -z "${rvm_prompt}" ]] && return 1 echo "${ZSH_THEME_RUBY_PROMPT_PREFIX}${rvm_prompt:gs/%/%%}${ZSH_THEME_RUBY_PROMPT_SUFFIX}" } se () { choice="$(find ~/.local/bin -mindepth 1 -printf '%P\n' | fzf)" [ -f "$HOME/.local/bin/$choice" ] && $EDITOR "$HOME/.local/bin/$choice" } spectrum_bls () { setopt localoptions nopromptsubst local ZSH_SPECTRUM_TEXT=${ZSH_SPECTRUM_TEXT:-Arma virumque cano Troiae qui primus ab oris} for code in {000..255} do print -P -- "$code: ${BG[$code]}${ZSH_SPECTRUM_TEXT}%{$reset_color%}" done } spectrum_ls () { setopt localoptions nopromptsubst local ZSH_SPECTRUM_TEXT=${ZSH_SPECTRUM_TEXT:-Arma virumque cano Troiae qui primus ab oris} for code in {000..255} do print -P -- "$code: ${FG[$code]}${ZSH_SPECTRUM_TEXT}%{$reset_color%}" done } svn_prompt_info () { return 1 } take () { if [[ $1 =~ ^(https?|ftp).*\.(tar\.(gz|bz2|xz)|tgz)$ ]] then takeurl "$1" elif [[ $1 =~ ^(https?|ftp).*\.(zip)$ ]] then takezip "$1" elif [[ $1 =~ ^([A-Za-z0-9]\+@|https?|git|ssh|ftps?|rsync).*\.git/?$ ]] then takegit "$1" else takedir "$@" fi } takedir () { mkdir -p $@ && cd ${@:$#} } takegit () { git clone "$1" cd "$(basename ${1%%.git})" } takeurl () { local data thedir data="$(mktemp)" curl -L "$1" > "$data" tar xf "$data" thedir="$(tar tf "$data" | head -n 1)" rm "$data" cd "$thedir" } takezip () { local data thedir data="$(mktemp)" curl -L "$1" > "$data" unzip "$data" -d "./" thedir="$(unzip -l "$data" | awk 'NR==4 {print $4}' | sed 's/\/.*//')" rm "$data" cd "$thedir" } tf_prompt_info () { [[ "$PWD" != ~ ]] || return [[ -d "${TF_DATA_DIR:-.terraform}" && -r "${TF_DATA_DIR:-.terraform}/environment" ]] || return local workspace="$(< "${TF_DATA_DIR:-.terraform}/environment")" echo "${ZSH_THEME_TF_PROMPT_PREFIX-[}${workspace:gs/%/%%}${ZSH_THEME_TF_PROMPT_SUFFIX-]}" } tf_version_prompt_info () { local terraform_version terraform_version=$(terraform --version | head -n 1 | cut -d ' ' -f 2) echo "${ZSH_THEME_TF_VERSION_PROMPT_PREFIX-[}${terraform_version:gs/%/%%}${ZSH_THEME_TF_VERSION_PROMPT_SUFFIX-]}" } title () { setopt localoptions nopromptsubst [[ -n "${INSIDE_EMACS:-}" && "$INSIDE_EMACS" != vterm ]] && return : ${2=$1} case "$TERM" in (cygwin | xterm* | putty* | rxvt* | konsole* | ansi | mlterm* | alacritty* | st* | foot* | contour* | wezterm*) print -Pn "\e]2;${2:q}\a" print -Pn "\e]1;${1:q}\a" ;; (screen* | tmux*) print -Pn "\ek${1:q}\e\\" ;; (*) if [[ "$TERM_PROGRAM" == "iTerm.app" ]] then print -Pn "\e]2;${2:q}\a" print -Pn "\e]1;${1:q}\a" else if (( ${+terminfo[fsl]} && ${+terminfo[tsl]} )) then print -Pn "${terminfo[tsl]}$1${terminfo[fsl]}" fi fi ;; esac } try_alias_value () { alias_value "$1" || echo "$1" } uninstall_oh_my_zsh () { command env ZSH="$ZSH" sh "$ZSH/tools/uninstall.sh" } up-line-or-beginning-search () { # undefined builtin autoload -XU } upgrade_oh_my_zsh () { echo "${fg[yellow]}Note: \`$0\` is deprecated. Use \`omz update\` instead.$reset_color" >&2 omz update } url-quote-magic () { # undefined builtin autoload -XUz } vi_mode_prompt_info () { return 1 } virtualenv_prompt_info () { return 1 } work_in_progress () { command git -c log.showSignature=false log -n 1 2> /dev/null | grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn,.idea,.tox,.venv,venv} -q -- "--wip--" && echo "WIP!!" } zle-keymap-select () { case $KEYMAP in (vicmd) echo -ne '\e[1 q' ;; (viins | main) echo -ne '\e[5 q' ;; esac } zle-line-finish () { echoti rmkx } zle-line-init () { echoti smkx } zrecompile () { setopt localoptions extendedglob noshwordsplit noksharrays local opt check quiet zwc files re file pre ret map tmp mesg pats tmp=() while getopts ":tqp" opt do case $opt in (t) check=yes ;; (q) quiet=yes ;; (p) pats=yes ;; (*) if [[ -n $pats ]] then tmp=($tmp $OPTARG) else print -u2 zrecompile: bad option: -$OPTARG return 1 fi ;; esac done shift OPTIND-${#tmp}-1 if [[ -n $check ]] then ret=1 else ret=0 fi if [[ -n $pats ]] then local end num while (( $# )) do end=$argv[(i)--] if [[ end -le $# ]] then files=($argv[1,end-1]) shift end else files=($argv) argv=() fi tmp=() map=() OPTIND=1 while getopts :MR opt $files do case $opt in ([MR]) map=(-$opt) ;; (*) tmp=($tmp $files[OPTIND]) ;; esac done shift OPTIND-1 files (( $#files )) || continue files=($files[1] ${files[2,-1]:#*(.zwc|~)}) (( $#files )) || continue zwc=${files[1]%.zwc}.zwc shift 1 files (( $#files )) || files=(${zwc%.zwc}) if [[ -f $zwc ]] then num=$(zcompile -t $zwc | wc -l) if [[ num-1 -ne $#files ]] then re=yes else re= for file in $files do if [[ $file -nt $zwc ]] then re=yes break fi done fi else re=yes fi if [[ -n $re ]] then if [[ -n $check ]] then [[ -z $quiet ]] && print $zwc needs re-compilation ret=0 else [[ -z $quiet ]] && print -n "re-compiling ${zwc}: " if [[ -z "$quiet" ]] && { [[ ! -f $zwc ]] || mv -f $zwc ${zwc}.old } && zcompile $map $tmp $zwc $files then print succeeded elif ! { { [[ ! -f $zwc ]] || mv -f $zwc ${zwc}.old } && zcompile $map $tmp $zwc $files 2> /dev/null } then [[ -z $quiet ]] && print "re-compiling ${zwc}: failed" ret=1 fi fi fi done return ret fi if (( $# )) then argv=(${^argv}/*.zwc(ND) ${^argv}.zwc(ND) ${(M)argv:#*.zwc}) else argv=(${^fpath}/*.zwc(ND) ${^fpath}.zwc(ND) ${(M)fpath:#*.zwc}) fi argv=(${^argv%.zwc}.zwc) for zwc do files=(${(f)"$(zcompile -t $zwc)"}) if [[ $files[1] = *\(mapped\)* ]] then map=-M mesg='succeeded (old saved)' else map=-R mesg=succeeded fi if [[ $zwc = */* ]] then pre=${zwc%/*}/ else pre= fi if [[ $files[1] != *$ZSH_VERSION ]] then re=yes else re= fi files=(${pre}${^files[2,-1]:#/*} ${(M)files[2,-1]:#/*}) [[ -z $re ]] && for file in $files do if [[ $file -nt $zwc ]] then re=yes break fi done if [[ -n $re ]] then if [[ -n $check ]] then [[ -z $quiet ]] && print $zwc needs re-compilation ret=0 else [[ -z $quiet ]] && print -n "re-compiling ${zwc}: " tmp=(${^files}(N)) if [[ $#tmp -ne $#files ]] then [[ -z $quiet ]] && print 'failed (missing files)' ret=1 else if [[ -z "$quiet" ]] && mv -f $zwc ${zwc}.old && zcompile $map $zwc $files then print $mesg elif ! { mv -f $zwc ${zwc}.old && zcompile $map $zwc $files 2> /dev/null } then [[ -z $quiet ]] && print "re-compiling ${zwc}: failed" ret=1 fi fi fi fi done return ret } zsh_stats () { fc -l 1 | awk '{ CMD[$2]++; count++; } END { for (a in CMD) print CMD[a] " " CMD[a]*100/count "% " a }' | grep -v "./" | sort -nr | head -n 20 | column -c3 -s " " -t | nl } # Shell Options setopt alwaystoend setopt autocd setopt autopushd setopt completeinword setopt extendedhistory setopt noflowcontrol setopt nohashdirs setopt histexpiredupsfirst setopt histfindnodups setopt histignoredups setopt histignorespace setopt histreduceblanks setopt histverify setopt incappendhistory setopt interactivecomments setopt login setopt longlistjobs setopt promptsubst setopt pushdignoredups setopt pushdminus setopt sharehistory # Aliases alias -- -='cd -' alias -- ...=../.. alias -- ....=../../.. alias -- .....=../../../.. alias -- ......=../../../../.. alias -- 1='cd -1' alias -- 2='cd -2' alias -- 3='cd -3' alias -- 4='cd -4' alias -- 5='cd -5' alias -- 6='cd -6' alias -- 7='cd -7' alias -- 8='cd -8' alias -- 9='cd -9' alias -- D='cd /home/josie/Downloads && ls -A' alias -- RED='RAILS_ENV=development' alias -- REP='RAILS_ENV=production' alias -- RET='RAILS_ENV=test' alias -- YT=youtube-viewer alias -- _='sudo ' alias -- bc='bc -ql' alias -- bd='nvim /home/josie/.config/shell/bm-dirs' alias -- bf='nvim /home/josie/.config/shell/bm-files' alias -- cac='cd /home/josie/.cache && ls -A' alias -- ccat='highlight --out-format=ansi' alias -- cf='cd /home/josie/.config && ls -A' alias -- cfL='nvim /home/josie/.config/lf/scope' alias -- cfX='nvim /home/josie/.config/sxiv/exec/key-handler' alias -- cfa='nvim /home/josie/.config/shell/aliasrc' alias -- cfb='nvim ~/.local/src/dwmblocks/config.h' alias -- cfl='nvim /home/josie/.config/lf/lfrc' alias -- cfm='nvim /home/josie/.config/mutt/muttrc' alias -- cfmb='nvim /home/josie/.config/ncmpcpp/bindings' alias -- cfmc='nvim /home/josie/.config/ncmpcpp/config' alias -- cfn='nvim /home/josie/.config/newsboat/config' alias -- cfp='nvim /home/josie/.config/shell/profile' alias -- cfu='nvim /home/josie/.config/newsboat/urls' alias -- cfv='nvim /home/josie/.config/nvim/init.vim' alias -- cfx='nvim /home/josie/.config/x11/xresources' alias -- cfz='nvim /home/josie/.config/zsh/.zshrc' alias -- cp='cp -iv' alias -- d='cd /home/josie/Documents && ls -A' alias -- d64=decode64 alias -- devlog='tail -f log/development.log' alias -- diff='diff --color=auto' alias -- dt='cd /home/josie/.local/share && ls -A' alias -- e=nvim alias -- e64=encode64 alias -- ef64=encodefile64 alias -- egrep='grep -E' alias -- ffmpeg='ffmpeg -hide_banner' alias -- fgrep='grep -F' alias -- fmns='foreman start' alias -- fsh-alias=fast-theme alias -- g=git alias -- ga='git add' alias -- gaa='git add --all' alias -- gam='git am' alias -- gama='git am --abort' alias -- gamc='git am --continue' alias -- gams='git am --skip' alias -- gamscp='git am --show-current-patch' alias -- gap='git apply' alias -- gapa='git add --patch' alias -- gapt='git apply --3way' alias -- gau='git add --update' alias -- gav='git add --verbose' alias -- gb='git branch' alias -- gbD='git branch --delete --force' alias -- gba='git branch --all' alias -- gbd='git branch --delete' alias -- gbg='LANG=C git branch -vv | grep ": gone\]"' alias -- gbgD='LANG=C git branch --no-color -vv | grep ": gone\]" | cut -c 3- | awk '\''{print $1}'\'' | xargs git branch -D' alias -- gbgd='LANG=C git branch --no-color -vv | grep ": gone\]" | cut -c 3- | awk '\''{print $1}'\'' | xargs git branch -d' alias -- gbl='git blame -w' alias -- gbm='git branch --move' alias -- gbnm='git branch --no-merged' alias -- gbr='git branch --remote' alias -- gbs='git bisect' alias -- gbsb='git bisect bad' alias -- gbsg='git bisect good' alias -- gbsn='git bisect new' alias -- gbso='git bisect old' alias -- gbsr='git bisect reset' alias -- gbss='git bisect start' alias -- gc='git commit --verbose' alias -- gc!='git commit --verbose --amend' alias -- gcB='git checkout -B' alias -- gca='git commit --verbose --all' alias -- gca!='git commit --verbose --all --amend' alias -- gcam='git commit --all --message' alias -- gcan!='git commit --verbose --all --no-edit --amend' alias -- gcann!='git commit --verbose --all --date=now --no-edit --amend' alias -- gcans!='git commit --verbose --all --signoff --no-edit --amend' alias -- gcas='git commit --all --signoff' alias -- gcasm='git commit --all --signoff --message' alias -- gcb='git checkout -b' alias -- gcd='git checkout $(git_develop_branch)' alias -- gcf='git config --list' alias -- gcfu='git commit --fixup' alias -- gcl='git clone --recurse-submodules' alias -- gclean='git clean --interactive -d' alias -- gclf='git clone --recursive --shallow-submodules --filter=blob:none --also-filter-submodules' alias -- gcm='git checkout $(git_main_branch)' alias -- gcmsg='git commit --message' alias -- gcn='git commit --verbose --no-edit' alias -- gcn!='git commit --verbose --no-edit --amend' alias -- gco='git checkout' alias -- gcor='git checkout --recurse-submodules' alias -- gcount='git shortlog --summary --numbered' alias -- gcp='git cherry-pick' alias -- gcpa='git cherry-pick --abort' alias -- gcpc='git cherry-pick --continue' alias -- gcs='git commit --gpg-sign' alias -- gcsm='git commit --signoff --message' alias -- gcss='git commit --gpg-sign --signoff' alias -- gcssm='git commit --gpg-sign --signoff --message' alias -- gd='git diff' alias -- gdca='git diff --cached' alias -- gdct='git describe --tags $(git rev-list --tags --max-count=1)' alias -- gdcw='git diff --cached --word-diff' alias -- gds='git diff --staged' alias -- gdt='git diff-tree --no-commit-id --name-only -r' alias -- gdup='git diff @{upstream}' alias -- gdw='git diff --word-diff' alias -- geca='gem cert --add' alias -- gecb='gem cert --build' alias -- geclup='gem cleanup -n' alias -- gecr='gem cert --remove' alias -- gegi='gem generate_index' alias -- geh='gem help' alias -- gei='gem info' alias -- geiall='gem info --all' alias -- gein='gem install' alias -- gel='gem lock' alias -- geli='gem list' alias -- geo='gem open' alias -- geoe='gem open -e' alias -- geun='gem uninstall' alias -- gf='git fetch' alias -- gfa='git fetch --all --tags --prune --jobs=10' alias -- gfg='git ls-files | grep' alias -- gfo='git fetch origin' alias -- gg='git gui citool' alias -- gga='git gui citool --amend' alias -- ggpull='git pull origin "$(git_current_branch)"' alias -- ggpur=ggu alias -- ggpush='git push origin "$(git_current_branch)"' alias -- ggsup='git branch --set-upstream-to=origin/$(git_current_branch)' alias -- ghh='git help' alias -- gignore='git update-index --assume-unchanged' alias -- gignored='git ls-files -v | grep "^[[:lower:]]"' alias -- git-svn-dcommit-push='git svn dcommit && git push github $(git_main_branch):svntrunk' alias -- gk='\gitk --all --branches &!' alias -- gke='\gitk --all $(git log --walk-reflogs --pretty=%h) &!' alias -- gl='git pull' alias -- glg='git log --stat' alias -- glgg='git log --graph' alias -- glgga='git log --graph --decorate --all' alias -- glgm='git log --graph --max-count=10' alias -- glgp='git log --stat --patch' alias -- glo='git log --oneline --decorate' alias -- glod='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset"' alias -- glods='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset" --date=short' alias -- glog='git log --oneline --decorate --graph' alias -- gloga='git log --oneline --decorate --graph --all' alias -- glol='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset"' alias -- glola='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset" --all' alias -- glols='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset" --stat' alias -- glp=_git_log_prettily alias -- gluc='git pull upstream $(git_current_branch)' alias -- glum='git pull upstream $(git_main_branch)' alias -- gm='git merge' alias -- gma='git merge --abort' alias -- gmc='git merge --continue' alias -- gmff='git merge --ff-only' alias -- gmom='git merge origin/$(git_main_branch)' alias -- gms='git merge --squash' alias -- gmtl='git mergetool --no-prompt' alias -- gmtlvim='git mergetool --no-prompt --tool=vimdiff' alias -- gmum='git merge upstream/$(git_main_branch)' alias -- gp='git push' alias -- gpd='git push --dry-run' alias -- gpf='git push --force-with-lease --force-if-includes' alias -- gpf!='git push --force' alias -- gpoat='git push origin --all && git push origin --tags' alias -- gpod='git push origin --delete' alias -- gpr='git pull --rebase' alias -- gpra='git pull --rebase --autostash' alias -- gprav='git pull --rebase --autostash -v' alias -- gpristine='git reset --hard && git clean --force -dfx' alias -- gprom='git pull --rebase origin $(git_main_branch)' alias -- gpromi='git pull --rebase=interactive origin $(git_main_branch)' alias -- gprum='git pull --rebase upstream $(git_main_branch)' alias -- gprumi='git pull --rebase=interactive upstream $(git_main_branch)' alias -- gprv='git pull --rebase -v' alias -- gpsup='git push --set-upstream origin $(git_current_branch)' alias -- gpsupf='git push --set-upstream origin $(git_current_branch) --force-with-lease --force-if-includes' alias -- gpu='git push upstream' alias -- gpv='git push --verbose' alias -- gr='git remote' alias -- gra='git remote add' alias -- grb='git rebase' alias -- grba='git rebase --abort' alias -- grbc='git rebase --continue' alias -- grbd='git rebase $(git_develop_branch)' alias -- grbi='git rebase --interactive' alias -- grbm='git rebase $(git_main_branch)' alias -- grbo='git rebase --onto' alias -- grbom='git rebase origin/$(git_main_branch)' alias -- grbs='git rebase --skip' alias -- grbum='git rebase upstream/$(git_main_branch)' alias -- grep='grep --color=auto' alias -- grev='git revert' alias -- greva='git revert --abort' alias -- grevc='git revert --continue' alias -- grf='git reflog' alias -- grh='git reset' alias -- grhh='git reset --hard' alias -- grhk='git reset --keep' alias -- grhs='git reset --soft' alias -- grm='git rm' alias -- grmc='git rm --cached' alias -- grmv='git remote rename' alias -- groh='git reset origin/$(git_current_branch) --hard' alias -- grrm='git remote remove' alias -- grs='git restore' alias -- grset='git remote set-url' alias -- grss='git restore --source' alias -- grst='git restore --staged' alias -- grt='cd "$(git rev-parse --show-toplevel || echo .)"' alias -- gru='git reset --' alias -- grup='git remote update' alias -- grv='git remote --verbose' alias -- gsb='git status --short --branch' alias -- gsd='git svn dcommit' alias -- gsh='git show' alias -- gsi='git submodule init' alias -- gsps='git show --pretty=short --show-signature' alias -- gsr='git svn rebase' alias -- gss='git status --short' alias -- gst='git status' alias -- gsta='git stash push' alias -- gstaa='git stash apply' alias -- gstall='git stash --all' alias -- gstc='git stash clear' alias -- gstd='git stash drop' alias -- gstl='git stash list' alias -- gstp='git stash pop' alias -- gsts='git stash show --patch' alias -- gstu='gsta --include-untracked' alias -- gsu='git submodule update' alias -- gsw='git switch' alias -- gswc='git switch --create' alias -- gswd='git switch $(git_develop_branch)' alias -- gswm='git switch $(git_main_branch)' alias -- gta='git tag --annotate' alias -- gtl='gtl(){ git tag --sort=-v:refname -n --list "${1}*" }; noglob gtl' alias -- gts='git tag --sign' alias -- gtv='git tag | sort -V' alias -- gunignore='git update-index --no-assume-unchanged' alias -- gunwip='git rev-list --max-count=1 --format="%s" HEAD | grep -q "\--wip--" && git reset HEAD~1' alias -- gup=$'\n print -Pu2 "%F{yellow}[oh-my-zsh] \'%F{red}gup%F{yellow}\' is a deprecated alias, using \'%F{green}gpr%F{yellow}\' instead.%f"\n gpr' alias -- gupa=$'\n print -Pu2 "%F{yellow}[oh-my-zsh] \'%F{red}gupa%F{yellow}\' is a deprecated alias, using \'%F{green}gpra%F{yellow}\' instead.%f"\n gpra' alias -- gupav=$'\n print -Pu2 "%F{yellow}[oh-my-zsh] \'%F{red}gupav%F{yellow}\' is a deprecated alias, using \'%F{green}gprav%F{yellow}\' instead.%f"\n gprav' alias -- gupom=$'\n print -Pu2 "%F{yellow}[oh-my-zsh] \'%F{red}gupom%F{yellow}\' is a deprecated alias, using \'%F{green}gprom%F{yellow}\' instead.%f"\n gprom' alias -- gupomi=$'\n print -Pu2 "%F{yellow}[oh-my-zsh] \'%F{red}gupomi%F{yellow}\' is a deprecated alias, using \'%F{green}gpromi%F{yellow}\' instead.%f"\n gpromi' alias -- gupv=$'\n print -Pu2 "%F{yellow}[oh-my-zsh] \'%F{red}gupv%F{yellow}\' is a deprecated alias, using \'%F{green}gprv%F{yellow}\' instead.%f"\n gprv' alias -- gwch='git whatchanged -p --abbrev-commit --pretty=medium' alias -- gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign --message "--wip-- [skip ci]"' alias -- gwipe='git reset --hard && git clean --force -df' alias -- gwt='git worktree' alias -- gwta='git worktree add' alias -- gwtls='git worktree list' alias -- gwtmv='git worktree move' alias -- gwtrm='git worktree remove' alias -- h='cd /home/josie && ls -A' alias -- history=omz_history alias -- ip='ip -color=auto' alias -- k=kubectl alias -- ka=killall alias -- kaf='kubectl apply -f' alias -- kca='_kca(){ kubectl "$@" --all-namespaces; unset -f _kca; }; _kca' alias -- kccc='kubectl config current-context' alias -- kcdc='kubectl config delete-context' alias -- kcgc='kubectl config get-contexts' alias -- kcn='kubectl config set-context --current --namespace' alias -- kcp='kubectl cp' alias -- kcsc='kubectl config set-context' alias -- kcuc='kubectl config use-context' alias -- kdcj='kubectl describe cronjob' alias -- kdcm='kubectl describe configmap' alias -- kdd='kubectl describe deployment' alias -- kdds='kubectl describe daemonset' alias -- kdel='kubectl delete' alias -- kdelcj='kubectl delete cronjob' alias -- kdelcm='kubectl delete configmap' alias -- kdeld='kubectl delete deployment' alias -- kdelds='kubectl delete daemonset' alias -- kdelf='kubectl delete -f' alias -- kdeli='kubectl delete ingress' alias -- kdelj='kubectl delete job' alias -- kdelno='kubectl delete node' alias -- kdelns='kubectl delete namespace' alias -- kdelp='kubectl delete pods' alias -- kdelpvc='kubectl delete pvc' alias -- kdels='kubectl delete svc' alias -- kdelsa='kubectl delete sa' alias -- kdelsec='kubectl delete secret' alias -- kdelss='kubectl delete statefulset' alias -- kdi='kubectl describe ingress' alias -- kdj='kubectl describe job' alias -- kdno='kubectl describe node' alias -- kdns='kubectl describe namespace' alias -- kdp='kubectl describe pods' alias -- kdpvc='kubectl describe pvc' alias -- kdrs='kubectl describe replicaset' alias -- kds='kubectl describe svc' alias -- kdsa='kubectl describe sa' alias -- kdsec='kubectl describe secret' alias -- kdss='kubectl describe statefulset' alias -- kecj='kubectl edit cronjob' alias -- kecm='kubectl edit configmap' alias -- ked='kubectl edit deployment' alias -- keds='kubectl edit daemonset' alias -- kei='kubectl edit ingress' alias -- kej='kubectl edit job' alias -- keno='kubectl edit node' alias -- kens='kubectl edit namespace' alias -- kep='kubectl edit pods' alias -- kepvc='kubectl edit pvc' alias -- kers='kubectl edit replicaset' alias -- kes='kubectl edit svc' alias -- kess='kubectl edit statefulset' alias -- keti='kubectl exec -t -i' alias -- kga='kubectl get all' alias -- kgaa='kubectl get all --all-namespaces' alias -- kgcj='kubectl get cronjob' alias -- kgcm='kubectl get configmaps' alias -- kgcma='kubectl get configmaps --all-namespaces' alias -- kgd='kubectl get deployment' alias -- kgda='kubectl get deployment --all-namespaces' alias -- kgds='kubectl get daemonset' alias -- kgdsa='kubectl get daemonset --all-namespaces' alias -- kgdsw='kgds --watch' alias -- kgdw='kgd --watch' alias -- kgdwide='kgd -o wide' alias -- kge='kubectl get events --sort-by=".lastTimestamp"' alias -- kgew='kubectl get events --sort-by=".lastTimestamp" --watch' alias -- kgi='kubectl get ingress' alias -- kgia='kubectl get ingress --all-namespaces' alias -- kgj='kubectl get job' alias -- kgno='kubectl get nodes' alias -- kgnosl='kubectl get nodes --show-labels' alias -- kgns='kubectl get namespaces' alias -- kgp='kubectl get pods' alias -- kgpa='kubectl get pods --all-namespaces' alias -- kgpall='kubectl get pods --all-namespaces -o wide' alias -- kgpl='kgp -l' alias -- kgpn='kgp -n' alias -- kgpsl='kubectl get pods --show-labels' alias -- kgpvc='kubectl get pvc' alias -- kgpvca='kubectl get pvc --all-namespaces' alias -- kgpvcw='kgpvc --watch' alias -- kgpw='kgp --watch' alias -- kgpwide='kgp -o wide' alias -- kgrs='kubectl get replicaset' alias -- kgs='kubectl get svc' alias -- kgsa='kubectl get svc --all-namespaces' alias -- kgsec='kubectl get secret' alias -- kgseca='kubectl get secret --all-namespaces' alias -- kgss='kubectl get statefulset' alias -- kgssa='kubectl get statefulset --all-namespaces' alias -- kgssw='kgss --watch' alias -- kgsswide='kgss -o wide' alias -- kgsw='kgs --watch' alias -- kgswide='kgs -o wide' alias -- kl='kubectl logs' alias -- kl1h='kubectl logs --since 1h' alias -- kl1m='kubectl logs --since 1m' alias -- kl1s='kubectl logs --since 1s' alias -- klf='kubectl logs -f' alias -- klf1h='kubectl logs --since 1h -f' alias -- klf1m='kubectl logs --since 1m -f' alias -- klf1s='kubectl logs --since 1s -f' alias -- kpf='kubectl port-forward' alias -- krh='kubectl rollout history' alias -- krsd='kubectl rollout status deployment' alias -- krsss='kubectl rollout status statefulset' alias -- kru='kubectl rollout undo' alias -- ksd='kubectl scale deployment' alias -- ksss='kubectl scale statefulset' alias -- l='ls -lah' alias -- la='ls -lAh' alias -- lf=lfub alias -- ll='ls -lh' alias -- ls='ls -hN --color=auto --group-directories-first' alias -- lsa='ls -lah' alias -- m='cd /home/josie/Music && ls -A' alias -- magit='nvim -c MagitOnly' alias -- md='mkdir -p' alias -- mkd='mkdir -pv' alias -- mn='cd /mnt && ls -A' alias -- mount='sudo mount' alias -- mv='mv -iv' alias -- p=pacman alias -- pacman='sudo pacman' alias -- poweroff='sudo poweroff' alias -- pp='cd /home/josie/Pictures && ls -A' alias -- prodlog='tail -f log/production.log' alias -- rails=_rails_command alias -- rake=_rake_command alias -- rb=ruby alias -- rc='rails console' alias -- rcs='rails console --sandbox' alias -- rd='rails destroy' alias -- rdb='rails dbconsole' alias -- rdc='rails db:create' alias -- rdd='rails db:drop' alias -- rdm='rails db:migrate' alias -- rdmd='rails db:migrate:down' alias -- rdmr='rails db:migrate:redo' alias -- rdms='rails db:migrate:status' alias -- rdmtc='rails db:migrate db:test:clone' alias -- rdmu='rails db:migrate:up' alias -- rdr='rails db:rollback' alias -- rdrs='rails db:reset' alias -- rds='rails db:seed' alias -- rdsl='rails db:schema:load' alias -- rdtc='rails db:test:clone' alias -- rdtp='rails db:test:prepare' alias -- reboot='sudo reboot' alias -- ref='shortcuts >/dev/null; source /home/josie/.config/shell/shortcutrc ; source /home/josie/.config/shell/zshnameddirrc' alias -- rfind='find . -name "*.rb" | xargs grep -n' alias -- rgen='rails generate' alias -- rgm='rails generate migration' alias -- rkdc='rake db:create' alias -- rkdd='rake db:drop' alias -- rkdm='rake db:migrate' alias -- rkdmd='rake db:migrate:down' alias -- rkdmr='rake db:migrate:redo' alias -- rkdms='rake db:migrate:status' alias -- rkdmtc='rake db:migrate db:test:clone' alias -- rkdmu='rake db:migrate:up' alias -- rkdr='rake db:rollback' alias -- rkdrs='rake db:reset' alias -- rkds='rake db:seed' alias -- rkdsl='rake db:schema:load' alias -- rkdtc='rake db:test:clone' alias -- rkdtp='rake db:test:prepare' alias -- rklc='rake log:clear' alias -- rkmd='rake middleware' alias -- rkn='rake notes' alias -- rksts='rake stats' alias -- rkt='rake test' alias -- rlc='rails log:clear' alias -- rm='rm -vI' alias -- rmd='rails middleware' alias -- rn='rails notes' alias -- rp='rails plugin' alias -- rr='cd /home/josie/.local/src && ls -A' alias -- rrc='rails routes --controller' alias -- rre='rails routes --expanded' alias -- rrg='rails routes --grep' alias -- rru='rails routes --unused' alias -- rrun='ruby -e' alias -- rs='rails server' alias -- rsb='rails server --bind' alias -- rsd='rails server --debugger' alias -- rserver='ruby -run -e httpd . -p 8080' alias -- rsp='rails server --port' alias -- rsts='rails stats' alias -- rsync='rsync -vrPlu' alias -- rt='rails test' alias -- rta='rails test:all' alias -- ru='rails runner' alias -- run-help=man alias -- sc='cd /home/josie/.local/bin && ls -A' alias -- sd='ruby script/server --debugger' alias -- sdn='shutdown -h now' alias -- sg='ruby script/generate' alias -- sgem='sudo gem' alias -- shutdown='sudo shutdown' alias -- sp='ruby script/plugin' alias -- sr='ruby script/runner' alias -- src='cd /home/josie/.local/src && ls -A' alias -- ssp='ruby script/spec' alias -- sstat='thin --stats "/thin/stats" start' alias -- startx='startx /home/josie/.config/x11/xinitrc' alias -- su='sudo su' alias -- sv='sudo sv' alias -- testlog='tail -f log/test.log' alias -- tf=terraform alias -- tfa='terraform apply' alias -- tfaa='terraform apply -auto-approve' alias -- tfc='terraform console' alias -- tfd='terraform destroy' alias -- tfd!='terraform destroy -auto-approve' alias -- tff='terraform fmt' alias -- tffr='terraform fmt -recursive' alias -- tfi='terraform init' alias -- tfir='terraform init -reconfigure' alias -- tfiu='terraform init -upgrade' alias -- tfiur='terraform init -upgrade -reconfigure' alias -- tfo='terraform output' alias -- tfp='terraform plan' alias -- tfs='terraform state' alias -- tfsh='terraform show' alias -- tft='terraform test' alias -- tfv='terraform validate' alias -- trem=transmission-remote alias -- umount='sudo umount' alias -- updatedb='sudo updatedb' alias -- v=nvim alias -- vim=nvim alias -- vimdiff='nvim -d' alias -- vv='cd /home/josie/Videos && ls -A' alias -- weath='less -S /home/josie/.cache/weatherreport' alias -- which-command=whence alias -- xi='sudo xbps-install' alias -- xq=xbps-query alias -- xr='sudo xbps-remove -R' alias -- yt='yt-dlp --embed-metadata -i' alias -- yta='yt -x -f bestaudio/best' alias -- ytt='yt --skip-download --write-thumbnail' alias -- z=zathura # Check for rg availability if ! command -v rg >/dev/null 2>&1; then alias rg='/home/josie/.config/nvm/versions/node/v20.19.1/lib/node_modules/\@anthropic-ai/claude-code/vendor/ripgrep/x64-linux/rg' fi export PATH=/home/josie/anaconda3/bin\:/home/josie/.config/nvm/versions/node/v20.19.1/bin\:/home/josie/.krew/bin\:/home/josie/.rbenv/shims\:/home/josie/.local/share/cargo/bin\:/opt/google-cloud-cli/bin\:/usr/local/sbin\:/usr/local/bin\:/usr/bin\:/usr/bin/site_perl\:/usr/bin/vendor_perl\:/usr/bin/core_perl\:/opt/rocm/bin\:/home/josie/.local/bin\:/home/josie/.local/bin/cron\:/home/josie/.local/bin/statusbar\:/home/josie/bin\:/home/josie/.local/bin\:/home/josie/.local/bin/statusbar\:/bin\:/home/josie/.local/share/go/bin