summaryrefslogtreecommitdiff
path: root/.config/zsh
diff options
context:
space:
mode:
Diffstat (limited to '.config/zsh')
-rw-r--r--.config/zsh/.zshrc54
-rw-r--r--.config/zsh/antigen.zsh2057
-rw-r--r--.config/zsh/functions31
-rw-r--r--.config/zsh/functions.zsh29
-rw-r--r--.config/zsh/plugins.zsh28
-rw-r--r--.config/zsh/prompt40
-rw-r--r--.config/zsh/vi-mode28
7 files changed, 148 insertions, 2119 deletions
diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc
index c39dc9d..f37b8a5 100644
--- a/.config/zsh/.zshrc
+++ b/.config/zsh/.zshrc
@@ -1,20 +1,38 @@
# ZSH config
-
# Load plugins first
[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc"
-[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/zsh/plugins.zsh" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/zsh/plugins.zsh"
-[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/zsh/functions.zsh" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/zsh/functions.zsh"
# Uncomment the following line to use case-sensitive completion.
CASE_SENSITIVE="true"
+# some useful options (man zshoptions)
+setopt autocd extendedglob nomatch menucomplete
+setopt interactive_comments
+stty stop undef # Disable ctrl-s to freeze terminal.
+
zle_highlight=('paste:none')
-autoload -U colors && colors
+# beeping is annoying
+unsetopt BEEP
# For autocomplete to work
autoload -U +X compinit && compinit
autoload -U +X bashcompinit && bashcompinit
+zstyle ':completion:*' menu select
+zmodload zsh/complist
+_comp_options+=(globdots) # Include hidden files.
+
+
+# Useful functions
+source "$ZDOTDIR/functions"
+zsh_add_file "vi-mode"
+zsh_add_file "prompt"
+
+# Plugins
+zsh_add_plugin "zsh-users/zsh-autosuggestions"
+zsh_add_plugin "zsh-users/zsh-syntax-highlighting"
+# For more plugins: https://github.com/unixorn/awesome-zsh-plugins
+# More completions https://github.com/zsh-users/zsh-completions
# History in cache directory:
HISTSIZE=100000
@@ -30,4 +48,30 @@ bindkey "ç" fzf-cd-widget
bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward
-eval "$(pyenv init -)"
+# Use lf to switch directories and bind it to ctrl-o
+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
+}
+bindkey -s '^o' 'lfcd\n'
+
+bindkey -s '^a' 'bc -lq\n'
+
+bindkey -s '^f' 'cd "$(dirname "$(fzf)")"\n'
+
+bindkey '^[[P' delete-char
+
+# FZF
+[ -f /usr/share/fzf/completion.zsh ] && source /usr/share/fzf/completion.zsh
+[ -f /usr/share/fzf/key-bindings.zsh ] && source /usr/share/fzf/key-bindings.zsh
+
+compinit
+
+# Edit line in vim with ctrl-e:
+autoload edit-command-line; zle -N edit-command-line
+bindkey '^e' edit-command-line
diff --git a/.config/zsh/antigen.zsh b/.config/zsh/antigen.zsh
deleted file mode 100644
index e813207..0000000
--- a/.config/zsh/antigen.zsh
+++ /dev/null
@@ -1,2057 +0,0 @@
-######################################################################
-# This file was autogenerated by `make`. Do not edit it directly!
-######################################################################
-# Antigen: A simple plugin manager for zsh
- # Authors: Shrikant Sharat Kandula
- # and Contributors <https://github.com/zsh-users/antigen/contributors>
- # Homepage: http://antigen.sharats.me
- # License: MIT License <mitl.sharats.me>
-zmodload zsh/parameter
-autoload -U is-at-least
-
-# While boot.zsh is part of the ext/cache functionallity it may be disabled
-# with ANTIGEN_CACHE flag, and it's always compiled with antigen.zsh
-if [[ $ANTIGEN_CACHE != false ]]; then
- ANTIGEN_CACHE="${ANTIGEN_CACHE:-${ADOTDIR:-$HOME/.antigen}/init.zsh}"
- ANTIGEN_RSRC="${ANTIGEN_RSRC:-${ADOTDIR:-$HOME/.antigen}/.resources}"
-
- # It may not be necessary to check ANTIGEN_AUTO_CONFIG.
- if [[ $ANTIGEN_AUTO_CONFIG != false && -f $ANTIGEN_RSRC ]]; then
- # Check the list of files for configuration changes (uses -nt comp)
- ANTIGEN_CHECK_FILES=$(cat $ANTIGEN_RSRC 2> /dev/null)
- ANTIGEN_CHECK_FILES=(${(@f)ANTIGEN_CHECK_FILES})
-
- for config in $ANTIGEN_CHECK_FILES; do
- if [[ "$config" -nt "$config.zwc" ]]; then
- # Flag configuration file as newer
- { zcompile "$config" } &!
- # Kill cache file in order to force full loading (see a few lines below)
- [[ -f "$ANTIGEN_CACHE" ]] && rm -f "$ANTIGEN_CACHE"
- fi
- done
- fi
-
- # If there is a cache file do load from it
- if [[ -f $ANTIGEN_CACHE && ! $_ANTIGEN_CACHE_LOADED == true ]]; then
- # Wrap antigen in order to defer cache source until `antigen-apply`
- antigen() {
- if [[ $1 == "apply" ]]; then
- source "$ANTIGEN_CACHE"
- # Handle `antigen-init` command properly
- elif [[ $1 == "init" ]]; then
- source "$2"
- fi
- }
- # Do not continue loading antigen as cache bundle takes care of it.
- return 0
- fi
-fi
-[[ -z "$_ANTIGEN_INSTALL_DIR" ]] && _ANTIGEN_INSTALL_DIR=${0:A:h}
-
-# Each line in this string has the following entries separated by a space
-# character.
-# <repo-url>, <plugin-location>, <bundle-type>, <has-local-clone>
-[[ $_ANTIGEN_CACHE_LOADED != true ]] && typeset -aU _ANTIGEN_BUNDLE_RECORD
-
-# Do not load anything if git is not available.
-if (( ! $+commands[git] )); then
- echo 'Antigen: Please install git to use Antigen.' >&2
- return 1
-fi
-
-# Used to defer compinit/compdef
-typeset -a __deferred_compdefs
-compdef () { __deferred_compdefs=($__deferred_compdefs "$*") }
-
-# A syntax sugar to avoid the `-` when calling antigen commands. With this
-# function, you can write `antigen-bundle` as `antigen bundle` and so on.
-antigen () {
- local cmd="$1"
- if [[ -z "$cmd" ]]; then
- echo 'Antigen: Please give a command to run.' >&2
- return 1
- fi
- shift
-
- if (( $+functions[antigen-$cmd] )); then
- "antigen-$cmd" "$@"
- return $?
- else
- echo "Antigen: Unknown command: $cmd" >&2
- return 1
- fi
-}
-# Returns the bundle's git revision
-#
-# Usage
-# -antigen-bundle-rev bundle-name [is_local_clone]
-#
-# Returns
-# Bundle rev-parse output (branch name or short ref name)
--antigen-bundle-rev () {
- local bundle=$1
- local is_local_clone=$2
-
- local bundle_path=$bundle
- # Get bunde path inside $ADOTDIR if bundle was effectively cloned
- if [[ "$is_local_clone" == "true" ]]; then
- bundle_path=$(-antigen-get-clone-dir $bundle)
- fi
-
- local ref
- ref=$(git --git-dir="$bundle_path/.git" rev-parse --abbrev-ref '@' 2>/dev/null)
-
- # Avoid 'HEAD' when in detached mode
- if [[ $ref == "HEAD" ]]; then
- ref=$(git --git-dir="$bundle_path/.git" describe --tags --exact-match 2>/dev/null \
- || git --git-dir="$bundle_path/.git" rev-parse --short '@' 2>/dev/null || "-")
- fi
- echo $ref
-}
-# Usage:
-# -antigen-bundle-short-name "https://github.com/user/repo.git[|*]" "[branch/name]"
-# Returns:
-# user/repo@branch/name
--antigen-bundle-short-name () {
- local bundle_name="${1%|*}"
- local bundle_branch="$2"
- local match mbegin mend MATCH MBEGIN MEND
-
- [[ "$bundle_name" =~ '.*/(.*/.*).*$' ]] && bundle_name=$match[1]
- bundle_name="${bundle_name%.git*}"
-
- if [[ -n $bundle_branch ]]; then
- bundle_name="$bundle_name@$bundle_branch"
- fi
-
- echo $bundle_name
-}
-# Echo the bundle specs as in the record. The first line is not echoed since it
-# is a blank line.
--antigen-echo-record () {
- echo ${(j:\n:)_ANTIGEN_BUNDLE_RECORD}
-}
-# Filters _ANTIGEN_BUNDLE_RECORD for $1
-#
-# Usage
-# -antigen-find-bundle example/bundle
-#
-# Returns
-# String if bundle is found
--antigen-find-bundle () {
- echo $(-antigen-find-record $1 | cut -d' ' -f1)
-}
-
-# Filters _ANTIGEN_BUNDLE_RECORD for $1
-#
-# Usage
-# -antigen-find-record example/bundle
-#
-# Returns
-# String if record is found
--antigen-find-record () {
- local bundle=$1
-
- if [[ $# -eq 0 ]]; then
- return 1
- fi
-
- local record=${bundle/\|/\\\|}
- echo "${_ANTIGEN_BUNDLE_RECORD[(r)*$record*]}"
-}
-# Returns bundle names from _ANTIGEN_BUNDLE_RECORD
-#
-# Usage
-# -antigen-get-bundles [--short|--simple|--long]
-#
-# Returns
-# List of bundles installed
--antigen-get-bundles () {
- local mode revision url bundle_name bundle_entry loc no_local_clone
- local record bundle make_local_clone
- mode=${1:-"--short"}
-
- for record in $_ANTIGEN_BUNDLE_RECORD; do
- bundle=(${(@s/ /)record})
- url=$bundle[1]
- loc=$bundle[2]
- make_local_clone=$bundle[4]
-
- bundle_name=$(-antigen-bundle-short-name $url)
-
- case "$mode" in
- --short)
- # Only check revision for bundle with a requested branch
- if [[ $url == *\|* ]]; then
- revision=$(-antigen-bundle-rev $url $make_local_clone)
- else
- revision="master"
- fi
-
- if [[ $loc != '/' ]]; then
- bundle_name="$bundle_name ~ $loc"
- fi
- echo "$bundle_name @ $revision"
- ;;
- --simple)
- echo "$bundle_name"
- ;;
- --long)
- echo "$record"
- ;;
- esac
- done
-}
-# Usage:
-# -antigen-get-clone-dir "https://github.com/zsh-users/zsh-syntax-highlighting.git[|feature/branch]"
-# Returns:
-# $ANTIGEN_BUNDLES/zsh-users/zsh-syntax-highlighting[-feature-branch]
--antigen-get-clone-dir () {
- local bundle="$1"
- local url="${bundle%|*}"
- local branch match mbegin mend MATCH MBEGIN MEND
- [[ "$bundle" =~ "\|" ]] && branch="${bundle#*|}"
-
- # Takes a repo url and mangles it, giving the path that this url will be
- # cloned to. Doesn't actually clone anything.
- local clone_dir="$ANTIGEN_BUNDLES"
-
- url=$(-antigen-bundle-short-name $url)
-
- # Suffix with branch/tag name
- [[ -n "$branch" ]] && url="$url-${branch//\//-}"
- url=${url//\*/x}
-
- echo "$clone_dir/$url"
-}
-# Returns bundles flagged as make_local_clone
-#
-# Usage
-# -antigen-cloned-bundles
-#
-# Returns
-# Bundle metadata
--antigen-get-cloned-bundles() {
- -antigen-echo-record |
- awk '$4 == "true" {print $1}' |
- sort -u
-}
-# Returns a list of themes from a default library (omz)
-#
-# Usage
-# -antigen-get-themes
-#
-# Returns
-# List of themes by name
--antigen-get-themes () {
- local library='robbyrussell/oh-my-zsh'
- local bundle=$(-antigen-find-bundle $library)
-
- if [[ -n "$bundle" ]]; then
- local dir=$(-antigen-get-clone-dir $ANTIGEN_DEFAULT_REPO_URL)
- echo $(ls $dir/themes/ | grep '.zsh-theme$' | sed 's/.zsh-theme//')
- fi
-
- return 0
-}
-
-# This function check ZSH_EVAL_CONTEXT to determine if running in interactive shell.
-#
-# Usage
-# -antigen-interactive-mode
-#
-# Returns
-# Either true or false depending if we are running in interactive mode
--antigen-interactive-mode () {
- WARN "-antigen-interactive-mode: $ZSH_EVAL_CONTEXT \$_ANTIGEN_INTERACTIVE = $_ANTIGEN_INTERACTIVE"
- if [[ $_ANTIGEN_INTERACTIVE != "" ]]; then
- [[ $_ANTIGEN_INTERACTIVE == true ]];
- return
- fi
-
- [[ "$ZSH_EVAL_CONTEXT" == toplevel* || "$ZSH_EVAL_CONTEXT" == cmdarg* ]];
-}
-# Parses and retrieves a remote branch given a branch name.
-#
-# If the branch name contains '*' it will retrieve remote branches
-# and try to match against tags and heads, returning the latest matching.
-#
-# Usage
-# -antigen-parse-branch https://github.com/user/repo.git x.y.z
-#
-# Returns
-# Branch name
--antigen-parse-branch () {
- local url="$1" branch="$2" branches
-
- local match mbegin mend MATCH MBEGIN MEND
-
- if [[ "$branch" =~ '\*' ]]; then
- branches=$(git ls-remote --tags -q "$url" "$branch"|cut -d'/' -f3|sort -n|tail -1)
- # There is no --refs flag in git 1.8 and below, this way we
- # emulate this flag -- also git 1.8 ref order is undefined.
- branch=${${branches#*/*/}%^*} # Why you are like this?
- fi
-
- echo $branch
-}
--antigen-update-repos () {
- local repo bundle url target
- local log=/tmp/antigen-v2-migrate.log
-
- echo "It seems you have bundles cloned with Antigen v1.x."
- echo "We'll try to convert directory structure to v2."
- echo
-
- echo -n "Moving bundles to '\$ADOTDIR/bundles'... "
-
- # Migrate old repos -> bundles
- local errors=0
- for repo in $ADOTDIR/repos/*; do
- bundle=${repo/$ADOTDIR\/repos\//}
- bundle=${bundle//-SLASH-/\/}
- bundle=${bundle//-COLON-/\:}
- bundle=${bundle//-STAR-/\*}
- url=${bundle//-PIPE-/\|}
- target=$(-antigen-get-clone-dir $url)
- mkdir -p "${target:A:h}"
- echo " ---> ${repo/$ADOTDIR\/} -> ${target/$ADOTDIR\/}" | tee > $log
- mv "$repo" "$target" &> $log
- if [[ $? != 0 ]]; then
- echo "Failed to migrate '$repo'!."
- errors+=1
- fi
- done
-
- if [[ $errors == 0 ]]; then
- echo "Done."
- else
- echo "An error ocurred!"
- fi
- echo
-
- if [[ "$(ls -A $ADOTDIR/repos | wc -l | xargs)" == 0 ]]; then
- echo "You can safely remove \$ADOTDIR/repos."
- else
- echo "Some bundles couldn't be migrated. See \$ADOTDIR/repos."
- fi
-
- echo
- if [[ $errors == 0 ]]; then
- echo "Bundles migrated successfuly."
- rm $log
- else
- echo "Some errors occured. Review migration log in '$log'."
- fi
- antigen-reset
-}
-# Ensure that a clone exists for the given repo url and branch. If the first
-# argument is `update` and if a clone already exists for the given repo
-# and branch, it is pull-ed, i.e., updated.
-#
-# This function expects three arguments in order:
-# - 'url=<url>'
-# - 'update=true|false'
-# - 'verbose=true|false'
-#
-# Returns true|false Whether cloning/pulling was succesful
--antigen-ensure-repo () {
- # Argument defaults. Previously using ${1:?"missing url argument"} format
- # but it seems to mess up with cram
- if (( $# < 1 )); then
- echo "Antigen: Missing url argument."
- return 1
- fi
-
- # The url. No sane default for this, so just empty.
- local url=$1
- # Check if we have to update.
- local update=${2:-false}
- # Verbose output.
- local verbose=${3:-false}
-
- shift $#
-
- # Get the clone's directory as per the given repo url and branch.
- local clone_dir=$(-antigen-get-clone-dir $url)
- if [[ -d "$clone_dir" && $update == false ]]; then
- return true
- fi
-
- # A temporary function wrapping the `git` command with repeated arguments.
- --plugin-git () {
- (\cd -q "$clone_dir" && eval ${ANTIGEN_CLONE_ENV} git --git-dir="$clone_dir/.git" --no-pager "$@" &>>! $ANTIGEN_LOG)
- }
-
- local success=false
-
- # If its a specific branch that we want, checkout that branch.
- local branch="master" # TODO FIX THIS
- if [[ $url == *\|* ]]; then
- branch="$(-antigen-parse-branch ${url%|*} ${url#*|})"
- fi
-
- if [[ ! -d $clone_dir ]]; then
- eval ${ANTIGEN_CLONE_ENV} git clone ${=ANTIGEN_CLONE_OPTS} --branch "$branch" -- "${url%|*}" "$clone_dir" &>> $ANTIGEN_LOG
- success=$?
- elif $update; then
- # Save current revision.
- local old_rev="$(--plugin-git rev-parse HEAD)"
- # Pull changes if update requested.
- --plugin-git checkout "$branch"
- --plugin-git pull origin "$branch"
- success=$?
-
- # Update submodules.
- --plugin-git submodule update ${=ANTIGEN_SUBMODULE_OPTS}
- # Get the new revision.
- local new_rev="$(--plugin-git rev-parse HEAD)"
- fi
-
- if [[ -n $old_rev && $old_rev != $new_rev ]]; then
- echo Updated from $old_rev[0,7] to $new_rev[0,7].
- if $verbose; then
- --plugin-git log --oneline --reverse --no-merges --stat '@{1}..'
- fi
- fi
-
- # Remove the temporary git wrapper function.
- unfunction -- --plugin-git
-
- return $success
-}
-# Helper function: Same as `$1=$2`, but will only happen if the name
-# specified by `$1` is not already set.
--antigen-set-default () {
- local arg_name="$1"
- local arg_value="$2"
- eval "test -z \"\$$arg_name\" && typeset -g $arg_name='$arg_value'"
-}
-
--antigen-env-setup () {
- typeset -gU fpath path
-
- # Pre-startup initializations.
- -antigen-set-default ANTIGEN_OMZ_REPO_URL \
- https://github.com/robbyrussell/oh-my-zsh.git
- -antigen-set-default ANTIGEN_PREZTO_REPO_URL \
- https://github.com/sorin-ionescu/prezto.git
- -antigen-set-default ANTIGEN_DEFAULT_REPO_URL $ANTIGEN_OMZ_REPO_URL
-
- # Default Antigen directory.
- -antigen-set-default ADOTDIR $HOME/.antigen
- [[ ! -d $ADOTDIR ]] && mkdir -p $ADOTDIR
-
- # Defaults bundles directory.
- -antigen-set-default ANTIGEN_BUNDLES $ADOTDIR/bundles
-
- # If there is no bundles directory, create it.
- if [[ ! -d $ANTIGEN_BUNDLES ]]; then
- mkdir -p $ANTIGEN_BUNDLES
- # Check for v1 repos directory, transform it to v2 format.
- [[ -d $ADOTDIR/repos ]] && -antigen-update-repos
- fi
-
- -antigen-set-default ANTIGEN_COMPDUMP "${ADOTDIR:-$HOME}/.zcompdump"
- -antigen-set-default ANTIGEN_LOG /dev/null
-
- # CLONE_OPTS uses ${=CLONE_OPTS} expansion so don't use spaces
- # for arguments that can be passed as `--key=value`.
- -antigen-set-default ANTIGEN_CLONE_ENV "GIT_TERMINAL_PROMPT=0"
- -antigen-set-default ANTIGEN_CLONE_OPTS "--single-branch --recursive --depth=1"
- -antigen-set-default ANTIGEN_SUBMODULE_OPTS "--recursive --depth=1"
-
- # Complain when a bundle is already installed.
- -antigen-set-default _ANTIGEN_WARN_DUPLICATES true
-
- # Compatibility with oh-my-zsh themes.
- -antigen-set-default _ANTIGEN_THEME_COMPAT true
-
- # Add default built-in extensions to load at start up
- -antigen-set-default _ANTIGEN_BUILTIN_EXTENSIONS 'lock parallel defer cache'
-
- # Setup antigen's own completion.
- if -antigen-interactive-mode; then
- TRACE "Gonna create compdump file @ env-setup" COMPDUMP
- autoload -Uz compinit
- compinit -d "$ANTIGEN_COMPDUMP"
- compdef _antigen antigen
- else
- (( $+functions[antigen-ext-init] )) && antigen-ext-init
- fi
-}
-# Load a given bundle by sourcing it.
-#
-# The function also modifies fpath to add the bundle path.
-#
-# Usage
-# -antigen-load "bundle-url" ["location"] ["make_local_clone"] ["btype"]
-#
-# Returns
-# Integer. 0 if success 1 if an error ocurred.
--antigen-load () {
- local bundle list
- typeset -A bundle; bundle=($@)
-
- typeset -Ua list; list=()
- local location="${bundle[dir]}/${bundle[loc]}"
-
- # Prioritize location when given.
- if [[ -f "${location}" ]]; then
- list=(${location})
- else
- # Directory locations must be suffixed with slash
- location="$location/"
-
- # Prioritize theme with antigen-theme
- if [[ ${bundle[btype]} == "theme" ]]; then
- list=(${location}*.zsh-theme(N[1]))
- fi
-
- # Common frameworks
- if [[ $#list == 0 ]]; then
- # dot-plugin, init and functions support (omz, prezto)
- # Support prezto function loading. See https://github.com/zsh-users/antigen/pull/428
- list=(${location}*.plugin.zsh(N[1]) ${location}init.zsh(N[1]) ${location}/functions(N[1]))
- fi
-
- # Default to zsh and sh
- if [[ $#list == 0 ]]; then
- list=(${location}*.zsh(N) ${location}*.sh(N))
- fi
- fi
-
- -antigen-load-env ${(kv)bundle}
-
- # If there is any sourceable try to load it
- if ! -antigen-load-source "${list[@]}" && [[ ! -d ${location} ]]; then
- return 1
- fi
-
- return 0
-}
-
--antigen-load-env () {
- typeset -A bundle; bundle=($@)
- local location=${bundle[dir]}/${bundle[loc]}
-
- # Load to path if there is no sourceable
- if [[ -d ${location} ]]; then
- PATH="$PATH:${location:A}"
- fpath+=("${location:A}")
- return
- fi
-
- PATH="$PATH:${location:A:h}"
- fpath+=("${location:A:h}")
-}
-
--antigen-load-source () {
- typeset -a list
- list=($@)
- local src match mbegin mend MATCH MBEGIN MEND
-
- # Return error when we're given an empty list
- if [[ $#list == 0 ]]; then
- return 1
- fi
-
- # Using a for rather than `source $list` as we need to check for zsh-themes
- # In order to create antigen-compat file. This is only needed for interactive-mode
- # theme switching, for static loading (cache) there is no need.
- for src in $list; do
- if [[ $_ANTIGEN_THEME_COMPAT == true && -f "$src" && "$src" == *.zsh-theme* ]]; then
- local compat="${src:A}.antigen-compat"
- echo "# Generated by Antigen. Do not edit!" >! "$compat"
- cat $src | sed -Ee '/\{$/,/^\}/!{
- s/^local //
- }' >>! "$compat"
- src="$compat"
- fi
-
- if ! source "$src" 2>/dev/null; then
- return 1
- fi
- done
-}
-# Usage:
-# -antigen-parse-args output_assoc_arr <args...>
--antigen-parse-args () {
- local argkey key value index=0 args
- local match mbegin mend MATCH MBEGIN MEND
-
- local var=$1
- shift
-
- # Bundle spec arguments' default values.
- #setopt XTRACE VERBOSE
- builtin typeset -A args
- args[url]="$ANTIGEN_DEFAULT_REPO_URL"
- #unsetopt XTRACE VERBOSE
- args[loc]=/
- args[make_local_clone]=true
- args[btype]=plugin
- #args[branch]= # commented out as it may cause assoc array kv mismatch
-
- while [[ $# -gt 0 ]]; do
- argkey="${1%\=*}"
- key="${argkey//--/}"
- value="${1#*=}"
-
- case "$argkey" in
- --url|--loc|--branch|--btype)
- if [[ "$value" == "$argkey" ]]; then
- printf "Required argument for '%s' not provided.\n" $key >&2
- else
- args[$key]="$value"
- fi
- ;;
- --no-local-clone)
- args[make_local_clone]=false
- ;;
- --*)
- printf "Unknown argument '%s'.\n" $key >&2
- ;;
- *)
- value=$key
- case $index in
- 0)
- key=url
- local domain=""
- local url_path=$value
- # Full url with protocol or ssh github url (github.com:org/repo)
- if [[ "$value" =~ "://" || "$value" =~ ":" ]]; then
- if [[ "$value" =~ [@.][^/:]+[:]?[0-9]*[:/]?(.*)@?$ ]]; then
- url_path=$match[1]
- domain=${value/$url_path/}
- fi
- fi
-
- if [[ "$url_path" =~ '@' ]]; then
- args[branch]="${url_path#*@}"
- value="$domain${url_path%@*}"
- else
- value="$domain$url_path"
- fi
- ;;
- 1) key=loc ;;
- esac
- let index+=1
- args[$key]="$value"
- ;;
- esac
-
- shift
- done
-
- # Check if url is just the plugin name. Super short syntax.
- if [[ "${args[url]}" != */* ]]; then
- case "$ANTIGEN_DEFAULT_REPO_URL" in
- "$ANTIGEN_OMZ_REPO_URL")
- args[loc]="plugins/${args[url]}"
- ;;
- "$ANTIGEN_PREZTO_REPO_URL")
- args[loc]="modules/${args[url]}"
- ;;
- *)
- args[loc]="${args[url]}"
- ;;
- esac
- args[url]="$ANTIGEN_DEFAULT_REPO_URL"
- fi
-
- # Resolve the url.
- # Expand short github url syntax: `username/reponame`.
- local url="${args[url]}"
- if [[ $url != git://* &&
- $url != https://* &&
- $url != http://* &&
- $url != ssh://* &&
- $url != /* &&
- $url != *github.com:*/*
- ]]; then
- url="https://github.com/${url%.git}.git"
- fi
- args[url]="$url"
-
- # Ignore local clone if url given is not a git directory
- if [[ ${args[url]} == /* && ! -d ${args[url]}/.git ]]; then
- args[make_local_clone]=false
- fi
-
- # Add the branch information to the url if we need to create a local clone.
- # Format url in bundle-metadata format: url[|branch]
- if [[ ! -z "${args[branch]}" && ${args[make_local_clone]} == true ]]; then
- args[url]="${args[url]}|${args[branch]}"
- fi
-
- # Add the theme extension to `loc`, if this is a theme, but only
- # if it's especified, ie, --loc=theme-name, in case when it's not
- # specified antige-load-list will look for *.zsh-theme files
- if [[ ${args[btype]} == "theme" &&
- ${args[loc]} != "/" && ${args[loc]} != *.zsh-theme ]]; then
- args[loc]="${args[loc]}.zsh-theme"
- fi
-
- local name="${args[url]%|*}"
- local branch="${args[branch]}"
-
- # Extract bundle name.
- if [[ "$name" =~ '.*/(.*/.*).*$' ]]; then
- name="${match[1]}"
- fi
- name="${name%.git*}"
-
- # Format bundle name with optional branch.
- if [[ -n "${branch}" ]]; then
- args[name]="${name}@${branch}"
- else
- args[name]="${name}"
- fi
-
- # Format bundle path.
- if [[ ${args[make_local_clone]} == true ]]; then
- local bpath="$name"
- # Suffix with branch/tag name
- if [[ -n "$branch" ]]; then
- # bpath is in the form of repo/name@version => repo/name-version
- # Replace / with - in bundle branch.
- local bbranch=${branch//\//-}
- # If branch/tag is semver-like do replace * by x.
- bbranch=${bbranch//\*/x}
- bpath="${name}-${bbranch}"
- fi
-
- bpath="$ANTIGEN_BUNDLES/$bpath"
- args[dir]="${(qq)bpath}"
- else
- # if it's local then path is just the "url" argument, loc remains the same
- args[dir]=${args[url]}
- fi
-
- # Escape url and branch (may contain semver-like and pipe characters)
- args[url]="${(qq)args[url]}"
- if [[ -n "${args[branch]}" ]]; then
- args[branch]="${(qq)args[branch]}"
- fi
-
- # Escape bundle name (may contain semver-like characters)
- args[name]="${(qq)args[name]}"
-
- eval "${var}=(${(kv)args})"
-
- return 0
-}
-# Updates revert-info data with git hash.
-#
-# This does process only cloned bundles.
-#
-# Usage
-# -antigen-revert-info
-#
-# Returns
-# Nothing. Generates/updates $ADOTDIR/revert-info.
--antigen-revert-info() {
- local url
- # Update your bundles, i.e., `git pull` in all the plugin repos.
- date >! $ADOTDIR/revert-info
-
- -antigen-get-cloned-bundles | while read url; do
- local clone_dir="$(-antigen-get-clone-dir "$url")"
- if [[ -d "$clone_dir" ]]; then
- (echo -n "$clone_dir:"
- \cd -q "$clone_dir"
- git rev-parse HEAD) >> $ADOTDIR/revert-info
- fi
- done
-}
--antigen-use-oh-my-zsh () {
- typeset -g ZSH ZSH_CACHE_DIR
- ANTIGEN_DEFAULT_REPO_URL=$ANTIGEN_OMZ_REPO_URL
- if [[ -z "$ZSH" ]]; then
- ZSH="$(-antigen-get-clone-dir "$ANTIGEN_DEFAULT_REPO_URL")"
- fi
- if [[ -z "$ZSH_CACHE_DIR" ]]; then
- ZSH_CACHE_DIR="$ZSH/cache/"
- fi
- antigen-bundle --loc=lib
-}
--antigen-use-prezto () {
- ANTIGEN_DEFAULT_REPO_URL=$ANTIGEN_PREZTO_REPO_URL
- antigen-bundle "$ANTIGEN_PREZTO_REPO_URL"
-}
-# Initialize completion
-antigen-apply () {
- LOG "Called antigen-apply"
-
- # Load the compinit module. This will readefine the `compdef` function to
- # the one that actually initializes completions.
- TRACE "Gonna create compdump file @ apply" COMPDUMP
- autoload -Uz compinit
- compinit -d "$ANTIGEN_COMPDUMP"
-
- # Apply all `compinit`s that have been deferred.
- local cdef
- for cdef in "${__deferred_compdefs[@]}"; do
- compdef "$cdef"
- done
-
- { zcompile "$ANTIGEN_COMPDUMP" } &!
-
- unset __deferred_compdefs
-}
-# Syntaxes
-# antigen-bundle <url> [<loc>=/]
-# Keyword only arguments:
-# branch - The branch of the repo to use for this bundle.
-antigen-bundle () {
- TRACE "Called antigen-bundle with $@" BUNDLE
- if [[ -z "$1" ]]; then
- printf "Antigen: Must provide a bundle url or name.\n" >&2
- return 1
- fi
-
- builtin typeset -A bundle; -antigen-parse-args 'bundle' ${=@}
- if [[ -z ${bundle[btype]} ]]; then
- bundle[btype]=bundle
- fi
-
- local record="${bundle[url]} ${bundle[loc]} ${bundle[btype]} ${bundle[make_local_clone]}"
- if [[ $_ANTIGEN_WARN_DUPLICATES == true && ! ${_ANTIGEN_BUNDLE_RECORD[(I)$record]} == 0 ]]; then
- printf "Seems %s is already installed!\n" ${bundle[name]}
- return 1
- fi
-
- # Clone bundle if we haven't done do already.
- if [[ ! -d "${bundle[dir]}" ]]; then
- if ! -antigen-bundle-install ${(kv)bundle}; then
- return 1
- fi
- fi
-
- # Load the plugin.
- if ! -antigen-load ${(kv)bundle}; then
- TRACE "-antigen-load failed to load ${bundle[name]}" BUNDLE
- printf "Antigen: Failed to load %s.\n" ${bundle[btype]} >&2
- return 1
- fi
-
- # Only add it to the record if it could be installed and loaded.
- _ANTIGEN_BUNDLE_RECORD+=("$record")
-}
-
-#
-# Usage:
-# -antigen-bundle-install <record>
-# Returns:
-# 1 if it fails to install bundle
--antigen-bundle-install () {
- typeset -A bundle; bundle=($@)
-
- # Ensure a clone exists for this repo, if needed.
- # Get the clone's directory as per the given repo url and branch.
- local bpath="${bundle[dir]}"
- # Clone if it doesn't already exist.
- local start=$(date +'%s')
-
- printf "Installing %s... " "${bundle[name]}"
-
- if ! -antigen-ensure-repo "${bundle[url]}"; then
- # Return immediately if there is an error cloning
- TRACE "-antigen-bundle-instal failed to clone ${bundle[url]}" BUNDLE
- printf "Error! Activate logging and try again.\n" >&2
- return 1
- fi
-
- local took=$(( $(date +'%s') - $start ))
- printf "Done. Took %ds.\n" $took
-}
-antigen-bundles () {
- # Bulk add many bundles at one go. Empty lines and lines starting with a `#`
- # are ignored. Everything else is given to `antigen-bundle` as is, no
- # quoting rules applied.
- local line
- setopt localoptions no_extended_glob # See https://github.com/zsh-users/antigen/issues/456
- grep '^[[:space:]]*[^[:space:]#]' | while read line; do
- antigen-bundle ${=line%#*}
- done
-}
-# Cleanup unused repositories.
-antigen-cleanup () {
- local force=false
- if [[ $1 == --force ]]; then
- force=true
- fi
-
- if [[ ! -d "$ANTIGEN_BUNDLES" || -z "$(\ls -A "$ANTIGEN_BUNDLES")" ]]; then
- echo "You don't have any bundles."
- return 0
- fi
-
- # Find directores in ANTIGEN_BUNDLES, that are not in the bundles record.
- typeset -a unused_clones clones
-
- local url record clone
- for record in $(-antigen-get-cloned-bundles); do
- url=${record% /*}
- clones+=("$(-antigen-get-clone-dir $url)")
- done
-
- for clone in $ANTIGEN_BUNDLES/*/*(/); do
- if [[ $clones[(I)$clone] == 0 ]]; then
- unused_clones+=($clone)
- fi
- done
-
- if [[ -z $unused_clones ]]; then
- echo "You don't have any unidentified bundles."
- return 0
- fi
-
- echo 'You have clones for the following repos, but are not used.'
- echo "\n${(j:\n:)unused_clones}"
-
- if $force || (echo -n '\nDelete them all? [y/N] '; read -q); then
- echo
- echo
- for clone in $unused_clones; do
- echo -n "Deleting clone \"$clone\"..."
- \rm -rf "$clone"
-
- echo ' done.'
- done
- else
- echo
- echo "Nothing deleted."
- fi
-}
-antigen-help () {
- antigen-version
-
- cat <<EOF
-
-Antigen is a plugin management system for zsh. It makes it easy to grab awesome
-shell scripts and utilities, put up on Github.
-
-Usage: antigen <command> [args]
-
-Commands:
- apply Must be called in the zshrc after all calls to 'antigen bundle'.
- bundle Install and load a plugin.
- cache-gen Generate Antigen's cache with currently loaded bundles.
- cleanup Remove clones of repos not used by any loaded plugins.
- init Use caching to quickly load bundles.
- list List currently loaded plugins.
- purge Remove a bundle from the filesystem.
- reset Clean the generated cache.
- restore Restore plugin state from a snapshot file.
- revert Revert plugins to their state prior to the last time 'antigen
- update' was run.
- selfupdate Update antigen.
- snapshot Create a snapshot of all active plugin repos and save it to a
- snapshot file.
- update Update plugins.
- use Load a supported zsh pre-packaged framework.
-
-For further details and complete documentation, visit the project's page at
-'http://antigen.sharats.me'.
-EOF
-}
-# Antigen command to load antigen configuration
-#
-# This method is slighlty more performing than using various antigen-* methods.
-#
-# Usage
-# Referencing an antigen configuration file:
-#
-# antigen-init "/path/to/antigenrc"
-#
-# or using HEREDOCS:
-#
-# antigen-init <<EOBUNDLES
-# antigen use oh-my-zsh
-#
-# antigen bundle zsh/bundle
-# antigen bundle zsh/example
-#
-# antigen theme zsh/theme
-#
-# antigen apply
-# EOBUNDLES
-#
-# Returns
-# Nothing
-antigen-init () {
- local src="$1" line
-
- # If we're given an argument it should be a path to a file
- if [[ -n "$src" ]]; then
- if [[ -f "$src" ]]; then
- source "$src"
- return
- else
- printf "Antigen: invalid argument provided.\n" >&2
- return 1
- fi
- fi
-
- # Otherwise we expect it to be a heredoc
- grep '^[[:space:]]*[^[:space:]#]' | while read -r line; do
- eval $line
- done
-}
-# List instaled bundles either in long (record), short or simple format.
-#
-# Usage
-# antigen-list [--short|--long|--simple]
-#
-# Returns
-# List of bundles
-antigen-list () {
- local format=$1
-
- # List all currently installed bundles.
- if [[ -z $_ANTIGEN_BUNDLE_RECORD ]]; then
- echo "You don't have any bundles." >&2
- return 1
- fi
-
- -antigen-get-bundles $format
-}
-# Remove a bundle from filesystem
-#
-# Usage
-# antigen-purge example/bundle [--force]
-#
-# Returns
-# Nothing. Removes bundle from filesystem.
-antigen-purge () {
- local bundle=$1
- local force=$2
-
- if [[ $# -eq 0 ]]; then
- echo "Antigen: Missing argument." >&2
- return 1
- fi
-
- if -antigen-purge-bundle $bundle $force; then
- antigen-reset
- else
- return $?
- fi
-
- return 0
-}
-
-# Remove a bundle from filesystem
-#
-# Usage
-# antigen-purge example/bundle [--force]
-#
-# Returns
-# Nothing. Removes bundle from filesystem.
--antigen-purge-bundle () {
- local bundle=$1
- local force=$2
- local clone_dir=""
-
- local record=""
- local url=""
- local make_local_clone=""
-
- if [[ $# -eq 0 ]]; then
- echo "Antigen: Missing argument." >&2
- return 1
- fi
-
- # local keyword doesn't work on zsh <= 5.0.0
- record=$(-antigen-find-record $bundle)
-
- if [[ ! -n "$record" ]]; then
- echo "Bundle not found in record. Try 'antigen bundle $bundle' first." >&2
- return 1
- fi
-
- url="$(echo "$record" | cut -d' ' -f1)"
- make_local_clone=$(echo "$record" | cut -d' ' -f4)
-
- if [[ $make_local_clone == "false" ]]; then
- echo "Bundle has no local clone. Will not be removed." >&2
- return 1
- fi
-
- clone_dir=$(-antigen-get-clone-dir "$url")
- if [[ $force == "--force" ]] || read -q "?Remove '$clone_dir'? (y/n) "; then
- # Need empty line after read -q
- [[ ! -n $force ]] && echo "" || echo "Removing '$clone_dir'.";
- rm -rf "$clone_dir"
- return $?
- fi
-
- return 1
-}
-# Removes cache payload and metadata if available
-#
-# Usage
-# antigen-reset
-#
-# Returns
-# Nothing
-antigen-reset () {
- [[ -f "$ANTIGEN_CACHE" ]] && rm -f "$ANTIGEN_CACHE" "$ANTIGEN_CACHE.zwc" 1> /dev/null
- [[ -f "$ANTIGEN_RSRC" ]] && rm -f "$ANTIGEN_RSRC" 1> /dev/null
- [[ -f "$ANTIGEN_COMPDUMP" ]] && rm -f "$ANTIGEN_COMPDUMP" "$ANTIGEN_COMPDUMP.zwc" 1> /dev/null
- [[ -f "$ANTIGEN_LOCK" ]] && rm -f "$ANTIGEN_LOCK" 1> /dev/null
- echo 'Done. Please open a new shell to see the changes.'
-}
-antigen-restore () {
- local line
- if [[ $# == 0 ]]; then
- echo 'Please provide a snapshot file to restore from.' >&2
- return 1
- fi
-
- local snapshot_file="$1"
-
- # TODO: Before doing anything with the snapshot file, verify its checksum.
- # If it fails, notify this to the user and confirm if restore should
- # proceed.
-
- echo -n "Restoring from $snapshot_file..."
-
- sed -n '1!p' "$snapshot_file" |
- while read line; do
- local version_hash="${line%% *}"
- local url="${line##* }"
- local clone_dir="$(-antigen-get-clone-dir "$url")"
-
- if [[ ! -d $clone_dir ]]; then
- git clone "$url" "$clone_dir" &> /dev/null
- fi
-
- (\cd -q "$clone_dir" && git checkout $version_hash) &> /dev/null
- done
-
- echo ' done.'
- echo 'Please open a new shell to get the restored changes.'
-}
-# Reads $ADORDIR/revert-info and restores bundles' revision
-antigen-revert () {
- local line
- if [[ -f $ADOTDIR/revert-info ]]; then
- cat $ADOTDIR/revert-info | sed -n '1!p' | while read line; do
- local dir="$(echo "$line" | cut -d: -f1)"
- git --git-dir="$dir/.git" --work-tree="$dir" \
- checkout "$(echo "$line" | cut -d: -f2)" 2> /dev/null
- done
-
- echo "Reverted to state before running -update on $(
- cat $ADOTDIR/revert-info | sed -n '1p')."
-
- else
- echo 'No revert information available. Cannot revert.' >&2
- return 1
- fi
-}
-# Update (with `git pull`) antigen itself.
-# TODO: Once update is finished, show a summary of the new commits, as a kind of
-# "what's new" message.
-antigen-selfupdate () {
- (\cd -q $_ANTIGEN_INSTALL_DIR
- if [[ ! ( -d .git || -f .git ) ]]; then
- echo "Your copy of antigen doesn't appear to be a git clone. " \
- "The 'selfupdate' command cannot work in this case."
- return 1
- fi
- local head="$(git rev-parse --abbrev-ref HEAD)"
- if [[ $head == "HEAD" ]]; then
- # If current head is detached HEAD, checkout to master branch.
- git checkout master
- fi
- git pull
-
- # TODO Should be transparently hooked by zcache
- antigen-reset &>> /dev/null
- )
-}
-antigen-snapshot () {
- local snapshot_file="${1:-antigen-shapshot}"
- local urls url dir version_hash snapshot_content
- local -a bundles
-
- # The snapshot content lines are pairs of repo-url and git version hash, in
- # the form:
- # <version-hash> <repo-url>
- urls=$(-antigen-echo-record | awk '$4 == "true" {print $1}' | sort -u)
- for url in ${(f)urls}; do
- dir="$(-antigen-get-clone-dir "$url")"
- version_hash="$(\cd -q "$dir" && git rev-parse HEAD)"
- bundles+=("$version_hash $url");
- done
- snapshot_content=${(j:\n:)bundles}
-
- {
- # The first line in the snapshot file is for metadata, in the form:
- # key='value'; key='value'; key='value';
- # Where `key`s are valid shell variable names.
-
- # Snapshot version. Has no relation to antigen version. If the snapshot
- # file format changes, this number can be incremented.
- echo -n "version='1';"
-
- # Snapshot creation date+time.
- echo -n " created_on='$(date)';"
-
- # Add a checksum with the md5 checksum of all the snapshot lines.
- chksum() { (md5sum; test $? = 127 && md5) 2>/dev/null | cut -d' ' -f1 }
- local checksum="$(echo "$snapshot_content" | chksum)"
- unset -f chksum;
- echo -n " checksum='${checksum%% *}';"
-
- # A newline after the metadata and then the snapshot lines.
- echo "\n$snapshot_content"
-
- } > "$snapshot_file"
-}
-# Loads a given theme.
-#
-# Shares the same syntax as antigen-bundle command.
-#
-# Usage
-# antigen-theme zsh/theme[.zsh-theme]
-#
-# Returns
-# 0 if everything was succesfully
-antigen-theme () {
- local name=$1 result=0 record
- local match mbegin mend MATCH MBEGIN MEND
-
- if [[ -z "$1" ]]; then
- printf "Antigen: Must provide a theme url or name.\n" >&2
- return 1
- fi
-
- -antigen-theme-reset-hooks
-
- record=$(-antigen-find-record "theme")
- if [[ "$1" != */* && "$1" != --* ]]; then
- # The first argument is just a name of the plugin, to be picked up from
- # the default repo.
- antigen-bundle --loc=themes/$name --btype=theme
-
- else
- antigen-bundle "$@" --btype=theme
-
- fi
- result=$?
-
- # Remove a theme from the record if the following conditions apply:
- # - there was no error in bundling the given theme
- # - there is a theme registered
- # - registered theme is not the same as the current one
- if [[ $result == 0 && -n $record ]]; then
- # http://zsh-workers.zsh.narkive.com/QwfCWpW8/what-s-wrong-with-this-expression
- if [[ "$record" =~ "$@" ]]; then
- return $result
- else
- _ANTIGEN_BUNDLE_RECORD[$_ANTIGEN_BUNDLE_RECORD[(I)$record]]=()
- fi
- fi
-
- return $result
-}
-
--antigen-theme-reset-hooks () {
- # This is only needed on interactive mode
- autoload -U add-zsh-hook is-at-least
- local hook
-
- # Clear out prompts
- PROMPT=""
- if [[ -n $RPROMPT ]]; then
- RPROMPT=""
- fi
-
- for hook in chpwd precmd preexec periodic; do
- add-zsh-hook -D "${hook}" "prompt_*"
- # common in omz themes
- add-zsh-hook -D "${hook}" "*_${hook}"
- add-zsh-hook -d "${hook}" "vcs_info"
- done
-}
-# Updates the bundles or a single bundle.
-#
-# Usage
-# antigen-update [example/bundle]
-#
-# Returns
-# Nothing. Performs a `git pull`.
-antigen-update () {
- local bundle=$1 url
-
- # Clear log
- :> $ANTIGEN_LOG
-
- # Update revert-info data
- -antigen-revert-info
-
- # If no argument is given we update all bundles
- if [[ $# -eq 0 ]]; then
- # Here we're ignoring all non cloned bundles (ie, --no-local-clone)
- -antigen-get-cloned-bundles | while read url; do
- -antigen-update-bundle $url
- done
- # TODO next minor version
- # antigen-reset
- else
- if -antigen-update-bundle $bundle; then
- # TODO next minor version
- # antigen-reset
- else
- return $?
- fi
- fi
-}
-
-# Updates a bundle performing a `git pull`.
-#
-# Usage
-# -antigen-update-bundle example/bundle
-#
-# Returns
-# Nothing. Performs a `git pull`.
--antigen-update-bundle () {
- local bundle="$1"
- local record=""
- local url=""
- local make_local_clone=""
- local start=$(date +'%s')
-
- if [[ $# -eq 0 ]]; then
- printf "Antigen: Missing argument.\n" >&2
- return 1
- fi
-
- record=$(-antigen-find-record $bundle)
- if [[ ! -n "$record" ]]; then
- printf "Bundle not found in record. Try 'antigen bundle %s' first.\n" $bundle >&2
- return 1
- fi
-
- url="$(echo "$record" | cut -d' ' -f1)"
- make_local_clone=$(echo "$record" | cut -d' ' -f4)
-
- local branch="master"
- if [[ $url == *\|* ]]; then
- branch="$(-antigen-parse-branch ${url%|*} ${url#*|})"
- fi
-
- printf "Updating %s... " $(-antigen-bundle-short-name "$url" "$branch")
-
- if [[ $make_local_clone == "false" ]]; then
- printf "Bundle has no local clone. Will not be updated.\n" >&2
- return 1
- fi
-
- # update=true verbose=false
- if ! -antigen-ensure-repo "$url" true false; then
- printf "Error! Activate logging and try again.\n" >&2
- return 1
- fi
-
- local took=$(( $(date +'%s') - $start ))
- printf "Done. Took %ds.\n" $took
-}
-antigen-use () {
- if [[ $1 == oh-my-zsh ]]; then
- -antigen-use-oh-my-zsh
- elif [[ $1 == prezto ]]; then
- -antigen-use-prezto
- elif [[ $1 != "" ]]; then
- ANTIGEN_DEFAULT_REPO_URL=$1
- antigen-bundle $@
- else
- echo 'Usage: antigen-use <library-name|url>' >&2
- echo 'Where <library-name> is any one of the following:' >&2
- echo ' * oh-my-zsh' >&2
- echo ' * prezto' >&2
- echo '<url> is the full url.' >&2
- return 1
- fi
-}
-antigen-version () {
- local version="v2.2.2"
- local extensions revision=""
- if [[ -d $_ANTIGEN_INSTALL_DIR/.git ]]; then
- revision=" ($(git --git-dir=$_ANTIGEN_INSTALL_DIR/.git rev-parse --short '@'))"
- fi
-
- printf "Antigen %s%s\n" $version $revision
- if (( $+functions[antigen-ext] )); then
- typeset -a extensions; extensions=($(antigen-ext-list))
- if [[ $#extensions -gt 0 ]]; then
- printf "Extensions loaded: %s\n" ${(j:, :)extensions}
- fi
- fi
-}
-typeset -Ag _ANTIGEN_HOOKS; _ANTIGEN_HOOKS=()
-typeset -Ag _ANTIGEN_HOOKS_META; _ANTIGEN_HOOKS_META=()
-typeset -g _ANTIGEN_HOOK_PREFIX="-antigen-hook-"
-typeset -g _ANTIGEN_EXTENSIONS; _ANTIGEN_EXTENSIONS=()
-
-# -antigen-add-hook antigen-apply antigen-apply-hook replace
-# - Replaces hooked function with hook, do not call hooked function
-# - Return -1 to stop calling further hooks
-# -antigen-add-hook antigen-apply antigen-apply-hook pre (pre-call)
-# - By default it will call hooked function
-# -antigen-add-hook antigen-pply antigen-apply-hook post (post-call)
-# - Calls antigen-apply and then calls hook function
-# Usage:
-# -antigen-add-hook antigen-apply antigen-apply-hook ["replace"|"pre"|"post"] ["once"|"repeat"]
-antigen-add-hook () {
- local target="$1" hook="$2" type="$3" mode="${4:-repeat}"
-
- if (( ! $+functions[$target] )); then
- printf "Antigen: Function %s doesn't exist.\n" $target
- return 1
- fi
-
- if (( ! $+functions[$hook] )); then
- printf "Antigen: Function %s doesn't exist.\n" $hook
- return 1
- fi
-
- if [[ "${_ANTIGEN_HOOKS[$target]}" == "" ]]; then
- _ANTIGEN_HOOKS[$target]="${hook}"
- else
- _ANTIGEN_HOOKS[$target]="${_ANTIGEN_HOOKS[$target]}:${hook}"
- fi
-
- _ANTIGEN_HOOKS_META[$hook]="target $target type $type mode $mode called 0"
-
- # Do shadow for this function if there is none already
- local hook_function="${_ANTIGEN_HOOK_PREFIX}$target"
- if (( ! $+functions[$hook_function] )); then
- # Preserve hooked function
- eval "function ${_ANTIGEN_HOOK_PREFIX}$(functions -- $target)"
-
- # Create hook, call hook-handler to further process hook functions
- eval "function $target () {
- noglob -antigen-hook-handler $target \$@
- return \$?
- }"
- fi
-
- return 0
-}
-
-# Private function to handle multiple hooks in a central point.
--antigen-hook-handler () {
- local target="$1" args hook called
- local hooks meta
- shift
- typeset -a args; args=(${@})
-
- typeset -a pre_hooks replace_hooks post_hooks;
- typeset -a hooks; hooks=(${(s|:|)_ANTIGEN_HOOKS[$target]})
-
- typeset -A meta;
- for hook in $hooks; do
- meta=(${(s: :)_ANTIGEN_HOOKS_META[$hook]})
- if [[ ${meta[mode]} == "once" && ${meta[called]} == 1 ]]; then
- WARN "Ignoring hook due to mode ${meta[mode]}: $hook"
- continue
- fi
-
- let called=${meta[called]}+1
- meta[called]=$called
- _ANTIGEN_HOOKS_META[$hook]="${(kv)meta}"
- WARN "Updated meta: "${(kv)meta}
-
- case "${meta[type]}" in
- "pre")
- pre_hooks+=($hook)
- ;;
- "replace")
- replace_hooks+=($hook)
- ;;
- "post")
- post_hooks+=($hook)
- ;;
- esac
- done
-
- WARN "Processing hooks: ${hooks}"
-
- for hook in $pre_hooks; do
- WARN "Pre hook:" $hook $args
- noglob $hook $args
- [[ $? == -1 ]] && WARN "$hook shortcircuited" && return $ret
- done
-
- # A replace hook will return inmediately
- local replace_hook=0 ret=0
- for hook in $replace_hooks; do
- replace_hook=1
- # Should not be needed if `antigen-remove-hook` removed unneeded hooks.
- if (( $+functions[$hook] )); then
- WARN "Replace hook:" $hook $args
- noglob $hook $args
- [[ $? == -1 ]] && WARN "$hook shortcircuited" && return $ret
- fi
- done
-
- if [[ $replace_hook == 0 ]]; then
- WARN "${_ANTIGEN_HOOK_PREFIX}$target $args"
- noglob ${_ANTIGEN_HOOK_PREFIX}$target $args
- ret=$?
- else
- WARN "Replaced hooked function."
- fi
-
- for hook in $post_hooks; do
- WARN "Post hook:" $hook $args
- noglob $hook $args
- [[ $? == -1 ]] && WARN "$hook shortcircuited" && return $ret
- done
-
- LOG "Return from hook ${target} with ${ret}"
-
- return $ret
-}
-
-# Usage:
-# -antigen-remove-hook antigen-apply-hook
-antigen-remove-hook () {
- local hook="$1"
- typeset -A meta; meta=(${(s: :)_ANTIGEN_HOOKS_META[$hook]})
- local target="${meta[target]}"
- local -a hooks; hooks=(${(s|:|)_ANTIGEN_HOOKS[$target]})
-
- # Remove registered hook
- if [[ $#hooks > 0 ]]; then
- hooks[$hooks[(I)$hook]]=()
- fi
- _ANTIGEN_HOOKS[${target}]="${(j|:|)hooks}"
-
- if [[ $#hooks == 0 ]]; then
- # Destroy base hook
- eval "function $(functions -- ${_ANTIGEN_HOOK_PREFIX}$target | sed s/${_ANTIGEN_HOOK_PREFIX}//)"
- if (( $+functions[${_ANTIGEN_HOOK_PREFIX}$target] )); then
- unfunction -- "${_ANTIGEN_HOOK_PREFIX}$target"
- fi
- fi
-
- unfunction -- $hook 2> /dev/null
-}
-
-# Remove all defined hooks.
--antigen-reset-hooks () {
- local target
-
- for target in ${(k)_ANTIGEN_HOOKS}; do
- # Release all hooked functions
- eval "function $(functions -- ${_ANTIGEN_HOOK_PREFIX}$target | sed s/${_ANTIGEN_HOOK_PREFIX}//)"
- unfunction -- "${_ANTIGEN_HOOK_PREFIX}$target" 2> /dev/null
- done
-
- _ANTIGEN_HOOKS=()
- _ANTIGEN_HOOKS_META=()
- _ANTIGEN_EXTENSIONS=()
-}
-
-# Initializes an extension
-# Usage:
-# antigen-ext ext-name
-antigen-ext () {
- local ext=$1
- local func="-antigen-$ext-init"
- if (( $+functions[$func] && $_ANTIGEN_EXTENSIONS[(I)$ext] == 0 )); then
- eval $func
- local ret=$?
- WARN "$func return code was $ret"
- if (( $ret == 0 )); then
- LOG "LOADED EXTENSION $ext" EXT
- -antigen-$ext-execute && _ANTIGEN_EXTENSIONS+=($ext)
- else
- WARN "IGNORING EXTENSION $func" EXT
- return 1
- fi
-
- else
- printf "Antigen: No extension defined or already loaded: %s\n" $func >&2
- return 1
- fi
-}
-
-# List installed extensions
-# Usage:
-# antigen ext-list
-antigen-ext-list () {
- echo $_ANTIGEN_EXTENSIONS
-}
-
-# Initializes built-in extensions
-# Usage:
-# antigen-ext-init
-antigen-ext-init () {
- # Initialize extensions. unless in interactive mode.
- local ext
- for ext in ${(s/ /)_ANTIGEN_BUILTIN_EXTENSIONS}; do
- # Check if extension is loaded before intializing it
- (( $+functions[-antigen-$ext-init] )) && antigen-ext $ext
- done
-}
-# Initialize defer lib
--antigen-defer-init () {
- typeset -ga _DEFERRED_BUNDLE; _DEFERRED_BUNDLE=()
- if -antigen-interactive-mode; then
- return 1
- fi
-}
-
--antigen-defer-execute () {
- # Hooks antigen-bundle in order to defer its execution.
- antigen-bundle-defer () {
- _DEFERRED_BUNDLE+=("${(j: :)${@}}")
- return -1 # Stop right there
- }
- antigen-add-hook antigen-bundle antigen-bundle-defer replace
-
- # Hooks antigen-apply in order to release hooked functions
- antigen-apply-defer () {
- WARN "Defer pre-apply" DEFER PRE-APPLY
- antigen-remove-hook antigen-bundle-defer
-
- # Process all deferred bundles.
- local bundle
- for bundle in ${_DEFERRED_BUNDLE[@]}; do
- LOG "Processing deferred bundle: ${bundle}" DEFER
- antigen-bundle $bundle
- done
-
- unset _DEFERRED_BUNDLE
- }
- antigen-add-hook antigen-apply antigen-apply-defer pre once
-}
-# Initialize lock lib
--antigen-lock-init () {
- # Default lock path.
- -antigen-set-default ANTIGEN_LOCK $ADOTDIR/.lock
- typeset -g _ANTIGEN_LOCK_PROCESS=false
-
- # Use env variable to determine if we should load this extension
- -antigen-set-default ANTIGEN_MUTEX true
- # Set ANTIGEN_MUTEX to false to avoid loading this extension
- if [[ $ANTIGEN_MUTEX == true ]]; then
- return 0;
- fi
-
- # Do not use mutex
- return 1;
-}
-
--antigen-lock-execute () {
- # Hook antigen command in order to check/create a lock file.
- # This hook is only run once then releases itself.
- antigen-lock () {
- LOG "antigen-lock called"
- # If there is a lock set up then we won't process anything.
- if [[ -f $ANTIGEN_LOCK ]]; then
- # Set up flag do the message is not repeated for each antigen-* command
- [[ $_ANTIGEN_LOCK_PROCESS == false ]] && printf "Antigen: Another process in running.\n"
- _ANTIGEN_LOCK_PROCESS=true
- # Do not further process hooks. For this hook to properly work it
- # should be registered first.
- return -1
- fi
-
- WARN "Creating antigen-lock file at $ANTIGEN_LOCK"
- touch $ANTIGEN_LOCK
- }
- antigen-add-hook antigen antigen-lock pre once
-
- # Hook antigen-apply in order to release .lock file.
- antigen-apply-lock () {
- WARN "Freeing antigen-lock file at $ANTIGEN_LOCK"
- unset _ANTIGEN_LOCK_PROCESS
- rm -f $ANTIGEN_LOCK &> /dev/null
- }
- antigen-add-hook antigen-apply antigen-apply-lock post once
-}
-# Initialize parallel lib
--antigen-parallel-init () {
- WARN "Init parallel extension" PARALLEL
- typeset -ga _PARALLEL_BUNDLE; _PARALLEL_BUNDLE=()
- if -antigen-interactive-mode; then
- return 1
- fi
-}
-
--antigen-parallel-execute() {
- WARN "Exec parallel extension" PARALLEL
- # Install bundles in parallel
- antigen-bundle-parallel-execute () {
- WARN "Parallel antigen-bundle-parallel-execute" PARALLEL
- typeset -a pids; pids=()
- local args pid
-
- WARN "Gonna install in parallel ${#_PARALLEL_BUNDLE} bundles." PARALLEL
- # Do ensure-repo in parallel
- WARN "${_PARALLEL_BUNDLE}" PARALLEL
- typeset -Ua repositories # Used to keep track of cloned repositories to avoid
- # trying to clone it multiple times.
- for args in ${_PARALLEL_BUNDLE}; do
- typeset -A bundle; -antigen-parse-args 'bundle' ${=args}
-
- if [[ ! -d ${bundle[dir]} && $repositories[(I)${bundle[url]}] == 0 ]]; then
- WARN "Install in parallel ${bundle[name]}." PARALLEL
- echo "Installing ${bundle[name]}!..."
- # $bundle[url]'s format is "url|branch" as to create "$ANTIGEN_BUNDLES/bundle/name-branch",
- # this way you may require multiple branches from the same repository.
- -antigen-ensure-repo "${bundle[url]}" > /dev/null &!
- pids+=($!)
- else
- WARN "Bundle ${bundle[name]} already cloned locally." PARALLEL
- fi
-
- repositories+=(${bundle[url]})
- done
-
- # Wait for all background processes to end
- while [[ $#pids > 0 ]]; do
- for pid in $pids; do
- # `ps` may diplay an error message such "Signal 18 (CONT) caught by ps
- # (procps-ng version 3.3.9).", see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=732410
- if [[ $(ps -o pid= -p $pid 2>/dev/null) == "" ]]; then
- pids[$pids[(I)$pid]]=()
- fi
- done
- sleep .5
- done
-
- builtin local bundle &> /dev/null
- for bundle in ${_PARALLEL_BUNDLE[@]}; do
- antigen-bundle $bundle
- done
-
-
- WARN "Parallel install done" PARALLEL
- }
-
- # Hooks antigen-apply in order to release hooked functions
- antigen-apply-parallel () {
- WARN "Parallel pre-apply" PARALLEL PRE-APPLY
- #antigen-remove-hook antigen-pre-apply-parallel
- # Hooks antigen-bundle in order to parallel its execution.
- antigen-bundle-parallel () {
- TRACE "antigen-bundle-parallel: $@" PARALLEL
- _PARALLEL_BUNDLE+=("${(j: :)${@}}")
- }
- antigen-add-hook antigen-bundle antigen-bundle-parallel replace
- }
- antigen-add-hook antigen-apply antigen-apply-parallel pre once
-
- antigen-apply-parallel-execute () {
- WARN "Parallel replace-apply" PARALLEL REPLACE-APPLY
- antigen-remove-hook antigen-bundle-parallel
- # Process all parallel bundles.
- antigen-bundle-parallel-execute
-
- unset _PARALLEL_BUNDLE
- antigen-remove-hook antigen-apply-parallel-execute
- antigen-apply
- }
- antigen-add-hook antigen-apply antigen-apply-parallel-execute replace once
-}
-typeset -ga _ZCACHE_BUNDLE_SOURCE _ZCACHE_CAPTURE_BUNDLE
-typeset -g _ZCACHE_CAPTURE_PREFIX
-
-# Generates cache from listed bundles.
-#
-# Iterates over _ANTIGEN_BUNDLE_RECORD and join all needed sources into one,
-# if this is done through -antigen-load-list.
-# Result is stored in ANTIGEN_CACHE.
-#
-# _ANTIGEN_BUNDLE_RECORD and fpath is stored in cache.
-#
-# Usage
-# -zcache-generate-cache
-#
-# Returns
-# Nothing. Generates ANTIGEN_CACHE
--antigen-cache-generate () {
- local -aU _fpath _PATH _sources
- local record
-
- LOG "Gonna generate cache for $_ZCACHE_BUNDLE_SOURCE"
- for record in $_ZCACHE_BUNDLE_SOURCE; do
- record=${record:A}
- # LOG "Caching $record"
- if [[ -f $record ]]; then
- # Adding $'\n' as a suffix as j:\n: doesn't work inside a heredoc.
- if [[ $_ANTIGEN_THEME_COMPAT == true && "$record" == *.zsh-theme* ]]; then
- local compat="${record:A}.antigen-compat"
- echo "# Generated by Antigen. Do not edit!" >! "$compat"
- cat $record | sed -Ee '/\{$/,/^\}/!{
- s/^local //
- }' >>! "$compat"
- record="$compat"
- fi
- _sources+=("source '${record}';"$'\n')
- elif [[ -d $record ]]; then
- _PATH+=("${record}")
- _fpath+=("${record}")
- fi
- done
-
-cat > $ANTIGEN_CACHE <<EOC
-#-- START ZCACHE GENERATED FILE
-#-- GENERATED: $(date)
-#-- ANTIGEN v2.2.2
-$(functions -- _antigen)
-antigen () {
- local MATCH MBEGIN MEND
- [[ "\$ZSH_EVAL_CONTEXT" =~ "toplevel:*" || "\$ZSH_EVAL_CONTEXT" =~ "cmdarg:*" ]] && source "$_ANTIGEN_INSTALL_DIR/antigen.zsh" && eval antigen \$@;
- return 0;
-}
-typeset -gaU fpath path
-fpath+=(${_fpath[@]}) path+=(${_PATH[@]})
-_antigen_compinit () {
- autoload -Uz compinit; compinit -d "$ANTIGEN_COMPDUMP"; compdef _antigen antigen
- add-zsh-hook -D precmd _antigen_compinit
-}
-autoload -Uz add-zsh-hook; add-zsh-hook precmd _antigen_compinit
-compdef () {}
-
-if [[ -n "$ZSH" ]]; then
- ZSH="$ZSH"; ZSH_CACHE_DIR="$ZSH_CACHE_DIR"
-fi
-#--- BUNDLES BEGIN
-${(j::)_sources}
-#--- BUNDLES END
-typeset -gaU _ANTIGEN_BUNDLE_RECORD; _ANTIGEN_BUNDLE_RECORD=($(print ${(qq)_ANTIGEN_BUNDLE_RECORD}))
-typeset -g _ANTIGEN_CACHE_LOADED; _ANTIGEN_CACHE_LOADED=true
-typeset -ga _ZCACHE_BUNDLE_SOURCE; _ZCACHE_BUNDLE_SOURCE=($(print ${(qq)_ZCACHE_BUNDLE_SOURCE}))
-typeset -g _ANTIGEN_CACHE_VERSION; _ANTIGEN_CACHE_VERSION='v2.2.2'
-
-#-- END ZCACHE GENERATED FILE
-EOC
-
- { zcompile "$ANTIGEN_CACHE" } &!
-
- # Compile config files, if any
- LOG "CHECK_FILES $ANTIGEN_CHECK_FILES"
- [[ $ANTIGEN_AUTO_CONFIG == true && -n $ANTIGEN_CHECK_FILES ]] && {
- echo ${(j:\n:)ANTIGEN_CHECK_FILES} >! "$ANTIGEN_RSRC"
- for rsrc in $ANTIGEN_CHECK_FILES; do
- zcompile $rsrc
- done
- } &!
-
- return true
-}
-
-# Initializes caching mechanism.
-#
-# Hooks `antigen-bundle` and `antigen-apply` in order to defer bundle install
-# and load. All bundles are loaded from generated cache rather than dynamically
-# as these are bundled.
-#
-# Usage
-# -antigen-cache-init
-# Returns
-# Nothing
--antigen-cache-init () {
- if -antigen-interactive-mode; then
- return 1
- fi
-
- _ZCACHE_CAPTURE_PREFIX=${_ZCACHE_CAPTURE_PREFIX:-"--zcache-"}
- _ZCACHE_BUNDLE_SOURCE=(); _ZCACHE_CAPTURE_BUNDLE=()
-
- # Cache auto config files to check for changes (.zshrc, .antigenrc etc)
- -antigen-set-default ANTIGEN_AUTO_CONFIG true
-
- # Default cache path.
- -antigen-set-default ANTIGEN_CACHE $ADOTDIR/init.zsh
- -antigen-set-default ANTIGEN_RSRC $ADOTDIR/.resources
- if [[ $ANTIGEN_CACHE == false ]]; then
- return 1
- fi
-
- return 0
-}
-
--antigen-cache-execute () {
- # Main function. Deferred antigen-apply.
- antigen-apply-cached () {
- # TRACE "APPLYING CACHE" EXT
- # Auto determine check_files
- # There always should be 5 steps from original source as the correct way is to use
- # `antigen` wrapper not `antigen-apply` directly and it's called by an extension.
- LOG "TRACE: ${funcfiletrace}"
- if [[ $ANTIGEN_AUTO_CONFIG == true && $#ANTIGEN_CHECK_FILES -eq 0 ]]; then
- ANTIGEN_CHECK_FILES+=(~/.zshrc)
- if [[ $#funcfiletrace -ge 6 ]]; then
- ANTIGEN_CHECK_FILES+=("${${funcfiletrace[6]%:*}##* }")
- fi
- fi
-
- # Generate and compile cache
- -antigen-cache-generate
- [[ -f "$ANTIGEN_CACHE" ]] && source "$ANTIGEN_CACHE";
-
- # Commented out in order to have a working `cache-gen` command
- #unset _ZCACHE_BUNDLE_SOURCE
- unset _ZCACHE_CAPTURE_BUNDLE _ZCACHE_CAPTURE_FUNCTIONS
-
- # Release all hooked functions
- antigen-remove-hook -antigen-load-env-cached
- antigen-remove-hook -antigen-load-source-cached
- antigen-remove-hook antigen-bundle-cached
- }
-
- antigen-add-hook antigen-apply antigen-apply-cached post once
-
- # Defer antigen-bundle.
- antigen-bundle-cached () {
- _ZCACHE_CAPTURE_BUNDLE+=("${(j: :)${@}}")
- }
- antigen-add-hook antigen-bundle antigen-bundle-cached pre
-
- # Defer loading.
- -antigen-load-env-cached () {
- local bundle
- typeset -A bundle; bundle=($@)
- local location=${bundle[dir]}/${bundle[loc]}
-
- # Load to path if there is no sourceable
- if [[ ${bundle[loc]} == "/" ]]; then
- _ZCACHE_BUNDLE_SOURCE+=("${location}")
- return
- fi
-
- _ZCACHE_BUNDLE_SOURCE+=("${location}")
- }
- antigen-add-hook -antigen-load-env -antigen-load-env-cached replace
-
- # Defer sourcing.
- -antigen-load-source-cached () {
- _ZCACHE_BUNDLE_SOURCE+=($@)
- }
- antigen-add-hook -antigen-load-source -antigen-load-source-cached replace
-
- return 0
-}
-
-# Generate static-cache file at $ANTIGEN_CACHE using currently loaded
-# bundles from $_ANTIGEN_BUNDLE_RECORD
-#
-# Usage
-# antigen-cache-gen
-#
-# Returns
-# Nothing
-antigen-cache-gen () {
- -antigen-cache-generate
-}
-#compdef _antigen
-# Setup antigen's autocompletion
-_antigen () {
- local -a _1st_arguments
- _1st_arguments=(
- 'apply:Load all bundle completions'
- 'bundle:Install and load the given plugin'
- 'bundles:Bulk define bundles'
- 'cleanup:Clean up the clones of repos which are not used by any bundles currently loaded'
- 'cache-gen:Generate cache'
- 'init:Load Antigen configuration from file'
- 'list:List out the currently loaded bundles'
- 'purge:Remove a cloned bundle from filesystem'
- 'reset:Clears cache'
- 'restore:Restore the bundles state as specified in the snapshot'
- 'revert:Revert the state of all bundles to how they were before the last antigen update'
- 'selfupdate:Update antigen itself'
- 'snapshot:Create a snapshot of all the active clones'
- 'theme:Switch the prompt theme'
- 'update:Update all bundles'
- 'use:Load any (supported) zsh pre-packaged framework'
- );
-
- _1st_arguments+=(
- 'help:Show this message'
- 'version:Display Antigen version'
- )
-
- __bundle() {
- _arguments \
- '--loc[Path to the location <path-to/location>]' \
- '--url[Path to the repository <github-account/repository>]' \
- '--branch[Git branch name]' \
- '--no-local-clone[Do not create a clone]'
- }
- __list() {
- _arguments \
- '--simple[Show only bundle name]' \
- '--short[Show only bundle name and branch]' \
- '--long[Show bundle records]'
- }
-
-
- __cleanup() {
- _arguments \
- '--force[Do not ask for confirmation]'
- }
-
- _arguments '*:: :->command'
-
- if (( CURRENT == 1 )); then
- _describe -t commands "antigen command" _1st_arguments
- return
- fi
-
- local -a _command_args
- case "$words[1]" in
- bundle)
- __bundle
- ;;
- use)
- compadd "$@" "oh-my-zsh" "prezto"
- ;;
- cleanup)
- __cleanup
- ;;
- (update|purge)
- compadd $(type -f \-antigen-get-bundles &> /dev/null || antigen &> /dev/null; -antigen-get-bundles --simple 2> /dev/null)
- ;;
- theme)
- compadd $(type -f \-antigen-get-themes &> /dev/null || antigen &> /dev/null; -antigen-get-themes 2> /dev/null)
- ;;
- list)
- __list
- ;;
- esac
-}
-zmodload zsh/datetime
-ANTIGEN_DEBUG_LOG=${ANTIGEN_DEBUG_LOG:-${ADOTDIR:-$HOME/.antigen}/debug.log}
-LOG () {
- local PREFIX="[LOG][${EPOCHREALTIME}]"
- echo "${PREFIX} ${funcfiletrace[1]}\n${PREFIX} $@" >> $ANTIGEN_DEBUG_LOG
-}
-
-ERR () {
- local PREFIX="[ERR][${EPOCHREALTIME}]"
- echo "${PREFIX} ${funcfiletrace[1]}\n${PREFIX} $@" >> $ANTIGEN_DEBUG_LOG
-}
-
-WARN () {
- local PREFIX="[WRN][${EPOCHREALTIME}]"
- echo "${PREFIX} ${funcfiletrace[1]}\n${PREFIX} $@" >> $ANTIGEN_DEBUG_LOG
-}
-
-TRACE () {
- local PREFIX="[TRA][${EPOCHREALTIME}]"
- echo "${PREFIX} ${funcfiletrace[1]}\n${PREFIX} $@\n${PREFIX} ${(j:\n:)funcstack}" >> $ANTIGEN_DEBUG_LOG
-}
--antigen-env-setup
diff --git a/.config/zsh/functions b/.config/zsh/functions
new file mode 100644
index 0000000..ede0039
--- /dev/null
+++ b/.config/zsh/functions
@@ -0,0 +1,31 @@
+# Function to source files if they exist
+function zsh_add_file() {
+ [ -f "$ZDOTDIR/$1" ] && source "$ZDOTDIR/$1"
+}
+
+function zsh_add_plugin() {
+ PLUGIN_NAME=$(echo $1 | cut -d "/" -f 2)
+ if [ -d "$ZDOTDIR/plugins/$PLUGIN_NAME" ]; then
+ # For plugins
+ zsh_add_file "plugins/$PLUGIN_NAME/$PLUGIN_NAME.plugin.zsh" || \
+ zsh_add_file "plugins/$PLUGIN_NAME/$PLUGIN_NAME.zsh"
+ else
+ git clone "https://github.com/$1.git" "$ZDOTDIR/plugins/$PLUGIN_NAME"
+ fi
+}
+
+function zsh_add_completion() {
+ PLUGIN_NAME=$(echo $1 | cut -d "/" -f 2)
+ if [ -d "$ZDOTDIR/plugins/$PLUGIN_NAME" ]; then
+ # For completions
+ completion_file_path=$(ls $ZDOTDIR/plugins/$PLUGIN_NAME/_*)
+ fpath+="$(dirname "${completion_file_path}")"
+ zsh_add_file "plugins/$PLUGIN_NAME/$PLUGIN_NAME.plugin.zsh"
+ else
+ git clone "https://github.com/$1.git" "$ZDOTDIR/plugins/$PLUGIN_NAME"
+ fpath+=$(ls $ZDOTDIR/plugins/$PLUGIN_NAME/_*)
+ [ -f $ZDOTDIR/.zccompdump ] && $ZDOTDIR/.zccompdump
+ fi
+ completion_file="$(basename "${completion_file_path}")"
+ if [ "$2" = true ] && compinit "${completion_file:1}"
+}
diff --git a/.config/zsh/functions.zsh b/.config/zsh/functions.zsh
deleted file mode 100644
index 303e91c..0000000
--- a/.config/zsh/functions.zsh
+++ /dev/null
@@ -1,29 +0,0 @@
-# Change cursor shape for different vi modes.
-function zle-keymap-select {
- if [[ ${KEYMAP} == vicmd ]]
- [[ $1 = 'block' ]]; then
- echo -ne '\e[1 q'
-
- elif [[ ${KEYMAP} == main ]]
- [[ ${KEYMAP} == viins ]]
- [[ ${KEYMAP} = '' ]]
- [[ $1 = 'beam' ]]; then
- echo -ne '\e[5 q'
- fi
-}
-
-
-# Prompt called purs
-function zle-line-init zle-keymap-select {
- PROMPT=`$HOME/.local/src/purs/target/release/purs prompt -k "$KEYMAP" -r "$?" --venv "${${VIRTUAL_ENV:t}%-*}"`
- zle reset-prompt
-}
-zle -N zle-line-init
-zle -N zle-keymap-select
-
-autoload -Uz add-zsh-hook
-
-function _prompt_purs_precmd() {
- /$HOME/.local/src/purs/target/release/purs precmd
-}
-add-zsh-hook precmd _prompt_purs_precmd
diff --git a/.config/zsh/plugins.zsh b/.config/zsh/plugins.zsh
deleted file mode 100644
index 7da3a07..0000000
--- a/.config/zsh/plugins.zsh
+++ /dev/null
@@ -1,28 +0,0 @@
-autoload -Uz compinit
-compinit
-
-# Poetry autocompletion
-fpath+=~/.zfunc
-
-# kubectl autocompletion
-# [[ $commands[kubectl] ]] && source <(kubectl completion zsh)
-
-# FZF
-source /usr/share/fzf/key-bindings.zsh
-source /usr/share/fzf/completion.zsh
-
-# Antigen
-source $HOME/.config/zsh/antigen.zsh
-
-# Load Packages
-antigen bundle tmux
-antigen bundle git
-antigen bundle pip
-# antigen bundle kubectl
-antigen bundle command-not-found
-antigen bundle zsh-users/zsh-syntax-highlighting
-antigen bundle zsh-users/zsh-history-substring-search ./zsh-history-substring-search.zsh
-antigen bundle zsh-users/zsh-autosuggestions
-
-# Done
-antigen apply
diff --git a/.config/zsh/prompt b/.config/zsh/prompt
new file mode 100644
index 0000000..f0a86dc
--- /dev/null
+++ b/.config/zsh/prompt
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+## autoload vcs and colors
+autoload -Uz vcs_info
+autoload -U colors && colors
+
+# enable only git
+zstyle ':vcs_info:*' enable git
+
+# setup a hook that runs before every ptompt.
+precmd_vcs_info() { vcs_info }
+precmd_functions+=( precmd_vcs_info )
+setopt prompt_subst
+
+# add a function to check for untracked files in the directory.
+# from https://github.com/zsh-users/zsh/blob/master/Misc/vcs_info-examples
+zstyle ':vcs_info:git*+set-message:*' hooks git-untracked
+#
++vi-git-untracked(){
+ if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' ]] && \
+ git status --porcelain | grep '??' &> /dev/null ; then
+ # This will show the marker if there are any untracked files in repo.
+ # If instead you want to show the marker only if there are untracked
+ # files in $PWD, use:
+ #[[ -n $(git ls-files --others --exclude-standard) ]] ; then
+ hook_com[staged]+='!' # signify new files with a bang
+ fi
+}
+
+zstyle ':vcs_info:*' check-for-changes true
+# zstyle ':vcs_info:git:*' formats " %r/%S %b %m%u%c "
+zstyle ':vcs_info:git:*' formats " %{$fg[blue]%}(%{$fg[red]%}%m%u%c%{$fg[yellow]%}%{$fg[magenta]%} %b%{$fg[blue]%})"
+
+# format our main prompt for hostname current folder, and permissions.
+PROMPT="%B%{$fg[blue]%}[%{$fg[white]%}%n%{$fg[red]%}@%{$fg[white]%}%m%{$fg[blue]%}] %(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )%{$fg[cyan]%}%c%{$reset_color%}"
+# PROMPT="%{$fg[green]%}%n@%m %~ %{$reset_color%}%#> "
+PROMPT+="\$vcs_info_msg_0_ "
+# TODO look into this for more colors
+# https://stevelosh.com/blog/2010/02/my-extravagant-zsh-prompt/
+# also ascii escape codes
diff --git a/.config/zsh/vi-mode b/.config/zsh/vi-mode
new file mode 100644
index 0000000..fe4dd48
--- /dev/null
+++ b/.config/zsh/vi-mode
@@ -0,0 +1,28 @@
+# bindkey -e will be emacs mode
+bindkey -v
+export KEYTIMEOUT=1
+
+# Use vim keys in tab complete menu:
+bindkey -M menuselect '^h' vi-backward-char
+bindkey -M menuselect '^k' vi-up-line-or-history
+bindkey -M menuselect '^l' vi-forward-char
+bindkey -M menuselect '^j' vi-down-line-or-history
+bindkey -v '^?' backward-delete-char
+
+# Change cursor shape for different vi modes.
+function zle-keymap-select () {
+ case $KEYMAP in
+ vicmd) echo -ne '\e[1 q';; # block
+ viins|main) echo -ne '\e[5 q';; # beam
+ esac
+}
+
+zle -N zle-keymap-select
+zle-line-init() {
+ zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
+ echo -ne "\e[5 q"
+}
+
+zle -N zle-line-init
+echo -ne '\e[5 q' # Use beam shape cursor on startup.
+preexec() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt.