+# Distributed under the GNU General Public License, version 2.0.
+#
+# This script allows you to see repository status in your prompt.
+#
+# To enable:
+#
+# 1) Copy this file to somewhere (e.g. ~/.git-prompt.sh).
+# 2) Add the following line to your .bashrc/.zshrc:
+# source ~/.git-prompt.sh
+# 3a) Change your PS1 to call __git_ps1 as
+# command-substitution:
+# Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
+# ZSH: setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
+# the optional argument will be used as format string.
+# 3b) Alternatively, for a slightly faster prompt, __git_ps1 can
+# be used for PROMPT_COMMAND in Bash or for precmd() in Zsh
+# with two parameters, and , which are strings
+# you would put in $PS1 before and after the status string
+# generated by the git-prompt machinery. e.g.
+# Bash: PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'
+# will show username, at-sign, host, colon, cwd, then
+# various status string, followed by dollar and SP, as
+# your prompt.
+# ZSH: precmd () { __git_ps1 "%n" ":%~$ " "|%s" }
+# will show username, pipe, then various status string,
+# followed by colon, cwd, dollar and SP, as your prompt.
+# Optionally, you can supply a third argument with a printf
+# format string to finetune the output of the branch status
+#
+# The repository status will be displayed only if you are currently in a
+# git repository. The %s token is the placeholder for the shown status.
+#
+# The prompt status always includes the current branch name.
+#
+# In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty value,
+# unstaged (*) and staged (+) changes will be shown next to the branch
+# name. You can configure this per-repository with the
+# bash.showDirtyState variable, which defaults to true once
+# GIT_PS1_SHOWDIRTYSTATE is enabled.
+#
+# You can also see if currently something is stashed, by setting
+# GIT_PS1_SHOWSTASHSTATE to a nonempty value. If something is stashed,
+# then a '$' will be shown next to the branch name.
+#
+# If you would like to see if there're untracked files, then you can set
+# GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're untracked
+# files, then a '%' will be shown next to the branch name. You can
+# configure this per-repository with the bash.showUntrackedFiles
+# variable, which defaults to true once GIT_PS1_SHOWUNTRACKEDFILES is
+# enabled.
+#
+# If you would like to see the difference between HEAD and its upstream,
+# set GIT_PS1_SHOWUPSTREAM="auto". A "<" indicates you are behind, ">"
+# indicates you are ahead, "<>" indicates you have diverged and "="
+# indicates that there is no difference. You can further control
+# behaviour by setting GIT_PS1_SHOWUPSTREAM to a space-separated list
+# of values:
+#
+# verbose show number of commits ahead/behind (+/-) upstream
+# name if verbose, then also show the upstream abbrev name
+# legacy don't use the '--count' option available in recent
+# versions of git-rev-list
+# git always compare HEAD to @{upstream}
+# svn always compare HEAD to your SVN upstream
+#
+# You can change the separator between the branch name and the above
+# state symbols by setting GIT_PS1_STATESEPARATOR. The default separator
+# is SP.
+#
+# By default, __git_ps1 will compare HEAD to your SVN upstream if it can
+# find one, or @{upstream} otherwise. Once you have set
+# GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
+# setting the bash.showUpstream config variable.
+#
+# If you would like to see more information about the identity of
+# commits checked out as a detached HEAD, set GIT_PS1_DESCRIBE_STYLE
+# to one of these values:
+#
+# contains relative to newer annotated tag (v1.6.3.2~35)
+# branch relative to newer tag or branch (master~4)
+# describe relative to older annotated tag (v1.6.3.1-13-gdd42c2f)
+# tag relative to any older tag (v1.6.3.1-13-gdd42c2f)
+# default exactly matching tag
+#
+# If you would like a colored hint about the current dirty state, set
+# GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
+# the colored output of "git status -sb" and are available only when
+# using __git_ps1 for PROMPT_COMMAND or precmd.
+#
+# If you would like __git_ps1 to do nothing in the case when the current
+# directory is set up to be ignored by git, then set
+# GIT_PS1_HIDE_IF_PWD_IGNORED to a nonempty value. Override this on the
+# repository level by setting bash.hideIfPwdIgnored to "false".
+
+# check whether printf supports -v
+__git_printf_supports_v=
+printf -v __git_printf_supports_v -- '%s' yes >/dev/null 2>&1
+
+# stores the divergence from upstream in $p
+# used by GIT_PS1_SHOWUPSTREAM
+__git_ps1_show_upstream ()
+{
+ local key value
+ local svn_remote svn_url_pattern count n
+ local upstream=git legacy="" verbose="" name=""
+
+ svn_remote=()
+ # get some config options from git-config
+ local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')"
+ while read -r key value; do
+ case "$key" in
+ bash.showupstream)
+ GIT_PS1_SHOWUPSTREAM="$value"
+ if [[ -z "${GIT_PS1_SHOWUPSTREAM}" ]]; then
+ p=""
+ return
+ fi
+ ;;
+ svn-remote.*.url)
+ svn_remote[$((${#svn_remote[@]} + 1))]="$value"
+ svn_url_pattern="$svn_url_pattern\\|$value"
+ upstream=svn+git # default upstream is SVN if available, else git
+ ;;
+ esac
+ done <<< "$output"
+
+ # parse configuration values
+ for option in ${GIT_PS1_SHOWUPSTREAM}; do
+ case "$option" in
+ git|svn) upstream="$option" ;;
+ verbose) verbose=1 ;;
+ legacy) legacy=1 ;;
+ name) name=1 ;;
+ esac
+ done
+
+ # Find our upstream
+ case "$upstream" in
+ git) upstream="@{upstream}" ;;
+ svn*)
+ # get the upstream from the "git-svn-id: ..." in a commit message
+ # (git-svn uses essentially the same procedure internally)
+ local -a svn_upstream
+ svn_upstream=($(git log --first-parent -1 \
+ --grep="^git-svn-id: \(${svn_url_pattern#??}\)" 2>/dev/null))
+ if [[ 0 -ne ${#svn_upstream[@]} ]]; then
+ svn_upstream=${svn_upstream[${#svn_upstream[@]} - 2]}
+ svn_upstream=${svn_upstream%@*}
+ local n_stop="${#svn_remote[@]}"
+ for ((n=1; n <= n_stop; n++)); do
+ svn_upstream=${svn_upstream#${svn_remote[$n]}}
+ done
+
+ if [[ -z "$svn_upstream" ]]; then
+ # default branch name for checkouts with no layout:
+ upstream=${GIT_SVN_ID:-git-svn}
+ else
+ upstream=${svn_upstream#/}
+ fi
+ elif [[ "svn+git" = "$upstream" ]]; then
+ upstream="@{upstream}"
+ fi
+ ;;
+ esac
+
+ # Find how many commits we are ahead/behind our upstream
+ if [[ -z "$legacy" ]]; then
+ count="$(git rev-list --count --left-right \
+ "$upstream"...HEAD 2>/dev/null)"
+ else
+ # produce equivalent output to --count for older versions of git
+ local commits
+ if commits="$(git rev-list --left-right "$upstream"...HEAD 2>/dev/null)"
+ then
+ local commit behind=0 ahead=0
+ for commit in $commits
+ do
+ case "$commit" in
+ "<"*) ((behind++)) ;;
+ *) ((ahead++)) ;;
+ esac
+ done
+ count="$behind $ahead"
+ else
+ count=""
+ fi
+ fi
+
+ # calculate the result
+ if [[ -z "$verbose" ]]; then
+ case "$count" in
+ "") # no upstream
+ p="" ;;
+ "0 0") # equal to upstream
+ p="=" ;;
+ "0 "*) # ahead of upstream
+ p=">" ;;
+ *" 0") # behind upstream
+ p="<" ;;
+ *) # diverged from upstream
+ p="<>" ;;
+ esac
+ else
+ case "$count" in
+ "") # no upstream
+ p="" ;;
+ "0 0") # equal to upstream
+ p=" u=" ;;
+ "0 "*) # ahead of upstream
+ p=" u+${count#0 }" ;;
+ *" 0") # behind upstream
+ p=" u-${count% 0}" ;;
+ *) # diverged from upstream
+ p=" u+${count#* }-${count% *}" ;;
+ esac
+ if [[ -n "$count" && -n "$name" ]]; then
+ __git_ps1_upstream_name=$(git rev-parse \
+ --abbrev-ref "$upstream" 2>/dev/null)
+ if [ "$pcmode" = yes ] && [ "$ps1_expanded" = yes ]; then
+ p="$p \${__git_ps1_upstream_name}"
+ else
+ p="$p ${__git_ps1_upstream_name}"
+ # not needed anymore; keep user's
+ # environment clean
+ unset __git_ps1_upstream_name
+ fi
+ fi
+ fi
+
+}
+
+# Helper function that is meant to be called from __git_ps1. It
+# injects color codes into the appropriate gitstring variables used
+# to build a gitstring.
+__git_ps1_colorize_gitstring ()
+{
+ if [[ -n "${ZSH_VERSION-}" ]]; then
+ local c_red='%F{red}'
+ local c_green='%F{green}'
+ local c_lblue='%F{blue}'
+ local c_clear='%f'
+ else
+ # Using \[ and \] around colors is necessary to prevent
+ # issues with command line editing/browsing/completion!
+ local c_red='\[\e[31m\]'
+ local c_green='\[\e[32m\]'
+ local c_lblue='\[\e[1;34m\]'
+ local c_clear='\[\e[0m\]'
+ fi
+ local bad_color=$c_red
+ local ok_color=$c_green
+ local flags_color="$c_lblue"
+
+ local branch_color=""
+ if [ "$detached" = no ]; then
+ branch_color="$ok_color"
+ else
+ branch_color="$bad_color"
+ fi
+ c="$branch_color$c"
+
+ z="$c_clear$z"
+ if [ "$w" = "*" ]; then
+ w="$bad_color$w"
+ fi
+ if [ -n "$i" ]; then
+ i="$ok_color$i"
+ fi
+ if [ -n "$s" ]; then
+ s="$flags_color$s"
+ fi
+ if [ -n "$u" ]; then
+ u="$bad_color$u"
+ fi
+ r="$c_clear$r"
+}
+
+# Helper function to read the first line of a file into a variable.
+# __git_eread requires 2 arguments, the file path and the name of the
+# variable, in that order.
+__git_eread ()
+{
+ test -r "$1" && IFS=$'\r\n' read "$2" <"$1"
+}
+
+# __git_ps1 accepts 0 or 1 arguments (i.e., format string)
+# when called from PS1 using command substitution
+# in this mode it prints text to add to bash PS1 prompt (includes branch name)
+#
+# __git_ps1 requires 2 or 3 arguments when called from PROMPT_COMMAND (pc)
+# in that case it _sets_ PS1. The arguments are parts of a PS1 string.
+# when two arguments are given, the first is prepended and the second appended
+# to the state string when assigned to PS1.
+# The optional third parameter will be used as printf format string to further
+# customize the output of the git-status string.
+# In this mode you can request colored hints using GIT_PS1_SHOWCOLORHINTS=true
+__git_ps1 ()
+{
+ # preserve exit status
+ local exit=$?
+ local pcmode=no
+ local detached=no
+ local ps1pc_start='\u@\h:\w '
+ local ps1pc_end='\$ '
+ local printf_format=' (%s)'
+
+ case "$#" in
+ 2|3) pcmode=yes
+ ps1pc_start="$1"
+ ps1pc_end="$2"
+ printf_format="${3:-$printf_format}"
+ # set PS1 to a plain prompt so that we can
+ # simply return early if the prompt should not
+ # be decorated
+ PS1="$ps1pc_start$ps1pc_end"
+ ;;
+ 0|1) printf_format="${1:-$printf_format}"
+ ;;
+ *) return $exit
+ ;;
+ esac
+
+ # ps1_expanded: This variable is set to 'yes' if the shell
+ # subjects the value of PS1 to parameter expansion:
+ #
+ # * bash does unless the promptvars option is disabled
+ # * zsh does not unless the PROMPT_SUBST option is set
+ # * POSIX shells always do
+ #
+ # If the shell would expand the contents of PS1 when drawing
+ # the prompt, a raw ref name must not be included in PS1.
+ # This protects the user from arbitrary code execution via
+ # specially crafted ref names. For example, a ref named
+ # 'refs/heads/$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)' might cause the
+ # shell to execute 'sudo rm -rf /' when the prompt is drawn.
+ #
+ # Instead, the ref name should be placed in a separate global
+ # variable (in the __git_ps1_* namespace to avoid colliding
+ # with the user's environment) and that variable should be
+ # referenced from PS1. For example:
+ #
+ # __git_ps1_foo=$(do_something_to_get_ref_name)
+ # PS1="...stuff...\${__git_ps1_foo}...stuff..."
+ #
+ # If the shell does not expand the contents of PS1, the raw
+ # ref name must be included in PS1.
+ #
+ # The value of this variable is only relevant when in pcmode.
+ #
+ # Assume that the shell follows the POSIX specification and
+ # expands PS1 unless determined otherwise. (This is more
+ # likely to be correct if the user has a non-bash, non-zsh
+ # shell and safer than the alternative if the assumption is
+ # incorrect.)
+ #
+ local ps1_expanded=yes
+ [ -z "${ZSH_VERSION-}" ] || [[ -o PROMPT_SUBST ]] || ps1_expanded=no
+ [ -z "${BASH_VERSION-}" ] || shopt -q promptvars || ps1_expanded=no
+
+ local repo_info rev_parse_exit_code
+ repo_info="$(git rev-parse --git-dir --is-inside-git-dir \
+ --is-bare-repository --is-inside-work-tree \
+ --short HEAD 2>/dev/null)"
+ rev_parse_exit_code="$?"
+
+ if [ -z "$repo_info" ]; then
+ return $exit
+ fi
+
+ local short_sha=""
+ if [ "$rev_parse_exit_code" = "0" ]; then
+ short_sha="${repo_info##*$'\n'}"
+ repo_info="${repo_info%$'\n'*}"
+ fi
+ local inside_worktree="${repo_info##*$'\n'}"
+ repo_info="${repo_info%$'\n'*}"
+ local bare_repo="${repo_info##*$'\n'}"
+ repo_info="${repo_info%$'\n'*}"
+ local inside_gitdir="${repo_info##*$'\n'}"
+ local g="${repo_info%$'\n'*}"
+
+ if [ "true" = "$inside_worktree" ] &&
+ [ -n "${GIT_PS1_HIDE_IF_PWD_IGNORED-}" ] &&
+ [ "$(git config --bool bash.hideIfPwdIgnored)" != "false" ] &&
+ git check-ignore -q .
+ then
+ return $exit
+ fi
+
+ local r=""
+ local b=""
+ local step=""
+ local total=""
+ if [ -d "$g/rebase-merge" ]; then
+ __git_eread "$g/rebase-merge/head-name" b
+ __git_eread "$g/rebase-merge/msgnum" step
+ __git_eread "$g/rebase-merge/end" total
+ if [ -f "$g/rebase-merge/interactive" ]; then
+ r="|REBASE-i"
+ else
+ r="|REBASE-m"
+ fi
+ else
+ if [ -d "$g/rebase-apply" ]; then
+ __git_eread "$g/rebase-apply/next" step
+ __git_eread "$g/rebase-apply/last" total
+ if [ -f "$g/rebase-apply/rebasing" ]; then
+ __git_eread "$g/rebase-apply/head-name" b
+ r="|REBASE"
+ elif [ -f "$g/rebase-apply/applying" ]; then
+ r="|AM"
+ else
+ r="|AM/REBASE"
+ fi
+ elif [ -f "$g/MERGE_HEAD" ]; then
+ r="|MERGING"
+ elif [ -f "$g/CHERRY_PICK_HEAD" ]; then
+ r="|CHERRY-PICKING"
+ elif [ -f "$g/REVERT_HEAD" ]; then
+ r="|REVERTING"
+ elif [ -f "$g/BISECT_LOG" ]; then
+ r="|BISECTING"
+ fi
+
+ if [ -n "$b" ]; then
+ :
+ elif [ -h "$g/HEAD" ]; then
+ # symlink symbolic ref
+ b="$(git symbolic-ref HEAD 2>/dev/null)"
+ else
+ local head=""
+ if ! __git_eread "$g/HEAD" head; then
+ return $exit
+ fi
+ # is it a symbolic ref?
+ b="${head#ref: }"
+ if [ "$head" = "$b" ]; then
+ detached=yes
+ b="$(
+ case "${GIT_PS1_DESCRIBE_STYLE-}" in
+ (contains)
+ git describe --contains HEAD ;;
+ (branch)
+ git describe --contains --all HEAD ;;
+ (tag)
+ git describe --tags HEAD ;;
+ (describe)
+ git describe HEAD ;;
+ (* | default)
+ git describe --tags --exact-match HEAD ;;
+ esac 2>/dev/null)" ||
+
+ b="$short_sha..."
+ b="($b)"
+ fi
+ fi
+ fi
+
+ if [ -n "$step" ] && [ -n "$total" ]; then
+ r="$r $step/$total"
+ fi
+
+ local w=""
+ local i=""
+ local s=""
+ local u=""
+ local c=""
+ local p=""
+
+ if [ "true" = "$inside_gitdir" ]; then
+ if [ "true" = "$bare_repo" ]; then
+ c="BARE:"
+ else
+ b="GIT_DIR!"
+ fi
+ elif [ "true" = "$inside_worktree" ]; then
+ if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] &&
+ [ "$(git config --bool bash.showDirtyState)" != "false" ]
+ then
+ git diff --no-ext-diff --quiet || w="*"
+ git diff --no-ext-diff --cached --quiet || i="+"
+ if [ -z "$short_sha" ] && [ -z "$i" ]; then
+ i="#"
+ fi
+ fi
+ if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ] &&
+ git rev-parse --verify --quiet refs/stash >/dev/null
+ then
+ s="$"
+ fi
+
+ if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] &&
+ [ "$(git config --bool bash.showUntrackedFiles)" != "false" ] &&
+ git ls-files --others --exclude-standard --directory --no-empty-directory --error-unmatch -- ':/*' >/dev/null 2>/dev/null
+ then
+ u="%${ZSH_VERSION+%}"
+ fi
+
+ if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then
+ __git_ps1_show_upstream
+ fi
+ fi
+
+ local z="${GIT_PS1_STATESEPARATOR-" "}"
+
+ # NO color option unless in PROMPT_COMMAND mode or it's Zsh
+ if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
+ if [ "$pcmode" = yes ] || [ -n "${ZSH_VERSION-}" ]; then
+ __git_ps1_colorize_gitstring
+ fi
+ fi
+
+ b=${b##refs/heads/}
+ if [ "$pcmode" = yes ] && [ "$ps1_expanded" = yes ]; then
+ __git_ps1_branch_name=$b
+ b="\${__git_ps1_branch_name}"
+ fi
+
+ local f="$w$i$s$u"
+ local gitstring="$c$b${f:+$z$f}$r$p"
+
+ if [ "$pcmode" = yes ]; then
+ if [ "${__git_printf_supports_v-}" != yes ]; then
+ gitstring=$(printf -- "$printf_format" "$gitstring")
+ else
+ printf -v gitstring -- "$printf_format" "$gitstring"
+ fi
+ PS1="$ps1pc_start$gitstring$ps1pc_end"
+ else
+ printf -- "$printf_format" "$gitstring"
+ fi
+
+ return $exit
+}
diff --git a/zsh/.oh-my-zsh/plugins/gitfast/gitfast.plugin.zsh b/zsh/.oh-my-zsh/plugins/gitfast/gitfast.plugin.zsh
new file mode 100644
index 0000000..7b6b67e
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gitfast/gitfast.plugin.zsh
@@ -0,0 +1,6 @@
+source "${0:A:h}/git-prompt.sh"
+
+function git_prompt_info() {
+ dirty="$(parse_git_dirty)"
+ __git_ps1 "${ZSH_THEME_GIT_PROMPT_PREFIX//\%/%%}%s${dirty//\%/%%}${ZSH_THEME_GIT_PROMPT_SUFFIX//\%/%%}"
+}
diff --git a/zsh/.oh-my-zsh/plugins/gitfast/update b/zsh/.oh-my-zsh/plugins/gitfast/update
new file mode 100755
index 0000000..0505424
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gitfast/update
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+url="https://git.kernel.org/pub/scm/git/git.git/plain/contrib/completion"
+version="2.16.0"
+
+curl -s -o _git "${url}/git-completion.zsh?h=v${version}" &&
+curl -s -o git-completion.bash "${url}/git-completion.bash?h=v${version}" &&
+curl -s -o git-prompt.sh "${url}/git-prompt.sh?h=v${version}" &&
+git apply updates.patch
diff --git a/zsh/.oh-my-zsh/plugins/gitfast/updates.patch b/zsh/.oh-my-zsh/plugins/gitfast/updates.patch
new file mode 100644
index 0000000..28a31f8
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gitfast/updates.patch
@@ -0,0 +1,56 @@
+diff --git b/plugins/gitfast/_git a/plugins/gitfast/_git
+index e2554130..a2e3bef5 100644
+--- b/plugins/gitfast/_git
++++ a/plugins/gitfast/_git
+@@ -30,7 +30,7 @@ if [ -z "$script" ]; then
+ local -a locations
+ local e
+ locations=(
+- $(dirname ${funcsourcetrace[1]%:*})/git-completion.bash
++ "$(dirname ${funcsourcetrace[1]%:*})/git-completion.bash"
+ '/etc/bash_completion.d/git' # fedora, old debian
+ '/usr/share/bash-completion/completions/git' # arch, ubuntu, new debian
+ '/usr/share/bash-completion/git' # gentoo
+@@ -214,8 +214,10 @@ _git ()
+
+ if (( $+functions[__${service}_zsh_main] )); then
+ __${service}_zsh_main
+- else
++ elif (( $+functions[__${service}_main] )); then
+ emulate ksh -c __${service}_main
++ elif (( $+functions[_${service}] )); then
++ emulate ksh -c _${service}
+ fi
+
+ let _ret && _default && _ret=0
+diff --git b/plugins/gitfast/git-completion.bash a/plugins/gitfast/git-completion.bash
+index 9c8f7380..14012cab 100644
+--- b/plugins/gitfast/git-completion.bash
++++ a/plugins/gitfast/git-completion.bash
+@@ -2915,6 +2915,6 @@ __git_complete gitk __gitk_main
+ # when the user has tab-completed the executable name and consequently
+ # included the '.exe' suffix.
+ #
+-if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
++if [[ "$OSTYPE" = cygwin* ]]; then
+ __git_complete git.exe __git_main
+ fi
+diff --git b/plugins/gitfast/git-prompt.sh a/plugins/gitfast/git-prompt.sh
+index 97eacd78..c1de34eb 100644
+--- b/plugins/gitfast/git-prompt.sh
++++ a/plugins/gitfast/git-prompt.sh
+@@ -502,9 +502,11 @@ __git_ps1 ()
+
+ local z="${GIT_PS1_STATESEPARATOR-" "}"
+
+- # NO color option unless in PROMPT_COMMAND mode
+- if [ $pcmode = yes ] && [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
+- __git_ps1_colorize_gitstring
++ # NO color option unless in PROMPT_COMMAND mode or it's Zsh
++ if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
++ if [ $pcmode = yes ] || [ -n "${ZSH_VERSION-}" ]; then
++ __git_ps1_colorize_gitstring
++ fi
+ fi
+
+ b=${b##refs/heads/}
diff --git a/zsh/.oh-my-zsh/plugins/github/README.md b/zsh/.oh-my-zsh/plugins/github/README.md
new file mode 100644
index 0000000..2b66e39
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/github/README.md
@@ -0,0 +1,46 @@
+# github
+
+This plugin supports working with GitHub from the command line. It provides a few things:
+
+* Sets up the `hub` wrapper and completions for the `git` command if you have `hub` installed.
+* Completion for the `github` Ruby gem.
+* Convenience functions for working with repos and URLs.
+
+### Functions
+
+* `empty_gh` - Creates a new empty repo (with a `README.md`) and pushes it to GitHub
+* `new_gh` - Initializes an existing directory as a repo and pushes it to GitHub
+* `exist_gh` - Takes an existing repo and pushes it to GitHub
+* `git.io` - Shortens a URL using [git.io](https://git.io)
+
+
+## Installation
+
+[Hub](https://github.com/github/hub) needs to be installed if you want to use it. On OS X with Homebrew, this can be done with `brew install hub`. The `hub` completion definition needs to be added to your `$FPATH` before initializing OMZ.
+
+The [`github` Ruby gem](https://github.com/defunkt/github-gem) needs to be installed if you want to use it.
+
+### Configuration
+
+These settings affect `github`'s behavior.
+
+#### Environment variables
+
+* `$GITHUB_USER`
+* `$GITHUB_PASSWORD`
+
+#### Git configuration options
+
+* `github.user` - GitHub username for repo operations
+
+See `man hub` for more details.
+
+### Homebrew installation note
+
+If you have installed `hub` using Homebrew, its completions may not be on your `$FPATH` if you are using the system `zsh`. Homebrew installs `zsh` completion definitions to `/usr/local/share/zsh/site-functions`, which will be on `$FPATH` for the Homebrew-installed `zsh`, but not for the system `zsh`. If you want it to work with the system `zsh`, add this to your `~/.zshrc` before it sources `oh-my-zsh.sh`.
+
+```zsh
+if (( ! ${fpath[(I)/usr/local/share/zsh/site-functions]} )); then
+ FPATH=/usr/local/share/zsh/site-functions:$FPATH
+fi
+```
diff --git a/zsh/.oh-my-zsh/plugins/github/_hub b/zsh/.oh-my-zsh/plugins/github/_hub
new file mode 100644
index 0000000..209a3df
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/github/_hub
@@ -0,0 +1,174 @@
+#compdef hub
+
+# Zsh will source this file when attempting to autoload the "_hub" function,
+# typically on the first attempt to complete the hub command. We define two new
+# setup helper routines (one for the zsh-distributed version, one for the
+# git-distributed, bash-based version). Then we redefine the "_hub" function to
+# call "_git" after some other interception.
+#
+# This is pretty fragile, if you think about it. Any number of implementation
+# changes in the "_git" scripts could cause problems down the road. It would be
+# better if the stock git completions were just a bit more permissive about how
+# it allowed third-party commands to be added.
+
+(( $+functions[__hub_setup_zsh_fns] )) ||
+__hub_setup_zsh_fns () {
+ (( $+functions[_git-alias] )) ||
+ _git-alias () {
+ _arguments \
+ '-s[output shell script suitable for eval]' \
+ '1::shell:(zsh bash csh)'
+ }
+
+ (( $+functions[_git-browse] )) ||
+ _git-browse () {
+ _arguments \
+ '-u[output the URL]' \
+ '2::subpage:(wiki commits issues)'
+ }
+
+ (( $+functions[_git-compare] )) ||
+ _git-compare () {
+ _arguments \
+ '-u[output the URL]' \
+ ':[start...]end range:'
+ }
+
+ (( $+functions[_git-create] )) ||
+ _git-create () {
+ _arguments \
+ '::name (REPOSITORY or ORGANIZATION/REPOSITORY):' \
+ '-p[make repository private]' \
+ '-d[description]:description' \
+ '-h[home page]:repository home page URL:_urls'
+ }
+
+ (( $+functions[_git-fork] )) ||
+ _git-fork () {
+ _arguments \
+ '--no-remote[do not add a remote for the new fork]'
+ }
+
+ (( $+functions[_git-pull-request] )) ||
+ _git-pull-request () {
+ _arguments \
+ '-f[force (skip check for local commits)]' \
+ '-b[base]:base ("branch", "owner\:branch", "owner/repo\:branch"):' \
+ '-h[head]:head ("branch", "owner\:branch", "owner/repo\:branch"):' \
+ - set1 \
+ '-m[message]' \
+ '-F[file]' \
+ '--no-edit[use first commit message for pull request title/description]' \
+ '-a[user]' \
+ '-M[milestone]' \
+ '-l[labels]' \
+ - set2 \
+ '-i[issue]:issue number:' \
+ - set3 \
+ '::issue-url:_urls'
+ }
+
+ # stash the "real" command for later
+ functions[_hub_orig_git_commands]=$functions[_git_commands]
+
+ # Replace it with our own wrapper.
+ declare -f _git_commands >& /dev/null && unfunction _git_commands
+ _git_commands () {
+ local ret=1
+ # call the original routine
+ _call_function ret _hub_orig_git_commands
+
+ # Effectively "append" our hub commands to the behavior of the original
+ # _git_commands function. Using this wrapper function approach ensures
+ # that we only offer the user the hub subcommands when the user is
+ # actually trying to complete subcommands.
+ hub_commands=(
+ alias:'show shell instructions for wrapping git'
+ pull-request:'open a pull request on GitHub'
+ pr:'list or checkout a GitHub pull request'
+ issue:'list or create a GitHub issue'
+ release:'list or create a GitHub release'
+ fork:'fork origin repo on GitHub'
+ create:'create new repo on GitHub for the current project'
+ delete:'delete a GitHub repo'
+ browse:'browse the project on GitHub'
+ compare:'open GitHub compare view'
+ ci-status:'show status of GitHub checks for a commit'
+ sync:'update local branches from upstream'
+ )
+ _describe -t hub-commands 'hub command' hub_commands && ret=0
+
+ return ret
+ }
+}
+
+(( $+functions[__hub_setup_bash_fns] )) ||
+__hub_setup_bash_fns () {
+ # TODO more bash-style fns needed here to complete subcommand args. They take
+ # the form "_git_CMD" where "CMD" is something like "pull-request".
+
+ # Duplicate and rename the 'list_all_commands' function
+ eval "$(declare -f __git_list_all_commands | \
+ sed 's/__git_list_all_commands/__git_list_all_commands_without_hub/')"
+
+ # Wrap the 'list_all_commands' function with extra hub commands
+ __git_list_all_commands() {
+ cat <<-EOF
+alias
+pull-request
+pr
+issue
+release
+fork
+create
+delete
+browse
+compare
+ci-status
+sync
+EOF
+ __git_list_all_commands_without_hub
+ }
+
+ # Ensure cached commands are cleared
+ __git_all_commands=""
+}
+
+# redefine _hub to a much smaller function in the steady state
+_hub () {
+ # only attempt to intercept the normal "_git" helper functions once
+ (( $+__hub_func_replacement_done )) ||
+ () {
+ # At this stage in the shell's execution the "_git" function has not yet
+ # been autoloaded, so the "_git_commands" or "__git_list_all_commands"
+ # functions will not be defined. Call it now (with a bogus no-op service
+ # to prevent premature completion) so that we can wrap them.
+ if declare -f _git >& /dev/null ; then
+ _hub_noop () { __hub_zsh_provided=1 } # zsh-provided will call this one
+ __hub_noop_main () { __hub_git_provided=1 } # git-provided will call this one
+ local service=hub_noop
+ _git
+ unfunction _hub_noop
+ unfunction __hub_noop_main
+ service=git
+ fi
+
+ if (( $__hub_zsh_provided )) ; then
+ __hub_setup_zsh_fns
+ elif (( $__hub_git_provided )) ; then
+ __hub_setup_bash_fns
+ fi
+
+ __hub_func_replacement_done=1
+ }
+
+ # Now perform the actual completion, allowing the "_git" function to call our
+ # replacement "_git_commands" function as needed. Both versions expect
+ # service=git or they will call nonexistent routines or end up in an infinite
+ # loop.
+ service=git
+ declare -f _git >& /dev/null && _git
+}
+
+# make sure we actually attempt to complete on the first "tab" from the user
+_hub
diff --git a/zsh/.oh-my-zsh/plugins/github/github.plugin.zsh b/zsh/.oh-my-zsh/plugins/github/github.plugin.zsh
new file mode 100644
index 0000000..8e4b973
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/github/github.plugin.zsh
@@ -0,0 +1,76 @@
+# Set up hub wrapper for git, if it is available; https://github.com/github/hub
+if (( $+commands[hub] )); then
+ alias git=hub
+fi
+
+# Functions #################################################################
+
+# Based on https://github.com/dbb/githome/blob/master/.config/zsh/functions
+
+# empty_gh
+#
+# Use this when creating a new repo from scratch.
+# Creates a new repo with a blank README.md in it and pushes it up to GitHub.
+empty_gh() { # [NAME_OF_REPO]
+ emulate -L zsh
+ local repo=$1
+
+ mkdir "$repo"
+ touch "$repo/README.md"
+ new_gh "$repo"
+}
+
+# new_gh [DIRECTORY]
+#
+# Use this when you have a directory that is not yet set up for git.
+# This function will add all non-hidden files to git.
+new_gh() { # [DIRECTORY]
+ emulate -L zsh
+ local repo="$1"
+ cd "$repo" \
+ || return
+
+ git init \
+ || return
+ # add all non-dot files
+ print '.*'"\n"'*~' >> .gitignore
+ git add [^.]* \
+ || return
+ git add -f .gitignore \
+ || return
+ git commit -m 'Initial commit.' \
+ || return
+ hub create \
+ || return
+ git push -u origin master \
+ || return
+}
+
+# exist_gh [DIRECTORY]
+#
+# Use this when you have a git repo that's ready to go and you want to add it
+# to your GitHub.
+exist_gh() { # [DIRECTORY]
+ emulate -L zsh
+ local repo=$1
+ cd "$repo"
+
+ hub create \
+ || return
+ git push -u origin master
+}
+
+# git.io "GitHub URL"
+#
+# Shorten GitHub url, example:
+# https://github.com/nvogel/dotzsh > https://git.io/8nU25w
+# source: https://github.com/nvogel/dotzsh
+# documentation: https://github.com/blog/985-git-io-github-url-shortener
+#
+git.io() {
+ emulate -L zsh
+ curl -i -s https://git.io -F "url=$1" | grep "Location" | cut -f 2 -d " "
+}
+
+# End Functions #############################################################
+
diff --git a/zsh/.oh-my-zsh/plugins/gitignore/README.md b/zsh/.oh-my-zsh/plugins/gitignore/README.md
new file mode 100644
index 0000000..753dd31
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gitignore/README.md
@@ -0,0 +1,17 @@
+# gitignore
+
+This plugin enables you the use of [gitignore.io](https://www.gitignore.io/) from the command line. You need an active internet connection.
+
+To use it, add `gitignore` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... gitignore)
+```
+
+## Plugin commands
+
+* `gi list`: List all the currently supported gitignore.io templates.
+
+* `gi [TEMPLATENAME]`: Show git-ignore output on the command line, e.g. `gi java` to exclude class and package files.
+
+* `gi [TEMPLATENAME] >> .gitignore`: Appending programming language settings to your projects .gitignore.
diff --git a/zsh/.oh-my-zsh/plugins/gitignore/gitignore.plugin.zsh b/zsh/.oh-my-zsh/plugins/gitignore/gitignore.plugin.zsh
new file mode 100644
index 0000000..15e38d3
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gitignore/gitignore.plugin.zsh
@@ -0,0 +1,12 @@
+function gi() { curl -fL https://www.gitignore.io/api/${(j:,:)@} }
+
+_gitignoreio_get_command_list() {
+ curl -sfL https://www.gitignore.io/api/list | tr "," "\n"
+}
+
+_gitignoreio () {
+ compset -P '*,'
+ compadd -S '' `_gitignoreio_get_command_list`
+}
+
+compdef _gitignoreio gi
diff --git a/zsh/.oh-my-zsh/plugins/glassfish/README.md b/zsh/.oh-my-zsh/plugins/glassfish/README.md
new file mode 100644
index 0000000..1f4a8be
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/glassfish/README.md
@@ -0,0 +1,9 @@
+# glassfish
+
+The glassfish plugin adds completion for the `asadmin` utility, a command to manage
+[Oracle GlassFish](https://docs.oracle.com/cd/E18930_01/html/821-2416/giobi.html) servers.
+
+To use it, add `glassfish` to the plugins array in your zshrc file:
+```zsh
+plugins=(... glassfish)
+```
diff --git a/zsh/.oh-my-zsh/plugins/glassfish/_asadmin b/zsh/.oh-my-zsh/plugins/glassfish/_asadmin
new file mode 100644
index 0000000..a6a7af5
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/glassfish/_asadmin
@@ -0,0 +1,1150 @@
+#compdef asadmin
+#autoload
+
+local -a _1st_arguments
+_1st_arguments=(
+ "add-library:adds one or more library JAR files to GlassFish Server"
+ "add-resources:creates the resources specified in an XML file"
+ "apply-http-lb-changes:applies load balancer configuration changes to the load balancer"
+ "backup-domain:performs a backup on the domain"
+ "change-admin-password:changes the administrator password"
+ "change-master-broker:changes the master broker in a Message Queue cluster providing JMS services for a GlassFish Server cluster."
+ "change-master-password:changes the master password"
+ "collect-log-files:creates a ZIP archive of all available log files"
+ "configure-jms-cluster:configures the Message Queue cluster providing JMS services to a GlassFish Server cluster"
+ "configure-lb-weight:sets load balancing weights for clustered instances"
+ "configure-ldap-for-admin:configures the authentication realm named admin-realm for the given LDAP"
+ "copy-config:copies an existing named configuration to create another configuration"
+ "create-admin-object:adds the administered object with the specified JNDI name for a resource adapter"
+ "create-application-ref:creates a reference to an application"
+ "create-audit-module:adds an audit module"
+ "create-auth-realm:adds the named authentication realm"
+ "create-cluster:creates a GlassFish Server cluster"
+ "create-connector-connection-pool:adds a connection pool with the specified connection pool name"
+ "create-connector-resource:registers the connector resource with the specified JNDI name"
+ "create-connector-security-map:creates a security map for the specified connector connection pool"
+ "create-connector-work-security-map:creates a work security map for the specified resource adapter"
+ "create-custom-resource:creates a custom resource"
+ "create-domain:creates a domain"
+ "create-file-user:creates a new file user"
+ "create-http:sets HTTP parameters for a protocol"
+ "create-http-health-checker:creates a health-checker for a specified load balancer configuration"
+ "create-http-lb:creates a load balancer"
+ "create-http-lb-config:creates a configuration for the load balancer"
+ "create-http-lb-ref:adds an existing cluster or server instance to an existing load balancer configuration or load balancer"
+ "create-http-listener:adds a new HTTP network listener socket"
+ "create-http-redirect:adds a new HTTP redirect"
+ "create-iiop-listener:adds an IIOP listener"
+ "create-instance:creates a GlassFish Server instance"
+ "create-jacc-provider:enables administrators to create a JACC provider that can be used by third-party authorization modules for applications running in GlassFish Server"
+ "create-javamail-resource:creates a JavaMail session resource"
+ "create-jdbc-connection-pool:registers a JDBC connection pool"
+ "create-jdbc-resource:creates a JDBC resource with the specified JNDI name"
+ "create-jms-host:creates a JMS host"
+ "create-jms-resource:creates a JMS resource"
+ "create-jmsdest:creates a JMS physical destination"
+ "create-jndi-resource:registers a JNDI resource"
+ "create-jvm-options:creates options for the Java application launcher"
+ "create-lifecycle-module:creates a lifecycle module"
+ "create-local-instance:creates a GlassFish Server instance on the host where the subcommand is run"
+ "create-message-security-provider:enables administrators to create a message security provider, which specifies how SOAP messages will be secured."
+ "create-network-listener:adds a new network listener socket"
+ "create-node-config:creates a node that is not enabled for remote communication"
+ "create-node-dcom:creates a node that is enabled for com munication over DCOM"
+ "create-node-ssh:creates a node that is enabled for communication over SSH"
+ "create-password-alias:creates a password alias"
+ "create-profiler:creates the profiler element"
+ "create-protocol:adds a new protocol"
+ "create-protocol-filter:adds a new protocol filter"
+ "create-protocol-finder:adds a new protocol finder"
+ "create-resource-adapter-config:creates the configuration information for the connector module"
+ "create-resource-ref:creates a reference to a resource"
+ "create-service:configures the starting of a DAS or a GlassFish Server instance on an unattended boot"
+ "create-ssl:creates and configures the SSL element in the selected HTTP listener, IIOP listener, or IIOP service"
+ "create-system-properties:adds one or more system property elements that can be referenced elsewhere in the configuration."
+ "create-threadpool:adds a thread pool"
+ "create-transport:adds a new transport"
+ "create-virtual-server:creates the named virtual server"
+ "delete-admin-object:removes the administered object with the specified JNDI name."
+ "delete-application-ref:removes a reference to an applica tion"
+ "delete-audit-module:removes the named audit-module"
+ "delete-auth-realm:removes the named authentication realm"
+ "delete-cluster:deletes a GlassFish Server cluster"
+ "delete-config:deletes an existing named configuration"
+ "delete-connector-connection-pool:removes the specified connector connection pool"
+ "delete-connector-resource:removes the connector resource with the specified JNDI name"
+ "delete-connector-security-map:deletes a security map for the specified connector connection pool"
+ "delete-connector-work-security-map:deletes a work security map for the specified resource adapter"
+ "delete-custom-resource:removes a custom resource"
+ "delete-domain:deletes a domain"
+ "delete-file-user:removes the named file user"
+ "delete-http:removes HTTP parameters from a protocol"
+ "delete-http-health-checker:deletes the health-checker for a specified load balancer configuration"
+ "delete-http-lb:deletes a load balancer"
+ "delete-http-lb-config:deletes a load balancer configuration"
+ "delete-http-lb-ref:deletes the cluster or server instance from a load balancer"
+ "delete-http-listener:removes a network listener"
+ "delete-http-redirect:removes an HTTP redirect"
+ "delete-iiop-listener:removes an IIOP listener"
+ "delete-instance:deletes a GlassFish Server instance"
+ "delete-jacc-provider:enables administrators to delete JACC providers defined for a domain"
+ "delete-javamail-resource:removes a JavaMail session resource"
+ "delete-jdbc-connection-pool:removes the specified JDBC connection pool"
+ "delete-jdbc-resource:removes a JDBC resource with the specified JNDI name"
+ "delete-jms-host:removes a JMS host"
+ "delete-jms-resource:removes a JMS resource"
+ "delete-jmsdest:removes a JMS physical destination"
+ "delete-jndi-resource:removes a JNDI resource"
+ "delete-jvm-options:removes one or more options for the Java application launcher"
+ "delete-lifecycle-module:removes the lifecycle module"
+ "delete-local-instance:deletes a GlassFish Server instance on the machine where the subcommand is run"
+ "delete-log-levels:"
+ "delete-message-security-provider:enables administrators to delete a message security provider"
+ "delete-network-listener:removes a network listener"
+ "delete-node-config:deletes a node that is not enabled for remote communication"
+ "delete-node-dcom:deletes a node that is enabled for communication over DCOM"
+ "delete-node-ssh:deletes a node that is enabled for communication over SSH"
+ "delete-password-alias:deletes a password alias"
+ "delete-profiler:removes the profiler element"
+ "delete-protocol:removes a protocol"
+ "delete-protocol-filter:removes a protocol filter"
+ "delete-protocol-finder:removes a protocol finder"
+ "delete-resource-adapter-config:deletes the resource adapter configuration"
+ "delete-resource-ref:removes a reference to a resource"
+ "delete-ssl:deletes the SSL element in the selected HTTP listener, IIOP listener, or IIOP service"
+ "delete-system-property:removes a system property of the domain, configuration, cluster, or server instance, one at a time"
+ "delete-threadpool:removes a thread pool"
+ "delete-transport:removes a transport"
+ "delete-virtual-server:removes a virtual server"
+ "deploy:deploys the specified component"
+ "deploydir:deploys an exploded format of application archive"
+ "environment variable"
+ "disable:disables the component"
+ "disable-http-lb-application:disables an application managed by a load balancer"
+ "disable-http-lb-server:disables a sever or cluster managed by a load balancer"
+ "disable-monitoring:disables monitoring for the server or for specific monitorable modules"
+ "disable-secure-admin:disables secure admin if it is already enabled."
+ "disable-secure-admin-internal-user:Instructs the GlassFish Server DAS and instances to not use the specified admin user to authenticate with each other and to authorize admin operations."
+ "disable-secure-admin-principal:disables the certificate for authorizing access in secure administration."
+ "enable:enables the component"
+ "enable-http-lb-application:enables a previously-disabled application managed by a load balancer"
+ "enable-http-lb-server:enables a previously disabled sever or cluster managed by a load balancer"
+ "enable-monitoring:enables monitoring for the server or for specific monitorable modules"
+ "enable-secure-admin:enables secure admin (if it is not already enabled), optionally changing the alias used for DAS-to-instance admin messages or the alias used for instance-to-DAS admin messages."
+ "enable-secure-admin-internal-user:Instructs the GlassFish Server DAS and instances to use the specified admin user and the password associated with the password alias to authenticate with each other and to authorize admin operations."
+ "enable-secure-admin-principal:Instructs GlassFish Server, when secure admin is enabled, to accept admin requests from clients identified by the specified SSL certificate."
+ "export:marks a variable name for automatic export to the environment of subsequent commands in multimode"
+ "export-http-lb-config:exports the load balancer configuration or load balancer to a file"
+ "export-sync-bundle:exports the configuration data of a cluster or standalone instance to an archive file"
+ "flush-connection-pool:reintializes all connections established in the specified connection pool"
+ "flush-jmsdest:purges messages in a JMS destination."
+ "freeze-transaction-service:freezes the transaction subsystem"
+ "generate-domain-schema:"
+ "generate-jvm-report:shows the JVM machine statistics for a given target instance"
+ "get:gets the values of configurable or monitorable attributes"
+ "get-client-stubs:retrieves the application JAR files needed to launch the application client."
+ "get-health:provides information on the cluster health"
+ "help"
+ "asadmin:utility for performing administrative tasks for Oracle GlassFish Server"
+ "import-sync-bundle:imports the configuration data of a clustered instance or standalone instance from an archive file"
+ "install-node:installs GlassFish Server software on specified SSH-enabled hosts"
+ "install-node-dcom:installs GlassFish Server software on specified DCOM-enabled hosts"
+ "install-node-ssh:installs GlassFish Server software on specified SSH-enabled hosts"
+ "jms-ping:checks if the JMS service is up and running"
+ "list:lists configurable or monitorable elements"
+ "list-admin-objects:gets all the administered objects"
+ "list-application-refs:lists the existing application references"
+ "list-applications:lists deployed applications"
+ "list-audit-modules:gets all audit modules and displays them"
+ "list-auth-realms:lists the authentication realms"
+ "list-backups:lists all backups"
+ "list-clusters:lists existing clusters in a domain"
+ "list-commands:lists available commands"
+ "list-components:lists deployed components"
+ "list-configs:lists named configurations"
+ "list-connector-connection-pools:lists the existing connector connection pools"
+ "list-connector-resources:lists all connector resources"
+ "list-connector-security-maps:lists the security maps belonging to the specified connector connection pool"
+ "list-connector-work-security-maps:lists the work security maps belonging to the specified resource adapter"
+ "list-containers:lists application containers"
+ "list-custom-resources:gets all custom resources"
+ "list-domains:lists the domains in the specified directory"
+ "list-file-groups:lists file groups"
+ "list-file-users:lists the file users"
+ "list-http-lb-configs:lists load balancer configurations"
+ "list-http-lbs:lists load balancers"
+ "list-http-listeners:lists the existing network listeners"
+ "list-iiop-listeners:lists the existing IIOP listeners"
+ "list-instances:lists GlassFish Server instances in a domain"
+ "list-jacc-providers:enables administrators to list JACC providers defined for a domain"
+ "list-javamail-resources:lists the existing JavaMail session resources"
+ "list-jdbc-connection-pools:lists all JDBC connection pools"
+ "list-jdbc-resources:lists all JDBC resources"
+ "list-jms-hosts:lists the existing JMS hosts"
+ "list-jms-resources:lists the JMS resources"
+ "list-jmsdest:lists the existing JMS physical destinations"
+ "list-jndi-entries:browses and queries the JNDI tree"
+ "list-jndi-resources:lists all existing JNDI resources"
+ "list-jvm-options:lists options for the Java application launcher"
+ "list-libraries:lists library JAR files on GlassFish Server"
+ "list-lifecycle-modules:lists the lifecycle modules"
+ "list-log-attributes:lists all logging attributes defined for a specified target in a domain"
+ "list-log-levels:lists the loggers and their log levels"
+ "list-message-security-providers:lists all security message providers for the given message layer"
+ "list-modules:lists GlassFish Server modules"
+ "list-network-listeners:lists the existing network listeners"
+ "list-nodes:lists all GlassFish Server nodes in a domain"
+ "list-nodes-config:lists all GlassFish Server nodes that do not support remote communication in a domain"
+ "list-nodes-dcom:lists all GlassFish Server nodes that support communication over DCOM in a domain"
+ "list-nodes-ssh:lists all GlassFish Server nodes that support communication over SSH in a domain"
+ "list-password-aliases:lists all password aliases"
+ "list-persistence-types:lists registered persistence types for HTTP sessions and SFSB instances"
+ "list-protocol-filters:lists the existing protocol filters"
+ "list-protocol-finders:lists the existing protocol finders"
+ "list-protocols:lists the existing protocols"
+ "list-resource-adapter-configs:lists the names of the current resource adapter configurations"
+ "list-resource-refs:lists existing resource references"
+ "list-secure-admin-internal-users:lists the user names that the GlassFish Server DAS and instances use to authenticate with each other and to authorize admin operations."
+ "list-secure-admin-principals:lists the certificates for which GlassFish Server accepts admin requests from clients."
+ "list-sub-components:lists EJB or servlet components in a deployed module or module of a deployed application"
+ "list-supported-cipher-suites:enables administrators to list the cipher suites that are supported and available to a specified GlassFish Server target"
+ "list-system-properties:lists the system properties of the domain, configuration, cluster, or server instance"
+ "list-threadpools:lists all the thread pools"
+ "list-timers:lists all of the persistent timers owned by server instance(s)"
+ "list-transports:lists the existing transports"
+ "list-virtual-servers:lists the existing virtual servers"
+ "list-web-context-param:lists servlet contextinitialization parameters of a deployed web application or module"
+ "list-web-env-entry:lists environment entries for a deployed web application or module"
+ "login:logs you into a domain"
+ "migrate-timers:moves EJB timers when a clustered instance was stopped or has crashed"
+ "monitor:displays monitoring data for commonly used components and services"
+ "multimode:allows multiple subcommands to be run while preserving environment settings and remaining in the asadmin utility"
+ "ping-connection-pool:tests if a connection pool is usable"
+ "ping-node-dcom:tests if a node that is enabled for communication over DCOM is usable"
+ "ping-node-ssh:tests if a node that is enabled for communication over SSH is usable"
+ "recover-transactions:manually recovers pending transactions"
+ "redeploy:redeploys the specified component"
+ "remove-library:removes one or more library JAR files from GlassFish Server"
+ "restart-domain:restarts the DAS of the specified domain"
+ "restart-instance:restarts a running GlassFish Server instance"
+ "restart-local-instance:restarts a running GlassFish Server instance on the host where the subcommand is run"
+ "restore-domain:restores files from backup"
+ "rollback-transaction:rolls back the named transaction"
+ "rotate-log:rotates the log file"
+ "set:sets the values of configurable attributes"
+ "set-log-attributes:sets the logging attributes for one or more loggers"
+ "set-log-levels:sets the log level for one or more loggers"
+ "set-web-context-param:sets a servlet context initialization parameter of a deployed web application or module"
+ "set-web-env-entry:sets an environment entry for a deployed web application or module"
+ "setup-ssh:sets up an SSH key on specified hosts"
+ "show-component-status:displays the status of the deployed component"
+ "start-cluster:starts a cluster"
+ "start-database:starts the Java DB"
+ "start-domain:starts the DAS of the specified domain"
+ "start-instance:starts a GlassFish Server instance"
+ "start-local-instance:starts a GlassFish Server instance on the host where the subcommand is run"
+ "stop-cluster:stops a GlassFish Server cluster"
+ "stop-database:stops the Java DB"
+ "stop-domain:stops the Domain Administration Server of the specified domain"
+ "stop-instance:stops a running GlassFish Server instance"
+ "stop-local-instance:stops a GlassFish Server instance on the machine where the subcommand is run"
+ "undeploy:removes a deployed component"
+ "unfreeze-transaction-service:resumes all suspended transactions"
+ "uninstall-node:uninstalls GlassFish Server software from specified hosts"
+ "uninstall-node-dcom:uninstalls GlassFish Server software from specified DCOM-enabled hosts"
+ "uninstall-node-ssh:uninstalls GlassFish Server software from specified SSH-enabled hosts"
+ "unset:removes one or more variables from the multimode environment"
+ "unset-web-context-param:unsets a servlet context initialization parameter of a deployed web application or module"
+ "unset-web-env-entry:unsets an environment entry for a deployed web application or module"
+ "update-connector-security-map:modifies a security map for the specified connector connection pool"
+ "update-connector-work-security-map:modifies a work security map for the specified resource adapter"
+ "update-file-user:updates a current file user as specified"
+ "update-node-config:updates the configuration data of anode"
+ "update-node-dcom:updates the configuration data of a node"
+ "update-node-ssh:updates the configuration data of a node"
+ "update-password-alias:updates a password alias"
+ "uptime:returns the length of time that the DAS has been running"
+ "validate-dcom:tests the connection over DCOM to a remote host"
+ "validate-multicast:validates that multicast transport is available for clusters"
+ "verify-domain-xml:verifies the content of the domain.xml file"
+ "version:displays version information forGlassFish Server"
+)
+
+_arguments '*:: :->command'
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "asadmin command" _1st_arguments
+ return
+fi
+
+local -a _command_args
+case "$words[1]" in
+ add-library)
+ _command_args=('*:directory:_files' '--host+:' '--port+:' '--type+:type:(common ext app)')
+ ;;
+ add-resources)
+ _command_args=('*:directory:_files' '--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ apply-http-lb-changes)
+ _command_args=('--host+:' '--ping+:' '--port+:')
+ ;;
+ backup-domain)
+ _command_args=('--backupconfig+:' '--backupdir+:' '--description+:' '--domaindir+:' '--long+:long:(true false)')
+ ;;
+ change-admin-password)
+ _command_args=('--domain_name+:' '--domaindir+:')
+ ;;
+ change-master-broker)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ change-master-password)
+ _command_args=('--domaindir+:' '--nodedir+:' '--savemasterpassword+:savemasterpassword:(true false)')
+ ;;
+ collect-log-files)
+ _command_args=('--host+:' '--port+:' '--retrieve+:retrieve:(true false)' '--target+:')
+ ;;
+ configure-jms-cluster)
+ _command_args=('--clustertype+:' '--configstoretype+:' '--dburl+:' '--dbuser+:' '--dbvendor+:' '--host+:' '--jmsdbpassword+:' '--messagestoretype+:' '--port+:' '--property+:')
+ ;;
+ configure-lb-weight)
+ _command_args=('--cluster+:cluster:_asadmin_clusters' '--host+:' '--port+:')
+ ;;
+ configure-ldap-for-admin)
+ _command_args=('--basedn+:' '--host+:' '--ldap-group+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance' '--url+:')
+ ;;
+ copy-config)
+ _command_args=('--host+:' '--port+:' '--systemproperties+:')
+ ;;
+ create-admin-object)
+ _command_args=('--classname+:' '--description+:' '--enabled+:enabled:(true false)' '--host+:' '--port+:' '--property+:' '--raname+:' '--restype+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ create-application-ref)
+ _command_args=('--enabled+:enabled:(true false)' '--host+:' '--lbenabled+:lbenabled:(true false)' '--port+:' '--target+:target:_asadmin_targets_cluster_das_standalone_instance' '--virtualservers+:')
+ ;;
+ create-audit-module)
+ _command_args=('--classname+:' '--host+:' '--port+:' '--property+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ create-auth-realm)
+ _command_args=('--classname+:' '--host+:' '--port+:' '--property+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ create-connector-connection-pool)
+ _command_args=('--associatewiththread+:associatewiththread:(true false)' '--connectiondefinition+:' '--creationretryattempts+:' '--creationretryinterval+:' '--description+:' '--failconnection+:failconnection:(true false)' '--host+:' '--idletimeout+:' '--isconnectvalidatereq+:isconnectvalidatereq:(true false)' '--lazyconnectionassociation+:lazyconnectionassociation:(true false)' '--lazyconnectionenlistment+:lazyconnectionenlistment:(true false)' '--leakreclaim+:leakreclaim:(true false)' '--leaktimeout+:' '--matchconnections+:matchconnections:(true false)' '--maxconnectionusagecount+:' '--maxpoolsize+:' '--maxwait+:' '--ping+:ping:(true false)' '--pooling+:pooling:(true false)' '--poolresize+:' '--port+:' '--property+:' '--raname+:' '--steadypoolsize+:' '--target+:' '--transactionsupport+:transactionsupport:(XATransaction LocalTransaction NoTransaction)' '--validateatmostonceperiod+:')
+ ;;
+ create-connector-resource)
+ _command_args=('--description+:' '--enabled+:enabled:(true false)' '--host+:' '--objecttype+:' '--poolname+:' '--port+:' '--property+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ create-connector-security-map)
+ _command_args=('--host+:' '--mappedpassword+:' '--mappedusername+:' '--poolname+:' '--port+:' '--principals+:' '--target+:' '--usergroups+:')
+ ;;
+ create-connector-work-security-map)
+ _command_args=('--description+:' '--groupsmap+:' '--host+:' '--port+:' '--principalsmap+:' '--raname+:')
+ ;;
+ create-custom-resource)
+ _command_args=('--description+:' '--enabled+:enabled:(true false)' '--factoryclass+:' '--host+:' '--port+:' '--property+:' '--restype+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ create-domain)
+ _command_args=('--adminport+:' '--checkports+:checkports:(true false)' '--domaindir+:' '--domainproperties+:' '--instanceport+:' '--keytooloptions+:' '--nopassword+:nopassword:(true false)' '--portbase+:' '--profile+:' '--savelogin+:savelogin:(true false)' '--savemasterpassword+:savemasterpassword:(true false)' '--template+:' '--usemasterpassword+:usemasterpassword:(true false)')
+ ;;
+ create-file-user)
+ _command_args=('--authrealmname+:' '--groups+:' '--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance' '--userpassword+:')
+ ;;
+ create-http)
+ _command_args=('--default-virtual-server+:' '--dns-lookup-enabled+:dns-lookup-enabled:(true false)' '--host+:' '--max-connection+:' '--port+:' '--request-timeout-seconds+:' '--servername+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance' '--timeout-seconds+:' '--xpowered+:xpowered:(true false)')
+ ;;
+ create-http-health-checker)
+ _command_args=('--config+:' '--host+:' '--interval+:' '--port+:' '--timeout+:' '--url+:')
+ ;;
+ create-http-lb)
+ _command_args=('--autoapplyenabled+:autoapplyenabled:(true false)' '--devicehost+:' '--deviceport+:' '--healthcheckerinterval+:' '--healthcheckertimeout+:' '--healthcheckerurl+:' '--host+:' '--httpsrouting+:httpsrouting:(true false)' '--lbenableallapplications+:' '--lbenableallinstances+:' '--lbpolicy+:' '--lbpolicymodule+:' '--lbweight+:' '--monitor+:monitor:(true false)' '--port+:' '--property+:' '--reloadinterval+:' '--responsetimeout+:' '--routecookie+:routecookie:(true false)' '--sslproxyhost+:' '--sslproxyport+:' '--target+:target:_asadmin_targets_cluster_standalone_instance')
+ ;;
+ create-http-lb-ref)
+ _command_args=('--config+:' '--healthcheckerinterval+:' '--healthcheckertimeout+:' '--healthcheckerurl+:' '--host+:' '--lbenableallapplications+:' '--lbenableallinstances+:' '--lbname+:' '--lbpolicy+:' '--lbpolicymodule+:' '--lbweight+:' '--port+:')
+ ;;
+ create-http-listener)
+ _command_args=('--acceptorthreads+:' '--default-virtual-server+:' '--defaultvs+:' '--enabled+:enabled:(true false)' '--host+:' '--listeneraddress+:' '--listenerport+:' '--port+:' '--redirectport+:' '--secure+:secure:(true false)' '--securityenabled+:securityenabled:(true false)' '--servername+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance' '--xpowered+:xpowered:(true false)')
+ ;;
+ create-http-redirect)
+ _command_args=('--host+:' '--port+:' '--redirect-port+:' '--secure-redirect+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ create-iiop-listener)
+ _command_args=('--enabled+:enabled:(true false)' '--host+:' '--iiopport+:' '--listeneraddress+:' '--port+:' '--property+:' '--securityenabled+:securityenabled:(true false)' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ create-instance)
+ _command_args=('--checkports+:checkports:(true false)' '--cluster+:cluster:_asadmin_clusters' '--config+:' '--host+:' '--lbenabled+:lbenabled:(true false)' '--node+:node:_asadmin_nodes' '--port+:' '--portbase+:' '--systemproperties+:' '--terse+:terse:(true false)')
+ ;;
+ create-jacc-provider)
+ _command_args=('--host+:' '--policyconfigfactoryclass+:' '--policyproviderclass+:' '--port+:' '--property+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ create-javamail-resource)
+ _command_args=('--debug+:debug:(true false)' '--description+:' '--enabled+:enabled:(true false)' '--fromaddress+:' '--host+:' '--mailhost+:' '--mailuser+:' '--port+:' '--property+:' '--storeprotocol+:' '--storeprotocolclass+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance' '--transprotocol+:' '--transprotocolclass+:')
+ ;;
+ create-jdbc-connection-pool)
+ _command_args=('--allownoncomponentcallers+:allownoncomponentcallers:(true false)' '--associatewiththread+:associatewiththread:(true false)' '--creationretryattempts+:' '--creationretryinterval+:' '--datasourceclassname+:' '--description+:' '--driverclassname+:' '--failconnection+:failconnection:(true false)' '--host+:' '--idletimeout+:' '--initsql+:' '--isconnectvalidatereq+:isconnectvalidatereq:(true false)' '--isisolationguaranteed+:isisolationguaranteed:(true false)' '--isolationlevel+:' '--lazyconnectionassociation+:lazyconnectionassociation:(true false)' '--lazyconnectionenlistment+:lazyconnectionenlistment:(true false)' '--leakreclaim+:leakreclaim:(true false)' '--leaktimeout+:' '--matchconnections+:matchconnections:(true false)' '--maxconnectionusagecount+:' '--maxpoolsize+:' '--maxwait+:' '--nontransactionalconnections+:nontransactionalconnections:(true false)' '--ping+:ping:(true false)' '--pooling+:pooling:(true false)' '--poolresize+:' '--port+:' '--property+:' '--restype+:restype:(javax.sql.DataSource javax.sql.XADataSource javax.sql.ConnectionPoolDataSource java.sql.Driver)' '--sqltracelisteners+:' '--statementcachesize+:' '--statementleakreclaim+:statementleakreclaim:(true false)' '--statementleaktimeout+:' '--statementtimeout+:' '--steadypoolsize+:' '--target+:' '--validateatmostonceperiod+:' '--validationclassname+:' '--validationmethod+:validationmethod:(auto-commit meta-data table custom-validation)' '--validationtable+:' '--wrapjdbcobjects+:wrapjdbcobjects:(true false)')
+ ;;
+ create-jdbc-resource)
+ _command_args=('--connectionpoolid+:' '--description+:' '--enabled+:enabled:(true false)' '--host+:' '--port+:' '--property+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ create-jms-host)
+ _command_args=('--host+:' '--mqhost+:' '--mqpassword+:' '--mqport+:' '--mquser+:' '--port+:' '--property+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ create-jms-resource)
+ _command_args=('--description+:' '--enabled+:enabled:(true false)' '--host+:' '--port+:' '--property+:' '--restype+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ create-jmsdest)
+ _command_args=('--desttype+:' '--host+:' '--port+:' '--property+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ create-jndi-resource)
+ _command_args=('--description+:' '--enabled+:enabled:(true false)' '--factoryclass+:' '--host+:' '--jndilookupname+:' '--port+:' '--property+:' '--restype+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ create-jvm-options)
+ _command_args=('--host+:' '--port+:' '--profiler+:profiler:(true false)' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ create-lifecycle-module)
+ _command_args=('--classname+:' '--classpath+:' '--description+:' '--enabled+:enabled:(true false)' '--failurefatal+:failurefatal:(true false)' '--host+:' '--loadorder+:' '--port+:' '--property+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ create-local-instance)
+ _command_args=('--checkports+:checkports:(true false)' '--cluster+:cluster:_asadmin_clusters' '--config+:' '--lbenabled+:lbenabled:(true false)' '--node+:node:_asadmin_nodes' '--nodedir+:' '--portbase+:' '--savemasterpassword+:savemasterpassword:(true false)' '--systemproperties+:' '--usemasterpassword+:usemasterpassword:(true false)')
+ ;;
+ create-message-security-provider)
+ _command_args=('--classname+:' '--host+:' '--isdefaultprovider+:isdefaultprovider:(true false)' '--layer+:layer:(SOAP HttpServlet)' '--port+:' '--property+:' '--providertype+:providertype:(client server client-server)' '--requestauthrecipient+:' '--requestauthsource+:' '--responseauthrecipient+:' '--responseauthsource+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ create-network-listener)
+ _command_args=('--address+:' '--enabled+:enabled:(true false)' '--host+:' '--jkenabled+:jkenabled:(true false)' '--listenerport+:' '--port+:' '--protocol+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance' '--threadpool+:' '--transport+:')
+ ;;
+ create-node-config)
+ _command_args=('--host+:' '--installdir+:' '--nodedir+:' '--nodehost+:' '--port+:')
+ ;;
+ create-node-dcom)
+ _command_args=('--archive+:' '--force+:force:(true false)' '--host+:' '--install+:install:(true false)' '--installdir+:' '--nodedir+:' '--nodehost+:' '--port+:' '--windowsdomain+:' '--windowspassword+:' '--windowsuser+:')
+ ;;
+ create-node-ssh)
+ _command_args=('--archive+:' '--force+:force:(true false)' '--host+:' '--install+:install:(true false)' '--installdir+:' '--nodedir+:' '--nodehost+:' '--port+:' '--sshkeyfile+:' '--sshkeypassphrase+:' '--sshpassword+:' '--sshport+:' '--sshuser+:')
+ ;;
+ create-password-alias)
+ _command_args=('--aliaspassword+:' '--host+:' '--port+:')
+ ;;
+ create-profiler)
+ _command_args=('--classpath+:' '--enabled+:enabled:(true false)' '--host+:' '--nativelibrarypath+:' '--port+:' '--property+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ create-protocol)
+ _command_args=('--host+:' '--port+:' '--securityenabled+:securityenabled:(true false)' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ create-protocol-filter)
+ _command_args=('--classname+:' '--host+:' '--port+:' '--protocol+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ create-protocol-finder)
+ _command_args=('--classname+:' '--host+:' '--port+:' '--protocol+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance' '--targetprotocol+:')
+ ;;
+ create-resource-adapter-config)
+ _command_args=('--host+:' '--objecttype+:' '--port+:' '--property+:' '--target+:' '--threadpoolid+:')
+ ;;
+ create-resource-ref)
+ _command_args=('--enabled+:enabled:(true false)' '--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_das_standalone_instance')
+ ;;
+ create-service)
+ _command_args=('*:instances:_asadmin_instances' '--domaindir+:domaindir:directory:_files' '--dry-run+:dry-run:(true false)' '--force+:force:(true false)' '--name+:' '--node+:node:_asadmin_nodes' '--nodedir+:' '--serviceproperties+:' '--serviceuser+:')
+ ;;
+ create-ssl)
+ _command_args=('--certname+:' '--clientauthenabled+:clientauthenabled:(true false)' '--host+:' '--port+:' '--ssl2ciphers+:' '--ssl2enabled+:ssl2enabled:(true false)' '--ssl3enabled+:ssl3enabled:(true false)' '--ssl3tlsciphers+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance' '--tlsenabled+:tlsenabled:(true false)' '--tlsrollbackenabled+:tlsrollbackenabled:(true false)' '--type+:type:(network-listener http-listener iiop-listener iiop-service jmx-connector)')
+ ;;
+ create-system-properties)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_clustered_instance_config_das_domain_standalone_instance')
+ ;;
+ create-threadpool)
+ _command_args=('--host+:' '--idletimeout+:' '--maxqueuesize+:' '--maxthreadpoolsize+:' '--minthreadpoolsize+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance' '--workqueues+:')
+ ;;
+ create-transport)
+ _command_args=('--acceptorthreads+:' '--buffersizebytes+:' '--bytebuffertype+:' '--classname+:' '--displayconfiguration+:displayconfiguration:(true false)' '--enablesnoop+:enablesnoop:(true false)' '--host+:' '--idlekeytimeoutseconds+:' '--maxconnectionscount+:' '--port+:' '--readtimeoutmillis+:' '--selectionkeyhandler+:' '--selectorpolltimeoutmillis+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance' '--tcpnodelay+:tcpnodelay:(true false)' '--writetimeoutmillis+:')
+ ;;
+ create-virtual-server)
+ _command_args=('--defaultwebmodule+:' '--host+:' '--hosts+:' '--httplisteners+:' '--logfile+:' '--networklisteners+:' '--port+:' '--property+:' '--state+:state:(on off disabled)' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-admin-object)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-application-ref)
+ _command_args=('--cascade+:cascade:(true false)' '--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_das_standalone_instance')
+ ;;
+ delete-audit-module)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-auth-realm)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-config)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ delete-connector-connection-pool)
+ _command_args=('--cascade+:cascade:(true false)' '--host+:' '--port+:' '--target+:')
+ ;;
+ delete-connector-resource)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ delete-connector-security-map)
+ _command_args=('--host+:' '--poolname+:' '--port+:' '--target+:')
+ ;;
+ delete-connector-work-security-map)
+ _command_args=('--host+:' '--port+:' '--raname+:')
+ ;;
+ delete-custom-resource)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ delete-domain)
+ _command_args=('--domaindir+:')
+ ;;
+ delete-file-user)
+ _command_args=('--authrealmname+:' '--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-http)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-http-health-checker)
+ _command_args=('--config+:' '--host+:' '--port+:')
+ ;;
+ delete-http-lb-ref)
+ _command_args=('--config+:' '--force+:' '--host+:' '--lbname+:' '--port+:')
+ ;;
+ delete-http-listener)
+ _command_args=('--host+:' '--port+:' '--secure+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-http-redirect)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-iiop-listener)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-instance)
+ _command_args=('*:instances:_asadmin_instances' '--host+:' '--port+:' '--terse+:terse:(true false)')
+ ;;
+ delete-jacc-provider)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-javamail-resource)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ delete-jdbc-connection-pool)
+ _command_args=('--cascade+:cascade:(true false)' '--host+:' '--port+:' '--target+:')
+ ;;
+ delete-jdbc-resource)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ delete-jms-host)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-jms-resource)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ delete-jmsdest)
+ _command_args=('--desttype+:' '--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-jndi-resource)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ delete-jvm-options)
+ _command_args=('--host+:' '--port+:' '--profiler+:profiler:(true false)' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-lifecycle-module)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ delete-local-instance)
+ _command_args=('*:instances:_asadmin_instances' '--node+:node:_asadmin_nodes' '--nodedir+:')
+ ;;
+ delete-log-levels)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-message-security-provider)
+ _command_args=('--host+:' '--layer+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-network-listener)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-node-config)
+ _command_args=('*:nodes:_asadmin_nodes_config' '--host+:' '--port+:')
+ ;;
+ delete-node-dcom)
+ _command_args=('*:nodes:_asadmin_nodes_dcom' '--force+:force:(true false)' '--host+:' '--port+:' '--uninstall+:uninstall:(true false)')
+ ;;
+ delete-node-ssh)
+ _command_args=('*:nodes:_asadmin_nodes_ssh' '--force+:force:(true false)' '--host+:' '--port+:' '--uninstall+:uninstall:(true false)')
+ ;;
+ delete-password-alias)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ delete-profiler)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-protocol)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-protocol-filter)
+ _command_args=('--host+:' '--port+:' '--protocol+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-protocol-finder)
+ _command_args=('--host+:' '--port+:' '--protocol+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-resource-adapter-config)
+ _command_args=('--host+:' '--port+:' '--target+:')
+ ;;
+ delete-resource-ref)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_das_standalone_instance')
+ ;;
+ delete-ssl)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance' '--type+:type:(network-listener http-listener iiop-listener iiop-service jmx-connector)')
+ ;;
+ delete-system-property)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_clustered_instance_config_das_domain_standalone_instance')
+ ;;
+ delete-threadpool)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-transport)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ delete-virtual-server)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ deploy)
+ _command_args=('*:directory:_files' '--asyncreplication+:asyncreplication:(true false)' '--availabilityenabled+:availabilityenabled:(true false)' '--contextroot+:' '--createtables+:createtables:(true false)' '--dbvendorname+:' '--deploymentplan+:deploymentplan:directory:_files' '--description+:' '--dropandcreatetables+:dropandcreatetables:(true false)' '--enabled+:enabled:(true false)' '--force+:force:(true false)' '--generatermistubs+:generatermistubs:(true false)' '--host+:' '--isredeploy+:isredeploy:(true false)' '--keepfailedstubs+:keepfailedstubs:(true false)' '--keepreposdir+:keepreposdir:(true false)' '--keepstate+:keepstate:(true false)' '--lbenabled+:lbenabled:(true false)' '--libraries+:' '--logreportederrors+:logreportederrors:(true false)' '--name+:' '--port+:' '--precompilejsp+:precompilejsp:(true false)' '--properties+:' '--property+:' '--retrieve+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance' '--type+:' '--uniquetablenames+:uniquetablenames:(true false)' '--verify+:verify:(true false)' '--virtualservers+:')
+ ;;
+ deploydir)
+ _command_args=('*:directory:_files' '--asyncreplication+:asyncreplication:(true false)' '--availabilityenabled+:availabilityenabled:(true false)' '--contextroot+:' '--createtables+:createtables:(true false)' '--dbvendorname+:' '--deploymentplan+:deploymentplan:directory:_files' '--description+:' '--dropandcreatetables+:dropandcreatetables:(true false)' '--enabled+:enabled:(true false)' '--force+:force:(true false)' '--generatermistubs+:generatermistubs:(true false)' '--host+:' '--isredeploy+:isredeploy:(true false)' '--keepfailedstubs+:keepfailedstubs:(true false)' '--keepreposdir+:keepreposdir:(true false)' '--keepstate+:keepstate:(true false)' '--lbenabled+:lbenabled:(true false)' '--libraries+:' '--logreportederrors+:logreportederrors:(true false)' '--name+:' '--port+:' '--precompilejsp+:precompilejsp:(true false)' '--properties+:' '--property+:' '--retrieve+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance' '--type+:' '--uniquetablenames+:uniquetablenames:(true false)' '--verify+:verify:(true false)' '--virtualservers+:')
+ ;;
+ disable)
+ _command_args=('--cascade+:cascade:(true false)' '--droptables+:droptables:(true false)' '--host+:' '--isredeploy+:isredeploy:(true false)' '--isundeploy+:isundeploy:(true false)' '--keepreposdir+:keepreposdir:(true false)' '--keepstate+:keepstate:(true false)' '--port+:' '--properties+:' '--target+:target:_asadmin_targets_cluster_clustered_instance_das_domain_standalone_instance')
+ ;;
+ disable-http-lb-application)
+ _command_args=('--host+:' '--name+:' '--port+:' '--timeout+:')
+ ;;
+ disable-http-lb-server)
+ _command_args=('--host+:' '--port+:' '--timeout+:')
+ ;;
+ disable-monitoring)
+ _command_args=('--host+:' '--modules+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ disable-secure-admin)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ enable)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_clustered_instance_das_domain_standalone_instance')
+ ;;
+ enable-http-lb-application)
+ _command_args=('--host+:' '--name+:' '--port+:')
+ ;;
+ enable-http-lb-server)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ enable-monitoring)
+ _command_args=('--dtrace+:dtrace:(true false)' '--host+:' '--mbean+:mbean:(true false)' '--modules+:' '--options+:' '--pid+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ enable-secure-admin)
+ _command_args=('--adminalias+:' '--host+:' '--instancealias+:' '--port+:')
+ ;;
+ export-http-lb-config)
+ _command_args=('--config+:' '--host+:' '--lbname+:' '--lbtargets+:' '--port+:' '--property+:' '--retrievefile+:retrievefile:(true false)')
+ ;;
+ export-sync-bundle)
+ _command_args=('--host+:' '--port+:' '--retrieve+:retrieve:(true false)' '--target+:')
+ ;;
+ flush-connection-pool)
+ _command_args=('--appname+:' '--host+:' '--modulename+:' '--port+:')
+ ;;
+ flush-jmsdest)
+ _command_args=('--desttype+:' '--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ freeze-transaction-service)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_clustered_instance_config_das_standalone_instance')
+ ;;
+ generate-domain-schema)
+ _command_args=('--format+:' '--host+:' '--port+:' '--showdeprecated+:showdeprecated:(true false)' '--showsubclasses+:showsubclasses:(true false)')
+ ;;
+ generate-jvm-report)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_clustered_instance_das_standalone_instance' '--type+:type:(summary thread class memory log)')
+ ;;
+ get)
+ _command_args=('--host+:' '--monitor+:monitor:(true false)' '--port+:')
+ ;;
+ get-client-stubs)
+ _command_args=('--appname+:' '--host+:' '--port+:')
+ ;;
+ get-health)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ help)
+ _describe -t help-commands "asadmin help command" _1st_arguments
+ ;;
+ import-sync-bundle)
+ _command_args=('--instance+:' '--node+:node:_asadmin_nodes' '--nodedir+:')
+ ;;
+ install-node)
+ _command_args=('--archive+:' '--create+:create:(true false)' '--force+:force:(true false)' '--installdir+:' '--save+:save:(true false)' '--sshkeyfile+:' '--sshport+:' '--sshuser+:')
+ ;;
+ install-node-dcom)
+ _command_args=('--archive+:' '--create+:create:(true false)' '--force+:force:(true false)' '--installdir+:' '--save+:save:(true false)' '--windowsdomain+:' '--windowsuser+:')
+ ;;
+ install-node-ssh)
+ _command_args=('--archive+:' '--create+:create:(true false)' '--force+:force:(true false)' '--installdir+:' '--save+:save:(true false)' '--sshkeyfile+:' '--sshport+:' '--sshuser+:')
+ ;;
+ jms-ping)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_clustered_instance_config_das_standalone_instance')
+ ;;
+ list)
+ _command_args=('--host+:' '--monitor+:monitor:(true false)' '--port+:')
+ ;;
+ list-admin-objects)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_config_das_standalone_instance' '--host+:' '--port+:')
+ ;;
+ list-application-refs)
+ _command_args=('*:targets:_asadmin_targets_cluster_das_standalone_instance' '--host+:' '--long+:long:(true false)' '--port+:' '--terse+:terse:(true false)')
+ ;;
+ list-applications)
+ _command_args=('*:targets:_asadmin_targets_cluster_das_domain_standalone_instance' '--host+:' '--long+:long:(true false)' '--port+:' '--resources+:resources:(true false)' '--subcomponents+:subcomponents:(true false)' '--terse+:terse:(true false)' '--type+:')
+ ;;
+ list-audit-modules)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_config_das_standalone_instance' '--host+:' '--port+:')
+ ;;
+ list-auth-realms)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_config_das_standalone_instance' '--host+:' '--port+:')
+ ;;
+ list-backups)
+ _command_args=('--backupconfig+:' '--backupdir+:' '--domaindir+:' '--long+:long:(true false)')
+ ;;
+ list-clusters)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ list-commands)
+ _command_args=('--localonly+:localonly:(true false)' '--remoteonly+:remoteonly:(true false)')
+ ;;
+ list-components)
+ _command_args=('*:targets:_asadmin_targets_cluster_das_domain_standalone_instance' '--host+:' '--long+:long:(true false)' '--port+:' '--resources+:resources:(true false)' '--subcomponents+:subcomponents:(true false)' '--terse+:terse:(true false)' '--type+:')
+ ;;
+ list-configs)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_config_das_domain_standalone_instance' '--host+:' '--port+:')
+ ;;
+ list-connector-connection-pools)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ list-connector-resources)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_das_domain_standalone_instance' '--host+:' '--port+:')
+ ;;
+ list-connector-security-maps)
+ _command_args=('--host+:' '--long+:long:(true false)' '--port+:' '--securitymap+:' '--target+:target:_asadmin_targets_cluster_clustered_instance_das_domain_standalone_instance')
+ ;;
+ list-connector-work-security-maps)
+ _command_args=('--host+:' '--port+:' '--securitymap+:')
+ ;;
+ list-containers)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ list-custom-resources)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_das_domain_standalone_instance' '--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_clustered_instance_das_domain_standalone_instance')
+ ;;
+ list-descriptors)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ list-domains)
+ _command_args=('--domaindir+:')
+ ;;
+ list-file-groups)
+ _command_args=('--authrealmname+:' '--host+:' '--name+:' '--port+:')
+ ;;
+ list-file-users)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_config_das_standalone_instance' '--authrealmname+:' '--host+:' '--port+:')
+ ;;
+ list-http-lb-configs)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ list-http-listeners)
+ _command_args=('*:targets:_asadmin_targets_cluster_config_das_standalone_instance' '--host+:' '--long+:long:(true false)' '--port+:')
+ ;;
+ list-iiop-listeners)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_config_das_domain_standalone_instance' '--host+:' '--port+:')
+ ;;
+ list-instances)
+ _command_args=('--host+:' '--long+:long:(true false)' '--nostatus+:nostatus:(true false)' '--port+:' '--standaloneonly+:standaloneonly:(true false)' '--timeoutmsec+:')
+ ;;
+ list-jacc-providers)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_config_das_standalone_instance' '--host+:' '--port+:')
+ ;;
+ list-javamail-resources)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_das_domain_standalone_instance' '--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_clustered_instance_das_domain_standalone_instance')
+ ;;
+ list-jdbc-connection-pools)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ list-jdbc-resources)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ list-jms-hosts)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ list-jms-resources)
+ _command_args=('*:targets:_asadmin_targets_cluster_das_domain_standalone_instance' '--host+:' '--port+:' '--restype+:')
+ ;;
+ list-jmsdest)
+ _command_args=('*:targets:_asadmin_targets_cluster_config_das_standalone_instance' '--desttype+:' '--host+:' '--port+:' '--property+:')
+ ;;
+ list-jndi-entries)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_das_domain_standalone_instance' '--context+:' '--host+:' '--port+:')
+ ;;
+ list-jndi-resources)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_das_domain_standalone_instance' '--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_clustered_instance_das_domain_standalone_instance')
+ ;;
+ list-jvm-options)
+ _command_args=('--host+:' '--port+:' '--profiler+:profiler:(true false)' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ list-libraries)
+ _command_args=('--host+:' '--port+:' '--type+:type:(common ext app)')
+ ;;
+ list-lifecycle-modules)
+ _command_args=('*:targets:_asadmin_targets_cluster_das_domain_standalone_instance' '--host+:' '--port+:' '--terse+:terse:(true false)')
+ ;;
+ list-log-attributes)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_config_das_standalone_instance' '--host+:' '--port+:')
+ ;;
+ list-log-levels)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ list-message-security-providers)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_config_das_standalone_instance' '--host+:' '--layer+:layer:(SOAP HttpServlet)' '--port+:')
+ ;;
+ list-modules)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ list-network-listeners)
+ _command_args=('*:targets:_asadmin_targets_cluster_config_das_standalone_instance' '--host+:' '--port+:')
+ ;;
+ list-nodes)
+ _command_args=('--host+:' '--long+:long:(true false)' '--port+:' '--terse+:terse:(true false)')
+ ;;
+ list-nodes-config)
+ _command_args=('--host+:' '--long+:long:(true false)' '--port+:' '--terse+:terse:(true false)')
+ ;;
+ list-nodes-dcom)
+ _command_args=('--host+:' '--long+:long:(true false)' '--port+:' '--terse+:terse:(true false)')
+ ;;
+ list-nodes-ssh)
+ _command_args=('--host+:' '--long+:long:(true false)' '--port+:' '--terse+:terse:(true false)')
+ ;;
+ list-password-aliases)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ list-persistence-types)
+ _command_args=('--host+:' '--port+:' '--type+:')
+ ;;
+ list-protocol-filters)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ list-protocol-finders)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ list-protocols)
+ _command_args=('*:targets:_asadmin_targets_cluster_config_das_standalone_instance' '--host+:' '--port+:')
+ ;;
+ list-resource-adapter-configs)
+ _command_args=('--host+:' '--long+:long:(true false)' '--port+:' '--raname+:')
+ ;;
+ list-resource-refs)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_das_standalone_instance' '--host+:' '--port+:')
+ ;;
+ list-sub-components)
+ _command_args=('--appname+:' '--host+:' '--port+:' '--resources+:resources:(true false)' '--terse+:terse:(true false)' '--type+:')
+ ;;
+ list-supported-cipher-suites)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ list-system-properties)
+ _command_args=('*:targets:_asadmin_targets_cluster_clustered_instance_config_das_domain_standalone_instance' '--host+:' '--port+:')
+ ;;
+ list-threadpools)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ list-timers)
+ _command_args=('*:targets:_asadmin_targets_cluster_das_standalone_instance' '--host+:' '--port+:')
+ ;;
+ list-transports)
+ _command_args=('*:targets:_asadmin_targets_cluster_config_das_standalone_instance' '--host+:' '--port+:')
+ ;;
+ list-virtual-servers)
+ _command_args=('*:targets:_asadmin_targets_cluster_config_das_standalone_instance' '--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ list-web-context-param)
+ _command_args=('--host+:' '--name+:' '--port+:')
+ ;;
+ list-web-env-entry)
+ _command_args=('--host+:' '--name+:' '--port+:')
+ ;;
+ login)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_das_standalone_instance')
+ ;;
+ migrate-timers)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_clustered_instance_das')
+ ;;
+ monitor)
+ _command_args=('--filename+:filename:directory:_files' '--filter+:' '--interval+:' '--type+:')
+ ;;
+ multimode)
+ _command_args=('--encoding+:' '--file+:file:directory:_files' '--printprompt+:printprompt:(true false)')
+ ;;
+ ping-connection-pool)
+ _command_args=('--appname+:' '--host+:' '--modulename+:' '--port+:' '--target+:')
+ ;;
+ ping-node-dcom)
+ _command_args=('*:nodes:_asadmin_nodes_dcom' '--host+:' '--port+:' '--validate+:validate:(true false)')
+ ;;
+ ping-node-ssh)
+ _command_args=('*:nodes:_asadmin_nodes_ssh' '--host+:' '--port+:' '--validate+:validate:(true false)')
+ ;;
+ recover-transactions)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_clustered_instance_das_standalone_instance' '--transactionlogdir+:')
+ ;;
+ redeploy)
+ _command_args=('*:directory:_files' '--asyncreplication+:asyncreplication:(true false)' '--availabilityenabled+:availabilityenabled:(true false)' '--contextroot+:' '--createtables+:createtables:(true false)' '--dbvendorname+:' '--deploymentplan+:deploymentplan:directory:_files' '--description+:' '--dropandcreatetables+:dropandcreatetables:(true false)' '--enabled+:enabled:(true false)' '--force+:force:(true false)' '--generatermistubs+:generatermistubs:(true false)' '--host+:' '--isredeploy+:isredeploy:(true false)' '--keepfailedstubs+:keepfailedstubs:(true false)' '--keepreposdir+:keepreposdir:(true false)' '--keepstate+:keepstate:(true false)' '--lbenabled+:lbenabled:(true false)' '--libraries+:' '--logreportederrors+:logreportederrors:(true false)' '--name+:' '--port+:' '--precompilejsp+:precompilejsp:(true false)' '--properties+:' '--property+:' '--retrieve+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance' '--type+:' '--uniquetablenames+:uniquetablenames:(true false)' '--verify+:verify:(true false)' '--virtualservers+:')
+ ;;
+ remove-library)
+ _command_args=('*:libraries:_asadmin_libraries' '--host+:' '--port+:' '--type+:type:(common ext app)')
+ ;;
+ restart-domain)
+ _command_args=('--debug+:debug:(true false)' '--domaindir+:' '--force+:force:(true false)' '--kill+:kill:(true false)')
+ ;;
+ restart-instance)
+ _command_args=('*:instances:_asadmin_instances' '--debug+:' '--host+:' '--port+:')
+ ;;
+ restart-local-instance)
+ _command_args=('*:instances:_asadmin_instances' '--debug+:debug:(true false)' '--force+:force:(true false)' '--kill+:kill:(true false)' '--node+:node:_asadmin_nodes' '--nodedir+:')
+ ;;
+ restore-domain)
+ _command_args=('--backupconfig+:' '--backupdir+:' '--description+:' '--domaindir+:' '--filename+:' '--force+:force:(true false)' '--long+:long:(true false)')
+ ;;
+ rollback-transaction)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_clustered_instance_das_standalone_instance' '--transaction_id+:')
+ ;;
+ rotate-log)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_clustered_instance_das_standalone_instance')
+ ;;
+ set)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ set-log-attributes)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ set-log-levels)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance')
+ ;;
+ set-web-context-param)
+ _command_args=('--description+:' '--host+:' '--ignoredescriptoritem+:ignoredescriptoritem:(true false)' '--name+:' '--port+:' '--value+:')
+ ;;
+ set-web-env-entry)
+ _command_args=('--description+:' '--host+:' '--ignoredescriptoritem+:ignoredescriptoritem:(true false)' '--name+:' '--port+:' '--type+:' '--value+:')
+ ;;
+ setup-ssh)
+ _command_args=('--generatekey+:generatekey:(true false)' '--sshkeyfile+:' '--sshport+:' '--sshpublickeyfile+:' '--sshuser+:')
+ ;;
+ show-component-status)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_clustered_instance_das_domain_standalone_instance')
+ ;;
+ start-cluster)
+ _command_args=('*:clusters:_asadmin_clusters' '--autohadboverride+:autohadboverride:(true false)' '--host+:' '--port+:' '--verbose+:verbose:(true false)')
+ ;;
+ start-database)
+ _command_args=('--dbhome+:' '--dbhost+:' '--dbport+:' '--jvmoptions+:')
+ ;;
+ start-domain)
+ _command_args=('--debug+:debug:(true false)' '--domaindir+:' '--upgrade+:upgrade:(true false)' '--verbose+:verbose:(true false)')
+ ;;
+ start-instance)
+ _command_args=('*:instances:_asadmin_instances' '--debug+:debug:(true false)' '--host+:' '--port+:' '--setenv+:' '--sync+:sync:(none normal full)' '--terse+:terse:(true false)')
+ ;;
+ start-local-instance)
+ _command_args=('*:instances:_asadmin_instances' '--debug+:debug:(true false)' '--node+:node:_asadmin_nodes' '--nodedir+:' '--sync+:sync:(none normal full)' '--verbose+:verbose:(true false)')
+ ;;
+ stop-cluster)
+ _command_args=('*:clusters:_asadmin_clusters' '--autohadboverride+:autohadboverride:(true false)' '--host+:' '--kill+:kill:(true false)' '--port+:' '--verbose+:verbose:(true false)')
+ ;;
+ stop-database)
+ _command_args=('--dbhost+:' '--dbport+:' '--dbuser+:')
+ ;;
+ stop-domain)
+ _command_args=('--domaindir+:' '--force+:force:(true false)' '--kill+:kill:(true false)')
+ ;;
+ stop-instance)
+ _command_args=('*:instances:_asadmin_instances' '--force+:force:(true false)' '--host+:' '--kill+:kill:(true false)' '--port+:')
+ ;;
+ stop-local-instance)
+ _command_args=('*:instances:_asadmin_instances' '--force+:force:(true false)' '--kill+:kill:(true false)' '--node+:node:_asadmin_nodes' '--nodedir+:')
+ ;;
+ test-upgrade)
+ _command_args=('--host+:' '--port+:')
+ ;;
+ undeploy)
+ _command_args=('*:applications:_asadmin_applications' '--cascade+:cascade:(true false)' '--droptables+:droptables:(true false)' '--host+:' '--isredeploy+:isredeploy:(true false)' '--keepreposdir+:keepreposdir:(true false)' '--keepstate+:keepstate:(true false)' '--port+:' '--properties+:' '--target+:target:_asadmin_targets_cluster_das_domain_standalone_instance')
+ ;;
+ unfreeze-transaction-service)
+ _command_args=('--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_clustered_instance_config_das_standalone_instance')
+ ;;
+ uninstall-node)
+ _command_args=('--force+:force:(true false)' '--installdir+:' '--sshkeyfile+:' '--sshport+:' '--sshuser+:')
+ ;;
+ uninstall-node-dcom)
+ _command_args=('--force+:force:(true false)' '--installdir+:' '--windowsdomain+:' '--windowsuser+:')
+ ;;
+ uninstall-node-ssh)
+ _command_args=('--force+:force:(true false)' '--installdir+:' '--sshkeyfile+:' '--sshport+:' '--sshuser+:')
+ ;;
+ unset-web-context-param)
+ _command_args=('--host+:' '--name+:' '--port+:')
+ ;;
+ unset-web-env-entry)
+ _command_args=('--host+:' '--name+:' '--port+:')
+ ;;
+ update-connector-security-map)
+ _command_args=('--addprincipals+:' '--addusergroups+:' '--host+:' '--mappedpassword+:' '--mappedusername+:' '--poolname+:' '--port+:' '--removeprincipals+:' '--removeusergroups+:' '--target+:')
+ ;;
+ update-connector-work-security-map)
+ _command_args=('--addgroups+:' '--addprincipals+:' '--host+:' '--port+:' '--raname+:' '--removegroups+:' '--removeprincipals+:')
+ ;;
+ update-file-user)
+ _command_args=('--authrealmname+:' '--groups+:' '--host+:' '--port+:' '--target+:target:_asadmin_targets_cluster_config_das_standalone_instance' '--userpassword+:')
+ ;;
+ update-node-config)
+ _command_args=('*:nodes:_asadmin_nodes_config' '--host+:' '--installdir+:' '--nodedir+:' '--nodehost+:' '--port+:')
+ ;;
+ update-node-dcom)
+ _command_args=('*:nodes:_asadmin_nodes_dcom' '--force+:force:(true false)' '--host+:' '--installdir+:' '--nodedir+:' '--nodehost+:' '--port+:' '--windowsdomain+:' '--windowspassword+:' '--windowsuser+:')
+ ;;
+ update-node-ssh)
+ _command_args=('*:nodes:_asadmin_nodes_ssh' '--force+:force:(true false)' '--host+:' '--installdir+:' '--nodedir+:' '--nodehost+:' '--port+:' '--sshkeyfile+:' '--sshkeypassphrase+:' '--sshpassword+:' '--sshport+:' '--sshuser+:')
+ ;;
+ update-password-alias)
+ _command_args=('--aliaspassword+:' '--host+:' '--port+:')
+ ;;
+ uptime)
+ _command_args=('--host+:' '--milliseconds+:milliseconds:(true false)' '--port+:')
+ ;;
+ validate-dcom)
+ _command_args=('--host+:' '--port+:' '--remotetestdir+:' '--verbose+:verbose:(true false)' '--windowsdomain+:' '--windowspassword+:' '--windowsuser+:')
+ ;;
+ validate-multicast)
+ _command_args=('--bindaddress+:' '--multicastaddress+:' '--multicastport+:' '--sendperiod+:' '--timeout+:' '--timetolive+:' '--verbose+:verbose:(true false)')
+ ;;
+ verify-domain-xml)
+ _command_args=('--domaindir+:')
+ ;;
+ version)
+ _command_args=('--local+:local:(true false)' '--terse+:terse:(true false)' '--verbose+:verbose:(true false)')
+ ;;
+esac
+
+
+_asadmin_applications() {
+ compadd $(command asadmin list-applications --terse | sed 's/\s.*//')
+}
+
+_asadmin_clusters() {
+ compadd $(command asadmin list-clusters --terse | sed 's/\s.*//')
+}
+
+_asadmin_configs() {
+ compadd $(command asadmin list-configs --terse)
+}
+
+_asadmin_instances() {
+ compadd $(command asadmin list-instances --terse --nostatus domain)
+}
+
+_asadmin_instances_standalone() {
+ compadd $(command asadmin list-instances --terse --standaloneonly --nostatus domain)
+}
+
+_asadmin_libraries() {
+ compadd $(command asadmin list-libraries --terse)
+}
+
+_asadmin_nodes() {
+ compadd $(command asadmin list-nodes --terse)
+}
+
+_asadmin_nodes_config() {
+ compadd $(command asadmin list-nodes-config --terse)
+}
+
+_asadmin_nodes_dcom() {
+ compadd $(command asadmin list-nodes-dcom --terse)
+}
+
+_asadmin_nodes_ssh() {
+ compadd $(command asadmin list-nodes-ssh --terse)
+}
+
+_asadmin_targets() {
+ _asadmin_instances
+ _asadmin_clusters
+ _asadmin_configs
+ compadd domain server
+}
+
+_asadmin_targets_cluster_clustered_instance_config_das_domain_standalone_instance() {
+ _asadmin_instances
+ _asadmin_clusters
+ _asadmin_configs
+ compadd domain server
+}
+
+_asadmin_targets_cluster_clustered_instance_config_das_standalone_instance() {
+ _asadmin_instances
+ _asadmin_clusters
+ _asadmin_configs
+ compadd server
+}
+
+_asadmin_targets_cluster_clustered_instance_das_domain_standalone_instance() {
+ _asadmin_instances
+ _asadmin_clusters
+ compadd domain server
+}
+
+_asadmin_targets_cluster_clustered_instance_das_standalone_instance() {
+ _asadmin_instances
+ _asadmin_clusters
+ _asadmin_configs
+ compadd server
+}
+
+_asadmin_targets_cluster_config_das_standalone_instance() {
+ _asadmin_instances_standalone
+ _asadmin_clusters
+ _asadmin_configs
+ compadd server
+}
+
+_asadmin_targets_cluster_das_domain_standalone_instance() {
+ _asadmin_instances_standalone
+ _asadmin_clusters
+ compadd domain server
+}
+
+_asadmin_targets_cluster_das_standalone_instance() {
+ _asadmin_instances_standalone
+ _asadmin_clusters
+ compadd server
+}
+
+_asadmin_targets_clustered_instance_das() {
+ _asadmin_instances
+ compadd server
+}
+
+_asadmin_targets_clustered_instance_das_standalone_instance() {
+ _asadmin_instances
+ compadd server
+}
+
+_asadmin_targets_cluster_standalone_instance() {
+ _asadmin_clusters
+ _asadmin_instances_standalone
+}
+
+
+compadd '--help'
+_arguments \
+ $_command_args \
+ && return 0;
diff --git a/zsh/.oh-my-zsh/plugins/glassfish/glassfish.plugin.zsh b/zsh/.oh-my-zsh/plugins/glassfish/glassfish.plugin.zsh
new file mode 100644
index 0000000..e69de29
diff --git a/zsh/.oh-my-zsh/plugins/globalias/README.md b/zsh/.oh-my-zsh/plugins/globalias/README.md
new file mode 100644
index 0000000..0b06410
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/globalias/README.md
@@ -0,0 +1,62 @@
+# Globalias plugin
+
+Expands all glob expressions, subcommands and aliases (including global).
+
+Idea from: https://blog.patshead.com/2012/11/automatically-expaning-zsh-global-aliases---simplified.html.
+
+## Usage
+
+Add `globalias` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... globalias)
+```
+
+Then just press `SPACE` to trigger the expansion of a command you've written.
+
+If you only want to insert a space without expanding the command line, press
+`CTRL`+`SPACE`.
+
+## Examples
+
+#### Glob expressions
+
+```
+$ touch {1..10}
+# expands to
+$ touch 1 2 3 4 5 6 7 8 9 10
+
+$ ls **/*.json
+# expands to
+$ ls folder/file.json anotherfolder/another.json
+```
+
+#### Subcommands
+
+```
+$ mkdir "`date -R`"
+# expands to
+$ mkdir Tue,\ 04\ Oct\ 2016\ 13:54:03\ +0300
+
+```
+
+#### Aliases
+
+```
+# .zshrc:
+alias -g G="| grep --color=auto -P"
+alias l='ls --color=auto -lah'
+
+$ lG
+# expands to
+$ ls --color=auto -lah | grep --color=auto -P
+```
+
+```
+# .zsrc:
+alias S="sudo systemctl"
+
+$ S
+# expands to:
+$ sudo systemctl
+```
diff --git a/zsh/.oh-my-zsh/plugins/globalias/globalias.plugin.zsh b/zsh/.oh-my-zsh/plugins/globalias/globalias.plugin.zsh
new file mode 100644
index 0000000..9602a96
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/globalias/globalias.plugin.zsh
@@ -0,0 +1,17 @@
+globalias() {
+ zle _expand_alias
+ zle expand-word
+ zle self-insert
+}
+zle -N globalias
+
+# space expands all aliases, including global
+bindkey -M emacs " " globalias
+bindkey -M viins " " globalias
+
+# control-space to make a normal space
+bindkey -M emacs "^ " magic-space
+bindkey -M viins "^ " magic-space
+
+# normal space during searches
+bindkey -M isearch " " magic-space
diff --git a/zsh/.oh-my-zsh/plugins/gnu-utils/README.md b/zsh/.oh-my-zsh/plugins/gnu-utils/README.md
new file mode 100644
index 0000000..f5fa81e
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gnu-utils/README.md
@@ -0,0 +1,38 @@
+# gnu-utils plugin
+
+This plugin binds GNU coreutils to their default names, so that you don't have
+to call them using their prefixed name, which starts with `g`. This is useful
+in systems which don't have GNU coreutils installed by default, mainly macOS
+or FreeBSD, which use BSD coreutils.
+
+To use it, add `gnu-utils` to the plugins array in your zshrc file:
+```zsh
+plugins=(... gnu-utils)
+```
+
+The plugin works by changing the path that the command hash points to, so
+instead of `ls` pointing to `/bin/ls`, it points to wherever `gls` is
+installed.
+
+Since `hash -rf` or `rehash` refreshes the command hashes, it also wraps
+`hash` and `rehash` so that the coreutils binding is always done again
+after calling these two commands.
+
+Look at the source code of the plugin to see which GNU coreutils are tried
+to rebind. Open an issue if there are some missing.
+
+## Other methods
+
+The plugin also documents two other ways to do this:
+
+1. Using a function wrapper, such that, for example, there exists a function
+named `ls` which calls `gls` instead. Since functions have a higher preference
+than commands, this ends up calling the GNU coreutil. It has also a higher
+preference over shell builtins (`gecho` is called instead of the builtin `echo`).
+
+2. Using an alias. This has an even higher preference than functions, but they
+could be overridden because of a user setting.
+
+## Author
+
+- [Sorin Ionescu](https://github.com/sorin-ionescu).
diff --git a/zsh/.oh-my-zsh/plugins/gnu-utils/gnu-utils.plugin.zsh b/zsh/.oh-my-zsh/plugins/gnu-utils/gnu-utils.plugin.zsh
new file mode 100644
index 0000000..967b8b4
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gnu-utils/gnu-utils.plugin.zsh
@@ -0,0 +1,83 @@
+# ------------------------------------------------------------------------------
+# FILE: gnu-utils.plugin.zsh
+# DESCRIPTION: oh-my-zsh plugin file.
+# AUTHOR: Sorin Ionescu (sorin.ionescu@gmail.com)
+# VERSION: 1.0.0
+# ------------------------------------------------------------------------------
+
+# Detect if GNU coreutils are installed by looking for gwhoami
+if [[ ! -x "${commands[gwhoami]}" ]]; then
+ return
+fi
+
+__gnu_utils() {
+ emulate -L zsh
+ local gcmds
+ local gcmd
+ local cmd
+ local prefix
+
+ # coreutils
+ gcmds=('g[' 'gbase64' 'gbasename' 'gcat' 'gchcon' 'gchgrp' 'gchmod'
+ 'gchown' 'gchroot' 'gcksum' 'gcomm' 'gcp' 'gcsplit' 'gcut' 'gdate'
+ 'gdd' 'gdf' 'gdir' 'gdircolors' 'gdirname' 'gdu' 'gecho' 'genv' 'gexpand'
+ 'gexpr' 'gfactor' 'gfalse' 'gfmt' 'gfold' 'ggroups' 'ghead' 'ghostid'
+ 'gid' 'ginstall' 'gjoin' 'gkill' 'glink' 'gln' 'glogname' 'gls' 'gmd5sum'
+ 'gmkdir' 'gmkfifo' 'gmknod' 'gmktemp' 'gmv' 'gnice' 'gnl' 'gnohup' 'gnproc'
+ 'god' 'gpaste' 'gpathchk' 'gpinky' 'gpr' 'gprintenv' 'gprintf' 'gptx' 'gpwd'
+ 'greadlink' 'grm' 'grmdir' 'gruncon' 'gseq' 'gsha1sum' 'gsha224sum'
+ 'gsha256sum' 'gsha384sum' 'gsha512sum' 'gshred' 'gshuf' 'gsleep' 'gsort'
+ 'gsplit' 'gstat' 'gstty' 'gsum' 'gsync' 'gtac' 'gtail' 'gtee' 'gtest'
+ 'gtimeout' 'gtouch' 'gtr' 'gtrue' 'gtruncate' 'gtsort' 'gtty' 'guname'
+ 'gunexpand' 'guniq' 'gunlink' 'guptime' 'gusers' 'gvdir' 'gwc' 'gwho'
+ 'gwhoami' 'gyes')
+
+ # findutils
+ gcmds+=('gfind' 'gxargs' 'glocate')
+
+ # Not part of either coreutils or findutils, installed separately.
+ gcmds+=('gsed' 'gtar' 'gtime')
+
+ for gcmd in "${gcmds[@]}"; do
+ # Do nothing if the command isn't found
+ (( ${+commands[$gcmd]} )) || continue
+
+ # This method allows for builtin commands to be primary but it's
+ # lost if hash -r or rehash -f is executed. Thus, those two
+ # functions have to be wrapped.
+ #
+ hash ${gcmd[2,-1]}=${commands[$gcmd]}
+
+ # This method generates wrapper functions.
+ # It will override shell builtins.
+ #
+ # eval "function $gcmd[2,-1]() { \"${prefix}/${gcmd//"["/"\\["}\" \"\$@\"; }"
+
+ # This method is inflexible since the aliases are at risk of being
+ # overridden resulting in the BSD coreutils being called.
+ #
+ # alias "$gcmd[2,-1]"="${prefix}/${gcmd//"["/"\\["}"
+ done
+
+ return 0
+}
+__gnu_utils
+
+function hash() {
+ if [[ "$*" =~ "-(r|f)" ]]; then
+ builtin hash "$@"
+ __gnu_utils
+ else
+ builtin hash "$@"
+ fi
+}
+
+function rehash() {
+ if [[ "$*" =~ "-f" ]]; then
+ builtin rehash "$@"
+ __gnu_utils
+ else
+ builtin rehash "$@"
+ fi
+}
+
diff --git a/zsh/.oh-my-zsh/plugins/go/README.md b/zsh/.oh-my-zsh/plugins/go/README.md
new file mode 100644
index 0000000..bf43b9f
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/go/README.md
@@ -0,0 +1 @@
+The go plugin is deprecated. Use the [golang plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/golang) instead.
diff --git a/zsh/.oh-my-zsh/plugins/go/go.plugin.zsh b/zsh/.oh-my-zsh/plugins/go/go.plugin.zsh
new file mode 120000
index 0000000..cf943e2
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/go/go.plugin.zsh
@@ -0,0 +1 @@
+../golang/golang.plugin.zsh
\ No newline at end of file
diff --git a/zsh/.oh-my-zsh/plugins/golang/README.md b/zsh/.oh-my-zsh/plugins/golang/README.md
new file mode 100644
index 0000000..0a1b43c
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/golang/README.md
@@ -0,0 +1,30 @@
+# Golang plugin
+
+This plugin adds completion for the [Go Programming Language](https://golang.org/),
+as well as some aliases for common Golang commands.
+
+To use it, add `golang` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... golang)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+| ------- | ----------------------- | ------------------------------------------------------------- |
+| gob | `go build` | Build your code |
+| goc | `go clean` | Removes object files from package source directories |
+| god | `go doc` | Prints documentation comments |
+| gof | `go fmt` | Gofmt formats (aligns and indents) Go programs. |
+| gofa | `go fmt ./...` | Run go fmt for all packages in current directory, recursively |
+| gog | `go get` | Downloads packages and then installs them to $GOPATH |
+| goi | `go install` | Compiles and installs packages to $GOPATH |
+| gol | `go list` | Lists Go packages |
+| gom | `go mod` | Access to operations on modules |
+| gop | `cd $GOPATH` | Takes you to $GOPATH |
+| gopb | `cd $GOPATH/bin` | Takes you to $GOPATH/bin |
+| gops | `cd $GOPATH/src` | Takes you to $GOPATH/src |
+| gor | `go run` | Compiles and runs your code |
+| got | `go test` | Runs tests |
+| gov | `go vet` | Vet examines Go source code and reports suspicious constructs |
diff --git a/zsh/.oh-my-zsh/plugins/golang/golang.plugin.zsh b/zsh/.oh-my-zsh/plugins/golang/golang.plugin.zsh
new file mode 100644
index 0000000..47b1098
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/golang/golang.plugin.zsh
@@ -0,0 +1,274 @@
+# install in /etc/zsh/zshrc or your personal .zshrc
+
+# gc
+prefixes=(5 6 8)
+for p in $prefixes; do
+ compctl -g "*.${p}" ${p}l
+ compctl -g "*.go" ${p}g
+done
+
+# standard go tools
+compctl -g "*.go" gofmt
+
+# gccgo
+compctl -g "*.go" gccgo
+
+# go tool
+__go_tool_complete() {
+ typeset -a commands build_flags
+ commands+=(
+ 'build[compile packages and dependencies]'
+ 'clean[remove object files]'
+ 'doc[run godoc on package sources]'
+ 'env[print Go environment information]'
+ 'fix[run go tool fix on packages]'
+ 'fmt[run gofmt on package sources]'
+ 'generate[generate Go files by processing source]'
+ 'get[download and install packages and dependencies]'
+ 'help[display help]'
+ 'install[compile and install packages and dependencies]'
+ 'list[list packages]'
+ 'mod[modules maintenance]'
+ 'run[compile and run Go program]'
+ 'test[test packages]'
+ 'tool[run specified go tool]'
+ 'version[print Go version]'
+ 'vet[run go tool vet on packages]'
+ )
+ if (( CURRENT == 2 )); then
+ # explain go commands
+ _values 'go tool commands' ${commands[@]}
+ return
+ fi
+ build_flags=(
+ '-a[force reinstallation of packages that are already up-to-date]'
+ '-n[print the commands but do not run them]'
+ '-p[number of parallel builds]:number'
+ '-race[enable data race detection]'
+ '-x[print the commands]'
+ '-work[print temporary directory name and keep it]'
+ '-ccflags[flags for 5c/6c/8c]:flags'
+ '-gcflags[flags for 5g/6g/8g]:flags'
+ '-ldflags[flags for 5l/6l/8l]:flags'
+ '-gccgoflags[flags for gccgo]:flags'
+ '-compiler[name of compiler to use]:name'
+ '-installsuffix[suffix to add to package directory]:suffix'
+ '-tags[list of build tags to consider satisfied]:tags'
+ )
+ __go_packages() {
+ local gopaths
+ declare -a gopaths
+ gopaths=("${(s/:/)$(go env GOPATH)}")
+ gopaths+=("$(go env GOROOT)")
+ for p in $gopaths; do
+ _path_files -W "$p/src" -/
+ done
+ }
+ __go_identifiers() {
+ compadd $(godoc -templates $ZSH/plugins/golang/templates ${words[-2]} 2> /dev/null)
+ }
+ case ${words[2]} in
+ doc)
+ _arguments -s -w \
+ "-c[symbol matching honors case (paths not affected)]" \
+ "-cmd[show symbols with package docs even if package is a command]" \
+ "-u[show unexported symbols as well as exported]" \
+ "2:importpaths:__go_packages" \
+ ":next identifiers:__go_identifiers"
+ ;;
+ clean)
+ _arguments -s -w \
+ "-i[remove the corresponding installed archive or binary (what 'go install' would create)]" \
+ "-n[print the remove commands it would execute, but not run them]" \
+ "-r[apply recursively to all the dependencies of the packages named by the import paths]" \
+ "-x[print remove commands as it executes them]" \
+ "*:importpaths:__go_packages"
+ ;;
+ fix|fmt|vet)
+ _alternative ':importpaths:__go_packages' ':files:_path_files -g "*.go"'
+ ;;
+ install)
+ _arguments -s -w : ${build_flags[@]} \
+ "-v[show package names]" \
+ '*:importpaths:__go_packages'
+ ;;
+ get)
+ _arguments -s -w : \
+ ${build_flags[@]}
+ ;;
+ build)
+ _arguments -s -w : \
+ ${build_flags[@]} \
+ "-v[show package names]" \
+ "-o[output file]:file:_files" \
+ "*:args:{ _alternative ':importpaths:__go_packages' ':files:_path_files -g \"*.go\"' }"
+ ;;
+ test)
+ _arguments -s -w : \
+ ${build_flags[@]} \
+ "-c[do not run, compile the test binary]" \
+ "-i[do not run, install dependencies]" \
+ "-v[print test output]" \
+ "-x[print the commands]" \
+ "-short[use short mode]" \
+ "-parallel[number of parallel tests]:number" \
+ "-cpu[values of GOMAXPROCS to use]:number list" \
+ "-run[run tests and examples matching regexp]:regexp" \
+ "-bench[run benchmarks matching regexp]:regexp" \
+ "-benchmem[print memory allocation stats]" \
+ "-benchtime[run each benchmark until taking this long]:duration" \
+ "-blockprofile[write goroutine blocking profile to file]:file" \
+ "-blockprofilerate[set sampling rate of goroutine blocking profile]:number" \
+ "-timeout[kill test after that duration]:duration" \
+ "-cpuprofile[write CPU profile to file]:file:_files" \
+ "-memprofile[write heap profile to file]:file:_files" \
+ "-memprofilerate[set heap profiling rate]:number" \
+ "*:args:{ _alternative ':importpaths:__go_packages' ':files:_path_files -g \"*.go\"' }"
+ ;;
+ list)
+ _arguments -s -w : \
+ "-f[alternative format for the list]:format" \
+ "-json[print data in json format]" \
+ "-compiled[set CompiledGoFiles to the Go source files presented to the compiler]" \
+ "-deps[iterate over not just the named packages but also all their dependencies]" \
+ "-e[change the handling of erroneous packages]" \
+ "-export[set the Export field to the name of a file containing up-to-date export information for the given package]" \
+ "-find[identify the named packages but not resolve their dependencies]" \
+ "-test[report not only the named packages but also their test binaries]" \
+ "-m[list modules instead of packages]" \
+ "-u[adds information about available upgrades]" \
+ "-versions[set the Module's Versions field to a list of all known versions of that module]:number" \
+ "*:importpaths:__go_packages"
+ ;;
+ mod)
+ typeset -a mod_commands
+ mod_commands+=(
+ 'download[download modules to local cache]'
+ 'edit[edit go.mod from tools or scripts]'
+ 'graph[print module requirement graph]'
+ 'init[initialize new module in current directory]'
+ 'tidy[add missing and remove unused modules]'
+ 'vendor[make vendored copy of dependencies]'
+ 'verify[verify dependencies have expected content]'
+ 'why[explain why packages or modules are needed]'
+ )
+ if (( CURRENT == 3 )); then
+ _values 'go mod commands' ${mod_commands[@]} "help[display help]"
+ return
+ fi
+ case ${words[3]} in
+ help)
+ _values 'go mod commands' ${mod_commands[@]}
+ ;;
+ download)
+ _arguments -s -w : \
+ "-json[print a sequence of JSON objects standard output]" \
+ "*:flags"
+ ;;
+ edit)
+ _arguments -s -w : \
+ "-fmt[reformat the go.mod file]" \
+ "-module[change the module's path]" \
+ "-replace[=old{@v}=new{@v} add a replacement of the given module path and version pair]:name" \
+ "-dropreplace[=old{@v}=new{@v} drop a replacement of the given module path and version pair]:name" \
+ "-go[={version} set the expected Go language version]:number" \
+ "-print[print the final go.mod in its text format]" \
+ "-json[print the final go.mod file in JSON format]" \
+ "*:flags"
+ ;;
+ graph)
+ ;;
+ init)
+ ;;
+ tidy)
+ _arguments -s -w : \
+ "-v[print information about removed modules]" \
+ "*:flags"
+ ;;
+ vendor)
+ _arguments -s -w : \
+ "-v[print the names of vendored]" \
+ "*:flags"
+ ;;
+ verify)
+ ;;
+ why)
+ _arguments -s -w : \
+ "-m[treats the arguments as a list of modules and finds a path to any package in each of the modules]" \
+ "-vendor[exclude tests of dependencies]" \
+ "*:importpaths:__go_packages"
+ ;;
+ esac
+ ;;
+ help)
+ _values "${commands[@]}" \
+ 'environment[show Go environment variables available]' \
+ 'gopath[GOPATH environment variable]' \
+ 'packages[description of package lists]' \
+ 'remote[remote import path syntax]' \
+ 'testflag[description of testing flags]' \
+ 'testfunc[description of testing functions]'
+ ;;
+ run)
+ _arguments -s -w : \
+ ${build_flags[@]} \
+ '*:file:_files -g "*.go"'
+ ;;
+ tool)
+ if (( CURRENT == 3 )); then
+ _values "go tool" $(go tool)
+ return
+ fi
+ case ${words[3]} in
+ [568]g)
+ _arguments -s -w : \
+ '-I[search for packages in DIR]:includes:_path_files -/' \
+ '-L[show full path in file:line prints]' \
+ '-S[print the assembly language]' \
+ '-V[print the compiler version]' \
+ '-e[no limit on number of errors printed]' \
+ '-h[panic on an error]' \
+ '-l[disable inlining]' \
+ '-m[print optimization decisions]' \
+ '-o[file specify output file]:file' \
+ '-p[assumed import path for this code]:importpath' \
+ '-u[disable package unsafe]' \
+ "*:file:_files -g '*.go'"
+ ;;
+ [568]l)
+ local O=${words[3]%l}
+ _arguments -s -w : \
+ '-o[file specify output file]:file' \
+ '-L[search for packages in DIR]:includes:_path_files -/' \
+ "*:file:_files -g '*.[ao$O]'"
+ ;;
+ dist)
+ _values "dist tool" banner bootstrap clean env install version
+ ;;
+ *)
+ # use files by default
+ _files
+ ;;
+ esac
+ ;;
+ esac
+}
+
+compdef __go_tool_complete go
+
+# aliases: go<~>
+alias gob='go build'
+alias goc='go clean'
+alias god='go doc'
+alias gof='go fmt'
+alias gofa='go fmt ./...'
+alias gog='go get'
+alias goi='go install'
+alias gol='go list'
+alias gom='go mod'
+alias gop='cd $GOPATH'
+alias gopb='cd $GOPATH/bin'
+alias gops='cd $GOPATH/src'
+alias gor='go run'
+alias got='go test'
+alias gov='go vet'
diff --git a/zsh/.oh-my-zsh/plugins/golang/templates/package.txt b/zsh/.oh-my-zsh/plugins/golang/templates/package.txt
new file mode 100644
index 0000000..2b75cce
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/golang/templates/package.txt
@@ -0,0 +1,29 @@
+{{with .PDoc}}{{/*
+
+Constants
+---------------------------------------
+
+*/}}{{with .Consts}}{{range .}}{{range .Names}}{{.}} {{end}}{{end}}{{end}}{{/*
+
+Variables
+---------------------------------------
+
+*/}}{{with .Vars}}{{range .}}{{range .Names}}{{.}} {{end}}{{end}}{{end}}{{/*
+
+Functions
+---------------------------------------
+
+*/}}{{with .Funcs}}{{range .}}{{ .Name }} {{end}}{{end}}{{/*
+
+Types
+---------------------------------------
+
+*/}}{{with .Types}}{{range .}}{{ $TypeName := .Name }}{{ $TypeName }} {{/*
+
+*/}}{{range .Methods}}{{ $TypeName }}.{{.Name}} {{end}}{{/*
+
+*/}}{{range .Funcs}}{{.Name}} {{end}}{{/*
+
+*/}}{{range .Consts}}{{range .Names}}{{.}} {{end}}{{end}}{{/*
+
+*/}}{{range .Vars}}{{range .Names}}{{.}} {{end}}{{end}}{{end}}{{end}}{{end}}
diff --git a/zsh/.oh-my-zsh/plugins/golang/templates/search.txt b/zsh/.oh-my-zsh/plugins/golang/templates/search.txt
new file mode 100644
index 0000000..e69de29
diff --git a/zsh/.oh-my-zsh/plugins/gpg-agent/README.md b/zsh/.oh-my-zsh/plugins/gpg-agent/README.md
new file mode 100644
index 0000000..a9711f9
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gpg-agent/README.md
@@ -0,0 +1,8 @@
+# gpg-agent
+
+Enables [GPG's gpg-agent](https://www.gnupg.org/documentation/manuals/gnupg/) if it is not running.
+
+To use it, add gpg-agent to the plugins array of your zshrc file:
+```
+plugins=(... gpg-agent)
+```
diff --git a/zsh/.oh-my-zsh/plugins/gpg-agent/gpg-agent.plugin.zsh b/zsh/.oh-my-zsh/plugins/gpg-agent/gpg-agent.plugin.zsh
new file mode 100644
index 0000000..3e24c25
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gpg-agent/gpg-agent.plugin.zsh
@@ -0,0 +1,16 @@
+# Enable gpg-agent if it is not running-
+# --use-standard-socket will work from version 2 upwards
+
+AGENT_SOCK=$(gpgconf --list-dirs | grep agent-socket | cut -d : -f 2)
+
+if [[ ! -S $AGENT_SOCK ]]; then
+ gpg-agent --daemon --use-standard-socket &>/dev/null
+fi
+export GPG_TTY=$TTY
+
+# Set SSH to use gpg-agent if it's enabled
+GNUPGCONFIG="${GNUPGHOME:-"$HOME/.gnupg"}/gpg-agent.conf"
+if [[ -r $GNUPGCONFIG ]] && command grep -q enable-ssh-support "$GNUPGCONFIG"; then
+ export SSH_AUTH_SOCK="$AGENT_SOCK.ssh"
+ unset SSH_AGENT_PID
+fi
diff --git a/zsh/.oh-my-zsh/plugins/gradle/README.md b/zsh/.oh-my-zsh/plugins/gradle/README.md
new file mode 100644
index 0000000..215503c
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gradle/README.md
@@ -0,0 +1,23 @@
+## Gradle Plugin
+
+This plugin adds completions and aliases for [Gradle](https://gradle.org/).
+
+To use it, add `gradle` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... gradle)
+```
+
+## Usage
+
+This plugin creates an alias `gradle` which is used to determine whether the current working directory has a gradlew file. If gradlew is present it will be used otherwise `gradle` is used directly. Gradle tasks can be executed directly without regard for whether it is `gradle` or `gradlew`
+
+Examples:
+```zsh
+gradle test
+gradle build
+```
+
+## Completion
+
+The completion provided for this plugin caches the parsed tasks into a file named `.gradletasknamecache` in the current working directory, so you might want to add that to your `.gitignore` file so that it's not accidentally committed.
diff --git a/zsh/.oh-my-zsh/plugins/gradle/_gradle b/zsh/.oh-my-zsh/plugins/gradle/_gradle
new file mode 120000
index 0000000..80723f2
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gradle/_gradle
@@ -0,0 +1 @@
+gradle.plugin.zsh
\ No newline at end of file
diff --git a/zsh/.oh-my-zsh/plugins/gradle/_gradlew b/zsh/.oh-my-zsh/plugins/gradle/_gradlew
new file mode 120000
index 0000000..80723f2
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gradle/_gradlew
@@ -0,0 +1 @@
+gradle.plugin.zsh
\ No newline at end of file
diff --git a/zsh/.oh-my-zsh/plugins/gradle/gradle.plugin.zsh b/zsh/.oh-my-zsh/plugins/gradle/gradle.plugin.zsh
new file mode 100644
index 0000000..6be5831
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gradle/gradle.plugin.zsh
@@ -0,0 +1,184 @@
+##############################################################################
+# A descriptive listing of core Gradle commands
+############################################################################
+
+gradle-or-gradlew() {
+ if [ -f ./gradlew ] ; then
+ echo "executing gradlew instead of gradle";
+ ./gradlew "$@";
+ else
+ gradle "$@";
+ fi
+}
+
+alias gradle=gradle-or-gradlew;
+
+function _gradle_core_commands() {
+ local ret=1 state
+ _arguments ':subcommand:->subcommand' && ret=0
+
+ case $state in
+ subcommand)
+ subcommands=(
+ "properties:Display all project properties"
+ "tasks:Calculate and display all tasks"
+ "dependencies:Calculate and display all dependencies"
+ "projects:Discover and display all sub-projects"
+ "build:Build the project"
+ "help:Display help"
+ )
+ _describe -t subcommands 'gradle subcommands' subcommands && ret=0
+ esac
+
+ return ret
+}
+
+function _gradle_arguments() {
+ _arguments -C \
+ '-a[Do not rebuild project dependencies]' \
+ '-b[Specifies the build file]' \
+ '-c[Specifies the settings file]' \
+ '-d[Log at the debug level]' \
+ '-g[Specifies the Gradle user home directory]' \
+ '-h[Shows a help message]' \
+ '-i[Set log level to INFO]' \
+ '-m[Runs the build with all task actions disabled]' \
+ '-p[Specifies the start directory for Gradle]' \
+ '-q[Log errors only]' \
+ '-s[Print out the stacktrace also for user exceptions]' \
+ '-t[Continuous mode. Automatically re-run build after changes]' \
+ '-u[Don''t search in parent directories for a settings.gradle file]' \
+ '-v[Prints Gradle version info]' \
+ '-x[Specify a task to be excluded]' \
+ '-D[Set a system property]' \
+ '-I[Specifies an initialization script]' \
+ '-P[Sets a project property of the root project]' \
+ '-S[Print out the full (very verbose) stacktrace]' \
+ '--build-file[Specifies the build file]' \
+ '--configure-on-demand[Only relevant projects are configured]' \
+ '--console[Type of console output to generate (plain, auto, or rich)]' \
+ '--continue[Continues task execution after a task failure]' \
+ '--continuous[Continuous mode. Automatically re-run build after changes]' \
+ '--daemon[Use the Gradle Daemon]' \
+ '--debug[Log at the debug level]' \
+ '--dry-run[Runs the build with all task actions disabled]' \
+ '--exclude-task[Specify a task to be excluded]' \
+ '--full-stacktrace[Print out the full (very verbose) stacktrace]' \
+ '--gradle-user-home[Specifies the Gradle user home directory]' \
+ '--gui[Launches the Gradle GUI app (Deprecated)]' \
+ '--help[Shows a help message]' \
+ '--include-build[Run the build as a composite, including the specified build]' \
+ '--info[Set log level to INFO]' \
+ '--init-script[Specifies an initialization script]' \
+ '--max-workers[Set the maximum number of workers that Gradle may use]' \
+ '--no-daemon[Do not use the Gradle Daemon]' \
+ '--no-rebuild[Do not rebuild project dependencies]' \
+ '--no-search-upwards[Don''t search in parent directories for a settings.gradle file]' \
+ '--offline[Build without accessing network resources]' \
+ '--parallel[Build projects in parallel]' \
+ '--profile[Profile build time and create report]' \
+ '--project-cache-dir[Specifies the project-specific cache directory]' \
+ '--project-dir[Specifies the start directory for Gradle]' \
+ '--project-prop[Sets a project property of the root project]' \
+ '--quiet[Log errors only]' \
+ '--recompile-scripts[Forces scripts to be recompiled, bypassing caching]' \
+ '--refresh-dependencies[Refresh the state of dependencies]' \
+ '--rerun-task[Specifies that any task optimization is ignored]' \
+ '--settings-file[Specifies the settings file]' \
+ '--stacktrace[Print out the stacktrace also for user exceptions]' \
+ '--status[Print Gradle Daemon status]' \
+ '--stop[Stop all Gradle Daemons]' \
+ '--system-prop[Set a system property]' \
+ '--version[Prints Gradle version info]' \
+ '*::command:->command' \
+ && return 0
+}
+
+
+##############################################################################
+# Examine the build.gradle file to see if its timestamp has changed;
+# and if so, regenerate the .gradle_tasks cache file
+############################################################################
+_gradle_does_task_list_need_generating () {
+ [[ ! -f .gradletasknamecache ]] || [[ build.gradle -nt .gradletasknamecache || build.gradle.kts -nt .gradletasknamecache ]]
+}
+
+##############
+# Parse the tasks from `gradle(w) tasks --all` and return them to the calling function.
+# All lines in the output from gradle(w) that are between /^-+$/ and /^\s*$/
+# are considered to be tasks. If and when gradle adds support for listing tasks
+# for programmatic parsing, this method can be deprecated.
+##############
+_gradle_parse_tasks () {
+ lines_might_be_tasks=false
+ task_name_buffer=""
+ while read -r line; do
+ if [[ $line =~ ^-+$ ]]; then
+ lines_might_be_tasks=true
+ # Empty buffer, because it contains items that are not tasks
+ task_name_buffer=""
+ elif [[ $line =~ ^\s*$ ]]; then
+ if [[ "$lines_might_be_tasks" = true ]]; then
+ # If a newline is found, echo the buffer to the calling function
+ while read -r task; do
+ echo $task | awk '/[a-zA-Z0-9:-]+/ {print $1}'
+ done <<< "$task_name_buffer"
+ # Empty buffer, because we are done with the tasks
+ task_name_buffer=""
+ fi
+ lines_might_be_tasks=false
+ elif [[ "$lines_might_be_tasks" = true ]]; then
+ task_name_buffer="${task_name_buffer}\n${line}"
+ fi
+ done <<< "$1"
+}
+
+
+##############
+# Gradle tasks from subprojects are allowed to be executed without specifying
+# the subproject; that task will then be called on all subprojects.
+# gradle(w) tasks --all only lists tasks per subproject, but when autocompleting
+# we often want to be able to run a specific task on all subprojects, e.g.
+# "gradle clean".
+# This function uses the list of tasks from "gradle tasks --all", and for each
+# line grabs everything after the last ":" and combines that output with the original
+# output. The combined list is returned as the result of this function.
+##############
+_gradle_parse_and_extract_tasks () {
+ # All tasks
+ tasks=$(_gradle_parse_tasks "$1")
+ # Task name without sub project(s) prefix
+ simple_tasks=$(echo $tasks | awk 'BEGIN { FS = ":" } { print $NF }')
+ echo "$tasks\n$simple_tasks"
+}
+
+##############################################################################
+# Discover the gradle tasks by running "gradle tasks --all"
+############################################################################
+_gradle_tasks () {
+ if [[ -f build.gradle || -f build.gradle.kts || -f settings.gradle || -f settings.gradle.kts ]]; then
+ _gradle_arguments
+ if _gradle_does_task_list_need_generating; then
+ _gradle_parse_and_extract_tasks "$(gradle tasks --all)" > .gradletasknamecache
+ fi
+ compadd -X "==== Gradle Tasks ====" $(cat .gradletasknamecache)
+ fi
+}
+
+_gradlew_tasks () {
+ if [[ -f build.gradle || -f build.gradle.kts || -f settings.gradle || -f settings.gradle.kts ]]; then
+ _gradle_arguments
+ if _gradle_does_task_list_need_generating; then
+ _gradle_parse_and_extract_tasks "$(./gradlew tasks --all)" > .gradletasknamecache
+ fi
+ compadd -X "==== Gradlew Tasks ====" $(cat .gradletasknamecache)
+ fi
+}
+
+
+##############################################################################
+# Register the completions against the gradle and gradlew commands
+############################################################################
+compdef _gradle_tasks gradle
+compdef _gradlew_tasks gradlew
+compdef _gradlew_tasks gw
diff --git a/zsh/.oh-my-zsh/plugins/grails/README.md b/zsh/.oh-my-zsh/plugins/grails/README.md
new file mode 100644
index 0000000..64b4a9f
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/grails/README.md
@@ -0,0 +1,71 @@
+# Grails plugin
+
+This plugin adds completion for the [Grails 2 CLI](https://grails.github.io/grails2-doc/2.5.x/guide/commandLine.html)
+
+To use it, add `grails` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... grails)
+```
+
+It looks for scripts in the following paths:
+
+- `$GRAILS_HOME/scripts`
+- `~/.grails/scripts`
+- `./scripts`
+- `./plugins/*/scripts`
+
+## Grails Commands
+- `add-proxy`
+- `alias`
+- `bootstrap`
+- `bug-report`
+- `clean`
+- `clean-all`
+- `clear-proxy`
+- `compile`
+- `console`
+- `create-app`
+- `create-controller`
+- `create-domain-class`
+- `create-filters`
+- `create-integration-test`
+- `create-multi-project-build`
+- `create-plugin`
+- `create-pom`
+- `create-script`
+- `create-service`
+- `create-tag-lib`
+- `create-unit-test`
+- `dependency-report`
+- `doc`
+- `help`
+- `init`
+- `install-app-templates`
+- `install-dependency`
+- `install-plugin`
+- `install-templates`
+- `integrate-with`
+- `interactive`
+- `list-plugin-updates`
+- `list-plugins`
+- `migrate-docs`
+- `package`
+- `package-plugin`
+- `plugin-info`
+- `refresh-dependencies`
+- `remove-proxy`
+- `run-app`
+- `run-script`
+- `run-war`
+- `set-grails-version`
+- `set-proxy`
+- `set-version`
+- `shell`
+- `stats`
+- `stop-app`
+- `test-app`
+- `uninstall-plugin`
+- `url-mappings-report`
+- `war`
+- `wrapper`
diff --git a/zsh/.oh-my-zsh/plugins/grails/grails.plugin.zsh b/zsh/.oh-my-zsh/plugins/grails/grails.plugin.zsh
new file mode 100644
index 0000000..1177773
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/grails/grails.plugin.zsh
@@ -0,0 +1,60 @@
+_enumerateGrailsScripts() {
+ # Default directoryies
+ directories=($GRAILS_HOME/scripts ~/.grails/scripts ./scripts)
+
+ # Check all of the plugins directories, if they exist
+ if [ -d plugins ]
+ then
+ directories+=(plugins/*/scripts)
+ fi
+
+ # Enumerate all of the Groovy files
+ files=()
+ for dir in $directories;
+ do
+ if [ -d $dir ]
+ then
+ files+=($dir/[^_]*.groovy)
+ fi
+ done
+
+ # Don't try to basename ()
+ if [ ${#files} -eq 0 ];
+ then
+ return
+ fi
+
+ scripts=()
+ for file in $files
+ do
+ # - Strip the path
+ # - Remove all scripts with a leading '_'
+ # - PackagePlugin_.groovy -> PackagePlugin
+ # - PackagePlugin -> Package-Plugin
+ # - Package-Plugin -> package-plugin
+ command=$(basename $file \
+ | sed -E -e 's/^_?([^_]+)_?.groovy/\1/'\
+ -e 's/([a-z])([A-Z])/\1-\2/g' \
+ | tr "[:upper:]" "[:lower:]" \
+ | sort \
+ | uniq)
+ scripts+=($command)
+ done
+ echo $scripts
+}
+
+_grails() {
+ if (( CURRENT == 2 )); then
+ scripts=( $(_enumerateGrailsScripts) )
+
+ if [ ${#scripts} -ne 0 ];
+ then
+ _multi_parts / scripts
+ return
+ fi
+ fi
+
+ _files
+}
+
+compdef _grails grails
diff --git a/zsh/.oh-my-zsh/plugins/grunt/README.md b/zsh/.oh-my-zsh/plugins/grunt/README.md
new file mode 100644
index 0000000..a69a9b7
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/grunt/README.md
@@ -0,0 +1,37 @@
+# grunt plugin
+
+This plugin adds completions for [grunt](https://github.com/gruntjs/grunt).
+
+To use it, add `grunt` to the plugins array of your `.zshrc` file:
+```zsh
+plugins=(... grunt)
+```
+
+## Enable caching
+
+If you want to use the cache, set the following in your `.zshrc`:
+```zsh
+zstyle ':completion:*' use-cache yes
+```
+
+## Settings
+
+* Show grunt file path:
+ ```zsh
+ zstyle ':completion::complete:grunt::options:' show_grunt_path yes
+ ```
+* Cache expiration days (default: 7):
+ ```zsh
+ zstyle ':completion::complete:grunt::options:' expire 1
+ ```
+* Not update options cache if target gruntfile is changed.
+ ```zsh
+ zstyle ':completion::complete:grunt::options:' no_update_options yes
+ ```
+
+Note that if you change the zstyle settings, you should delete the cache file and restart zsh.
+
+```zsh
+$ rm ~/.zcompcache/grunt
+$ exec zsh
+```
diff --git a/zsh/.oh-my-zsh/plugins/grunt/grunt.plugin.zsh b/zsh/.oh-my-zsh/plugins/grunt/grunt.plugin.zsh
new file mode 100644
index 0000000..3f96951
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/grunt/grunt.plugin.zsh
@@ -0,0 +1,255 @@
+#compdef grunt
+#autoload
+# -----------------------------------------------------------------------------
+# _grunt
+#
+# Completion script for grunt.
+# - https://github.com/gruntjs/grunt
+# - https://github.com/gruntjs/grunt-cli
+#
+# -----------------------------------------------------------------------------
+#
+# Version : 0.1.2
+# Author : Yonchu
+# License : MIT License
+# Repository : https://github.com/yonchu/grunt-zsh-completion
+# Last Change : 20 Aug 2014.
+#
+# Copyright (c) 2013 Yonchu.
+#
+# -----------------------------------------------------------------------------
+# USAGE
+# -----
+#
+# Enable caching:
+#
+# If you want to use the cache, set the followings in your .zshrc:
+#
+# zstyle ':completion:*' use-cache yes
+#
+#
+# Settings:
+#
+# - Show grunt file path:
+# zstyle ':completion::complete:grunt::options:' show_grunt_path yes
+#
+# - Cache expiration days (default: 7):
+# zstyle ':completion::complete:grunt::options:' expire 1
+#
+# - Not update options cache if target gruntfile is changed.
+# zstyle ':completion::complete:grunt::options:' no_update_options yes
+#
+# Note that if you change the zstyle settings,
+# you should delete the cache file and restart zsh.
+#
+# $ rm ~/.zcompcache/grunt
+# $ exec zsh
+#
+# -----------------------------------------------------------------------------
+
+function __grunt() {
+ local curcontext="$curcontext" update_policy state
+ local show_grunt_path update_msg gruntfile opts tasks
+
+ # Setup cache-policy.
+ zstyle -s ":completion:${curcontext}:" cache-policy update_policy
+ if [[ -z $update_policy ]]; then
+ zstyle ":completion:${curcontext}:" cache-policy __grunt_caching_policy
+ fi
+
+ # Check show_path option.
+ zstyle -b ":completion:${curcontext}:options:" show_grunt_path show_grunt_path
+
+ # Get current gruntfile.
+ gruntfile=$(__grunt_get_gruntfile)
+
+ # Initialize opts and tasks.
+ opts=()
+ tasks=()
+
+ # Add help options.
+ opts+=('(- 1 *)'{-h,--help}'[Display this help text.]')
+
+ ## Complete without gruntfile.
+ if [[ ! -f $gruntfile ]]; then
+ _arguments "${opts[@]}"
+ return
+ fi
+
+ ## Complete with gruntfile.
+ # Retrieve cache.
+ if ! __grunt_update_cache "$gruntfile"; then
+ update_msg=' (cache updated)'
+ fi
+
+ # Make optioins completion.
+ if [[ ${#__grunt_opts} -gt 0 ]]; then
+ opts+=("${__grunt_opts[@]}")
+ fi
+
+ # Complete arguments.
+ _arguments \
+ "${opts[@]}" \
+ '*: :->tasks' \
+ && return
+
+ case $state in
+ tasks)
+ if [[ $show_grunt_path == 'yes' ]]; then
+ update_msg="$update_msg: ${${gruntfile/#$HOME/~}%/}"
+ fi
+ # Make tasks completion.
+ if [[ ${#__grunt_tasks} -gt 0 ]]; then
+ tasks+=("${__grunt_tasks[@]}")
+ _describe -t grunt-task "$verbose grunt task$update_msg" tasks || return 1
+ fi
+ ;;
+ esac
+
+ return 0
+}
+
+# Cache policy:
+# The cache file name: grunt
+# The cache variable name: __grunt_version __grunt_gruntfile __grunt_opts __grunt_tasks
+function __grunt_update_cache() {
+ # TODO
+ local version='0.1.2'
+ local is_updating=0
+ local gruntfile="$1"
+ local grunt_info no_update_options cache_path
+
+ # Check no_update_options option.
+ zstyle -b ":completion:${curcontext}:options:" no_update_options no_update_options
+
+
+ if ! ( (( $+__grunt_gruntfile )) \
+ && (( $+__grunt_opts )) \
+ && (( $+__grunt_tasks )) ) \
+ && ! _retrieve_cache 'grunt'; then
+ is_updating=1
+ fi
+
+ if [[ $gruntfile != $__grunt_gruntfile ]]; then
+ # Except for --help options.
+ __grunt_gruntfile=$gruntfile
+ if [[ $no_update_options == 'yes' ]]; then
+ if [[ $PREFIX == ${PREFIX#-} ]]; then
+ # Not options completions.
+ is_updating=1
+ elif [[ ${#__grunt_opts} -lt 2 ]]; then
+ is_updating=1
+ else
+ unset __grunt_gruntfile
+ fi
+ else
+ is_updating=1
+ fi
+ else
+ if [[ $PREFIX != ${PREFIX#-} && ${#__grunt_opts} -gt 1 ]]; then
+ unset __grunt_gruntfile
+ fi
+ fi
+
+ if _cache_invalid 'grunt'; then
+ is_updating=1
+ fi
+
+ # Check _grunt version.
+ if [[ $__grunt_version != $version ]]; then
+ is_updating=1
+ fi
+
+ if [[ $is_updating -ne 0 ]]; then
+ # Update caceh.
+ __grunt_version=$version
+ __grunt_gruntfile=$gruntfile
+ is_updating=1
+ grunt_info=$(grunt --help --no-color --gruntfile "$__grunt_gruntfile" 2>/dev/null)
+ __grunt_opts=(${(f)"$(__grunt_get_opts "$grunt_info")"})
+ __grunt_tasks=(${(f)"$(__grunt_get_tasks "$grunt_info")"})
+ _store_cache 'grunt' __grunt_version __grunt_gruntfile __grunt_opts __grunt_tasks
+ fi
+ return $is_updating
+}
+
+function __grunt_get_tasks() {
+ echo -E "$1" \
+ | grep 'Available tasks' -A 100 \
+ | grep '^ ' \
+ | sed -e 's/^[[:blank:]]*//' -e 's/[[:blank:]]*$//' \
+ | sed -e 's/:/\\:/g' \
+ | sed -e 's/ /:/'
+}
+
+function __grunt_get_opts() {
+ local opt_hunk opt_sep opt_num line opt
+ opt_hunk=$(echo -E "$1" \
+ | grep 'Options$' -A 100 \
+ | sed '1 d' \
+ | sed -e 's/[[:blank:]]*$//' \
+ )
+
+ opt_sep=()
+ opt_hunk=(${(f)opt_hunk})
+ opt_num=0
+ for line in "$opt_hunk[@]"; do
+ opt=$(echo -E "$line" | sed -e 's/^[[:blank:]]*//')
+ if [[ $line == $opt ]]; then
+ break
+ fi
+ if [[ $opt != ${opt#-} ]]; then
+ # Start with -
+ (( opt_num++ ))
+ opt=$(echo -E "$opt" | sed 's/^\(\(--[^ ]*\)\(, \(-[^ ]*\)\)*\) */\2\\t\4\\\t/')
+ fi
+ opt_sep[$opt_num]=("${opt_sep[$opt_num]}${opt}")
+ done
+
+ for line in "$opt_sep[@]"; do
+ opt=(${(s:\t:)line})
+ if [[ ${opt[1]} == '--help' ]]; then
+ continue
+ fi
+ if [[ ${#opt} -eq 2 ]]; then
+ echo -E "(${opt[1]})${opt[1]}[${opt[2]}]"
+ else
+ echo -E "(${opt[1]},${opt[2]})${opt[1]}[${opt[3]}]"
+ echo -E "(${opt[1]},${opt[2]})${opt[2]}[${opt[3]}]"
+ fi
+ done
+}
+
+function __grunt_get_gruntfile() {
+ local gruntfile
+ local curpath="$PWD"
+ while [ "$curpath" ]; do
+ for gruntfile in "$curpath/"{G,g}runtfile.{js,coffee}; do
+ if [[ -e "$gruntfile" ]]; then
+ echo "$gruntfile"
+ return
+ fi
+ done
+ curpath=${curpath%/*}
+ done
+ return 1
+}
+
+function __grunt_caching_policy() {
+ # Returns status zero if the completions cache needs rebuilding.
+
+ # Rebuild if .agignore more recent than cache.
+ if [[ -f $__grunt_gruntfile && $__grunt_gruntfile -nt $1 ]]; then
+ # Invalid cache because gruntfile is old.
+ return 0
+ fi
+
+ local -a oldp
+ local expire
+ zstyle -s ":completion:${curcontext}:options:" expire expire || expire=7
+ # Rebuild if cache is more than $expire days.
+ oldp=( "$1"(Nm+$expire) )
+ (( $#oldp ))
+}
+
+compdef __grunt grunt
\ No newline at end of file
diff --git a/zsh/.oh-my-zsh/plugins/gulp/README.md b/zsh/.oh-my-zsh/plugins/gulp/README.md
new file mode 100644
index 0000000..4ed2b99
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gulp/README.md
@@ -0,0 +1,8 @@
+# gulp plugin
+
+This plugin adds autocompletion for your [`gulp`](https://gulpjs.com/) tasks. It grabs all available tasks from the `gulpfile.js` in the current directory.
+
+To use it, add `gulp` to the plugins array of your `.zshrc` file:
+```
+plugins=(... gulp)
+```
diff --git a/zsh/.oh-my-zsh/plugins/gulp/gulp.plugin.zsh b/zsh/.oh-my-zsh/plugins/gulp/gulp.plugin.zsh
new file mode 100644
index 0000000..6234302
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/gulp/gulp.plugin.zsh
@@ -0,0 +1,29 @@
+#!/usr/bin/env zsh
+
+#
+# gulp-autocompletion-zsh
+#
+# Autocompletion for your gulp.js tasks
+#
+# Copyright(c) 2014 André König
+# MIT Licensed
+#
+
+#
+# André König
+# GitHub: https://github.com/akoenig
+# Twitter: https://twitter.com/caiifr
+#
+
+#
+# Grabs all available tasks from the `gulpfile.js`
+# in the current directory.
+#
+function _gulp_completion {
+ compls=$(gulp --tasks-simple 2>/dev/null)
+
+ completions=(${=compls})
+ compadd -- $completions
+}
+
+compdef _gulp_completion gulp
diff --git a/zsh/.oh-my-zsh/plugins/hanami/README.md b/zsh/.oh-my-zsh/plugins/hanami/README.md
new file mode 100644
index 0000000..3ac8def
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/hanami/README.md
@@ -0,0 +1,32 @@
+# Hanami Plugin #
+This plugin adds convenient ways to work with [Hanami](https://hanamirb.org/) via console.
+It's inspired by Rails plugin, so if you've used it, you'll feel like home.
+
+## Usage ##
+
+For example, type `hc` into your console when you're within Hanami project directory to run
+the application console. Have a look at available shortcuts below. You can read more about
+these commands [on the official website](https://hanamirb.org/guides/command-line/applications/).
+
+## Aliases ##
+
+| Alias | Command | Description |
+|-------|---------------------------|---------------------------------------------------------|
+| HED | HANAMI_ENV=development | Set environment variable HANAMI_ENV to development |
+| HEP | HANAMI_ENV=production | Set environment variable HANAMI_ENV to production |
+| HET | HANAMI_ENV=test | Set environment variable HANAMI_ENV to test |
+| hc | hanami console | Run application console |
+| hd | hanami destroy | Remove specified hanami resource |
+| hg | hanami generate | Create specified hanami resource |
+| hgm | hanami generate migration | Create migration file |
+| hs | hanami server | Launch server with hanami application |
+| hsp | hanami server -p | Launch server with specified port |
+| hr | hanami routes | List application routes |
+| hdc | hanami db create | Create application database |
+| hdd | hanami db drop | Delete application database |
+| hdp | hanami db prepare | Prepare database for the current environment |
+| hda | hanami db apply | Recreates a fresh schema after migrations (destructive) |
+| hdv | hanami db version | Print current database version |
+| hdrs | hdd && hdp | Drop and recreate application database |
+| hdtp | HET hdp | Actualize test environment database |
+| hrg | hr | grep | Grep hanami routes with specified pattern |
diff --git a/zsh/.oh-my-zsh/plugins/hanami/hanami.plugin.zsh b/zsh/.oh-my-zsh/plugins/hanami/hanami.plugin.zsh
new file mode 100644
index 0000000..349c42c
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/hanami/hanami.plugin.zsh
@@ -0,0 +1,19 @@
+alias -g HED='HANAMI_ENV=development'
+alias -g HEP='HANAMI_ENV=production'
+alias -g HET='HANAMI_ENV=test'
+
+alias hc='hanami console'
+alias hd='hanami destroy'
+alias hg='hanami generate'
+alias hgm='hanami generate migration'
+alias hs='hanami server'
+alias hsp='hanami server -p'
+alias hr='hanami routes'
+alias hdc='hanami db create'
+alias hdd='hanami db drop'
+alias hdp='hanami db prepare'
+alias hda='hanami db apply'
+alias hdv='hanami db version'
+alias hdrs='hdd && hdp'
+alias hdtp='HET hdp'
+alias hrg='hr | grep'
diff --git a/zsh/.oh-my-zsh/plugins/helm/README.md b/zsh/.oh-my-zsh/plugins/helm/README.md
new file mode 100644
index 0000000..49844c7
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/helm/README.md
@@ -0,0 +1,9 @@
+# Helm plugin
+
+This plugin adds completion for [Helm](https://helm.sh/), the Kubernetes package manager.
+
+To use it, add `helm` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... helm)
+```
diff --git a/zsh/.oh-my-zsh/plugins/helm/helm.plugin.zsh b/zsh/.oh-my-zsh/plugins/helm/helm.plugin.zsh
new file mode 100644
index 0000000..78499c1
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/helm/helm.plugin.zsh
@@ -0,0 +1,7 @@
+# Autocompletion for helm.
+#
+# Copy from kubectl : https://github.com/pstadler
+
+if [ $commands[helm] ]; then
+ source <(helm completion zsh)
+fi
diff --git a/zsh/.oh-my-zsh/plugins/heroku/README.md b/zsh/.oh-my-zsh/plugins/heroku/README.md
new file mode 100644
index 0000000..2bf92c9
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/heroku/README.md
@@ -0,0 +1,9 @@
+# Heroku
+
+This plugin provides completion for the [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli).
+
+To use it add heroku to the plugins array in your zshrc file:
+
+```bash
+plugins=(... heroku)
+```
diff --git a/zsh/.oh-my-zsh/plugins/heroku/heroku.plugin.zsh b/zsh/.oh-my-zsh/plugins/heroku/heroku.plugin.zsh
new file mode 100644
index 0000000..9a99b42
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/heroku/heroku.plugin.zsh
@@ -0,0 +1,9 @@
+HEROKU_AC_CACHE_DIR="$HOME/.cache"
+if [ "$(uname -s)" = "Darwin" ]; then
+ HEROKU_AC_CACHE_DIR="$HOME/Library/Caches"
+fi
+if [ ! -z "$XDG_CACHE_HOME" ]; then
+ HEROKU_AC_CACHE_DIR="$XDG_CACHE_DIR"
+fi
+HEROKU_AC_ZSH_SETUP_PATH=$HEROKU_AC_CACHE_DIR/heroku/autocomplete/zsh_setup
+[ -f $HEROKU_AC_ZSH_SETUP_PATH ] && source $HEROKU_AC_ZSH_SETUP_PATH
diff --git a/zsh/.oh-my-zsh/plugins/history-substring-search/README.md b/zsh/.oh-my-zsh/plugins/history-substring-search/README.md
new file mode 100644
index 0000000..0ffb213
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/history-substring-search/README.md
@@ -0,0 +1,149 @@
+zsh-history-substring-search
+==============================================================================
+
+This is a clean-room implementation of the [Fish shell][1]'s history search
+feature, where you can type in any part of any previously entered command
+and press the UP and DOWN arrow keys to cycle through the matching commands.
+You can also use K and J in VI mode or ^P and ^N in EMACS mode for the same.
+
+[1]: https://fishshell.com
+[2]: https://www.zsh.org/mla/users/2009/msg00818.html
+[3]: https://sourceforge.net/projects/fizsh/
+[4]: https://github.com/ohmyzsh/ohmyzsh/pull/215
+[5]: https://github.com/zsh-users/zsh-history-substring-search
+[6]: https://github.com/zsh-users/zsh-syntax-highlighting
+
+------------------------------------------------------------------------------
+Requirements
+------------------------------------------------------------------------------
+
+* [ZSH](http://zsh.sourceforge.net) 4.3 or newer
+
+------------------------------------------------------------------------------
+Usage
+------------------------------------------------------------------------------
+
+1. Load this script into your interactive ZSH session:
+
+ % source zsh-history-substring-search.zsh
+
+ If you want to use [zsh-syntax-highlighting][6] along with this script,
+ then make sure that you load it *before* you load this script:
+
+ % source zsh-syntax-highlighting.zsh
+ % source zsh-history-substring-search.zsh
+
+2. Bind keyboard shortcuts to this script's functions:
+
+ # bind UP and DOWN arrow keys
+ zmodload zsh/terminfo
+ bindkey "$terminfo[kcuu1]" history-substring-search-up
+ bindkey "$terminfo[kcud1]" history-substring-search-down
+
+ # bind UP and DOWN arrow keys (compatibility fallback
+ # for Ubuntu 12.04, Fedora 21, and MacOSX 10.9 users)
+ bindkey '^[[A' history-substring-search-up
+ bindkey '^[[B' history-substring-search-down
+
+ # bind P and N for EMACS mode
+ bindkey -M emacs '^P' history-substring-search-up
+ bindkey -M emacs '^N' history-substring-search-down
+
+ # bind k and j for VI mode
+ bindkey -M vicmd 'k' history-substring-search-up
+ bindkey -M vicmd 'j' history-substring-search-down
+
+3. Type any part of any previous command and then:
+
+ * Press the UP arrow key to select the nearest command that (1) contains
+ your query and (2) is older than the current command in the command
+ history.
+
+ * Press the DOWN arrow key to select the nearest command that (1)
+ contains your query and (2) is newer than the current command in the
+ command history.
+
+ * Press ^U (the Control and U keys simultaneously) to abort the search.
+
+4. If a matching command spans more than one line of text, press the LEFT
+ arrow key to move the cursor away from the end of the command, and then:
+
+ * Press the UP arrow key to move the cursor to the line above. When the
+ cursor reaches the first line of the command, pressing the UP arrow
+ key again will cause this script to perform another search.
+
+ * Press the DOWN arrow key to move the cursor to the line below. When
+ the cursor reaches the last line of the command, pressing the DOWN
+ arrow key again will cause this script to perform another search.
+
+------------------------------------------------------------------------------
+Configuration
+------------------------------------------------------------------------------
+
+This script defines the following global variables. You may override their
+default values only after having loaded this script into your ZSH session.
+
+* HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND is a global variable that defines
+ how the query should be highlighted inside a matching command. Its default
+ value causes this script to highlight using bold, white text on a magenta
+ background. See the "Character Highlighting" section in the zshzle(1) man
+ page to learn about the kinds of values you may assign to this variable.
+
+* HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND is a global variable that
+ defines how the query should be highlighted when no commands in the
+ history match it. Its default value causes this script to highlight using
+ bold, white text on a red background. See the "Character Highlighting"
+ section in the zshzle(1) man page to learn about the kinds of values you
+ may assign to this variable.
+
+* HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS is a global variable that defines
+ how the command history will be searched for your query. Its default value
+ causes this script to perform a case-insensitive search. See the "Globbing
+ Flags" section in the zshexpn(1) man page to learn about the kinds of
+ values you may assign to this variable.
+
+To always receive _unique_ search results, use `setopt HIST_IGNORE_ALL_DUPS`.
+Alternatively, use `setopt HIST_FIND_NO_DUPS` which makes this plugin skip
+duplicate _adjacent_ search results as you cycle through them---however, this
+does not guarantee that search results are unique: if your search results were
+"Dog", "Dog", "HotDog", "Dog", then cycling them gives "Dog", "HotDog", "Dog".
+Notice that the "Dog" search result appeared twice as you cycled through them!
+If you wish to avoid this limitation, then use `setopt HIST_IGNORE_ALL_DUPS`.
+
+------------------------------------------------------------------------------
+History
+------------------------------------------------------------------------------
+
+This script was originally written by [Peter Stephenson][2], who published it
+to the ZSH users mailing list (thereby making it public domain) in September
+2009. It was later revised by Guido van Steen and released under the BSD
+license (see below) as part of [the fizsh project][3] in January 2011.
+
+It was later extracted from fizsh release 1.0.1, refactored heavily, and
+repackaged as both an [oh-my-zsh plugin][4] and as an independently loadable
+[ZSH script][5] by Suraj N. Kurapati in 2011.
+
+It was [further developed][4] by Guido van Steen, Suraj N. Kurapati, Sorin
+Ionescu, and Vincent Guerci in 2011.
+
+------------------------------------------------------------------------------
+Oh My Zsh Distribution Notes
+------------------------------------------------------------------------------
+
+What you are looking at now is Oh My Zsh's repackaging of zsh-history-substring-search
+as an OMZ module inside the Oh My Zsh distribution.
+
+The upstream repo, zsh-users/zsh-history-substring-search, can be found on GitHub at
+https://github.com/zsh-users/zsh-history-substring-search.
+
+This downstream copy was last updated from the following upstream commit:
+
+ SHA: 2c295432175990c1bb4e90bc13f609daa67a25d6
+ Commit date: 2015-09-28 10:47:34 -0700
+
+Everything above this section is a copy of the original upstream's README, so things
+may differ slightly when you're using this inside OMZ. In particular, you do not
+need to set up key bindings for the up and down arrows yourself in `~/.zshrc`; the OMZ
+plugin does that for you. You may still want to set up additional emacs- or vi-specific
+bindings as mentioned above.
+
diff --git a/zsh/.oh-my-zsh/plugins/history-substring-search/history-substring-search.plugin.zsh b/zsh/.oh-my-zsh/plugins/history-substring-search/history-substring-search.plugin.zsh
new file mode 100644
index 0000000..7883a65
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/history-substring-search/history-substring-search.plugin.zsh
@@ -0,0 +1,26 @@
+# This file integrates the zsh-history-substring-search script into oh-my-zsh.
+
+source "${0:r:r}.zsh"
+
+if test "$CASE_SENSITIVE" = true; then
+ unset HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS
+fi
+
+if test "$DISABLE_COLOR" = true; then
+ unset HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
+ unset HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND
+fi
+
+
+# Bind terminal-specific up and down keys
+# Bind in both emacs and vi modes so it works in both, and is not
+# sensitive to whether this is loaded before or after the vi-mode plugin
+if [[ -n "$terminfo[kcuu1]" ]]; then
+ bindkey -M emacs "$terminfo[kcuu1]" history-substring-search-up
+ bindkey -M viins "$terminfo[kcuu1]" history-substring-search-up
+fi
+if [[ -n "$terminfo[kcud1]" ]]; then
+ bindkey -M emacs "$terminfo[kcud1]" history-substring-search-down
+ bindkey -M viins "$terminfo[kcud1]" history-substring-search-down
+fi
+
diff --git a/zsh/.oh-my-zsh/plugins/history-substring-search/history-substring-search.zsh b/zsh/.oh-my-zsh/plugins/history-substring-search/history-substring-search.zsh
new file mode 100644
index 0000000..3b8afd3
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/history-substring-search/history-substring-search.zsh
@@ -0,0 +1,585 @@
+#!/usr/bin/env zsh
+##############################################################################
+#
+# Copyright (c) 2009 Peter Stephenson
+# Copyright (c) 2011 Guido van Steen
+# Copyright (c) 2011 Suraj N. Kurapati
+# Copyright (c) 2011 Sorin Ionescu
+# Copyright (c) 2011 Vincent Guerci
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+#
+# * Neither the name of the FIZSH nor the names of its contributors
+# may be used to endorse or promote products derived from this
+# software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+##############################################################################
+
+#-----------------------------------------------------------------------------
+# configuration variables
+#-----------------------------------------------------------------------------
+
+HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='bg=magenta,fg=white,bold'
+HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=white,bold'
+HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i'
+
+#-----------------------------------------------------------------------------
+# the main ZLE widgets
+#-----------------------------------------------------------------------------
+
+history-substring-search-up() {
+ _history-substring-search-begin
+
+ _history-substring-search-up-history ||
+ _history-substring-search-up-buffer ||
+ _history-substring-search-up-search
+
+ _history-substring-search-end
+}
+
+history-substring-search-down() {
+ _history-substring-search-begin
+
+ _history-substring-search-down-history ||
+ _history-substring-search-down-buffer ||
+ _history-substring-search-down-search
+
+ _history-substring-search-end
+}
+
+zle -N history-substring-search-up
+zle -N history-substring-search-down
+
+#-----------------------------------------------------------------------------
+# implementation details
+#-----------------------------------------------------------------------------
+
+zmodload -F zsh/parameter
+
+#
+# We have to "override" some keys and widgets if the
+# zsh-syntax-highlighting plugin has not been loaded:
+#
+# https://github.com/nicoulaj/zsh-syntax-highlighting
+#
+if [[ $+functions[_zsh_highlight] -eq 0 ]]; then
+ #
+ # Dummy implementation of _zsh_highlight() that
+ # simply removes any existing highlights when the
+ # user inserts printable characters into $BUFFER.
+ #
+ _zsh_highlight() {
+ if [[ $KEYS == [[:print:]] ]]; then
+ region_highlight=()
+ fi
+ }
+
+ #
+ # The following snippet was taken from the zsh-syntax-highlighting project:
+ #
+ # https://github.com/zsh-users/zsh-syntax-highlighting/blob/56b134f5d62ae3d4e66c7f52bd0cc2595f9b305b/zsh-syntax-highlighting.zsh#L126-161
+ #
+ # Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+ # All rights reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions are
+ # met:
+ #
+ # * Redistributions of source code must retain the above copyright
+ # notice, this list of conditions and the following disclaimer.
+ #
+ # * Redistributions in binary form must reproduce the above copyright
+ # notice, this list of conditions and the following disclaimer in the
+ # documentation and/or other materials provided with the distribution.
+ #
+ # * Neither the name of the zsh-syntax-highlighting contributors nor the
+ # names of its contributors may be used to endorse or promote products
+ # derived from this software without specific prior written permission.
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #
+ #--------------8<-------------------8<-------------------8<-----------------
+ # Rebind all ZLE widgets to make them invoke _zsh_highlights.
+ _zsh_highlight_bind_widgets()
+ {
+ # Load ZSH module zsh/zleparameter, needed to override user defined widgets.
+ zmodload zsh/zleparameter 2>/dev/null || {
+ echo 'zsh-syntax-highlighting: failed loading zsh/zleparameter.' >&2
+ return 1
+ }
+
+ # Override ZLE widgets to make them invoke _zsh_highlight.
+ local cur_widget
+ for cur_widget in ${${(f)"$(builtin zle -la)"}:#(.*|_*|orig-*|run-help|which-command|beep|yank*)}; do
+ case $widgets[$cur_widget] in
+
+ # Already rebound event: do nothing.
+ user:$cur_widget|user:_zsh_highlight_widget_*);;
+
+ # User defined widget: override and rebind old one with prefix "orig-".
+ user:*) eval "zle -N orig-$cur_widget ${widgets[$cur_widget]#*:}; \
+ _zsh_highlight_widget_$cur_widget() { builtin zle orig-$cur_widget -- \"\$@\" && _zsh_highlight }; \
+ zle -N $cur_widget _zsh_highlight_widget_$cur_widget";;
+
+ # Completion widget: override and rebind old one with prefix "orig-".
+ completion:*) eval "zle -C orig-$cur_widget ${${widgets[$cur_widget]#*:}/:/ }; \
+ _zsh_highlight_widget_$cur_widget() { builtin zle orig-$cur_widget -- \"\$@\" && _zsh_highlight }; \
+ zle -N $cur_widget _zsh_highlight_widget_$cur_widget";;
+
+ # Builtin widget: override and make it call the builtin ".widget".
+ builtin) eval "_zsh_highlight_widget_$cur_widget() { builtin zle .$cur_widget -- \"\$@\" && _zsh_highlight }; \
+ zle -N $cur_widget _zsh_highlight_widget_$cur_widget";;
+
+ # Default: unhandled case.
+ *) echo "zsh-syntax-highlighting: unhandled ZLE widget '$cur_widget'" >&2 ;;
+ esac
+ done
+ }
+ #-------------->8------------------->8------------------->8-----------------
+
+ _zsh_highlight_bind_widgets
+fi
+
+_history-substring-search-begin() {
+ setopt localoptions extendedglob
+
+ _history_substring_search_refresh_display=
+ _history_substring_search_query_highlight=
+
+ #
+ # Continue using the previous $_history_substring_search_result by default,
+ # unless the current query was cleared or a new/different query was entered.
+ #
+ if [[ -z $BUFFER || $BUFFER != $_history_substring_search_result ]]; then
+ #
+ # For the purpose of highlighting we will also keep
+ # a version without doubly-escaped meta characters.
+ #
+ _history_substring_search_query=$BUFFER
+
+ #
+ # $BUFFER contains the text that is in the command-line currently.
+ # we put an extra "\\" before meta characters such as "\(" and "\)",
+ # so that they become "\\\(" and "\\\)".
+ #
+ _history_substring_search_query_escaped=${BUFFER//(#m)[\][()|\\*?#<>~^]/\\$MATCH}
+
+ #
+ # Find all occurrences of the search query in the history file.
+ #
+ # (k) returns the "keys" (history index numbers) instead of the values
+ # (Oa) reverses the order, because (R) returns results reversed.
+ #
+ _history_substring_search_matches=(${(kOa)history[(R)(#$HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS)*${_history_substring_search_query_escaped}*]})
+
+ #
+ # Define the range of values that $_history_substring_search_match_index
+ # can take: [0, $_history_substring_search_matches_count_plus].
+ #
+ _history_substring_search_matches_count=$#_history_substring_search_matches
+ _history_substring_search_matches_count_plus=$(( _history_substring_search_matches_count + 1 ))
+ _history_substring_search_matches_count_sans=$(( _history_substring_search_matches_count - 1 ))
+
+ #
+ # If $_history_substring_search_match_index is equal to
+ # $_history_substring_search_matches_count_plus, this indicates that we
+ # are beyond the beginning of $_history_substring_search_matches.
+ #
+ # If $_history_substring_search_match_index is equal to 0, this indicates
+ # that we are beyond the end of $_history_substring_search_matches.
+ #
+ # If we have initially pressed "up" we have to initialize
+ # $_history_substring_search_match_index to
+ # $_history_substring_search_matches_count_plus so that it will be
+ # decreased to $_history_substring_search_matches_count.
+ #
+ # If we have initially pressed "down" we have to initialize
+ # $_history_substring_search_match_index to
+ # $_history_substring_search_matches_count so that it will be increased to
+ # $_history_substring_search_matches_count_plus.
+ #
+ if [[ $WIDGET == history-substring-search-down ]]; then
+ _history_substring_search_match_index=$_history_substring_search_matches_count
+ else
+ _history_substring_search_match_index=$_history_substring_search_matches_count_plus
+ fi
+ fi
+}
+
+_history-substring-search-end() {
+ setopt localoptions extendedglob
+
+ _history_substring_search_result=$BUFFER
+
+ # the search was successful so display the result properly by clearing away
+ # existing highlights and moving the cursor to the end of the result buffer
+ if [[ $_history_substring_search_refresh_display -eq 1 ]]; then
+ region_highlight=()
+ CURSOR=${#BUFFER}
+ fi
+
+ # highlight command line using zsh-syntax-highlighting
+ _zsh_highlight
+
+ # highlight the search query inside the command line
+ if [[ -n $_history_substring_search_query_highlight && -n $_history_substring_search_query ]]; then
+ #
+ # The following expression yields a variable $MBEGIN, which
+ # indicates the begin position + 1 of the first occurrence
+ # of _history_substring_search_query_escaped in $BUFFER.
+ #
+ : ${(S)BUFFER##(#m$HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS)($_history_substring_search_query##)}
+ local begin=$(( MBEGIN - 1 ))
+ local end=$(( begin + $#_history_substring_search_query ))
+ region_highlight+=("$begin $end $_history_substring_search_query_highlight")
+ fi
+
+ # For debugging purposes:
+ # zle -R "mn: "$_history_substring_search_match_index" m#: "${#_history_substring_search_matches}
+ # read -k -t 200 && zle -U $REPLY
+
+ # Exit successfully from the history-substring-search-* widgets.
+ return 0
+}
+
+_history-substring-search-up-buffer() {
+ #
+ # Check if the UP arrow was pressed to move the cursor within a multi-line
+ # buffer. This amounts to three tests:
+ #
+ # 1. $#buflines -gt 1.
+ #
+ # 2. $CURSOR -ne $#BUFFER.
+ #
+ # 3. Check if we are on the first line of the current multi-line buffer.
+ # If so, pressing UP would amount to leaving the multi-line buffer.
+ #
+ # We check this by adding an extra "x" to $LBUFFER, which makes
+ # sure that xlbuflines is always equal to the number of lines
+ # until $CURSOR (including the line with the cursor on it).
+ #
+ local buflines XLBUFFER xlbuflines
+ buflines=(${(f)BUFFER})
+ XLBUFFER=$LBUFFER"x"
+ xlbuflines=(${(f)XLBUFFER})
+
+ if [[ $#buflines -gt 1 && $CURSOR -ne $#BUFFER && $#xlbuflines -ne 1 ]]; then
+ zle up-line-or-history
+ return 0
+ fi
+
+ return 1
+}
+
+_history-substring-search-down-buffer() {
+ #
+ # Check if the DOWN arrow was pressed to move the cursor within a multi-line
+ # buffer. This amounts to three tests:
+ #
+ # 1. $#buflines -gt 1.
+ #
+ # 2. $CURSOR -ne $#BUFFER.
+ #
+ # 3. Check if we are on the last line of the current multi-line buffer.
+ # If so, pressing DOWN would amount to leaving the multi-line buffer.
+ #
+ # We check this by adding an extra "x" to $RBUFFER, which makes
+ # sure that xrbuflines is always equal to the number of lines
+ # from $CURSOR (including the line with the cursor on it).
+ #
+ local buflines XRBUFFER xrbuflines
+ buflines=(${(f)BUFFER})
+ XRBUFFER="x"$RBUFFER
+ xrbuflines=(${(f)XRBUFFER})
+
+ if [[ $#buflines -gt 1 && $CURSOR -ne $#BUFFER && $#xrbuflines -ne 1 ]]; then
+ zle down-line-or-history
+ return 0
+ fi
+
+ return 1
+}
+
+_history-substring-search-up-history() {
+ #
+ # Behave like up in ZSH, except clear the $BUFFER
+ # when beginning of history is reached like in Fish.
+ #
+ if [[ -z $_history_substring_search_query ]]; then
+
+ # we have reached the absolute top of history
+ if [[ $HISTNO -eq 1 ]]; then
+ BUFFER=
+
+ # going up from somewhere below the top of history
+ else
+ zle up-line-or-history
+ fi
+
+ return 0
+ fi
+
+ return 1
+}
+
+_history-substring-search-down-history() {
+ #
+ # Behave like down-history in ZSH, except clear the
+ # $BUFFER when end of history is reached like in Fish.
+ #
+ if [[ -z $_history_substring_search_query ]]; then
+
+ # going down from the absolute top of history
+ if [[ $HISTNO -eq 1 && -z $BUFFER ]]; then
+ BUFFER=${history[1]}
+ _history_substring_search_refresh_display=1
+
+ # going down from somewhere above the bottom of history
+ else
+ zle down-line-or-history
+ fi
+
+ return 0
+ fi
+
+ return 1
+}
+
+_history-substring-search-not-found() {
+ #
+ # Nothing matched the search query, so put it back into the $BUFFER while
+ # highlighting it accordingly so the user can revise it and search again.
+ #
+ _history_substring_search_old_buffer=$BUFFER
+ BUFFER=$_history_substring_search_query
+ _history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND
+}
+
+_history-substring-search-up-search() {
+ _history_substring_search_refresh_display=1
+
+ #
+ # Highlight matches during history-substring-up-search:
+ #
+ # The following constants have been initialized in
+ # _history-substring-search-up/down-search():
+ #
+ # $_history_substring_search_matches is the current list of matches
+ # $_history_substring_search_matches_count is the current number of matches
+ # $_history_substring_search_matches_count_plus is the current number of matches + 1
+ # $_history_substring_search_matches_count_sans is the current number of matches - 1
+ # $_history_substring_search_match_index is the index of the current match
+ #
+ # The range of values that $_history_substring_search_match_index can take
+ # is: [0, $_history_substring_search_matches_count_plus]. A value of 0
+ # indicates that we are beyond the end of
+ # $_history_substring_search_matches. A value of
+ # $_history_substring_search_matches_count_plus indicates that we are beyond
+ # the beginning of $_history_substring_search_matches.
+ #
+ # In _history-substring-search-up-search() the initial value of
+ # $_history_substring_search_match_index is
+ # $_history_substring_search_matches_count_plus. This value is set in
+ # _history-substring-search-begin(). _history-substring-search-up-search()
+ # will initially decrease it to $_history_substring_search_matches_count.
+ #
+ if [[ $_history_substring_search_match_index -ge 2 ]]; then
+ #
+ # Highlight the next match:
+ #
+ # 1. Decrease the value of $_history_substring_search_match_index.
+ #
+ # 2. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
+ # to highlight the current buffer.
+ #
+ (( _history_substring_search_match_index-- ))
+ BUFFER=$history[$_history_substring_search_matches[$_history_substring_search_match_index]]
+ _history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
+
+ elif [[ $_history_substring_search_match_index -eq 1 ]]; then
+ #
+ # We will move beyond the end of $_history_substring_search_matches:
+ #
+ # 1. Decrease the value of $_history_substring_search_match_index.
+ #
+ # 2. Save the current buffer in $_history_substring_search_old_buffer,
+ # so that it can be retrieved by
+ # _history-substring-search-down-search() later.
+ #
+ # 3. Make $BUFFER equal to $_history_substring_search_query.
+ #
+ # 4. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND
+ # to highlight the current buffer.
+ #
+ (( _history_substring_search_match_index-- ))
+ _history-substring-search-not-found
+
+ elif [[ $_history_substring_search_match_index -eq $_history_substring_search_matches_count_plus ]]; then
+ #
+ # We were beyond the beginning of $_history_substring_search_matches but
+ # UP makes us move back to $_history_substring_search_matches:
+ #
+ # 1. Decrease the value of $_history_substring_search_match_index.
+ #
+ # 2. Restore $BUFFER from $_history_substring_search_old_buffer.
+ #
+ # 3. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
+ # to highlight the current buffer.
+ #
+ (( _history_substring_search_match_index-- ))
+ BUFFER=$_history_substring_search_old_buffer
+ _history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
+
+ else
+ #
+ # We are at the beginning of history and there are no further matches.
+ #
+ _history-substring-search-not-found
+ return
+ fi
+
+ #
+ # When HIST_FIND_NO_DUPS is set, meaning that only unique command lines from
+ # history should be matched, make sure the new and old results are different.
+ # But when HIST_IGNORE_ALL_DUPS is set, ZSH already ensures a unique history.
+ #
+ if [[ ! -o HIST_IGNORE_ALL_DUPS && -o HIST_FIND_NO_DUPS && $BUFFER == $_history_substring_search_result ]]; then
+ #
+ # Repeat the current search so that a different (unique) match is found.
+ #
+ _history-substring-search-up-search
+ fi
+}
+
+_history-substring-search-down-search() {
+ _history_substring_search_refresh_display=1
+
+ #
+ # Highlight matches during history-substring-up-search:
+ #
+ # The following constants have been initialized in
+ # _history-substring-search-up/down-search():
+ #
+ # $_history_substring_search_matches is the current list of matches
+ # $_history_substring_search_matches_count is the current number of matches
+ # $_history_substring_search_matches_count_plus is the current number of matches + 1
+ # $_history_substring_search_matches_count_sans is the current number of matches - 1
+ # $_history_substring_search_match_index is the index of the current match
+ #
+ # The range of values that $_history_substring_search_match_index can take
+ # is: [0, $_history_substring_search_matches_count_plus]. A value of 0
+ # indicates that we are beyond the end of
+ # $_history_substring_search_matches. A value of
+ # $_history_substring_search_matches_count_plus indicates that we are beyond
+ # the beginning of $_history_substring_search_matches.
+ #
+ # In _history-substring-search-down-search() the initial value of
+ # $_history_substring_search_match_index is
+ # $_history_substring_search_matches_count. This value is set in
+ # _history-substring-search-begin().
+ # _history-substring-search-down-search() will initially increase it to
+ # $_history_substring_search_matches_count_plus.
+ #
+ if [[ $_history_substring_search_match_index -le $_history_substring_search_matches_count_sans ]]; then
+ #
+ # Highlight the next match:
+ #
+ # 1. Increase $_history_substring_search_match_index by 1.
+ #
+ # 2. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
+ # to highlight the current buffer.
+ #
+ (( _history_substring_search_match_index++ ))
+ BUFFER=$history[$_history_substring_search_matches[$_history_substring_search_match_index]]
+ _history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
+
+ elif [[ $_history_substring_search_match_index -eq $_history_substring_search_matches_count ]]; then
+ #
+ # We will move beyond the beginning of $_history_substring_search_matches:
+ #
+ # 1. Increase $_history_substring_search_match_index by 1.
+ #
+ # 2. Save the current buffer in $_history_substring_search_old_buffer, so
+ # that it can be retrieved by _history-substring-search-up-search()
+ # later.
+ #
+ # 3. Make $BUFFER equal to $_history_substring_search_query.
+ #
+ # 4. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND
+ # to highlight the current buffer.
+ #
+ (( _history_substring_search_match_index++ ))
+ _history-substring-search-not-found
+
+ elif [[ $_history_substring_search_match_index -eq 0 ]]; then
+ #
+ # We were beyond the end of $_history_substring_search_matches but DOWN
+ # makes us move back to the $_history_substring_search_matches:
+ #
+ # 1. Increase $_history_substring_search_match_index by 1.
+ #
+ # 2. Restore $BUFFER from $_history_substring_search_old_buffer.
+ #
+ # 3. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
+ # to highlight the current buffer.
+ #
+ (( _history_substring_search_match_index++ ))
+ BUFFER=$_history_substring_search_old_buffer
+ _history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
+
+ else
+ #
+ # We are at the end of history and there are no further matches.
+ #
+ _history-substring-search-not-found
+ return
+ fi
+
+ #
+ # When HIST_FIND_NO_DUPS is set, meaning that only unique command lines from
+ # history should be matched, make sure the new and old results are different.
+ # But when HIST_IGNORE_ALL_DUPS is set, ZSH already ensures a unique history.
+ #
+ if [[ ! -o HIST_IGNORE_ALL_DUPS && -o HIST_FIND_NO_DUPS && $BUFFER == $_history_substring_search_result ]]; then
+ #
+ # Repeat the current search so that a different (unique) match is found.
+ #
+ _history-substring-search-down-search
+ fi
+}
+
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
diff --git a/zsh/.oh-my-zsh/plugins/history-substring-search/update-from-upstream.zsh b/zsh/.oh-my-zsh/plugins/history-substring-search/update-from-upstream.zsh
new file mode 100755
index 0000000..81e1942
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/history-substring-search/update-from-upstream.zsh
@@ -0,0 +1,129 @@
+#!/usr/bin/env zsh
+#
+# update-from-upstream.zsh
+#
+# This script updates the Oh My Zsh version of the zsh-history-substring-search
+# plugin from the independent upstream repo. This is to be run by OMZ developers
+# when they want to pull in new changes from upstream to OMZ. It is not run
+# during normal use of the plugin.
+#
+# The official upstream repo is zsh-users/zsh-history-substring-search
+# https://github.com/zsh-users/zsh-history-substring-search
+#
+# This is a zsh script, not a function. Call it with `zsh update-from-upstream.zsh`
+# from the command line, running it from within the plugin directory.
+#
+# You can set the environment variable REPO_PATH to point it at an upstream
+# repo you have already prepared. Otherwise, it will do a clean checkout of
+# upstream's HEAD to a temporary local repo and use that.
+
+
+# Just bail on any error so we don't have to do extra checking.
+# This is a developer-use script, so terse output like that should
+# be fine.
+set -e
+
+
+upstream_basename=zsh-history-substring-search
+plugin_basename=history-substring-search
+UPSTREAM_REPO=zsh-users/$upstream_basename
+need_repo_cleanup=false
+upstream_github_url="https://github.com/$UPSTREAM_REPO"
+
+if [[ -z "$UPSTREAM_REPO_PATH" ]]; then
+ # Do a clean checkout
+ my_tempdir=$(mktemp -d -t omz-update-histsubstrsrch)
+ UPSTREAM_REPO_PATH="$my_tempdir/$upstream_basename"
+ git clone "$upstream_github_url" "$UPSTREAM_REPO_PATH"
+ need_repo_cleanup=true
+ print "Checked out upstream repo to $UPSTREAM_REPO_PATH"
+else
+ print "Using existing $upstream_basename repo at $UPSTREAM_REPO_PATH"
+fi
+
+upstream="$UPSTREAM_REPO_PATH"
+
+# Figure out what we're pulling in
+upstream_sha=$(cd $upstream && git rev-parse HEAD)
+upstream_commit_date=$(cd $upstream && git log -1 --pretty=format:%ci)
+upstream_just_date=${${=upstream_commit_date}[1]}
+print "upstream SHA: $upstream_sha"
+print "upstream commit time: $upstream_commit_date"
+print "upstream commit date: $upstream_just_date"
+print
+
+# Copy the files over, using the OMZ plugin's names where needed
+cp -v "$upstream"/* .
+mv -v zsh-history-substring-search.zsh $plugin_basename.zsh
+mv -v zsh-history-substring-search.plugin.zsh $plugin_basename.plugin.zsh
+
+if [[ $need_repo_cleanup == true ]]; then
+ print "Removing temporary repo at $my_tempdir"
+ rm -rf "$my_tempdir"
+fi
+
+# Do OMZ-specific edits
+
+print
+print "Updating files with OMZ-specific stuff"
+print
+
+# OMZ binds the keys as part of the plugin loading
+
+cat >> $plugin_basename.plugin.zsh <> README.md <&2
+ return
+fi
+
+function hitokoto {
+ emulate -L zsh
+ Q=$(curl -s --connect-timeout 2 "https://v1.hitokoto.cn" | jq -j '.hitokoto+"\t"+.from')
+
+ TXT=$(echo "$Q" | awk -F '\t' '{print $1}')
+ WHO=$(echo "$Q" | awk -F '\t' '{print $2}')
+
+ [[ -n "$WHO" && -n "$TXT" ]] && print -P "%F{3}${WHO}%f: “%F{5}${TXT}%fâ€"
+}
diff --git a/zsh/.oh-my-zsh/plugins/homestead/README.md b/zsh/.oh-my-zsh/plugins/homestead/README.md
new file mode 100644
index 0000000..4763023
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/homestead/README.md
@@ -0,0 +1,9 @@
+# Homestead
+
+This plugin provides completion for [Homestead](https://laravel.com/docs/homestead).
+
+To use it add homestead to the plugins array in your zshrc file.
+
+```bash
+plugins=(... homestead)
+```
diff --git a/zsh/.oh-my-zsh/plugins/homestead/homestead.plugin.zsh b/zsh/.oh-my-zsh/plugins/homestead/homestead.plugin.zsh
new file mode 100644
index 0000000..ea2803d
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/homestead/homestead.plugin.zsh
@@ -0,0 +1,10 @@
+# Homestead basic command completion
+_homestead_get_command_list () {
+ homestead --no-ansi | sed -E "1,/(Available|Common) commands/d" | awk '/^ +[a-z]+/ { print $1 }'
+}
+
+_homestead () {
+ compadd `_homestead_get_command_list`
+}
+
+compdef _homestead homestead
diff --git a/zsh/.oh-my-zsh/plugins/httpie/README.md b/zsh/.oh-my-zsh/plugins/httpie/README.md
new file mode 100644
index 0000000..f22d3a6
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/httpie/README.md
@@ -0,0 +1,15 @@
+# HTTPie plugin
+
+This plugin adds completion for [HTTPie](https://httpie.org), a command line HTTP
+client, a friendlier cURL replacement.
+
+To use it, add `httpie` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... httpie)
+```
+
+It uses completion from [zsh-completions](https://github.com/zsh-users/zsh-completions).
+
+
+**Maintainer:** [lululau](https://github.com/lululau)
diff --git a/zsh/.oh-my-zsh/plugins/httpie/_httpie b/zsh/.oh-my-zsh/plugins/httpie/_httpie
new file mode 100644
index 0000000..4d702ef
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/httpie/_httpie
@@ -0,0 +1,181 @@
+#compdef http
+# ------------------------------------------------------------------------------
+# Copyright (c) 2015 Github zsh-users - http://github.com/zsh-users
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of the zsh-users nor the
+# names of its contributors may be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# ------------------------------------------------------------------------------
+# Description
+# -----------
+#
+# Completion script for httpie 0.7.2 (http://httpie.org)
+#
+# ------------------------------------------------------------------------------
+# Authors
+# -------
+#
+# * Akira Maeda
+# * Valodim
+# * Claus Klingberg
+#
+# ------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# ------------------------------------------------------------------------------
+
+_httpie_params () {
+
+ local ret=1 expl
+
+ # or a url
+ if (( CURRENT <= NORMARG+1 )) && [[ $words[NORMARG] != *:* ]] ; then
+ _httpie_urls && ret=0
+
+ # regular param, if we already have a url
+ elif (( CURRENT > NORMARG )); then
+
+ # if the suffix is precisely : this is shorthand for a header
+ if [[ -prefix ':' ]]; then
+ PREFIX=
+ SUFFIX=:
+ fi
+
+ # if we are in front of a : (possibly due to the PREFIX move before)
+ if [[ -suffix ':' ]]; then
+
+ # this is rather buggy with normal tab behavior :\
+ compstate[insert]=menu
+ _wanted http_header expl 'HTTP Header' \
+ compadd -s ':' -S '' -- Content-Type Cookie && return 0
+ fi
+
+ # ignore all prefix stuff
+ compset -P '(#b)([^:@=]#)'
+ local name=$match[1]
+
+ if compset -P '='; then
+ _message "$name data field value"
+ elif compset -P '@'; then
+ _files
+ elif compset -P ':=@'; then
+ _files
+ elif compset -P ':='; then
+ _message "$name raw json data"
+ elif compset -P '=='; then
+ _message "$name url parameter value"
+ elif compset -P ':'; then
+ _message "$name header content"
+ else
+ typeset -a ops
+ ops=(
+ '=:data field'
+ '\::header'
+ '==:request parameter'
+ '@:data file field'
+ '\:=:raw json field'
+ '\:=@:raw json field file path'
+ )
+ _describe -t httpparams "parameter types" ops -Q -S ''
+ fi
+
+ ret=0
+
+ fi
+
+ # first arg may be a request method
+ (( CURRENT == NORMARG )) &&
+ _wanted http_method expl 'Request Method' \
+ compadd GET POST PUT DELETE HEAD OPTIONS TRACE CONNECT PATCH LINK UNLINK && ret=0
+
+ return $ret
+
+}
+
+_httpie_urls() {
+
+ local ret=1
+
+ if ! [[ -prefix [-+.a-z0-9]#:// ]]; then
+ local expl
+ compset -S '[^:/]*' && compstate[to_end]=''
+ _wanted url-schemas expl 'URL schema' compadd -S '' http:// https:// && ret=0
+ else
+ _urls && ret=0
+ fi
+
+ return $ret
+
+}
+
+_httpie_printflags () {
+
+ local ret=1
+
+ # not sure why this is necessary, but it will complete "-pH" style without it
+ [[ $IPREFIX == "-p" ]] && IPREFIX+=" "
+
+ compset -P '(#b)([a-zA-Z]#)'
+
+ local -a flags
+ [[ $match[1] != *H* ]] && flags+=( "H:request headers" )
+ [[ $match[1] != *B* ]] && flags+=( "B:request body" )
+ [[ $match[1] != *h* ]] && flags+=( "h:response headers" )
+ [[ $match[1] != *b* ]] && flags+=( "b:response body" )
+
+ _describe -t printflags "print flags" flags -S '' && ret=0
+
+ return $ret
+
+}
+
+integer NORMARG
+
+_arguments -n -C -s \
+ '(-j --json -f)'{-j,--json}'[Data items from the command line are serialized as a JSON object.]' \
+ '(-f --form -j)'{-f,--form}'[Data items from the command line are serialized as form fields.]' \
+ '--pretty=[Controls output processing.]:output format:(all colors format none)' \
+ '(-s --style)'{-s,--style}'=[Output coloring style]:STYLE:(autumn borland bw colorful default emacs friendly fruity manni monokai murphy native pastie perldoc ttr solarized tango trac vim vs)' \
+ '(-p --print)'{-p,--print}'=[String specifying what the output should contain]:print flags:_httpie_printflags' \
+ '(-v --verbose)'{-v,--verbose}'[Print the whole request as well as the response.]' \
+ '(-p -h --headers)'{-h,--headers}'[Print only the response headers.]' \
+ '(-p -b --body)'{-b,--body}'[Print only the response body.]' \
+ '(-S --stream)'{-S,--stream}'[Always stream the output by line, i.e., behave like `tail -f`.]' \
+ '(-o --output)'{-o,--output}'=[Save output to FILE.]:output file:_files' \
+ '(-d --download)'{-d,--download}'=[Do not print the response body to stdout.]' \
+ '(-c --continue)'{-c,--continue}'[Resume an interrupted download.]' \
+ '(--session-read-only)--session=[Create, or reuse and update a session.]:session name (or path)' \
+ '(--session)--session-read-only=[Create or read a session without updating it form the request/response exchange.]:session name (or path)' \
+ '(-a --auth)'{-a,--auth}'=[If only the username is provided (-a username)]:USER\:PASS' \
+ '--auth-type=[The authentication mechanism to be used. Defaults to "basic".]:AUTH-TYPE:(basic digest)' \
+ '--proxy=[String mapping protocol to the URL of the proxy.]:PROXY' \
+ '--follow[Allow full redirects.]' \
+ "--verify=[Enable or disable verification of ssl certificates.]:verify certificate:(yes no)" \
+ '--allow-redirects[Set this flag if full redirects are allowed (e.g. re-POST-ing of data at new ``Location``)]' \
+ '--timeout=[Float describes the timeout of the request (Use socket.setdefaulttimeout() as fallback).]:timeout (seconds)' \
+ '--check-status[This flag instructs HTTPie to also check the HTTP status code and exit with an error if the status indicates one.]' \
+ '--ignore-stdin[Do not attempt to read stdin.]' \
+ '(- *)--help[show help message.]' \
+ "(- *)--version[show program's version number and exit.]" \
+ '--traceback[Prints exception traceback should one occur.]' \
+ '--debug[Prints exception traceback should one occur and other information useful for debugging HTTPie itself.]' \
+ '*:args:_httpie_params' && return 0
diff --git a/zsh/.oh-my-zsh/plugins/ionic/README.md b/zsh/.oh-my-zsh/plugins/ionic/README.md
new file mode 100644
index 0000000..3ec4fc8
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/ionic/README.md
@@ -0,0 +1,30 @@
+# Ionic plugin
+
+This plugin adds completion for the [Ionic CLI](https://ionicframework.com/docs/cli),
+as well as some aliases for common Ionic commands.
+
+To use it, add `ionic` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... ionic)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+|-------|--------------------------------------|------------------------------------------------------------------|
+| iv | `ionic --version` | Check Ionic version |
+| ih | `ionic --help` | Ionic help command |
+| ist | `ionic start` | Create a new project |
+| ii | `ionic info` | Print system/environment info |
+| is | `ionic serve` | Start a local dev server for app dev/testing |
+| icba | `ionic cordova build android` | Build web assets and prepare app for android platform targets |
+| icbi | `ionic cordova build ios` | Build web assets and prepare app for ios platform targets |
+| icra | `ionic cordova run android` | Run an Ionic project on a connected android device |
+| icri | `ionic cordova run ios` | Run an Ionic project on a connected ios device |
+| icrsa | `ionic cordova resources android` | Automatically create icon and splash screen resources for android|
+| icrsi | `ionic cordova resources ios` | Automatically create icon and splash screen resources for ios |
+| icpaa | `ionic cordova platform add android` | Add Cordova android platform targets |
+| icpai | `ionic cordova platform add ios` | Add Cordova ios platform targets |
+| icpra | `ionic cordova platform rm android` | Remove Cordova platform targets |
+| icpri | `ionic cordova platform rm ios` | Remove Cordova platform targets |
diff --git a/zsh/.oh-my-zsh/plugins/ionic/ionic.plugin.zsh b/zsh/.oh-my-zsh/plugins/ionic/ionic.plugin.zsh
new file mode 100644
index 0000000..cf388af
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/ionic/ionic.plugin.zsh
@@ -0,0 +1,15 @@
+alias iv="ionic --version"
+alias ih="ionic --help"
+alias ist="ionic start"
+alias ii="ionic info"
+alias is="ionic serve"
+alias icba="ionic cordova build android"
+alias icbi="ionic cordova build ios"
+alias icra="ionic cordova run android"
+alias icri="ionic cordova run ios"
+alias icrsa="ionic cordova resources android"
+alias icrsi="ionic cordova resources ios"
+alias icpaa="ionic cordova platform add android"
+alias icpai="ionic cordova platform add ios"
+alias icpra="ionic cordova platform rm android"
+alias icpri="ionic cordova platform rm ios"
diff --git a/zsh/.oh-my-zsh/plugins/iterm2/README.md b/zsh/.oh-my-zsh/plugins/iterm2/README.md
new file mode 100644
index 0000000..50cdebf
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/iterm2/README.md
@@ -0,0 +1,29 @@
+# iTerm2 plugin
+
+This plugin adds a few functions that are useful when using [iTerm2](https://www.iterm2.com/).
+
+To use it, add _iterm2_ to the plugins array of your zshrc file:
+```
+plugins=(... iterm2)
+```
+
+## Plugin commands
+
+* `_iterm2_command `
+ executes an arbitrary iTerm2 command via an escape code sequence.
+ See https://iterm2.com/documentation-escape-codes.html for all supported commands.
+
+* `iterm2_profile `
+ changes the current terminal window's profile (colors, fonts, settings, etc).
+ `profile-name` is the name of another iTerm2 profile. The profile name can contain spaces.
+
+* `iterm2_tab_color `
+ changes the color of iTerm2's currently active tab.
+ `red`/`green`/`blue` are on the range 0-255.
+
+* `iterm2_tab_color_reset`
+ resets the color of iTerm2's current tab back to default.
+
+## Contributors
+
+- [Aviv Rosenberg](https://github.com/avivrosenberg)
diff --git a/zsh/.oh-my-zsh/plugins/iterm2/iterm2.plugin.zsh b/zsh/.oh-my-zsh/plugins/iterm2/iterm2.plugin.zsh
new file mode 100644
index 0000000..e4ac72e
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/iterm2/iterm2.plugin.zsh
@@ -0,0 +1,68 @@
+#####################################################
+# iTerm2 plugin for oh-my-zsh #
+# Author: Aviv Rosenberg (github.com/avivrosenberg) #
+#####################################################
+
+###
+# This plugin is only relevant if the terminal is iTerm2 on OSX.
+if [[ "$OSTYPE" == darwin* ]] && [[ -n "$ITERM_SESSION_ID" ]] ; then
+
+ ###
+ # Executes an arbitrary iTerm2 command via an escape code sequce.
+ # See https://iterm2.com/documentation-escape-codes.html for all supported commands.
+ # Example: $ _iterm2_command "1337;StealFocus"
+ function _iterm2_command() {
+ local cmd="$1"
+
+ # Escape codes for wrapping commands for iTerm2.
+ local iterm2_prefix="\x1B]"
+ local iterm2_suffix="\x07"
+
+ # If we're in tmux, a special escape code must be prepended/appended so that
+ # the iTerm2 escape code is passed on into iTerm2.
+ if [[ -n $TMUX ]]; then
+ local tmux_prefix="\x1BPtmux;\x1B"
+ local tmux_suffix="\x1B\\"
+ fi
+
+ echo -n "${tmux_prefix}${iterm2_prefix}${cmd}${iterm2_suffix}${tmux_suffix}"
+ }
+
+ ###
+ # iterm2_profile(): Function for changing the current terminal window's
+ # profile (colors, fonts, settings, etc).
+ # To change the current iTerm2 profile, call this function and pass in a name
+ # of another existing iTerm2 profile (name can contain spaces).
+ function iterm2_profile() {
+ # Desired name of profile
+ local profile="$1"
+
+ # iTerm2 command for changing profile
+ local cmd="1337;SetProfile=$profile"
+
+ # send the sequence
+ _iterm2_command "${cmd}"
+
+ # update shell variable
+ ITERM_PROFILE="$profile"
+ }
+
+ ###
+ # iterm2_tab_color(): Changes the color of iTerm2's currently active tab.
+ # Usage: iterm2_tab_color
+ # where red/green/blue are on the range 0-255.
+ function iterm2_tab_color() {
+ _iterm2_command "6;1;bg;red;brightness;$1"
+ _iterm2_command "6;1;bg;green;brightness;$2"
+ _iterm2_command "6;1;bg;blue;brightness;$3"
+ }
+
+
+ ###
+ # iterm2_tab_color_reset(): Resets the color of iTerm2's current tab back to
+ # default.
+ function iterm2_tab_color_reset() {
+ _iterm2_command "6;1;bg;*;default"
+ }
+
+fi
diff --git a/zsh/.oh-my-zsh/plugins/jake-node/README.md b/zsh/.oh-my-zsh/plugins/jake-node/README.md
new file mode 100644
index 0000000..78ca8d8
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jake-node/README.md
@@ -0,0 +1,9 @@
+# Jake
+
+This plugin provides completion for [Jake](http://jakejs.com/).
+
+To use it add jake-node to the plugins array in your zshrc file.
+
+```bash
+plugins=(... jake-node)
+```
diff --git a/zsh/.oh-my-zsh/plugins/jake-node/jake-node.plugin.zsh b/zsh/.oh-my-zsh/plugins/jake-node/jake-node.plugin.zsh
new file mode 100644
index 0000000..3b692f8
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jake-node/jake-node.plugin.zsh
@@ -0,0 +1,14 @@
+#---oh-my-zsh plugin : task Autocomplete for Jake tool---
+# Jake : https://github.com/mde/jake
+# Warning : Jakefile should have the right case : Jakefile or jakefile
+# Tested on : MacOSX 10.7 (Lion), Ubuntu 11.10
+# Author : Alexandre Lacheze (@al3xstrat)
+# Inspiration : https://weblog.rubyonrails.org/2006/3/9/fast-rake-task-completion-for-zsh
+
+function _jake () {
+ if [ -f Jakefile ]||[ -f jakefile ]; then
+ compadd `jake -T | cut -d " " -f 2 | sed -E "s/.\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"`
+ fi
+}
+
+compdef _jake jake
diff --git a/zsh/.oh-my-zsh/plugins/jenv/README.md b/zsh/.oh-my-zsh/plugins/jenv/README.md
new file mode 100644
index 0000000..c043c62
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jenv/README.md
@@ -0,0 +1,27 @@
+# jenv plugin
+
+[jenv](https://www.jenv.be/) is a Java version manager similiar to [rbenv](https://github.com/rbenv/rbenv)
+and [pyenv](https://github.com/yyuu/pyenv).
+
+This plugin initializes jenv and provides the `jenv_prompt_info` function to add Java
+version information to prompts.
+
+To use, add `jenv` to your plugins array in your zshrc file:
+
+```zsh
+plugins=(... jenv)
+```
+
+## Theme example
+
+You can modify your `$PROMPT` or `$RPROMPT` variables to run `jenv_prompt_info`.
+
+For example:
+```
+PROMPT="%~$ "
+RPROMPT='$(jenv_prompt_info)'
+```
+changes your prompt to:
+```
+~/java/project$ â–‹ oracle64-1.6.0.39
+```
diff --git a/zsh/.oh-my-zsh/plugins/jenv/jenv.plugin.zsh b/zsh/.oh-my-zsh/plugins/jenv/jenv.plugin.zsh
new file mode 100644
index 0000000..b85906a
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jenv/jenv.plugin.zsh
@@ -0,0 +1,30 @@
+jenvdirs=("$HOME/.jenv" "/usr/local" "/usr/local/jenv" "/opt/jenv")
+
+FOUND_JENV=0
+for jenvdir in $jenvdirs; do
+ if [[ -d "${jenvdir}/bin" ]]; then
+ FOUND_JENV=1
+ break
+ fi
+done
+
+if [[ $FOUND_JENV -eq 0 ]]; then
+ if (( $+commands[brew] )) && jenvdir="$(brew --prefix jenv)"; then
+ [[ -d "${jenvdir}/bin" ]] && FOUND_JENV=1
+ fi
+fi
+
+if [[ $FOUND_JENV -eq 1 ]]; then
+ (( $+commands[jenv] )) || export PATH="${jenvdir}/bin:$PATH"
+ eval "$(jenv init - zsh)"
+
+ function jenv_prompt_info() { jenv version-name 2>/dev/null }
+
+ if [[ -d "${jenvdir}/versions" ]]; then
+ export JENV_ROOT=$jenvdir
+ fi
+else
+ function jenv_prompt_info() { echo "system: $(java -version 2>&1 | cut -f 2 -d ' ')" }
+fi
+
+unset jenvdir jenvdirs FOUND_JENV
diff --git a/zsh/.oh-my-zsh/plugins/jhbuild/README.md b/zsh/.oh-my-zsh/plugins/jhbuild/README.md
new file mode 100644
index 0000000..9105269
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jhbuild/README.md
@@ -0,0 +1,4 @@
+## JHBuild
+**Maintainer:** [Miguel Vaello](https://github.com/miguxbe)
+
+This plugin adds some jhbuild aliases and increase the completion function provided by zsh.
diff --git a/zsh/.oh-my-zsh/plugins/jhbuild/jhbuild.plugin.zsh b/zsh/.oh-my-zsh/plugins/jhbuild/jhbuild.plugin.zsh
new file mode 100644
index 0000000..fed1bc9
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jhbuild/jhbuild.plugin.zsh
@@ -0,0 +1,28 @@
+# Aliases
+#
+alias jh='jhbuild'
+# Build
+alias jhb='jhbuild build'
+alias jhbo='jhbuild buildone'
+# Checks
+alias jhckb='jhbuild checkbranches'
+alias jhckm='jhbuild checkmodulesets'
+# Info & list
+alias jhi='jhbuild info'
+alias jhl='jhbuild list'
+# Clean
+alias jhc='jhbuild clean'
+alias jhco='jhbuild cleanone'
+# Run
+alias jhr='jhbuild run'
+# Depends
+alias jhrd='jhbuild rdepends'
+alias jhsd='jhbuild sysdeps'
+# Update
+alias jhu='jhbuild update'
+alias jhuo='jhbuild updateone'
+# Uninstall
+alias jhun='jhbuild uninstall'
+
+
+
diff --git a/zsh/.oh-my-zsh/plugins/jira/README.md b/zsh/.oh-my-zsh/plugins/jira/README.md
new file mode 100644
index 0000000..091dccb
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jira/README.md
@@ -0,0 +1,66 @@
+# Jira plugin #
+
+CLI support for JIRA interaction
+
+## Description ##
+
+This plugin provides command line tools for interacting with Atlassian's [JIRA](https://www.atlassian.com/software/jira) bug tracking software.
+
+The interaction is all done through the web. No local installation of JIRA is necessary.
+
+In this document, "JIRA" refers to the JIRA issue tracking server, and `jira` refers to the command this plugin supplies.
+
+## Usage ##
+
+This plugin supplies one command, `jira`, through which all its features are exposed. Most forms of this command open a JIRA page in your web browser.
+
+```
+jira # performs the default action
+
+jira new # opens a new issue
+jira dashboard # opens your JIRA dashboard
+jira reported [username] # queries for issues reported by a user
+jira assigned [username] # queries for issues assigned to a user
+jira myissues # queries for you own issues
+jira branch # opens an existing issue matching the current branch name
+jira ABC-123 # opens an existing issue
+jira ABC-123 m # opens an existing issue for adding a comment
+```
+
+#### Debugging usage ####
+
+These calling forms are for developers' use, and may change at any time.
+
+```
+jira dumpconfig # displays the effective configuration
+```
+
+## Setup ##
+
+The URL for your JIRA instance is set by `$JIRA_URL` or a `.jira_url` file.
+
+Add a `.jira-url` file in the base of your project. You can also set `$JIRA_URL` in your `~/.zshrc` or put a `.jira-url` in your home directory. A `.jira-url` in the current directory takes precedence, so you can make per-project customizations.
+
+The same goes with `.jira-prefix` and `$JIRA_PREFIX`. These control the prefix added to all issue IDs, which differentiates projects within a JIRA instance.
+
+For example:
+
+```
+cd to/my/project
+echo "https://jira.atlassian.com" >> .jira-url
+```
+
+(Note: The current implementation only looks in the current directory for `.jira-url` and `.jira-prefix`, not up the path, so if you are in a subdirectory of your project, it will fall back to your default JIRA URL. This will probably change in the future though.)
+
+### Variables ###
+
+* `$JIRA_URL` - Your JIRA instance's URL
+* `$JIRA_NAME` - Your JIRA username; used as the default user for `assigned`/`reported` searches
+* `$JIRA_PREFIX` - Prefix added to issue ID arguments
+* `$JIRA_RAPID_BOARD` - Set to `true` if you use Rapid Board
+* `$JIRA_DEFAULT_ACTION` - Action to do when `jira` is called with no arguments; defaults to "new"
+
+
+### Browser ###
+
+Your default web browser, as determined by how `open_command` handles `http://` URLs, is used for interacting with the JIRA instance. If you change your system's URL handler associations, it will change the browser that `jira` uses.
diff --git a/zsh/.oh-my-zsh/plugins/jira/_jira b/zsh/.oh-my-zsh/plugins/jira/_jira
new file mode 100644
index 0000000..d646142
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jira/_jira
@@ -0,0 +1,23 @@
+#compdef jira
+#autoload
+
+local -a _1st_arguments
+_1st_arguments=(
+ 'new:create a new issue'
+ 'dashboard:open the dashboard'
+ 'reported:search for issues reported by a user'
+ 'assigned:search for issues assigned to a user'
+ 'branch:open the issue named after the git branch of the current directory'
+ 'dumpconfig:display effective jira configuration'
+)
+
+_arguments -C \
+ ':command:->command' \
+ '*::options:->options'
+
+case $state in
+ (command)
+ _describe -t commands "jira subcommand" _1st_arguments
+ return
+ ;;
+esac
diff --git a/zsh/.oh-my-zsh/plugins/jira/jira.plugin.zsh b/zsh/.oh-my-zsh/plugins/jira/jira.plugin.zsh
new file mode 100644
index 0000000..e706948
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jira/jira.plugin.zsh
@@ -0,0 +1,122 @@
+# CLI support for JIRA interaction
+#
+# See README.md for details
+
+function jira() {
+ emulate -L zsh
+ local action jira_url jira_prefix
+ if [[ -n "$1" ]]; then
+ action=$1
+ elif [[ -f .jira-default-action ]]; then
+ action=$(cat .jira-default-action)
+ elif [[ -f ~/.jira-default-action ]]; then
+ action=$(cat ~/.jira-default-action)
+ elif [[ -n "${JIRA_DEFAULT_ACTION}" ]]; then
+ action=${JIRA_DEFAULT_ACTION}
+ else
+ action="new"
+ fi
+
+ if [[ -f .jira-url ]]; then
+ jira_url=$(cat .jira-url)
+ elif [[ -f ~/.jira-url ]]; then
+ jira_url=$(cat ~/.jira-url)
+ elif [[ -n "${JIRA_URL}" ]]; then
+ jira_url=${JIRA_URL}
+ else
+ _jira_url_help
+ return 1
+ fi
+
+ if [[ -f .jira-prefix ]]; then
+ jira_prefix=$(cat .jira-prefix)
+ elif [[ -f ~/.jira-prefix ]]; then
+ jira_prefix=$(cat ~/.jira-prefix)
+ elif [[ -n "${JIRA_PREFIX}" ]]; then
+ jira_prefix=${JIRA_PREFIX}
+ else
+ jira_prefix=""
+ fi
+
+
+ if [[ $action == "new" ]]; then
+ echo "Opening new issue"
+ open_command "${jira_url}/secure/CreateIssue!default.jspa"
+ elif [[ "$action" == "assigned" || "$action" == "reported" ]]; then
+ _jira_query ${@:-$action}
+ elif [[ "$action" == "myissues" ]]; then
+ echo "Opening my issues"
+ open_command "${jira_url}/issues/?filter=-1"
+ elif [[ "$action" == "dashboard" ]]; then
+ echo "Opening dashboard"
+ if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then
+ open_command "${jira_url}/secure/RapidBoard.jspa"
+ else
+ open_command "${jira_url}/secure/Dashboard.jspa"
+ fi
+ elif [[ "$action" == "dumpconfig" ]]; then
+ echo "JIRA_URL=$jira_url"
+ echo "JIRA_PREFIX=$jira_prefix"
+ echo "JIRA_NAME=$JIRA_NAME"
+ echo "JIRA_RAPID_BOARD=$JIRA_RAPID_BOARD"
+ echo "JIRA_DEFAULT_ACTION=$JIRA_DEFAULT_ACTION"
+ else
+ # Anything that doesn't match a special action is considered an issue name
+ # but `branch` is a special case that will parse the current git branch
+ if [[ "$action" == "branch" ]]; then
+ local issue_arg=$(git rev-parse --abbrev-ref HEAD)
+ local issue="${jira_prefix}${issue_arg}"
+ else
+ local issue_arg=$action
+ local issue="${jira_prefix}${issue_arg}"
+ fi
+ local url_fragment=''
+ if [[ "$2" == "m" ]]; then
+ url_fragment="#add-comment"
+ echo "Add comment to issue #$issue"
+ else
+ echo "Opening issue #$issue"
+ fi
+ if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then
+ open_command "${jira_url}/issues/${issue}${url_fragment}"
+ else
+ open_command "${jira_url}/browse/${issue}${url_fragment}"
+ fi
+ fi
+}
+
+function _jira_url_help() {
+ cat << EOF
+error: JIRA URL is not specified anywhere.
+
+Valid options, in order of precedence:
+ .jira-url file
+ \$HOME/.jira-url file
+ \$JIRA_URL environment variable
+EOF
+}
+
+function _jira_query() {
+ emulate -L zsh
+ local verb="$1"
+ local jira_name lookup preposition query
+ if [[ "${verb}" == "reported" ]]; then
+ lookup=reporter
+ preposition=by
+ elif [[ "${verb}" == "assigned" ]]; then
+ lookup=assignee
+ preposition=to
+ else
+ echo "error: not a valid lookup: $verb" >&2
+ return 1
+ fi
+ jira_name=${2:=$JIRA_NAME}
+ if [[ -z $jira_name ]]; then
+ echo "error: JIRA_NAME not specified" >&2
+ return 1
+ fi
+
+ echo "Browsing issues ${verb} ${preposition} ${jira_name}"
+ query="${lookup}+%3D+%22${jira_name}%22+AND+resolution+%3D+unresolved+ORDER+BY+priority+DESC%2C+created+ASC"
+ open_command "${jira_url}/secure/IssueNavigator.jspa?reset=true&jqlQuery=${query}"
+}
diff --git a/zsh/.oh-my-zsh/plugins/jruby/README.md b/zsh/.oh-my-zsh/plugins/jruby/README.md
new file mode 100644
index 0000000..821a46d
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jruby/README.md
@@ -0,0 +1,21 @@
+# JRuby plugin
+
+This plugin adds aliases for [JRuby](https://www.jruby.org/).
+
+To use it, add `jruby` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... jruby)
+```
+
+## Requirements
+
+This plugin assumes you already have jruby installed and available in your [path](https://www.jruby.org/getting-started).
+
+## Aliases
+
+| Alias | Command |
+| ------------ | ---------------------------------------------------------------- |
+| `jrspec` | `jruby --debug -S rspec --debug` |
+| `jprofile` | `jruby --profile.api -S rspec` |
+| `jexec` | `jruby -S` |
diff --git a/zsh/.oh-my-zsh/plugins/jruby/jruby.plugin.zsh b/zsh/.oh-my-zsh/plugins/jruby/jruby.plugin.zsh
new file mode 100644
index 0000000..bb7975b
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jruby/jruby.plugin.zsh
@@ -0,0 +1,4 @@
+# Aliases
+alias jrspec='jruby --debug -S rspec --debug'
+alias jprofile='jruby --profile.api -S rspec'
+alias jexec='jruby -S'
diff --git a/zsh/.oh-my-zsh/plugins/jsontools/README.md b/zsh/.oh-my-zsh/plugins/jsontools/README.md
new file mode 100644
index 0000000..4faf58b
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jsontools/README.md
@@ -0,0 +1,42 @@
+# jsontools
+
+Handy command line tools for dealing with json data.
+
+## Tools
+
+- **pp_json** - pretty prints json
+- **is_json** - returns true if valid json; false otherwise
+- **urlencode_json** - returns a url encoded string for the given json
+- **urldecode_json** - returns decoded json for the given url encoded string
+
+## Usage
+Usage is simple...just take your json data and pipe it into the appropriate jsontool.
+```sh
+ |
+```
+## Examples
+
+##### pp_json
+
+```sh
+# curl json data and pretty print the results
+curl https://coderwall.com/bobwilliams.json | pp_json
+```
+
+##### is_json
+```sh
+# pretty print the contents of an existing json file
+less data.json | is_json
+```
+
+##### urlencode_json
+```sh
+# json data directly from the command line
+echo '{"b":2, "a":1}' | urlencode_json
+```
+
+##### urldecode_json
+```sh
+# url encoded string to decode
+echo '%7B%22b%22:2,%20%22a%22:1%7D%0A' | urldecode_json
+```
\ No newline at end of file
diff --git a/zsh/.oh-my-zsh/plugins/jsontools/jsontools.plugin.zsh b/zsh/.oh-my-zsh/plugins/jsontools/jsontools.plugin.zsh
new file mode 100644
index 0000000..912c835
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jsontools/jsontools.plugin.zsh
@@ -0,0 +1,42 @@
+# JSON Tools
+# Adds command line aliases useful for dealing with JSON
+
+if [[ $(whence $JSONTOOLS_METHOD) = "" ]]; then
+ JSONTOOLS_METHOD=""
+fi
+
+if [[ $(whence node) != "" && ( "x$JSONTOOLS_METHOD" = "x" || "x$JSONTOOLS_METHOD" = "xnode" ) ]]; then
+ alias pp_json='xargs -0 node -e "console.log(JSON.stringify(JSON.parse(process.argv[1]), null, 4));"'
+ alias is_json='xargs -0 node -e "try {json = JSON.parse(process.argv[1]);} catch (e) { console.log(false); json = null; } if(json) { console.log(true); }"'
+ alias urlencode_json='xargs -0 node -e "console.log(encodeURIComponent(process.argv[1]))"'
+ alias urldecode_json='xargs -0 node -e "console.log(decodeURIComponent(process.argv[1]))"'
+elif [[ $(whence python) != "" && ( "x$JSONTOOLS_METHOD" = "x" || "x$JSONTOOLS_METHOD" = "xpython" ) ]]; then
+ alias pp_json='python -c "import sys; del sys.path[0]; import runpy; runpy._run_module_as_main(\"json.tool\")"'
+ alias is_json='python -c "
+import sys; del sys.path[0];
+import json;
+try:
+ json.loads(sys.stdin.read())
+except ValueError, e:
+ print False
+else:
+ print True
+sys.exit(0)"'
+ alias urlencode_json='python -c "
+import sys; del sys.path[0];
+import urllib, json;
+print urllib.quote_plus(sys.stdin.read())
+sys.exit(0)"'
+ alias urldecode_json='python -c "
+import sys; del sys.path[0];
+import urllib, json;
+print urllib.unquote_plus(sys.stdin.read())
+sys.exit(0)"'
+elif [[ $(whence ruby) != "" && ( "x$JSONTOOLS_METHOD" = "x" || "x$JSONTOOLS_METHOD" = "xruby" ) ]]; then
+ alias pp_json='ruby -e "require \"json\"; require \"yaml\"; puts JSON.parse(STDIN.read).to_yaml"'
+ alias is_json='ruby -e "require \"json\"; begin; JSON.parse(STDIN.read); puts true; rescue Exception => e; puts false; end"'
+ alias urlencode_json='ruby -e "require \"uri\"; puts URI.escape(STDIN.read)"'
+ alias urldecode_json='ruby -e "require \"uri\"; puts URI.unescape(STDIN.read)"'
+fi
+
+unset JSONTOOLS_METHOD
diff --git a/zsh/.oh-my-zsh/plugins/jump/README.md b/zsh/.oh-my-zsh/plugins/jump/README.md
new file mode 100644
index 0000000..ed64152
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jump/README.md
@@ -0,0 +1,19 @@
+# Jump plugin
+
+This plugin allows to easily jump around the file system by manually adding marks.
+Those marks are stored as symbolic links in the directory `$MARKPATH` (default `$HOME/.marks`)
+
+To use it, add `jump` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... jump)
+```
+
+## Commands
+
+| Command | Description |
+|----------------------|-------------------------------------------------------------------------------------------------|
+| `jump ` | Jump to the given mark |
+| `mark [mark-name]` | Create a mark with the given name or with the name of the current directory if none is provided |
+| `unmark ` | Remove the given mark |
+| `marks` | List the existing marks and the directories they point to |
diff --git a/zsh/.oh-my-zsh/plugins/jump/jump.plugin.zsh b/zsh/.oh-my-zsh/plugins/jump/jump.plugin.zsh
new file mode 100644
index 0000000..d161a6d
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/jump/jump.plugin.zsh
@@ -0,0 +1,64 @@
+# Easily jump around the file system by manually adding marks
+# marks are stored as symbolic links in the directory $MARKPATH (default $HOME/.marks)
+#
+# jump FOO: jump to a mark named FOO
+# mark FOO: create a mark named FOO
+# unmark FOO: delete a mark
+# marks: lists all marks
+#
+export MARKPATH=$HOME/.marks
+
+jump() {
+ cd -P "$MARKPATH/$1" 2>/dev/null || {echo "No such mark: $1"; return 1}
+}
+
+mark() {
+ if [[ ( $# == 0 ) || ( "$1" == "." ) ]]; then
+ MARK=$(basename "$PWD")
+ else
+ MARK="$1"
+ fi
+ if read -q \?"Mark $PWD as ${MARK}? (y/n) "; then
+ mkdir -p "$MARKPATH"; ln -sfn "$PWD" "$MARKPATH/$MARK"
+ fi
+}
+
+unmark() {
+ rm -i "$MARKPATH/$1"
+}
+
+marks() {
+ local max=0
+ for link in $MARKPATH/*(@); do
+ if [[ ${#link:t} -gt $max ]]; then
+ max=${#link:t}
+ fi
+ done
+ local printf_markname_template="$(printf -- "%%%us " "$max")"
+ for link in $MARKPATH/*(@); do
+ local markname="$fg[cyan]${link:t}$reset_color"
+ local markpath="$fg[blue]$(readlink $link)$reset_color"
+ printf -- "$printf_markname_template" "$markname"
+ printf -- "-> %s\n" "$markpath"
+ done
+}
+
+_completemarks() {
+ if [[ $(ls "${MARKPATH}" | wc -l) -gt 1 ]]; then
+ reply=($(ls $MARKPATH/**/*(-) | grep : | sed -E 's/(.*)\/([_a-zA-Z0-9\.\-]*):$/\2/g'))
+ else
+ if readlink -e "${MARKPATH}"/* &>/dev/null; then
+ reply=($(ls "${MARKPATH}"))
+ fi
+ fi
+}
+compctl -K _completemarks jump
+compctl -K _completemarks unmark
+
+_mark_expansion() {
+ setopt extendedglob
+ autoload -U modify-current-argument
+ modify-current-argument '$(readlink "$MARKPATH/$ARG")'
+}
+zle -N _mark_expansion
+bindkey "^g" _mark_expansion
diff --git a/zsh/.oh-my-zsh/plugins/kate/README.md b/zsh/.oh-my-zsh/plugins/kate/README.md
new file mode 100644
index 0000000..aa2eaa3
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/kate/README.md
@@ -0,0 +1,20 @@
+# Kate plugin
+
+This plugin adds aliases for the [Kate editor](https://kate-editor.org).
+
+To use it, add kate to the plugins array of your zshrc file:
+```
+plugins=(... kate)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+|-------|------------------------|---------------------|
+| kate | `kate >/dev/null 2>&1` | Start kate silently |
+
+## Functions
+
+| Function | Description |
+|------------|------------------------------------------|
+| `kt ` | Change to directory and start kate there |
diff --git a/zsh/.oh-my-zsh/plugins/kate/kate.plugin.zsh b/zsh/.oh-my-zsh/plugins/kate/kate.plugin.zsh
new file mode 100644
index 0000000..eb16522
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/kate/kate.plugin.zsh
@@ -0,0 +1,9 @@
+
+# Kate
+# Start kate always silent
+alias kate='kate >/dev/null 2>&1'
+
+function kt () {
+ cd $1
+ kate $1
+}
\ No newline at end of file
diff --git a/zsh/.oh-my-zsh/plugins/keychain/README.md b/zsh/.oh-my-zsh/plugins/keychain/README.md
new file mode 100644
index 0000000..c603f67
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/keychain/README.md
@@ -0,0 +1,45 @@
+# keychain plugin
+
+This plugin starts automatically [`keychain`](https://www.funtoo.org/Keychain)
+to set up and load whichever credentials you want for both gpg and ssh
+connections.
+
+To enable it, add `keychain` to your plugins:
+
+```zsh
+plugins=(... keychain)
+```
+
+**NOTE**: It is HIGHLY recommended to also enable the `gpg-agent` plugin.
+
+## Instructions
+
+**IMPORTANT: put these settings _before_ the line that sources oh-my-zsh**
+
+**To adjust the agents** that keychain manages, use the `agents` style as
+shown below. By default, only the `gpg` agent is managed.
+
+```zsh
+zstyle :omz:plugins:keychain agents gpg,ssh
+```
+
+To **load multiple identities** use the `identities` style, For example:
+
+```zsh
+zstyle :omz:plugins:keychain identities id_ed25519 id_github 2C5879C2
+```
+
+**To pass additional options** to the `keychain` program, use the
+`options` style; for example:
+
+```zsh
+zstyle :omz:plugins:keychain options --quiet
+```
+
+## Credits
+
+Based on code from the `ssh-agent` plugin.
+
+## References
+
+- [Keychain](https://www.funtoo.org/Keychain)
diff --git a/zsh/.oh-my-zsh/plugins/keychain/keychain.plugin.zsh b/zsh/.oh-my-zsh/plugins/keychain/keychain.plugin.zsh
new file mode 100644
index 0000000..def97d8
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/keychain/keychain.plugin.zsh
@@ -0,0 +1,32 @@
+function _start_agent() {
+ local agents
+ local -a identities
+ local -a options
+ local _keychain_env_sh
+ local _keychain_env_sh_gpg
+
+ # load agents to start.
+ zstyle -s :omz:plugins:keychain agents agents
+
+ # load identities to manage.
+ zstyle -a :omz:plugins:keychain identities identities
+
+ # load additional options
+ zstyle -a :omz:plugins:keychain options options
+
+ # start keychain...
+ keychain ${^options:-} --agents ${agents:-gpg} ${^identities} --host $SHORT_HOST
+
+ # Get the filenames to store/lookup the environment from
+ _keychain_env_sh="$HOME/.keychain/$SHORT_HOST-sh"
+ _keychain_env_sh_gpg="$HOME/.keychain/$SHORT_HOST-sh-gpg"
+
+ # Source environment settings.
+ [ -f "$_keychain_env_sh" ] && . "$_keychain_env_sh"
+ [ -f "$_keychain_env_sh_gpg" ] && . "$_keychain_env_sh_gpg"
+}
+
+_start_agent
+
+# tidy up after ourselves
+unfunction _start_agent
diff --git a/zsh/.oh-my-zsh/plugins/kitchen/README.md b/zsh/.oh-my-zsh/plugins/kitchen/README.md
new file mode 100644
index 0000000..89a6d70
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/kitchen/README.md
@@ -0,0 +1,9 @@
+# kitchen plugin
+
+This plugin adds completion support for the [Test Kitchen](https://kitchen.ci).
+
+To use it, add `kitchen` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... kitchen)
+```
diff --git a/zsh/.oh-my-zsh/plugins/kitchen/_kitchen b/zsh/.oh-my-zsh/plugins/kitchen/_kitchen
new file mode 100644
index 0000000..29a3125
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/kitchen/_kitchen
@@ -0,0 +1,85 @@
+#compdef kitchen
+# ------------------------------------------------------------------------------
+# Copyright (c) 2014 Github zsh-users - https://github.com/zsh-users
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of the zsh-users nor the
+# names of its contributors may be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# ------------------------------------------------------------------------------
+# Description
+# -----------
+#
+# Completion script for Test Kitchen (https://kitchen.ci/).
+#
+# ------------------------------------------------------------------------------
+# Authors
+# -------
+#
+# * Peter Eisentraut (https://github.com/petere)
+#
+# ------------------------------------------------------------------------------
+
+
+_kitchen() {
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments '1: :->cmds'\
+ '2: :->args'
+
+ case $state in
+ cmds)
+ _kitchen_commands
+ ;;
+ args)
+ case $line[1] in
+ converge|create|destroy|diagnose|list|setup|test|verify)
+ compadd 'all'
+ _kitchen_instances
+ ;;
+ login)
+ _kitchen_instances
+ ;;
+ esac
+ ;;
+ esac
+}
+
+_kitchen_commands() {
+ local commands
+
+ commands=("${(@f)$(_call_program commands $service help | sed -n 's/^ kitchen \([[:alpha:]]*\) [ [].*# \(.*\)$/\1:\2/p')}")
+ _describe -t commands 'kitchen commands' commands
+}
+
+_kitchen_instances() {
+ if [[ $_kitchen_instances_cache_dir != $PWD ]]; then
+ unset _kitchen_instances_cache
+ fi
+ if [[ ${+_kitchen_instances_cache} -eq 0 ]]; then
+ _kitchen_instances_cache=(${(f)"$(_call_program instances $service list -b 2>/dev/null)"})
+ _kitchen_instances_cache_dir=$PWD
+ fi
+ _wanted instances expl 'instance' compadd -a _kitchen_instances_cache
+}
+
+_kitchen "$@"
diff --git a/zsh/.oh-my-zsh/plugins/knife/README.md b/zsh/.oh-my-zsh/plugins/knife/README.md
new file mode 100644
index 0000000..b167f16
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/knife/README.md
@@ -0,0 +1,25 @@
+# knife plugin
+
+This plugin adds completion for [knife](https://docs.chef.io/knife.html), a command-line tool
+to interact with [Chef](https://chef.io), a platform to automate and manage infrastructure via
+code.
+
+To use it, add `knife` to the plugins array in your zshrc file:
+```zsh
+plugins=(... knife)
+```
+
+## Options
+
+- `KNIFE_RELATIVE_PATH`: if set to `true`, the completion script will look for local cookbooks
+ under the `cookbooks` folder in the chef root directory. It has preference over the other two
+ options below. **Default:** empty.
+
+- `KNIFE_COOKBOOK_PATH`: if set, it points to the folder that contains local cookbooks, for
+ example: `/path/to/my/chef/cookbooks`. **Default:** `cookbook_path` field in `knife.rb`
+ (see below).
+
+- `KNIFE_CONF_PATH`: variable pointing to the `knife.rb` configuration file, for example
+ `/path/to/my/.chef/knife.rb`. Only used if `$KNIFE_COOKBOOK_PATH` isn't set. If it exists,
+ `$PWD/.chef/knife.rb` is used instead. Otherwise, if it's set, its value is used.
+ **Default**: `$HOME/.chef/knife.rb`.
diff --git a/zsh/.oh-my-zsh/plugins/knife/_knife b/zsh/.oh-my-zsh/plugins/knife/_knife
new file mode 100644
index 0000000..06b12a3
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/knife/_knife
@@ -0,0 +1,248 @@
+#compdef knife
+
+# You can override the path to knife.rb and your cookbooks by setting
+# KNIFE_CONF_PATH=/path/to/my/.chef/knife.rb
+# KNIFE_COOKBOOK_PATH=/path/to/my/chef/cookbooks
+# If you want your local cookbooks path to be calculated relative to where you are then
+# set the below option
+# KNIFE_RELATIVE_PATH=true
+# Read around where these are used for more detail.
+
+# These flags should be available everywhere according to man knife
+knife_general_flags=(--help --server-url --key --config --editor --format --log_level --logfile --no-editor --user --print-after --version --yes)
+
+# knife has a very special syntax, some example calls are:
+# knife status
+# knife cookbook list
+# knife role show ROLENAME
+# knife data bag show DATABAGNAME
+# knife role show ROLENAME --attribute ATTRIBUTENAME
+# knife cookbook show COOKBOOKNAME COOKBOOKVERSION recipes
+
+# The -Q switch in compadd allow for completions of things like "data bag" without having to go through two rounds of completion and avoids zsh inserting a \ for escaping spaces
+_knife() {
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+ cloudproviders=(bluebox ec2 rackspace slicehost terremark)
+ _arguments \
+ '1: :->knifecmd' \
+ '2: :->knifesubcmd' \
+ '3: :->knifesubcmd2' \
+ '4: :->knifesubcmd3' \
+ '5: :->knifesubcmd4' \
+ '6: :->knifesubcmd5'
+
+ case $state in
+ knifecmd)
+ compadd -Q "$@" bootstrap client configure cookbook "cookbook site" "data bag" diff exec environment index node recipe role search ssh status upload vault windows $cloudproviders
+ ;;
+ knifesubcmd)
+ case $words[2] in
+ bluebox|ec2|rackspace|slicehost|terremark)
+ compadd "$@" server images
+ ;;
+ client)
+ compadd -Q "$@" "bulk delete" list create show delete edit reregister
+ ;;
+ configure)
+ compadd "$@" client
+ ;;
+ cookbook)
+ compadd -Q "$@" test list create download delete "metadata from" show "bulk delete" metadata upload
+ ;;
+ diff)
+ _arguments '*:file or directory:_files -g "*"'
+ ;;
+ environment)
+ compadd -Q "$@" list create delete edit show "from file"
+ ;;
+ node)
+ compadd -Q "$@" "from file" create show edit delete list run_list "bulk delete"
+ ;;
+ recipe)
+ compadd "$@" list
+ ;;
+ role)
+ compadd -Q "$@" "bulk delete" create delete edit "from file" list show
+ ;;
+ upload)
+ _arguments '*:file or directory:_files -g "*"'
+ ;;
+ vault)
+ compadd -Q "$@" create decrypt delete edit remove "rotate all keys" "rotate keys" show update
+ ;;
+ windows)
+ compadd "$@" bootstrap
+ ;;
+ *)
+ _arguments '2:Subsubcommands:($(_knife_options1))'
+ ;;
+ esac
+ ;;
+ knifesubcmd2)
+ case $words[3] in
+ server)
+ compadd "$@" list create delete
+ ;;
+ images)
+ compadd "$@" list
+ ;;
+ site)
+ compadd "$@" vendor show share search download list unshare
+ ;;
+ show|delete|edit)
+ _arguments '3:Subsubcommands:($(_chef_$words[2]s_remote))'
+ ;;
+ upload|test)
+ _arguments '3:Subsubcommands:($(_chef_$words[2]s_local) --all)'
+ ;;
+ list)
+ compadd -a "$@" knife_general_flags
+ ;;
+ bag)
+ compadd -Q "$@" show edit list "from file" create delete
+ ;;
+ *)
+ _arguments '3:Subsubcommands:($(_knife_options2))'
+ ;;
+ esac
+ ;;
+ knifesubcmd3)
+ case $words[3] in
+ show)
+ case $words[2] in
+ cookbook)
+ versioncomp=1
+ _arguments '4:Cookbookversions:($(_cookbook_versions) latest)'
+ ;;
+ node|client|role)
+ compadd "$@" --attribute
+ ;;
+ esac
+ ;;
+ esac
+ case $words[4] in
+ show|edit)
+ _arguments '4:Subsubsubcommands:($(_chef_$words[2]_$words[3]s_remote))'
+ ;;
+ file)
+ case $words[2] in
+ environment)
+ _arguments '*:files:_path_files -g "*.(rb|json)" -W "$(_chef_root)/environments"'
+ ;;
+ node)
+ _arguments '*:files:_path_files -g "*.(rb|json)" -W "$(_chef_root)/nodes"'
+ ;;
+ role)
+ _arguments '*:files:_path_files -g "*.(rb|json)" -W "$(_chef_root)/roles"'
+ ;;
+ *)
+ _arguments '*:Subsubcommands:($(_knife_options3))'
+ ;;
+ esac
+ ;;
+ list)
+ compadd -a "$@" knife_general_flags
+ ;;
+ *)
+ _arguments '*:Subsubcommands:($(_knife_options3))'
+ ;;
+ esac
+ ;;
+ knifesubcmd4)
+ if ((versioncomp > 0)); then
+ compadd "$@" attributes definitions files libraries providers recipes resources templates
+ else
+ case $words[5] in
+ file)
+ _arguments '*:directory:_path_files -/ -W "$(_chef_root)/data_bags" -qS \ '
+ ;;
+ *) _arguments '*:Subsubcommands:($(_knife_options2))' ;;
+ esac
+ fi
+ ;;
+ knifesubcmd5)
+ case $words[5] in
+ file)
+ _arguments '*:files:_path_files -g "*.json" -W "$(_chef_root)/data_bags/$words[6]"'
+ ;;
+ *)
+ _arguments '*:Subsubcommands:($(_knife_options3))'
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# Helper functions to provide the argument completion for several depths of commands
+_knife_options1() {
+ (for line in $(knife $words[2] --help | grep -v "^knife"); do echo $line | grep "\-\-"; done)
+}
+
+_knife_options2() {
+ (for line in $(knife $words[2] $words[3] --help | grep -v "^knife"); do echo $line | grep "\-\-"; done)
+}
+
+_knife_options3() {
+ (for line in $(knife $words[2] $words[3] $words[4] --help | grep -v "^knife"); do echo $line | grep "\-\-"; done)
+}
+
+# The chef_x_remote functions use knife to get a list of objects of type x on the server
+_chef_roles_remote() {
+ (knife role list --format json | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
+}
+
+_chef_clients_remote() {
+ (knife client list --format json | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
+}
+
+_chef_nodes_remote() {
+ (knife node list --format json | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
+}
+
+_chef_cookbooks_remote() {
+ (knife cookbook list --format json | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
+}
+
+_chef_sitecookbooks_remote() {
+ (knife cookbook site list --format json | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
+}
+
+_chef_data_bags_remote() {
+ (knife data bag list --format json | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
+}
+
+_chef_environments_remote() {
+ (knife environment list | awk '{print $1}')
+}
+
+# The chef_x_local functions use the knife config to find the paths of relevant objects x to be uploaded to the server
+_chef_cookbooks_local() {
+ if [ $KNIFE_RELATIVE_PATH ]; then
+ local cookbook_path="$(_chef_root)/cookbooks"
+ else
+ local knife_rb=${KNIFE_CONF_PATH:-${HOME}/.chef/knife.rb}
+ if [ -f ./.chef/knife.rb ]; then
+ knife_rb="./.chef/knife.rb"
+ fi
+ local cookbook_path=${KNIFE_COOKBOOK_PATH:-$(grep cookbook_path $knife_rb | awk 'BEGIN {FS = "[" }; {print $2}' | sed 's/\,//g' | sed "s/'//g" | sed 's/\(.*\)]/\1/')}
+ fi
+ (for i in $cookbook_path; do ls $i; done)
+}
+
+# This function extracts the available cookbook versions on the chef server
+_cookbook_versions() {
+ (knife cookbook show $words[4] | grep -v $words[4] | grep -v -E '\]|\[|\{|\}' | sed 's/ //g' | sed 's/"//g')
+}
+
+# Searches up from current directory to find the closest folder that has a .chef folder
+# Useful for the knife upload/from file commands
+_chef_root() {
+ directory="$PWD"
+ while [ $directory != '/' ]; do
+ test -e "$directory/.chef" && echo "$directory" && return
+ directory="${directory:h}"
+ done
+}
+
+_knife "$@"
diff --git a/zsh/.oh-my-zsh/plugins/knife_ssh/README.md b/zsh/.oh-my-zsh/plugins/knife_ssh/README.md
new file mode 100644
index 0000000..cb836b7
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/knife_ssh/README.md
@@ -0,0 +1,14 @@
+# knife_ssh plugin
+
+This plugin adds a `knife_ssh` function as well as completion for it, to allow
+connecting via ssh to servers managed with [Chef](https://www.chef.io/).
+
+To use it, add `knife_ssh` to the plugins array in your zshrc file:
+```zsh
+plugins=(... knife_ssh)
+```
+
+The plugin creates a cache of the Chef node list via `knife`, and stores it
+in `$HOME/.knife_comp~`, when first triggering knife_ssh completion.
+
+**Requirements:** `knife` has to be installed.
diff --git a/zsh/.oh-my-zsh/plugins/knife_ssh/knife_ssh.plugin.zsh b/zsh/.oh-my-zsh/plugins/knife_ssh/knife_ssh.plugin.zsh
new file mode 100644
index 0000000..dc425a3
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/knife_ssh/knife_ssh.plugin.zsh
@@ -0,0 +1,18 @@
+function knife_ssh() {
+ grep -q $1 ~/.knife_comp~ 2> /dev/null || rm -f ~/.knife_comp~
+ ssh $(knife node show $1 | awk '/IP:/{print $2}')
+}
+
+_knife_ssh() {
+ if hash knife 2>/dev/null; then
+ if [[ ! -f ~/.knife_comp~ ]]; then
+ echo "\nGenerating ~/.knife_comp~..." >&2
+ knife node list > ~/.knife_comp~
+ fi
+ compadd $(< ~/.knife_comp~)
+ else
+ echo "Could not find knife" >&2
+ fi
+}
+
+compdef _knife_ssh knife_ssh
diff --git a/zsh/.oh-my-zsh/plugins/kops/README.md b/zsh/.oh-my-zsh/plugins/kops/README.md
new file mode 100644
index 0000000..5d9b5f8
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/kops/README.md
@@ -0,0 +1,12 @@
+# kops
+
+This plugin provides completion for [kops](https://github.com/kubernetes/kops) (Kubernetes Operations),
+the command line interface to get a production grade Kubernetes cluster up and running.
+
+To use it, add `kops` to the plugins array in your zshrc file.
+
+```
+plugins=(... kops)
+```
+
+**Author:** [@nmrony](https://github.com/nmrony)
diff --git a/zsh/.oh-my-zsh/plugins/kops/kops.plugin.zsh b/zsh/.oh-my-zsh/plugins/kops/kops.plugin.zsh
new file mode 100644
index 0000000..0c38ce2
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/kops/kops.plugin.zsh
@@ -0,0 +1,3 @@
+if [ $commands[kops] ]; then
+ source <(kops completion zsh)
+fi
diff --git a/zsh/.oh-my-zsh/plugins/kube-ps1/README.md b/zsh/.oh-my-zsh/plugins/kube-ps1/README.md
new file mode 100644
index 0000000..82c0a77
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/kube-ps1/README.md
@@ -0,0 +1,104 @@
+# Kubernetes prompt for zsh
+
+A Kubernetes zsh prompt that displays the current cluster cluster
+and the namespace.
+
+Inspired by several tools used to simplify usage of kubectl
+
+NOTE: If you are not using zsh, check out [kube-ps1](https://github.com/jonmosco/kube-ps1)
+designed for bash as well as zsh.
+
+## Requirements
+
+The default prompt assumes you have the kubectl command line utility installed. It
+can be obtained here:
+
+[Install and Set up kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
+
+If using this with OpenShift, the oc tool needs installed. It can be obtained from here:
+
+[OC Client Tools](https://www.openshift.org/download.html)
+
+## Helper utilities
+
+There are several great tools that make using kubectl very enjoyable.
+
+[kubectx and kubenx](https://github.com/ahmetb/kubectx) are great for
+fast switching between clusters and namespaces.
+
+## Prompt Structure
+
+The prompt layout is:
+
+```
+(|:)
+```
+
+## Enabling
+
+In order to use kube-ps1 with Oh My Zsh, you'll need to enable them in the
+.zshrc file. You'll find the zshrc file in your $HOME directory. Open it with
+your favorite text editor and you'll see a spot to list all the plugins you
+want to load.
+
+```shell
+vim $HOME/.zshrc
+```
+
+Add kube-ps1 to the list of enabled plugins and enable it on the prompt:
+
+```shell
+plugins=(
+ git
+ kube-ps1
+)
+
+# After the "source Oh My Zsh" line
+PROMPT=$PROMPT'$(kube_ps1) '
+```
+
+Note: The `PROMPT` example above was tested with the theme `robbyrussell`.
+
+## Enabling / Disabling on the current shell
+
+Sometimes the kubernetes information can be anoying, you can easily
+switch it on and off with the following commands:
+
+```shell
+kubeon
+```
+
+```shell
+kubeoff
+```
+
+## Colors
+
+Blue was used as the prefix to match the Kubernetes color as closely as
+possible. Red was chosen as the cluster name to stand out, and cyan
+for the namespace. Check the customization section for changing them.
+
+## Customization
+
+The default settings can be overridden in ~/.zshrc
+
+| Variable | Default | Meaning |
+| :------- | :-----: | ------- |
+| `KUBE_PS1_BINARY` | `kubectl` | Default Kubernetes binary |
+| `KUBE_PS1_PREFIX` | `(` | Prompt opening character |
+| `KUBE_PS1_SYMBOL_ENABLE` | `true ` | Display the prompt Symbol. If set to `false`, this will also disable `KUBE_PS1_SEPARATOR` |
+| `KUBE_PS1_SYMBOL_DEFAULT` | `⎈ ` | Default prompt symbol. Unicode `\u2388` |
+| `KUBE_PS1_SYMBOL_USE_IMG` | `false` | â˜¸ï¸ , Unicode `\u2638` as the prompt symbol |
+| `KUBE_PS1_NS_ENABLE` | `true` | Display the namespace. If set to `false`, this will also disable `KUBE_PS1_DIVIDER` |
+| `KUBE_PS1_SEPERATOR` | `\|` | Separator between symbol and cluster name |
+| `KUBE_PS1_DIVIDER` | `:` | Separator between cluster and namespace |
+| `KUBE_PS1_SUFFIX` | `)` | Prompt closing character |
+| `KUBE_PS1_COLOR_SYMBOL` | `"%F{blue}"` | Custom color for the symbol |
+| `KUBE_PS1_COLOR_CONTEXT` | `"%F{red}"` | Custom color for the context |
+| `KUBE_PS1_COLOR_NS` | `"%F{cyan}"` | Custom color for the namespace |
+| `KUBE_PS1_ENABLED` | `true` | Set to false to start disabled on any new shell, `kubeon`/`kubeoff` will flip this value on the current shell |
+
+## Contributors
+
+- Jared Yanovich
+- Pedro Moranga
diff --git a/zsh/.oh-my-zsh/plugins/kube-ps1/kube-ps1.plugin.zsh b/zsh/.oh-my-zsh/plugins/kube-ps1/kube-ps1.plugin.zsh
new file mode 100644
index 0000000..3cb2128
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/kube-ps1/kube-ps1.plugin.zsh
@@ -0,0 +1,159 @@
+#!/bin/zsh
+
+# Kubernetes prompt helper for bash/zsh
+# ported to oh-my-zsh
+# Displays current context and namespace
+
+# Copyright 2018 Jon Mosco
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Debug
+[[ -n $DEBUG ]] && set -x
+
+setopt PROMPT_SUBST
+autoload -U add-zsh-hook
+add-zsh-hook precmd _kube_ps1_update_cache
+zmodload zsh/stat
+zmodload zsh/datetime
+
+# Default values for the prompt
+# Override these values in ~/.zshrc
+KUBE_PS1_BINARY="${KUBE_PS1_BINARY:-kubectl}"
+KUBE_PS1_SYMBOL_ENABLE="${KUBE_PS1_SYMBOL_ENABLE:-true}"
+KUBE_PS1_SYMBOL_DEFAULT="${KUBE_PS1_SYMBOL_DEFAULT:-\u2388 }"
+KUBE_PS1_SYMBOL_USE_IMG="${KUBE_PS1_SYMBOL_USE_IMG:-false}"
+KUBE_PS1_NS_ENABLE="${KUBE_PS1_NS_ENABLE:-true}"
+KUBE_PS1_SEPARATOR="${KUBE_PS1_SEPARATOR-|}"
+KUBE_PS1_DIVIDER="${KUBE_PS1_DIVIDER-:}"
+KUBE_PS1_PREFIX="${KUBE_PS1_PREFIX-(}"
+KUBE_PS1_SUFFIX="${KUBE_PS1_SUFFIX-)}"
+KUBE_PS1_LAST_TIME=0
+KUBE_PS1_ENABLED=true
+
+KUBE_PS1_COLOR_SYMBOL="%{$fg[blue]%}"
+KUBE_PS1_COLOR_CONTEXT="%{$fg[red]%}"
+KUBE_PS1_COLOR_NS="%{$fg[cyan]%}"
+
+_kube_ps1_binary_check() {
+ command -v "$1" >/dev/null
+}
+
+_kube_ps1_symbol() {
+ [[ "${KUBE_PS1_SYMBOL_ENABLE}" == false ]] && return
+
+ KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_DEFAULT}"
+ KUBE_PS1_SYMBOL_IMG="\u2638 "
+
+ if [[ "${KUBE_PS1_SYMBOL_USE_IMG}" == true ]]; then
+ KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_IMG}"
+ fi
+
+ echo "${KUBE_PS1_SYMBOL}"
+}
+
+_kube_ps1_split() {
+ type setopt >/dev/null 2>&1 && setopt SH_WORD_SPLIT
+ local IFS=$1
+ echo $2
+}
+
+_kube_ps1_file_newer_than() {
+ local mtime
+ local file=$1
+ local check_time=$2
+
+ zmodload -e "zsh/stat"
+ if [[ "$?" -eq 0 ]]; then
+ mtime=$(stat +mtime "${file}")
+ elif stat -c "%s" /dev/null &> /dev/null; then
+ # GNU stat
+ mtime=$(stat -c %Y "${file}")
+ else
+ # BSD stat
+ mtime=$(stat -f %m "$file")
+ fi
+
+ [[ "${mtime}" -gt "${check_time}" ]]
+}
+
+_kube_ps1_update_cache() {
+ KUBECONFIG="${KUBECONFIG:=$HOME/.kube/config}"
+ if ! _kube_ps1_binary_check "${KUBE_PS1_BINARY}"; then
+ # No ability to fetch context/namespace; display N/A.
+ KUBE_PS1_CONTEXT="BINARY-N/A"
+ KUBE_PS1_NAMESPACE="N/A"
+ return
+ fi
+
+ if [[ "${KUBECONFIG}" != "${KUBE_PS1_KUBECONFIG_CACHE}" ]]; then
+ # User changed KUBECONFIG; unconditionally refetch.
+ KUBE_PS1_KUBECONFIG_CACHE=${KUBECONFIG}
+ _kube_ps1_get_context_ns
+ return
+ fi
+
+ # kubectl will read the environment variable $KUBECONFIG
+ # otherwise set it to ~/.kube/config
+ local conf
+ for conf in $(_kube_ps1_split : "${KUBECONFIG:-${HOME}/.kube/config}"); do
+ [[ -r "${conf}" ]] || continue
+ if _kube_ps1_file_newer_than "${conf}" "${KUBE_PS1_LAST_TIME}"; then
+ _kube_ps1_get_context_ns
+ return
+ fi
+ done
+}
+
+_kube_ps1_get_context_ns() {
+
+ # Set the command time
+ KUBE_PS1_LAST_TIME=$EPOCHSECONDS
+
+ KUBE_PS1_CONTEXT="$(${KUBE_PS1_BINARY} config current-context 2>/dev/null)"
+ if [[ -z "${KUBE_PS1_CONTEXT}" ]]; then
+ KUBE_PS1_CONTEXT="N/A"
+ KUBE_PS1_NAMESPACE="N/A"
+ return
+ elif [[ "${KUBE_PS1_NS_ENABLE}" == true ]]; then
+ KUBE_PS1_NAMESPACE="$(${KUBE_PS1_BINARY} config view --minify --output 'jsonpath={..namespace}' 2>/dev/null)"
+ # Set namespace to 'default' if it is not defined
+ KUBE_PS1_NAMESPACE="${KUBE_PS1_NAMESPACE:-default}"
+ fi
+}
+
+# function to disable the prompt on the current shell
+kubeon(){
+ KUBE_PS1_ENABLED=true
+}
+
+# function to disable the prompt on the current shell
+kubeoff(){
+ KUBE_PS1_ENABLED=false
+}
+
+# Build our prompt
+kube_ps1 () {
+ local reset_color="%{$reset_color%}"
+ [[ ${KUBE_PS1_ENABLED} != 'true' ]] && return
+
+ KUBE_PS1="${reset_color}$KUBE_PS1_PREFIX"
+ KUBE_PS1+="${KUBE_PS1_COLOR_SYMBOL}$(_kube_ps1_symbol)"
+ KUBE_PS1+="${reset_color}$KUBE_PS1_SEPERATOR"
+ KUBE_PS1+="${KUBE_PS1_COLOR_CONTEXT}$KUBE_PS1_CONTEXT${reset_color}"
+ KUBE_PS1+="$KUBE_PS1_DIVIDER"
+ KUBE_PS1+="${KUBE_PS1_COLOR_NS}$KUBE_PS1_NAMESPACE${reset_color}"
+ KUBE_PS1+="$KUBE_PS1_SUFFIX"
+
+ echo "${KUBE_PS1}"
+}
diff --git a/zsh/.oh-my-zsh/plugins/kubectl/README.md b/zsh/.oh-my-zsh/plugins/kubectl/README.md
new file mode 100644
index 0000000..c0db593
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/kubectl/README.md
@@ -0,0 +1,107 @@
+# Kubectl plugin
+
+This plugin adds completion for the [Kubernetes cluster manager](https://kubernetes.io/docs/reference/kubectl/kubectl/),
+as well as some aliases for common kubectl commands.
+
+To use it, add `kubectl` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... kubectl)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+|:--------|:------------------------------------|:-------------------------------------------------------------------------------------------------|
+| k | `kubectl` | The kubectl command |
+| kca | `kubectl --all-namespaces` | The kubectl command targeting all namespaces |
+| kaf | `kubectl apply -f` | Apply a YML file |
+| keti | `kubectl exec -ti` | Drop into an interactive terminal on a container |
+| | | **Manage configuration quickly to switch contexts between local, dev and staging** |
+| kcuc | `kubectl config use-context` | Set the current-context in a kubeconfig file |
+| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig |
+| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig |
+| kccc | `kubectl config current-context` | Display the current-context |
+| kcgc | `kubectl config get-contexts` | List of contexts available
+| | | **General aliases** |
+| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector |
+| kdelf | `kubectl delete -f` | Delete a pod using the type and name specified in -f argument |
+| | | **Pod management** |
+| kgp | `kubectl get pods` | List all pods in ps output format |
+| kgpw | `kgp --watch` | After listing/getting the requested object, watch for changes |
+| kgpwide | `kgp -o wide` | Output in plain-text format with any additional information. For pods, the node name is included |
+| kep | `kubectl edit pods` | Edit pods from the default editor |
+| kdp | `kubectl describe pods` | Describe all pods |
+| kdelp | `kubectl delete pods` | Delete all pods matching passed arguments |
+| kgpl | `kgp -l` | Get pod by label. Example: `kgpl "app=myapp" -n myns` |
+| | | **Service management** |
+| kgs | `kubectl get svc` | List all services in ps output format |
+| kgsw | `kgs --watch` | After listing all services, watch for changes |
+| kgswide | `kgs -o wide` | After listing all services, output in plain-text format with any additional information |
+| kes | `kubectl edit svc` | Edit services(svc) from the default editor |
+| kds | `kubectl describe svc` | Describe all services in detail |
+| kdels | `kubectl delete svc` | Delete all services matching passed argument |
+| | | **Ingress management** |
+| kgi | `kubectl get ingress` | List ingress resources in ps output format |
+| kei | `kubectl edit ingress` | Edit ingress resource from the default editor |
+| kdi | `kubectl describe ingress` | Describe ingress resource in detail |
+| kdeli | `kubectl delete ingress` | Delete ingress resources matching passed argument |
+| | | **Namespace management** |
+| kgns | `kubectl get namespaces` | List the current namespaces in a cluster |
+| kcn | `kubectl config set-context ...` | Change current namespace |
+| kens | `kubectl edit namespace` | Edit namespace resource from the default editor |
+| kdns | `kubectl describe namespace` | Describe namespace resource in detail |
+| kdelns | `kubectl delete namespace` | Delete the namespace. WARNING! This deletes everything in the namespace |
+| | | **ConfigMap management** |
+| kgcm | `kubectl get configmaps` | List the configmaps in ps output format |
+| kecm | `kubectl edit configmap` | Edit configmap resource from the default editor |
+| kdcm | `kubectl describe configmap` | Describe configmap resource in detail |
+| kdelcm | `kubectl delete configmap` | Delete the configmap |
+| | | **Secret management** |
+| kgsec | `kubectl get secret` | Get secret for decoding |
+| kdsec | `kubectl describe secret` | Describe secret resource in detail |
+| kdelsec | `kubectl delete secret` | Delete the secret |
+| | | **Deployment management** |
+| kgd | `kubectl get deployment` | Get the deployment |
+| kgdw | `kgd --watch` | After getting the deployment, watch for changes |
+| kgdwide | `kgd -o wide` | After getting the deployment, output in plain-text format with any additional information |
+| ked | `kubectl edit deployment` | Edit deployment resource from the default editor |
+| kdd | `kubectl describe deployment` | Describe deployment resource in detail |
+| kdeld | `kubectl delete deployment` | Delete the deployment |
+| ksd | `kubectl scale deployment` | Scale a deployment |
+| krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment |
+| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime |
+| | | **Rollout management** |
+| kgrs | `kubectl get rs` | To see the ReplicaSet `rs` created by the deployment |
+| krh | `kubectl rollout history` | Check the revisions of this deployment |
+| kru | `kubectl rollout undo` | Rollback to the previous revision |
+| | | **Port forwarding** |
+| kpf | `kubectl port-forward` | Forward one or more local ports to a pod |
+| | | **Tools for accessing all information** |
+| kga | `kubectl get all` | List all resources in ps format |
+| kgaa | `kubectl get all --all-namespaces` | List the requested object(s) across all namespaces |
+| | | **Logs** |
+| kl | `kubectl logs` | Print the logs for a container or resource |
+| klf | `kubectl logs -f` | Stream the logs for a container or resource (follow) |
+| | | **File copy** |
+| kcp | `kubectl cp` | Copy files and directories to and from containers |
+| | | **Node management** |
+| kgno | `kubectl get nodes` | List the nodes in ps output format |
+| keno | `kubectl edit node` | Edit nodes resource from the default editor |
+| kdno | `kubectl describe node` | Describe node resource in detail |
+| kdelno | `kubectl delete node` | Delete the node |
+| | | **Persistent Volume Claim management** |
+| kgpvc | `kubectl get pvc` | List all PVCs |
+| kgpvcw | `kgpvc --watch` | After listing/getting the requested object, watch for changes |
+| kepvc | `kubectl edit pvc` | Edit pvcs from the default editor |
+| kdpvc | `kubectl describe pvc` | Descirbe all pvcs |
+| kdelpvc | `kubectl delete pvc` | Delete all pvcs matching passed arguments |
+| | | |
+| kgss | `kubectl get statefulset` | List the statefulsets in ps format |
+| kgssw | `kgss --watch` | After getting the list of statefulsets, watch for changes |
+| kgsswide| `kgss -o wide` | After getting the statefulsets, output in plain-text format with any additional information |
+| kess | `kubectl edit statefulset` | Edit statefulset resource from the default editor |
+| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail |
+| kdelss | `kubectl delete statefulset` | Delete the statefulset |
+| ksss | `kubectl scale statefulset` | Scale a statefulset |
+| krsss | `kubectl rollout status statefulset`| Check the rollout status of a deployment |
diff --git a/zsh/.oh-my-zsh/plugins/kubectl/kubectl.plugin.zsh b/zsh/.oh-my-zsh/plugins/kubectl/kubectl.plugin.zsh
new file mode 100644
index 0000000..cc447b8
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/kubectl/kubectl.plugin.zsh
@@ -0,0 +1,149 @@
+if (( $+commands[kubectl] )); then
+ __KUBECTL_COMPLETION_FILE="${ZSH_CACHE_DIR}/kubectl_completion"
+
+ if [[ ! -f $__KUBECTL_COMPLETION_FILE ]]; then
+ kubectl completion zsh >! $__KUBECTL_COMPLETION_FILE
+ fi
+
+ [[ -f $__KUBECTL_COMPLETION_FILE ]] && source $__KUBECTL_COMPLETION_FILE
+
+ unset __KUBECTL_COMPLETION_FILE
+fi
+
+# This command is used a LOT both below and in daily life
+alias k=kubectl
+
+# Execute a kubectl command against all namespaces
+alias kca='f(){ kubectl "$@" --all-namespaces; unset -f f; }; f'
+
+# Apply a YML file
+alias kaf='kubectl apply -f'
+
+# Drop into an interactive terminal on a container
+alias keti='kubectl exec -ti'
+
+# Manage configuration quickly to switch contexts between local, dev ad staging.
+alias kcuc='kubectl config use-context'
+alias kcsc='kubectl config set-context'
+alias kcdc='kubectl config delete-context'
+alias kccc='kubectl config current-context'
+
+# List all contexts
+alias kcgc='kubectl config get-contexts'
+
+#Â General aliases
+alias kdel='kubectl delete'
+alias kdelf='kubectl delete -f'
+
+# Pod management.
+alias kgp='kubectl get pods'
+alias kgpa='kubectl get pods --all-namespaces'
+alias kgpw='kgp --watch'
+alias kgpwide='kgp -o wide'
+alias kep='kubectl edit pods'
+alias kdp='kubectl describe pods'
+alias kdelp='kubectl delete pods'
+
+# get pod by label: kgpl "app=myapp" -n myns
+alias kgpl='kgp -l'
+
+# Service management.
+alias kgs='kubectl get svc'
+alias kgsa='kubectl get svc --all-namespaces'
+alias kgsw='kgs --watch'
+alias kgswide='kgs -o wide'
+alias kes='kubectl edit svc'
+alias kds='kubectl describe svc'
+alias kdels='kubectl delete svc'
+
+# Ingress management
+alias kgi='kubectl get ingress'
+alias kgia='kubectl get ingress --all-namespaces'
+alias kei='kubectl edit ingress'
+alias kdi='kubectl describe ingress'
+alias kdeli='kubectl delete ingress'
+
+# Namespace management
+alias kgns='kubectl get namespaces'
+alias kens='kubectl edit namespace'
+alias kdns='kubectl describe namespace'
+alias kdelns='kubectl delete namespace'
+alias kcn='kubectl config set-context $(kubectl config current-context) --namespace'
+
+# ConfigMap management
+alias kgcm='kubectl get configmaps'
+alias kgcma='kubectl get configmaps --all-namespaces'
+alias kecm='kubectl edit configmap'
+alias kdcm='kubectl describe configmap'
+alias kdelcm='kubectl delete configmap'
+
+# Secret management
+alias kgsec='kubectl get secret'
+alias kgseca='kubectl get secret --all-namespaces'
+alias kdsec='kubectl describe secret'
+alias kdelsec='kubectl delete secret'
+
+# Deployment management.
+alias kgd='kubectl get deployment'
+alias kgda='kubectl get deployment --all-namespaces'
+alias kgdw='kgd --watch'
+alias kgdwide='kgd -o wide'
+alias ked='kubectl edit deployment'
+alias kdd='kubectl describe deployment'
+alias kdeld='kubectl delete deployment'
+alias ksd='kubectl scale deployment'
+alias krsd='kubectl rollout status deployment'
+kres(){
+ kubectl set env $@ REFRESHED_AT=$(date +%Y%m%d%H%M%S)
+}
+
+# Rollout management.
+alias kgrs='kubectl get rs'
+alias krh='kubectl rollout history'
+alias kru='kubectl rollout undo'
+
+# Statefulset management.
+alias kgss='kubectl get statefulset'
+alias kgssa='kubectl get statefulset --all-namespaces'
+alias kgssw='kgss --watch'
+alias kgsswide='kgss -o wide'
+alias kess='kubectl edit statefulset'
+alias kdss='kubectl describe statefulset'
+alias kdelss='kubectl delete statefulset'
+alias ksss='kubectl scale statefulset'
+alias krsss='kubectl rollout status statefulset'
+
+# Port forwarding
+alias kpf="kubectl port-forward"
+
+# Tools for accessing all information
+alias kga='kubectl get all'
+alias kgaa='kubectl get all --all-namespaces'
+
+# Logs
+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'
+
+# File copy
+alias kcp='kubectl cp'
+
+# Node Management
+alias kgno='kubectl get nodes'
+alias keno='kubectl edit node'
+alias kdno='kubectl describe node'
+alias kdelno='kubectl delete node'
+
+# PVC management.
+alias kgpvc='kubectl get pvc'
+alias kgpvca='kubectl get pvc --all-namespaces'
+alias kgpvcw='kgpvc --watch'
+alias kepvc='kubectl edit pvc'
+alias kdpvc='kubectl describe pvc'
+alias kdelpvc='kubectl delete pvc'
+
diff --git a/zsh/.oh-my-zsh/plugins/laravel/README.md b/zsh/.oh-my-zsh/plugins/laravel/README.md
new file mode 100644
index 0000000..95f5901
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/laravel/README.md
@@ -0,0 +1,57 @@
+# Laravel
+
+This plugin adds aliases and autocompletion for Laravel [Artisan](https://laravel.com/docs/artisan) and [Bob](http://daylerees.github.io/laravel-bob/) command-line interfaces.
+
+```
+plugins=(... laravel)
+```
+
+| Alias | Description |
+|:-:|:-:|
+| `artisan` | `php artisan` |
+| `pas` | `php artisan serve` |
+
+## Database
+
+| Alias | Description |
+|:-:|:-:|
+| `pam` | `php artisan migrate` |
+| `pamf` | `php artisan migrate:fresh` |
+| `pamfs` | `php artisan migrate:fresh --seed` |
+| `pamr` | `php artisan migrate:rollback` |
+| `pads` | `php artisan db:seed` |
+
+## Makers
+
+| Alias | Description |
+|:-:|:-:|
+| `pamm` | `php artisan make:model` |
+| `pamc` | `php artisan make:controller` |
+| `pams` | `php artisan make:seeder` |
+| `pamt` | `php artisan make:test` |
+| `pamfa` | `php artisan make:factory` |
+| `pamp` | `php artisan make:policy` |
+| `pame` | `php artisan make:event` |
+| `pamj` | `php artisan make:job` |
+| `paml` | `php artisan make:listener` |
+| `pamn` | `php artisan make:notification` |
+
+## Clears
+
+| Alias | Description |
+|:-:|:-:|
+| `pacac` | `php artisan cache:clear` |
+| `pacoc` | `php artisan config:clear` |
+| `pavic` | `php artisan view:clear` |
+| `paroc` | `php artisan route:clear` |
+
+## Queues
+
+| Alias | Description |
+|:-:|:-:|
+| `paqf` | `php artisan queue:failed` |
+| `paqft` | `php artisan queue:failed-table` |
+| `paql` | `php artisan queue:listen` |
+| `paqr` | `php artisan queue:retry` |
+| `paqt` | `php artisan queue:table` |
+| `paqw` | `php artisan queue:work` |
diff --git a/zsh/.oh-my-zsh/plugins/laravel/_artisan b/zsh/.oh-my-zsh/plugins/laravel/_artisan
new file mode 100644
index 0000000..8637514
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/laravel/_artisan
@@ -0,0 +1,40 @@
+#compdef artisan
+
+# Laravel autocompletion
+# Author: John Hamelink
+#
+# This plugin does the following:
+# - Adds aliases and autocompletion for artisan
+# - Adds aliases and autocompletion for bob
+
+local curcontext="$curcontext" state line _opts _bundles ret=1
+_arguments -C \
+ '1: :->cmds' \
+ '*:: :->args' && ret=0
+
+case $state in
+ cmds)
+
+ _values "Artisan command" \
+ 'session\:install[Create a session table]' \
+ 'migrate[Manage Migrations]' \
+ 'test[Run a test]' \
+ 'route\:\:call[Call a route in the CLI]' \
+ 'key\:\:generate[Generate a key]'
+ ret=0
+ ;;
+ args)
+ case $line[1] in
+ migrate)
+ _values \
+ 'install[Create the Laravel migration table' \
+ 'make[Create a migration]' \
+ 'rollback[Roll back to the last migration operation]' \
+ 'reset[Roll back all migrations that have ever run]'
+ ret=0
+ ;;
+ esac
+ ;;
+esac
+
+return ret
diff --git a/zsh/.oh-my-zsh/plugins/laravel/laravel.plugin.zsh b/zsh/.oh-my-zsh/plugins/laravel/laravel.plugin.zsh
new file mode 100644
index 0000000..a8382d3
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/laravel/laravel.plugin.zsh
@@ -0,0 +1,41 @@
+#!zsh
+alias artisan='php artisan'
+alias bob='php artisan bob::build'
+
+# Development
+alias pas='php artisan serve'
+
+# Database
+alias pam='php artisan migrate'
+alias pamf='php artisan migrate:fresh'
+alias pamfs='php artisan migrate:fresh --seed'
+alias pamr='php artisan migrate:rollback'
+alias pads='php artisan db:seed'
+
+# Makers
+alias pamm='php artisan make:model'
+alias pamc='php artisan make:controller'
+alias pams='php artisan make:seeder'
+alias pamt='php artisan make:test'
+alias pamfa='php artisan make:factory'
+alias pamp='php artisan make:policy'
+alias pame='php artisan make:event'
+alias pamj='php artisan make:job'
+alias paml='php artisan make:listener'
+alias pamn='php artisan make:notification'
+alias pampp='php artisan make:provider'
+
+
+# Clears
+alias pacac='php artisan cache:clear'
+alias pacoc='php artisan config:clear'
+alias pavic='php artisan view:clear'
+alias paroc='php artisan route:clear'
+
+# queues
+alias paqf='php artisan queue:failed'
+alias paqft='php artisan queue:failed-table'
+alias paql='php artisan queue:listen'
+alias paqr='php artisan queue:retry'
+alias paqt='php artisan queue:table'
+alias paqw='php artisan queue:work'
diff --git a/zsh/.oh-my-zsh/plugins/laravel4/README.md b/zsh/.oh-my-zsh/plugins/laravel4/README.md
new file mode 100644
index 0000000..c945601
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/laravel4/README.md
@@ -0,0 +1,18 @@
+# Laravel 4 plugin
+
+This plugin adds some aliases for common [Laravel 4](https://laravel.com/docs/4.2) commands.
+
+To use it, add `laravel4` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... laravel4)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+|-----------|-------------------------------------------|-------------------------------------------------------------|
+| la4 | `php artisan` | Main Artisan command |
+| la4dump | `php artisan dump-autoload` | Regenerate framework autoload files |
+| la4cache | `php artisan cache:clear` | Flush the application cache |
+| la4routes | `php artisan routes` | List all registered routes |
diff --git a/zsh/.oh-my-zsh/plugins/laravel4/laravel4.plugin.zsh b/zsh/.oh-my-zsh/plugins/laravel4/laravel4.plugin.zsh
new file mode 100644
index 0000000..0edc849
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/laravel4/laravel4.plugin.zsh
@@ -0,0 +1,20 @@
+# Laravel4 basic command completion
+_laravel4_get_command_list () {
+ php artisan --no-ansi | sed "1,/Available commands/d" | awk '/^ +[a-z]+/ { print $1 }'
+}
+
+_laravel4 () {
+ if [ -f artisan ]; then
+ compadd `_laravel4_get_command_list`
+ fi
+}
+
+compdef _laravel4 artisan
+compdef _laravel4 la4
+
+#Alias
+alias la4='php artisan'
+
+alias la4dump='php artisan dump-autoload'
+alias la4cache='php artisan cache:clear'
+alias la4routes='php artisan routes'
diff --git a/zsh/.oh-my-zsh/plugins/laravel5/README.md b/zsh/.oh-my-zsh/plugins/laravel5/README.md
new file mode 100644
index 0000000..933342a
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/laravel5/README.md
@@ -0,0 +1,18 @@
+# Laravel 5 plugin
+
+This plugin adds some aliases for common [Laravel 5](https://laravel.com/docs) commands.
+
+To use it, add `laravel5` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... laravel5)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+|-----------|------------------------------|----------------------------------------------------|
+| la5 | `php artisan` | Main Artisan command |
+| la5cache | `php artisan cache:clear` | Flush the application cache |
+| la5routes | `php artisan route:list` | List all registered routes |
+| la5vendor | `php artisan vendor:publish` | Publish any publishable assets from vendor package |
diff --git a/zsh/.oh-my-zsh/plugins/laravel5/laravel5.plugin.zsh b/zsh/.oh-my-zsh/plugins/laravel5/laravel5.plugin.zsh
new file mode 100644
index 0000000..487a074
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/laravel5/laravel5.plugin.zsh
@@ -0,0 +1,20 @@
+# Laravel5 basic command completion
+_laravel5_get_command_list () {
+ php artisan --raw --no-ansi list | sed "s/[[:space:]].*//g"
+}
+
+_laravel5 () {
+ if [ -f artisan ]; then
+ compadd `_laravel5_get_command_list`
+ fi
+}
+
+compdef _laravel5 artisan
+compdef _laravel5 la5
+
+#Alias
+alias la5='php artisan'
+
+alias la5cache='php artisan cache:clear'
+alias la5routes='php artisan route:list'
+alias la5vendor='php artisan vendor:publish'
diff --git a/zsh/.oh-my-zsh/plugins/last-working-dir/README.md b/zsh/.oh-my-zsh/plugins/last-working-dir/README.md
new file mode 100644
index 0000000..4cc4aca
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/last-working-dir/README.md
@@ -0,0 +1,9 @@
+# last-working-dir plugin
+
+Keeps track of the last used working directory and automatically jumps into it
+for new shells, unless:
+
+- The plugin is already loaded.
+- The current `$PWD` is not `$HOME`.
+
+Adds `lwd` function to jump to the last working directory.
diff --git a/zsh/.oh-my-zsh/plugins/last-working-dir/last-working-dir.plugin.zsh b/zsh/.oh-my-zsh/plugins/last-working-dir/last-working-dir.plugin.zsh
new file mode 100644
index 0000000..fd21705
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/last-working-dir/last-working-dir.plugin.zsh
@@ -0,0 +1,26 @@
+# Flag indicating if we've previously jumped to last directory
+typeset -g ZSH_LAST_WORKING_DIRECTORY
+
+# Updates the last directory once directory is changed
+autoload -U add-zsh-hook
+add-zsh-hook chpwd chpwd_last_working_dir
+chpwd_last_working_dir() {
+ if [ "$ZSH_SUBSHELL" = 0 ]; then
+ local cache_file="$ZSH_CACHE_DIR/last-working-dir"
+ pwd >| "$cache_file"
+ fi
+}
+
+# Changes directory to the last working directory
+lwd() {
+ local cache_file="$ZSH_CACHE_DIR/last-working-dir"
+ [[ -r "$cache_file" ]] && cd "$(cat "$cache_file")"
+}
+
+# Jump to last directory automatically unless:
+# - this isn't the first time the plugin is loaded
+# - it's not in $HOME directory
+[[ -n "$ZSH_LAST_WORKING_DIRECTORY" ]] && return
+[[ "$PWD" != "$HOME" ]] && return
+
+lwd 2>/dev/null && ZSH_LAST_WORKING_DIRECTORY=1 || true
diff --git a/zsh/.oh-my-zsh/plugins/lein/README.md b/zsh/.oh-my-zsh/plugins/lein/README.md
new file mode 100644
index 0000000..0c41196
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/lein/README.md
@@ -0,0 +1,9 @@
+# Leiningen plugin
+
+This plugin adds completions for the [Leiningen](https://leiningen.org/) Clojure build tool.
+
+To use it, add `lein` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... lein)
+```
diff --git a/zsh/.oh-my-zsh/plugins/lein/_lein b/zsh/.oh-my-zsh/plugins/lein/_lein
new file mode 100644
index 0000000..9d022e9
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/lein/_lein
@@ -0,0 +1,69 @@
+#compdef lein
+
+# Lein ZSH completion function
+# Drop this somewhere in your $fpath (like /usr/share/zsh/site-functions)
+# and rename it _lein
+
+_lein() {
+ if (( CURRENT > 2 )); then
+ # shift words so _arguments doesn't have to be concerned with second command
+ (( CURRENT-- ))
+ shift words
+ # use _call_function here in case it doesn't exist
+ _call_function 1 _lein_${words[1]}
+ else
+ _values "lein command" \
+ "change[Rewrite project.clj by applying a function.]" \
+ "check[Check syntax and warn on reflection.]" \
+ "classpath[Print the classpath of the current project.]" \
+ "clean[Remove all files from project's target-path.]" \
+ "compile[Compile Clojure source into .class files.]" \
+ "deploy[Build and deploy jar to remote repository.]" \
+ "deps[Download all dependencies.]" \
+ "do[Higher-order task to perform other tasks in succession.]" \
+ "help[Display a list of tasks or help for a given task.]" \
+ "install[Install the current project to the local repository.]" \
+ "jar[Package up all the project's files into a jar file.]" \
+ "javac[Compile Java source files.]" \
+ "new[Generate project scaffolding based on a template.]" \
+ "plugin[DEPRECATED. Please use the :user profile instead.]" \
+ "pom[Write a pom.xml file to disk for Maven interoperability.]" \
+ "release[Perform :release-tasks.]" \
+ "repl[Start a repl session either with the current project or standalone.]" \
+ "retest[Run only the test namespaces which failed last time around.]" \
+ "run[Run a -main function with optional command-line arguments.]" \
+ "search[Search remote maven repositories for matching jars.]" \
+ "show-profiles[List all available profiles or display one if given an argument.]" \
+ "test[Run the project's tests.]" \
+ "trampoline[Run a task without nesting the project's JVM inside Leiningen's.]" \
+ "uberjar[Package up the project files and dependencies into a jar file.]" \
+ "update-in[Perform arbitrary transformations on your project map.]" \
+ "upgrade[Upgrade Leiningen to specified version or latest stable.]" \
+ "vcs[Interact with the version control system.]" \
+ "version[Print version for Leiningen and the current JVM.]" \
+ "with-profile[Apply the given task with the profile(s) specified.]"
+ fi
+}
+
+_lein_plugin() {
+ _values "lein plugin commands" \
+ "install[Download, package, and install plugin jarfile into ~/.lein/plugins]" \
+ "uninstall[Delete the plugin jarfile: \[GROUP/\]ARTIFACT-ID VERSION]"
+}
+
+
+_lein_namespaces() {
+ if [ -f "./project.clj" -a -d "$1" ]; then
+ _values "lein valid namespaces" \
+ $(find "$1" -type f -name "*.clj" -exec awk '/^\(ns */ {gsub("\\)", "", $2); print $2}' '{}' '+')
+ fi
+}
+
+
+_lein_run() {
+ _lein_namespaces "src/"
+}
+
+_lein_test() {
+ _lein_namespaces "test/"
+}
diff --git a/zsh/.oh-my-zsh/plugins/lighthouse/README.md b/zsh/.oh-my-zsh/plugins/lighthouse/README.md
new file mode 100644
index 0000000..0db29b4
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/lighthouse/README.md
@@ -0,0 +1,26 @@
+# Lighthouse plugin
+
+This plugin adds commands to manage [Lighthouse](https://lighthouseapp.com/).
+
+To use it, add `lighthouse` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... lighthouse)
+```
+
+## Commands
+
+* `open_lighthouse_ticket ` (alias: `lho`):
+
+ Opens the URL to the issue passed as an argument. To use it, add a `.lighthouse-url`
+ file in your directory with the URL to the individual project.
+
+ Example:
+ ```zsh
+ $ cat .lighthouse-url
+ https://rails.lighthouseapp.com/projects/8994
+
+ $ lho 23
+ Opening ticket #23
+ # The browser goes to https://rails.lighthouseapp.com/projects/8994/tickets/23
+ ```
diff --git a/zsh/.oh-my-zsh/plugins/lighthouse/lighthouse.plugin.zsh b/zsh/.oh-my-zsh/plugins/lighthouse/lighthouse.plugin.zsh
new file mode 100644
index 0000000..3fca2bf
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/lighthouse/lighthouse.plugin.zsh
@@ -0,0 +1,12 @@
+open_lighthouse_ticket () {
+ if [ ! -f .lighthouse-url ]; then
+ echo "There is no .lighthouse-url file in the current directory..."
+ return 0
+ fi
+
+ lighthouse_url=$(cat .lighthouse-url)
+ echo "Opening ticket #$1"
+ open_command "$lighthouse_url/tickets/$1"
+}
+
+alias lho='open_lighthouse_ticket'
diff --git a/zsh/.oh-my-zsh/plugins/lol/README.md b/zsh/.oh-my-zsh/plugins/lol/README.md
new file mode 100644
index 0000000..8fba7b7
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/lol/README.md
@@ -0,0 +1,83 @@
+# lol
+
+Plugin for adding catspeak aliases, because why not
+
+## Enabling the plugin
+
+1. Open your `.zshrc` file and add `lol` in the plugins section:
+
+ ```zsh
+ plugins=(
+ # all your enabled plugins
+ lol
+ )
+ ```
+
+2. Restart your terminal session or restart the shell:
+
+ ```console
+ $ exec zsh
+ $
+ ```
+
+## Aliases
+
+| Alias | Command |
+| ------------ | ---------------------------------------------------------------- |
+| `:3` | `echo` |
+| `alwayz` | `tail -f` |
+| `bringz` | `git pull` |
+| `btw` | `nice` |
+| `byes` | `exit` |
+| `chicken` | `git add` |
+| `cya` | `reboot` |
+| `donotwant` | `rm` |
+| `dowant` | `cp` |
+| `gimmeh` | `touch` |
+| `gtfo` | `mv` |
+| `hackzor` | `git init` |
+| `hai` | `cd` |
+| `icanhas` | `mkdir` |
+| `ihasbucket` | `df -h` |
+| `iminurbase` | `finger` |
+| `inur` | `locate` |
+| `invisible` | `cat` |
+| `iz` | `ls` |
+| `kthxbai` | `halt` |
+| `letcat` | `git checkout` |
+| `moar` | `more` |
+| `nomnom` | `killall` |
+| `nomz` | `ps aux` |
+| `nowai` | `chmod` |
+| `oanward` | `git commit -m` |
+| `obtw` | `nohup` |
+| `onoz` | `cat /var/log/errors.log` |
+| `ooanward` | `git commit -am` |
+| `plz` | `pwd` |
+| `pwned` | `ssh` |
+| `rtfm` | `man` |
+| `rulz` | `git push` |
+| `tldr` | `less` |
+| `violenz` | `git rebase` |
+| `visible` | `echo` |
+| `wtf` | `dmesg` |
+| `yolo` | `git commit -m "$(curl -s https://whatthecommit.com/index.txt)"` |
+
+## Usage Examples
+
+```sh
+# mkdir new-directory
+icanhas new-directory
+
+# killall firefox
+nomnom firefox
+
+# chmod u=r,go= some.file
+nowai u=r,go= some.file
+
+# ssh root@catserver.org
+pwned root@catserver.org
+
+# git commit -m "$(curl -s https://whatthecommit.com/index.txt)"
+yolo
+```
diff --git a/zsh/.oh-my-zsh/plugins/lol/lol.plugin.zsh b/zsh/.oh-my-zsh/plugins/lol/lol.plugin.zsh
new file mode 100644
index 0000000..3c30259
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/lol/lol.plugin.zsh
@@ -0,0 +1,51 @@
+# LOL!!1
+# Source: https://aur.archlinux.org/packages/lolbash/lolbash/lolbash.sh
+
+alias wtf='dmesg'
+alias onoz='cat /var/log/errors.log'
+alias rtfm='man'
+
+alias :3='echo'
+alias visible='echo'
+alias invisible='cat'
+alias moar='more'
+alias tldr='less'
+alias alwayz='tail -f'
+
+alias icanhas='mkdir'
+alias gimmeh='touch'
+alias donotwant='rm'
+alias dowant='cp'
+alias gtfo='mv'
+alias nowai='chmod'
+
+alias hai='cd'
+alias iz='ls'
+alias plz='pwd'
+alias ihasbucket='df -h'
+
+alias inur='locate'
+alias iminurbase='finger'
+
+alias btw='nice'
+alias obtw='nohup'
+
+alias nomz='ps aux'
+alias nomnom='killall'
+
+alias byes='exit'
+alias cya='reboot'
+alias kthxbai='halt'
+
+alias pwned='ssh'
+
+alias hackzor='git init'
+alias rulz='git push'
+alias bringz='git pull'
+alias chicken='git add'
+alias oanward='git commit -m'
+alias ooanward='git commit -am'
+alias yolo='git commit -m "$(curl -s http://whatthecommit.com/index.txt)"'
+alias letcat='git checkout'
+alias violenz='git rebase'
+
diff --git a/zsh/.oh-my-zsh/plugins/macports/README.md b/zsh/.oh-my-zsh/plugins/macports/README.md
new file mode 100644
index 0000000..ded823f
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/macports/README.md
@@ -0,0 +1,21 @@
+# Macports plugin
+
+This plugin adds completion for the package manager [Macports](https://macports.com/),
+as well as some aliases for common Macports commands.
+
+To use it, add `macports` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... macports)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+|-------|------------------------------------|--------------------------------------------------------------|
+| pc | `sudo port clean --all installed` | Clean up intermediate installation files for installed ports |
+| pi | `sudo port install` | Install package given as argument |
+| psu | `sudo port selfupdate` | Update ports tree with MacPorts repository |
+| puni | `sudo port uninstall inactive` | Uninstall inactive ports |
+| puo | `sudo port upgrade outdated` | Upgrade ports with newer versions available |
+| pup | `psu && puo` | Update ports tree, then upgrade ports to newest versions |
diff --git a/zsh/.oh-my-zsh/plugins/macports/_port b/zsh/.oh-my-zsh/plugins/macports/_port
new file mode 100644
index 0000000..06d7fb4
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/macports/_port
@@ -0,0 +1,89 @@
+#compdef port
+
+local subcmds
+
+# we cache the list of ports
+# we shall use some cache policy to avoid problems with new ports
+if (( ! $+portlist )); then
+ portlist=($(port echo all; echo "all current active inactive installed uninstalled outdated"))
+fi
+
+subcmds=(
+'activate'
+'archive'
+'build'
+'cat'
+'clean'
+'configure'
+'contents'
+'deactivate'
+'dependents'
+'deps'
+'destroot'
+'dir'
+'distcheck'
+'distclean'
+'dmg'
+'echo'
+'edit'
+'extract'
+'fetch'
+'file'
+'help'
+'info'
+'install'
+'installed'
+'list'
+'livecheck'
+'location'
+'mpkg'
+'outdated'
+'patch'
+'pkg'
+'provides'
+'rpmpackage'
+'search'
+'selfupdate'
+'sync'
+'test'
+'unarchive'
+'uninstall'
+'upgrade'
+'variants'
+'version'
+)
+
+_arguments -C \
+'-v[verbose mode (generate verbose messages)]' \
+'-d[debug mode (generate debugging messages)]' \
+'-q[quiet mode (suppress messages)]' \
+'-D[specify portdir]' \
+'-k[keep mode (do not autoclean after install)]' \
+'-n[dont follow dependencies in upgrade (only for upgrading)]' \
+'-a[upgrade all installed ports (only for upgrading)]' \
+'-u[uninstall non-active ports when upgrading and uninstalling]' \
+'-f[force mode (ignore state file)]' \
+'-s[source-only mode]' \
+'-b[binary-only mode]' \
+'-o[honor state files older than Portfile]' \
+'*::command:->command' \
+&& return 0
+
+case $state in
+ command)
+ if ((CURRENT == 1)); then
+ state=subcommands
+ else
+ state=portname
+ fi
+ ;;
+esac
+
+case $state in
+ subcommands)
+ _describe -t commands 'port commands' subcmds
+ ;;
+ portname)
+ _describe -t commands 'available ports' portlist
+ ;;
+esac
diff --git a/zsh/.oh-my-zsh/plugins/macports/macports.plugin.zsh b/zsh/.oh-my-zsh/plugins/macports/macports.plugin.zsh
new file mode 100644
index 0000000..d1fde30
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/macports/macports.plugin.zsh
@@ -0,0 +1,6 @@
+alias pc="sudo port clean --all installed"
+alias pi="sudo port install"
+alias psu="sudo port selfupdate"
+alias puni="sudo port uninstall inactive"
+alias puo="sudo port upgrade outdated"
+alias pup="psu && puo"
diff --git a/zsh/.oh-my-zsh/plugins/magic-enter/README.md b/zsh/.oh-my-zsh/plugins/magic-enter/README.md
new file mode 100644
index 0000000..78514c6
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/magic-enter/README.md
@@ -0,0 +1,17 @@
+## Magic Enter plugin
+
+This plugin makes your enter key magical, by binding commonly used commands to it.
+
+To use it, add `magic-enter` to the plugins array in your zshrc file. You can set the
+commands to be run in your .zshrc, before the line containing plugins. If no command
+is specified in a git directory, `git status` is executed; in other directories, `ls`.
+
+```zsh
+# defaults
+MAGIC_ENTER_GIT_COMMAND='git status -u .'
+MAGIC_ENTER_OTHER_COMMAND='ls -lh .'
+
+plugins=(... magic-enter)
+```
+
+**Maintainer:** [@dufferzafar](https://github.com/dufferzafar)
diff --git a/zsh/.oh-my-zsh/plugins/magic-enter/magic-enter.plugin.zsh b/zsh/.oh-my-zsh/plugins/magic-enter/magic-enter.plugin.zsh
new file mode 100644
index 0000000..8e18596
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/magic-enter/magic-enter.plugin.zsh
@@ -0,0 +1,24 @@
+# Bind quick stuff to enter!
+#
+# Pressing enter in a git directory runs `git status`
+# in other directories `ls`
+magic-enter () {
+
+ # If commands are not already set, use the defaults
+ [ -z "$MAGIC_ENTER_GIT_COMMAND" ] && MAGIC_ENTER_GIT_COMMAND="git status -u ."
+ [ -z "$MAGIC_ENTER_OTHER_COMMAND" ] && MAGIC_ENTER_OTHER_COMMAND="ls -lh ."
+
+ if [[ -z $BUFFER ]]; then
+ echo ""
+ if git rev-parse --is-inside-work-tree &>/dev/null; then
+ eval "$MAGIC_ENTER_GIT_COMMAND"
+ else
+ eval "$MAGIC_ENTER_OTHER_COMMAND"
+ fi
+ zle redisplay
+ else
+ zle accept-line
+ fi
+}
+zle -N magic-enter
+bindkey "^M" magic-enter
diff --git a/zsh/.oh-my-zsh/plugins/man/README.md b/zsh/.oh-my-zsh/plugins/man/README.md
new file mode 100644
index 0000000..4601252
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/man/README.md
@@ -0,0 +1,13 @@
+# Man plugin
+
+This plugin adds a shortcut to insert man before the previous command.
+
+To use it, add `man` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... man)
+```
+# Keyboard Shortcuts
+| Shortcut | Description |
+|-----------------------------------|------------------------------------------------------------------------|
+| Esc + man | add man before the previous command to see the manual for this command |
diff --git a/zsh/.oh-my-zsh/plugins/man/man.plugin.zsh b/zsh/.oh-my-zsh/plugins/man/man.plugin.zsh
new file mode 100644
index 0000000..94aa491
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/man/man.plugin.zsh
@@ -0,0 +1,27 @@
+# ------------------------------------------------------------------------------
+# Author
+# ------
+#
+# * Jerry Ling
+#
+# ------------------------------------------------------------------------------
+# Usage
+# -----
+#
+# man will be inserted before the command
+#
+# ------------------------------------------------------------------------------
+
+man-command-line() {
+ [[ -z $BUFFER ]] && zle up-history
+ [[ $BUFFER != man\ * ]] && LBUFFER="man $LBUFFER"
+}
+zle -N man-command-line
+# Defined shortcut keys: [Esc]man
+bindkey "\e"man man-command-line
+
+
+# ------------------------------------------------------------------------------
+# Also, you might want to use man-preview included in 'osx' plugin
+# just substitute "man" in the function with "man-preview" after you included OS X in
+# the .zshrc
diff --git a/zsh/.oh-my-zsh/plugins/marked2/README.md b/zsh/.oh-my-zsh/plugins/marked2/README.md
new file mode 100644
index 0000000..101343a
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/marked2/README.md
@@ -0,0 +1,13 @@
+## marked2
+
+Plugin for Marked 2, a previewer for Markdown files on Mac OS X
+
+### Requirements
+
+ * [Marked 2](http://marked2app.com)
+
+### Usage
+
+ * If `marked` is called without an argument, open Marked
+
+ * If `marked` is passed a file, open it in Marked
diff --git a/zsh/.oh-my-zsh/plugins/marked2/marked2.plugin.zsh b/zsh/.oh-my-zsh/plugins/marked2/marked2.plugin.zsh
new file mode 100644
index 0000000..56863ad
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/marked2/marked2.plugin.zsh
@@ -0,0 +1,12 @@
+#
+# If marked is called without an argument, open Marked
+# If marked is passed a file, open it in Marked
+#
+function marked() {
+ if [ "$1" ]
+ then
+ open -a "marked 2.app" "$1"
+ else
+ open -a "marked 2.app"
+ fi
+}
diff --git a/zsh/.oh-my-zsh/plugins/mercurial/README.md b/zsh/.oh-my-zsh/plugins/mercurial/README.md
new file mode 100644
index 0000000..f42212d
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/mercurial/README.md
@@ -0,0 +1,60 @@
+# Mercurial plugin
+### Usage
+Update .zshrc:
+
+1. Add name to the list of plugins, e.g. `plugins=(... mercurial ...)`
+ (that is pretty obvious).
+2. Switch to a theme which uses `hg_prompt_info`.
+
+ Or, customize the `$PROMPT` variable of your current theme to contain current folder mercurial repo info. This can be done by putting a custom version of the theme in `$ZSH_CUSTOM` or by changing `$PROMPT` in `.zshrc` after loading the theme.
+
+ The `robbyrussell` theme is used by default, so you need to modify `$PROMPT` var by adding `$(hg_prompt_info)` after `$(git_prompt_info)`, so it looks like this:
+
+ ```zsh
+ PROMPT='${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)$(hg_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'
+ ```
+
+3. Initialize additional vars used in plugin. So in short put next in **.zshrc**:
+
+ ```
+ ZSH_THEME_HG_PROMPT_PREFIX="%{$fg_bold[magenta]%}hg:(%{$fg[red]%}"
+ ZSH_THEME_HG_PROMPT_SUFFIX="%{$reset_color%}"
+ ZSH_THEME_HG_PROMPT_DIRTY="%{$fg[magenta]%}) %{$fg[yellow]%}✗%{$reset_color%}"
+ ZSH_THEME_HG_PROMPT_CLEAN="%{$fg[magenta]%})"
+ ```
+
+### What's inside?
+#### Adds handy aliases:
+###### general
+* `hgc` - `hg commit`
+* `hgb` - `hg branch`
+* `hgba` - `hg branches`
+* `hgbk` - `hg bookmarks`
+* `hgco` - `hg checkout`
+* `hgd` - `hg diff`
+* `hged` - `hg diffmerge`
+
+###### pull and update
+* `hgi` - `hg incoming`
+* `hgl` - `hg pull -u`
+* `hglr` - `hg pull --rebase`
+* `hgo` - `hg outgoing`
+* `hgp` - `hg push`
+* `hgs` - `hg status`
+* `hgsl` - `hg log --limit 20 --template "{node|short} | {date|isodatesec} | {author|user}: {desc|strip|firstline}\n"`
+
+###### this is the 'git commit --amend' equivalent
+* `hgca` - `hg qimport -r tip ; hg qrefresh -e ; hg qfinish tip`
+
+###### list unresolved files (since hg does not list unmerged files in the status command)
+* `hgun` - `hg resolve --list`
+
+#### Displays repo branch and directory status in prompt
+This is the same as git plugin does.
+
+**Note**: Additional changes to **.zshrc**, or using a theme designed to use `hg_prompt_info`, are required in order for this to work.
+
+### Mantainers
+[ptrv](https://github.com/ptrv) - original creator
+
+[oshybystyi](https://github.com/oshybystyi) - created this README and know how most of code works
diff --git a/zsh/.oh-my-zsh/plugins/mercurial/mercurial.plugin.zsh b/zsh/.oh-my-zsh/plugins/mercurial/mercurial.plugin.zsh
new file mode 100644
index 0000000..58bc571
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/mercurial/mercurial.plugin.zsh
@@ -0,0 +1,66 @@
+# Mercurial
+alias hga='hg add'
+alias hgc='hg commit'
+alias hgb='hg branch'
+alias hgba='hg branches'
+alias hgbk='hg bookmarks'
+alias hgco='hg checkout'
+alias hgd='hg diff'
+alias hged='hg diffmerge'
+# pull and update
+alias hgi='hg incoming'
+alias hgl='hg pull -u'
+alias hglr='hg pull --rebase'
+alias hgo='hg outgoing'
+alias hgp='hg push'
+alias hgs='hg status'
+alias hgsl='hg log --limit 20 --template "{node|short} | {date|isodatesec} | {author|user}: {desc|strip|firstline}\n" '
+alias hgca='hg commit --amend'
+# list unresolved files (since hg does not list unmerged files in the status command)
+alias hgun='hg resolve --list'
+
+function in_hg() {
+ if [[ -d .hg ]] || $(hg summary > /dev/null 2>&1); then
+ echo 1
+ fi
+}
+
+function hg_get_branch_name() {
+ if [ $(in_hg) ]; then
+ echo $(hg branch)
+ fi
+}
+
+function hg_prompt_info {
+ if [ $(in_hg) ]; then
+ _DISPLAY=$(hg_get_branch_name)
+ echo "$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_HG_PROMPT_PREFIX\
+$ZSH_THEME_REPO_NAME_COLOR$_DISPLAY$ZSH_PROMPT_BASE_COLOR$ZSH_PROMPT_BASE_COLOR$(hg_dirty)$ZSH_THEME_HG_PROMPT_SUFFIX$ZSH_PROMPT_BASE_COLOR"
+ unset _DISPLAY
+ fi
+}
+
+function hg_dirty_choose {
+ if [ $(in_hg) ]; then
+ hg status 2> /dev/null | command grep -Eq '^\s*[ACDIM!?L]'
+ if [ $pipestatus[-1] -eq 0 ]; then
+ # Grep exits with 0 when "One or more lines were selected", return "dirty".
+ echo $1
+ else
+ # Otherwise, no lines were found, or an error occurred. Return clean.
+ echo $2
+ fi
+ fi
+}
+
+function hg_dirty {
+ hg_dirty_choose $ZSH_THEME_HG_PROMPT_DIRTY $ZSH_THEME_HG_PROMPT_CLEAN
+}
+
+function hgic() {
+ hg incoming "$@" | grep "changeset" | wc -l
+}
+
+function hgoc() {
+ hg outgoing "$@" | grep "changeset" | wc -l
+}
diff --git a/zsh/.oh-my-zsh/plugins/meteor/README.md b/zsh/.oh-my-zsh/plugins/meteor/README.md
new file mode 100644
index 0000000..187a45a
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/meteor/README.md
@@ -0,0 +1,45 @@
+## Introduction
+
+The [meteor plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/meteor) provides many
+[useful aliases](#aliases) as well as completion for the `meteor` command.
+
+Enable it by adding `meteor` to the plugins array in your zshrc file:
+```zsh
+plugins=(... meteor)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+|---------|----------------------------|------------------------------------------------------------------|
+| `ma` | `meteor add` | Add a package to this project |
+| `map` | `meteor add-platform` | Add a platform to this project |
+| `mad` | `meteor admin` | Administrative commands |
+| `mau` | `meteor authorized` | View or change authorized users and organizations for a site |
+| `mb` | `meteor build` | Build this project for all platforms |
+| `mcl` | `meteor claim` | Claim a site deployed with an old Meteor version |
+| `mca` | `meteor configure-android` | Run the Android configuration tool from Meteor's ADK environment |
+| `mc` | `meteor create` | Create a new project |
+| `mdb` | `meteor debug` | Run the project, but suspend the server process for debugging |
+| `mde` | `meteor deploy` | Deploy this project to Meteor |
+| `mis` | `meteor install-sdk` | Installs SDKs for a platform |
+| `ml` | `meteor list` | List the packages explicitly used by your project |
+| `mlp` | `meteor list-platforms` | List the platforms added to your project |
+| `mls` | `meteor list-sites` | List sites for which you are authorized |
+| `mli` | `meteor login` | Log in to your Meteor developer account |
+| `mlo` | `meteor logout` | Log out of your Meteor developer account |
+| `mlog` | `meteor logs` | Show logs for specified site |
+| `mm` | `meteor mongo` | Connect to the Mongo database for the specified site |
+| `mp` | `meteor publish` | Publish a new version of a package to the package server |
+| `mpa` | `meteor publish-for-arch` | Builds an already-published package for a new platform |
+| `mpr` | `meteor publish-release` | Publish a new meteor release to the package server |
+| `mr` | `meteor remove` | Remove a package from this project |
+| `mrp` | `meteor remove-platform` | Remove a platform from this project |
+| `mre` | `meteor reset` | Reset the project state. Erases the local database |
+| `m` | `meteor run` | **[default]** Run this project in local development mode |
+| `ms` | `meteor search` | Search through the package server database |
+| `msh` | `meteor shell` | Launch a Node REPL for interactively evaluating server-side code |
+| `msw` | `meteor show` | Show detailed information about a release or package |
+| `mt` | `meteor test-packages` | Test one or more packages |
+| `mu` | `meteor update` | Upgrade this project's dependencies to their latest versions |
+| `mw` | `meteor whoami` | Prints the username of your Meteor developer account |
diff --git a/zsh/.oh-my-zsh/plugins/meteor/_meteor b/zsh/.oh-my-zsh/plugins/meteor/_meteor
new file mode 100644
index 0000000..6a15c4b
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/meteor/_meteor
@@ -0,0 +1,67 @@
+#compdef meteor
+#autoload
+
+# Meteor Autocomplete plugin for Oh-My-Zsh, based on homebrew completion
+# Original author: Dimitri JORGE (https://github.com/jorge-d)
+
+_meteor_all_packages() {
+ packages=(`meteor list | cut -d" " -f1`)
+}
+_meteor_installed_packages() {
+ installed_packages=(`meteor list --using`)
+}
+
+local -a _1st_arguments
+_1st_arguments=(
+ "add-platform:Add a platform to this project."
+ "add:Add a package to this project."
+ "admin:Administrative commands."
+ "authorized:View or change authorized users and organizations for a site."
+ "build:Build this project for all platforms."
+ "claim:Claim a site deployed with an old Meteor version."
+ "configure-android:Run the Android configuration tool from Meteor's ADK environment."
+ "create:Create a new project."
+ "debug:Run the project, but suspend the server process for debugging."
+ "deploy:Deploy this project to Meteor."
+ "install-sdk:Installs SDKs for a platform."
+ "lint:Build this project and run the linters printing all errors and warnings."
+ "list-platforms:List the platforms added to your project."
+ "list-sites:List sites for which you are authorized."
+ "list:List the packages explicitly used by your project."
+ "login:Log in to your Meteor developer account."
+ "logout:Log out of your Meteor developer account."
+ "logs:Show logs for specified site."
+ "mongo:Connect to the Mongo database for the specified site."
+ "publish-for-arch:Builds an already-published package for a new platform."
+ "publish-release:Publish a new meteor release to the package server."
+ "publish:Publish a new version of a package to the package server."
+ "remove-platform:Remove a platform from this project."
+ "remove:Remove a package from this project."
+ "reset:Reset the project state. Erases the local database."
+ "run:[default] Run this project in local development mode."
+ "search:Search through the package server database."
+ "shell:Launch a Node REPL for interactively evaluating server-side code."
+ "show:Show detailed information about a release or package."
+ "test-packages:Test one or more packages."
+ "update:Upgrade this project's dependencies to their latest versions."
+ "whoami:Prints the username of your Meteor developer account."
+)
+
+local expl
+local -a packages installed_packages
+
+if (( CURRENT == 2 )); then
+ _describe -t commands "meteor subcommand" _1st_arguments
+ return
+fi
+
+case "$words[2]" in
+ help)
+ _describe -t commands "meteor subcommand" _1st_arguments ;;
+ remove)
+ _meteor_installed_packages
+ _wanted installed_packages expl 'installed packages' compadd -a installed_packages ;;
+ add)
+ _meteor_all_packages
+ _wanted packages expl 'all packages' compadd -a packages ;;
+esac
diff --git a/zsh/.oh-my-zsh/plugins/meteor/meteor.plugin.zsh b/zsh/.oh-my-zsh/plugins/meteor/meteor.plugin.zsh
new file mode 100644
index 0000000..db55e36
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/meteor/meteor.plugin.zsh
@@ -0,0 +1,33 @@
+# Aliases in alphabetical order
+
+alias ma='meteor add' # Add a package to this project.
+alias map='meteor add-platform' # Add a platform to this project.
+alias mad='meteor admin' # Administrative commands.
+alias mau='meteor authorized' # View or change authorized users and organizations for a site.
+alias mb='meteor build' # Build this project for all platforms.
+alias mcl='meteor claim' # Claim a site deployed with an old Meteor version.
+alias mca='meteor configure-android' # Run the Android configuration tool from Meteor's ADK environment.
+alias mc='meteor create' # Create a new project.
+alias mdb='meteor debug' # Run the project, but suspend the server process for debugging.
+alias mde='meteor deploy' # Deploy this project to Meteor.
+alias mis='meteor install-sdk' # Installs SDKs for a platform.
+alias ml='meteor list' # List the packages explicitly used by your project.
+alias mlp='meteor list-platforms' # List the platforms added to your project.
+alias mls='meteor list-sites' # List sites for which you are authorized.
+alias mli='meteor login' # Log in to your Meteor developer account.
+alias mlo='meteor logout' # Log out of your Meteor developer account.
+alias mlog='meteor logs' # Show logs for specified site.
+alias mm='meteor mongo' # Connect to the Mongo database for the specified site.
+alias mp='meteor publish' # Publish a new version of a package to the package server.
+alias mpa='meteor publish-for-arch' # Builds an already-published package for a new platform.
+alias mpr='meteor publish-release' # Publish a new meteor release to the package server.
+alias mr='meteor remove' # Remove a package from this project.
+alias mrp='meteor remove-platform' # Remove a platform from this project.
+alias mre='meteor reset' # Reset the project state. Erases the local database.
+alias m='meteor run' # [default] Run this project in local development mode.
+alias ms='meteor search' # Search through the package server database.
+alias msh='meteor shell' # Launch a Node REPL for interactively evaluating server-side code.
+alias msw='meteor show' # Show detailed information about a release or package.
+alias mt='meteor test-packages' # Test one or more packages.
+alias mu='meteor update' # Upgrade this project's dependencies to their latest versions.
+alias mw='meteor whoami' # Prints the username of your Meteor developer account.
diff --git a/zsh/.oh-my-zsh/plugins/microk8s/README.md b/zsh/.oh-my-zsh/plugins/microk8s/README.md
new file mode 100644
index 0000000..2b4ea20
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/microk8s/README.md
@@ -0,0 +1,24 @@
+# MicroK8s plugin
+
+This plugin provides completion and useful aliases for [MicroK8s](https://microk8s.io/).
+
+To use it, add `microk8s` to the plugins array in your zshrc file.
+
+```zsh
+plugins=(... microk8s)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+|-------|------------------|----------------------------------------------------------------------------------------------------------|
+| mco | microk8s.config | Shows the Kubernetes config file. |
+| mct | microk8s.ctr | Interact with containerd CLI. |
+| mdi | microk8s.disable | Disables an addon. |
+| me | microk8s.enable | Enables an addon. |
+| mh | microk8s.helm | Interact with Helm CLI. |
+| mis | microk8s.istio | Interact with Istio CLI. |
+| mk | microk8s.kubectl | Interact with Kubernetes CLI. |
+| msp | microk8s.stop | Stops all Kubernetes services. |
+| mst | microk8s.start | Starts MicroK8s after it is being stopped. |
+| msts | microk8s.status | Provides an overview of the MicroK8s state (running / not running) as well as the set of enabled addons. |
\ No newline at end of file
diff --git a/zsh/.oh-my-zsh/plugins/microk8s/microk8s.plugin.zsh b/zsh/.oh-my-zsh/plugins/microk8s/microk8s.plugin.zsh
new file mode 100644
index 0000000..048a9ab
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/microk8s/microk8s.plugin.zsh
@@ -0,0 +1,82 @@
+# ---------------------------------------------------------- #
+# Aliases and Completions for MicroK8s (https://microk8s.io) #
+# Author: Shaun Tabone (https://github.com/xontab) #
+# ---------------------------------------------------------- #
+
+# Helper function to cache and load completions
+_microk8s_cache_completion() {
+ local cache="${ZSH_CACHE_DIR}/microk8s_$(echo $1)_completion"
+ if [[ ! -f $cache ]]; then
+ $2 $cache
+ fi
+
+ [[ -f $cache ]] && source $cache
+}
+
+# ---------------------------------------------------------- #
+# microk8s.enable #
+# ALIAS: me #
+# ---------------------------------------------------------- #
+_microk8s_enable_get_command_list() {
+ microk8s.enable --help | tail -n +7 | awk '{$1=$1;print}'
+}
+
+_microk8s_enable() {
+ compadd -X "MicroK8s Addons" $(_microk8s_enable_get_command_list)
+}
+
+compdef _microk8s_enable microk8s.enable
+alias me='microk8s.enable'
+
+# ---------------------------------------------------------- #
+# microk8s.disable #
+# ALIAS: mdi #
+# ---------------------------------------------------------- #
+_microk8s_disable_get_command_list() {
+ microk8s.disable --help | tail -n +7 | awk '{$1=$1;print}'
+}
+
+_microk8s_disable() {
+ compadd -X "MicroK8s Addons" $(_microk8s_disable_get_command_list)
+}
+
+compdef _microk8s_disable microk8s.disable
+alias mdi='microk8s.disable'
+
+# ---------------------------------------------------------- #
+# microk8s.kubectl #
+# ALIAS: mk #
+# ---------------------------------------------------------- #
+_microk8s_kubectl_completion() {
+ if [ $commands[microk8s.kubectl] ]; then
+ microk8s.kubectl 2>/dev/null >/dev/null && microk8s.kubectl completion zsh | sed 's/__start_kubectl kubectl/__start_kubectl microk8s.kubectl/g' >$1
+ fi
+}
+
+_microk8s_cache_completion 'kubectl' _microk8s_kubectl_completion
+
+alias mk='microk8s.kubectl'
+
+# ---------------------------------------------------------- #
+# microk8s.helm #
+# ALIAS: mh #
+# ---------------------------------------------------------- #
+_microk8s_helm_completion() {
+ if [ $commands[microk8s.helm] ]; then
+ microk8s.helm completion zsh | sed 's/__start_helm helm/__start_helm microk8s.helm/g' >$1
+ fi
+}
+
+_microk8s_cache_completion 'helm' _microk8s_helm_completion
+
+alias mh='microk8s.helm'
+
+# ---------------------------------------------------------- #
+# Other Aliases #
+# ---------------------------------------------------------- #
+alias mco='microk8s.config'
+alias mct='microk8s.ctr'
+alias mis='microk8s.istio'
+alias mst='microk8s.start'
+alias msts='microk8s.status'
+alias msp='microk8s.stop'
diff --git a/zsh/.oh-my-zsh/plugins/minikube/README.md b/zsh/.oh-my-zsh/plugins/minikube/README.md
new file mode 100644
index 0000000..eb2dd9b
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/minikube/README.md
@@ -0,0 +1,9 @@
+# minikube
+
+This plugin provides completion for [minikube](https://github.com/kubernetes/minikube).
+
+To use it, add `minikube` to the plugins array in your zshrc file.
+
+```
+plugins=(... minikube)
+```
diff --git a/zsh/.oh-my-zsh/plugins/minikube/minikube.plugin.zsh b/zsh/.oh-my-zsh/plugins/minikube/minikube.plugin.zsh
new file mode 100644
index 0000000..d8ebe79
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/minikube/minikube.plugin.zsh
@@ -0,0 +1,6 @@
+# Autocompletion for Minikube.
+#
+
+if [ $commands[minikube] ]; then
+ source <(minikube completion zsh)
+fi
diff --git a/zsh/.oh-my-zsh/plugins/mix-fast/README.md b/zsh/.oh-my-zsh/plugins/mix-fast/README.md
new file mode 100644
index 0000000..644f124
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/mix-fast/README.md
@@ -0,0 +1,28 @@
+# mix-fast
+
+Fast mix autocompletion plugin.
+
+This script caches the output for later usage and significantly speeds it up.
+It generates a .mix_tasks cache file for current project. Currently if you want
+to update cache you should remove .mix_tasks file
+
+Inspired by and based on rake-fast zsh plugin.
+
+This is entirely based on [this pull request by Ullrich Schäfer](https://github.com/robb/.dotfiles/pull/10/), which is inspired by [this Ruby on Rails trick from 2006](https://weblog.rubyonrails.org/2006/3/9/fast-rake-task-completion-for-zsh/).
+
+
+## Installation
+
+Just add the plugin to your `.zshrc`:
+
+```bash
+plugins=(foo bar mix-fast)
+```
+
+You might consider adding `.mix_tasks` to your [global .gitignore](https://help.github.com/articles/ignoring-files#global-gitignore)
+
+## Usage
+
+`mix`, then press tab
+
+Currently maintained by [styx](https://github.com/styx/)
diff --git a/zsh/.oh-my-zsh/plugins/mix-fast/mix-fast.plugin.zsh b/zsh/.oh-my-zsh/plugins/mix-fast/mix-fast.plugin.zsh
new file mode 100644
index 0000000..e27e30d
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/mix-fast/mix-fast.plugin.zsh
@@ -0,0 +1,29 @@
+_mix_refresh () {
+ if [ -f .mix_tasks ]; then
+ rm .mix_tasks
+ fi
+ echo "Generating .mix_tasks..." > /dev/stderr
+ _mix_generate
+ cat .mix_tasks
+}
+
+_mix_does_task_list_need_generating () {
+ [ ! -f .mix_tasks ];
+}
+
+_mix_generate () {
+ mix help | grep -v 'iex -S' | tail -n +2 | cut -d " " -f 2 > .mix_tasks
+}
+
+_mix () {
+ if [ -f mix.exs ]; then
+ if _mix_does_task_list_need_generating; then
+ echo "\nGenerating .mix_tasks..." > /dev/stderr
+ _mix_generate
+ fi
+ compadd `cat .mix_tasks`
+ fi
+}
+
+compdef _mix mix
+alias mix_refresh='_mix_refresh'
diff --git a/zsh/.oh-my-zsh/plugins/mix/README.md b/zsh/.oh-my-zsh/plugins/mix/README.md
new file mode 100644
index 0000000..878f370
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/mix/README.md
@@ -0,0 +1,19 @@
+# Mix plugin
+
+This plugin adds completions for the [Elixir's Mix build tool](https://hexdocs.pm/mix/Mix.html).
+
+To use it, add `mix` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... mix)
+```
+## Supported Task Types
+
+| Task Type | Documentation |
+|-------------------------|----------------------------------------------------------|
+| Elixir | [Elixir Lang](https://elixir-lang.org/) |
+| Phoenix v1.2.1 and below| [Phoenix](https://hexdocs.pm/phoenix/1.2.1/Phoenix.html) |
+| Phoenix v1.3.0 and above| [Phoenix](https://hexdocs.pm/phoenix/Phoenix.html) |
+| Ecto | [Ecto](https://hexdocs.pm/ecto/Ecto.html) |
+| Hex | [Hex](https://hex.pm/) |
+| Nerves | [Nerves](https://nerves-project.org/) |
diff --git a/zsh/.oh-my-zsh/plugins/mix/_mix b/zsh/.oh-my-zsh/plugins/mix/_mix
new file mode 100644
index 0000000..61fa1cf
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/mix/_mix
@@ -0,0 +1,128 @@
+#compdef mix
+#autoload
+
+# Elixir mix zsh completion
+
+local -a _1st_arguments
+_1st_arguments=(
+ 'app.start:Start all registered apps'
+ 'archive:List all archives'
+ 'archive.build:Archive this project into a .ez file'
+ 'archive.install:Install an archive locally'
+ 'archive.uninstall:Uninstall archives'
+ 'clean:Delete generated application files'
+ 'cmd:Executes the given command'
+ 'compile:Compile source files'
+ 'compile.protocols:Consolidates all protocols in all paths'
+ 'deps:List dependencies and their status'
+ "deps.clean:Remove the given dependencies' files"
+ 'deps.compile:Compile dependencies'
+ 'deps.get:Get all out of date dependencies'
+ 'deps.unlock:Unlock the given dependencies'
+ 'deps.update:Update the given dependencies'
+ 'do:Executes the tasks separated by comma'
+ 'ecto.create:Create Ecto database'
+ 'ecto.drop:Drop the storage for the given repository'
+ 'ecto.dump:Dumps the current environment’s database structure'
+ 'ecto.gen.migration:Generates a migration'
+ 'ecto.gen.repo:Generates a new repository'
+ 'ecto.load:Loads the current environment’s database structure'
+ 'ecto.migrate:Runs Ecto migration'
+ 'ecto.migrations:Displays the up / down migration status'
+ 'ecto.rollback:Reverts applied migrations'
+ 'escript.build:Builds an escript for the project'
+ 'firmware:Nerves - Build a firmware image for the selected target platform'
+ 'firmware.burn:Nerves - Writes the generated firmware image to an attached SDCard or file'
+ 'firmware.image:Nerves - Create a firmware image file that can be copied byte-for-byte'
+ 'help:Print help information for tasks'
+ 'hex:Print hex help information'
+ 'hex.config:Read or update hex config'
+ 'hex.docs:Publish docs for package'
+ 'hex.info:Print hex information'
+ 'hex.key:Hex API key tasks'
+ 'hex.outdated:Shows outdated hex deps for the current project'
+ 'hex.owner:Hex package ownership tasks'
+ 'hex.publish:Publish a new package version'
+ 'hex.search:Search for package names'
+ 'hex.user:Hex user tasks'
+ 'loadconfig:Loads and persists the given configuration'
+ 'local:List local tasks'
+ 'local.hex:Install hex locally'
+ 'local.phoenix:Updates Phoenix locally'
+ 'local.phx:Updates the Phoenix project generator locally'
+ 'local.rebar:Install rebar locally'
+ 'nerves.artifact:Create an artifact for a specified Nerves package'
+ 'nerves.artifact.get:Nerves get artifacts'
+ 'nerves.info:Prints Nerves system information'
+ 'nerves.new:Create a new Nerves application'
+ 'nerves.release.init:Prepare a new Nerves project for use with releases'
+ 'new:Create a new Elixir project'
+ 'phoenix.digest:Digests and compress static files'
+ 'phoenix.gen.channel:Generates a Phoenix channel'
+ 'phoenix.gen.html:Generates controller, model and views for an HTML based resource'
+ 'phoenix.gen.json:Generates a controller and model for a JSON based resource'
+ 'phoenix.gen.model:Generates an Ecto model'
+ 'phoenix.gen.secret:Generates a secret'
+ 'phoenix.new:Creates a new Phoenix v1.2.1 application'
+ 'phoenix.routes:Prints all routes'
+ 'phoenix.server:Starts applications and their servers'
+ 'phx.digest:Digests and compresses static files'
+ 'phx.digest.clean:Removes old versions of static assets.'
+ 'phx.gen.channel:Generates a Phoenix channel'
+ 'phx.gen.context:Generates a context with functions around an Ecto schema'
+ 'phx.gen.embedded:Generates an embedded Ecto schema file'
+ 'phx.gen.html:Generates controller, views, and context for an HTML resource'
+ 'phx.gen.json:Generates controller, views, and context for a JSON resource'
+ 'phx.gen.presence:Generates a Presence tracker'
+ 'phx.gen.schema:Generates an Ecto schema and migration file'
+ 'phx.gen.secret:Generates a secret'
+ 'phx.new:Creates a new Phoenix v1.3.0 application'
+ 'phx.new.ecto:Creates a new Ecto project within an umbrella project'
+ 'phx.new.web:Creates a new Phoenix web project within an umbrella project'
+ 'phx.routes:Prints all routes'
+ 'phx.server:Starts applications and their servers'
+ 'run:Run the given file or expression'
+ "test:Run a project's tests"
+ '--help:Describe available tasks'
+ '--version:Prints the Elixir version information'
+)
+
+__task_list ()
+{
+ local expl
+ declare -a tasks
+
+ tasks=(app.start archive archive.build archive.install archive.uninstall clean cmd compile compile.protocols deps deps.clean deps.compile deps.get deps.unlock deps.update do escript.build help hex hex.config hex.docs hex.info hex.key hex.outdated hex.owner hex.publish hex.search hex.user loadconfig local local.hex local.rebar new phoenix.digest phoenix.gen.channel phoenix.gen.html phoenix.gen.json phoenix.gen.model phoenix.gen.secret phoenix.new phoenix.routes phoenix.server phx.digest phx.digest.clean phx.gen.channel phx.gen.context phx.gen.embedded phx.gen.html phx.gen.json phx.gen.presence phx.gen.schema phx.gen.secret phx.new phx.new.ecto phx.new.web phx.routes phx.server run test)
+
+ _wanted tasks expl 'help' compadd $tasks
+}
+
+local expl
+
+local curcontext="$curcontext" state line
+typeset -A opt_args
+
+_arguments -C \
+ ':command:->command' \
+ '*::options:->options'
+
+case $state in
+ (command)
+ _describe -t commands "mix subcommand" _1st_arguments
+ return
+ ;;
+
+ (options)
+ case $line[1] in
+ (help)
+ _arguments ':feature:__task_list'
+ ;;
+ (test)
+ _files
+ ;;
+ (run)
+ _files
+ ;;
+ esac
+ ;;
+esac
diff --git a/zsh/.oh-my-zsh/plugins/mosh/README.md b/zsh/.oh-my-zsh/plugins/mosh/README.md
new file mode 100644
index 0000000..4bbecf4
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/mosh/README.md
@@ -0,0 +1,9 @@
+# Mosh Plugin
+
+This plugin allows SSH tab completion for [mosh](https://mosh.org/) hostnames.
+
+To use it, add `mosh` to the plugins array in your zshrc file:
+
+```
+plugins=(... mosh)
+```
diff --git a/zsh/.oh-my-zsh/plugins/mosh/mosh.plugin.zsh b/zsh/.oh-my-zsh/plugins/mosh/mosh.plugin.zsh
new file mode 100644
index 0000000..ea36b7e
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/mosh/mosh.plugin.zsh
@@ -0,0 +1,2 @@
+# Allow SSH tab completion for mosh hostnames
+compdef mosh=ssh
diff --git a/zsh/.oh-my-zsh/plugins/mvn/README.md b/zsh/.oh-my-zsh/plugins/mvn/README.md
new file mode 100644
index 0000000..3bbba5b
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/mvn/README.md
@@ -0,0 +1,58 @@
+# mvn plugin
+
+The mvn plugin provides many [useful aliases](#aliases) as well as completion for
+the [Apache Maven](https://maven.apache.org/) command (`mvn`).
+
+Enable it by adding `mvn` to the plugins array in your zshrc file:
+```zsh
+plugins=(... mvn)
+```
+
+## Aliases
+
+The plugin aliases mvn to a function that calls `mvnw` (the [Maven Wrapper](https://github.com/takari/maven-wrapper))
+if it's found, or the mvn command otherwise.
+
+| Alias | Command |
+|:---------------------|:------------------------------------------------|
+| `mvn!` | `mvn -f /pom.xml` |
+| `mvnag` | `mvn archetype:generate` |
+| `mvnboot` | `mvn spring-boot:run` |
+| `mvnc` | `mvn clean` |
+| `mvncd` | `mvn clean deploy` |
+| `mvnce` | `mvn clean eclipse:clean eclipse:eclipse` |
+| `mvnci` | `mvn clean install` |
+| `mvncie` | `mvn clean install eclipse:eclipse` |
+| `mvncini` | `mvn clean initialize` |
+| `mvncist` | `mvn clean install -DskipTests` |
+| `mvncisto` | `mvn clean install -DskipTests --offline` |
+| `mvncom` | `mvn compile` |
+| `mvncp` | `mvn clean package` |
+| `mvnct` | `mvn clean test` |
+| `mvncv` | `mvn clean verify` |
+| `mvncvst` | `mvn clean verify -DskipTests` |
+| `mvnd` | `mvn deploy` |
+| `mvndocs` | `mvn dependency:resolve -Dclassifier=javadoc` |
+| `mvndt` | `mvn dependency:tree` |
+| `mvne` | `mvn eclipse:eclipse` |
+| `mvnjetty` | `mvn jetty:run` |
+| `mvnp` | `mvn package` |
+| `mvns` | `mvn site` |
+| `mvnsrc` | `mvn dependency:sources` |
+| `mvnt` | `mvn test` |
+| `mvntc` | `mvn tomcat:run` |
+| `mvntc7` | `mvn tomcat7:run` |
+| `mvn-updates` | `mvn versions:display-dependency-updates` |
+
+## mvn-color
+
+It's a function that wraps the mvn command to colorize it's output. You can use it in place
+of the `mvn` command. For example: instead of `mvn test`, use `mvn-color test`.
+
+Since [Maven 3.5.0](https://maven.apache.org/docs/3.5.0/release-notes.html) the mvn command
+has colored output, so this function will be soon removed from the plugin.
+
+### Known bugs
+
+It has a bug where it will swallow mvn prompts for user input, _e.g._ when using
+`archetype:generate`. See [#5052](https://github.com/ohmyzsh/ohmyzsh/issues/5052).
diff --git a/zsh/.oh-my-zsh/plugins/mvn/mvn.plugin.zsh b/zsh/.oh-my-zsh/plugins/mvn/mvn.plugin.zsh
new file mode 100644
index 0000000..0866e55
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/mvn/mvn.plugin.zsh
@@ -0,0 +1,327 @@
+# Calls ./mvnw if found, otherwise execute the original mvn
+mvn-or-mvnw() {
+ if [ -x ./mvnw ]; then
+ echo "executing mvnw instead of mvn"
+ ./mvnw "$@"
+ else
+ command mvn "$@"
+ fi
+}
+
+# Wrapper function for Maven's mvn command. Based on https://gist.github.com/1027800
+mvn-color() {
+ local BOLD=$(echoti bold)
+ local TEXT_RED=$(echoti setaf 1)
+ local TEXT_GREEN=$(echoti setaf 2)
+ local TEXT_YELLOW=$(echoti setaf 3)
+ local TEXT_BLUE=$(echoti setaf 4)
+ local TEXT_WHITE=$(echoti setaf 7)
+ local RESET_FORMATTING=$(echoti sgr0)
+ (
+ # Filter mvn output using sed. Before filtering set the locale to C, so invalid characters won't break some sed implementations
+ unset LANG
+ LC_CTYPE=C mvn "$@" | sed \
+ -e "s/\(\[INFO\]\)\(.*\)/${TEXT_BLUE}${BOLD}\1${RESET_FORMATTING}\2/g" \
+ -e "s/\(\[DEBUG\]\)\(.*\)/${TEXT_WHITE}${BOLD}\1${RESET_FORMATTING}\2/g" \
+ -e "s/\(\[INFO\]\ BUILD SUCCESSFUL\)/${BOLD}${TEXT_GREEN}\1${RESET_FORMATTING}/g" \
+ -e "s/\(\[WARNING\]\)\(.*\)/${BOLD}${TEXT_YELLOW}\1${RESET_FORMATTING}\2/g" \
+ -e "s/\(\[ERROR\]\)\(.*\)/${BOLD}${TEXT_RED}\1${RESET_FORMATTING}\2/g" \
+ -e "s/Tests run: \([^,]*\), Failures: \([^,]*\), Errors: \([^,]*\), Skipped: \([^,]*\)/${BOLD}${TEXT_GREEN}Tests run: \1${RESET_FORMATTING}, Failures: ${BOLD}${TEXT_RED}\2${RESET_FORMATTING}, Errors: ${BOLD}${TEXT_RED}\3${RESET_FORMATTING}, Skipped: ${BOLD}${TEXT_YELLOW}\4${RESET_FORMATTING}/g"
+
+ # Make sure formatting is reset
+ echo -ne "${RESET_FORMATTING}"
+ )
+}
+
+# either use orignal mvn or the mvn wrapper
+alias mvn="mvn-or-mvnw"
+
+# Run mvn against the pom found in a project's root directory (assumes a git repo)
+alias 'mvn!'='mvn -f $(git rev-parse --show-toplevel 2>/dev/null || echo ".")/pom.xml'
+
+# aliases
+alias mvnag='mvn archetype:generate'
+alias mvnboot='mvn spring-boot:run'
+alias mvnc='mvn clean'
+alias mvncd='mvn clean deploy'
+alias mvnce='mvn clean eclipse:clean eclipse:eclipse'
+alias mvnci='mvn clean install'
+alias mvncie='mvn clean install eclipse:eclipse'
+alias mvncini='mvn clean initialize'
+alias mvncist='mvn clean install -DskipTests'
+alias mvncisto='mvn clean install -DskipTests --offline'
+alias mvncom='mvn compile'
+alias mvncp='mvn clean package'
+alias mvnct='mvn clean test'
+alias mvncv='mvn clean verify'
+alias mvncvst='mvn clean verify -DskipTests'
+alias mvnd='mvn deploy'
+alias mvndocs='mvn dependency:resolve -Dclassifier=javadoc'
+alias mvndt='mvn dependency:tree'
+alias mvne='mvn eclipse:eclipse'
+alias mvnjetty='mvn jetty:run'
+alias mvnp='mvn package'
+alias mvns='mvn site'
+alias mvnsrc='mvn dependency:sources'
+alias mvnt='mvn test'
+alias mvntc='mvn tomcat:run'
+alias mvntc7='mvn tomcat7:run'
+alias mvn-updates='mvn versions:display-dependency-updates'
+
+
+function listMavenCompletions {
+ local file new_file
+ local -a profiles POM_FILES
+
+ # Root POM
+ POM_FILES=(~/.m2/settings.xml)
+
+ # POM in the current directory
+ if [[ -f pom.xml ]]; then
+ local file=pom.xml
+ POM_FILES+=("${file:A}")
+ fi
+
+ # Look for POM files in parent directories
+ while [[ -n "$file" ]] && grep -q "" "$file"; do
+ # look for a new relativePath for parent pom.xml
+ new_file=$(grep -e ".* " "$file" | sed -e 's/.*\(.*\)<\/relativePath>.*/\1/')
+
+ # if is present but not defined, assume ../pom.xml
+ if [[ -z "$new_file" ]]; then
+ new_file="../pom.xml"
+ fi
+
+ # if file doesn't exist break
+ file="${file:h}/${new_file}"
+ if ! [[ -e "$file" ]]; then
+ break
+ fi
+
+ POM_FILES+=("${file:A}")
+ done
+
+ # Get profiles from found files
+ for file in $POM_FILES; do
+ [[ -e $file ]] || continue
+ profiles+=($(sed 's///' "$file" | sed '//d' | grep -e "" -A 1 | grep -e ".* " | sed 's?.*\(.*\)<\/id>.*?-P\1?'))
+ done
+
+ reply=(
+ # common lifecycle
+ clean initialize process-resources compile process-test-resources test-compile test package verify install deploy site
+
+ # integration testing
+ pre-integration-test integration-test
+
+ # common plugins
+ deploy failsafe install site surefire checkstyle javadoc jxr pmd ant antrun archetype assembly dependency enforcer gpg help release repository source eclipse idea jetty cargo jboss tomcat tomcat6 tomcat7 exec versions war ear ejb android scm buildnumber nexus repository sonar license hibernate3 liquibase flyway gwt
+
+ # deploy
+ deploy:deploy-file
+ # failsafe
+ failsafe:integration-test failsafe:verify
+ # install
+ install:install-file install:help
+ # site
+ site:site site:deploy site:run site:stage site:stage-deploy site:attach-descriptor site:jar site:effective-site
+ # surefire
+ surefire:test
+
+ # checkstyle
+ checkstyle:checkstyle checkstyle:check checkstyle:checkstyle-aggregate
+ # javadoc
+ javadoc:javadoc javadoc:test-javadoc javadoc:javadoc-no-fork javadoc:test-javadoc-no-fork javadoc:aggregate javadoc:test-aggregate javadoc:jar javadoc:test-jar javadoc:aggregate-jar javadoc:test-aggregate-jar javadoc:fix javadoc:test-fix javadoc:resource-bundle javadoc:test-resource-bundle
+ # jxr
+ jxr:jxr jxr:aggregate jxr:test-jxr jxr:test-aggregate
+ # pmd
+ pmd:pmd pmd:cpd pmd:check pmd:cpd-check
+
+ # ant
+ ant:ant ant:clean
+ # antrun
+ antrun:run
+ # archetype
+ archetype:generate archetype:create-from-project archetype:crawl
+ # assembly
+ assembly:single assembly:assembly
+ # dependency
+ dependency:analyze dependency:analyze-dep-mgt dependency:analyze-only dependency:analyze-report dependency:analyze-duplicate dependency:build-classpath dependency:copy dependency:copy-dependencies dependency:display-ancestors dependency:get dependency:go-offline dependency:list dependency:list-repositories dependency:properties dependency:purge-local-repository dependency:resolve dependency:resolve-plugins dependency:sources dependency:tree dependency:unpack dependency:unpack-dependencies
+ # enforcer
+ enforcer:enforce enforcer:display-info
+ # gpg
+ gpg:sign gpg:sign-and-deploy-file
+ # help
+ help:active-profiles help:all-profiles help:describe help:effective-pom help:effective-settings help:evaluate help:expressions help:system
+ # release
+ release:clean release:prepare release:prepare-with-pom release:rollback release:perform release:stage release:branch release:update-versions
+ # jgitflow
+ jgitflow:feature-start jgitflow:feature-finish jgitflow:release-start jgitflow:release-finish jgitflow:hotfix-start jgitflow:hotfix-finish jgitflow:build-number
+ # repository
+ repository:bundle-create repository:bundle-pack
+ # source
+ source:aggregate source:jar source:jar-no-fork source:test-jar source:test-jar-no-fork
+
+ # eclipse
+ eclipse:clean eclipse:eclipse
+ # idea
+ idea:clean idea:idea
+
+ # jetty
+ jetty:run jetty:run-exploded
+ # cargo
+ cargo:start cargo:run cargo:stop cargo:deploy cargo:undeploy cargo:help
+ # jboss
+ jboss:start jboss:stop jboss:deploy jboss:undeploy jboss:redeploy
+ # tomcat
+ tomcat:start tomcat:stop tomcat:deploy tomcat:undeploy tomcat:redeploy
+ # tomcat6
+ tomcat6:run tomcat6:run-war tomcat6:run-war-only tomcat6:stop tomcat6:deploy tomcat6:undeploy
+ # tomcat7
+ tomcat7:run tomcat7:run-war tomcat7:run-war-only tomcat7:deploy
+ # tomee
+ tomee:run tomee:run-war tomee:run-war-only tomee:stop tomee:deploy tomee:undeploy
+ # spring-boot
+ spring-boot:run spring-boot:repackage
+ # exec
+ exec:exec exec:java
+ # versions
+ versions:display-dependency-updates versions:display-plugin-updates versions:display-property-updates versions:update-parent versions:update-properties versions:update-child-modules versions:lock-snapshots versions:unlock-snapshots versions:resolve-ranges versions:set versions:use-releases versions:use-next-releases versions:use-latest-releases versions:use-next-snapshots versions:use-latest-snapshots versions:use-next-versions versions:use-latest-versions versions:commit versions:revert
+ # scm
+ scm:add scm:bootstrap scm:branch scm:changelog scm:check-local-modification scm:checkin scm:checkout scm:diff scm:edit scm:export scm:list scm:remove scm:status scm:tag scm:unedit scm:update scm:update-subprojects scm:validate
+ # buildnumber
+ buildnumber:create buildnumber:create-timestamp buildnumber:help buildnumber:hgchangeset
+
+ # war
+ war:war war:exploded war:inplace war:manifest
+ # ear
+ ear:ear ear:generate-application-xml
+ # ejb
+ ejb:ejb
+ # android
+ android:apk android:apklib android:deploy android:deploy-dependencies android:dex android:emulator-start android:emulator-stop android:emulator-stop-all android:generate-sources android:help android:instrument android:manifest-update android:pull android:push android:redeploy android:run android:undeploy android:unpack android:version-update android:zipalign android:devices
+ # nexus
+ nexus:staging-list nexus:staging-close nexus:staging-drop nexus:staging-release nexus:staging-build-promotion nexus:staging-profiles-list nexus:settings-download
+ # repository
+ repository:bundle-create repository:bundle-pack repository:help
+
+ # sonar
+ sonar:sonar
+ # license
+ license:format license:check
+ # hibernate3
+ hibernate3:hbm2ddl hibernate3:help
+ # liquibase
+ liquibase:changelogSync liquibase:changelogSyncSQL liquibase:clearCheckSums liquibase:dbDoc liquibase:diff liquibase:dropAll liquibase:help liquibase:migrate liquibase:listLocks liquibase:migrateSQL liquibase:releaseLocks liquibase:rollback liquibase:rollbackSQL liquibase:status liquibase:tag liquibase:update liquibase:updateSQL liquibase:updateTestingRollback
+ # flyway
+ flyway:clean flyway:history flyway:init flyway:migrate flyway:status flyway:validate
+ # gwt
+ gwt:browser gwt:clean gwt:compile gwt:compile-report gwt:css gwt:debug gwt:eclipse gwt:eclipseTest gwt:generateAsync gwt:help gwt:i18n gwt:mergewebxml gwt:resources gwt:run gwt:sdkInstall gwt:source-jar gwt:soyc gwt:test
+ # asciidoctor
+ asciidoctor:process-asciidoc asciidoctor:auto-refresh asciidoctor:http asciidoctor:zip
+ # compiler
+ compiler:compile compiler:testCompile
+ # resources
+ resources:resources resources:testResources resources:copy-resources
+ # verifier
+ verifier:verify
+ # jar
+ jar:jar jar:test-jar
+ # rar
+ rar:rar
+ # acr
+ acr:acr
+ # shade
+ shade:shade
+ # changelog
+ changelog:changelog changelog:dev-activity changelog:file-activity
+ # changes
+ changes:announcement-mail changes:announcement-generate changes:changes-check changes:changes-validate changes:changes-report changes:jira-report changes:trac-report changes:github-report
+ # doap
+ doap:generate
+ # docck
+ docck:check
+ # jdeps
+ jdeps:jdkinternals jdeps:test-jdkinternals
+ # linkcheck
+ linkcheck:linkcheck
+ # project-info-reports
+ project-info-reports:cim project-info-reports:dependencies project-info-reports:dependency-convergence project-info-reports:dependency-info project-info-reports:dependency-management project-info-reports:distribution-management project-info-reports:help project-info-reports:index project-info-reports:issue-tracking project-info-reports:license project-info-reports:mailing-list project-info-reports:modules project-info-reports:plugin-management project-info-reports:plugins project-info-reports:project-team project-info-reports:scm project-info-reports:summary
+ # surefire-report
+ surefire-report:failsafe-report-only surefire-report:report surefire-report:report-only
+ # invoker
+ invoker:install invoker:integration-test invoker:verify invoker:run
+ # jarsigner
+ jarsigner:sign jarsigner:verify
+ # patch
+ patch:apply
+ # pdf
+ pdf:pdf
+ # plugin
+ plugin:descriptor plugin:report plugin:updateRegistry plugin:addPluginArtifactMetadata plugin:helpmojo
+ # remote-resources
+ remote-resources:bundle remote-resources:process
+ # scm-publish
+ scm-publish:help scm-publish:publish-scm scm-publish:scmpublish
+ # stage
+ stage:copy
+ # toolchain
+ toolchain:toolchain
+ #liberty
+ liberty:clean-server liberty:compile-jsp liberty:configure-arquillian liberty:create-server liberty:debug liberty:debug-server liberty:deploy liberty:dev liberty:display-url liberty:dump-server liberty:install-apps liberty:install-feature liberty:install-server liberty:java-dump-server liberty:package-server liberty:run liberty:run-server liberty:server-status liberty:start liberty:start-server liberty:status liberty:stop liberty:stop-server liberty:test-start-server liberty:test-stop-server liberty:undeploy liberty:uninstall-feature
+
+ # options
+ "-Dmaven.test.skip=true" -DskipTests -DskipITs -Dmaven.surefire.debug -DenableCiProfile "-Dpmd.skip=true" "-Dcheckstyle.skip=true" "-Dtycho.mode=maven" "-Dmaven.test.failure.ignore=true" "-DgroupId=" "-DartifactId=" "-Dversion=" "-Dpackaging=jar" "-Dfile="
+
+ # arguments
+ -am --also-make
+ -amd --also-make-dependents-am
+ -B --batch-mode
+ -b --builder
+ -C --strict-checksums
+ -c --lax-checksums
+ -cpu --check-plugin-updates
+ -D --define
+ -e --errors
+ -emp --encrypt-master-password
+ -ep --encrypt-password
+ -f --file
+ -fae --fail-at-end
+ -ff --fail-fast
+ -fn --fail-never
+ -gs --global-settings
+ -gt --global-toolchains
+ -h --help
+ -l --log-file
+ -llr --legacy-local-repository
+ -N --non-recursive
+ -npr --no-plugin-registry
+ -npu --no-plugin-updates
+ -nsu --no-snapshot-updates
+ -o --offline
+ -P --activate-profiles
+ -pl --projects
+ -q --quiet
+ -rf --resume-from
+ -s --settings
+ -t --toolchains
+ -T --threads
+ -U --update-snapshots
+ -up --update-plugins
+ -v --version
+ -V --show-version
+ -X --debug
+
+ cli:execute cli:execute-phase
+ archetype:generate generate-sources
+ cobertura:cobertura
+ -Dtest=$(if [ -d ./src/test/java ] ; then find ./src/test/java -type f -name '*.java' | grep -v svn | sed 's?.*/\([^/]*\)\..*?-Dtest=\1?' ; fi)
+ -Dit.test=$(if [ -d ./src/test/java ] ; then find ./src/test/java -type f -name '*.java' | grep -v svn | sed 's?.*/\([^/]*\)\..*?-Dit.test=\1?' ; fi)
+
+ $profiles
+ )
+}
+
+compctl -K listMavenCompletions mvn mvnw
+compctl -K listMavenCompletions mvn-color
+compctl -K listMavenCompletions mvn-or-mvnw
diff --git a/zsh/.oh-my-zsh/plugins/mysql-macports/README.md b/zsh/.oh-my-zsh/plugins/mysql-macports/README.md
new file mode 100644
index 0000000..a4224d9
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/mysql-macports/README.md
@@ -0,0 +1,20 @@
+# MySQL-Macports plugin
+
+This plugin adds aliases for some of the commonly used [MySQL](https://www.mysql.com/) commands when installed using [MacPorts](https://www.macports.org/) on macOS.
+
+To use it, add `mysql-macports` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... mysql-macports)
+```
+
+For instructions on how to install MySQL using MacPorts, read the [MacPorts wiki](https://trac.macports.org/wiki/howto/MySQL/).
+
+## Aliases
+
+| Alias | Command | Description |
+| ------------ | --------------------------------------------------------- | ------------------------------------------ |
+| mysqlstart | `sudo /opt/local/share/mysql5/mysql/mysql.server start` | Start the MySQL server. |
+| mysqlstop | `sudo /opt/local/share/mysql5/mysql/mysql.server stop` | Stop the MySQL server. |
+| mysqlrestart | `sudo /opt/local/share/mysql5/mysql/mysql.server restart` | Restart the MySQL server. |
+| mysqlstatus | `mysqladmin5 -u root -p ping` | Check whether the MySQL server is running. |
diff --git a/zsh/.oh-my-zsh/plugins/mysql-macports/mysql-macports.plugin.zsh b/zsh/.oh-my-zsh/plugins/mysql-macports/mysql-macports.plugin.zsh
new file mode 100644
index 0000000..c39563f
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/mysql-macports/mysql-macports.plugin.zsh
@@ -0,0 +1,8 @@
+# commands to control local mysql-server installation
+# paths are for osx installation via macports
+
+alias mysqlstart='sudo /opt/local/share/mysql5/mysql/mysql.server start'
+alias mysqlstop='sudo /opt/local/share/mysql5/mysql/mysql.server stop'
+alias mysqlrestart='sudo /opt/local/share/mysql5/mysql/mysql.server restart'
+
+alias mysqlstatus='mysqladmin5 -u root -p ping'
diff --git a/zsh/.oh-my-zsh/plugins/n98-magerun/README.md b/zsh/.oh-my-zsh/plugins/n98-magerun/README.md
new file mode 100644
index 0000000..b0abe47
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/n98-magerun/README.md
@@ -0,0 +1,21 @@
+# n98-magerun plugin
+
+The swiss army knife for Magento developers, sysadmins and devops. The tool provides a huge set of well tested command line commands which save hours of work time.
+
+The [n98-magerun plugin](https://github.com/netz98/n98-magerun) provides many
+[useful aliases](#aliases) as well as completion for the `n98-magerun` command.
+
+Enable it by adding `n98-magerun` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... n98-magerun)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+| --------- | -------------------------------------------------- | --------------------------------------------------------------------------------- |
+| n98 | `n98-magerun.phar` | The N98-Magerun phar-file (Version 1) |
+| n98-2 | `n98-magerun2.phar` | The N98-Magerun phar-file (Version 2) |
+| mage-get | `wget https://files.magerun.net/n98-magerun.phar` | Download the latest stable N98-Magerun phar-file from the file-server (Version 1) |
+| mage2-get | `wget https://files.magerun.net/n98-magerun2.phar` | Download the latest stable N98-Magerun phar-file from the file-server (Version 2) |
diff --git a/zsh/.oh-my-zsh/plugins/n98-magerun/n98-magerun.plugin.zsh b/zsh/.oh-my-zsh/plugins/n98-magerun/n98-magerun.plugin.zsh
new file mode 100644
index 0000000..d79aee7
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/n98-magerun/n98-magerun.plugin.zsh
@@ -0,0 +1,42 @@
+# ------------------------------------------------------------------------------
+# FILE: n98-magerun.plugin.zsh
+# DESCRIPTION: oh-my-zsh n98-magerun plugin file. Adapted from composer plugin
+# AUTHOR: Andrew Dwyer (andrewrdwyer at gmail dot com)
+# AUTHOR: Jisse Reitsma (jisse at yireo dot com)
+# VERSION: 1.1.0
+# ------------------------------------------------------------------------------
+
+# n98-magerun basic command completion
+_n98_magerun_get_command_list () {
+ $_comp_command1 --no-ansi | sed "1,/Available commands/d" | awk '/^ +[a-z\-:]+/ { print $1 }'
+}
+
+
+_n98_magerun () {
+ _arguments '1: :->command' '*:optional arg:_files'
+
+ case $state in
+ command)
+ compadd $(_n98_magerun_get_command_list)
+ ;;
+ *)
+ esac
+}
+
+compdef _n98_magerun n98-magerun.phar
+compdef _n98_magerun n98-magerun
+compdef _n98_magerun n98-magerun2.phar
+compdef _n98_magerun n98-magerun2
+
+# Aliases
+alias n98='n98-magerun.phar'
+alias mage='n98-magerun.phar'
+alias magerun='n98-magerun.phar'
+
+alias n98-2='n98-magerun2.phar'
+alias mage2='n98-magerun2.phar'
+alias magerun2='n98-magerun2.phar'
+
+# Install n98-magerun into the current directory
+alias mage-get='wget https://files.magerun.net/n98-magerun.phar'
+alias mage2-get='wget https://files.magerun.net/n98-magerun2.phar'
diff --git a/zsh/.oh-my-zsh/plugins/nanoc/README.md b/zsh/.oh-my-zsh/plugins/nanoc/README.md
new file mode 100644
index 0000000..d5d437d
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/nanoc/README.md
@@ -0,0 +1,20 @@
+# Nanoc plugin
+
+This plugin adds some aliases and autocompletion for common [Nanoc](https://nanoc.ws) commands.
+
+To use it, add `nanoc` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... nanoc)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+|-------|-----------------------|-----------------------------------------------------------------------------------|
+| n | `nanoc` | Main Nanoc command |
+| nco | `nanoc compile` | Compile all items of the current site |
+| ncs | `nanoc create-site` | Create a new site at the given path. The site will use the filesystem data source |
+| nd | `nanoc deploy` | Deploy the compiled site to the destination (specified with `--target`) |
+| np | `nanoc prune` | Remove files not managed by Nanoc from the output directory |
+| nv | `nanoc view` | Start the static web server (on port 3000 and all IP addresses, unless specified) |
diff --git a/zsh/.oh-my-zsh/plugins/nanoc/_nanoc b/zsh/.oh-my-zsh/plugins/nanoc/_nanoc
new file mode 100644
index 0000000..a6a4792
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/nanoc/_nanoc
@@ -0,0 +1,92 @@
+#compdef nanoc
+#autoload
+
+# requires the 'nanoc' gem to be installed
+
+local -a _1st_arguments
+_1st_arguments=(
+ 'check:run issue checks'
+ 'compile:compile items of this site'
+ 'create-site:create a site'
+ 'deploy:deploy the compiled site'
+ 'help:show help'
+ 'prune:remove files not managed by nanoc from the output directory'
+ 'shell:open a shell on the Nanoc environment'
+ 'show-data:show data in this site'
+ 'show-plugins:show all available plugins'
+ 'show-rules:describe the rules for each item'
+ 'view:start the web server that serves static files'
+)
+
+local expl
+local -a pkgs installed_pkgs
+
+_arguments \
+ '(--color)--color[enable color]' \
+ '(--debug)--debug[enable debugging]' \
+ '(--env)--env[set environment]' \
+ '(--help)--help[show the help message and quit]' \
+ '(--no-color)--no-color[disable color]' \
+ '(--verbose)--verbose[make output more detailed]' \
+ '(--version)--version[show version information and quit]' \
+ '(--warn)--warn[enable warnings]' \
+ '*:: :->subcmds' && return 0
+
+case "$state" in
+ subcmds)
+ case $words[1] in
+ check)
+ _arguments \
+ '(--preprocess)--preprocess[run preprocessor]'
+ ;;
+
+ compile)
+ _arguments \
+ '(--diff)--diff[generate diff]'
+ ;;
+
+ compile)
+ _arguments \
+ '(--diff)--diff[generate diff]'
+ ;;
+
+ create-site)
+ _arguments \
+ '(--force)--force[force creation of new site]'
+ ;;
+
+ deploy)
+ _arguments \
+ '(--target)--target[specify the location to deploy to (default: `default`)]' \
+ '(--no-check)--no-check[do not run the issue checks marked for deployment]' \
+ '(--list)--list[list available locations to deploy to]' \
+ '(--list-deployers)--list-deployers[list available deployers]' \
+ '(--dry-run)--dry-run[show what would be deployed]'
+ ;;
+
+ prune)
+ _arguments \
+ '(--yes)--yes[confirm deletion]' \
+ '(--dry-run)--dry-run[print files to be deleted instead of actually deleting them]'
+ ;;
+
+ shell)
+ _arguments \
+ '(--preprocess)--preprocess[run preprocessor]'
+ ;;
+
+ view)
+ _arguments \
+ '(--handler)--handler[specify the handler to use (webrick/mongrel/...)]' \
+ '(--host)--host[specify the host to listen on (default: 127.0.0.1)]' \
+ '(--port)--port[specify the port to listen on (default: 3000]' \
+ '(--live-reload)--live-reload[reload on changes]'
+ ;;
+ esac
+ ;;
+esac
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "nanoc subcommand" _1st_arguments
+ return
+fi
diff --git a/zsh/.oh-my-zsh/plugins/nanoc/nanoc.plugin.zsh b/zsh/.oh-my-zsh/plugins/nanoc/nanoc.plugin.zsh
new file mode 100644
index 0000000..05272ed
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/nanoc/nanoc.plugin.zsh
@@ -0,0 +1,6 @@
+alias n='nanoc'
+alias nco='nanoc compile'
+alias ncs='nanoc create-site'
+alias nd='nanoc deploy'
+alias np='nanoc prune'
+alias nv='nanoc view'
diff --git a/zsh/.oh-my-zsh/plugins/ng/README.md b/zsh/.oh-my-zsh/plugins/ng/README.md
new file mode 100644
index 0000000..94a450c
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/ng/README.md
@@ -0,0 +1,37 @@
+## NG Plugin
+
+This [ng plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/ng)
+ adds completion support for Angular's CLI (named ng).
+
+Ng is hosted on [ng home](https://github.com/catull/angular-cli)
+
+It is used to generate Angular 2 app "stubs", build those apps, configure them,
+test them, lint them etc.
+
+Ahem, "stubs" is not what Angular engineers refer to the items ng can generate
+for you.
+
+"Stubs" can be any one of:
+- class
+- component
+- directive
+- enum
+- module
+- pipe
+- route
+- service
+
+At the moment, `ng completion` creates a very rough completion for Zsh and
+Bash.
+
+It is missing most of the options and a few arguments.
+In future, this plugin may be shortened to simply being
+
+```zsh
+eval `ng completion`
+```
+
+There is hope this materialises in the 21st century.
+
+### CONTRIBUTOR
+ - Carlo Dapor ([catull](https://github.com/catull))
diff --git a/zsh/.oh-my-zsh/plugins/ng/ng.plugin.zsh b/zsh/.oh-my-zsh/plugins/ng/ng.plugin.zsh
new file mode 100644
index 0000000..44102e2
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/ng/ng.plugin.zsh
@@ -0,0 +1,78 @@
+ng_opts='addon asset-sizes b build completion d destroy doc e2e g generate get github-pages:deploy gh-pages:deploy h help i init install lint make-this-awesome new s serve server set t test update v version -h --help'
+
+_ng_completion () {
+ local words cword opts
+ read -Ac words
+ read -cn cword
+ let cword-=1
+
+ case $words[cword] in
+ addon )
+ opts='-b --blueprint -d -dir --directory --dry-run -sb --skip-bower -sg --skip-git -sn --skip-npm -v --verbose'
+ ;;
+
+ asset-sizes )
+ opts='-o --output-path'
+ ;;
+
+ b | build )
+ opts='--environment --output-path --suppress-sizes --target --watch --watcher -dev -e -prod'
+ ;;
+
+ d | destroy )
+ opts='--dry-run --verbose --pod --classic --dummy --in-repo --in-repo-addon -d -v -p -c -dum -id -ir'
+ ;;
+
+ g | generate )
+ opts='class component directive enum module pipe route service --generate -d --dry-run --verbose -v --pod -p --classic -c --dummy -dum -id --in-repo --in-repo-addon -ir'
+ ;;
+
+ gh-pages:deploy | github-pages:deploy )
+ opts='--environment --gh-token --gh-username --skip-build --user-page --message'
+ ;;
+
+ h | help | -h | --help)
+ opts='--json --verbose -v'
+ ;;
+
+ init )
+ opts='--blueprint --dry-run --link-cli --mobile --name --prefix --skip-bower --skip-npm --source-dir --style --verbose -b -d -lc -n -p -sb -sd -sn -v'
+ ;;
+
+ new )
+ opts='--blueprint --directory --dry-run --link-cli --mobile --prefix --skip-bower --skip-git --skip-npm --source-dir --style --verbose -b -d -dir -lc -p -sb -sd -sg -sn -v'
+ ;;
+
+ s | serve | server )
+ opts='--environment --host --insecure-proxy --inspr --live-reload --live-reload-base-url --live-reload-host --live-reload-live-css --live-reload-port --output-path --port --proxy --ssl --ssl-cert --ssl-key --target --watcher -H -dev -e -lr -lrbu -lrh -lrp -op -out -p -pr -prod -pxy -t -w'
+ ;;
+
+ set )
+ opts='--global -g'
+ ;;
+
+ t | test )
+ opts='--browsers --colors --config-file --environment --filter --host --launch --log-level --module --path --port --query --reporter --server --silent --test-page --test-port --watch -H -c -cf -e -f -m -r -s -tp -w'
+ ;;
+
+ update )
+ opts='--all --dryRun --force --from --migrate-only --next --registry --to -d'
+ ;;
+
+ v | version )
+ opts='--verbose'
+ ;;
+
+ ng )
+ opts=$ng_opts
+ ;;
+
+ * )
+ opts=''
+ ;;
+ esac
+
+ reply=(${=opts})
+}
+
+compctl -K _ng_completion ng
diff --git a/zsh/.oh-my-zsh/plugins/nmap/README.md b/zsh/.oh-my-zsh/plugins/nmap/README.md
new file mode 100644
index 0000000..5cd6462
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/nmap/README.md
@@ -0,0 +1,37 @@
+# Nmap aliases plugin
+
+Adds some useful aliases for nmap similar to the profiles in zenmap.
+
+Nmap options are:
+ * -sS - TCP SYN scan
+ * -v - verbose
+ * -T1 - timing of scan. Options are paranoid (0), sneaky (1), polite (2), normal (3), aggressive (4), and insane (5)
+ * -sF - FIN scan (can sneak through non-stateful firewalls)
+ * -PE - ICMP echo discovery probe
+ * -PP - timestamp discovery probe
+ * -PY - SCTP init ping
+ * -g - use given number as source port
+ * -A - enable OS detection, version detection, script scanning, and traceroute (aggressive)
+ * -O - enable OS detection
+ * -sA - TCP ACK scan
+ * -F - fast scan
+ * --script=vulscan - also access vulnerabilities in target
+
+## Aliases explained
+
+ * nmap_open_ports - Scan for open ports on target
+ * nmap_list_interfaces - List all network interfaces on host where the command runs
+ * nmap_slow - Slow scan that avoids to spam the targets logs
+ * nmap_fin - Scan to see if hosts are up with TCP FIN scan
+ * nmap_full - Aggressive full scan that scans all ports, tries to determine OS and service versions
+ * nmap_check_for_firewall - TCP ACK scan to check for firewall existence
+ * nmap_ping_through_firewall - Host discovery with SYN and ACK probes instead of just pings to avoid firewall
+ restrictions
+ * nmap_fast - Fast scan of the top 300 popular ports
+ * nmap_detect_versions - Detects versions of services and OS, runs on all ports
+ * nmap_check_for_vulns - Uses vulscan script to check target services for vulnerabilities
+ * nmap_full_udp - Same as full but via UDP
+ * nmap_traceroute - Try to traceroute using the most common ports
+ * nmap_full_with_scripts - Same as nmap_full but also runs all the scripts
+ * nmap_web_safe_osscan - Little "safer" scan for OS version as connecting to only HTTP and HTTPS ports doesn't look so attacking.
+
diff --git a/zsh/.oh-my-zsh/plugins/nmap/nmap.plugin.zsh b/zsh/.oh-my-zsh/plugins/nmap/nmap.plugin.zsh
new file mode 100644
index 0000000..8c691bd
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/nmap/nmap.plugin.zsh
@@ -0,0 +1,32 @@
+# Some useful nmap aliases for scan modes
+
+# Nmap options are:
+# -sS - TCP SYN scan
+# -v - verbose
+# -T1 - timing of scan. Options are paranoid (0), sneaky (1), polite (2), normal (3), aggressive (4), and insane (5)
+# -sF - FIN scan (can sneak through non-stateful firewalls)
+# -PE - ICMP echo discovery probe
+# -PP - timestamp discovery probe
+# -PY - SCTP init ping
+# -g - use given number as source port
+# -A - enable OS detection, version detection, script scanning, and traceroute (aggressive)
+# -O - enable OS detection
+# -sA - TCP ACK scan
+# -F - fast scan
+# --script=vuln - also access vulnerabilities in target
+
+alias nmap_open_ports="nmap --open"
+alias nmap_list_interfaces="nmap --iflist"
+alias nmap_slow="sudo nmap -sS -v -T1"
+alias nmap_fin="sudo nmap -sF -v"
+alias nmap_full="sudo nmap -sS -T4 -PE -PP -PS80,443 -PY -g 53 -A -p1-65535 -v"
+alias nmap_check_for_firewall="sudo nmap -sA -p1-65535 -v -T4"
+alias nmap_ping_through_firewall="nmap -PS -PA"
+alias nmap_fast="nmap -F -T5 --version-light --top-ports 300"
+alias nmap_detect_versions="sudo nmap -sV -p1-65535 -O --osscan-guess -T4 -Pn"
+alias nmap_check_for_vulns="nmap --script=vuln"
+alias nmap_full_udp="sudo nmap -sS -sU -T4 -A -v -PE -PS22,25,80 -PA21,23,80,443,3389 "
+alias nmap_traceroute="sudo nmap -sP -PE -PS22,25,80 -PA21,23,80,3389 -PU -PO --traceroute "
+alias nmap_full_with_scripts="sudo nmap -sS -sU -T4 -A -v -PE -PP -PS21,22,23,25,80,113,31339 -PA80,113,443,10042 -PO --script all "
+alias nmap_web_safe_osscan="sudo nmap -p 80,443 -O -v --osscan-guess --fuzzy "
+
diff --git a/zsh/.oh-my-zsh/plugins/node/README.md b/zsh/.oh-my-zsh/plugins/node/README.md
new file mode 100644
index 0000000..c392dc0
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/node/README.md
@@ -0,0 +1,16 @@
+# node plugin
+
+To use it, add `node` to the plugins array of your zshrc file:
+```zsh
+plugins=(... node)
+```
+
+This plugin adds `node-docs` function that open specific section in [Node.js](https://nodejs.org) documentation (depending on the installed version).
+For example:
+
+```zsh
+# Opens https://nodejs.org/docs/latest-v10.x/api/fs.html
+$ node-docs fs
+# Opens https://nodejs.org/docs/latest-v10.x/api/path.html
+$ node-docs path
+```
diff --git a/zsh/.oh-my-zsh/plugins/node/node.plugin.zsh b/zsh/.oh-my-zsh/plugins/node/node.plugin.zsh
new file mode 100644
index 0000000..e196662
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/node/node.plugin.zsh
@@ -0,0 +1,6 @@
+# Open the node api for your current version to the optional section.
+# TODO: Make the section part easier to use.
+function node-docs {
+ local section=${1:-all}
+ open_command "https://nodejs.org/docs/$(node --version)/api/$section.html"
+}
diff --git a/zsh/.oh-my-zsh/plugins/nomad/README.md b/zsh/.oh-my-zsh/plugins/nomad/README.md
new file mode 100644
index 0000000..04b3616
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/nomad/README.md
@@ -0,0 +1,15 @@
+# Nomad
+
+The `nomad` plugin provides a simple autocompletion for [Nomad](https://nomadproject.io/), a tool from Hashicorp for easily deploy applications at any scale.
+
+## Usage
+
+1. Enable the `nomad` plugin:
+
+ ```zsh
+ plugins=(... nomad)
+ ```
+
+2. Install [Nomad](https://nomadproject.io/)
+
+3. Type `nomad` into your prompt and hit `TAB` to see available completion options.
diff --git a/zsh/.oh-my-zsh/plugins/nomad/_nomad b/zsh/.oh-my-zsh/plugins/nomad/_nomad
new file mode 100644
index 0000000..1c935a0
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/nomad/_nomad
@@ -0,0 +1,153 @@
+#compdef nomad
+
+local -a _nomad_cmds
+_nomad_cmds=(
+ 'agent:Runs a Nomad agent'
+ 'agent-info:Display status information about the local agent'
+ 'alloc-status:Display allocation status information and metadata'
+ 'client-config:View or modify client configuration details'
+ 'eval-status:Display evaluation status and placement failure reasons'
+ 'fs:Inspect the contents of an allocation directory'
+ 'init:Create an example job file'
+ 'inspect:Inspect a submitted job'
+ 'logs:Streams the logs of a task.'
+ 'node-drain:Toggle drain mode on a given node'
+ 'node-status:Display status information about nodes'
+ 'plan:Dry-run a job update to determine its effects'
+ 'run:Run a new job or update an existing'
+ 'server-force-leave:Force a server into the left state'
+ 'server-join:Join server nodes together'
+ 'server-members:Display a list of known servers and their'
+ 'status:Display status information about jobs'
+ 'stop:Stop a running job'
+ 'validate:Checks if a given job specification is valid'
+ 'version:Prints the Nomad version'
+)
+
+__allocstatus() {
+ _arguments \
+ '-address=[(addr) The address of the Nomad server. Overrides the NOMAD_ADDR environment variable if set. Default = http://127.0.0.1:4646]' \
+ '-region=[(region) The region of the Nomad servers to forward commands to. Overrides the NOMAD_REGION environment variable if set. Defaults to the Agent s local region.]' \
+ '-no-color[Disables colored command output.]' \
+ '-short[Display short output. Shows only the most recent task event.]' \
+ '-stats[Display detailed resource usage statistics.]' \
+ '-verbose[Show full information.]' \
+ '-json[Output the allocation in its JSON format.]' \
+ '-t[Format and display allocation using a Go template.]'
+}
+
+__evalstatus() {
+ _arguments \
+ '-address=[(addr) The address of the Nomad server. Overrides the NOMAD_ADDR environment variable if set. Default = http://127.0.0.1:4646]' \
+ '-region=[(region) The region of the Nomad servers to forward commands to. Overrides the NOMAD_REGION environment variable if set. Defaults to the Agent s local region.]' \
+ '-no-color[Disables colored command output.]' \
+ '-monitor[Monitor an outstanding evaluation.]' \
+ '-verbose[Show full information.]' \
+ '-json[Output the allocation in its JSON format.]' \
+ '-t[Format and display allocation using a Go template.]'
+}
+
+__inspect() {
+ _arguments \
+ '-address=[(addr) The address of the Nomad server. Overrides the NOMAD_ADDR environment variable if set. Default = http://127.0.0.1:4646]' \
+ '-region=[(region) The region of the Nomad servers to forward commands to. Overrides the NOMAD_REGION environment variable if set. Defaults to the Agent s local region.]' \
+ '-no-color[Disables colored command output.]' \
+ '-json[Output the allocation in its JSON format.]' \
+ '-t[Format and display allocation using a Go template.]'
+}
+
+__logs() {
+ _arguments \
+ '-address=[(addr) The address of the Nomad server. Overrides the NOMAD_ADDR environment variable if set. Default = http://127.0.0.1:4646]' \
+ '-region=[(region) The region of the Nomad servers to forward commands to. Overrides the NOMAD_REGION environment variable if set. Defaults to the Agent s local region.]' \
+ '-no-color[Disables colored command output.]' \
+ '-stderr[ Display stderr logs.]' \
+ '-job[ Use a random allocation from the specified job ID.]' \
+ '-verbose[Show full information.]' \
+ '-f[Causes the output to not stop when the end of the logs are reached, but rather to wait for additional output.]' \
+ '-tail[Show the logs contents with offsets relative to the end of the logs. If no offset is given, -n is defaulted to 10.]' \
+ '-n[Sets the tail location in best-efforted number of lines relative to the end of the logs.]' \
+ '-c[Sets the tail location in number of bytes relative to the end of the logs.]'
+}
+
+__nodestatus() {
+ _arguments \
+ '-address=[(addr) The address of the Nomad server. Overrides the NOMAD_ADDR environment variable if set. Default = http://127.0.0.1:4646]' \
+ '-region=[(region) The region of the Nomad servers to forward commands to. Overrides the NOMAD_REGION environment variable if set. Defaults to the Agent s local region.]' \
+ '-no-color[Disables colored command output.]' \
+ '-self[Query the status of the local node.]' \
+ '-allocs[ Display a count of running allocations for each node.]' \
+ '-short[Display short output. Shows only the most recent task event.]' \
+ '-stats[Display detailed resource usage statistics.]' \
+ '-verbose[Show full information.]' \
+ '-json[Output the allocation in its JSON format.]' \
+ '-t[Format and display allocation using a Go template.]'
+}
+
+__plan() {
+ _arguments \
+ '-address=[(addr) The address of the Nomad server. Overrides the NOMAD_ADDR environment variable if set. Default = http://127.0.0.1:4646]' \
+ '-region=[(region) The region of the Nomad servers to forward commands to. Overrides the NOMAD_REGION environment variable if set. Defaults to the Agent s local region.]' \
+ '-no-color[Disables colored command output.]' \
+ '-diff[Determines whether the diff between the remote job and planned job is shown. Defaults to true.]'
+}
+
+__run() {
+ _arguments \
+ '-address=[(addr) The address of the Nomad server. Overrides the NOMAD_ADDR environment variable if set. Default = http://127.0.0.1:4646]' \
+ '-region=[(region) The region of the Nomad servers to forward commands to. Overrides the NOMAD_REGION environment variable if set. Defaults to the Agent s local region.]' \
+ '-no-color[Disables colored command output.]' \
+ '-check-index[If set, the job is only registered or updated if the the passed job modify index matches the server side version. If a check-index value of zero is passed, the job is only registered if it does not yet exist. If a non-zero value is passed, it ensures that the job is being updated from a known state. The use of this flag is most common in conjunction with plan command.]' \
+ '-detach[Return immediately instead of entering monitor mode. After job submission, the evaluation ID will be printed to the screen, which can be used to examine the evaluation using the eval-status command.]' \
+ '-output[Output the JSON that would be submitted to the HTTP API without submitting the job.]' \
+ '-verbose[Show full information.]'
+}
+
+__status() {
+ _arguments \
+ '-address=[(addr) The address of the Nomad server. Overrides the NOMAD_ADDR environment variable if set. Default = http://127.0.0.1:4646]' \
+ '-region=[(region) The region of the Nomad servers to forward commands to. Overrides the NOMAD_REGION environment variable if set. Defaults to the Agent s local region.]' \
+ '-no-color[Disables colored command output.]' \
+ '-short[Display short output. Shows only the most recent task event.]' \
+ '-evals[Display the evaluations associated with the job.]' \
+ '-verbose[Show full information.]'
+}
+
+__stop() {
+ _arguments \
+ '-address=[(addr) The address of the Nomad server. Overrides the NOMAD_ADDR environment variable if set. Default = http://127.0.0.1:4646]' \
+ '-region=[(region) The region of the Nomad servers to forward commands to. Overrides the NOMAD_REGION environment variable if set. Defaults to the Agent s local region.]' \
+ '-no-color[Disables colored command output.]' \
+ '-detach[Return immediately instead of entering monitor mode. After the deregister command is submitted, a new evaluation ID is printed to the screen, which can be used to examine the evaluation using the eval-status command.]' \
+ '-yes[Automatic yes to prompts.]' \
+ '-verbose[Show full information.]'
+}
+
+_arguments '*:: :->command'
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "nomad command" _nomad_cmds
+ return
+fi
+
+local -a _command_args
+case "$words[1]" in
+ alloc-status)
+ __allocstatus ;;
+ eval-status)
+ __evalstatus ;;
+ inspect)
+ __inspect ;;
+ logs)
+ __logs ;;
+ node-status)
+ __nodestatus ;;
+ plan)
+ __plan ;;
+ run)
+ __run ;;
+ status)
+ __status ;;
+ stop)
+ __stop ;;
+esac
diff --git a/zsh/.oh-my-zsh/plugins/npm/README.md b/zsh/.oh-my-zsh/plugins/npm/README.md
new file mode 100644
index 0000000..202e2b0
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/npm/README.md
@@ -0,0 +1,26 @@
+## npm plugin
+
+The npm plugin provides completion as well as adding many useful aliases.
+
+To use it, add npm to the plugins array of your zshrc file:
+```
+plugins=(... npm)
+```
+
+## Aliases
+
+| Alias | Command | Descripton |
+|:------ |:-----------------------------|:----------------------------------------------------------------|
+| `npmg` | `npm i -g` | Install dependencies globally |
+| `npmS` | `npm i -S` | Install and save to dependencies in your package.json |
+| `npmD` | `npm i -D` | Install and save to dev-dependencies in your package.json |
+| `npmE` | `PATH="$(npm bin)":"$PATH"` | Run command from node_modules folder based on current directory |
+| `npmO` | `npm outdated` | Check which npm modules are outdated |
+| `npmV` | `npm -v` | Check package versions |
+| `npmL` | `npm list` | List installed packages |
+| `npmL0` | `npm ls --depth=0` | List top-level installed packages |
+| `npmst` | `npm start` | Run npm start |
+| `npmt` | `npm test` | Run npm test |
+| `npmR` | `npm run` | Run npm scripts |
+| `npmP` | `npm publish` | Run npm publish |
+| `npmI` | `npm init` | Run npm init |
diff --git a/zsh/.oh-my-zsh/plugins/npm/npm.plugin.zsh b/zsh/.oh-my-zsh/plugins/npm/npm.plugin.zsh
new file mode 100644
index 0000000..f62174a
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/npm/npm.plugin.zsh
@@ -0,0 +1,57 @@
+(( $+commands[npm] )) && {
+ __NPM_COMPLETION_FILE="${ZSH_CACHE_DIR:-$ZSH/cache}/npm_completion"
+
+ if [[ ! -f $__NPM_COMPLETION_FILE ]]; then
+ npm completion >! $__NPM_COMPLETION_FILE 2>/dev/null
+ [[ $? -ne 0 ]] && rm -f $__NPM_COMPLETION_FILE
+ fi
+
+ [[ -f $__NPM_COMPLETION_FILE ]] && source $__NPM_COMPLETION_FILE
+
+ unset __NPM_COMPLETION_FILE
+}
+
+# Install dependencies globally
+alias npmg="npm i -g "
+
+# npm package names are lowercase
+# Thus, we've used camelCase for the following aliases:
+
+# Install and save to dependencies in your package.json
+# npms is used by https://www.npmjs.com/package/npms
+alias npmS="npm i -S "
+
+# Install and save to dev-dependencies in your package.json
+# npmd is used by https://github.com/dominictarr/npmd
+alias npmD="npm i -D "
+
+# Execute command from node_modules folder based on current directory
+# i.e npmE gulp
+alias npmE='PATH="$(npm bin)":"$PATH"'
+
+# Check which npm modules are outdated
+alias npmO="npm outdated"
+
+# Check package versions
+alias npmV="npm -v"
+
+# List packages
+alias npmL="npm list"
+
+# List top-level installed packages
+alias npmL0="npm ls --depth=0"
+
+# Run npm start
+alias npmst="npm start"
+
+# Run npm test
+alias npmt="npm test"
+
+# Run npm scripts
+alias npmR="npm run"
+
+# Run npm publish
+alias npmP="npm publish"
+
+# Run npm init
+alias npmI="npm init"
diff --git a/zsh/.oh-my-zsh/plugins/npx/README.md b/zsh/.oh-my-zsh/plugins/npx/README.md
new file mode 100644
index 0000000..1c05293
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/npx/README.md
@@ -0,0 +1,31 @@
+# NPX Plugin
+> npx(1) -- execute npm package binaries. ([more info](https://github.com/zkat/npx))
+
+This plugin automatically registers npx command-not-found handler if `npx` exists in your `$PATH`.
+
+## Setup
+
+- Add plugin to `~/.zshrc`
+
+```bash
+plugins=(.... npx)
+```
+
+- Globally install npx binary (npx will be auto installed with recent versions of Node.js)
+```bash
+sudo npm install -g npx
+```
+
+## Note
+
+The shell auto-fallback doesn't auto-install plain packages. In order to get it to install something, you need to add `@`:
+
+```
+➜ jasmine@latest # or just `jasmine@`
+npx: installed 13 in 1.896s
+Randomized with seed 54385
+Started
+```
+
+It does it this way so folks using the fallback don't accidentally try to install regular typoes.
+
diff --git a/zsh/.oh-my-zsh/plugins/npx/npx.plugin.zsh b/zsh/.oh-my-zsh/plugins/npx/npx.plugin.zsh
new file mode 100644
index 0000000..32bb673
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/npx/npx.plugin.zsh
@@ -0,0 +1,7 @@
+# NPX Plugin
+# https://www.npmjs.com/package/npx
+# Maintainer: Pooya Parsa
+
+(( $+commands[npx] )) && {
+ source <(npx --shell-auto-fallback zsh)
+}
diff --git a/zsh/.oh-my-zsh/plugins/nvm/README.md b/zsh/.oh-my-zsh/plugins/nvm/README.md
new file mode 100644
index 0000000..079cf00
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/nvm/README.md
@@ -0,0 +1,9 @@
+# nvm plugin
+
+This plugin adds autocompletions for [nvm](https://github.com/creationix/nvm) — a Node.js version manager.
+It also automatically sources nvm, so you don't need to do it manually in your `.zshrc`.
+
+To use it, add `nvm` to the plugins array of your zshrc file:
+```zsh
+plugins=(... nvm)
+```
diff --git a/zsh/.oh-my-zsh/plugins/nvm/_nvm b/zsh/.oh-my-zsh/plugins/nvm/_nvm
new file mode 100644
index 0000000..1eec48b
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/nvm/_nvm
@@ -0,0 +1,33 @@
+#compdef nvm
+#autoload
+
+[[ -f "$NVM_DIR/nvm.sh" ]] || return 0
+
+local -a _1st_arguments
+_1st_arguments=(
+ 'help:show help'
+ '--version:print out the latest released version of nvm'
+ 'install:download and install a version in '
+ 'uninstall:uninstall a version'
+ 'use:modify PATH to use . Uses .nvmrc if available'
+ 'exec:run on . Uses .nvmrc if available'
+ 'run:run `node` on with as arguments. Uses .nvmrc if available'
+ 'current:list installed versions'
+ 'ls:list installed versions or versions matching a given description'
+ 'version:resolve the given description to a single local version'
+ 'version-remote:resolve the given description to a single remote version'
+ 'ls-remote:list remote versions available for install'
+ 'deactivate:undo effects of `nvm` on current shell'
+ 'alias:show or set aliases'
+ 'unalias:deletes an alias'
+ 'reinstall-packages:reinstall global `npm` packages contained in to current version'
+ 'unload:unload `nvm` from shell'
+ 'which:display path to installed node version. Uses .nvmrc if available'
+)
+
+_arguments -C '*:: :->subcmds' && return 0
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "nvm subcommand" _1st_arguments
+ return
+fi
diff --git a/zsh/.oh-my-zsh/plugins/nvm/nvm.plugin.zsh b/zsh/.oh-my-zsh/plugins/nvm/nvm.plugin.zsh
new file mode 100644
index 0000000..4bab8e9
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/nvm/nvm.plugin.zsh
@@ -0,0 +1,8 @@
+# Set NVM_DIR if it isn't already defined
+[[ -z "$NVM_DIR" ]] && export NVM_DIR="$HOME/.nvm"
+
+# Try to load nvm only if command not already available
+if ! type "nvm" &> /dev/null; then
+ # Load nvm if it exists
+ [[ -f "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh"
+fi
diff --git a/zsh/.oh-my-zsh/plugins/nyan/README.md b/zsh/.oh-my-zsh/plugins/nyan/README.md
new file mode 100644
index 0000000..5929418
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/nyan/README.md
@@ -0,0 +1,5 @@
+# Nyan plugin
+
+This plugin adds a command to display [Nyan Cat](https://en.wikipedia.org/wiki/Nyan_Cat) right inside your terminal.
+
+**Plugin is deprecated**. Check [official repo](https://github.com/klange/nyancat) for more information.
\ No newline at end of file
diff --git a/zsh/.oh-my-zsh/plugins/nyan/nyan.plugin.zsh b/zsh/.oh-my-zsh/plugins/nyan/nyan.plugin.zsh
new file mode 100644
index 0000000..c21c784
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/nyan/nyan.plugin.zsh
@@ -0,0 +1,10 @@
+print -Pn '%F{yellow}'
+cat >&2 <<-EOD
+ nyan plugin:
+ The nyancat server used by this plugin was shut down due to increased
+ bandwidth costs, so the nyan plugin no longer works. You can get the
+ same functionality in some distributions by installing the nyancat package,
+ or you can compile it yourself.
+ See https://github.com/klange/nyancat for more information.
+EOD
+print -Pn '%f'
diff --git a/zsh/.oh-my-zsh/plugins/oc/README.md b/zsh/.oh-my-zsh/plugins/oc/README.md
new file mode 100644
index 0000000..deae9b2
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/oc/README.md
@@ -0,0 +1,13 @@
+# OC - OpenShift CLI
+
+This plugin provides autocompletion for [OC](https://docs.openshift.com/container-platform/3.7/cli_reference/index.html) commands, building, managing and updating operations.
+
+To use it, add `oc` to the plugins array of your zshrc file:
+
+```bash
+plugins=(... oc)
+```
+
+## Contributors
+
++ [kevinkirkup](https://github.com/kevinkirkup) - Plugin Author
diff --git a/zsh/.oh-my-zsh/plugins/oc/oc.plugin.zsh b/zsh/.oh-my-zsh/plugins/oc/oc.plugin.zsh
new file mode 100644
index 0000000..b968c4b
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/oc/oc.plugin.zsh
@@ -0,0 +1,7 @@
+# Autocompletion for oc, the command line interface for OpenShift
+#
+# Author: https://github.com/kevinkirkup
+
+if [ $commands[oc] ]; then
+ source <(oc completion zsh)
+fi
diff --git a/zsh/.oh-my-zsh/plugins/osx/README.md b/zsh/.oh-my-zsh/plugins/osx/README.md
new file mode 100644
index 0000000..f3881ec
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/osx/README.md
@@ -0,0 +1,62 @@
+# OSX plugin
+
+## Description
+
+This plugin provides a few utilities to make it more enjoyable on OSX.
+
+To start using it, add the `osx` plugin to your plugins array in `~/.zshrc`:
+
+```zsh
+plugins=(... osx)
+```
+
+Original author: [Sorin Ionescu](https://github.com/sorin-ionescu)
+
+## Acknowledgements
+
+This application makes use of the following third party scripts:
+
+[shpotify](https://github.com/hnarayanan/shpotify)
+
+Copyright (c) 2012–2019 [Harish Narayanan](https://harishnarayanan.org/).
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+## Commands
+
+| Command | Description |
+| :-------------- | :---------------------------------------------------- |
+| `tab` | Open the current directory in a new tab |
+| `split_tab` | Split the current terminal tab horizontally |
+| `vsplit_tab` | Split the current terminal tab vertically |
+| `ofd` | Open the current directory in a Finder window |
+| `pfd` | Return the path of the frontmost Finder window |
+| `pfs` | Return the current Finder selection |
+| `cdf` | `cd` to the current Finder directory |
+| `pushdf` | `pushd` to the current Finder directory |
+| `quick-look` | Quick-Look a specified file |
+| `man-preview` | Open a specified man page in Preview app |
+| `showfiles` | Show hidden files |
+| `hidefiles` | Hide the hidden files |
+| `itunes` | DEPRECATED. Use `music` from macOS Catalina on |
+| `music` | Control Apple Music. Use `music -h` for usage details |
+| `spotify` | Control Spotify and search by artist, album, track… |
+| `rmdsstore` | Remove .DS\_Store files recursively in a directory |
diff --git a/zsh/.oh-my-zsh/plugins/osx/osx.plugin.zsh b/zsh/.oh-my-zsh/plugins/osx/osx.plugin.zsh
new file mode 100644
index 0000000..03e9c1c
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/osx/osx.plugin.zsh
@@ -0,0 +1,350 @@
+# Open the current directory in a Finder window
+alias ofd='open_command $PWD'
+
+function _omz_osx_get_frontmost_app() {
+ local the_app=$(
+ osascript 2>/dev/null < 0 )) && command="${command}; $*"
+
+ local the_app=$(_omz_osx_get_frontmost_app)
+
+ if [[ "$the_app" == 'Terminal' ]]; then
+ # Discarding stdout to quash "tab N of window id XXX" output
+ osascript >/dev/null </dev/null < 0 )) && command="${command}; $*"
+
+ local the_app=$(_omz_osx_get_frontmost_app)
+
+ if [[ "$the_app" == 'iTerm' ]]; then
+ osascript </dev/null <&2
+ false
+
+ fi
+}
+
+function split_tab() {
+ local command="cd \\\"$PWD\\\"; clear"
+ (( $# > 0 )) && command="${command}; $*"
+
+ local the_app=$(_omz_osx_get_frontmost_app)
+
+ if [[ "$the_app" == 'iTerm' ]]; then
+ osascript 2>/dev/null </dev/null <&2
+ false
+
+ fi
+}
+
+function pfd() {
+ osascript 2>/dev/null </dev/null < 0 )) && qlmanage -p $* &>/dev/null &
+}
+
+function man-preview() {
+ man -t "$@" | open -f -a Preview
+}
+compdef _man man-preview
+
+function vncviewer() {
+ open vnc://$@
+}
+
+# iTunes control function
+function itunes music() {
+ local APP_NAME=Music
+
+ autoload is-at-least
+ if is-at-least 10.15 $(sw_vers -productVersion); then
+ if [[ $0 = itunes ]]; then
+ echo >&2 The itunes function name is deprecated. Use \`music\' instead.
+ return 1
+ fi
+ else
+ APP_NAME=iTunes
+ fi
+
+ local opt=$1
+ local playlist=$2
+ shift
+ case "$opt" in
+ launch|play|pause|stop|rewind|resume|quit)
+ ;;
+ mute)
+ opt="set mute to true"
+ ;;
+ unmute)
+ opt="set mute to false"
+ ;;
+ next|previous)
+ opt="$opt track"
+ ;;
+ vol)
+ local new_volume volume=$(osascript -e "tell application \"$APP_NAME\" to get sound volume")
+ if [[ $# -eq 0 ]]; then
+ echo "Current volume is ${volume}."
+ return 0
+ fi
+ case $1 in
+ up) new_volume=$((volume + 10 < 100 ? volume + 10 : 100)) ;;
+ down) new_volume=$((volume - 10 > 0 ? volume - 10 : 0)) ;;
+ <0-100>) new_volume=$1 ;;
+ *) echo "'$1' is not valid. Expected <0-100>, up or down."
+ return 1 ;;
+ esac
+ opt="set sound volume to ${new_volume}"
+ ;;
+ playlist)
+ # Inspired by: https://gist.github.com/nakajijapan/ac8b45371064ae98ea7f
+ if [[ ! -z "$playlist" ]]; then
+ osascript -e "tell application \"$APP_NAME\"" -e "set new_playlist to \"$playlist\" as string" -e "play playlist new_playlist" -e "end tell" 2>/dev/null;
+ if [[ $? -eq 0 ]]; then
+ opt="play"
+ else
+ opt="stop"
+ fi
+ else
+ opt="set allPlaylists to (get name of every playlist)"
+ fi
+ ;;
+ playing|status)
+ local state=`osascript -e "tell application \"$APP_NAME\" to player state as string"`
+ if [[ "$state" = "playing" ]]; then
+ currenttrack=`osascript -e "tell application \"$APP_NAME\" to name of current track as string"`
+ currentartist=`osascript -e "tell application \"$APP_NAME\" to artist of current track as string"`
+ echo -E "Listening to $fg[yellow]$currenttrack$reset_color by $fg[yellow]$currentartist$reset_color";
+ else
+ echo "$APP_NAME is" $state;
+ fi
+ return 0
+ ;;
+ shuf|shuff|shuffle)
+ # The shuffle property of current playlist can't be changed in iTunes 12,
+ # so this workaround uses AppleScript to simulate user input instead.
+ # Defaults to toggling when no options are given.
+ # The toggle option depends on the shuffle button being visible in the Now playing area.
+ # On and off use the menu bar items.
+ local state=$1
+
+ if [[ -n "$state" && ! "$state" =~ "^(on|off|toggle)$" ]]
+ then
+ print "Usage: $0 shuffle [on|off|toggle]. Invalid option."
+ return 1
+ fi
+
+ case "$state" in
+ on|off)
+ # Inspired by: https://stackoverflow.com/a/14675583
+ osascript 1>/dev/null 2>&1 <<-EOF
+ tell application "System Events" to perform action "AXPress" of (menu item "${state}" of menu "Shuffle" of menu item "Shuffle" of menu "Controls" of menu bar item "Controls" of menu bar 1 of application process "iTunes" )
+EOF
+ return 0
+ ;;
+ toggle|*)
+ osascript 1>/dev/null 2>&1 <<-EOF
+ tell application "System Events" to perform action "AXPress" of (button 2 of process "iTunes"'s window "iTunes"'s scroll area 1)
+EOF
+ return 0
+ ;;
+ esac
+ ;;
+ ""|-h|--help)
+ echo "Usage: $0 "
+ echo "option:"
+ echo "\tlaunch|play|pause|stop|rewind|resume|quit"
+ echo "\tmute|unmute\tcontrol volume set"
+ echo "\tnext|previous\tplay next or previous track"
+ echo "\tshuf|shuffle [on|off|toggle]\tSet shuffled playback. Default: toggle. Note: toggle doesn't support the MiniPlayer."
+ echo "\tvol [0-100|up|down]\tGet or set the volume. 0 to 100 sets the volume. 'up' / 'down' increases / decreases by 10 points. No argument displays current volume."
+ echo "\tplaying|status\tShow what song is currently playing in Music."
+ echo "\tplaylist [playlist name]\t Play specific playlist"
+ echo "\thelp\tshow this message and exit"
+ return 0
+ ;;
+ *)
+ print "Unknown option: $opt"
+ return 1
+ ;;
+ esac
+ osascript -e "tell application \"$APP_NAME\" to $opt"
+}
+
+# Spotify control function
+source ${ZSH}/plugins/osx/spotify
+
+# Show/hide hidden files in the Finder
+alias showfiles="defaults write com.apple.finder AppleShowAllFiles -bool true && killall Finder"
+alias hidefiles="defaults write com.apple.finder AppleShowAllFiles -bool false && killall Finder"
+
+# Remove .DS_Store files recursively in a directory, default .
+function rmdsstore() {
+ find "${@:-.}" -type f -name .DS_Store -delete
+}
diff --git a/zsh/.oh-my-zsh/plugins/osx/spotify b/zsh/.oh-my-zsh/plugins/osx/spotify
new file mode 100644
index 0000000..663215a
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/osx/spotify
@@ -0,0 +1,478 @@
+#!/usr/bin/env bash
+
+function spotify() {
+# Copyright (c) 2012--2019 Harish Narayanan
+#
+# Contains numerous helpful contributions from Jorge Colindres, Thomas
+# Pritchard, iLan Epstein, Gabriele Bonetti, Sean Heller, Eric Martin
+# and Peter Fonseca.
+
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation files
+# (the "Software"), to deal in the Software without restriction,
+# including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software,
+# and to permit persons to whom the Software is furnished to do so,
+# subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+USER_CONFIG_DEFAULTS="CLIENT_ID=\"\"\nCLIENT_SECRET=\"\"";
+USER_CONFIG_FILE="${HOME}/.shpotify.cfg";
+if ! [[ -f "${USER_CONFIG_FILE}" ]]; then
+ touch "${USER_CONFIG_FILE}";
+ echo -e "${USER_CONFIG_DEFAULTS}" > "${USER_CONFIG_FILE}";
+fi
+source "${USER_CONFIG_FILE}";
+
+showAPIHelp() {
+ echo;
+ echo "Connecting to Spotify's API:";
+ echo;
+ echo " This command line application needs to connect to Spotify's API in order to";
+ echo " find music by name. It is very likely you want this feature!";
+ echo;
+ echo " To get this to work, you need to sign up (or in) and create an 'Application' at:";
+ echo " https://developer.spotify.com/my-applications/#!/applications/create";
+ echo;
+ echo " Once you've created an application, find the 'Client ID' and 'Client Secret'";
+ echo " values, and enter them into your shpotify config file at '${USER_CONFIG_FILE}'";
+ echo;
+ echo " Be sure to quote your values and don't add any extra spaces!";
+ echo " When done, it should look like this (but with your own values):";
+ echo ' CLIENT_ID="abc01de2fghijk345lmnop"';
+ echo ' CLIENT_SECRET="qr6stu789vwxyz"';
+}
+
+showHelp () {
+ echo "Usage:";
+ echo;
+ echo " `basename $0` ";
+ echo;
+ echo "Commands:";
+ echo;
+ echo " play # Resumes playback where Spotify last left off.";
+ echo " play # Finds a song by name and plays it.";
+ echo " play album # Finds an album by name and plays it.";
+ echo " play artist # Finds an artist by name and plays it.";
+ echo " play list # Finds a playlist by name and plays it.";
+ echo " play uri # Play songs from specific uri.";
+ echo;
+ echo " next # Skips to the next song in a playlist.";
+ echo " prev # Returns to the previous song in a playlist.";
+ echo " replay # Replays the current track from the beginning.";
+ echo " pos # Jumps to a time (in secs) in the current song.";
+ echo " pause # Pauses (or resumes) Spotify playback.";
+ echo " stop # Stops playback.";
+ echo " quit # Stops playback and quits Spotify.";
+ echo;
+ echo " vol up # Increases the volume by 10%.";
+ echo " vol down # Decreases the volume by 10%.";
+ echo " vol # Sets the volume to an amount between 0 and 100.";
+ echo " vol [show] # Shows the current Spotify volume.";
+ echo;
+ echo " status # Shows the current player status.";
+ echo " status artist # Shows the currently playing artist.";
+ echo " status album # Shows the currently playing album.";
+ echo " status track # Shows the currently playing track.";
+ echo;
+ echo " share # Displays the current song's Spotify URL and URI."
+ echo " share url # Displays the current song's Spotify URL and copies it to the clipboard."
+ echo " share uri # Displays the current song's Spotify URI and copies it to the clipboard."
+ echo;
+ echo " toggle shuffle # Toggles shuffle playback mode.";
+ echo " toggle repeat # Toggles repeat playback mode.";
+ showAPIHelp
+}
+
+cecho(){
+ bold=$(tput bold);
+ green=$(tput setaf 2);
+ reset=$(tput sgr0);
+ echo $bold$green"$1"$reset;
+}
+
+showArtist() {
+ echo `osascript -e 'tell application "Spotify" to artist of current track as string'`;
+}
+
+showAlbum() {
+ echo `osascript -e 'tell application "Spotify" to album of current track as string'`;
+}
+
+showTrack() {
+ echo `osascript -e 'tell application "Spotify" to name of current track as string'`;
+}
+
+showStatus () {
+ state=`osascript -e 'tell application "Spotify" to player state as string'`;
+ cecho "Spotify is currently $state.";
+ duration=`osascript -e 'tell application "Spotify"
+ set durSec to (duration of current track / 1000) as text
+ set tM to (round (durSec / 60) rounding down) as text
+ if length of ((durSec mod 60 div 1) as text) is greater than 1 then
+ set tS to (durSec mod 60 div 1) as text
+ else
+ set tS to ("0" & (durSec mod 60 div 1)) as text
+ end if
+ set myTime to tM as text & ":" & tS as text
+ end tell
+ return myTime'`;
+ position=`osascript -e 'tell application "Spotify"
+ set pos to player position
+ set nM to (round (pos / 60) rounding down) as text
+ if length of ((round (pos mod 60) rounding down) as text) is greater than 1 then
+ set nS to (round (pos mod 60) rounding down) as text
+ else
+ set nS to ("0" & (round (pos mod 60) rounding down)) as text
+ end if
+ set nowAt to nM as text & ":" & nS as text
+ end tell
+ return nowAt'`;
+
+ echo -e $reset"Artist: $(showArtist)\nAlbum: $(showAlbum)\nTrack: $(showTrack) \nPosition: $position / $duration";
+}
+
+if [ $# = 0 ]; then
+ showHelp;
+else
+ if [ ! -d /Applications/Spotify.app ] && [ ! -d $HOME/Applications/Spotify.app ]; then
+ echo "The Spotify application must be installed."
+ return 1
+ fi
+
+ if [ $(osascript -e 'application "Spotify" is running') = "false" ]; then
+ osascript -e 'tell application "Spotify" to activate' || return 1
+ sleep 2
+ fi
+fi
+while [ $# -gt 0 ]; do
+ arg=$1;
+
+ case $arg in
+ "play" )
+ if [ $# != 1 ]; then
+ # There are additional arguments, so find out how many
+ array=( $@ );
+ len=${#array[@]};
+ SPOTIFY_SEARCH_API="https://api.spotify.com/v1/search";
+ SPOTIFY_TOKEN_URI="https://accounts.spotify.com/api/token";
+ if [ -z "${CLIENT_ID}" ]; then
+ cecho "Invalid Client ID, please update ${USER_CONFIG_FILE}";
+ showAPIHelp;
+ return 1
+ fi
+ if [ -z "${CLIENT_SECRET}" ]; then
+ cecho "Invalid Client Secret, please update ${USER_CONFIG_FILE}";
+ showAPIHelp;
+ return 1
+ fi
+ SHPOTIFY_CREDENTIALS=$(printf "${CLIENT_ID}:${CLIENT_SECRET}" | base64 | tr -d "\n"|tr -d '\r');
+ SPOTIFY_PLAY_URI="";
+
+ getAccessToken() {
+ cecho "Connecting to Spotify's API";
+
+ SPOTIFY_TOKEN_RESPONSE_DATA=$( \
+ curl "${SPOTIFY_TOKEN_URI}" \
+ --silent \
+ -X "POST" \
+ -H "Authorization: Basic ${SHPOTIFY_CREDENTIALS}" \
+ -d "grant_type=client_credentials" \
+ )
+ if ! [[ "${SPOTIFY_TOKEN_RESPONSE_DATA}" =~ "access_token" ]]; then
+ cecho "Autorization failed, please check ${USER_CONFG_FILE}"
+ cecho "${SPOTIFY_TOKEN_RESPONSE_DATA}"
+ showAPIHelp
+ return 1
+ fi
+ SPOTIFY_ACCESS_TOKEN=$( \
+ printf "${SPOTIFY_TOKEN_RESPONSE_DATA}" \
+ | grep -E -o '"access_token":".*",' \
+ | sed 's/"access_token"://g' \
+ | sed 's/"//g' \
+ | sed 's/,.*//g' \
+ )
+ }
+
+ searchAndPlay() {
+ type="$1"
+ Q="$2"
+
+ getAccessToken;
+
+ cecho "Searching ${type}s for: $Q";
+
+ SPOTIFY_PLAY_URI=$( \
+ curl -s -G $SPOTIFY_SEARCH_API \
+ -H "Authorization: Bearer ${SPOTIFY_ACCESS_TOKEN}" \
+ -H "Accept: application/json" \
+ --data-urlencode "q=$Q" \
+ -d "type=$type&limit=1&offset=0" \
+ | grep -E -o "spotify:$type:[a-zA-Z0-9]+" -m 1
+ )
+ echo "play uri: ${SPOTIFY_PLAY_URI}"
+ }
+
+ case $2 in
+ "list" )
+ _args=${array[@]:2:$len};
+ Q=$_args;
+
+ getAccessToken;
+
+ cecho "Searching playlists for: $Q";
+
+ results=$( \
+ curl -s -G $SPOTIFY_SEARCH_API --data-urlencode "q=$Q" -d "type=playlist&limit=10&offset=0" -H "Accept: application/json" -H "Authorization: Bearer ${SPOTIFY_ACCESS_TOKEN}" \
+ | grep -E -o "spotify:playlist:[a-zA-Z0-9]+" -m 10 \
+ )
+
+ count=$( \
+ echo "$results" | grep -c "spotify:playlist" \
+ )
+
+ if [ "$count" -gt 0 ]; then
+ random=$(( $RANDOM % $count));
+
+ SPOTIFY_PLAY_URI=$( \
+ echo "$results" | awk -v random="$random" '/spotify:playlist:[a-zA-Z0-9]+/{i++}i==random{print; exit}' \
+ )
+ fi;;
+
+ "album" | "artist" | "track" )
+ _args=${array[@]:2:$len};
+ searchAndPlay $2 "$_args";;
+
+ "uri" )
+ SPOTIFY_PLAY_URI=${array[@]:2:$len};;
+
+ * )
+ _args=${array[@]:1:$len};
+ searchAndPlay track "$_args";;
+ esac
+
+ if [ "$SPOTIFY_PLAY_URI" != "" ]; then
+ if [ "$2" = "uri" ]; then
+ cecho "Playing Spotify URI: $SPOTIFY_PLAY_URI";
+ else
+ cecho "Playing ($Q Search) -> Spotify URI: $SPOTIFY_PLAY_URI";
+ fi
+
+ osascript -e "tell application \"Spotify\" to play track \"$SPOTIFY_PLAY_URI\"";
+
+ else
+ cecho "No results when searching for $Q";
+ fi
+
+ else
+
+ # play is the only param
+ cecho "Playing Spotify.";
+ osascript -e 'tell application "Spotify" to play';
+ fi
+ break ;;
+
+ "pause" )
+ state=`osascript -e 'tell application "Spotify" to player state as string'`;
+ if [ $state = "playing" ]; then
+ cecho "Pausing Spotify.";
+ else
+ cecho "Playing Spotify.";
+ fi
+
+ osascript -e 'tell application "Spotify" to playpause';
+ break ;;
+
+ "stop" )
+ state=`osascript -e 'tell application "Spotify" to player state as string'`;
+ if [ $state = "playing" ]; then
+ cecho "Pausing Spotify.";
+ osascript -e 'tell application "Spotify" to playpause';
+ else
+ cecho "Spotify is already stopped."
+ fi
+
+ break ;;
+
+ "quit" ) cecho "Quitting Spotify.";
+ osascript -e 'tell application "Spotify" to quit';
+ break ;;
+
+ "next" ) cecho "Going to next track." ;
+ osascript -e 'tell application "Spotify" to next track';
+ showStatus;
+ break ;;
+
+ "prev" ) cecho "Going to previous track.";
+ osascript -e '
+ tell application "Spotify"
+ set player position to 0
+ previous track
+ end tell';
+ showStatus;
+ break ;;
+
+ "replay" ) cecho "Replaying current track.";
+ osascript -e 'tell application "Spotify" to set player position to 0'
+ break ;;
+
+ "vol" )
+ vol=`osascript -e 'tell application "Spotify" to sound volume as integer'`;
+ if [[ $2 = "" || $2 = "show" ]]; then
+ cecho "Current Spotify volume level is $vol.";
+ break ;
+ elif [ "$2" = "up" ]; then
+ if [ $vol -le 90 ]; then
+ newvol=$(( vol+10 ));
+ cecho "Increasing Spotify volume to $newvol.";
+ else
+ newvol=100;
+ cecho "Spotify volume level is at max.";
+ fi
+ elif [ "$2" = "down" ]; then
+ if [ $vol -ge 10 ]; then
+ newvol=$(( vol-10 ));
+ cecho "Reducing Spotify volume to $newvol.";
+ else
+ newvol=0;
+ cecho "Spotify volume level is at min.";
+ fi
+ elif [[ $2 =~ ^[0-9]+$ ]] && [[ $2 -ge 0 && $2 -le 100 ]]; then
+ newvol=$2;
+ cecho "Setting Spotify volume level to $newvol";
+ else
+ echo "Improper use of 'vol' command"
+ echo "The 'vol' command should be used as follows:"
+ echo " vol up # Increases the volume by 10%.";
+ echo " vol down # Decreases the volume by 10%.";
+ echo " vol [amount] # Sets the volume to an amount between 0 and 100.";
+ echo " vol # Shows the current Spotify volume.";
+ return 1
+ fi
+
+ osascript -e "tell application \"Spotify\" to set sound volume to $newvol";
+ break ;;
+
+ "toggle" )
+ if [ "$2" = "shuffle" ]; then
+ osascript -e 'tell application "Spotify" to set shuffling to not shuffling';
+ curr=`osascript -e 'tell application "Spotify" to shuffling'`;
+ cecho "Spotify shuffling set to $curr";
+ elif [ "$2" = "repeat" ]; then
+ osascript -e 'tell application "Spotify" to set repeating to not repeating';
+ curr=`osascript -e 'tell application "Spotify" to repeating'`;
+ cecho "Spotify repeating set to $curr";
+ fi
+ break ;;
+
+ "status" )
+ if [ $# != 1 ]; then
+ # There are additional arguments, a status subcommand
+ case $2 in
+ "artist" )
+ showArtist;
+ break ;;
+
+ "album" )
+ showAlbum;
+ break ;;
+
+ "track" )
+ showTrack;
+ break ;;
+ esac
+ else
+ # status is the only param
+ showStatus;
+ fi
+ break ;;
+
+ "info" )
+ info=`osascript -e 'tell application "Spotify"
+ set durSec to (duration of current track / 1000)
+ set tM to (round (durSec / 60) rounding down) as text
+ if length of ((durSec mod 60 div 1) as text) is greater than 1 then
+ set tS to (durSec mod 60 div 1) as text
+ else
+ set tS to ("0" & (durSec mod 60 div 1)) as text
+ end if
+ set myTime to tM as text & "min " & tS as text & "s"
+ set pos to player position
+ set nM to (round (pos / 60) rounding down) as text
+ if length of ((round (pos mod 60) rounding down) as text) is greater than 1 then
+ set nS to (round (pos mod 60) rounding down) as text
+ else
+ set nS to ("0" & (round (pos mod 60) rounding down)) as text
+ end if
+ set nowAt to nM as text & "min " & nS as text & "s"
+ set info to "" & "\nArtist: " & artist of current track
+ set info to info & "\nTrack: " & name of current track
+ set info to info & "\nAlbum Artist: " & album artist of current track
+ set info to info & "\nAlbum: " & album of current track
+ set info to info & "\nSeconds: " & durSec
+ set info to info & "\nSeconds played: " & pos
+ set info to info & "\nDuration: " & mytime
+ set info to info & "\nNow at: " & nowAt
+ set info to info & "\nPlayed Count: " & played count of current track
+ set info to info & "\nTrack Number: " & track number of current track
+ set info to info & "\nPopularity: " & popularity of current track
+ set info to info & "\nId: " & id of current track
+ set info to info & "\nSpotify URL: " & spotify url of current track
+ set info to info & "\nArtwork: " & artwork url of current track
+ set info to info & "\nPlayer: " & player state
+ set info to info & "\nVolume: " & sound volume
+ set info to info & "\nShuffle: " & shuffling
+ set info to info & "\nRepeating: " & repeating
+ end tell
+ return info'`
+ cecho "$info";
+ break ;;
+
+ "share" )
+ uri=`osascript -e 'tell application "Spotify" to spotify url of current track'`;
+ remove='spotify:track:'
+ url=${uri#$remove}
+ url="https://open.spotify.com/track/$url"
+
+ if [ "$2" = "" ]; then
+ cecho "Spotify URL: $url"
+ cecho "Spotify URI: $uri"
+ echo "To copy the URL or URI to your clipboard, use:"
+ echo "\`spotify share url\` or"
+ echo "\`spotify share uri\` respectively."
+ elif [ "$2" = "url" ]; then
+ cecho "Spotify URL: $url";
+ echo -n $url | pbcopy
+ elif [ "$2" = "uri" ]; then
+ cecho "Spotify URI: $uri";
+ echo -n $uri | pbcopy
+ fi
+ break ;;
+
+ "pos" )
+ cecho "Adjusting Spotify play position."
+ osascript -e "tell application \"Spotify\" to set player position to $2";
+ break ;;
+
+ "help" )
+ showHelp;
+ break ;;
+
+ * )
+ showHelp;
+ return 1 ;;
+
+ esac
+done
+}
diff --git a/zsh/.oh-my-zsh/plugins/otp/README.md b/zsh/.oh-my-zsh/plugins/otp/README.md
new file mode 100644
index 0000000..8331fd0
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/otp/README.md
@@ -0,0 +1,22 @@
+# otp plugin
+
+This plugin allows you to create one-time passwords using [`oathtool`](https://www.nongnu.org/oath-toolkit/man-oathtool.html),
+able to replace MFA devices. The oathtool key is kept in a GPG-encrypted file so the codes
+can only be generated by a user able to decrypt it.
+
+To use it, add `otp` to the plugins array in your zshrc file:
+```zsh
+plugins=(... otp)
+```
+
+Provided aliases:
+
+- `otp_add_device`: creates a new encrypted storage for an oathtool key and stores it
+ on the disk. For encrypting the key, it will ask for a GPG user ID (your GPG key's
+ email address). Then the OTP key needs to be pasted, followed by a CTRL+D character
+ inserted on an empty line.
+
+- `ot`: generates a MFA code based on the given key and copies it to the clipboard
+ (on Linux it relies on xsel, on MacOS X it uses pbcopy instead).
+
+The plugin uses `$HOME/.otp` to store its internal files.
diff --git a/zsh/.oh-my-zsh/plugins/otp/otp.plugin.zsh b/zsh/.oh-my-zsh/plugins/otp/otp.plugin.zsh
new file mode 100644
index 0000000..8be125c
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/otp/otp.plugin.zsh
@@ -0,0 +1,45 @@
+export OTP_HOME=~/.otp
+mkdir -p $OTP_HOME
+
+function ot () {
+ if ! command -v oathtool > /dev/null 2>&1; then
+ echo "Note: you need to install oathtool or oath-toolkit, depending on your OS or distribution."
+ return 1
+ fi
+
+ if ! command -v gpg > /dev/null 2>&1; then
+ echo "Note: you need to install gpg and create an ID using 'gpg --gen-key', unless you have one already."
+ return 1
+ fi
+
+ COPY_CMD='true'
+
+ if [[ -z "$1" ]]; then
+ echo "usage: $0 "
+ return 1
+ elif [ ! -f $OTP_HOME/$1.otp.asc ]; then
+ echo "missing profile $1, you might need to create it first using otp_add_device"
+ return 1
+ else
+ totpkey=$(gpg --decrypt $OTP_HOME/$1.otp.asc)
+ oathtool --totp --b $totpkey | tee /dev/stderr | clipcopy
+ fi
+}
+
+function otp_add_device () {
+ if [[ "x$1" == "x" ]] then
+ echo "usage: $0 "
+ return 1
+ else
+ echo "Enter an email address attached to your GPG private key, then paste the secret configuration key followed by ^D"
+
+ rm -f $OTP_HOME/$1.otp.asc
+ gpg --armor --encrypt --output $OTP_HOME/$1.otp.asc /dev/stdin
+ fi
+}
+
+function otp_devices () {
+ reply=($(find $OTP_HOME -name \*.otp.asc | xargs basename -s .otp.asc))
+}
+
+compctl -K otp_devices ot
diff --git a/zsh/.oh-my-zsh/plugins/pass/README.md b/zsh/.oh-my-zsh/plugins/pass/README.md
new file mode 100644
index 0000000..2b07049
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pass/README.md
@@ -0,0 +1,22 @@
+# pass
+
+This plugin provides completion for the [pass](https://www.passwordstore.org/) password manager.
+
+To use it, add `pass` to the plugins array in your zshrc file.
+
+```
+plugins=(... pass)
+```
+
+## Configuration
+
+### Multiple repositories
+
+If you use multiple repositories, you can configure completion like this:
+```zsh
+compdef _pass workpass
+zstyle ':completion::complete:workpass::' prefix "$HOME/work/pass"
+workpass() {
+ PASSWORD_STORE_DIR=$HOME/work/pass pass $@
+}
+```
diff --git a/zsh/.oh-my-zsh/plugins/pass/_pass b/zsh/.oh-my-zsh/plugins/pass/_pass
new file mode 100644
index 0000000..5f3b8f5
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pass/_pass
@@ -0,0 +1,145 @@
+#compdef pass
+#autoload
+
+# Copyright (C) 2012 - 2014:
+# Johan Venant
+# Brian Mattern
+# Jason A. Donenfeld .
+# All Rights Reserved.
+# This file is licensed under the GPLv2+.
+# Please visit https://git.zx2c4.com/password-store/tree/COPYING for more information.
+
+
+# If you use multiple repositories, you can configure completion like this:
+#
+# compdef _pass workpass
+# zstyle ':completion::complete:workpass::' prefix "$HOME/work/pass"
+# workpass() {
+# PASSWORD_STORE_DIR=$HOME/work/pass pass $@
+# }
+
+
+_pass () {
+ local cmd
+ if (( CURRENT > 2)); then
+ cmd=${words[2]}
+ # Set the context for the subcommand.
+ curcontext="${curcontext%:*:*}:pass-$cmd"
+ # Narrow the range of words we are looking at to exclude `pass'
+ (( CURRENT-- ))
+ shift words
+ # Run the completion for the subcommand
+ case "${cmd}" in
+ init)
+ _arguments : \
+ "-p[gpg-id will only be applied to this subfolder]" \
+ "--path[gpg-id will only be applied to this subfolder]"
+ _pass_complete_keys
+ ;;
+ ls|list|edit)
+ _pass_complete_entries_with_subdirs
+ ;;
+ insert)
+ _arguments : \
+ "-e[echo password to console]" \
+ "--echo[echo password to console]" \
+ "-m[multiline]" \
+ "--multiline[multiline]"
+ _pass_complete_entries_with_subdirs
+ ;;
+ generate)
+ _arguments : \
+ "-n[don't include symbols in password]" \
+ "--no-symbols[don't include symbols in password]" \
+ "-c[copy password to the clipboard]" \
+ "--clip[copy password to the clipboard]" \
+ "-f[force overwrite]" \
+ "--force[force overwrite]" \
+ "-i[replace first line]" \
+ "--in-place[replace first line]"
+ _pass_complete_entries_with_subdirs
+ ;;
+ cp|copy|mv|rename)
+ _arguments : \
+ "-f[force rename]" \
+ "--force[force rename]"
+ _pass_complete_entries_with_subdirs
+ ;;
+ rm)
+ _arguments : \
+ "-f[force deletion]" \
+ "--force[force deletion]" \
+ "-r[recursively delete]" \
+ "--recursive[recursively delete]"
+ _pass_complete_entries_with_subdirs
+ ;;
+ git)
+ local -a subcommands
+ subcommands=(
+ "init:Initialize git repository"
+ "push:Push to remote repository"
+ "pull:Pull from remote repository"
+ "config:Show git config"
+ "log:Show git log"
+ "reflog:Show git reflog"
+ )
+ _describe -t commands 'pass git' subcommands
+ ;;
+ show|*)
+ _pass_cmd_show
+ ;;
+ esac
+ else
+ local -a subcommands
+ subcommands=(
+ "init:Initialize new password storage"
+ "ls:List passwords"
+ "find:Find password files or directories based on pattern"
+ "grep:Search inside decrypted password files for matching pattern"
+ "show:Decrypt and print a password"
+ "insert:Insert a new password"
+ "generate:Generate a new password using pwgen"
+ "edit:Edit a password with \$EDITOR"
+ "mv:Rename the password"
+ "cp:Copy the password"
+ "rm:Remove the password"
+ "git:Call git on the password store"
+ "version:Output version information"
+ "help:Output help message"
+ )
+ _describe -t commands 'pass' subcommands
+ _arguments : \
+ "--version[Output version information]" \
+ "--help[Output help message]"
+ _pass_cmd_show
+ fi
+}
+
+_pass_cmd_show () {
+ _arguments : \
+ "-c[put it on the clipboard]" \
+ "--clip[put it on the clipboard]"
+ _pass_complete_entries
+}
+_pass_complete_entries_helper () {
+ local IFS=$'\n'
+ local prefix
+ zstyle -s ":completion:${curcontext}:" prefix prefix || prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
+ _values -C 'passwords' ${$(find -L "$prefix" \( -name .git -o -name .gpg-id \) -prune -o $@ -print 2>/dev/null | sed -e "s#${prefix}/\{0,1\}##" -e 's#\.gpg##' -e 's#\\#\\\\#' | sort):-""}
+}
+
+_pass_complete_entries_with_subdirs () {
+ _pass_complete_entries_helper
+}
+
+_pass_complete_entries () {
+ _pass_complete_entries_helper -type f
+}
+
+_pass_complete_keys () {
+ local IFS=$'\n'
+ # Extract names and email addresses from gpg --list-keys
+ _values 'gpg keys' $(gpg2 --list-secret-keys --with-colons | cut -d : -f 10 | sort -u | sed '/^$/d')
+}
+
+_pass
diff --git a/zsh/.oh-my-zsh/plugins/paver/README.md b/zsh/.oh-my-zsh/plugins/paver/README.md
new file mode 100644
index 0000000..c38d898
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/paver/README.md
@@ -0,0 +1,12 @@
+# Paver
+
+This plugin adds completion for the `paver` command-line tool of [Paver](https://pythonhosted.org/Paver/).
+
+To use it, add `paver` to the plugins array of your zshrc file:
+```zsh
+plugins=(... paver)
+```
+
+The completion function creates a cache of paver tasks with the name `.paver_tasks`,
+in the current working directory. It regenerates that cache when the `pavement.py`
+changes.
diff --git a/zsh/.oh-my-zsh/plugins/paver/paver.plugin.zsh b/zsh/.oh-my-zsh/plugins/paver/paver.plugin.zsh
new file mode 100644
index 0000000..7e70ea3
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/paver/paver.plugin.zsh
@@ -0,0 +1,16 @@
+_paver_does_target_list_need_generating () {
+ [ ! -f .paver_targets ] && return 0
+ [ pavement.py -nt .paver_targets ] && return 0
+ return 1
+}
+
+_paver () {
+ if [ -f pavement.py ]; then
+ if _paver_does_target_list_need_generating; then
+ paver --help 2>&1 |grep '-'|grep -v -e '--'|awk -F '-' '{print $1}'|tr -d ' ' > .paver_targets
+ fi
+ compadd `cat .paver_targets`
+ fi
+}
+
+compdef _paver paver
diff --git a/zsh/.oh-my-zsh/plugins/pep8/README.md b/zsh/.oh-my-zsh/plugins/pep8/README.md
new file mode 100644
index 0000000..a9a4f1c
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pep8/README.md
@@ -0,0 +1,8 @@
+# pep8 plugin
+
+This plugin adds completion for [pep8](https://pep8.readthedocs.io/en/release-1.7.x/#), a tool to check your Python code against some of the style conventions in [PEP 8](http://www.python.org/dev/peps/pep-0008/).
+
+To use it, add pep8 to the plugins array of your zshrc file:
+```
+plugins=(... pep8)
+```
diff --git a/zsh/.oh-my-zsh/plugins/pep8/_pep8 b/zsh/.oh-my-zsh/plugins/pep8/_pep8
new file mode 100644
index 0000000..ce19951
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pep8/_pep8
@@ -0,0 +1,34 @@
+#compdef pep8
+#
+# this is zsh completion function file.
+# generated by genzshcomp(ver: 0.5.1)
+#
+
+typeset -A opt_args
+local context state line
+
+_arguments -s -S \
+ "--help[show this help message and exit]:" \
+ "-h[show this help message and exit]:" \
+ "--version[show program's version number and exit]:" \
+ "--verbose[print status messages, or debug with -vv]" \
+ "-v[print status messages, or debug with -vv]" \
+ "--quiet[report only file names, or nothing with -qq]" \
+ "-q[report only file names, or nothing with -qq]" \
+ "--repeat[(obsolete) show all occurrences of the same error]" \
+ "-r[(obsolete) show all occurrences of the same error]" \
+ "--first[show first occurrence of each error]" \
+ "--exclude[exclude files or directories which match these comma separated patterns (default: .svn,CVS,.bzr,.hg,.git,__pycache__)]::patterns:_files" \
+ "--filename[when parsing directories, only check filenames matching these comma separated patterns (default: *.py)]::patterns:_files" \
+ "--select[select errors and warnings (e.g. E,W6)]::errors:_files" \
+ "--ignore[skip errors and warnings (e.g. E4,W)]::errors:_files" \
+ "--show-source[show source code for each error]" \
+ "--show-pep8[show text of PEP 8 for each error (implies --first)]" \
+ "--statistics[count errors and warnings]" \
+ "--count[print total number of errors and warnings to standard error and set exit code to 1 if total is not null]" \
+ "--max-line-length[set maximum allowed line length (default: 79)]::n:_files" \
+ "--format[set the error format \[default|pylint|\]]::format:_files" \
+ "--diff[report only lines changed according to the unified diff received on STDIN]" \
+ "--benchmark[measure processing speed are read from the \[pep8\] section of the tox.ini fg file located in any parent folder of the path(s) llowed options are: exclude, filename, select, ngth, count, format, quiet, show-pep8, show-source, .]" \
+ "--config[user config file location (default: /home/gsemet/.config/pep8)]::path:_files" \
+ "*::args:_files"
diff --git a/zsh/.oh-my-zsh/plugins/per-directory-history/README.md b/zsh/.oh-my-zsh/plugins/per-directory-history/README.md
new file mode 100644
index 0000000..69854aa
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/per-directory-history/README.md
@@ -0,0 +1,48 @@
+per-directory-history plugin
+----------------------------
+
+This plugin adds per-directory history for zsh, as well as a global history,
+and the ability to toggle between them with a keyboard shortcut. This is a
+bundle of the [official plugin by @jimhester][5].
+
+To use it, add `per-directory-history` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... per-directory-history)
+```
+
+This is an implementation of per-directory history for zsh, some implementations
+of which exist in bash[1][],[2][]. It also implements a toggle-history function
+to change from using the directory history to using the global history. In both
+cases the history is always saved to both the global history and the directory
+history, so the toggle state will not effect the saved histories. Being able to
+switch between global and directory histories on the fly is a novel feature.
+
+## Usage
+
+The default mode is per directory history, interact with your history as normal.
+
+Press ^G (the Control and G keys simultaneously) to toggle
+between local and global histories. If you would prefer a different shortcut to
+toggle set the `PER_DIRECTORY_HISTORY_TOGGLE` environment variable.
+
+## Configuration
+
+* `HISTORY_BASE` is a global variable that defines the base directory in which the
+ directory histories are stored (default `$HOME/.directory_history`).
+* `per-directory-history-toggle-history` is the function to toggle between local
+ and global histories.
+* `PER_DIRECTORY_HISTORY_TOGGLE` is the key binding used to run the toggle-history
+ function above (default `^G`)
+
+## History
+
+The idea/inspiration for a per directory history is from [Stewart MacArthur][1]
+and [Dieter][2], the implementation idea is from [Bart Schaefer][3]. The
+implementation is by [Jim Hester][4] in September 2012.
+
+[1]: http://www.compbiome.com/2010/07/bash-per-directory-bash-history.html
+[2]: http://dieter.plaetinck.be/per_directory_bash
+[3]: https://www.zsh.org/mla/users/1997/msg00226.html
+[4]: https://jimhester.com
+[5]: https://github.com/jimhester/per-directory-history
diff --git a/zsh/.oh-my-zsh/plugins/per-directory-history/per-directory-history.plugin.zsh b/zsh/.oh-my-zsh/plugins/per-directory-history/per-directory-history.plugin.zsh
new file mode 120000
index 0000000..142d954
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/per-directory-history/per-directory-history.plugin.zsh
@@ -0,0 +1 @@
+per-directory-history.zsh
\ No newline at end of file
diff --git a/zsh/.oh-my-zsh/plugins/per-directory-history/per-directory-history.zsh b/zsh/.oh-my-zsh/plugins/per-directory-history/per-directory-history.zsh
new file mode 100644
index 0000000..41de2f9
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/per-directory-history/per-directory-history.zsh
@@ -0,0 +1,156 @@
+#!/usr/bin/env zsh
+#
+# This is a implementation of per directory history for zsh, some
+# implementations of which exist in bash[1,2]. It also implements
+# a per-directory-history-toggle-history function to change from using the
+# directory history to using the global history. In both cases the history is
+# always saved to both the global history and the directory history, so the
+# toggle state will not effect the saved histories. Being able to switch
+# between global and directory histories on the fly is a novel feature as far
+# as I am aware.
+#
+#-------------------------------------------------------------------------------
+# Configuration
+#-------------------------------------------------------------------------------
+#
+# HISTORY_BASE a global variable that defines the base directory in which the
+# directory histories are stored
+#
+#-------------------------------------------------------------------------------
+# History
+#-------------------------------------------------------------------------------
+#
+# The idea/inspiration for a per directory history is from Stewart MacArthur[1]
+# and Dieter[2], the implementation idea is from Bart Schaefer on the the zsh
+# mailing list[3]. The implementation is by Jim Hester in September 2012.
+#
+# [1]: http://www.compbiome.com/2010/07/bash-per-directory-bash-history.html
+# [2]: http://dieter.plaetinck.be/per_directory_bash
+# [3]: http://www.zsh.org/mla/users/1997/msg00226.html
+#
+################################################################################
+#
+# Copyright (c) 2014 Jim Hester
+#
+# This software is provided 'as-is', without any express or implied warranty.
+# In no event will the authors be held liable for any damages arising from the
+# use of this software.
+#
+# Permission is granted to anyone to use this software for any purpose,
+# including commercial applications, and to alter it and redistribute it
+# freely, subject to the following restrictions:
+#
+# 1. The origin of this software must not be misrepresented; you must not claim
+# that you wrote the original software. If you use this software in a product,
+# an acknowledgment in the product documentation would be appreciated but is
+# not required.
+#
+# 2. Altered source versions must be plainly marked as such, and must not be
+# misrepresented as being the original software.
+#
+# 3. This notice may not be removed or altered from any source distribution..
+#
+################################################################################
+
+#-------------------------------------------------------------------------------
+# configuration, the base under which the directory histories are stored
+#-------------------------------------------------------------------------------
+
+[[ -z $HISTORY_BASE ]] && HISTORY_BASE="$HOME/.directory_history"
+[[ -z $PER_DIRECTORY_HISTORY_TOGGLE ]] && PER_DIRECTORY_HISTORY_TOGGLE='^G'
+
+#-------------------------------------------------------------------------------
+# toggle global/directory history used for searching - ctrl-G by default
+#-------------------------------------------------------------------------------
+
+function per-directory-history-toggle-history() {
+ if [[ $_per_directory_history_is_global == true ]]; then
+ _per-directory-history-set-directory-history
+ print -n "\nusing local history"
+ else
+ _per-directory-history-set-global-history
+ print -n "\nusing global history"
+ fi
+ zle .push-line
+ zle .accept-line
+}
+
+autoload per-directory-history-toggle-history
+zle -N per-directory-history-toggle-history
+bindkey $PER_DIRECTORY_HISTORY_TOGGLE per-directory-history-toggle-history
+
+#-------------------------------------------------------------------------------
+# implementation details
+#-------------------------------------------------------------------------------
+
+_per_directory_history_directory="$HISTORY_BASE${PWD:A}/history"
+
+function _per-directory-history-change-directory() {
+ _per_directory_history_directory="$HISTORY_BASE${PWD:A}/history"
+ mkdir -p ${_per_directory_history_directory:h}
+ if [[ $_per_directory_history_is_global == false ]]; then
+ #save to the global history
+ fc -AI $HISTFILE
+ #save history to previous file
+ local prev="$HISTORY_BASE${OLDPWD:A}/history"
+ mkdir -p ${prev:h}
+ fc -AI $prev
+
+ #discard previous directory's history
+ local original_histsize=$HISTSIZE
+ HISTSIZE=0
+ HISTSIZE=$original_histsize
+
+ #read history in new file
+ if [[ -e $_per_directory_history_directory ]]; then
+ fc -R $_per_directory_history_directory
+ fi
+ fi
+}
+
+function _per-directory-history-addhistory() {
+ # respect hist_ignore_space
+ if [[ -o hist_ignore_space ]] && [[ "$1" == \ * ]]; then
+ true
+ else
+ print -Sr -- "${1%%$'\n'}"
+ fc -p $_per_directory_history_directory
+ fi
+}
+
+
+function _per-directory-history-set-directory-history() {
+ if [[ $_per_directory_history_is_global == true ]]; then
+ fc -AI $HISTFILE
+ local original_histsize=$HISTSIZE
+ HISTSIZE=0
+ HISTSIZE=$original_histsize
+ if [[ -e "$_per_directory_history_directory" ]]; then
+ fc -R "$_per_directory_history_directory"
+ fi
+ fi
+ _per_directory_history_is_global=false
+}
+function _per-directory-history-set-global-history() {
+ if [[ $_per_directory_history_is_global == false ]]; then
+ fc -AI $_per_directory_history_directory
+ local original_histsize=$HISTSIZE
+ HISTSIZE=0
+ HISTSIZE=$original_histsize
+ if [[ -e "$HISTFILE" ]]; then
+ fc -R "$HISTFILE"
+ fi
+ fi
+ _per_directory_history_is_global=true
+}
+
+
+#add functions to the exec list for chpwd and zshaddhistory
+autoload -U add-zsh-hook
+add-zsh-hook chpwd _per-directory-history-change-directory
+add-zsh-hook zshaddhistory _per-directory-history-addhistory
+
+#start in directory mode
+mkdir -p ${_per_directory_history_directory:h}
+_per_directory_history_is_global=true
+_per-directory-history-set-directory-history
diff --git a/zsh/.oh-my-zsh/plugins/percol/README.md b/zsh/.oh-my-zsh/plugins/percol/README.md
new file mode 100644
index 0000000..ec5de4f
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/percol/README.md
@@ -0,0 +1,20 @@
+## percol
+
+Provides some useful function to make [percol](https://github.com/mooz/percol) work with zsh history and [jump plugin](https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/jump/jump.plugin.zsh)
+
+### Requirements
+
+```shell
+pip install percol
+```
+
+And [jump](https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/jump/jump.plugin.zsh) for `oh-my-zsh` is a optional requirement.
+
+### Usage
+
+For default
+
+- `^-r` bind to `percol_select_history`.You can use it to grep your history with percol.
+
+- `^-b` bind to `percol_select_marks`.You can use it to grep your bookmarks with percol.
+
diff --git a/zsh/.oh-my-zsh/plugins/percol/percol.plugin.zsh b/zsh/.oh-my-zsh/plugins/percol/percol.plugin.zsh
new file mode 100644
index 0000000..c6adf4e
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/percol/percol.plugin.zsh
@@ -0,0 +1,22 @@
+if which percol &> /dev/null; then
+ function percol_select_history() {
+ local tac
+ which gtac &> /dev/null && tac="gtac" || { which tac &> /dev/null && tac="tac" || { tac="tail -r" } }
+ BUFFER=$(fc -l -n 1 | eval $tac | percol --query "$LBUFFER")
+ CURSOR=$#BUFFER
+ zle -R -c
+ }
+
+ zle -N percol_select_history
+ bindkey '^R' percol_select_history
+
+ if which marks &> /dev/null; then
+ function percol_select_marks() {
+ BUFFER=$(marks | percol --query "$LBUFFER" | awk '{print $3}')
+ CURSOR=$#BUFFER # move cursor
+ zle -R -c # refresh
+ }
+ zle -N percol_select_marks
+ bindkey '^B' percol_select_marks
+ fi
+fi
diff --git a/zsh/.oh-my-zsh/plugins/perl/README.md b/zsh/.oh-my-zsh/plugins/perl/README.md
new file mode 100644
index 0000000..dd9b7dc
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/perl/README.md
@@ -0,0 +1,37 @@
+# Perl
+
+This plugin adds [perl](https://www.perl.org/) useful aliases/functions.
+
+To use it, add `perl` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... perl)
+```
+
+## Aliases
+
+| Aliases | Command | Description |
+| :------------ | :----------------- | :------------------------------------- |
+| pbi | `perlbrew install` | Install specific perl version |
+| pbl | `perlbrew list` | List all perl version installed |
+| pbo | `perlbrew off` | Go back to the system perl |
+| pbs | `perlbrew switch` | Turn it back on |
+| pbu | `perlbrew use` | Use specific version of perl |
+| pd | `perldoc` | Show the perl documentation |
+| ple | `perl -wlne` | Use perl like awk/sed |
+| latest-perl | `curl ...` | Show the latest stable release of Perl |
+
+## Functions
+
+* `newpl`: creates a basic Perl script file and opens it with $EDITOR.
+
+* `pgs`: Perl Global Substitution: `pgs `
+ Looks for `` and replaces it with `` in ``.
+
+* `prep`: Perl grep, because 'grep -P' is terrible: `prep []`
+ Lets you work with pipes or files (if no `` provided, use stdin).
+
+## Requirements
+
+In order to make this work, you will need to have perl installed.
+More info on the usage and install: https://www.perl.org/get.html
diff --git a/zsh/.oh-my-zsh/plugins/perl/perl.plugin.zsh b/zsh/.oh-my-zsh/plugins/perl/perl.plugin.zsh
new file mode 100644
index 0000000..678e88d
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/perl/perl.plugin.zsh
@@ -0,0 +1,56 @@
+# https://github.com/dbbolton
+#
+# Below are some useful Perl-related aliases/functions that I use with zsh.
+
+
+# Aliases ###################################################################
+
+# perlbrew ########
+alias pbi='perlbrew install'
+alias pbl='perlbrew list'
+alias pbo='perlbrew off'
+alias pbs='perlbrew switch'
+alias pbu='perlbrew use'
+
+# Perl ############
+
+# perldoc`
+alias pd='perldoc'
+
+# use perl like awk/sed
+alias ple='perl -wlne'
+
+# show the latest stable release of Perl
+alias latest-perl='curl -s https://www.perl.org/get.html | perl -wlne '\''if (/perl\-([\d\.]+)\.tar\.gz/) { print $1; exit;}'\'
+
+
+
+# Functions #################################################################
+
+# newpl - creates a basic Perl script file and opens it with $EDITOR
+newpl () {
+ # set $EDITOR to 'vim' if it is undefined
+ [[ -z $EDITOR ]] && EDITOR=vim
+
+ # if the file exists, just open it
+ [[ -e $1 ]] && print "$1 exists; not modifying.\n" && $EDITOR $1
+
+ # if it doesn't, make it, and open it
+ [[ ! -e $1 ]] && print '#!/usr/bin/perl'"\n"'use strict;'"\n"'use warnings;'\
+ "\n\n" > $1 && $EDITOR $1
+}
+
+
+# pgs - Perl Global Substitution
+# find pattern = 1st arg
+# replace pattern = 2nd arg
+# filename = 3rd arg
+pgs() { # [find] [replace] [filename]
+ perl -i.orig -pe 's/'"$1"'/'"$2"'/g' "$3"
+}
+
+
+# Perl grep, because 'grep -P' is terrible. Lets you work with pipes or files.
+prep() { # [pattern] [filename unless STDOUT]
+ perl -nle 'print if /'"$1"'/;' $2
+}
diff --git a/zsh/.oh-my-zsh/plugins/perms/README.md b/zsh/.oh-my-zsh/plugins/perms/README.md
new file mode 100644
index 0000000..324b3f3
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/perms/README.md
@@ -0,0 +1,9 @@
+## Perms
+
+Plugin to handle some unix filesystem permissions quickly
+
+### Usage
+
+* `set755` recursively sets all given directories (default to .) to octal 755.
+* `set644` recursively sets all given files (default to .) to octal 644.
+* `fixperms` is a wrapper around `set755` and `set644` applied to a specified directory or the current directory otherwise. It also prompts prior to execution unlike the other two aliases.
diff --git a/zsh/.oh-my-zsh/plugins/perms/perms.plugin.zsh b/zsh/.oh-my-zsh/plugins/perms/perms.plugin.zsh
new file mode 100644
index 0000000..1a7472c
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/perms/perms.plugin.zsh
@@ -0,0 +1,82 @@
+# Some useful commands for setting permissions.
+#
+# Rory Hardy [GneatGeek]
+# Andrew Janke [apjanke]
+
+### Aliases
+
+# Set all files' permissions to 644 recursively in a directory
+set644() {
+ find "${@:-.}" -type f ! -perm 644 -print0 | xargs -0 chmod 644
+}
+
+# Set all directories' permissions to 755 recursively in a directory
+set755() {
+ find "${@:-.}" -type d ! -perm 755 -print0 | xargs -0 chmod 755
+}
+
+### Functions
+
+# fixperms - fix permissions on files and directories, with confirmation
+# Returns 0 on success, nonzero if any errors occurred
+fixperms () {
+ local opts confirm target exit_status chmod_opts use_slow_mode
+ zparseopts -E -D -a opts -help -slow v+=chmod_opts
+ if [[ $# > 1 || -n "${opts[(r)--help]}" ]]; then
+ cat < 1 ))
+ return $exit_status
+ fi
+
+ if [[ $# == 0 ]]; then
+ target="."
+ else
+ target="$1"
+ fi
+ if [[ -n ${opts[(r)--slow]} ]]; then use_slow=true; else use_slow=false; fi
+
+ # Because this requires confirmation, bail in noninteractive shells
+ if [[ ! -o interactive ]]; then
+ echo "fixperms: cannot run in noninteractive shell"
+ return 1
+ fi
+
+ echo "Fixing perms on $target?"
+ printf '%s' "Proceed? (y|n) "
+ read confirm
+ if [[ "$confirm" != y ]]; then
+ # User aborted
+ return 1
+ fi
+
+ # This xargs form is faster than -exec chmod {} \; but will encounter
+ # issues if the directories themselves have permissions such that you can't
+ # recurse in to them. If that happens, just rerun this a few times.
+ exit_status=0;
+ if [[ $use_slow == true ]]; then
+ # Process directories first so non-traversable ones are fixed as we go
+ find "$target" -type d ! -perm 755 -exec chmod $chmod_opts 755 {} \;
+ if [[ $? != 0 ]]; then exit_status=$?; fi
+ find "$target" -type f ! -perm 644 -exec chmod $chmod_opts 644 {} \;
+ if [[ $? != 0 ]]; then exit_status=$?; fi
+ else
+ find "$target" -type d ! -perm 755 -print0 | xargs -0 chmod $chmod_opts 755
+ if [[ $? != 0 ]]; then exit_status=$?; fi
+ find "$target" -type f ! -perm 644 -print0 | xargs -0 chmod $chmod_opts 644
+ if [[ $? != 0 ]]; then exit_status=$?; fi
+ fi
+ echo "Complete"
+ return $exit_status
+}
diff --git a/zsh/.oh-my-zsh/plugins/phing/README.md b/zsh/.oh-my-zsh/plugins/phing/README.md
new file mode 100644
index 0000000..e2ac0bd
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/phing/README.md
@@ -0,0 +1,8 @@
+# Phing plugin
+
+This plugin adds autocompletion for [`phing`](https://github.com/phingofficial/phing) targets.
+
+To use it, add `phing` to the plugins array of your `.zshrc` file:
+```
+plugins=(... eecms)
+```
diff --git a/zsh/.oh-my-zsh/plugins/phing/phing.plugin.zsh b/zsh/.oh-my-zsh/plugins/phing/phing.plugin.zsh
new file mode 100644
index 0000000..d5a2649
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/phing/phing.plugin.zsh
@@ -0,0 +1,7 @@
+_phing () {
+ if [ -f build.xml ]; then
+ compadd $(phing -l|grep -v "\[property\]"|grep -v "Buildfile"|sed 1d|grep -v ":$" |grep -v "^\-*$"|grep -v "Warning:"|awk '{print $1}')
+ fi
+}
+
+compdef _phing phing
diff --git a/zsh/.oh-my-zsh/plugins/pip/README.md b/zsh/.oh-my-zsh/plugins/pip/README.md
new file mode 100644
index 0000000..f07b5c0
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pip/README.md
@@ -0,0 +1,19 @@
+# pip plugin
+
+This plugin adds completion for [pip](https://pip.pypa.io/en/latest/),
+the Python package manager.
+
+To use it, add `pip` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... pip)
+```
+
+## pip cache
+
+The pip plugin caches the names of available pip packages from the PyPI index.
+To trigger the caching process, try to complete `pip install`,
+or you can run `zsh-pip-cache-packages` directly.
+
+To reset the cache, run `zsh-pip-clear-cache` and it will be rebuilt next
+the next time you autocomplete `pip install`.
diff --git a/zsh/.oh-my-zsh/plugins/pip/_pip b/zsh/.oh-my-zsh/plugins/pip/_pip
new file mode 100644
index 0000000..607f68e
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pip/_pip
@@ -0,0 +1,99 @@
+#compdef pip pip2 pip-2.7 pip3 pip-3.2 pip-3.3 pip-3.4
+#autoload
+
+# pip zsh completion, based on last stable release (pip8)
+# homebrew completion and backwards compatibility
+
+_pip_all() {
+ # we cache the list of packages (originally from the macports plugin)
+ if (( ! $+piplist )); then
+ zsh-pip-cache-packages
+ piplist=($(cat $ZSH_PIP_CACHE_FILE))
+ fi
+}
+
+_pip_installed() {
+ installed_pkgs=(`pip freeze | cut -d '=' -f 1`)
+}
+
+local -a _1st_arguments
+_1st_arguments=(
+ 'install:install packages'
+ 'download:download packages'
+ 'uninstall:uninstall packages'
+ 'freeze:output all currently installed packages (exact versions) to stdout'
+ 'list:list installed packages'
+ 'show:show information about installed packages'
+ 'search:search PyPI'
+ 'wheel:build individual wheel archives for your requirements and dependencies'
+ 'hash:compute a hash of a local package archive'
+ 'help:show available commands'
+ 'bundle:create pybundles (archives containing multiple packages)(deprecated)'
+ 'unzip:unzip individual packages(deprecated)'
+ 'zip:zip individual packages(deprecated)'
+)
+
+local expl
+local -a all_pkgs installed_pkgs
+
+_arguments \
+ '(-h --help)'{-h,--help}'[show help]' \
+ '(--isolated)--isolated[run pip in isolated mode, ignores environment variables and user configuration]' \
+ '(-v --verbose)'{-v,--verbose}'[give more output]' \
+ '(-V --version)'{-V,--version}'[show version number of program and exit]' \
+ '(-q --quiet)'{-q,--quiet}'[give less output]' \
+ '(--log)--log[log file location]' \
+ '(--proxy)--proxy[proxy in form user:passwd@proxy.server:port]' \
+ '(--retries)--retries[max number of retries per connection (default 5 times)]' \
+ '(--timeout)--timeout[socket timeout (default 15s)]' \
+ '(--exists-action)--exists-action[default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup]' \
+ '(--trusted-host)--trusted-host[mark this host as trusted]' \
+ '(--cert)--cert[path to alternate CA bundle]' \
+ '(--client-cert)--client-cert[path to SSL client certificate]' \
+ '(--cache-dir)--cache-dir[store the cache data in specified directory]' \
+ '(--no-cache-dir)--no-cache-dir[disable de cache]' \
+ '(--disable-pip-version-check)--disable-pip-version-check[do not check periodically for new pip version downloads]' \
+ '(-E --environment)'{-E,--environment}'[virtualenv environment to run pip in (deprecated)]' \
+ '(-s --enable-site-packages)'{-s,--enable-site-packages}'[include site-packages in virtualenv (deprecated)]' \
+ '*:: :->subcmds' && return 0
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "pip subcommand" _1st_arguments
+ return
+fi
+
+case "$words[1]" in
+ search)
+ _arguments \
+ '(--index)--index[base URL of Python Package Index]' ;;
+ freeze)
+ _arguments \
+ '(-l --local)'{-l,--local}'[report only virtualenv packages]' ;;
+ install)
+ _arguments \
+ '(-U --upgrade)'{-U,--upgrade}'[upgrade all packages to the newest available version]' \
+ '(--user)--user[install packages to user home]' \
+ '(-f --find-links)'{-f,--find-links}'[URL for finding packages]' \
+ '(-r --requirement)'{-r,--requirement}'[Requirements file for packages to install]:File:_files' \
+ '(--no-deps --no-dependencies)'{--no-deps,--no-dependencies}'[iIgnore package dependencies]' \
+ '(--no-install)--no-install[only download packages]' \
+ '(--no-download)--no-download[only install downloaded packages]' \
+ '(--install-option)--install-option[extra arguments to be supplied to the setup.py]' \
+ '(--single-version-externally-managed)--single-version-externally-managed[do not download/install dependencies. requires --record or --root]'\
+ '(--root)--root[treat this path as a fake chroot, installing into it. implies --single-version-externally-managed]'\
+ '(--record)--record[file to record all installed files to.]'\
+ '(-r --requirement)'{-r,--requirement}'[requirements file]: :_files'\
+ '(-e --editable)'{-e,--editable}'[path of or url to source to link to instead of installing.]: :_files -/'\
+ '1: :->packages' && return 0
+
+ if [[ "$state" == packages ]]; then
+ _pip_all
+ _wanted piplist expl 'packages' compadd -a piplist
+ fi ;;
+ uninstall)
+ _pip_installed
+ _wanted installed_pkgs expl 'installed packages' compadd -a installed_pkgs ;;
+ show)
+ _pip_installed
+ _wanted installed_pkgs expl 'installed packages' compadd -a installed_pkgs ;;
+esac
diff --git a/zsh/.oh-my-zsh/plugins/pip/pip.plugin.zsh b/zsh/.oh-my-zsh/plugins/pip/pip.plugin.zsh
new file mode 100644
index 0000000..aaae901
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pip/pip.plugin.zsh
@@ -0,0 +1,82 @@
+# Usage:
+# Just add pip to your installed plugins.
+
+# If you would like to change the cheeseshops used for autocomplete set
+# ZSH_PIP_INDEXES in your zshrc. If one of your indexes are bogus you won't get
+# any kind of error message, pip will just not autocomplete from them. Double
+# check!
+#
+# If you would like to clear your cache, go ahead and do a
+# "zsh-pip-clear-cache".
+
+ZSH_PIP_CACHE_FILE=~/.pip/zsh-cache
+ZSH_PIP_INDEXES=(https://pypi.org/simple/)
+
+zsh-pip-clear-cache() {
+ rm $ZSH_PIP_CACHE_FILE
+ unset piplist
+}
+
+zsh-pip-clean-packages() {
+ sed -n '/\([^<]\{1,\}\).*/\1/p'
+}
+
+zsh-pip-cache-packages() {
+ if [[ ! -d ${ZSH_PIP_CACHE_FILE:h} ]]; then
+ mkdir -p ${ZSH_PIP_CACHE_FILE:h}
+ fi
+
+ if [[ ! -f $ZSH_PIP_CACHE_FILE ]]; then
+ echo -n "(...caching package index...)"
+ tmp_cache=/tmp/zsh_tmp_cache
+ touch $tmp_cache
+ for index in $ZSH_PIP_INDEXES ; do
+ # well... I've already got two problems
+ curl -L $index 2>/dev/null | \
+ zsh-pip-clean-packages \
+ >> $tmp_cache
+ done
+ sort $tmp_cache | uniq | tr '\n' ' ' > $ZSH_PIP_CACHE_FILE
+ rm $tmp_cache
+ fi
+}
+
+# A test function that validates the regex against known forms of the simple
+# index. If you modify the regex to make it work for you, you should add a test
+# case in here and make sure that your changes don't break things for someone
+# else.
+zsh-pip-test-clean-packages() {
+ local expected
+ local actual
+ expected="0x10c-asm
+1009558_nester"
+
+ actual=$(echo -n "Simple Index
+ 0x10c-asm
+1009558_nester
+" | zsh-pip-clean-packages)
+
+ if [[ $actual != $expected ]] ; then
+ echo -e "python's simple index is broken:\n$actual\n !=\n$expected"
+ else
+ echo "python's simple index is fine"
+ fi
+
+ actual=$(echo -n '
+
+ Simple Package Index
+
+
+ 0x10c-asm
+ 1009558_nester
+' | zsh-pip-clean-packages)
+
+ if [[ $actual != $expected ]] ; then
+ echo -e "the djangopypi2 index is broken:\n$actual\n !=\n$expected"
+ else
+ echo "the djangopypi2 index is fine"
+ fi
+}
+
+alias pip="noglob pip" # allows square brackets for pip command invocation
+
diff --git a/zsh/.oh-my-zsh/plugins/pipenv/README.md b/zsh/.oh-my-zsh/plugins/pipenv/README.md
new file mode 100644
index 0000000..ab1c1e4
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pipenv/README.md
@@ -0,0 +1,28 @@
+# Pipenv
+
+## Installation
+In your `.zshrc` file, add `pipenv` to the plugins section
+
+```
+plugins=(... pipenv ...)
+```
+
+## Features
+This plugin provides some features to simplify the use of Pipenv while working on ZSH.
+- Adds completion for pipenv
+- Auto activates and deactivates pipenv shell
+- Adds short aliases for common pipenv commands
+ - `pch` is aliased to `pipenv check`
+ - `pcl` is aliased to `pipenv clean`
+ - `pgr` is aliased to `pipenv graph`
+ - `pi` is aliased to `pipenv install`
+ - `pidev` is aliased to `pipenv install --dev`
+ - `pl` is aliased to `pipenv lock`
+ - `po` is aliased to `pipenv open`
+ - `prun` is aliased to `pipenv run`
+ - `psh` is aliased to `pipenv shell`
+ - `psy` is aliased to `pipenv sync`
+ - `pu` is aliased to `pipenv uninstall`
+ - `pwh` is aliased to `pipenv --where`
+ - `pvenv` is aliased to `pipenv --venv`
+ - `ppy` is aliased to `pipenv --py`
diff --git a/zsh/.oh-my-zsh/plugins/pipenv/pipenv.plugin.zsh b/zsh/.oh-my-zsh/plugins/pipenv/pipenv.plugin.zsh
new file mode 100644
index 0000000..ec41c3e
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pipenv/pipenv.plugin.zsh
@@ -0,0 +1,43 @@
+# Pipenv completion
+_pipenv() {
+ eval $(env COMMANDLINE="${words[1,$CURRENT]}" _PIPENV_COMPLETE=complete-zsh pipenv)
+}
+compdef _pipenv pipenv
+
+# Automatic pipenv shell activation/deactivation
+_togglePipenvShell() {
+ # deactivate shell if Pipfile doesn't exist and not in a subdir
+ if [[ ! -a "$PWD/Pipfile" ]]; then
+ if [[ "$PIPENV_ACTIVE" == 1 ]]; then
+ if [[ "$PWD" != "$pipfile_dir"* ]]; then
+ exit
+ fi
+ fi
+ fi
+
+ # activate the shell if Pipfile exists
+ if [[ "$PIPENV_ACTIVE" != 1 ]]; then
+ if [[ -a "$PWD/Pipfile" ]]; then
+ export pipfile_dir="$PWD"
+ pipenv shell
+ fi
+ fi
+}
+autoload -U add-zsh-hook
+add-zsh-hook chpwd _togglePipenvShell
+
+# Aliases
+alias pch="pipenv check"
+alias pcl="pipenv clean"
+alias pgr="pipenv graph"
+alias pi="pipenv install"
+alias pidev="pipenv install --dev"
+alias pl="pipenv lock"
+alias po="pipenv open"
+alias prun="pipenv run"
+alias psh="pipenv shell"
+alias psy="pipenv sync"
+alias pu="pipenv uninstall"
+alias pwh="pipenv --where"
+alias pvenv="pipenv --venv"
+alias ppy="pipenv --py"
diff --git a/zsh/.oh-my-zsh/plugins/pj/README.md b/zsh/.oh-my-zsh/plugins/pj/README.md
new file mode 100644
index 0000000..27e5638
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pj/README.md
@@ -0,0 +1,45 @@
+# pj
+
+The `pj` plugin (short for `Project Jump`) allows you to define several
+folders where you store your projects, so that you can jump there directly
+by just using the name of the project directory.
+
+Original idea and code by Jan De Poorter ([@DefV](https://github.com/DefV))
+Source: https://gist.github.com/pjaspers/368394#gistcomment-1016
+
+## Usage
+
+1. Enable the `pj` plugin:
+
+ ```zsh
+ plugins=(... pj)
+ ```
+
+2. Set `$PROJECT_PATHS` in your ~/.zshrc:
+
+ ```zsh
+ PROJECT_PATHS=(~/src ~/work ~/"dir with spaces")
+ ```
+
+You can now use one of the following commands:
+
+##### `pj my-project`:
+
+`cd` to the directory named "my-project" found in one of the `$PROJECT_PATHS`
+directories. If there are several directories named the same, the first one
+to appear in `$PROJECT_PATHS` has preference.
+
+For example:
+```zsh
+PROJECT_PATHS=(~/code ~/work)
+$ ls ~/code # ~/code/blog ~/code/react
+$ ls ~/work # ~/work/blog ~/work/project
+$ pj blog # <-- will cd to ~/code/blog
+```
+
+##### `pjo my-project`
+
+Open the project directory with your defined `$EDITOR`. This follows the same
+directory rules as the `pj` command above.
+
+Note: `pjo` is an alias of `pj open`.
diff --git a/zsh/.oh-my-zsh/plugins/pj/pj.plugin.zsh b/zsh/.oh-my-zsh/plugins/pj/pj.plugin.zsh
new file mode 100644
index 0000000..e36d492
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pj/pj.plugin.zsh
@@ -0,0 +1,37 @@
+alias pjo="pj open"
+
+pj () {
+ emulate -L zsh
+
+ cmd="cd"
+ project=$1
+
+ if [[ "open" == "$project" ]]; then
+ shift
+ project=$*
+ cmd=${=EDITOR}
+ else
+ project=$*
+ fi
+
+ for basedir ($PROJECT_PATHS); do
+ if [[ -d "$basedir/$project" ]]; then
+ $cmd "$basedir/$project"
+ return
+ fi
+ done
+
+ echo "No such project '${project}'."
+}
+
+_pj () {
+ emulate -L zsh
+
+ typeset -a projects
+ for basedir ($PROJECT_PATHS); do
+ projects+=(${basedir}/*(/N))
+ done
+
+ compadd ${projects:t}
+}
+compdef _pj pj
diff --git a/zsh/.oh-my-zsh/plugins/please/README.md b/zsh/.oh-my-zsh/plugins/please/README.md
new file mode 100644
index 0000000..89bfbf1
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/please/README.md
@@ -0,0 +1,26 @@
+# please plugin
+
+[Please](https://please.build) is a cross-language build system with an emphasis on
+high performance, extensibility and reproduceability. It supports a number of popular
+languages and can automate nearly any aspect of your build process.
+
+This plugin adds autocomplete and major aliases for `plz`, the command line tool for
+Please.
+
+To use it, add `please` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... please)
+```
+
+## Aliases
+
+| Alias | Command |
+|-------|-------------|
+| `pb` | `plz build` |
+| `pt` | `plz test` |
+| `pw` | `plz watch` |
+
+## Maintainer
+
+[@thought-machine](https://github.com/thought-machine)
diff --git a/zsh/.oh-my-zsh/plugins/please/please.plugin.zsh b/zsh/.oh-my-zsh/plugins/please/please.plugin.zsh
new file mode 100644
index 0000000..0f58307
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/please/please.plugin.zsh
@@ -0,0 +1,7 @@
+if (( $+commands[plz] )); then
+ source <(plz --completion_script)
+fi
+
+alias pb='plz build'
+alias pt='plz test'
+alias pw='plz watch'
diff --git a/zsh/.oh-my-zsh/plugins/pod/README.md b/zsh/.oh-my-zsh/plugins/pod/README.md
new file mode 100644
index 0000000..0a3cc7a
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pod/README.md
@@ -0,0 +1,10 @@
+# pod
+
+This plugin adds completion for [`CocoaPods`](https://cocoapods.org/).
+CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects.
+
+To use it, add `pod` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... pod)
+```
diff --git a/zsh/.oh-my-zsh/plugins/pod/_pod b/zsh/.oh-my-zsh/plugins/pod/_pod
new file mode 100644
index 0000000..80d23da
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pod/_pod
@@ -0,0 +1,682 @@
+#compdef pod
+#autoload
+# setopt XTRACE VERBOSE
+# vim: ft=zsh sw=2 ts=2 et
+
+
+# -----------------------------------------------------------------------------
+# FILE: _pod
+# DESCRIPTION: Cocoapods (0.33.1) autocomplete plugin for Oh-My-Zsh
+# https://cocoapods.org
+# Generated with `pod --completion-script
+# AUTHOR: Alexandre Joly (alexandre.joly@mekanics.ch)
+# GITHUB: https://github.com/mekanics
+# TWITTER: @jolyAlexandre
+# VERSION: 0.0.5
+# -----------------------------------------------------------------------------
+
+local -a _subcommands
+local -a _options
+
+case "$words[2]" in
+ help)
+ case "$words[3]" in
+ *) # pod help
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod help options" _options
+ ;;
+ esac
+ ;;
+ ipc)
+ case "$words[3]" in
+ list)
+ case "$words[4]" in
+ *) # pod ipc list
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod ipc list options" _options
+ ;;
+ esac
+ ;;
+ podfile)
+ case "$words[4]" in
+ *) # pod ipc podfile
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod ipc podfile options" _options
+ ;;
+ esac
+ ;;
+ repl)
+ case "$words[4]" in
+ *) # pod ipc repl
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod ipc repl options" _options
+ ;;
+ esac
+ ;;
+ spec)
+ case "$words[4]" in
+ *) # pod ipc spec
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod ipc spec options" _options
+ ;;
+ esac
+ ;;
+ update-search-index)
+ case "$words[4]" in
+ *) # pod ipc update-search-index
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod ipc update-search-index options" _options
+ ;;
+ esac
+ ;;
+ *) # pod ipc
+ _subcommands=(
+ "list:Lists the specifications known to CocoaPods."
+ "podfile:Converts a Podfile to YAML."
+ "repl:The repl listens to commands on standard input."
+ "spec:Converts a podspec to JSON."
+ "update-search-index:Updates the search index."
+ )
+ _describe -t commands "pod ipc subcommands" _subcommands
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod ipc options" _options
+ ;;
+ esac
+ ;;
+ init)
+ case "$words[3]" in
+ *) # pod init
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod init options" _options
+ ;;
+ esac
+ ;;
+ install)
+ case "$words[3]" in
+ *) # pod install
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--no-clean:Leave SCM dirs like \`.git\` and \`.svn\` intact after downloading"
+ "--no-integrate:Skip integration of the Pods libraries in the Xcode project(s)"
+ "--no-repo-update:Skip running \`pod repo update\` before install"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod install options" _options
+ ;;
+ esac
+ ;;
+ lib)
+ case "$words[3]" in
+ create)
+ case "$words[4]" in
+ *) # pod lib create
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod lib create options" _options
+ ;;
+ esac
+ ;;
+ lint)
+ case "$words[4]" in
+ *) # pod lib lint
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--no-clean:Lint leaves the build directory intact for inspection"
+ "--no-subspecs:Lint skips validation of subspecs"
+ "--only-errors:Lint validates even if warnings are present"
+ "--quick:Lint skips checks that would require to download and build the spec"
+ "--silent:Show nothing"
+ "--subspec=NAME:Lint validates only the given subspec"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod lib lint options" _options
+ ;;
+ esac
+ ;;
+ *) # pod lib
+ _subcommands=(
+ "create:Creates a new Pod"
+ "lint:Validates a Pod"
+ )
+ _describe -t commands "pod lib subcommands" _subcommands
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod lib options" _options
+ ;;
+ esac
+ ;;
+ list)
+ case "$words[3]" in
+ new)
+ case "$words[4]" in
+ *) # pod list new
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--update:Run \`pod repo update\` before listing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod list new options" _options
+ ;;
+ esac
+ ;;
+ *) # pod list
+ _subcommands=(
+ "new:Lists pods introduced in the master spec-repo since the last check"
+ )
+ _describe -t commands "pod list subcommands" _subcommands
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--update:Run \`pod repo update\` before listing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod list options" _options
+ ;;
+ esac
+ ;;
+ outdated)
+ case "$words[3]" in
+ *) # pod outdated
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--no-repo-update:Skip running \`pod repo update\` before install"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod outdated options" _options
+ ;;
+ esac
+ ;;
+ plugins)
+ case "$words[3]" in
+ create)
+ case "$words[4]" in
+ *) # pod plugins create
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod plugins create options" _options
+ ;;
+ esac
+ ;;
+ list)
+ case "$words[4]" in
+ *) # pod plugins list
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod plugins list options" _options
+ ;;
+ esac
+ ;;
+ search)
+ case "$words[4]" in
+ *) # pod plugins search
+ _options=(
+ "--full:Search by name, author, and description"
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod plugins search options" _options
+ ;;
+ esac
+ ;;
+ *) # pod plugins
+ _subcommands=(
+ "create:Creates a new plugin"
+ "list:List all known plugins"
+ "search:Search for known plugins"
+ )
+ _describe -t commands "pod plugins subcommands" _subcommands
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod plugins options" _options
+ ;;
+ esac
+ ;;
+ push)
+ case "$words[3]" in
+ *) # pod push
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod push options" _options
+ ;;
+ esac
+ ;;
+ repo)
+ case "$words[3]" in
+ add)
+ case "$words[4]" in
+ *) # pod repo add
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--shallow:Create a shallow clone (fast clone, but no push capabilities)"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod repo add options" _options
+ ;;
+ esac
+ ;;
+ lint)
+ case "$words[4]" in
+ *) # pod repo lint
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--only-errors:Lint presents only the errors"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod repo lint options" _options
+ ;;
+ esac
+ ;;
+ push)
+ case "$words[4]" in
+ *) # pod repo push
+ _options=(
+ "--allow-warnings:Allows pushing even if there are warnings"
+ "--help:Show help banner of specified command"
+ "--local-only:Does not perform the step of pushing REPO to its remote"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod repo push options" _options
+ ;;
+ esac
+ ;;
+ remove)
+ case "$words[4]" in
+ *) # pod repo remove
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod repo remove options" _options
+ ;;
+ esac
+ ;;
+ update)
+ case "$words[4]" in
+ *) # pod repo update
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod repo update options" _options
+ ;;
+ esac
+ ;;
+ *) # pod repo
+ _subcommands=(
+ "add:Add a spec repo."
+ "lint:Validates all specs in a repo."
+ "push:Push new specifications to a spec-repo"
+ "remove:Remove a spec repo"
+ "update:Update a spec repo."
+ )
+ _describe -t commands "pod repo subcommands" _subcommands
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod repo options" _options
+ ;;
+ esac
+ ;;
+ search)
+ case "$words[3]" in
+ *) # pod search
+ _options=(
+ "--full:Search by name, summary, and description"
+ "--help:Show help banner of specified command"
+ "--ios:Restricts the search to Pods supported on iOS"
+ "--no-ansi:Show output without ANSI codes"
+ "--osx:Restricts the search to Pods supported on OS X"
+ "--stats:Show additional stats (like GitHub watchers and forks)"
+ "--verbose:Show more debugging information"
+ "--web:Searches on cocoapods.org"
+ )
+ _describe -t options "pod search options" _options
+ ;;
+ esac
+ ;;
+ setup)
+ case "$words[3]" in
+ *) # pod setup
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--no-shallow:Clone full history so push will work"
+ "--push:Use this option to enable push access once granted"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod setup options" _options
+ ;;
+ esac
+ ;;
+ spec)
+ case "$words[3]" in
+ cat)
+ case "$words[4]" in
+ *) # pod spec cat
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--show-all:Pick from all versions of the given podspec"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod spec cat options" _options
+ ;;
+ esac
+ ;;
+ create)
+ case "$words[4]" in
+ *) # pod spec create
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod spec create options" _options
+ ;;
+ esac
+ ;;
+ edit)
+ case "$words[4]" in
+ *) # pod spec edit
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--show-all:Pick which spec to edit from all available versions of the given podspec"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod spec edit options" _options
+ ;;
+ esac
+ ;;
+ lint)
+ case "$words[4]" in
+ *) # pod spec lint
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--no-clean:Lint leaves the build directory intact for inspection"
+ "--no-subspecs:Lint skips validation of subspecs"
+ "--only-errors:Lint validates even if warnings are present"
+ "--quick:Lint skips checks that would require to download and build the spec"
+ "--silent:Show nothing"
+ "--subspec=NAME:Lint validates only the given subspec"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod spec lint options" _options
+ ;;
+ esac
+ ;;
+ which)
+ case "$words[4]" in
+ *) # pod spec which
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--show-all:Print all versions of the given podspec"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod spec which options" _options
+ ;;
+ esac
+ ;;
+ *) # pod spec
+ _subcommands=(
+ "cat:Prints a spec file."
+ "create:Create spec file stub."
+ "edit:Edit a spec file."
+ "lint:Validates a spec file."
+ "which:Prints the path of the given spec."
+ )
+ _describe -t commands "pod spec subcommands" _subcommands
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod spec options" _options
+ ;;
+ esac
+ ;;
+ trunk)
+ case "$words[3]" in
+ add-owner)
+ case "$words[4]" in
+ *) # pod trunk add-owner
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod trunk add-owner options" _options
+ ;;
+ esac
+ ;;
+ me)
+ case "$words[4]" in
+ clean-sessions)
+ case "$words[5]" in
+ *) # pod trunk me clean-sessions
+ _options=(
+ "--all:Removes all your sessions, except for the current one"
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod trunk me clean-sessions options" _options
+ ;;
+ esac
+ ;;
+ *) # pod trunk me
+ _subcommands=(
+ "clean-sessions:Remove sessions"
+ )
+ _describe -t commands "pod trunk me subcommands" _subcommands
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod trunk me options" _options
+ ;;
+ esac
+ ;;
+ push)
+ case "$words[4]" in
+ *) # pod trunk push
+ _options=(
+ "--allow-warnings:Allows push even if there are lint warnings"
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod trunk push options" _options
+ ;;
+ esac
+ ;;
+ register)
+ case "$words[4]" in
+ *) # pod trunk register
+ _options=(
+ "--description=DESCRIPTION:An arbitrary description to easily identify your session later on."
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod trunk register options" _options
+ ;;
+ esac
+ ;;
+ *) # pod trunk
+ _subcommands=(
+ "add-owner:Add an owner to a pod"
+ "me:Display information about your sessions"
+ "push:Publish a podspec"
+ "register:Manage sessions"
+ )
+ _describe -t commands "pod trunk subcommands" _subcommands
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod trunk options" _options
+ ;;
+ esac
+ ;;
+ try)
+ case "$words[3]" in
+ *) # pod try
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod try options" _options
+ ;;
+ esac
+ ;;
+ update)
+ case "$words[3]" in
+ *) # pod update
+ _options=(
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--no-clean:Leave SCM dirs like \`.git\` and \`.svn\` intact after downloading"
+ "--no-integrate:Skip integration of the Pods libraries in the Xcode project(s)"
+ "--no-repo-update:Skip running \`pod repo update\` before install"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ )
+ _describe -t options "pod update options" _options
+ ;;
+ esac
+ ;;
+ *) # pod
+ _subcommands=(
+ "help:Show help for the given command."
+ "ipc:Inter-process communication"
+ "init:Generate a Podfile for the current directory."
+ "install:Install project dependencies"
+ "lib:Develop pods"
+ "list:List pods"
+ "outdated:Show outdated project dependencies"
+ "plugins:Show available CocoaPods plugins"
+ "push:Temporary alias for the \`pod repo push\` command"
+ "repo:Manage spec-repositories"
+ "search:Searches for pods"
+ "setup:Setup the CocoaPods environment"
+ "spec:Manage pod specs"
+ "trunk:Interact with the CocoaPods API (e.g. publishing new specs)"
+ "try:Try a Pod!"
+ "update:Update outdated project dependencies"
+ )
+ _describe -t commands "pod subcommands" _subcommands
+ _options=(
+ "--completion-script:Print the auto-completion script"
+ "--help:Show help banner of specified command"
+ "--no-ansi:Show output without ANSI codes"
+ "--silent:Show nothing"
+ "--verbose:Show more debugging information"
+ "--version:Show the version of the tool"
+ )
+ _describe -t options "pod options" _options
+ ;;
+esac
diff --git a/zsh/.oh-my-zsh/plugins/postgres/README.md b/zsh/.oh-my-zsh/plugins/postgres/README.md
new file mode 100644
index 0000000..59445f3
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/postgres/README.md
@@ -0,0 +1,22 @@
+# Postgres plugin
+
+This plugin adds some aliases for useful Postgres commands.
+
+:warning: this plugin works exclusively with Postgres installed via Homebrew on OSX
+because Postgres paths are hardcoded to `/usr/local/var/postgres`.
+
+To use it, add `postgres` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... postgres)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+|-------------|---------------------------------------------------------------------------------|-------------------------------------------------------------|
+| startpost | `pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start` | Start postgres server |
+| stoppost | `pg_ctl -D /usr/local/var/postgres stop -s -m fast` | Stop postgres server |
+| restartpost | `stoppost && sleep 1 && startpost` | Restart (calls stop, then start) |
+| reloadpost | `pg_ctl reload -D /usr/local/var/postgres -s` | Reload postgres configuration (some setting require restart)|
+| statuspost | `pg_ctl status -D /usr/local/var/postgres -s` | Check startus of postgres server (running, stopped) |
diff --git a/zsh/.oh-my-zsh/plugins/postgres/postgres.plugin.zsh b/zsh/.oh-my-zsh/plugins/postgres/postgres.plugin.zsh
new file mode 100644
index 0000000..c2dbef2
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/postgres/postgres.plugin.zsh
@@ -0,0 +1,8 @@
+# Aliases to control Postgres
+# Paths noted below are for Postgres installed via Homebrew on OSX
+
+alias startpost='pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start'
+alias stoppost='pg_ctl -D /usr/local/var/postgres stop -s -m fast'
+alias restartpost='stoppost && sleep 1 && startpost'
+alias reloadpost='pg_ctl reload -D /usr/local/var/postgres -s'
+alias statuspost='pg_ctl status -D /usr/local/var/postgres -s'
\ No newline at end of file
diff --git a/zsh/.oh-my-zsh/plugins/pow/README.md b/zsh/.oh-my-zsh/plugins/pow/README.md
new file mode 100644
index 0000000..1f8a9d1
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pow/README.md
@@ -0,0 +1,21 @@
+# pow plugin
+
+This plugin adds completion and commands for [pow](http://pow.cx/), a
+zero-configuration Rack server for macOS.
+
+To use it, add pow to the plugins array of your zshrc file:
+
+```sh
+plugins=(... pow)
+```
+
+## Commands
+
+- `kapow` will restart an app.
+
+ ```bash
+ kapow myapp
+ ```
+
+- `kaput` will show the standard output from any pow app.
+- `repow` will restart the pow process.
diff --git a/zsh/.oh-my-zsh/plugins/pow/pow.plugin.zsh b/zsh/.oh-my-zsh/plugins/pow/pow.plugin.zsh
new file mode 100644
index 0000000..0b8ccd1
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pow/pow.plugin.zsh
@@ -0,0 +1,85 @@
+# Restart a rack app running under pow
+# http://pow.cx/
+#
+# Adds a kapow command that will restart an app
+#
+# $ kapow myapp
+#
+# Supports command completion.
+#
+# If you are not already using completion you might need to enable it with
+#
+# autoload -U compinit compinit
+#
+# Changes:
+#
+# Defaults to the current application, and will walk up the tree to find
+# a config.ru file and restart the corresponding app
+#
+# Will Detect if a app does not exist in pow and print a (slightly) helpful
+# error message
+
+rack_root(){
+ setopt chaselinks
+ local orgdir="$PWD"
+ local basedir="$PWD"
+
+ while [[ $basedir != '/' ]]; do
+ test -e "$basedir/config.ru" && break
+ builtin cd ".." 2>/dev/null
+ basedir="$PWD"
+ done
+
+ builtin cd "$orgdir" 2>/dev/null
+ [[ ${basedir} == "/" ]] && return 1
+ echo $basedir
+}
+
+rack_root_detect(){
+ basedir=$(rack_root)
+ echo `basename $basedir | sed -E "s/.(com|net|org)//"`
+}
+
+kapow(){
+ local vhost=$1
+ [ ! -n "$vhost" ] && vhost=$(rack_root_detect)
+ if [ ! -h ~/.pow/$vhost ]
+ then
+ echo "pow: This domain isn’t set up yet. Symlink your application to ${vhost} first."
+ return 1
+ fi
+
+ [ ! -d ~/.pow/${vhost}/tmp ] && mkdir -p ~/.pow/$vhost/tmp
+ touch ~/.pow/$vhost/tmp/restart.txt;
+ [ $? -eq 0 ] && echo "pow: restarting $vhost.dev"
+}
+compctl -W ~/.pow -/ kapow
+
+powit(){
+ local basedir="$PWD"
+ local vhost=$1
+ [ ! -n "$vhost" ] && vhost=$(rack_root_detect)
+ if [ ! -h ~/.pow/$vhost ]
+ then
+ echo "pow: Symlinking your app with pow. ${vhost}"
+ [ ! -d ~/.pow/${vhost} ] && ln -s "$basedir" ~/.pow/$vhost
+ return 1
+ fi
+}
+
+powed(){
+ local basedir="$(rack_root)"
+ find ~/.pow/ -type l -lname "*$basedir*" -exec basename {}'.dev' \;
+}
+
+# Restart pow process
+# taken from https://www.matthewratzloff.com
+repow(){
+ lsof | grep 20560 | awk '{print $2}' | xargs kill -9
+ launchctl unload ~/Library/LaunchAgents/cx.pow.powd.plist
+ launchctl load ~/Library/LaunchAgents/cx.pow.powd.plist
+ echo "restarted pow"
+}
+
+# View the standard out (puts) from any pow app
+alias kaput="tail -f ~/Library/Logs/Pow/apps/*"
diff --git a/zsh/.oh-my-zsh/plugins/powder/README.md b/zsh/.oh-my-zsh/plugins/powder/README.md
new file mode 100644
index 0000000..a83b1f2
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/powder/README.md
@@ -0,0 +1,8 @@
+# Powder
+
+This plugin provides completion for [powder](https://github.com/powder-rb/powder/).
+
+To use it, add powder to the plugins array of your zshrc file:
+```
+plugins=(... powder)
+```
diff --git a/zsh/.oh-my-zsh/plugins/powder/_powder b/zsh/.oh-my-zsh/plugins/powder/_powder
new file mode 100644
index 0000000..84e260a
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/powder/_powder
@@ -0,0 +1,4 @@
+#compdef powder
+#autoload
+
+compadd `powder help | grep powder | cut -d " " -f 4`
diff --git a/zsh/.oh-my-zsh/plugins/powify/README.md b/zsh/.oh-my-zsh/plugins/powify/README.md
new file mode 100644
index 0000000..fd58b86
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/powify/README.md
@@ -0,0 +1,10 @@
+# powify plugin
+
+This plugin adds autocompletion for [powify](https://github.com/sethvargo/powify),
+an easy-to-use wrapper for Basecamp's [pow](https://github.com/basecamp/pow).
+
+To use it, add powify to the plugins array of your zshrc file:
+
+```sh
+plugins=(... powify)
+```
diff --git a/zsh/.oh-my-zsh/plugins/powify/_powify b/zsh/.oh-my-zsh/plugins/powify/_powify
new file mode 100644
index 0000000..9507f40
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/powify/_powify
@@ -0,0 +1,55 @@
+#compdef powify
+
+_powify_all_servers() {
+ all_servers=(`ls $HOME/.pow/ 2>/dev/null`)
+}
+
+local -a all_servers
+
+local -a _1st_arguments
+_1st_arguments=(
+ 'server:server specific commands'
+ 'utils:manage powify'
+ 'create:creates a pow app from the current directory (to change the name append name as an argument)'
+ 'destroy:destroys the pow app linked to the current directory'
+ 'restart:restarts the pow app linked to the current directory'
+ 'always_restart:reload the pow app after each request'
+ 'always_restart_off:do not reload the pow app after each request'
+ 'rename:rename the current pow app to [NAME] or renmae [OLD] to [NEW]'
+ 'environment:run the this pow app in a different environment (aliased `env`)'
+ 'browse:opens and navigates the default browser to this app'
+ 'logs:tail the application logs'
+)
+
+_arguments '*:: :->command'
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "powify command" _1st_arguments
+ return
+fi
+
+case "$words[1]" in
+ server)
+ _values , \
+ 'install[install pow server]' \
+ 'reinstall[reinstall pow server]' \
+ 'update[update pow server]' \
+ 'uninstall[uninstall pow server]' \
+ 'list[list all pow apps]' \
+ 'start[start the pow server]' \
+ 'stop[stop the pow server]' \
+ 'restart[restart the pow server]' \
+ 'host[adds all pow apps to /etc/hosts file]' \
+ 'unhost[removes all pow apps from /etc/hosts file]' \
+ 'status[print the current server status]' \
+ 'config[print the current server configuration]' \
+ 'logs[tails the pow server logs]' ;;
+ utils)
+ _values , \
+ 'install[install powify.dev server management tool]' \
+ 'reinstall[reinstall powify.dev server management tool]' \
+ 'uninstall[uninstall powify.dev server management tool]' ;;
+ destroy|restart|always_restart|always_restart_off|rename|browse|logs)
+ _powify_all_servers
+ _wanted all_servers expl 'all pow servers' compadd -a all_servers ;;
+esac
diff --git a/zsh/.oh-my-zsh/plugins/profiles/README.md b/zsh/.oh-my-zsh/plugins/profiles/README.md
new file mode 100644
index 0000000..5aa1918
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/profiles/README.md
@@ -0,0 +1,25 @@
+# profiles plugin
+
+This plugin allows you to create separate configuration files for zsh based
+on your long hostname (including the domain).
+
+To use it, add profiles to the plugins array of your zshrc file:
+
+```sh
+plugins=(... profiles)
+```
+
+It takes your `$HOST` variable and looks for files named according to the
+domain parts in `$ZSH_CUSTOM/profiles/` directory.
+
+For example, for `HOST=host.domain.com`, it will try to load the following files,
+in this order:
+
+```text
+$ZSH_CUSTOM/profiles/com
+$ZSH_CUSTOM/profiles/domain.com
+$ZSH_CUSTOM/profiles/host.domain.com
+```
+
+This means that if there are conflicting settings on those files, the one to take
+precedence will be the last applied, i.e. the one in host.domain.com.
diff --git a/zsh/.oh-my-zsh/plugins/profiles/profiles.plugin.zsh b/zsh/.oh-my-zsh/plugins/profiles/profiles.plugin.zsh
new file mode 100644
index 0000000..5bc56ce
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/profiles/profiles.plugin.zsh
@@ -0,0 +1,12 @@
+# You will probably want to list this plugin as the first in your .zshrc.
+
+# This will look for a custom profile for the local machine and each domain or
+# subdomain it belongs to. (e.g. com, example.com and foo.example.com)
+parts=(${(s:.:)HOST})
+for i in {${#parts}..1}; do
+ profile=${(j:.:)${parts[$i,${#parts}]}}
+ file=$ZSH_CUSTOM/profiles/$profile
+ if [ -f $file ]; then
+ source $file
+ fi
+done
diff --git a/zsh/.oh-my-zsh/plugins/pyenv/README.md b/zsh/.oh-my-zsh/plugins/pyenv/README.md
new file mode 100644
index 0000000..d063b55
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pyenv/README.md
@@ -0,0 +1,16 @@
+# pyenv
+
+This plugin looks for [pyenv](https://github.com/pyenv/pyenv), a Simple Python version
+management system, and loads it if it's found. It also loads pyenv-virtualenv, a pyenv
+plugin to manage virtualenv, if it's found.
+
+To use it, add `pyenv` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... pyenv)
+```
+
+## Functions
+
+- `pyenv_prompt_info`: displays the Python version in use by pyenv; or the global Python
+ version, if pyenv wasn't found.
diff --git a/zsh/.oh-my-zsh/plugins/pyenv/pyenv.plugin.zsh b/zsh/.oh-my-zsh/plugins/pyenv/pyenv.plugin.zsh
new file mode 100644
index 0000000..4c75156
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pyenv/pyenv.plugin.zsh
@@ -0,0 +1,42 @@
+# This plugin loads pyenv into the current shell and provides prompt info via
+# the 'pyenv_prompt_info' function. Also loads pyenv-virtualenv if available.
+
+# Load pyenv only if command not already available
+command -v pyenv &> /dev/null && FOUND_PYENV=1 || FOUND_PYENV=0
+
+if [[ $FOUND_PYENV -ne 1 ]]; then
+ pyenvdirs=("$HOME/.pyenv" "/usr/local/pyenv" "/opt/pyenv" "/usr/local/opt/pyenv")
+ for dir in $pyenvdirs; do
+ if [[ -d $dir/bin ]]; then
+ export PATH="$PATH:$dir/bin"
+ FOUND_PYENV=1
+ break
+ fi
+ done
+fi
+
+if [[ $FOUND_PYENV -ne 1 ]]; then
+ if (( $+commands[brew] )) && dir=$(brew --prefix pyenv 2>/dev/null); then
+ if [[ -d $dir/bin ]]; then
+ export PATH="$PATH:$dir/bin"
+ FOUND_PYENV=1
+ fi
+ fi
+fi
+
+if [[ $FOUND_PYENV -eq 1 ]]; then
+ eval "$(pyenv init - zsh)"
+ if (( $+commands[pyenv-virtualenv-init] )); then
+ eval "$(pyenv virtualenv-init - zsh)"
+ fi
+ function pyenv_prompt_info() {
+ echo "$(pyenv version-name)"
+ }
+else
+ # fallback to system python
+ function pyenv_prompt_info() {
+ echo "system: $(python -V 2>&1 | cut -f 2 -d ' ')"
+ }
+fi
+
+unset FOUND_PYENV pyenvdirs dir
diff --git a/zsh/.oh-my-zsh/plugins/pylint/README.md b/zsh/.oh-my-zsh/plugins/pylint/README.md
new file mode 100644
index 0000000..8c1de88
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pylint/README.md
@@ -0,0 +1,15 @@
+# pylint
+
+This plugin adds code analysis for python through [Pylint](https://www.pylint.org/).
+
+To use it, add `pylint` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... pylint)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+| -------------| -------------------- | -------------------------------------------------------------------------------------------------------------------------|
+| pylint-quick | `pylint --reports=n` | Displays a set of reports each one focusing on a particular aspect of the project, default set `no` for multiple reports | |
diff --git a/zsh/.oh-my-zsh/plugins/pylint/_pylint b/zsh/.oh-my-zsh/plugins/pylint/_pylint
new file mode 100644
index 0000000..e466d05
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pylint/_pylint
@@ -0,0 +1,31 @@
+#compdef pylint
+#
+# this is zsh completion function file.
+# generated by genzshcomp(ver: 0.5.1)
+#
+
+typeset -A opt_args
+local context state line
+
+_arguments -s -S \
+ "--help[show this help message and exit]:" \
+ "-h[show this help message and exit]:" \
+ "--version[show program's version number and exit]:" \
+ "--long-help[more verbose help.]" \
+ "--rcfile[Specify a configuration file.]:::_files" \
+ "--errors-only[In error mode, checkers without error messages are disabled and for others, only the ERROR messages are displayed, and no reports are done by default]" \
+ "-E[In error mode, checkers without error messages are disabled and for others, only the ERROR messages are displayed, and no reports are done by default]" \
+ "--ignore[Add files or directories to the blacklist. They should be base names, not paths. \[current: CVS\]]::[,...]:_files" \
+ "--help-msg[Display a help message for the given message id and exit. The value may be a comma separated list of message ids.]:::_files" \
+ "--generate-rcfile[Generate a sample configuration file according to the current configuration. You can put other options before this one to get them in the generated configuration.]" \
+ "--enable[Enable the message, report, category or checker with the given id(s). You can either give multiple identifier separated by comma (,) or put this option multiple time.]:::_files" \
+ "-e[Enable the message, report, category or checker with the given id(s). You can either give multiple identifier separated by comma (,) or put this option multiple time.]:::_files" \
+ "--disable[Disable the message, report, category or checker with the given id(s). You can either give multiple identifier separated by comma (,) or put this option multiple time (only on the command line, not in the configuration file where it should appear only once).]:::_files" \
+ "-d[Disable the message, report, category or checker with the given id(s). You can either give multiple identifier separated by comma (,) or put this option multiple time (only on the command line, not in the configuration file where it should appear only once).]:::_files" \
+ "--output-format[Set the output format. Available formats are text, parseable, colorized, msvs (visual studio) and html \[current: text\]]:::_files" \
+ "-f[Set the output format. Available formats are text, parseable, colorized, msvs (visual studio) and html \[current: text\]]:::_files" \
+ "--include-ids[Include message's id in output \[current: no\]]:::_files" \
+ "-i[Include message's id in output \[current: no\]]:::_files" \
+ "--reports[Tells whether to display a full report or only the messages \[current: yes\]]:::_files" \
+ "-r[Tells whether to display a full report or only the messages \[current: yes\]]:::_files" \
+ "*::args:_files"
diff --git a/zsh/.oh-my-zsh/plugins/pylint/pylint.plugin.zsh b/zsh/.oh-my-zsh/plugins/pylint/pylint.plugin.zsh
new file mode 100644
index 0000000..57c7c0a
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/pylint/pylint.plugin.zsh
@@ -0,0 +1,3 @@
+# Aliases
+alias pylint-quick='pylint --reports=n'
+compdef _pylint-quick pylint-quick='pylint --reports=n'
diff --git a/zsh/.oh-my-zsh/plugins/python/README.md b/zsh/.oh-my-zsh/plugins/python/README.md
new file mode 100644
index 0000000..2d955c5
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/python/README.md
@@ -0,0 +1,16 @@
+# python plugin
+
+The plugin adds several aliases for useful [python](https://www.python.org/) commands.
+
+To use it, add `python` to the plugins array of your zshrc file:
+```
+plugins=(... python)
+```
+
+## Aliases
+
+| Command | Description |
+|------------------|---------------------------------------------------------------------------------|
+| `pyfind` | Finds .py files recursively in the current directory |
+| `pyclean [dirs]` | Deletes byte-code and cache files from a list of directories or the current one |
+| `pygrep ` | Looks for `text` in .py files |
diff --git a/zsh/.oh-my-zsh/plugins/python/python.plugin.zsh b/zsh/.oh-my-zsh/plugins/python/python.plugin.zsh
new file mode 100644
index 0000000..f39cd80
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/python/python.plugin.zsh
@@ -0,0 +1,16 @@
+# Find python file
+alias pyfind='find . -name "*.py"'
+
+# Remove python compiled byte-code and mypy/pytest cache in either the current
+# directory or in a list of specified directories (including sub directories).
+function pyclean() {
+ ZSH_PYCLEAN_PLACES=${*:-'.'}
+ find ${ZSH_PYCLEAN_PLACES} -type f -name "*.py[co]" -delete
+ find ${ZSH_PYCLEAN_PLACES} -type d -name "__pycache__" -delete
+ find ${ZSH_PYCLEAN_PLACES} -depth -type d -name ".mypy_cache" -exec rm -r "{}" +
+ find ${ZSH_PYCLEAN_PLACES} -depth -type d -name ".pytest_cache" -exec rm -r "{}" +
+}
+
+# Grep among .py files
+alias pygrep='grep -r --include="*.py"'
+
diff --git a/zsh/.oh-my-zsh/plugins/rails/README.md b/zsh/.oh-my-zsh/plugins/rails/README.md
new file mode 100644
index 0000000..ad83fff
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rails/README.md
@@ -0,0 +1,83 @@
+# Rails
+
+This plugin adds completion for [Ruby On Rails Framework](https://rubyonrails.org/) and [Rake](https://ruby.github.io/rake/) commands, as well as some aliases for logs and environment variables.
+
+To use it, add `rails` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... rails)
+```
+
+## List of Aliases
+
+### Rails aliases
+
+| Alias | Command | Description |
+|-------|----------------------------|----------------------------------------------------|
+| `rc` | `rails console` | Interact with your Rails app from the CLI |
+| `rcs` | `rails console --sandbox` | Test code in a sandbox, without changing any data |
+| `rd` | `rails destroy` | Undo a generate operation |
+| `rdb` | `rails dbconsole` | Interact with your db from the console |
+| `rgen`| `rails generate` | Generate boilerplate code |
+| `rgm` | `rails generate migration` | Generate a db migration |
+| `rp` | `rails plugin` | Run a Rails plugin command |
+| `ru` | `rails runner` | Run Ruby code in the context of Rails |
+| `rs` | `rails server` | Launch a web server |
+| `rsd` | `rails server --debugger` | Launch a web server with debugger |
+| `rsp` | `rails server --port` | Launch a web server and specify the listening port |
+
+### Rake aliases
+
+| Alias | Command | Description |
+|---------|---------------------------------|--------------------------------------------------------|
+| `rdm` | `rake db:migrate` | Run pending db migrations |
+| `rdms` | `rake db:migrate:status` | Show current db migration status |
+| `rdmtc` | `rake db:migrate db:test:clone` | Run pending migrations and clone db into test database |
+| `rdr` | `rake db:rollback` | Roll back the last migration |
+| `rdc` | `rake db:create` | Create the database |
+| `rds` | `rake db:seed` | Seed the database |
+| `rdd` | `rake db:drop` | Delete the database |
+| `rdrs` | `rake db:reset` | Delete the database and set it up again |
+| `rdtc` | `rake db:test:clone` | Clone the database into the test database |
+| `rdtp` | `rake db:test:prepare` | Duplicate the db schema into your test database |
+| `rdsl` | `rake db:schema:load` | Load the database schema |
+| `rlc` | `rake log:clear` | Clear Rails logs |
+| `rn` | `rake notes` | Search for notes (`FIXME`, `TODO`) in code comments |
+| `rr` | `rake routes` | List all defined routes |
+| `rrg` | `rake routes \| grep` | List and filter the defined routes |
+| `rt` | `rake test` | Run Rails tests |
+| `rmd` | `rake middleware` | Interact with Rails middlewares |
+| `rsts` | `rake stats` | Print code statistics |
+
+### Utility aliases
+
+| Alias | Command | Description |
+|-----------|-------------------------------|------------------------------------------------|
+| `devlog` | `tail -f log/development.log` | Show and follow changes to the development log |
+| `prodlog` | `tail -f log/production.log` | Show and follow changes to the production log |
+| `testlog` | `tail -f log/test.log` | Show and follow changes to the test log |
+
+### Environment settings
+
+| Alias | Command | Description |
+|-------|-------------------------|---------------------------------|
+| `RED` | `RAILS_ENV=development` | Sets `RAILS_ENV` to development |
+| `REP` | `RAILS_ENV=production` | Sets `RAILS_ENV` to production |
+| `RET` | `RAILS_ENV=test` | Sets `RAILS_ENV` to test |
+
+These are global aliases. Use in combination with a command or just run them
+separately. For example: `REP rake db:migrate` will migrate the production db.
+
+### Legacy stuff
+
+| Alias | Command |
+|---------|------------------------------------|
+| `sstat` | `thin --stats "/thin/stats" start` |
+| `sg` | `ruby script/generate` |
+| `sd` | `ruby script/destroy` |
+| `sp` | `ruby script/plugin` |
+| `sr` | `ruby script/runner` |
+| `ssp` | `ruby script/spec` |
+| `sc` | `ruby script/console` |
+| `sd` | `ruby script/server --debugger` |
+
diff --git a/zsh/.oh-my-zsh/plugins/rails/_rails b/zsh/.oh-my-zsh/plugins/rails/_rails
new file mode 100644
index 0000000..ad75055
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rails/_rails
@@ -0,0 +1,66 @@
+#compdef rails
+#autoload
+
+local -a _1st_arguments
+_1st_arguments=(
+ 'generate:Generate new code (short-cut alias: "g")'
+ 'console:Start the Rails console (short-cut alias: "c")'
+ 'server:Start the Rails server (short-cut alias: "s")'
+ 'dbconsole:Start a console for the database specified in config/database.yml (short-cut alias: "db")'
+ 'new:Create a new Rails application. "rails new my_app" creates a new application called MyApp in "./my_app"'
+ 'application:Generate the Rails application code'
+ 'destroy:Undo code generated with "generate"'
+
+ 'benchmarker:See how fast a piece of code runs'
+ 'profiler:Get profile information from a piece of code'
+ 'plugin:Install a plugin'
+
+ 'plugin new:Generates skeleton for developing a Rails plugin'
+ 'runner:Run a piece of code in the application environment (short-cut alias: "r")'
+)
+
+_rails_generate_arguments() {
+ generate_arguments=(
+ assets
+ controller
+ decorator
+ generator
+ helper
+ integration_test
+ mailer
+ migration
+ model
+ observer
+ performance_test
+ plugin
+ resource
+ scaffold
+ scaffold_controller
+ session_migration
+ stylesheets
+ task
+ )
+}
+
+
+_arguments \
+ '(--version)--version[show version]' \
+ '(--help)--help[show help]' \
+ '*:: :->subcmds' && return 0
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "rails subcommand" _1st_arguments
+ return
+else
+ _files
+ return
+fi
+
+case "$words[1]" in
+ g|generate)
+ _rails_generate_arguments
+ _wanted generate_arguments expl 'all generate' compadd -a generate_arguments ;;
+ d|destroy)
+ _rails_generate_arguments
+ _wanted generate_arguments expl 'all generate' compadd -a generate_arguments ;;
+esac
diff --git a/zsh/.oh-my-zsh/plugins/rails/rails.plugin.zsh b/zsh/.oh-my-zsh/plugins/rails/rails.plugin.zsh
new file mode 100644
index 0000000..1fd5f0f
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rails/rails.plugin.zsh
@@ -0,0 +1,86 @@
+function _rails_command () {
+ if [ -e "bin/stubs/rails" ]; then
+ bin/stubs/rails $@
+ elif [ -e "bin/rails" ]; then
+ bin/rails $@
+ elif [ -e "script/rails" ]; then
+ ruby script/rails $@
+ elif [ -e "script/server" ]; then
+ ruby script/$@
+ else
+ command rails $@
+ fi
+}
+
+function _rake_command () {
+ if [ -e "bin/stubs/rake" ]; then
+ bin/stubs/rake $@
+ elif [ -e "bin/rake" ]; then
+ bin/rake $@
+ elif type bundle &> /dev/null && ([ -e "Gemfile" ] || [ -e "gems.rb" ]); then
+ bundle exec rake $@
+ else
+ command rake $@
+ fi
+}
+
+alias rails='_rails_command'
+compdef _rails_command=rails
+
+alias rake='_rake_command'
+compdef _rake_command=rake
+
+alias devlog='tail -f log/development.log'
+alias prodlog='tail -f log/production.log'
+alias testlog='tail -f log/test.log'
+
+alias -g RED='RAILS_ENV=development'
+alias -g REP='RAILS_ENV=production'
+alias -g RET='RAILS_ENV=test'
+
+# Rails aliases
+alias rc='rails console'
+alias rcs='rails console --sandbox'
+alias rd='rails destroy'
+alias rdb='rails dbconsole'
+alias rgen='rails generate'
+alias rgm='rails generate migration'
+alias rp='rails plugin'
+alias ru='rails runner'
+alias rs='rails server'
+alias rsd='rails server --debugger'
+alias rsp='rails server --port'
+
+# Rake aliases
+alias rdm='rake db:migrate'
+alias rdms='rake db:migrate:status'
+alias rdr='rake db:rollback'
+alias rdc='rake db:create'
+alias rds='rake db:seed'
+alias rdd='rake db:drop'
+alias rdrs='rake db:reset'
+alias rdtc='rake db:test:clone'
+alias rdtp='rake db:test:prepare'
+alias rdmtc='rake db:migrate db:test:clone'
+alias rdsl='rake db:schema:load'
+alias rlc='rake log:clear'
+alias rn='rake notes'
+alias rr='rake routes'
+alias rrg='rake routes | grep'
+alias rt='rake test'
+alias rmd='rake middleware'
+alias rsts='rake stats'
+
+# legacy stuff
+alias sstat='thin --stats "/thin/stats" start'
+alias sg='ruby script/generate'
+alias sd='ruby script/destroy'
+alias sp='ruby script/plugin'
+alias sr='ruby script/runner'
+alias ssp='ruby script/spec'
+alias sc='ruby script/console'
+alias sd='ruby script/server --debugger'
+
+function remote_console() {
+ /usr/bin/env ssh $1 "( cd $2 && ruby script/console production )"
+}
diff --git a/zsh/.oh-my-zsh/plugins/rake-fast/README.md b/zsh/.oh-my-zsh/plugins/rake-fast/README.md
new file mode 100644
index 0000000..23cbd80
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rake-fast/README.md
@@ -0,0 +1,35 @@
+# rake-fast
+
+Fast rake autocompletion plugin.
+
+This plugin caches the output for later usage and significantly speeds it up.
+It generates a `.rake_tasks` cache file in parallel to the Rakefile. It also
+checks the file modification time to see if it needs to regenerate the cache
+file.
+
+This is entirely based on [this pull request by Ullrich Schäfer](https://github.com/robb/.dotfiles/pull/10/),
+which is inspired by [this Ruby on Rails trick from 2006](https://weblog.rubyonrails.org/2006/3/9/fast-rake-task-completion-for-zsh/).
+
+Think about that. 2006.
+
+----------
+
+Since August of 2016, it also checks if it's in a Rails project and looks at
+rake files inside `lib/tasks` and their modification time to know if the
+cache file needs to be regenerated.
+
+## Installation
+
+Just add the plugin to your `.zshrc`:
+
+```zsh
+plugins=(... rake-fast)
+```
+
+You might consider adding `.rake_tasks` to your [global .gitignore](https://help.github.com/articles/ignoring-files#global-gitignore)
+
+## Usage
+
+Type `rake`, then press tab.
+
+If you want to force the regeneration of the `.rake_tasks` file, run `rake_refresh`.
diff --git a/zsh/.oh-my-zsh/plugins/rake-fast/rake-fast.plugin.zsh b/zsh/.oh-my-zsh/plugins/rake-fast/rake-fast.plugin.zsh
new file mode 100644
index 0000000..19dab15
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rake-fast/rake-fast.plugin.zsh
@@ -0,0 +1,43 @@
+_rake_does_task_list_need_generating () {
+ [[ ! -f .rake_tasks ]] || [[ Rakefile -nt .rake_tasks ]] || { _is_rails_app && _tasks_changed }
+}
+
+_is_rails_app () {
+ [[ -e "bin/rails" ]] || [[ -e "script/rails" ]]
+}
+
+_tasks_changed () {
+ local -a files
+ files=(lib/tasks lib/tasks/**/*(N))
+
+ for file in $files; do
+ if [[ "$file" -nt .rake_tasks ]]; then
+ return 0
+ fi
+ done
+
+ return 1
+}
+
+_rake_generate () {
+ rake --silent --tasks | cut -d " " -f 2 | sed 's/\[.*\]//g' > .rake_tasks
+}
+
+_rake () {
+ if [[ -f Rakefile ]]; then
+ if _rake_does_task_list_need_generating; then
+ echo "\nGenerating .rake_tasks..." >&2
+ _rake_generate
+ fi
+ compadd $(cat .rake_tasks)
+ fi
+}
+compdef _rake rake
+
+rake_refresh () {
+ [[ -f .rake_tasks ]] && rm -f .rake_tasks
+
+ echo "Generating .rake_tasks..." >&2
+ _rake_generate
+ cat .rake_tasks
+}
diff --git a/zsh/.oh-my-zsh/plugins/rake/README.md b/zsh/.oh-my-zsh/plugins/rake/README.md
new file mode 100644
index 0000000..e888c07
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rake/README.md
@@ -0,0 +1,37 @@
+# Rake plugin
+
+This plugin adds support for [rake](https://ruby.github.io/rake/), the Ruby
+build tool or Ruby Make.
+
+To use it, add `rake` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... rake)
+```
+
+## Aliases
+
+The plugin aliases the rake command so you can pass arguments when invoking rake tasks
+without having to escape the brackets, i.e., you can run
+```
+rake namespace:task['argument']
+```
+instead of having to do
+```
+rake namespace:task\['argument'\]
+```
+
+| Alias | Command | Description |
+|--------|--------------------------------|-----------------------------------------------|
+| rake | `noglob rake` | Allows unescaped square brackets |
+| brake | `noglob bundle exec rake` | Same as above but call rake using bundler |
+| srake | `noglob sudo rake` | Same as rake but using sudo |
+| sbrake | `noglob sudo bundle exec rake` | Same as above but using both sudo and bundler |
+
+## Jim Weirich
+
+The plugin also aliases `rake` to [`jimweirich`](https://github.com/jimweirich), author of Rake
+and big time contributor to the Ruby open source community. He passed away in 2014:
+
+> Thank you Jim for everything you contributed to the Ruby and open source community
+> over the years. We will miss you dearly. — [**@robbyrussell**](https://github.com/ohmyzsh/ohmyzsh/commit/598a9c6f990756386517d66b6bcf77e53791e905)
diff --git a/zsh/.oh-my-zsh/plugins/rake/rake.plugin.zsh b/zsh/.oh-my-zsh/plugins/rake/rake.plugin.zsh
new file mode 100644
index 0000000..1211500
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rake/rake.plugin.zsh
@@ -0,0 +1,10 @@
+# Thank you Jim for everything you contributed to the Ruby and open source community
+# over the years. We will miss you dearly.
+alias jimweirich="rake"
+
+alias rake="noglob rake" # allows square brackts for rake task invocation
+alias brake='noglob bundle exec rake' # execute the bundled rake gem
+alias srake='noglob sudo rake' # noglob must come before sudo
+alias sbrake='noglob sudo bundle exec rake' # altogether now ...
+
+
diff --git a/zsh/.oh-my-zsh/plugins/rand-quote/README.md b/zsh/.oh-my-zsh/plugins/rand-quote/README.md
new file mode 100644
index 0000000..c387aaa
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rand-quote/README.md
@@ -0,0 +1,15 @@
+# rand-quote plugin
+
+Displays a random quote taken from [quotationspage.com](http://www.quotationspage.com/random.php)
+
+Created by [Eduardo San Martin Morote, aka Posva](https://posva.github.io)
+
+## Usage
+
+Add the plugin to the plugins array in your zshrc file and restart zsh:
+
+```zsh
+plugins=(... rand-quote)
+```
+
+Then, run `quote` to get a new random quote.
diff --git a/zsh/.oh-my-zsh/plugins/rand-quote/rand-quote.plugin.zsh b/zsh/.oh-my-zsh/plugins/rand-quote/rand-quote.plugin.zsh
new file mode 100644
index 0000000..371b997
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rand-quote/rand-quote.plugin.zsh
@@ -0,0 +1,14 @@
+if ! (( $+commands[curl] )); then
+ echo "rand-quote plugin needs curl to work" >&2
+ return
+fi
+
+function quote {
+ emulate -L zsh
+ Q=$(curl -s --connect-timeout 2 "http://www.quotationspage.com/random.php" | iconv -c -f ISO-8859-1 -t UTF-8 | grep -m 1 "dt ")
+
+ TXT=$(echo "$Q" | sed -e 's/<\/dt>.*//g' -e 's/.*html//g' -e 's/^[^a-zA-Z]*//' -e 's/<\/a..*$//g')
+ WHO=$(echo "$Q" | sed -e 's/.*\/quotes\///g' -e 's/<.*//g' -e 's/.*">//g')
+
+ [[ -n "$WHO" && -n "$TXT" ]] && print -P "%F{3}${WHO}%f: “%F{5}${TXT}%fâ€"
+}
diff --git a/zsh/.oh-my-zsh/plugins/rbenv/README.md b/zsh/.oh-my-zsh/plugins/rbenv/README.md
new file mode 100644
index 0000000..43a2e93
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rbenv/README.md
@@ -0,0 +1,26 @@
+# rbenv plugin
+
+The primary job of this plugin is to provide `rbenv_prompt_info` which can be added to your theme to include Ruby
+version and gemset information into your prompt.
+
+Some functionality of this plugin will not work unless you also have the rbenv plugin *gemset* installed.
+https://github.com/jf/rbenv-gemset
+
+To use it, add `rbenv` to the plugins array in your zshrc file:
+```zsh
+plugins=(... rbenv)
+```
+
+## Alias
+
+| Alias | Command | Description |
+|----------------|---------------------|----------------------------------|
+| rubies | `rbenv versions` | List the installed Ruby versions |
+| gemsets | `rbenv gemset list` | List the existing gemsets |
+
+## Functions
+
+* `current_ruby`: The version of Ruby currently being used.
+* `current_gemset`: The name of the current gemset.
+* `gems`: Lists installed gems with enhanced formatting and color.
+* `rbenv_prompt_info`: For adding information to your prompt. Format: `@`.
diff --git a/zsh/.oh-my-zsh/plugins/rbenv/rbenv.plugin.zsh b/zsh/.oh-my-zsh/plugins/rbenv/rbenv.plugin.zsh
new file mode 100644
index 0000000..ed46d35
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rbenv/rbenv.plugin.zsh
@@ -0,0 +1,65 @@
+# This plugin loads rbenv into the current shell and provides prompt info via
+# the 'rbenv_prompt_info' function.
+
+FOUND_RBENV=$+commands[rbenv]
+
+if [[ $FOUND_RBENV -ne 1 ]]; then
+ rbenvdirs=("$HOME/.rbenv" "/usr/local/rbenv" "/opt/rbenv" "/usr/local/opt/rbenv")
+ for dir in $rbenvdirs; do
+ if [[ -d $dir/bin ]]; then
+ export PATH="$dir/bin:$PATH"
+ FOUND_RBENV=1
+ break
+ fi
+ done
+fi
+
+if [[ $FOUND_RBENV -ne 1 ]]; then
+ if (( $+commands[brew] )) && dir=$(brew --prefix rbenv 2>/dev/null); then
+ if [[ -d $dir/bin ]]; then
+ export PATH="$dir/bin:$PATH"
+ FOUND_RBENV=1
+ fi
+ fi
+fi
+
+if [[ $FOUND_RBENV -eq 1 ]]; then
+ eval "$(rbenv init --no-rehash - zsh)"
+
+ alias rubies="rbenv versions"
+ alias gemsets="rbenv gemset list"
+
+ function current_ruby() {
+ echo "$(rbenv version-name)"
+ }
+
+ function current_gemset() {
+ echo "$(rbenv gemset active 2&>/dev/null | sed -e ":a" -e '$ s/\n/+/gp;N;b a' | head -n1)"
+ }
+
+ function gems() {
+ local rbenv_path=$(rbenv prefix)
+ gem list $@ | sed -E \
+ -e "s/\([0-9a-z, \.]+( .+)?\)/$fg[blue]&$reset_color/g" \
+ -e "s|$(echo $rbenv_path)|$fg[magenta]\$rbenv_path$reset_color|g" \
+ -e "s/$current_ruby@global/$fg[yellow]&$reset_color/g" \
+ -e "s/$current_ruby$current_gemset$/$fg[green]&$reset_color/g"
+ }
+
+ function rbenv_prompt_info() {
+ if [[ -n $(current_gemset) ]] ; then
+ echo "$(current_ruby)@$(current_gemset)"
+ else
+ echo "$(current_ruby)"
+ fi
+ }
+else
+ alias rubies="ruby -v"
+ function gemsets() { echo "not supported" }
+ function current_ruby() { echo "not supported" }
+ function current_gemset() { echo "not supported" }
+ function gems() { echo "not supported" }
+ function rbenv_prompt_info() { echo "system: $(ruby -v | cut -f-2 -d ' ')" }
+fi
+
+unset FOUND_RBENV rbenvdirs dir
diff --git a/zsh/.oh-my-zsh/plugins/rbfu/README.md b/zsh/.oh-my-zsh/plugins/rbfu/README.md
new file mode 100644
index 0000000..f1f9fa2
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rbfu/README.md
@@ -0,0 +1,17 @@
+# rbfu plugin
+
+This plugin starts [rbfu](https://github.com/hmans/rbfu), a minimal Ruby version
+manager, and adds some useful functions.
+
+To use it, add `rbfu` to the plugins array in your zshrc file:
+```zsh
+plugins=(... rbfu)
+```
+
+**Note: `rbfu` is deprecated and should no longer be used.**
+
+## Functions
+
+- `rbfu-rubies`: lists all installed rubies available to rbfu.
+
+- `rvm_prompt_info`: shows the Ruby version being used with rbfu.
diff --git a/zsh/.oh-my-zsh/plugins/rbfu/rbfu.plugin.zsh b/zsh/.oh-my-zsh/plugins/rbfu/rbfu.plugin.zsh
new file mode 100644
index 0000000..0084852
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rbfu/rbfu.plugin.zsh
@@ -0,0 +1,42 @@
+# Enables rbfu with --auto option, if available.
+#
+# Also provides a command to list all installed/available
+# rubies. To ensure compatibility with themes, creates the
+# rvm_prompt_info function to return the $RBFU_RUBY_VERSION
+# version.
+
+command -v rbfu &>/dev/null
+
+if [[ $? -eq 0 ]]; then
+ eval "$(rbfu --init --auto)"
+
+ # Internal: Print ruby version details, if it's currently
+ # active etc.
+ function _rbfu_rubies_print() {
+ local rb rb_out
+ rb=$(basename $1)
+ rb_out="$rb"
+ [[ -h $1 ]] && rb_out="$rb_out${fg[green]}@${reset_color}"
+ [[ "x$rb" == "x$2" ]] && rb_out="${fg[red]}$rb_out ${fg[red]}*${reset_color}"
+ echo $rb_out
+ }
+
+ # Public: Provide a list with all available rubies, this basically depends
+ # on `ls -1` and .rfbu/rubies. Highlights the currently active ruby version
+ # and aliases.
+ function rbfu-rubies() {
+ local rbfu_dir active_rb
+ rbfu_dir=$RBFU_RUBIES
+ active_rb=$RBFU_RUBY_VERSION
+ [[ -z "$rbfu_dir" ]] && rbfu_dir="${HOME}/.rbfu/rubies"
+ [[ -z "$active_rb" ]] && active_rb="system"
+ _rbfu_rubies_print "${rbfu_dir}/system" $active_rb
+ for rb in $(ls -1 $rbfu_dir); do
+ _rbfu_rubies_print "${rbfu_dir}/${rb}" $active_rb
+ done
+ }
+
+ # Public: Create rvm_prompt_info command for themes compatibility, unless
+ # it has already been defined.
+ [ ! -x rvm_prompt_info ] && function rvm_prompt_info() { echo "${RBFU_RUBY_VERSION:=system}" }
+fi
diff --git a/zsh/.oh-my-zsh/plugins/react-native/README.md b/zsh/.oh-my-zsh/plugins/react-native/README.md
new file mode 100644
index 0000000..d0a53b8
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/react-native/README.md
@@ -0,0 +1,76 @@
+# React Native plugin
+
+This plugin adds completion for [`react-native`](https://facebook.github.io/react-native/).
+It also defines a few [aliases](#aliases) for the commands more frequently used.
+
+To enable, add `react-native` to your `plugins` array in your zshrc file:
+
+```zsh
+plugins=(... react-native)
+```
+
+## Aliases
+
+| Alias | React Native command |
+| :------------ | :------------------------------------------------- |
+| **rn** | `react-native` |
+| **rns** | `react-native start` |
+| **rnlink** | `react-native link` |
+| _Logging_ | |
+| **rnland** | `react-native log-android` |
+| **rnlios** | `react-native log-ios` |
+| _App Testing_ | |
+| **rnand** | `react-native run-android` |
+| **rnios** | `react-native run-ios` |
+| _iPhone_ | |
+| **rnios4s** | `react-native run-ios --simulator "iPhone 4s"` |
+| **rnios5** | `react-native run-ios --simulator "iPhone 5"` |
+| **rnios5s** | `react-native run-ios --simulator "iPhone 5s"` |
+| **rnios6** | `react-native run-ios --simulator "iPhone 6"` |
+| **rnios6s** | `react-native run-ios --simulator "iPhone 6s"` |
+| **rnios6p** | `react-native run-ios --simulator "iPhone 6 Plus"` |
+| **rnios6sp** | `react-native run-ios --simulator "iPhone 6s Plus"` |
+| **rnios7** | `react-native run-ios --simulator "iPhone 7"` |
+| **rnios7p** | `react-native run-ios --simulator "iPhone 7 Plus"` |
+| **rnios8** | `react-native run-ios --simulator "iPhone 8"` |
+| **rnios8p** | `react-native run-ios --simulator "iPhone 8 Plus"` |
+| **rniosse** | `react-native run-ios --simulator "iPhone SE"` |
+| **rniosx** | `react-native run-ios --simulator "iPhone X"` |
+| **rniosxs** | `react-native run-ios --simulator "iPhone Xs"` |
+| **rniosxsm** | `react-native run-ios --simulator "iPhone Xs Max"` |
+| **rniosxr** | `react-native run-ios --simulator "iPhone XÊ€"` |
+| **rnios11** | `react-native run-ios --simulator "iPhone 11"` |
+| **rnios11p** | `react-native run-ios --simulator "iPhone 11 Pro"` |
+| **rnios11pm** | `react-native run-ios --simulator "iPhone 11 Pro Max"` |
+| _iPad_ | |
+| **rnipad2** | `react-native run-ios --simulator "iPad 2"` |
+| **rnipad5** | `react-native run-ios --simulator "iPad (5th generation)"` |
+| **rnipad6** | `react-native run-ios --simulator "iPad (6th generation)"` |
+| **rnipadr** | `react-native run-ios --simulator "iPad Retina"` |
+| **rnipada** | `react-native run-ios --simulator "iPad Air"` |
+| **rnipada2** | `react-native run-ios --simulator "iPad Air 2"` |
+| **rnipada3** | `react-native run-ios --simulator "iPad Air (3rd generation)"` |
+| **rnipadm2** | `react-native run-ios --simulator "iPad mini 2"` |
+| **rnipadm3** | `react-native run-ios --simulator "iPad mini 3"` |
+| **rnipadm4** | `react-native run-ios --simulator "iPad mini 4"` |
+| **rnipadm5** | `react-native run-ios --simulator "iPad mini (5th generation)"` |
+| **rnipadp9** | `react-native run-ios --simulator "iPad Pro (9.7-inch)"` |
+| **rnipadp12** | `react-native run-ios --simulator "iPad Pro (12.9-inch)"` |
+| **rnipadp122** | `react-native run-ios --simulator "iPad Pro (12.9-inch) (2nd generation)"` |
+| **rnipadp10** | `react-native run-ios --simulator "iPad Pro (10.5-inch)"` |
+| **rnipad11** | `react-native run-ios --simulator "iPad Pro (11-inch)"` |
+| **rnipad123** | `react-native run-ios --simulator "iPad Pro (12.9-inch) (3rd generation)"` |
+| _Apple TV_ | |
+| **rnatv** | `react-native run-ios --simulator "Apple TV"` |
+| **rnatv4k** | `react-native run-ios --simulator "Apple TV 4K"` |
+| **rnatv4k1080**| `react-native run-ios --simulator "Apple TV 4K (at 1080p)"` |
+| **rnipad123** | `react-native run-ios --simulator "iPad Pro (12.9-inch) (3rd generation)"` |
+| _Apple Watch_ | |
+| **rnaw38** | `react-native run-ios --simulator "Apple Watch - 38mm"` |
+| **rnaw42** | `react-native run-ios --simulator "Apple Watch - 42mm"` |
+| **rnaws238** | `react-native run-ios --simulator "Apple Watch Series 2 - 38mm"` |
+| **rnaws242** | `react-native run-ios --simulator "Apple Watch Series 2 - 42mm"` |
+| **rnaws338** | `react-native run-ios --simulator "Apple Watch Series 3 - 38mm"` |
+| **rnaws342** | `react-native run-ios --simulator "Apple Watch Series 3 - 42mm"` |
+| **rnaws440** | `react-native run-ios --simulator "Apple Watch Series 4 - 40mm"` |
+| **rnaws444** | `react-native run-ios --simulator "Apple Watch Series 4 - 44mm"` |
diff --git a/zsh/.oh-my-zsh/plugins/react-native/_react-native b/zsh/.oh-my-zsh/plugins/react-native/_react-native
new file mode 100644
index 0000000..893ac04
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/react-native/_react-native
@@ -0,0 +1,32 @@
+#compdef react-native
+#autoload
+
+local -a _1st_arguments
+_1st_arguments=(
+ 'init: generates a new project and installs its dependencies'
+ 'android:creates an empty android project'
+ 'start:starts the webserver'
+ 'run-ios:builds your app and starts it on iOS simulator'
+ 'run-android:builds your app and starts it on a connected Android emulator or device'
+ 'new-library:generates a native library bridge'
+ 'bundle:builds the javascript bundle for offline use'
+ 'unbundle:builds javascript as "unbundle" for offline use'
+ 'link:[options] links all native dependencies'
+ 'unlink:[options] unlink native dependency'
+ 'install:[options] install and link native dependencies'
+ 'uninstall:[options] uninstall and unlink native dependencies'
+ "upgrade:upgrade your app's template files to the latest version; run this after updating the react-native version in your package.json and running npm install"
+ 'log-android:starts adb logcat'
+ 'log-ios:starts iOS device syslog tail'
+)
+
+
+_arguments \
+ '(--version)--version[show version]' \
+ '(--help)--help[show help]' \
+ '*:: :->subcmds' && return 0
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "react-native subcommand" _1st_arguments
+ return
+fi
diff --git a/zsh/.oh-my-zsh/plugins/react-native/react-native.plugin.zsh b/zsh/.oh-my-zsh/plugins/react-native/react-native.plugin.zsh
new file mode 100644
index 0000000..b33dedf
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/react-native/react-native.plugin.zsh
@@ -0,0 +1,64 @@
+# React Native
+alias rn='react-native'
+alias rns='react-native start'
+alias rnlink='react-native link'
+alias rnland='react-native log-android'
+alias rnlios='react-native log-ios'
+alias rnand='react-native run-android'
+alias rnios='react-native run-ios'
+
+# iPhone
+alias rnios4s='react-native run-ios --simulator "iPhone 4s"'
+alias rnios5='react-native run-ios --simulator "iPhone 5"'
+alias rnios5s='react-native run-ios --simulator "iPhone 5s"'
+alias rnios6='react-native run-ios --simulator "iPhone 6"'
+alias rnios6p='react-native run-ios --simulator "iPhone 6 Plus"'
+alias rnios6s='react-native run-ios --simulator "iPhone 6s"'
+alias rnios6sp='react-native run-ios --simulator "iPhone 6s Plus"'
+alias rnios7='react-native run-ios --simulator "iPhone 7"'
+alias rnios7p='react-native run-ios --simulator "iPhone 7 Plus"'
+alias rnios8='react-native run-ios --simulator "iPhone 8"'
+alias rnios8p='react-native run-ios --simulator "iPhone 8 Plus"'
+alias rniosse='react-native run-ios --simulator "iPhone SE"'
+alias rniosx='react-native run-ios --simulator "iPhone X"'
+alias rniosxs='react-native run-ios --simulator "iPhone Xs"'
+alias rniosxsm='react-native run-ios --simulator "iPhone Xs Max"'
+alias rniosxr='react-native run-ios --simulator "iPhone XÊ€"'
+alias rnios11='react-native run-ios --simulator "iPhone 11"'
+alias rnios11p='react-native run-ios --simulator "iPhone 11 Pro"'
+alias rnios11pm='react-native run-ios --simulator "iPhone 11 Pro Max"'
+
+
+# iPad
+alias rnipad2='react-native run-ios --simulator "iPad 2"'
+alias rnipad5='react-native run-ios --simulator "iPad (5th generation)"'
+alias rnipad6='react-native run-ios --simulator "iPad (6th generation)"'
+alias rnipadr='react-native run-ios --simulator "iPad Retina"'
+alias rnipada='react-native run-ios --simulator "iPad Air"'
+alias rnipada2='react-native run-ios --simulator "iPad Air 2"'
+alias rnipada3='react-native run-ios --simulator "iPad Air (3rd generation)"'
+alias rnipadm2='react-native run-ios --simulator "iPad mini 2"'
+alias rnipadm3='react-native run-ios --simulator "iPad mini 3"'
+alias rnipadm4='react-native run-ios --simulator "iPad mini 4"'
+alias rnipadm5='react-native run-ios --simulator "iPad mini (5th generation)"'
+alias rnipadp9='react-native run-ios --simulator "iPad Pro (9.7-inch)"'
+alias rnipadp12='react-native run-ios --simulator "iPad Pro (12.9-inch)"'
+alias rnipadp122='react-native run-ios --simulator "iPad Pro (12.9-inch) (2nd generation)"'
+alias rnipadp10='react-native run-ios --simulator "iPad Pro (10.5-inch)"'
+alias rnipad11='react-native run-ios --simulator "iPad Pro (11-inch)"'
+alias rnipad123='react-native run-ios --simulator "iPad Pro (12.9-inch) (3rd generation)"'
+
+# Apple TV
+alias rnatv='react-native run-ios --simulator "Apple TV"'
+alias rnatv4k='react-native run-ios --simulator "Apple TV 4K"'
+alias rnatv4k1080='react-native run-ios --simulator "Apple TV 4K (at 1080p)"'
+
+# Apple Watch
+alias rnaw38='react-native run-ios --simulator "Apple Watch - 38mm"'
+alias rnaw42='react-native run-ios --simulator "Apple Watch - 42mm"'
+alias rnaws238='react-native run-ios --simulator "Apple Watch Series 2 - 38mm"'
+alias rnaws242='react-native run-ios --simulator "Apple Watch Series 2 - 42mm"'
+alias rnaws338='react-native run-ios --simulator "Apple Watch Series 3 - 38mm"'
+alias rnaws342='react-native run-ios --simulator "Apple Watch Series 3 - 42mm"'
+alias rnaws440='react-native run-ios --simulator "Apple Watch Series 4 - 40mm"'
+alias rnaws444='react-native run-ios --simulator "Apple Watch Series 4 - 44mm"'
diff --git a/zsh/.oh-my-zsh/plugins/rebar/README.md b/zsh/.oh-my-zsh/plugins/rebar/README.md
new file mode 100644
index 0000000..456ba45
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rebar/README.md
@@ -0,0 +1,9 @@
+# rebar plugin
+
+This plugin adds completions for the [rebar](https://www.rebar3.org/) Erlang build tool.
+
+To use it, add `rebar` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... rebar)
+```
diff --git a/zsh/.oh-my-zsh/plugins/rebar/_rebar b/zsh/.oh-my-zsh/plugins/rebar/_rebar
new file mode 100644
index 0000000..7ac5a51
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rebar/_rebar
@@ -0,0 +1,79 @@
+#compdef rebar
+
+local curcontext=$curcontext state ret=1
+typeset -ga _rebar_global_opts
+
+_rebar_global_opts=(
+ '(--help -h)'{--help,-h}'[Show the program options]'
+ '(--commands -c)'{--commands,-c}'[Show available commands]'
+ '(--version -V)'{--version,-V}'[Show version information]'
+ '(-vvv -vv -v)'--verbose+'[Verbosity level. Default: 0]:verbosity level:(0 1 2 3)'
+ '(-vvv)-v[Slightly more verbose output]'
+ '(-vvv)-vv[More verbose output]'
+ '(-v -vv)-vvv[Most verbose output]'
+ '(--force -f)'{--force,-f}'[Force]'
+ '-D+[Define compiler macro]'
+ '(--jobs -j)'{--jobs+,-j+}'[Number of concurrent workers a command may use. Default: 3]:workers:(1 2 3 4 5 6 7 8 9)'
+ '(--config -C)'{--config,-C}'[Rebar config file to use]:files:_files'
+ '(--profile -p)'{--profile,-p}'[Profile this run of rebar]'
+ '(--keep-going -k)'{--keep-going,-k}'[Keep running after a command fails]'
+)
+
+_rebar () {
+ _arguments -C $_rebar_global_opts \
+ '*::command and variable:->cmd_and_var' \
+ && return
+
+ case $state in
+ cmd_and_var)
+ _values -S = 'variables' \
+ 'clean[Clean]' \
+ 'compile[Compile sources]' \
+ 'create[Create skel based on template and vars]' \
+ 'create-app[Create simple app skel]' \
+ 'create-node[Create simple node skel]' \
+ 'list-template[List avaiavle templates]' \
+ 'doc[Generate Erlang program documentation]' \
+ 'check-deps[Display to be fetched dependencies]' \
+ 'get-deps[Fetch dependencies]' \
+ 'update-deps[Update fetched dependencies]' \
+ 'delete-deps[Delete fetched dependencies]' \
+ 'list-deps[List dependencies]' \
+ 'generate[Build release with reltool]' \
+ 'overlay[Run reltool overlays only]' \
+ 'generate-appups[Generate appup files]' \
+ 'generate-upgrade[Build an upgrade package]' \
+ 'eunit[Run eunit tests]' \
+ 'ct[Run common_test suites]' \
+ 'qc[Test QuickCheck properties]' \
+ 'xref[Run cross reference analysis]' \
+ 'help[Show the program options]' \
+ 'version[Show version information]' \
+ 'apps[Application names to process]:' \
+ 'case[Common Test case]:' \
+ 'dump_spec[Dump reltool spec]:' \
+ 'jobs[Number of workers]::workers:(0 1 2 3 4 5 6 7 8 9)' \
+ 'suites[Common Test suites]::suite name:_path_files -W "(src test)" -g "*.erl(:r)"' \
+ 'verbose[Verbosity level]::verbosity level:(0 1 2 3)' \
+ 'appid[Application id]:' \
+ 'previous_release[Previous release path]:' \
+ 'nodeid[Node id]:' \
+ 'root_dir[Reltool config root directory]::directory:_files -/' \
+ 'skip_deps[Skip deps]::flag:(true false)' \
+ 'skip_apps[Application names to not process]::flag:(true false)' \
+ 'template[Template name]:' \
+ 'template_dir[Template directory]::directory:_files -/' \
+ && ret=0
+ ;;
+ esac
+}
+
+_rebar
+
+# Local variables:
+# mode: shell-script
+# sh-basic-offset: 2
+# sh-indent-comment: t
+# indent-tabs-mode: nil
+# End:
+# ex: sw=2 ts=2 et filetype=sh
diff --git a/zsh/.oh-my-zsh/plugins/redis-cli/README.md b/zsh/.oh-my-zsh/plugins/redis-cli/README.md
new file mode 100644
index 0000000..bb6e94a
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/redis-cli/README.md
@@ -0,0 +1,15 @@
+# Redis-CLI
+
+This plugin adds [redis-cli](https://redis.io/topics/rediscli) completion, based off of Homebrew completion.
+
+To use it, add `redis-cli` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... redis-cli)
+```
+
+## Requirements
+
+In order to make this work, you will need to have redis installed.
+
+More info on the usage and install: https://redis.io/topics/quickstart
diff --git a/zsh/.oh-my-zsh/plugins/redis-cli/_redis-cli b/zsh/.oh-my-zsh/plugins/redis-cli/_redis-cli
new file mode 100644
index 0000000..1569f29
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/redis-cli/_redis-cli
@@ -0,0 +1,142 @@
+#compdef redis-cli rec
+#autoload
+
+#redis cli completion, based off homebrew completion (ref. 2011-04-14)
+
+local -a _1st_arguments
+_1st_arguments=(
+ 'append:append a value to a key'
+ 'auth:authenticate to the server'
+ 'bgrewriteeaof:asynchronously rewrite the append-only file'
+ 'bgsave:asynchornously save the dataset to disk'
+ 'blpop:remove and get the first element in a list, or block until one is available'
+ 'brpop:remove and get the last element in a list, or block until one is available'
+ 'brpoplpush:pop a value from a list, push it to another list and return it; or block until one is available'
+ # 'config get:get the value of a configuration parameter'
+ # 'config set:set a configuration parameter to the given value'
+ # 'config resetstat: reset the stats returned by INFO'
+ 'dbsize:return the number of keys in the selected database'
+ # 'debug object:get debugging information about a key'
+ # 'debug setgfault:make the server crash'
+ 'decr:decrement the integer value of a key by one'
+ 'decrby:decrement the integet value of a key by the given number'
+ 'del:delete a key'
+ 'discard:discard all commands issued after MULTI'
+ 'echo:echo the given string'
+ 'exec:execute all commands issued after a MULTI'
+ 'exists:determine if a key exists'
+ 'expire:set the time to live for a key, in seconds'
+ 'expireat:set the expiration for a key as a UNIX timestamp'
+ 'flushall:remove all keys from all databases'
+ 'flushdb:remove all keys from the current database'
+ 'get:get the value of a key'
+ 'getbit:returns the bit value at offset in the string value stored at key'
+ 'getrange:get a substring of the string stored at a key'
+ 'getset:set the string value of a key and return its old value'
+ 'hdel:delete a hash field'
+ 'hexists:determine if a hash field exists'
+ 'hget:get the value of a hash field'
+ 'hgetall:get all the fields and values in a hash'
+ 'hincrby:increment the integer value of a hash field by the given number'
+ 'hkeys:get all the fields in a hash'
+ 'hlen:get the number of fields in a hash'
+ 'hmget:get the values of all the given hash fields'
+ 'hmset:set multiple hash fields to multiple values'
+ 'hset:set the string value of a hash field'
+ 'hsetnx:set the value of a hash field, only if the field does not exist'
+ 'hvals:get all the values in a hash'
+ 'incr:increment the integer value of a key by one'
+ 'incrby:increment the integer value of a key by the given number'
+ 'info:get information and statistics about the server'
+ 'keys:find all keys matching the given pattern'
+ 'lastsave:get the UNIX timestamp of the last successful save to disk'
+ 'lindex:get an element from a list by its index'
+ 'linsert:insert an element before or after another element in a list'
+ 'llen:get the length of a list'
+ 'lpop:remove and get the first element in a list'
+ 'lpush:prepend a value to a list'
+ 'lpushx:prepend a value to a list, only if the list exists'
+ 'lrange:get a range of elements from a list'
+ 'lrem:remove elements from a list'
+ 'lset:set the value of an element in a list by its index'
+ 'ltrim:trim a list to the specified range'
+ 'mget:get the values of all the given keys'
+ 'monitor:listen for all requests received by the server in real time'
+ 'move:move a key to another database'
+ 'mset:set multiple keys to muliple values'
+ 'msetnx:set multiple keys tom ultiple values, only if none of the keys exist'
+ 'multi:mark the start of a transaction block'
+ 'object:inspect the internals of Redis objects'
+ 'persist:remove the expiration from a key'
+ 'ping:ping the server'
+ 'psubscribe:listen for messages published to channels matching the given patterns'
+ 'publish:post a message to a channel'
+ 'punsubscribe:stop listening for messages posted to channels matching the given patterns'
+ 'quit:close the connection'
+ 'randomkey:return a random key from the keyspace'
+ 'rename:rename a key'
+ 'renamenx:rename a key, only if the new key does not exist'
+ 'rpop:remove and get the last element in a list'
+ 'rpoplpush:remove the last element in a list, append it to another list and return it'
+ 'rpush:append a value to a list'
+ 'rpushx:append a value to a list, only if the list exists'
+ 'sadd:add a member to a set'
+ 'save:synchronously save the dataset to disk'
+ 'scard:get the number of members in a set'
+ 'sdiff:subtract multiple sets'
+ 'sdiffstore:subtract multiple sets and store the resulting set in a key'
+ 'select:change the selected database for the current connection'
+ 'set:set the string value of a key'
+ 'setbit:sets or clears the bit at offset in the string value stored at key'
+ 'setex:set the value and expiration of a key'
+ 'setnx:set the value of a key, only if the key does not exist'
+ 'setrange:overwrite part of a string at key starting at the specified offset'
+ 'shutdown:synchronously save the dataset to disk and then shut down the server'
+ 'sinter:intersect multiple sets'
+ 'sinterstore:intersect multiple sets and store the resulting set in a key'
+ 'sismember:determine if a given value is a member of a set'
+ 'slaveof:make the server a slave of another instance, or promote it as master'
+ 'smembers:get all the members in a set'
+ 'smove:move a member from one set to another'
+ 'sort:sort the elements in a list, set or sorted set'
+ 'spop:remove and return a random member from a set'
+ 'srandmember:get a random member from a set'
+ 'srem:remove a member from a set'
+ 'strlen:get the length of the value stored in a key'
+ 'subscribe:listen for messages published to the given channels'
+ 'sunion:add multiple sets'
+ 'sunionstore:add multiple sets and store the resulting set in a key'
+ 'ttl:get the time to live for a key'
+ 'type:determine the type stored at key'
+ 'unsubscribe:stop listening for messages posted to the given channels'
+ 'unwatch:forget about all watched keys'
+ 'watch:watch the given keys to determine execution of the MULTI/EXEC block'
+ 'zadd:add a member to a sorted set, or update its score if it already exists'
+ 'zcard:get the number of members in a sorted set'
+ 'zcount:count the members in a sorted set with scores within the given values'
+ 'zincrby:increment the score of a member in a sorted set'
+ 'zinterstore:intersect multiple sorted sets and store the resulting sorted set in a new key'
+ 'zrange:return a range of members in a sorted set, by index'
+ 'zrangebyscore:return a range of members in a sorted set, by score'
+ 'zrank:determine the index of a member in a sorted set'
+ 'zrem:remove a member from a sorted set'
+ 'zremrangebyrank:remove all members in a sorted set within the given indexes'
+ 'zremrangebyscore:remove all members in a sorted set within the given scores'
+ 'zrevrange:return a range of membrs in a sorted set, by index, with scores ordered from high to low'
+ 'zrevrangebyscore:return a range of members in a sorted set, by score, with scores ordered from high to low'
+ 'zrevrank:determine the index of a member in a sorted set, with scores ordered from high to low'
+ 'zscore:get the score associated with the given member in a sorted set'
+ 'zunionstore:add multiple sorted sets and store te resulting sorted set in a new key'
+)
+
+local expl
+
+_arguments \
+ '(-v --version)'{-v,--version}'[show version]' \
+ '(-h --help)'{-h,--help}'[show help]' \
+ '*:: :->subcmds' && return 0
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "redis-cli subcommand" _1st_arguments
+ return
+fi
\ No newline at end of file
diff --git a/zsh/.oh-my-zsh/plugins/repo/README.md b/zsh/.oh-my-zsh/plugins/repo/README.md
new file mode 100644
index 0000000..4d9366a
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/repo/README.md
@@ -0,0 +1,7 @@
+## repo
+**Maintainer:** [Stibbons](https://github.com/Stibbons)
+
+This plugin mainly add support automatic completion for the repo command line tool:
+https://code.google.com/p/git-repo/
+
+* `r` aliases `repo`
diff --git a/zsh/.oh-my-zsh/plugins/repo/_repo b/zsh/.oh-my-zsh/plugins/repo/_repo
new file mode 100644
index 0000000..59e39c9
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/repo/_repo
@@ -0,0 +1,272 @@
+#compdef repo
+
+
+__git_apply_whitespace_strategies ()
+{
+ declare -a strategies
+
+ strategies=(
+ 'nowarn:turn off the trailing-whitespace warning'
+ 'warn:output trailing-whitespace warning, but apply patch'
+ 'fix:output trailing-whitespace warning and strip trailing whitespace'
+ 'error:output trailing-whitespace warning and refuse to apply patch'
+ 'error-all:same as "error", but output warnings for all files')
+
+ _describe -t strategies 'trailing-whitespace resolution strategy' strategies $*
+}
+
+
+_repo()
+{
+ local context state state_descr line curcontext="$curcontext"
+ typeset -A opt_args
+
+ local ret=1
+
+ _arguments -C \
+ '(- 1 *)--help[show usage]'\
+ '1:command:->command'\
+ '*::args:->args' && ret=0
+
+ case $state in
+ (command)
+ repo list 2> /dev/null > /dev/null
+ if [[ $? == 0 ]]; then
+ local commands;
+ commands=(
+ 'abandon:Permanently abandon a development branch'
+ 'branch:View current topic branches'
+ 'branches:View current topic branches'
+ 'checkout:Checkout a branch for development'
+ 'cherry-pick:Cherry-pick a change.'
+ 'diff:Show changes between commit and working tree'
+ 'download:Download and checkout a change'
+ 'forall:execute command on several project'
+ 'grep:Print lines matching a pattern'
+ 'help:Display detailed help on a command'
+ 'init:Initialize repo in the current directory'
+ 'list:List projects and their associated directories'
+ 'manifest:Manifest inspection utility'
+ 'overview:Display overview of unmerged project branches'
+ 'prune:Prune (delete) already merged topics'
+ 'rebase:Rebase local branches on upstream branch'
+ 'selfupdate:Update repo to the latest version'
+ 'smartsync:Update working tree to the latest known good revision'
+ 'stage:Stage file(s) for commit'
+ 'start:Start a new branch for development'
+ 'status:Show the working tree status'
+ 'sync:Update working tree to the latest revision'
+ 'upload:Upload changes for code review'
+ 'version:Display the version of repo'
+ )
+ _describe -t commands 'command' commands && ret=0
+ else
+ local commands;
+ commands=(
+ 'init:Install repo in the current working directory'
+ 'help:Display detailed help on a command'
+ )
+ _describe -t commands 'command' commands && ret=0
+ fi
+ ;;
+ (args)
+ case $words[1] in
+ (branch | branches)
+ # TODO : list available projects and add them in list to feed compadd with
+ _arguments : \
+ "(-h --help)"{-h,--help}"[Show help]" \
+ ': :__repo_projects' \
+ && ret=0
+ ;;
+ (abandon)
+ # TODO : list available projects and add them in list to feed compadd with
+ _arguments : \
+ "(-h --help)"{-h,--help}"[Show help]" \
+ ':branch name:__repo_branch' \
+ ': :__repo_projects'\
+ && ret=0
+ ;;
+ (checkout)
+ # TODO : list available projects and add them in list to feed compadd with
+ _arguments : \
+ "(-h --help)"{-h,--help}"[Show help]" \
+ ':branch name:__repo_branch' \
+ ': :__repo_projects'\
+ && ret=0
+ ;;
+ (init)
+ _arguments : \
+ "(-h --help)"{-h,--help}"[Show help]" \
+ "(-q --quiet)"{-q,--quiet}"[be quiet]" \
+ "(-u --manifest-url)"{-u,--manifest-url=}"[manifest repository location]":url:__repo_url_prompt \
+ "(-b --manifest-branch)"{-b,--manifest-branch=}"[manifest branch or revision]":branch:__repo_branch\
+ "(-m --manifest-name)"{-m,--manifest-name=}"[initial manifest file]":manifest_name:__repo_manifest_name\
+ "(--mirror)--mirror[mirror the forrest]"\
+ "(--reference)--reference=[location of mirror directory]":dir:_dirs\
+ "(--depth)--depth=[create a shallow clone with given depth; see git clone]":depth:__repo_depth_prompt\
+ "(-g --group=)"{-g,--group=}"[restrict manifest projects to ones with a specified group]":group:_group\
+ "(-p --platform=)"{-p,--platform=}"[restrict manifest projects to ones with a specified platform group(auto|all|none|linux|darwin|...)]":platform:"(auto all none linux darwin)"\
+ "(--repo-url)--repo-url=[repo repository location]":url:__repo_url_prompt\
+ "(--repo-branch)--repo-branch[repo branch or revision]":branch_or_rev:__repo__repo_branch_or_rev\
+ "(--no-repo-verify)--no-repo-verify[do not verify repo source code]"\
+ "(--config-name)--config-name[Always prompt for name/e-mail]"\
+ && ret=0
+ ;;
+ (start)
+ _arguments : \
+ "(-h --help)"{-h,--help}"[Show help]" \
+ "(--all)--all=[begin branch in all projects]"\
+ ':branch name:__repo_new__repo_branch_name' \
+ ':projects:__repo_projects_or_all' \
+ && ret=0
+ ;;
+ (rebase)
+ _arguments : \
+ "(-h --help)"{-h,--help}"[Show help]" \
+ "(-i --interactive)"{-i,--interactive}"[interactive rebase (single project only)]: :__repo_projects" \
+ "(-f --force-rebase)"{-f,--force-rebase}"[Pass --force-rebase to git rebase]" \
+ "(--no-ff)--no-ff=[Pass --no-ff to git rebase]"\
+ "(-q --quiet)"{-q,--quiet}"[Pass --quiet to git rebase]" \
+ "(--autosquash)--no-ff[Pass --autosquash to git rebase]"\
+ "(--whitespace=)--whitespace=[Pass --whitespace to git rebase]: :__git_apply_whitespace_strategies"\
+ "(--auto-stash)--auto-stash[Stash local modifications before starting]"\
+ && ret=0
+ ;;
+ (checkout)
+ _arguments : \
+ "(-h --help)"{-h,--help}"[Show help]" \
+ ':branch name:__git_branch_names' \
+ ':projects:__repo_projects' \
+ && ret=0
+ ;;
+ (list)
+ _arguments : \
+ "(-h --help)"{-h,--help}"[Show help]" \
+ && ret=0
+ ;;
+ (status)
+ _arguments : \
+ "(-h --help)"{-h,--help}"[Show help]" \
+ "(-j --jobs)"{-j,--jobs}"[number of projects to check simultaneously]" \
+ ':projects:__repo_projects' \
+ && ret=0
+ ;;
+ (sync)
+ _arguments : \
+ "(-h --help)"{-h,--help}"[Show help]" \
+ "(--no-force-broken)--no-force-broken[stop sync if a project fails to sync (probably because of permissions)]" \
+ "(-l --local-only)"{-l,--local-only}"[only update working tree, don't fetch]" \
+ "(-n --network-only)"{-n,--network-branch}"[fetch only, don't update working tree]" \
+ "(-d --detach)"{-d,--detach}"[detach projects back to manifest revision]" \
+ "(-c --current-branch)"{-c,--current-branch}"[fetch only current branch from server]" \
+ "(-q --quiet)"{-q,--quiet}"[be more quiet]" \
+ "(-j --jobs=)"{-j,--jobs=}"[projects to fetch simultaneously (default 1) (limited to 5)]:projects to fetch simultaneously (default 1) (limited to 5)" \
+ "(-m --manifest-name=)"{-m,--manifest-name=}"[temporary manifest to use for this sync]:manifest xml file:_files -g *.xml" \
+ "(--no-clone-bundle)--no-clone-bundle[disable use of /clone.bundle on HTTP/HTTPS]" \
+ "(-s --smart-sync)"{-s,--smart-sync=}"[smart sync using manifest from a known tag]:tag:" \
+ '(--no-repo-verify)--no-repo-verify[do not verify repo source code]' \
+ ': :__repo_projects' \
+ && ret=0
+ ;;
+ (upload)
+ _arguments : \
+ "(-h --help)"{-h,--help}"[Show help]" \
+ "(-t)-t[Send local branch name to Gerrit Code Review]" \
+ "(--re= --reviewers=)"{--re=,--reviewers=}"[Request reviews from these people]:Request reviews from these people:" \
+ "(--cc=)--cc=[Also send email to these email addresses.]:email addresses:_email_addresses" \
+ "(--br=)--br=[Branch to upload.]:branch:__repo_branch" \
+ "(--cbr --current-branch)"{--cbr,--current-branch}"[Upload current git branch]" \
+ "(-d --draft)"{-d,--draft}"[If specified, upload as a draft.]" \
+ "(--verify --no-verify)--no-verify[Do not run the upload hook.]" \
+ '(--verify --no-verify)--verify[Run the upload hook without prompting]' \
+ ': :__repo_projects' \
+ && ret=0
+ ;;
+ (forall)
+ _arguments : \
+ "(-h --help)"{-h,--help}"[Show help]" \
+ "(-v --verbose)"{-v,--verbose}"[Show command error messages]" \
+ '(-p)-p[Show project headers before output]' \
+ ': :__repo_projects_mandatory' \
+ "(-c --command -h --help -v --verbose -p)"{-c,--command}"[Command (and arguments) to execute]" \
+ && ret=0
+ ;;
+ *)
+ ret=0
+ esac
+ ;;
+ esac
+
+ return $ret
+}
+
+__repo_reviewers()
+{
+ # _message -e url 'reviewers'
+}
+
+__repo_url_prompt()
+{
+ _message -e url 'url'
+}
+
+__repo_manifest_name()
+{
+ _message -e manifest_name 'manifest name'
+}
+
+_group()
+{
+ _message -e group 'group'
+}
+
+__repo_branch()
+{
+ #_message -e branch 'Repo branch'
+ branches=($(repo branches| cut -c4- | grep '|' | cut -d' ' -f1))
+ _describe -t branches 'Select repo branch' branches
+}
+
+__repo__repo_branch_or_rev()
+{
+ _message -e branch_or_rev 'repo branch or revision'
+}
+
+__repo_depth_prompt()
+{
+ _message -e depth 'depth'
+}
+
+__repo_projects()
+{
+ _message -e depth 'Optional option : ...'
+ projects=($(repo list | cut -d' ' -f1))
+ _describe -t projects 'Select projects (keep empty for selecting all projects)' projects
+}
+
+__repo_projects_mandatory()
+{
+ projects=($(repo list | cut -d' ' -f1))
+ #_describe -t projects 'Select projects to apply commands' projects
+ _values -s ' ' "Select projects to apply commands" $projects
+}
+
+__repo_new__repo_branch_name()
+{
+ branches=($(repo branches| cut -c4- | grep '|' | cut -d' ' -f1))
+ _describe "" branches
+ _message -e "branch name" 'Enter new branch name or select an existing repo branch'
+}
+
+__repo_projects_or_all()
+{
+ #_message -e depth '[--all | ...]'
+
+ projects=(--all $(repo list | cut -d' ' -f1))
+ _describe -t projects 'Select projects or --all' projects
+ _describe -t --all 'All projects'
+}
+
+_repo "$@"
+return $?
+
diff --git a/zsh/.oh-my-zsh/plugins/repo/repo.plugin.zsh b/zsh/.oh-my-zsh/plugins/repo/repo.plugin.zsh
new file mode 100644
index 0000000..51cd32f
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/repo/repo.plugin.zsh
@@ -0,0 +1,30 @@
+# Aliases
+alias r='repo'
+compdef _repo r=repo
+
+alias rra='repo rebase --auto-stash'
+compdef _repo rra='repo rebase --auto-stash'
+
+alias rs='repo sync'
+compdef _repo rs='repo sync'
+
+alias rsrra='repo sync ; repo rebase --auto-stash'
+compdef _repo rsrra='repo sync ; repo rebase --auto-stash'
+
+alias ru='repo upload'
+compdef _repo ru='repo upload'
+
+alias rst='repo status'
+compdef _repo rst='repo status'
+
+alias rsto='repo status -o'
+compdef _repo rsto='repo status -o'
+
+alias rfa='repo forall -c'
+compdef _repo rfa='repo forall -c'
+
+alias rfap='repo forall -p -c'
+compdef _repo rfap='repo forall -p -c'
+
+alias rinf='repo info'
+compdef _repo rinf='repo info'
diff --git a/zsh/.oh-my-zsh/plugins/ripgrep/README.md b/zsh/.oh-my-zsh/plugins/ripgrep/README.md
new file mode 100644
index 0000000..937f73c
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/ripgrep/README.md
@@ -0,0 +1,13 @@
+# ripgrep
+
+This plugin adds completion for the text search tool [`ripgrep`](https://github.com/BurntSushi/ripgrep), also known as `rg`.
+
+To use it, add `ripgrep` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... ripgrep)
+```
+
+Completion is taken from the ripgrep release [`11.0.2`](https://github.com/BurntSushi/ripgrep/releases/tag/11.0.2).
+
+Updated on August 16th, 2019.
diff --git a/zsh/.oh-my-zsh/plugins/ripgrep/_ripgrep b/zsh/.oh-my-zsh/plugins/ripgrep/_ripgrep
new file mode 100644
index 0000000..d7dcfd6
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/ripgrep/_ripgrep
@@ -0,0 +1,612 @@
+#compdef rg
+
+##
+# zsh completion function for ripgrep
+#
+# Run ci/test_complete.sh after building to ensure that the options supported by
+# this function stay in synch with the `rg` binary.
+#
+# For convenience, a completion reference guide is included at the bottom of
+# this file.
+#
+# Originally based on code from the zsh-users project — see copyright notice
+# below.
+
+_rg() {
+ local curcontext=$curcontext no='!' descr ret=1
+ local -a context line state state_descr args tmp suf
+ local -A opt_args
+
+ # ripgrep has many options which negate the effect of a more common one — for
+ # example, `--no-column` to negate `--column`, and `--messages` to negate
+ # `--no-messages`. There are so many of these, and they're so infrequently
+ # used, that some users will probably find it irritating if they're completed
+ # indiscriminately, so let's not do that unless either the current prefix
+ # matches one of those negation options or the user has the `complete-all`
+ # style set. Note that this prefix check has to be updated manually to account
+ # for all of the potential negation options listed below!
+ if
+ # We also want to list all of these options during testing
+ [[ $_RG_COMPLETE_LIST_ARGS == (1|t*|y*) ]] ||
+ # (--[imnp]* => --ignore*, --messages, --no-*, --pcre2-unicode)
+ [[ $PREFIX$SUFFIX == --[imnp]* ]] ||
+ zstyle -t ":complete:$curcontext:*" complete-all
+ then
+ no=
+ fi
+
+ # We make heavy use of argument groups here to prevent the option specs from
+ # growing unwieldy. These aren't supported in zsh <5.4, though, so we'll strip
+ # them out below if necessary. This makes the exclusions inaccurate on those
+ # older versions, but oh well — it's not that big a deal
+ args=(
+ + '(exclusive)' # Misc. fully exclusive options
+ '(: * -)'{-h,--help}'[display help information]'
+ '(: * -)'{-V,--version}'[display version information]'
+ '(: * -)'--pcre2-version'[print the version of PCRE2 used by ripgrep, if available]'
+
+ + '(buffered)' # buffering options
+ '--line-buffered[force line buffering]'
+ $no"--no-line-buffered[don't force line buffering]"
+ '--block-buffered[force block buffering]'
+ $no"--no-block-buffered[don't force block buffering]"
+
+ + '(case)' # Case-sensitivity options
+ {-i,--ignore-case}'[search case-insensitively]'
+ {-s,--case-sensitive}'[search case-sensitively]'
+ {-S,--smart-case}'[search case-insensitively if pattern is all lowercase]'
+
+ + '(context-a)' # Context (after) options
+ '(context-c)'{-A+,--after-context=}'[specify lines to show after each match]:number of lines'
+
+ + '(context-b)' # Context (before) options
+ '(context-c)'{-B+,--before-context=}'[specify lines to show before each match]:number of lines'
+
+ + '(context-c)' # Context (combined) options
+ '(context-a context-b)'{-C+,--context=}'[specify lines to show before and after each match]:number of lines'
+
+ + '(column)' # Column options
+ '--column[show column numbers for matches]'
+ $no"--no-column[don't show column numbers for matches]"
+
+ + '(count)' # Counting options
+ {-c,--count}'[only show count of matching lines for each file]'
+ '--count-matches[only show count of individual matches for each file]'
+
+ + '(encoding)' # Encoding options
+ {-E+,--encoding=}'[specify text encoding of files to search]: :_rg_encodings'
+ $no'--no-encoding[use default text encoding]'
+
+ + file # File-input options
+ '(1)*'{-f+,--file=}'[specify file containing patterns to search for]: :_files'
+
+ + '(file-match)' # Files with/without match options
+ '(stats)'{-l,--files-with-matches}'[only show names of files with matches]'
+ '(stats)--files-without-match[only show names of files without matches]'
+
+ + '(file-name)' # File-name options
+ {-H,--with-filename}'[show file name for matches]'
+ {-I,--no-filename}"[don't show file name for matches]"
+
+ + '(file-system)' # File system options
+ "--one-file-system[don't descend into directories on other file systems]"
+ $no'--no-one-file-system[descend into directories on other file systems]'
+
+ + '(fixed)' # Fixed-string options
+ {-F,--fixed-strings}'[treat pattern as literal string instead of regular expression]'
+ $no"--no-fixed-strings[don't treat pattern as literal string]"
+
+ + '(follow)' # Symlink-following options
+ {-L,--follow}'[follow symlinks]'
+ $no"--no-follow[don't follow symlinks]"
+
+ + glob # File-glob options
+ '*'{-g+,--glob=}'[include/exclude files matching specified glob]:glob'
+ '*--iglob=[include/exclude files matching specified case-insensitive glob]:glob'
+
+ + '(glob-case-insensitive)' # File-glob case sensitivity options
+ '--glob-case-insensitive[treat -g/--glob patterns case insensitively]'
+ $no'--no-glob-case-insensitive[treat -g/--glob patterns case sensitively]'
+
+ + '(heading)' # Heading options
+ '(pretty-vimgrep)--heading[show matches grouped by file name]'
+ "(pretty-vimgrep)--no-heading[don't show matches grouped by file name]"
+
+ + '(hidden)' # Hidden-file options
+ '--hidden[search hidden files and directories]'
+ $no"--no-hidden[don't search hidden files and directories]"
+
+ + '(hybrid)' # hybrid regex options
+ '--auto-hybrid-regex[dynamically use PCRE2 if necessary]'
+ $no"--no-auto-hybrid-regex[don't dynamically use PCRE2 if necessary]"
+
+ + '(ignore)' # Ignore-file options
+ "(--no-ignore-global --no-ignore-parent --no-ignore-vcs --no-ignore-dot)--no-ignore[don't respect ignore files]"
+ $no'(--ignore-global --ignore-parent --ignore-vcs --ignore-dot)--ignore[respect ignore files]'
+
+ + '(ignore-file-case-insensitive)' # Ignore-file case sensitivity options
+ '--ignore-file-case-insensitive[process ignore files case insensitively]'
+ $no'--no-ignore-file-case-insensitive[process ignore files case sensitively]'
+
+ + '(ignore-global)' # Global ignore-file options
+ "--no-ignore-global[don't respect global ignore files]"
+ $no'--ignore-global[respect global ignore files]'
+
+ + '(ignore-parent)' # Parent ignore-file options
+ "--no-ignore-parent[don't respect ignore files in parent directories]"
+ $no'--ignore-parent[respect ignore files in parent directories]'
+
+ + '(ignore-vcs)' # VCS ignore-file options
+ "--no-ignore-vcs[don't respect version control ignore files]"
+ $no'--ignore-vcs[respect version control ignore files]'
+
+ + '(ignore-dot)' # .ignore-file options
+ "--no-ignore-dot[don't respect .ignore files]"
+ $no'--ignore-dot[respect .ignore files]'
+
+ + '(json)' # JSON options
+ '--json[output results in JSON Lines format]'
+ $no"--no-json[don't output results in JSON Lines format]"
+
+ + '(line-number)' # Line-number options
+ {-n,--line-number}'[show line numbers for matches]'
+ {-N,--no-line-number}"[don't show line numbers for matches]"
+
+ + '(line-terminator)' # Line-terminator options
+ '--crlf[use CRLF as line terminator]'
+ $no"--no-crlf[don't use CRLF as line terminator]"
+ '(text)--null-data[use NUL as line terminator]'
+
+ + '(max-columns-preview)' # max column preview options
+ '--max-columns-preview[show preview for long lines (with -M)]'
+ $no"--no-max-columns-preview[don't show preview for long lines (with -M)]"
+
+ + '(max-depth)' # Directory-depth options
+ '--max-depth=[specify max number of directories to descend]:number of directories'
+ '!--maxdepth=:number of directories'
+
+ + '(messages)' # Error-message options
+ '(--no-ignore-messages)--no-messages[suppress some error messages]'
+ $no"--messages[don't suppress error messages affected by --no-messages]"
+
+ + '(messages-ignore)' # Ignore-error message options
+ "--no-ignore-messages[don't show ignore-file parse error messages]"
+ $no'--ignore-messages[show ignore-file parse error messages]'
+
+ + '(mmap)' # mmap options
+ '--mmap[search using memory maps when possible]'
+ "--no-mmap[don't search using memory maps]"
+
+ + '(multiline)' # Multiline options
+ {-U,--multiline}'[permit matching across multiple lines]'
+ $no'(multiline-dotall)--no-multiline[restrict matches to at most one line each]'
+
+ + '(multiline-dotall)' # Multiline DOTALL options
+ '(--no-multiline)--multiline-dotall[allow "." to match newline (with -U)]'
+ $no"(--no-multiline)--no-multiline-dotall[don't allow \".\" to match newline (with -U)]"
+
+ + '(only)' # Only-match options
+ {-o,--only-matching}'[show only matching part of each line]'
+
+ + '(passthru)' # Pass-through options
+ '(--vimgrep)--passthru[show both matching and non-matching lines]'
+ '!(--vimgrep)--passthrough'
+
+ + '(pcre2)' # PCRE2 options
+ {-P,--pcre2}'[enable matching with PCRE2]'
+ $no'(pcre2-unicode)--no-pcre2[disable matching with PCRE2]'
+
+ + '(pcre2-unicode)' # PCRE2 Unicode options
+ $no'(--no-pcre2 --no-pcre2-unicode)--pcre2-unicode[enable PCRE2 Unicode mode (with -P)]'
+ '(--no-pcre2 --pcre2-unicode)--no-pcre2-unicode[disable PCRE2 Unicode mode (with -P)]'
+
+ + '(pre)' # Preprocessing options
+ '(-z --search-zip)--pre=[specify preprocessor utility]:preprocessor utility:_command_names -e'
+ $no'--no-pre[disable preprocessor utility]'
+
+ + pre-glob # Preprocessing glob options
+ '*--pre-glob[include/exclude files for preprocessing with --pre]'
+
+ + '(pretty-vimgrep)' # Pretty/vimgrep display options
+ '(heading)'{-p,--pretty}'[alias for --color=always --heading -n]'
+ '(heading passthru)--vimgrep[show results in vim-compatible format]'
+
+ + regexp # Explicit pattern options
+ '(1 file)*'{-e+,--regexp=}'[specify pattern]:pattern'
+
+ + '(replace)' # Replacement options
+ {-r+,--replace=}'[specify string used to replace matches]:replace string'
+
+ + '(sort)' # File-sorting options
+ '(threads)--sort=[sort results in ascending order (disables parallelism)]:sort method:((
+ none\:"no sorting"
+ path\:"sort by file path"
+ modified\:"sort by last modified time"
+ accessed\:"sort by last accessed time"
+ created\:"sort by creation time"
+ ))'
+ '(threads)--sortr=[sort results in descending order (disables parallelism)]:sort method:((
+ none\:"no sorting"
+ path\:"sort by file path"
+ modified\:"sort by last modified time"
+ accessed\:"sort by last accessed time"
+ created\:"sort by creation time"
+ ))'
+ '!(threads)--sort-files[sort results by file path (disables parallelism)]'
+
+ + '(stats)' # Statistics options
+ '(--files file-match)--stats[show search statistics]'
+ $no"--no-stats[don't show search statistics]"
+
+ + '(text)' # Binary-search options
+ {-a,--text}'[search binary files as if they were text]'
+ "--binary[search binary files, don't print binary data]"
+ $no"--no-binary[don't search binary files]"
+ $no"(--null-data)--no-text[don't search binary files as if they were text]"
+
+ + '(threads)' # Thread-count options
+ '(sort)'{-j+,--threads=}'[specify approximate number of threads to use]:number of threads'
+
+ + '(trim)' # Trim options
+ '--trim[trim any ASCII whitespace prefix from each line]'
+ $no"--no-trim[don't trim ASCII whitespace prefix from each line]"
+
+ + type # Type options
+ '*'{-t+,--type=}'[only search files matching specified type]: :_rg_types'
+ '*--type-add=[add new glob for specified file type]: :->typespec'
+ '*--type-clear=[clear globs previously defined for specified file type]: :_rg_types'
+ # This should actually be exclusive with everything but other type options
+ '(: *)--type-list[show all supported file types and their associated globs]'
+ '*'{-T+,--type-not=}"[don't search files matching specified file type]: :_rg_types"
+
+ + '(word-line)' # Whole-word/line match options
+ {-w,--word-regexp}'[only show matches surrounded by word boundaries]'
+ {-x,--line-regexp}'[only show matches surrounded by line boundaries]'
+
+ + '(zip)' # Compression options
+ '(--pre)'{-z,--search-zip}'[search in compressed files]'
+ $no"--no-search-zip[don't search in compressed files]"
+
+ + misc # Other options — no need to separate these at the moment
+ '(-b --byte-offset)'{-b,--byte-offset}'[show 0-based byte offset for each matching line]'
+ '--color=[specify when to use colors in output]:when:((
+ never\:"never use colors"
+ auto\:"use colors or not based on stdout, TERM, etc."
+ always\:"always use colors"
+ ansi\:"always use ANSI colors (even on Windows)"
+ ))'
+ '*--colors=[specify color and style settings]: :->colorspec'
+ '--context-separator=[specify string used to separate non-continuous context lines in output]:separator'
+ '--debug[show debug messages]'
+ '--dfa-size-limit=[specify upper size limit of generated DFA]:DFA size (bytes)'
+ "(1 stats)--files[show each file that would be searched (but don't search)]"
+ '*--ignore-file=[specify additional ignore file]:ignore file:_files'
+ '(-v --invert-match)'{-v,--invert-match}'[invert matching]'
+ '(-M --max-columns)'{-M+,--max-columns=}'[specify max length of lines to print]:number of bytes'
+ '(-m --max-count)'{-m+,--max-count=}'[specify max number of matches per file]:number of matches'
+ '--max-filesize=[specify size above which files should be ignored]:file size (bytes)'
+ "--no-config[don't load configuration files]"
+ '(-0 --null)'{-0,--null}'[print NUL byte after file names]'
+ '--path-separator=[specify path separator to use when printing file names]:separator'
+ '(-q --quiet)'{-q,--quiet}'[suppress normal output]'
+ '--regex-size-limit=[specify upper size limit of compiled regex]:regex size (bytes)'
+ '*'{-u,--unrestricted}'[reduce level of "smart" searching]'
+
+ + operand # Operands
+ '(--files --type-list file regexp)1: :_guard "^-*" pattern'
+ '(--type-list)*: :_files'
+ )
+
+ # This is used with test_complete.sh to verify that there are no options
+ # listed in the help output that aren't also defined here
+ [[ $_RG_COMPLETE_LIST_ARGS == (1|t*|y*) ]] && {
+ print -rl - $args
+ return 0
+ }
+
+ # Strip out argument groups where unsupported (see above)
+ [[ $ZSH_VERSION == (4|5.<0-3>)(.*)# ]] &&
+ args=( ${(@)args:#(#i)(+|[a-z0-9][a-z0-9_-]#|\([a-z0-9][a-z0-9_-]#\))} )
+
+ _arguments -C -s -S : $args && ret=0
+
+ case $state in
+ colorspec)
+ if [[ ${IPREFIX#--*=}$PREFIX == [^:]# ]]; then
+ suf=( -qS: )
+ tmp=(
+ 'column:specify coloring for column numbers'
+ 'line:specify coloring for line numbers'
+ 'match:specify coloring for match text'
+ 'path:specify coloring for file names'
+ )
+ descr='color/style type'
+ elif [[ ${IPREFIX#--*=}$PREFIX == (column|line|match|path):[^:]# ]]; then
+ suf=( -qS: )
+ tmp=(
+ 'none:clear color/style for type'
+ 'bg:specify background color'
+ 'fg:specify foreground color'
+ 'style:specify text style'
+ )
+ descr='color/style attribute'
+ elif [[ ${IPREFIX#--*=}$PREFIX == [^:]##:(bg|fg):[^:]# ]]; then
+ tmp=( black blue green red cyan magenta yellow white )
+ descr='color name or r,g,b'
+ elif [[ ${IPREFIX#--*=}$PREFIX == [^:]##:style:[^:]# ]]; then
+ tmp=( {,no}bold {,no}intense {,no}underline )
+ descr='style name'
+ else
+ _message -e colorspec 'no more arguments'
+ fi
+
+ (( $#tmp )) && {
+ compset -P '*:'
+ _describe -t colorspec $descr tmp $suf && ret=0
+ }
+ ;;
+
+ typespec)
+ if compset -P '[^:]##:include:'; then
+ _sequence -s , _rg_types && ret=0
+ # @todo This bit in particular could be better, but it's a little
+ # complex, and attempting to solve it seems to run us up against a crash
+ # bug — zsh # 40362
+ elif compset -P '[^:]##:'; then
+ _message 'glob or include directive' && ret=1
+ elif [[ ! -prefix *:* ]]; then
+ _rg_types -qS : && ret=0
+ fi
+ ;;
+ esac
+
+ return ret
+}
+
+# Complete encodings
+_rg_encodings() {
+ local -a expl
+ local -aU _encodings
+
+ # This is impossible to read, but these encodings rarely if ever change, so it
+ # probably doesn't matter. They are derived from the list given here:
+ # https://encoding.spec.whatwg.org/#concept-encoding-get
+ _encodings=(
+ {{,us-}ascii,arabic,chinese,cyrillic,greek{,8},hebrew,korean}
+ logical visual mac {,cs}macintosh x-mac-{cyrillic,roman,ukrainian}
+ 866 ibm{819,866} csibm866
+ big5{,-hkscs} {cn-,cs}big5 x-x-big5
+ cp{819,866,125{0..8}} x-cp125{0..8}
+ csiso2022{jp,kr} csiso8859{6,8}{e,i}
+ csisolatin{{1..6},9} csisolatin{arabic,cyrillic,greek,hebrew}
+ ecma-{114,118} asmo-708 elot_928 sun_eu_greek
+ euc-{jp,kr} x-euc-jp cseuckr cseucpkdfmtjapanese
+ {,x-}gbk csiso58gb231280 gb18030 {,cs}gb2312 gb_2312{,-80} hz-gb-2312
+ iso-2022-{cn,cn-ext,jp,kr}
+ iso8859{,-}{{1..11},13,14,15}
+ iso-8859-{{1..11},{6,8}-{e,i},13,14,15,16} iso_8859-{{1..9},15}
+ iso_8859-{1,2,6,7}:1987 iso_8859-{3,4,5,8}:1988 iso_8859-9:1989
+ iso-ir-{58,100,101,109,110,126,127,138,144,148,149,157}
+ koi{,8,8-r,8-ru,8-u,8_r} cskoi8r
+ ks_c_5601-{1987,1989} ksc{,_}5691 csksc56011987
+ latin{1..6} l{{1..6},9}
+ shift{-,_}jis csshiftjis {,x-}sjis ms_kanji ms932
+ utf{,-}8 utf-16{,be,le} unicode-1-1-utf-8
+ windows-{31j,874,949,125{0..8}} dos-874 tis-620 ansi_x3.4-1968
+ x-user-defined auto none
+ )
+
+ _wanted encodings expl encoding compadd -a "$@" - _encodings
+}
+
+# Complete file types
+_rg_types() {
+ local -a expl
+ local -aU _types
+
+ _types=( ${(@)${(f)"$( _call_program types rg --type-list )"}%%:*} )
+
+ _wanted types expl 'file type' compadd -a "$@" - _types
+}
+
+_rg "$@"
+
+################################################################################
+# ZSH COMPLETION REFERENCE
+#
+# For the convenience of developers who aren't especially familiar with zsh
+# completion functions, a brief reference guide follows. This is in no way
+# comprehensive; it covers just enough of the basic structure, syntax, and
+# conventions to help someone make simple changes like adding new options. For
+# more complete documentation regarding zsh completion functions, please see the
+# following:
+#
+# * http://zsh.sourceforge.net/Doc/Release/Completion-System.html
+# * https://github.com/zsh-users/zsh/blob/master/Etc/completion-style-guide
+#
+# OVERVIEW
+#
+# Most zsh completion functions are defined in terms of `_arguments`, which is a
+# shell function that takes a series of argument specifications. The specs for
+# `rg` are stored in an array, which is common for more complex functions; the
+# elements of the array are passed to `_arguments` on invocation.
+#
+# ARGUMENT-SPECIFICATION SYNTAX
+#
+# The following is a contrived example of the argument specs for a simple tool:
+#
+# '(: * -)'{-h,--help}'[display help information]'
+# '(-q -v --quiet --verbose)'{-q,--quiet}'[decrease output verbosity]'
+# '!(-q -v --quiet --verbose)--silent'
+# '(-q -v --quiet --verbose)'{-v,--verbose}'[increase output verbosity]'
+# '--color=[specify when to use colors]:when:(always never auto)'
+# '*:example file:_files'
+#
+# Although there may appear to be six specs here, there are actually nine; we
+# use brace expansion to combine specs for options that go by multiple names,
+# like `-q` and `--quiet`. This is customary, and ties in with the fact that zsh
+# merges completion possibilities together when they have the same description.
+#
+# The first line defines the option `-h`/`--help`. With most tools, it isn't
+# useful to complete anything after `--help` because it effectively overrides
+# all others; the `(: * -)` at the beginning of the spec tells zsh not to
+# complete any other operands (`:` and `*`) or options (`-`) after this one has
+# been used. The `[...]` at the end associates a description with `-h`/`--help`;
+# as mentioned, zsh will see the identical descriptions and merge these options
+# together when offering completion possibilities.
+#
+# The next line defines `-q`/`--quiet`. Here we don't want to suppress further
+# completions entirely, but we don't want to offer `-q` if `--quiet` has been
+# given (since they do the same thing), nor do we want to offer `-v` (since it
+# doesn't make sense to be quiet and verbose at the same time). We don't need to
+# tell zsh not to offer `--quiet` a second time, since that's the default
+# behaviour, but since this line expands to two specs describing `-q` *and*
+# `--quiet` we do need to explicitly list all of them here.
+#
+# The next line defines a hidden option `--silent` — maybe it's a deprecated
+# synonym for `--quiet`. The leading `!` indicates that zsh shouldn't offer this
+# option during completion. The benefit of providing a spec for an option that
+# shouldn't be completed is that, if someone *does* use it, we can correctly
+# suppress completion of other options afterwards.
+#
+# The next line defines `-v`/`--verbose`; this works just like `-q`/`--quiet`.
+#
+# The next line defines `--color`. In this example, `--color` doesn't have a
+# corresponding short option, so we don't need to use brace expansion. Further,
+# there are no other options it's exclusive with (just itself), so we don't need
+# to define those at the beginning. However, it does take a mandatory argument.
+# The `=` at the end of `--color=` indicates that the argument may appear either
+# like `--color always` or like `--color=always`; this is how most GNU-style
+# command-line tools work. The corresponding short option would normally use `+`
+# — for example, `-c+` would allow either `-c always` or `-calways`. For this
+# option, the arguments are known ahead of time, so we can simply list them in
+# parentheses at the end (`when` is used as the description for the argument).
+#
+# The last line defines an operand (a non-option argument). In this example, the
+# operand can be used any number of times (the leading `*`), and it should be a
+# file path, so we tell zsh to call the `_files` function to complete it. The
+# `example file` in the middle is the description to use for this operand; we
+# could use a space instead to accept the default provided by `_files`.
+#
+# GROUPING ARGUMENT SPECIFICATIONS
+#
+# Newer versions of zsh support grouping argument specs together. All specs
+# following a `+` and then a group name are considered to be members of the
+# named group. Grouping is useful mostly for organisational purposes; it makes
+# the relationship between different options more obvious, and makes it easier
+# to specify exclusions.
+#
+# We could rewrite our example above using grouping as follows:
+#
+# '(: * -)'{-h,--help}'[display help information]'
+# '--color=[specify when to use colors]:when:(always never auto)'
+# '*:example file:_files'
+# + '(verbosity)'
+# {-q,--quiet}'[decrease output verbosity]'
+# '!--silent'
+# {-v,--verbose}'[increase output verbosity]'
+#
+# Here we take advantage of a useful feature of spec grouping — when the group
+# name is surrounded by parentheses, as in `(verbosity)`, it tells zsh that all
+# of the options in that group are exclusive with each other. As a result, we
+# don't need to manually list out the exclusions at the beginning of each
+# option.
+#
+# Groups can also be referred to by name in other argument specs; for example:
+#
+# '(xyz)--aaa' '*: :_files'
+# + xyz --xxx --yyy --zzz
+#
+# Here we use the group name `xyz` to tell zsh that `--xxx`, `--yyy`, and
+# `--zzz` are not to be completed after `--aaa`. This makes the exclusion list
+# much more compact and reusable.
+#
+# CONVENTIONS
+#
+# zsh completion functions generally adhere to the following conventions:
+#
+# * Use two spaces for indentation
+# * Combine specs for options with different names using brace expansion
+# * In combined specs, list the short option first (as in `{-a,--text}`)
+# * Use `+` or `=` as described above for options that take arguments
+# * Provide a description for all options, option-arguments, and operands
+# * Capitalise/punctuate argument descriptions as phrases, not complete
+# sentences — 'display help information', never 'Display help information.'
+# (but still capitalise acronyms and proper names)
+# * Write argument descriptions as verb phrases — 'display x', 'enable y',
+# 'use z'
+# * Word descriptions to make it clear when an option expects an argument;
+# usually this is done with the word 'specify', as in 'specify x' or
+# 'use specified x')
+# * Write argument descriptions as tersely as possible — for example, articles
+# like 'a' and 'the' should be omitted unless it would be confusing
+#
+# Other conventions currently used by this function:
+#
+# * Order argument specs alphabetically by group name, then option name
+# * Group options that are directly related, mutually exclusive, or frequently
+# referenced by other argument specs
+# * Use only characters in the set [a-z0-9_-] in group names
+# * Order exclusion lists as follows: short options, long options, groups
+# * Use American English in descriptions
+# * Use 'don't' in descriptions instead of 'do not'
+# * Word descriptions for related options as similarly as possible. For example,
+# `--foo[enable foo]` and `--no-foo[disable foo]`, or `--foo[use foo]` and
+# `--no-foo[don't use foo]`
+# * Word descriptions to make it clear when an option only makes sense with
+# another option, usually by adding '(with -x)' to the end
+# * Don't quote strings or variables unnecessarily. When quotes are required,
+# prefer single-quotes to double-quotes
+# * Prefix option specs with `$no` when the option serves only to negate the
+# behaviour of another option that must be provided explicitly by the user.
+# This prevents rarely used options from cluttering up the completion menu
+################################################################################
+
+# ------------------------------------------------------------------------------
+# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of the zsh-users nor the
+# names of its contributors may be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# ------------------------------------------------------------------------------
+# Description
+# -----------
+#
+# Completion script for ripgrep
+#
+# ------------------------------------------------------------------------------
+# Authors
+# -------
+#
+# * arcizan
+# * MaskRay
+#
+# ------------------------------------------------------------------------------
+
+# Local Variables:
+# mode: shell-script
+# coding: utf-8-unix
+# indent-tabs-mode: nil
+# sh-indentation: 2
+# sh-basic-offset: 2
+# End:
+# vim: ft=zsh sw=2 ts=2 et
diff --git a/zsh/.oh-my-zsh/plugins/ros/README.md b/zsh/.oh-my-zsh/plugins/ros/README.md
new file mode 100644
index 0000000..83573e4
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/ros/README.md
@@ -0,0 +1,10 @@
+# Roswell Plugin
+
+This plugin adds completions and aliases for [Roswell](https://github.com/roswell/roswell/).
+
+To use it, add `ros` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... ros)
+```
+
diff --git a/zsh/.oh-my-zsh/plugins/ros/_ros b/zsh/.oh-my-zsh/plugins/ros/_ros
new file mode 100644
index 0000000..6a04d3c
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/ros/_ros
@@ -0,0 +1,64 @@
+#compdef ros
+#autoload
+
+# roswell zsh completion, based on gem completion
+
+local -a _1st_arguments
+_1st_arguments=(
+'run: Run repl'
+'install:Install a given implementation or a system for roswell environment'
+'update:Update installed systems.'
+'build:Make executable from script.'
+'use:Change default implementation.'
+'init:a new ros script, optionally based on a template.'
+'fmt:Indent lisp source.'
+'list:Information'
+'template:[WIP] Manage templates'
+'delete:Delete installed implementations'
+'config:Get and set options'
+'version:Show the roswell version information'
+"help:Use \"ros help [command]\" for more information about a command."$'\n\t\t'"Use \"ros help [topic]\" for more information about the topic."
+)
+
+#local expl
+
+_arguments \
+ '(--version)'--version'[Print version information and quit]' \
+ '(-w --wrap)'{-w,--wrap}'[\[CODE\] Run roswell with a shell wrapper CODE]' \
+ '(-m --image)'{-m,--image}'[\[IMAGE\] continue from Lisp image IMAGE]' \
+ '(-M --module)'{-M,--module}'[\[NAME\] Execute ros script found in ROSWELLPATH. (pythons -m)]' \
+ '(-L --lisp)'{-L,--lisp}'[\[NAME\] Run roswell with a lisp impl NAME\[/VERSION\].]' \
+ '(-l --load)'{-l,--load}'[\[FILE\] load lisp FILE while building]' \
+ '(-S --source-registry)'{-S,--source-registry}'[\[X\] override source registry of asdf systems]' \
+ '(-s --system --load-system)'{-s,--system,--load-system}'[\[SYSTEM\] load asdf SYSTEM while building]' \
+ '(-p --package)'{-p,--package}'[\[PACKAGE\] change current package to \[PACKAGE\]]' \
+ '(-sp --system-package)'{-sp,--system-package}'[\[SP\] combination of -s \[SP\] and -p \[SP\]]' \
+ '(-e --eval)'{-e,--eval}'[\[FORM\] evaluate \[FORM\] while building]' \
+ '--require'--require'[\[MODULE\] require \[MODULE\] while building]' \
+ '(-q --quit)'{-q,--quit}'[quit lisp here]' \
+ '(-r --restart)'{-r,--restart}'[\[FUNC\] restart from build by calling (\[FUNC\])]' \
+ '(-E --entry)'{-E,--entry}'[\[FUNC\] restart from build by calling (\[FUNC\] argv)]' \
+ '(-i --init)'{-i,--init}'[\[FORM\] evaluate \[FORM\] after restart]' \
+ '(-ip --print)'{-ip,--print}'[\[FORM\] evaluate and princ \[FORM\] after restart]' \
+ '(-iw --write)'{-iw,--write}'[\[FORM\] evaluate and write \[FORM\] after restart]' \
+ '(-F --final)'{-F,--final}'[\[FORM\] evaluate \[FORM\] before dumping IMAGE]' \
+ '(\+R --no-rc)'{\+R,--no-rc}'[skip /etc/rosrc, ~/.roswell/init.lisp]' \
+ '(-A --asdf)'{-A,--asdf}'[use new asdf]' \
+ '(\+Q --no-quicklisp)'{\+Q,--no-quicklisp}'[do not use quicklisp]' \
+ '(-v --verbose)'{-v,--verbose}'[be quite noisy while building]' \
+ '--quiet'--quiet'[be quite quiet while building default]' \
+ '--test'--test'[for test purpose]' \
+ '*:: :->subcmds' && return 0
+
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "ros subcommand" _1st_arguments
+ return
+fi
+
+# _files
+case "$words[1]" in
+ -l|--load)
+ _files
+ ;;
+esac
diff --git a/zsh/.oh-my-zsh/plugins/rsync/README.md b/zsh/.oh-my-zsh/plugins/rsync/README.md
new file mode 100644
index 0000000..032ee7f
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rsync/README.md
@@ -0,0 +1,16 @@
+# rsync
+
+This plugin adds aliases for frequent [rsync](https://rsync.samba.org/) commands.
+
+To use it add `rsync` to the plugins array in you zshrc file.
+
+```zsh
+plugins=(... rsync)
+```
+
+| Alias | Command |
+| ------------------- | ------------------------------------------------ |
+| *rsync-copy* | `rsync -avz --progress -h` |
+| *rsync-move* | `rsync -avz --progress -h --remove-source-files` |
+| *rsync-update* | `rsync -avzu --progress -h` |
+| *rsync-synchronize* | `rsync -avzu --delete --progress -h` |
diff --git a/zsh/.oh-my-zsh/plugins/rsync/rsync.plugin.zsh b/zsh/.oh-my-zsh/plugins/rsync/rsync.plugin.zsh
new file mode 100644
index 0000000..1a3bb4c
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rsync/rsync.plugin.zsh
@@ -0,0 +1,4 @@
+alias rsync-copy="rsync -avz --progress -h"
+alias rsync-move="rsync -avz --progress -h --remove-source-files"
+alias rsync-update="rsync -avzu --progress -h"
+alias rsync-synchronize="rsync -avzu --delete --progress -h"
diff --git a/zsh/.oh-my-zsh/plugins/ruby/README.md b/zsh/.oh-my-zsh/plugins/ruby/README.md
new file mode 100644
index 0000000..ad2755b
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/ruby/README.md
@@ -0,0 +1,20 @@
+# Ruby plugin
+
+This plugin adds aliases for common commands used in dealing with [Ruby](https://www.ruby-lang.org/en/) and [gem packages](https://rubygems.org/).
+
+To use it, add `ruby` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... ruby)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+|-------|----------------------------------------|------------------------------------------------------|
+| rb | `ruby` | The Ruby command |
+| sgem | `sudo gem` | Run sudo gem on the system ruby, not the active ruby |
+| rfind | `find . -name "*.rb" \| xargs grep -n` | Find ruby file |
+| gin | `gem install` | Install a gem into the local repository |
+| gun | `gem uninstall` | Uninstall gems from the local repository |
+| gli | `gem list` | Display gems installed locally |
diff --git a/zsh/.oh-my-zsh/plugins/ruby/ruby.plugin.zsh b/zsh/.oh-my-zsh/plugins/ruby/ruby.plugin.zsh
new file mode 100644
index 0000000..177b35b
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/ruby/ruby.plugin.zsh
@@ -0,0 +1,14 @@
+# TODO: Make this compatible with rvm.
+# Run sudo gem on the system ruby, not the active ruby.
+alias sgem='sudo gem'
+
+# Find ruby file
+alias rfind='find . -name "*.rb" | xargs grep -n'
+
+# Shorthand Ruby
+alias rb="ruby"
+
+# Gem Command Shorthands
+alias gin="gem install"
+alias gun="gem uninstall"
+alias gli="gem list"
diff --git a/zsh/.oh-my-zsh/plugins/rust/README.md b/zsh/.oh-my-zsh/plugins/rust/README.md
new file mode 100644
index 0000000..83d7d91
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rust/README.md
@@ -0,0 +1,9 @@
+# rust
+
+This plugin adds completion for [`rustc`](https://doc.rust-lang.org/rustc/index.html), the compiler for the Rust programming language.
+
+To use it, add `rust` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... rust)
+```
diff --git a/zsh/.oh-my-zsh/plugins/rust/_rust b/zsh/.oh-my-zsh/plugins/rust/_rust
new file mode 100644
index 0000000..6e3f344
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rust/_rust
@@ -0,0 +1,228 @@
+#compdef rustc
+
+local -a _rustc_opts_switches _rustc_opts_lint _rustc_opts_debug
+
+typeset -A opt_args
+
+_rustc_debuginfo_levels=(
+ "0[no debug info]"
+ "1[line-tables only (for stacktraces and breakpoints)]"
+ "2[full debug info with variable and type information (same as -g)]"
+)
+
+_rustc_crate_types=(
+ 'bin'
+ 'lib'
+ 'rlib'
+ 'dylib'
+ 'cdylib'
+ 'staticlib'
+ 'proc-macro'
+)
+
+_rustc_emit_types=(
+ 'asm'
+ 'llvm-bc'
+ 'llvm-ir'
+ 'obj'
+ 'metadata'
+ 'link'
+ 'dep-info'
+ 'mir'
+)
+_rustc_print_types=(
+ 'crate-name'
+ 'file-names'
+ 'sysroot'
+ 'cfg'
+ 'target-list'
+ 'target-cpus'
+ 'target-features'
+ 'relocation-models'
+ 'code-models'
+ 'target-spec-json'
+ 'native-static-libs'
+)
+_rustc_pretty_types=(
+ 'normal[un-annotated source]'
+ 'expanded[crates expanded]'
+ 'expanded,identified[fully parenthesized, AST nodes with IDs]'
+)
+_rustc_unpretty_types=(
+ 'normal[un-annotated source]'
+ 'expanded[crates expanded]'
+ 'expanded,identified[fully parenthesized, AST nodes with IDs]'
+ 'flowgraph=[graphviz formatted flowgraph for node]:NODEID:'
+ 'everybody_loops[all function bodies replaced with `loop {}`]'
+ 'hir[the HIR]'
+ 'hir,identified'
+ 'hir,typed[HIR with types for each node]'
+)
+_rustc_color_types=(
+ 'auto[colorize, if output goes to a tty (default)]'
+ 'always[always colorize output]'
+ 'never[never colorize output]'
+)
+_rustc_error_format=(
+ 'human'
+ 'json'
+)
+
+_rustc_opts_vals=(
+ --cfg='[Configure the compilation environment]:SPEC:'
+ -L'[Add a directory to the library search path]:DIR:_files -/'
+ --crate-name='[Specify the name of the crate being built]'
+ --crate-type='[Comma separated list of types of crates for the compiler to emit]:TYPES:_values -s "," "Crate types" "$_rustc_crate_types[@]"'
+ --emit='[Comma separated list of types of output for the compiler to emit]:TYPES:_values -s "," "Emit Targets" "$_rustc_emit_types[@]"'
+ --print='[Comma separated list of compiler information to print on stdout]:TYPES:_values -s "," "Printable info" "$_rustc_print_types[@]"'
+ -o'[Write output to . Ignored if more than one --emit is specified.]:FILENAME:_files'
+ --out-dir='[Write output to compiler-chosen filename in . Ignored if -o is specified. (default the current directory)]:DIR:_files -/'
+ --explain='[Provide a detailed explanation of an error message]:OPT:'
+ --target='[Target triple cpu-manufacturer-kernel\[-os\] to compile]:TRIPLE:'
+ --extern'[Specify where an external rust library is located]:ARG:'
+ --sysroot='[Override the system root]:PATH:_files -/'
+ --error-format='[How errors and other messages are produced]:TYPES:_values "$_rustc_error_format"'
+ --debuginfo='[Emit DWARF debug info to the objects created]:LEVEL:_values "Debug Levels" "$_rustc_debuginfo_levels[@]"'
+ --dep-info='[Output dependency info to after compiling]::FILE:_files -/'
+ --opt-level='[Optimize with possible levels 0-3]:LEVEL:(0 1 2 3)'
+ --pretty='[Pretty-print the input instead of compiling]::TYPE:_values "TYPES" "$_rustc_pretty_types[@]"'
+ --unpretty='[Present the input source, unstable (and less-pretty)]::TYPE:_values "TYPES" "$_rustc_unpretty_types[@]"'
+ --color='[Configure coloring of output]:CONF:_values "COLORS" "$_rustc_color_types[@]"'
+)
+
+_rustc_opts_switches=(
+ -g'[Equivalent to --debuginfo=2]'
+ -O'[Equivalent to --opt-level=2]'
+ --test'[Build a test harness]'
+ {-v,--verbose}'[Use verbose output]'
+ {-V,--version}'[Print version info and exit]'
+ {-h,--help}'[Display this message]'
+ --no-analysis'[Parse and expand the output, but run no analysis or produce output]'
+ --no-trans'[Run all passes except translation; no output]'
+ --parse-only'[Parse only; do not compile, assemble, or link]'
+ --print-crate-name'[Output the crate name and exit]'
+ --print-file-name'[Output the file(s) that would be written if compilation continued and exit]'
+)
+_rustc_opts_codegen=(
+ 'ar=[Path to the archive utility to use when assembling archives.]:BIN:_path_files'
+ 'linker=[Path to the linker utility to use when linking libraries, executables, and objects.]:BIN:_path_files'
+ 'link-args=[A space-separated list of extra arguments to pass to the linker when the linker is invoked.]:ARGS:'
+ 'target-cpu=[Selects a target processor. If the value is "help", then a list of available CPUs is printed.]:CPU:'
+ 'target-feature=[A space-separated list of features to enable or disable for the target. A preceding "+" enables a feature while a preceding "-" disables it. Available features can be discovered through target-cpu=help.]:FEATURE:'
+ 'passes=[A space-separated list of extra LLVM passes to run. A value of "list" will cause rustc to print all known passes and exit. The passes specified are appended at the end of the normal pass manager.]:LIST:'
+ 'llvm-args=[A space-separated list of arguments to pass through to LLVM.]:ARGS:'
+ 'save-temps[If specified, the compiler will save more files (.bc, .o, .no-opt.bc) generated throughout compilation in the output directory.]'
+ 'rpath[If specified, then the rpath value for dynamic libraries will be set in either dynamic library or executable outputs.]'
+ 'no-prepopulate-passes[Suppresses pre-population of the LLVM pass manager that is run over the module.]'
+ 'no-vectorize-loops[Suppresses running the loop vectorization LLVM pass, regardless of optimization level.]'
+ 'no-vectorize-slp[Suppresses running the LLVM SLP vectorization pass, regardless of optimization level.]'
+ 'soft-float[Generates software floating point library calls instead of hardware instructions.]'
+ 'prefer-dynamic[Prefers dynamic linking to static linking.]'
+ "no-integrated-as[Force usage of an external assembler rather than LLVM's integrated one.]"
+ 'no-redzone[disable the use of the redzone]'
+ 'relocation-model=[The relocation model to use. (default: pic)]:MODEL:(pic static dynamic-no-pic)'
+ 'code-model=[choose the code model to use (llc -code-model for details)]:MODEL:'
+ 'metadata=[metadata to mangle symbol names with]:VAL:'
+ 'extra-filenames=[extra data to put in each output filename]:VAL:'
+ 'codegen-units=[divide crate into N units to optimize in parallel]:N:'
+ 'help[Show all codegen options]'
+)
+
+_rustc_opts_lint=(
+ 'help[Show a list of all lints]'
+ 'experimental[detects use of #\[experimental\] items]'
+ 'heap-memory[use of any (Box type or @ type) heap memory]'
+ 'managed-heap-memory[use of managed (@ type) heap memory]'
+ 'missing-doc[detects missing documentation for public members]'
+ 'non-uppercase-statics[static constants should have uppercase identifiers]'
+ 'owned-heap-memory[use of owned (~ type) heap memory]'
+ 'unnecessary-qualification[detects unnecessarily qualified names]'
+ 'unsafe-block[usage of an `unsafe` block]'
+ 'unstable[detects use of #\[unstable\] items (incl. items with no stability attribute)]'
+ 'unused-result[unused result of an expression in a statement]'
+ 'variant-size-difference[detects enums with widely varying variant sizes]'
+ 'ctypes[proper use of libc types in foreign modules]'
+ 'dead-assignment[detect assignments that will never be read]'
+ 'dead-code[detect piece of code that will never be used]'
+ 'deprecated[detects use of #\[deprecated\] items]'
+ 'non-camel-case-types[types, variants and traits should have camel case names]'
+ 'non-snake-case[methods, functions, lifetime parameters and modules should have snake case names]'
+ 'path-statement[path statements with no effect]'
+ 'raw-pointer-deriving[uses of #\[deriving\] with raw pointers are rarely correct]'
+ 'type-limits[comparisons made useless by limits of the types involved]'
+ 'type-overflow[literal out of range for its type]'
+ 'unnecessary-allocation[detects unnecessary allocations that can be eliminated]'
+ 'unnecessary-parens[`if`, `match`, `while` and `return` do not need parentheses]'
+ 'unreachable-code[detects unreachable code]'
+ 'unrecognized-lint[unrecognized lint attribute]'
+ 'unsigned-negate[using an unary minus operator on unsigned type]'
+ 'unused-attribute[detects attributes that were not used by the compiler]'
+ 'unused-imports[imports that are never used]'
+ 'unused-must-use[unused result of a type flagged as #\[must_use\]]'
+ "unused-mut[detect mut variables which don't need to be mutable]"
+ 'unused-unsafe[unnecessary use of an `unsafe` block]'
+ 'unused-variable[detect variables which are not used in any way]'
+ 'visible-private-types[detect use of private types in exported type signatures]'
+ 'warnings[mass-change the level for lints which produce warnings]'
+ 'while-true[suggest using `loop { }` instead of `while true { }`]'
+ 'unknown-crate-type[unknown crate type found in #\[crate_type\] directive]'
+ 'unknown-features[unknown features found in crate-level #\[feature\] directives]'
+ 'bad-style[group of non_camel_case_types, non_snake_case, non_uppercase_statics]'
+ 'unused[group of unused_imports, unused_variable, dead_assignment, dead_code, unused_mut, unreachable_code]'
+)
+
+_rustc_opts_debug=(
+ 'verbose[in general, enable more debug printouts]'
+ 'span-free-formats[when debug-printing compiler state, do not include spans]'
+ "identify-regions[make unnamed regions display as '# (where # is some non-ident unique id)]"
+ 'emit-end-regions[emit EndRegion as part of MIR; enable transforms that solely process EndRegion]'
+ 'time-passes[measure time of each rustc pass]'
+ 'count-llvm-insns[count where LLVM instrs originate]'
+ 'time-llvm-passes[measure time of each LLVM pass]'
+ 'trans-stats[gather trans statistics]'
+ 'asm-comments[generate comments into the assembly (may change behavior)]'
+ 'no-verify[skip LLVM verification]'
+ 'borrowck-stats[gather borrowck statistics]'
+ 'no-landing-pads[omit landing pads for unwinding]'
+ 'debug-llvm[enable debug output from LLVM]'
+ 'show-span[show spans for compiler debugging]'
+ 'count-type-sizes[count the sizes of aggregate types]'
+ 'meta-stats[gather metadata statistics]'
+ 'no-opt[do not optimize, even if -O is passed]'
+ 'print-link-args[Print the arguments passed to the linker]'
+ 'gc[Garbage collect shared data (experimental)]'
+ 'print-llvm-passes[Prints the llvm optimization passes being run]'
+ 'lto[Perform LLVM link-time optimizations]'
+ 'ast-json[Print the AST as JSON and halt]'
+ 'ast-json-noexpand[Print the pre-expansion AST as JSON and halt]'
+ 'ls[List the symbols defined by a library crate]'
+ 'save-analysis[Write syntax and type analysis information in addition to normal output]'
+ 'flowgraph-print-loans[Include loan analysis data in --pretty flowgraph output]'
+ 'flowgraph-print-moves[Include move analysis data in --pretty flowgraph output]'
+ 'flowgraph-print-assigns[Include assignment analysis data in --pretty flowgraph output]'
+ 'flowgraph-print-all[Include all dataflow analysis data in --pretty flowgraph output]'
+)
+
+_rustc_opts_fun_lint(){
+ _values -s , 'options' \
+ "$_rustc_opts_lint[@]"
+}
+
+_rustc_opts_fun_debug(){
+ _values 'options' "$_rustc_opts_debug[@]"
+}
+
+_rustc_opts_fun_codegen(){
+ _values 'options' "$_rustc_opts_codegen[@]"
+}
+
+_arguments -s : \
+ '(-W --warn)'{-W,--warn=}'[Set lint warnings]:lint options:_rustc_opts_fun_lint' \
+ '(-A --allow)'{-A,--allow=}'[Set lint allowed]:lint options:_rustc_opts_fun_lint' \
+ '(-D --deny)'{-D,--deny=}'[Set lint denied]:lint options:_rustc_opts_fun_lint' \
+ '(-F --forbid)'{-F,--forbid=}'[Set lint forbidden]:lint options:_rustc_opts_fun_lint' \
+ '*-Z[Set internal debugging options]:debug options:_rustc_opts_fun_debug' \
+ '*-C[Set internal Codegen options]:codegen options:_rustc_opts_fun_codegen' \
+ "$_rustc_opts_switches[@]" \
+ "$_rustc_opts_vals[@]" \
+ '::files:_files -g "*.rs"'
diff --git a/zsh/.oh-my-zsh/plugins/rvm/README.md b/zsh/.oh-my-zsh/plugins/rvm/README.md
new file mode 100644
index 0000000..9d6fd8f
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rvm/README.md
@@ -0,0 +1,19 @@
+# Ruby Version Manager plugin
+
+This plugin adds some utility functions and completions for [Ruby Version Manager](https://rvm.io/).
+
+To use it, add `rvm` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... rvm)
+```
+
+## Functions
+| Alias | Command |
+|----------------|----------------------|
+| `rb18` | `rvm use ruby-1.8.7` |
+| `rb19` | `rvm use ruby-1.9.3` |
+| `rb20` | `rvm use ruby-2.0.0` |
+| `rb21` | `rvm use ruby-2.1.2` |
+| `rvm-update` | `rvm get head` |
+| `gems` | `gem list` |
diff --git a/zsh/.oh-my-zsh/plugins/rvm/rvm.plugin.zsh b/zsh/.oh-my-zsh/plugins/rvm/rvm.plugin.zsh
new file mode 100644
index 0000000..53e809a
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/rvm/rvm.plugin.zsh
@@ -0,0 +1,74 @@
+fpath=($rvm_path/scripts/zsh/Completion $fpath)
+
+alias rubies='rvm list rubies'
+alias gemsets='rvm gemset list'
+
+local ruby18='ruby-1.8.7'
+local ruby19='ruby-1.9.3'
+local ruby20='ruby-2.0.0'
+local ruby21='ruby-2.1.2'
+
+function rb18 {
+ if [ -z "$1" ]; then
+ rvm use "$ruby18"
+ else
+ rvm use "$ruby18@$1"
+ fi
+}
+
+_rb18() {compadd `ls -1 $rvm_path/gems | grep "^$ruby18@" | sed -e "s/^$ruby18@//" | awk '{print $1}'`}
+compdef _rb18 rb18
+
+function rb19 {
+ if [ -z "$1" ]; then
+ rvm use "$ruby19"
+ else
+ rvm use "$ruby19@$1"
+ fi
+}
+
+_rb19() {compadd `ls -1 $rvm_path/gems | grep "^$ruby19@" | sed -e "s/^$ruby19@//" | awk '{print $1}'`}
+compdef _rb19 rb19
+
+function rb20 {
+ if [ -z "$1" ]; then
+ rvm use "$ruby20"
+ else
+ rvm use "$ruby20@$1"
+ fi
+}
+
+_rb20() {compadd `ls -1 $rvm_path/gems | grep "^$ruby20@" | sed -e "s/^$ruby20@//" | awk '{print $1}'`}
+compdef _rb20 rb20
+
+function rb21 {
+ if [ -z "$1" ]; then
+ rvm use "$ruby21"
+ else
+ rvm use "$ruby21@$1"
+ fi
+}
+
+_rb21() {compadd `ls -1 $rvm_path/gems | grep "^$ruby21@" | sed -e "s/^$ruby21@//" | awk '{print $1}'`}
+compdef _rb21 rb21
+
+function rvm-update {
+ rvm get head
+}
+
+# TODO: Make this usable w/o rvm.
+function gems {
+ local current_ruby=`rvm-prompt i v p`
+ local current_gemset=`rvm-prompt g`
+
+ gem list $@ | sed -E \
+ -e "s/\([0-9, \.]+( .+)?\)/$fg[blue]&$reset_color/g" \
+ -e "s|$(echo $rvm_path)|$fg[magenta]\$rvm_path$reset_color|g" \
+ -e "s/$current_ruby@global/$fg[yellow]&$reset_color/g" \
+ -e "s/$current_ruby$current_gemset$/$fg[green]&$reset_color/g"
+}
+
+function _rvm_completion {
+ source $rvm_path"/scripts/zsh/Completion/_rvm"
+}
+compdef _rvm_completion rvm
diff --git a/zsh/.oh-my-zsh/plugins/safe-paste/README.md b/zsh/.oh-my-zsh/plugins/safe-paste/README.md
new file mode 100644
index 0000000..a2e7ddb
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/safe-paste/README.md
@@ -0,0 +1,9 @@
+# safe-paste
+
+Preventing any code from actually running while pasting, so you have a chance to review what was actually pasted before running it.
+
+To use it, add `safe-paste` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... safe-paste)
+```
diff --git a/zsh/.oh-my-zsh/plugins/safe-paste/safe-paste.plugin.zsh b/zsh/.oh-my-zsh/plugins/safe-paste/safe-paste.plugin.zsh
new file mode 100644
index 0000000..75f1791
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/safe-paste/safe-paste.plugin.zsh
@@ -0,0 +1,54 @@
+# Code from Mikael Magnusson: https://www.zsh.org/mla/users/2011/msg00367.html
+#
+# Requires xterm, urxvt, iTerm2 or any other terminal that supports bracketed
+# paste mode as documented: https://www.xfree86.org/current/ctlseqs.html
+
+# create a new keymap to use while pasting
+bindkey -N paste
+# make everything in this keymap call our custom widget
+bindkey -R -M paste "^@"-"\M-^?" paste-insert
+# these are the codes sent around the pasted text in bracketed
+# paste mode.
+# do the first one with both -M viins and -M vicmd in vi mode
+bindkey '^[[200~' _start_paste
+bindkey -M paste '^[[201~' _end_paste
+# insert newlines rather than carriage returns when pasting newlines
+bindkey -M paste -s '^M' '^J'
+
+zle -N _start_paste
+zle -N _end_paste
+zle -N zle-line-init _zle_line_init
+zle -N zle-line-finish _zle_line_finish
+zle -N paste-insert _paste_insert
+
+# switch the active keymap to paste mode
+function _start_paste() {
+ bindkey -A paste main
+}
+
+# go back to our normal keymap, and insert all the pasted text in the
+# command line. this has the nice effect of making the whole paste be
+# a single undo/redo event.
+function _end_paste() {
+#use bindkey -v here with vi mode probably. maybe you want to track
+#if you were in ins or cmd mode and restore the right one.
+ bindkey -e
+ LBUFFER+=$_paste_content
+ unset _paste_content
+}
+
+function _paste_insert() {
+ _paste_content+=$KEYS
+}
+
+function _zle_line_init() {
+ # Tell terminal to send escape codes around pastes.
+ [[ $TERM == rxvt-unicode || $TERM == xterm || $TERM = xterm-256color || $TERM = screen || $TERM = screen-256color ]] && printf '\e[?2004h'
+}
+
+function _zle_line_finish() {
+ # Tell it to stop when we leave zle, so pasting in other programs
+ # doesn't get the ^[[200~ codes around the pasted text.
+ [[ $TERM == rxvt-unicode || $TERM == xterm || $TERM = xterm-256color || $TERM = screen || $TERM = screen-256color ]] && printf '\e[?2004l'
+}
+
diff --git a/zsh/.oh-my-zsh/plugins/salt/README.md b/zsh/.oh-my-zsh/plugins/salt/README.md
new file mode 100644
index 0000000..3d224cc
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/salt/README.md
@@ -0,0 +1,5 @@
+## Salt autocomplete plugin
+
+A copy of the completion script from the
+[salt](https://github.com/saltstack/salt/blob/develop/pkg/zsh_completion.zsh)
+git repo.
diff --git a/zsh/.oh-my-zsh/plugins/salt/_salt b/zsh/.oh-my-zsh/plugins/salt/_salt
new file mode 100644
index 0000000..78d8611
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/salt/_salt
@@ -0,0 +1,279 @@
+#compdef salt salt-call salt-cp salt-run salt-key
+# The use-cache style is checked in a few places to allow caching minions, modules,
+# or the directory salt is installed in.
+# you can cache those three with:
+# zstyle ':completion:*:salt(|-cp|-call|-run|-key):*' use-cache true
+# and/or selectively:
+# zstyle ':completion::complete:salt-key:set-option-a-1:' use-cache false
+# zstyle ':completion::complete:salt(|-cp|-call):minions:' use-cache true
+# zstyle ':completion::complete:salt(|-call):modules:' use-cache true
+# zstyle ':completion::complete:salt(|-cp|-call|-run|-key):salt_dir:' use-cache true
+#
+# cache validation can be controled with the style cache-ttl.
+# it expects two arguments: number (days|hours|weeks|months)
+# to invalidate the minion cache after four days:
+# zstyle ':completion::complete:salt(|-cp|-call):minions:' cache-ttl 4 days
+
+
+local state line curcontext="$curcontext" salt_dir
+
+_modules(){
+ local _funcs expl curcontext=${curcontext%:*}:modules
+
+ if ! zstyle -m ":completion:$curcontext:" cache-policy '*'; then
+ zstyle ":completion:$curcontext:" cache-policy _salt_caching_policy
+ fi
+
+ if _cache_invalid salt/modules || ! _retrieve_cache salt/modules; then
+ _funcs=( ${${(Q)${${(s. .)"$(_call_program salt-call-cmd salt-call --local --log-level error --out txt sys.list_functions)"}%%[],]##}#\[}:#local:} )
+ _store_cache salt/modules _funcs
+ fi
+
+ _wanted modules expl modules _multi_parts "$@" . _funcs
+}
+
+_runners(){
+ local _runs expl curcontext=${curcontext%:*}:runners
+
+ if ! zstyle -m ":completion:$curcontext:" cache-policy '*'; then
+ zstyle ":completion:$curcontext:" cache-policy _salt_caching_policy
+ fi
+
+ if _cache_invalid salt/runners || ! _retrieve_cache salt/runners; then
+ _runs=( ${${(Q)${${(s. .)"$(_call_program salt-call-cmd salt-call --local --log-level error --out txt sys.list_runner_functions)"}%%[],]##}#\[}:#local:} )
+ _store_cache salt/runners _runs
+ fi
+
+ _wanted modules expl runners _multi_parts "$@" . _runs
+}
+
+_minions(){
+ local type requested_type include_all key expl; typeset -A _peons
+
+ # when completing the minion argument for salt and salt-cp, set the argument section
+ # of the context to `minion' not `argument-1'
+ if [[ $service = salt(|-cp) ]]; then
+ curcontext=${curcontext%:*}:minions
+ fi
+
+ # only pass the argument accepted, unaccepted, rejected, denied or all to -t/-T
+ # the argument is used as part of an tag, accepted-minions, rejected-minions, etc.
+ # while un, acc, den, etc will work, you will possibly ignore user customized tags.
+ zparseopts -D -E 't+:=requested_type' 'T+:=include_all'
+
+ if ! zstyle -m ":completion:$curcontext:" cache-policy '*'; then
+ zstyle ":completion:$curcontext:" cache-policy _salt_caching_policy
+ fi
+
+ if _cache_invalid salt/minions || ! _retrieve_cache salt/minions; then
+ # it would be awesome if salt-key could prefix or suffix a word to denote
+ # the key's state. It would remove the need for this loop, calling salt-key N times.
+ for type in accepted unaccepted rejected denied; do
+ salt-key -l $type 2>/dev/null | while read -r key; do
+ [[ $key == *' Keys:' ]] && continue
+ _peons+=( "$key" $type )
+ done
+ done
+ _store_cache salt/minions _peons
+ fi
+
+ # if salt-key's --include-all option isn't on the line, ignore the -T options
+ (( words[(I)--include-all] )) || unset include_all
+
+ if (( requested_type[(I)all] )); then
+ requested_type=( -t accepted -t unaccepted -t rejected -t denied )
+ unset include_all
+ fi
+
+ for type in ${${requested_type:#-t}:-accepted} ${include_all:#-T}; do
+ _wanted $type-minions expl minion compadd "$@" -M 'r:|.=* r:|=*' ${(k)_peons[(R)$~type]}
+ done
+}
+
+(( $+functions[_salt_caching_policy] )) ||
+_salt_caching_policy() {
+ local oldp ttl d t
+ zstyle -a ":completion:$curcontext:" cache-ttl ttl
+
+ if (( $#ttl >= 2 )); then
+ [[ $ttl[1] == <-> ]] && integer t=$ttl[1]
+
+ case $ttl[2] in
+ seconds#)d=s;;
+ months#) d=M;;
+ weeks#) d=w;;
+ hours#) d=h;;
+ *) d=d;;
+ esac
+ fi
+
+ oldp=( "$1"(Nm${d:-d}+${t:-1}) )
+ (( $#oldp ))
+}
+
+local -a _{target,master,logging,minion}_options _{common,out}_opts _target_opt_pat
+_target_opt_pat=(
+ '(-[ELGNRCIS]|--(pcre|list|grain(|-pcre)|nodegroup|range|compound|pillar|ipcidr))'
+ '(-E --pcre -L --list -G --grain --grain-pcre -N --nodegroup -R --range -C --compound -I --pillar -S --ipcidr)'
+)
+
+_target_options=(
+ "$_target_opt_pat[2]"{-E,--pcre}'[use pcre regular expressions]:pcre:'
+ "$_target_opt_pat[2]"{-L,--list}'[take a comma or whitespace delimited list of servers.]:list:'
+ "$_target_opt_pat[2]"{-G,--grain}'[use a grain value to identify targets]:Grains:'
+ "$_target_opt_pat[2]--grain-pcre[use a grain value to identify targets.]:pcre:"
+ "$_target_opt_pat[2]"{-N,--nodegroup}'[use one of the predefined nodegroups to identify a list of targets.]:Nodegroup:'
+ "$_target_opt_pat[2]"{-R,--range}'[use a range expression to identify targets.]:Range:'
+ "$_target_opt_pat[2]"{-C,--compound}'[Use multiple targeting options.]:Compound:'
+ "$_target_opt_pat[2]"{-I,--pillar}'[use a pillar value to identify targets.]:Pillar:'
+ "$_target_opt_pat[2]"{-S,--ipcidr}'[Match based on Subnet (CIDR notation) or IPv4 address.]:Cidr:'
+)
+
+_common_opts=(
+ "--version[show program's version number and exit]"
+ "--versions-report[show program's dependencies version number and exit]"
+ '(-h --help)'{-h,--help}'[show this help message and exit]'
+ '(-c --config-dir)'{-c,--config-dir}'[Pass in an alternative configuration directory.(default: /etc/salt/)]:Config Directory:_files -/'
+ '(-t --timeout)'{-t,--timeout}'[Change the timeout for the running command; default=5]:Timeout (seconds):'
+)
+
+_master_options=(
+ '(-s --static)'{-s,--static}'[Return the data from minions as a group after they all return.]'
+ "--async[Run the salt command but don't wait for a reply]"
+ '(--state-output --state_output)'{--state-output,--state_output}'[Override the configured state_output value for minion output. Default: full]:Outputs:(full terse mixed changes)'
+ '--subset[Execute the routine on a random subset of the targeted minions]:Subset:'
+ '(-v --verbose)'{-v,--verbose}'[Turn on command verbosity, display jid and active job queries]'
+ '--hide-timeout[Hide minions that timeout]'
+ '(-b --batch --batch-size)'{-b,--batch,--batch-size}'[Execute the salt job in batch mode, pass number or percentage to batch.]:Batch Size:'
+ '(-a --auth --eauth --extrenal-auth)'{-a,--auth,--eauth,--external-auth}'[Specify an external authentication system to use.]:eauth:'
+ '(-T --make-token)'{-T,--make-token}'[Generate and save an authentication token for re-use.]'
+ '--return[Set an alternative return method.]:Returners:_path_files -W "$salt_dir/returners" -g "[^_]*.py(\:r)"'
+ '(-d --doc --documentation)'{-d,--doc,--documentation}'[Return the documentation for the specified module]'
+ '--args-separator[Set the special argument used as a delimiter between command arguments of compound commands.]:Arg separator:'
+)
+
+_minion_options=(
+ '--return[Set an alternative return method.]:Returners:_path_files -W "$salt_dir"/returners" -g "[^_]*.py(\:r)"'
+ '(-d --doc --documentation)'{-d,--doc,--documentation}'[Return the documentation for the specified module]'
+ '(-g --grains)'{-g,--grains}'[Return the information generated by the salt grains]'
+ {*-m,*--module-dirs}'[Specify an additional directory to pull modules from.]:Module Dirs:_files -/'
+ '--master[Specify the master to use.]:Master:'
+ '--local[Run salt-call locally, as if there was no master running.]'
+ '--file-root[Set this directory as the base file root.]:File Root:_files -/'
+ '--pillar-root[Set this directory as the base pillar root.]:Pillar Root:_files -/'
+ '--retcode-passthrough[Exit with the salt call retcode and not the salt binary retcode]'
+ '--id[Specify the minion id to use.]:Minion ID:'
+ '--skip-grains[Do not load grains.]'
+ '--refresh-grains-cache[Force a refresh of the grains cache]'
+)
+
+_runner_options=(
+ '--hard-crash[raise any original exception rather than exiting gracefully]'
+ '(-d --doc --documentation)'{-d,--doc,--documentation}'[Return the documentation for the specified module]'
+)
+
+_key_options=(
+ '(-u --user)'{-u+,--user=}'[specify user to run salt-key]:user:_users'
+ '--hard-crash[raise any original exception rather than exiting gracefully]'
+ '(-q --quiet)'{-q,--quiet}'[quiet mode]'
+ '(-y --yes)'{-y,--yes}'[assume yes]'
+ '--rotate-aes-key[prevents the master from refreshing the key session when keys are deleted or rejected]:boolean:(true false)'
+ '--gen-keys=[set a name to generate a keypair for use with salt]:key name'
+ '--gen-keys-dir=[set the directory to save the generated keypair]: : _directories'
+ '--keysize=[set the size for keypair]:key size'
+ '--gen-signature[create a signature file of the masters public-key]'
+ '--priv=[the private-key file to create a signature with]:private key:_files'
+ '--signature-path=[the path where the signature file should be written]: : _directories'
+ '--pub=[the public-key file to create a signature for]:public key:_files'
+ '--auto-create[auto-create a signing key-pair if it does not yet exist]'
+ '--include-all[include non-pending keys when accepting/rejecting]'
+ - '(set)'
+ {-l+,--list=}'[list public keys]:key type:((
+ preaccepted\:"unaccepted/unsigned keys" unaccepted\:"unaccepted/unsigned keys" un\:"unaccepted/unsigned keys"
+ accepted\:"accepted/signed keys" acc\:"accepted/signed keys"
+ rejected\:"rejected keys" rej\:"rejected keys"
+ den\:"denied keys" denied\:"denied keys" all
+ ))'
+ {-a+,--accept=}'[accept key]:key:_minions -t unaccepted -T rejected'
+ {-A,--accept-all}'[accept all keys]'
+ {-r+,--reject=}'[reject key]:key:_minions -t rejected -T accepted'
+ {-p+,--print=}'[print the specified public key]:key:_minions -t all'
+ {-P,--print-all}'[print all public keys]'
+ {-d+,--delete=}'[delete the specified public key]:key:_minions -t all'
+ {-D,--delete-all}'[delete all public keys]'
+ {-f+,--finger=}'[print the specified key'\''s fingerprint]:key:_minions -t all'
+ {-F,--finger-all}'[print the fingerprint of all keys]'
+)
+
+_logging_options=(
+ '(-l --log-level)'{-l,--log-level}'[Console logging log level.(default: warning)]:Log Level:(all garbage trace debug info warning error critical quiet)'
+ '--log-file[Log file path. Default: /var/log/salt/master.]:Log File:_files'
+ '--log-file-level=[Logfile logging log level.Default: warning]:Log Level:(all garbage trace debug info warning error critical quiet)'
+)
+
+_out_opts=(
+ '(--out --output)'{--out,--output}'[Print the output using the specified outputter.]:Outputters:_path_files -W "$salt_dir/output" -g "[^_]*.py(\:r)"'
+ '(--out-indent --output-indent)'{--out-indent,--output-indent}'[Print the output indented by the provided value in spaces.]:Number:'
+ '(--out-file --output-file)'{--out-file,--output-file}'[Write the output to the specified file]:Output File:_files'
+ '(--no-color --no-colour)'{--no-color,--no-colour}'[Disable all colored output]'
+ '(--force-color --force-colour)'{--force-color,--force-colour}'[Force colored output]'
+)
+
+_salt_comp(){
+ case "$service" in
+ salt)
+ _arguments -C \
+ "${words[(r)$_target_opt_pat[1]]+!}:minions:_minions" \
+ ':modules:_modules' \
+ "$_target_options[@]" \
+ "$_common_opts[@]" \
+ "$_master_options[@]" \
+ "$_logging_options[@]" \
+ "$_out_opts[@]"
+ ;;
+ salt-call)
+ _arguments -C \
+ ':modules:_modules' \
+ "$_minion_options[@]" \
+ "$_common_opts[@]" \
+ "$_logging_options[@]" \
+ "$_out_opts[@]"
+ ;;
+ salt-cp)
+ _arguments -C \
+ "${words[(r)$_target_opt_pat[1]]+!}:minions:_minions" \
+ "$_target_options[@]" \
+ "$_common_opts[@]" \
+ "$_logging_options[@]" \
+ ':Source File:_files' \
+ ':Destination File:_files'
+ ;;
+ salt-run)
+ _arguments -C \
+ ":runners:_runners" \
+ "$_runner_options[@]" \
+ "$_common_opts[@]" \
+ "$_logging_options[@]"
+ ;;
+ salt-key)
+ _arguments -C \
+ "$_key_options[@]" \
+ "${_common_opts[@]:#'-t --timeout\)'*}" \
+ "${_logging_options[@]:#'(-l --log-level)'*}"
+ ;;
+ esac
+}
+
+() {
+ local curcontext=${curcontext%:*}:salt_dir
+ if ! zstyle -m ":completion:$curcontext:" cache-policy '*'; then
+ zstyle ":completion:$curcontext:" cache-policy _salt_caching_policy
+ fi
+
+ if _cache_invalid salt/salt_dir || ! _retrieve_cache salt/salt_dir; then
+ salt_dir="${$(python2 -c 'import sys; del sys.path[0]; import salt; print(salt.__file__);')%__init__*}"
+ _store_cache salt/salt_dir salt_dir
+ fi
+}
+
+_salt_comp "$@"
diff --git a/zsh/.oh-my-zsh/plugins/sbt/README.md b/zsh/.oh-my-zsh/plugins/sbt/README.md
new file mode 100644
index 0000000..f020193
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/sbt/README.md
@@ -0,0 +1,32 @@
+# sbt plugin
+
+This plugin adds completion for the [sbt, the interactive build tool](https://scala-sbt.org/),
+as well as some aliases for common sbt commands.
+
+To use it, add `sbt` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... sbt)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+|-------|-----------------------|--------------------------------------------------------------|
+| sbc | `sbt compile` | Compiles the main sources |
+| sbcln | `sbt clean` | Deletes all generated files |
+| sbcc | `sbt clean compile` | Deletes generated files, compiles the main sources |
+| sbco | `sbt console` | Starts Scala with the compiled sources and all dependencies |
+| sbcq | `sbt consoleQuick` | Starts Scala with all dependencies |
+| sbcp | `sbt consoleProject` | Starts Scala with sbt and the build definitions |
+| sbd | `sbt doc` | Generates API documentation for Scala source files |
+| sbdc | `sbt dist:clean` | Deletes the distribution packages |
+| sbdi | `sbt dist` | Creates the distribution packages |
+| sbgi | `sbt genIdea` | Create Idea project files |
+| sbp | `sbt publish` | Publishes artifacts to the repository |
+| sbpl | `sbt publishLocal` | Publishes artifacts to the local Ivy repository |
+| sbr | `sbt run` | Runs the main class for the project |
+| sbrm | `sbt runMain` | Runs the specified main class for the project |
+| sbu | `sbt update` | Resolves and retrieves external dependencies |
+| sbx | `sbt test` | Compiles and runs all tests |
+| sba | `sbt assembly` | Create a fat JAR with all dependencies |
diff --git a/zsh/.oh-my-zsh/plugins/sbt/_sbt b/zsh/.oh-my-zsh/plugins/sbt/_sbt
new file mode 100644
index 0000000..2138a72
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/sbt/_sbt
@@ -0,0 +1,56 @@
+#compdef sbt
+#autoload
+
+local -a _sbt_commands
+_sbt_commands=(
+ 'clean:delete files produced by the build'
+ 'compile:compile sources'
+ 'console:start the Scala REPL with project classes on the classpath'
+ 'consoleQuick:start the Scala REPL with project deps on the classpath'
+ 'consoleProject:start the Scala REPL w/sbt+build-def on the classpath'
+ 'dist:generate distribution artifacts'
+ 'dist\:clean:clean distribution artifacts'
+ 'doc:generate API documentation'
+ 'genIdea:generate Intellij Idea project files'
+ 'package:produce the main artifact, such as a binary jar'
+ 'packageDoc:produce a doc artifact, such as a jar containing API docs'
+ 'packageSrc:produce a source artifact, such as a jar containing sources'
+ 'publish:publish artifacts to a repository'
+ 'publishLocal:publish artifacts to the local repository'
+ 'publishM2:publish artifacts to the local Maven 2 repository'
+ 'run:run a main class'
+ 'runMain:run the main class selected by the first argument'
+ 'test:execute all tests'
+ 'testOnly:execute the tests provided as arguments'
+ 'testQuick:execute previously failed tests'
+ 'update:resolve and optionally retrieve dependencies'
+)
+
+local expl
+
+_arguments \
+ '(-help)-h[prints an help message]' \
+ '(-h)-help[prints an help message]' \
+ '(-verbose)-v[this runner is chattier]' \
+ '(-v)-verbose[this runner is chattier]' \
+ '(-debug)-d[set sbt log level to debug]' \
+ '(-d)-debug[set sbt log level to debug]' \
+ '-no-colors[disable ANSI color codes]' \
+ '-sbt-create[start even if current dir contains no sbt project]' \
+ '-sbt-dir[path to global settings/plugins dir (default: ~/.sbt)]' \
+ '-sbt-boot[path to shared boot dir (default: ~/.sbt/boot)]' \
+ '-ivy[path to local Ivy repository (default: ~/.ivy2)]' \
+ '-mem[set memory options]' \
+ '-no-share[use all local caches; no sharing]' \
+ '-no-global[use global caches, but do not use global ~/.sbt dir]' \
+ '-jvm-debug[turn on JVM debugging, open at the given port]' \
+ '-batch[disable interactive mode]' \
+ '-sbt-version[use the specified version of sbt]' \
+ '-sbt-jar[use the specified jar as the sbt launcher]' \
+ '(-sbt-snapshot)-sbt-rc[use an RC version of sbt]' \
+ '(-sbt-rc)-sbt-snapshot[use a snapshot version of sbt]' \
+ '-java-home[alternate JAVA_HOME]' \
+ '*:: :->subcmds' && return 0
+
+_describe -t commands "sbt subcommand" _sbt_commands
+return
diff --git a/zsh/.oh-my-zsh/plugins/sbt/sbt.plugin.zsh b/zsh/.oh-my-zsh/plugins/sbt/sbt.plugin.zsh
new file mode 100644
index 0000000..851302c
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/sbt/sbt.plugin.zsh
@@ -0,0 +1,25 @@
+# ------------------------------------------------------------------------------
+# FILE: sbt.plugin.zsh
+# DESCRIPTION: oh-my-zsh plugin file.
+# AUTHOR: Mirko Caserta (mirko.caserta@gmail.com)
+# VERSION: 1.0.2
+# ------------------------------------------------------------------------------
+
+# aliases - mnemonic: prefix is 'sb'
+alias sbc='sbt compile'
+alias sbcc='sbt clean compile'
+alias sbco='sbt console'
+alias sbcq='sbt consoleQuick'
+alias sbcln='sbt clean'
+alias sbcp='sbt consoleProject'
+alias sbd='sbt doc'
+alias sbdc='sbt dist:clean'
+alias sbdi='sbt dist'
+alias sbgi='sbt genIdea'
+alias sbp='sbt publish'
+alias sbpl='sbt publishLocal'
+alias sbr='sbt run'
+alias sbrm='sbt runMain'
+alias sbu='sbt update'
+alias sbx='sbt test'
+alias sba='sbt assembly'
diff --git a/zsh/.oh-my-zsh/plugins/scala/README.md b/zsh/.oh-my-zsh/plugins/scala/README.md
new file mode 100644
index 0000000..957261d
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/scala/README.md
@@ -0,0 +1,15 @@
+## Scala plugin
+
+Completion script for [scala and scalac](https://www.scala-lang.org/) commands.
+
+To use it, add `scala` to the plugins array of your zshrc file:
+```
+plugins=(... scala)
+```
+
+## Aliases
+
+| Command | Description |
+|------------------|---------------------------------------------------------------------------------|
+| `scala` | Run code in the Scala language |
+| `scalac` | Compiler for the Scala language |
diff --git a/zsh/.oh-my-zsh/plugins/scala/_scala b/zsh/.oh-my-zsh/plugins/scala/_scala
new file mode 100644
index 0000000..f7511a6
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/scala/_scala
@@ -0,0 +1,249 @@
+#compdef scala scalac
+# ------------------------------------------------------------------------------
+# Copyright (c) 2012 Github zsh-users - https://github.com/zsh-users
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of the zsh-users nor the
+# names of its contributors may be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# ------------------------------------------------------------------------------
+# Description
+# -----------
+#
+# Completion script for scala and scalac (https://www.scala-lang.org/).
+#
+# ------------------------------------------------------------------------------
+# Authors
+# -------
+#
+# * Tony Sloane
+#
+# ------------------------------------------------------------------------------
+
+typeset -A opt_args
+local context state line
+
+_scala_features () {
+ compadd "postfixOps" "reflectiveCalls" "implicitConversions" "higherKinds" \
+ "existentials" "experimental.macros" "_"
+}
+
+_scala_phases () {
+ compadd "parser" "namer" "packageobjects" "typer" "patmat" "superaccessors" \
+ "extmethods" "pickler" "refchecks" "selectiveanf" "selectivecps" "uncurry" \
+ "tailcalls" "specialize" "explicitouter" "erasure" "posterasure" "lazyvals" \
+ "lambdalift" "constructors" "flatten" "mixin" "cleanup" "icode" "inliner" \
+ "inlineExceptionHandlers" "closelim" "dce" "jvm" "terminal"
+}
+
+local -a shared_opts
+shared_opts=(
+ "-bootclasspath+[Override location of bootstrap class files]:bootstrap class directory:_files -/"
+ "-classpath+[Specify where to find user class files]:directory:_files -/"
+ "-D-[Pass -Dproperty=value directly to the runtime system]"
+ "-d+[Destination for generated classfiles]: directory or jar file:_files"
+ "-dependencyfile+[Set dependency tracking file]:dependency tracking file:_files"
+ "-deprecation[Emit warning and location for usages of deprecated APIs]"
+ "-encoding+[Specify character encoding used by source files]:encoding:"
+ "-explaintypes[Explain type errors in more detail]"
+ "-extdirs+[Override location of installed extensions]:extensions directory:_files -/"
+ "-g\:-[Set level of generated debugging info (default\: vars)]:debugging info level:(none source line vars notailcalls)"
+ "-help[Print a synopsis of standard options]"
+ "-J-[pass argument directly to Java runtime system]:JVM argument:"
+ "-javabootclasspath+[Override java boot classpath]:Java boot class path directory]:_files -/"
+ "-javaextdirs+[Override java extdirs classpath]:Java extdirs directory:_files -/"
+ "-language\:-[Enable one or more language features]:feature:_scala_features"
+ "-no-specialization[Ignore @specialize annotations]"
+ "-nobootcp[Do not use the boot classpath for the scala jars]"
+ "-nowarn[Generate no warnings]"
+ "-optimise[Generate faster bytecode by applying optimisations to the program]"
+ "-P\:-[Pass an option to a plugin (written plugin\:opt)]:plugin option:"
+ "-print[Print program with Scala-specific features removed]"
+ "-sourcepath+[Specify location(s) of source files]:source file directory:_files -/"
+ "-target\:-[Target platform for object files (default\: jvm-1.5)]:platform name:(jvm-1.5 msil)"
+ "-toolcp+[Add to the runner classpath]:directory:_files -/"
+ "-unchecked[Enable detailed unchecked (erasure) warnings]"
+ "-uniqid[Uniquely tag all identifiers in debugging output]"
+ "-usejavacp[Utilize the java.class.path in classpath resolution]"
+ "-verbose[Output messages about what the compiler is doing]"
+ "-version[Print product version and exit]"
+ "-X[Print a synopsis of advanced options]"
+ "-Y[Print a synopsis of private options]"
+)
+
+local -a X_opts
+X_opts=(
+ "-Xcheck-null[Warn upon selection of nullable reference]"
+ "-Xcheckinit[Wrap field accessors to throw an exception on uninitialized access]"
+ "-Xdisable-assertions[Generate no assertions or assumptions]"
+ "-Xelide-below+[Calls to @elidable methods are omitted if method priority is lower than integer argument]"
+ "-Xexperimental[Enable experimental extensions]"
+ "-Xfatal-warnings[Fail the compilation if there are any warnings]"
+ "-Xfull-lubs[Retains pre 2.10 behavior of less aggressive truncation of least upper bounds]"
+ "-Xfuture[Turn on future language features]"
+ "-Xgenerate-phase-graph+[Generate the phase graphs (outputs .dot files) to fileX.dot]:output file:_files"
+ "-Xlint[Enable recommended additional warnings]"
+ "-Xlog-free-terms[Print a message when reification creates a free term]"
+ "-Xlog-free-types[Print a message when reification resorts to generating a free type]"
+ "-Xlog-implicits[Show more detail on why some implicits are not applicable]"
+ "-Xlog-implicit-conversions[Print a message whenever an implicit conversion is inserted]"
+ "-Xlog-reflective-calls[Print a message when a reflective method call is generated]"
+ "-Xmacro-settings\:-[Custom settings for macros]:option"
+ "-Xmain-class+[Class for manifest's Main-Class entry (only useful with -d jar)]:path:"
+ "-Xmax-classfile-name+[Maximum filename length for generated classes]"
+ "-Xmigration[Warn about constructs whose behavior may have changed]"
+ "-Xno-forwarders[Do not generate static forwarders in mirror classes]"
+ "-Xno-patmat-analysis[Don't perform exhaustivity/unreachability analysis. Also, ignore @switch annotation]"
+ "-Xno-uescape[Disable handling of \u unicode escapes]"
+ "-Xnojline[Do not use JLine for editing]"
+ "-Xoldpatmat[Use the pre-2.10 pattern matcher. Otherwise, the 'virtualizing' pattern matcher is used in 2.10]"
+ "-Xprint\:-[Print out program after ]:phase name:_scala_phases"
+ "-Xprint-icode\:-[Log internal icode to *.icode files after phase (default\: icode)]:phase name:_scala_phases"
+ "-Xprint-pos[Print tree positions, as offsets]"
+ "-Xprint-types[Print tree types (debugging option)]"
+ "-Xprompt[Display a prompt after each error (debugging option)]"
+ "-Xresident[Compiler stays resident: read source filenames from standard input]"
+ "-Xscript+[Treat the source file as a script and wrap it in a main method]:main object name"
+ "-Xshow-class+[Show internal representation of class]:class name"
+ "-Xshow-object+[Show internal representation of object]:object name"
+ "-Xshow-phases[Print a synopsis of compiler phases]"
+ "-Xsource-reader+[Specify a class name for a custom method of reading source files]:class name"
+ "-Xverify[Verify generic signatures in generated bytecode]"
+
+ "-Xassem-extdirs+[List of directories containing assemblies (requires -target:msil) (default\: lib)]:assembly directory:_files -/"
+ "-Xassem-name+[Name of the output assembly (requires -target:msil)]:assembly name:_files"
+ "-Xassem-path+[List of assemblies referenced by the program (requires -target:msil)]:assembly path:_files"
+ "-Xsourcedir+[Mirror source folder structure in output directory (requires -target:msil)]:source directory:_files -/"
+
+ "-Xplugin\:-[Load one or more plugins from file]:plugin file:_files"
+ "-Xpluginsdir+[Path to search compiler plugins]:plugin directory:_files -/"
+ "-Xplugin-list[Print a synopsis of loaded plugins]"
+ "-Xplugin-disable\:-[Disable the given plugin(s)]"
+ "-Xplugin-require\:-[Abort unless the given plugin(s) are available]"
+)
+
+local -a Y_opts
+Y_opts=(
+ "-Y[Print a synopsis of private options]"
+ "-Ybuild-manager-debug[Generate debug information for the Refined Build Manager compiler]"
+ "-Ybuilder-debug\:-[Compile using the specified build manager (default\: none)]:build manager:(none refined simple)"
+ "-Yclosure-elim[Perform closure elimination]"
+ "-Ycompact-trees[Use compact tree printer when displaying trees]"
+ "-Ydead-code[Perform dead code elimination]"
+ "-Ydependent-method-types[Allow dependent method types]"
+ "-Ydump-classes+[Dump the generated bytecode to .class files (useful for reflective compilation that utilizes in-memory classloaders)]:output directory:_files -/"
+ "-Yeta-expand-keeps-star[Eta-expand varargs methods to T* rather than Seq[T]. This is a temporary option to ease transition.]"
+ "-Ygen-javap+[Generate a parallel output directory of .javap files]:output directory:_files -/"
+ "-Yinfer-argument-types[Infer types for arguments of overridden methods]"
+ "-Yinline[Perform inlining when possible]"
+ "-Yinline-handlers[Perform exception handler inlining when possible]"
+ "-Yinline-warnings[Emit inlining warnings (normally suppressed due to high volume)]"
+ "-Yinvalidate+[Invalidate classpath entry before run]:classpath entry"
+ "-Ylinearizer\:-[Linearizer to use (default\: rpo)]:linearizer:(normal dfs rpo dump)"
+ "-Ylog-classpath[Output information about what classpath is being applied]"
+ "-Yno-adapted-args[Do not adapt an argument list (either by inserting unit or creating a tuple) to match the receiver]"
+ "-Ymacro-debug-lite[Trace essential macro-related activities]"
+ "-Ymacro-debug-verbose[Trace all macro-related activities: compilation, generation of synthetics, classloading, expansion, exceptions]"
+ "-Yno-completion[Disable tab-completion in the REPL]"
+ "-Yno-generic-signatures[Suppress generation of generic signatures for Java]"
+ "-Yno-imports[Compile without any implicit imports]"
+ "-Yno-predef[Compile without importing Predef]"
+ "-Yno-self-type-checks[Suppress check for self-type conformance among inherited members]"
+ "-Yno-squeeze[Disable creation of compact code in matching]"
+ "-Ynotnull[Enable (experimental and incomplete) scala.NotNull]"
+ "-Yoverride-objects[Allow member objects to be overridden]"
+ "-Yoverride-vars[Allow vars to be overridden]"
+ "-Ypmat-naive[Desugar matches as naively as possible]"
+ "-Ypresentation-delay+[Wait number of ms after typing before starting typechecking]"
+ "-Ypresentation-log+[Log presentation compiler events into file]:log file:_files"
+ "-Ypresentation-replay+[Replay presentation compiler events from file]:log file:_files"
+ "-Ypresentation-strict[Do not report type errors in sources with syntax errors]"
+ "-Ypresentation-verbose[Print information about presentation compiler tasks]"
+ "-Yprofile-class+[Specify name of profiler class]:profiler class name"
+ "-Yprofile-memory[Heap snapshot after compiler run (requires jgpagent on JVM -agentpath)]"
+ "-Yrangepos[Use range positions for syntax trees]"
+ "-Yrecursion+[Set recursion depth used when locking symbols]"
+ "-Yreify-copypaste[Dump the reified trees in copypasteable representation]"
+ "-Yrepl-sync[Do not use asynchronous code for REPL startup]"
+ "-Yresolve-term-conflict\:-[Resolve term conflicts (default\: error)]:resolution strategy:(package object error)"
+ "-Yself-in-annots[Include a \"self\" identifier inside of annotations]"
+ "-Yshow\:-[Show after (requires -Xshow-class or -Xshow-object)]:phase name:_scala_phases"
+ "-Yshow-syms[Print the AST symbol hierarchy after each phase]"
+ "-Yshow-symkinds[Print abbreviated symbol kinds next to symbol names]"
+ "-Yshow-trees[Print detailed ASTs (requires -Xprint\:phase)]"
+ "-Yshow-trees-compact[Print detailed ASTs in compact form (requires -Xprint\:)]"
+ "-Yshow-trees-stringified[Print stringifications along with detailed ASTs (requires -Xprint\:)]"
+ "-Ystatistics[Print compiler statistics]"
+ "-Ystruct-dispatch\:-[Structural method dispatch policy (default\: poly-cache)]:policy name:(no-cache mono-cache poly-cache invoke-dynamic)"
+
+ "-Ybrowse\:-[Browse the abstract syntax tree after ]:phase name:_scala_phases"
+ "-Ycheck\:-[Check the tree at the end of ]:phase name:_scala_phases"
+ "-Ylog\:-[Log operations during ]:phase name:_scala_phases"
+ "-Yprofile\:-[Profile CPU usage of given phases (requires jgpagent on JVM -agentpath)]:phase name:_scala_phases"
+ "-Yskip\:-[Skip ]:phase name:_scala_phases"
+ "-Ystop-after\:-[Stop after given phase ]:phase name:_scala_phases"
+ "-Ystop-before\:-[Stop before given phase ]:phase name:_scala_phases"
+
+ "-Ywarn-adapted-args[Warn if an argument list is modified to match the receiver]"
+ "-Ywarn-all[Enable all -Y warnings]"
+ "-Ywarn-dead-code[Warn when dead code is identified]"
+ "-Ywarn-inaccessible[Warn about inaccessible types in method signatures]"
+ "-Ywarn-nullary-override[Warn when non-nullary overrides nullary, e.g. def foo() over def foo]"
+ "-Ywarn-nullary-unit[Warn when nullary methods return Unit]"
+ "-Ywarn-numeric-widen[Warn when numerics are widened]"
+ "-Ywarn-value-discard[Warn when non-Unit expression results are unused]"
+
+ "-Ybuild-manager-debug[Generate debug information for the Refined Build Manager compiler]"
+ "-Ybuilder-debug\:-[Compile using the specified build manager (default\: none)]:manager:(none refined simple)"
+ "-Ycompletion-debug[Trace all tab completion activity]"
+ "-Ydebug[Increase the quantity of debugging output]"
+ "-Ydoc-debug[Trace all scaladoc activity]"
+ "-Yide-debug[Generate, validate and output trees using the interactive compiler]"
+ "-Yinfer-debug[Trace type inference and implicit search]"
+ "-Yissue-debug[Print stack traces when a context issues an error]"
+ "-Ypatmat-debug[Trace pattern matching translation]"
+ "-Ypmat-debug[Trace all pattern matcher activity]"
+ "-Ypos-debug[Trace position validation]"
+ "-Ypresentation-debug[Enable debugging output for the presentation compiler]"
+ "-Yreify-debug[Trace reification]"
+ "-Yrepl-debug[Trace all REPL activity]"
+ "-Ytyper-debug[Trace all type assignments]"
+)
+
+local -a scala_opts
+scala_opts=(
+ "-e+[execute as if entered in the repl]:string" \
+ "-howtorun+[what to run (default\: guess)]:execution mode:(script object jar guess)" \
+ "-i+[preload before starting the repl]:file to preload:_files" \
+ "-nc[no compilation daemon\: do not use the fsc offline compiler]" \
+ "-save[save the compiled script in a jar for future use]"
+)
+
+case $words[$CURRENT] in
+ -X*) _arguments $X_opts;;
+ -Y*) _arguments $Y_opts;;
+ *) case $service in
+ scala) _arguments $scala_opts $shared_opts "*::filename:_files";;
+ scalac) _arguments $shared_opts "*::filename:_files";;
+ esac
+esac
+
+return 0
diff --git a/zsh/.oh-my-zsh/plugins/scd/README.md b/zsh/.oh-my-zsh/plugins/scd/README.md
new file mode 100644
index 0000000..8c156da
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/scd/README.md
@@ -0,0 +1,123 @@
+# scd - smart change of directory
+
+Define `scd` shell function for changing to any directory with
+a few keystrokes.
+
+`scd` keeps history of the visited directories, which serves as an index of
+the known paths. The directory index is updated after every `cd` command in
+the shell and can be also filled manually by running `scd -a`. To switch to
+some directory, `scd` needs few fragments of the desired path to match with
+the index. A selection menu is displayed in case of several matches, with a
+preference given to recently visited paths. `scd` can create permanent
+directory aliases, which appear as named directories in zsh session.
+
+## INSTALLATION NOTES
+
+Besides oh-my-zsh, `scd` can be used with *bash*, *dash* or *tcsh*
+shells and is also available as [Vim](https://www.vim.org/) plugin and
+[IPython](https://ipython.org/) extension. For installation details, see
+https://github.com/pavoljuhas/smart-change-directory.
+
+## SYNOPSIS
+
+```sh
+scd [options] [pattern1 pattern2 ...]
+```
+
+## OPTIONS
+
+
+-a, --add
+ add specified directories to the directory index.
+
+--unindex
+ remove current or specified directories from the index.
+
+-r, --recursive
+ apply options --add or --unindex recursively.
+
+--alias=ALIAS
+ create alias for the current or specified directory and save it to
+ ~/.scdalias.zsh .
+
+--unalias
+ remove ALIAS definition for the current or specified directory from
+ ~/.scdalias.zsh .
+
+-A, --all
+ include all matching directories. Disregard matching by directory
+ alias and filtering of less likely paths.
+
+--list
+ show matching directories and exit.
+
+-v, --verbose
+ display directory rank in the selection menu.
+
+-h, --help
+ display this options summary and exit.
+
+
+## Examples
+
+```sh
+# Index recursively some paths for the very first run
+scd -ar ~/Documents/
+
+# Change to a directory path matching "doc"
+scd doc
+
+# Change to a path matching all of "a", "b" and "c"
+scd a b c
+
+# Change to a directory path that ends with "ts"
+scd "ts$"
+
+# Show selection menu and ranking of 20 most likely directories
+scd -v
+
+# Alias current directory as "xray"
+scd --alias=xray
+
+# Jump to a previously defined aliased directory
+scd xray
+```
+
+# FILES
+
+
+~/.scdhistory
+ time-stamped index of visited directories.
+
+~/.scdalias.zsh
+ scd-generated definitions of directory aliases.
+
+
+# ENVIRONMENT
+
+
+SCD_HISTFILE
+ path to the scd index file (by default ~/.scdhistory).
+
+SCD_HISTSIZE
+ maximum number of entries in the index (5000). Index is trimmed when it
+ exceeds SCD_HISTSIZE by more than 20%.
+
+SCD_MENUSIZE
+ maximum number of items for directory selection menu (20).
+
+SCD_MEANLIFE
+ mean lifetime in seconds for exponential decay of directory
+ likelihood (86400).
+
+SCD_THRESHOLD
+ threshold for cumulative directory likelihood. Directories with
+ a lower likelihood compared to the best match are excluded (0.005).
+
+
+SCD_SCRIPT
+ command script file where scd writes the final cd
+ command. This variable must be defined when scd runs in its own
+ process rather than as a shell function. It is up to the
+ scd caller to use the output in SCD_SCRIPT .
+
diff --git a/zsh/.oh-my-zsh/plugins/scd/scd b/zsh/.oh-my-zsh/plugins/scd/scd
new file mode 100644
index 0000000..39b2823
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/scd/scd
@@ -0,0 +1,390 @@
+#!/bin/zsh -f
+
+emulate -L zsh
+local EXIT=return
+if [[ $(whence -w $0) == *:' 'command ]]; then
+ emulate -R zsh
+ local RUNNING_AS_COMMAND=1
+ EXIT=exit
+fi
+
+local DOC='scd -- smart change to a recently used directory
+usage: scd [options] [pattern1 pattern2 ...]
+Go to a directory path that contains all fixed string patterns. Prefer
+recent or frequently visited directories as found in the directory index.
+Display a selection menu in case of multiple matches.
+
+Options:
+ -a, --add add specified directories to the directory index.
+ --unindex remove current or specified directories from the index.
+ -r, --recursive apply options --add or --unindex recursively.
+ --alias=ALIAS create alias for the current or specified directory and
+ store it in ~/.scdalias.zsh.
+ --unalias remove ALIAS definition for the current or specified
+ directory from ~/.scdalias.zsh.
+ -A, --all include all matching directories. Disregard matching by
+ directory alias and filtering of less likely paths.
+ --list show matching directories and exit.
+ -v, --verbose display directory rank in the selection menu.
+ -h, --help display this message and exit.
+'
+
+local SCD_HISTFILE=${SCD_HISTFILE:-${HOME}/.scdhistory}
+local SCD_HISTSIZE=${SCD_HISTSIZE:-5000}
+local SCD_MENUSIZE=${SCD_MENUSIZE:-20}
+local SCD_MEANLIFE=${SCD_MEANLIFE:-86400}
+local SCD_THRESHOLD=${SCD_THRESHOLD:-0.005}
+local SCD_SCRIPT=${RUNNING_AS_COMMAND:+$SCD_SCRIPT}
+local SCD_ALIAS=~/.scdalias.zsh
+
+local ICASE a d m p i maxrank threshold
+local opt_help opt_add opt_unindex opt_recursive opt_verbose
+local opt_alias opt_unalias opt_all opt_list
+local -A drank dalias
+local dmatching
+local last_directory
+
+setopt extendedhistory extendedglob noautonamedirs brace_ccl
+
+# If SCD_SCRIPT is defined make sure the file exists and is empty.
+# This removes any previous old commands.
+[[ -n "$SCD_SCRIPT" ]] && [[ -s $SCD_SCRIPT || ! -f $SCD_SCRIPT ]] && (
+ umask 077
+ : >| $SCD_SCRIPT
+)
+
+# process command line options
+zmodload -i zsh/zutil
+zmodload -i zsh/datetime
+zparseopts -D -- a=opt_add -add=opt_add -unindex=opt_unindex \
+ r=opt_recursive -recursive=opt_recursive \
+ -alias:=opt_alias -unalias=opt_unalias \
+ A=opt_all -all=opt_all -list=opt_list \
+ v=opt_verbose -verbose=opt_verbose h=opt_help -help=opt_help \
+ || $EXIT $?
+
+if [[ -n $opt_help ]]; then
+ print $DOC
+ $EXIT
+fi
+
+# load directory aliases if they exist
+[[ -r $SCD_ALIAS ]] && source $SCD_ALIAS
+
+# Private internal functions are prefixed with _scd_Y19oug_.
+# Clean them up when the scd function returns.
+setopt localtraps
+trap 'unfunction -m "_scd_Y19oug_*"' EXIT
+
+# works faster than the (:a) modifier and is compatible with zsh 4.2.6
+_scd_Y19oug_abspath() {
+ set -A $1 ${(ps:\0:)"$(
+ unfunction -m "*"; shift
+ for d; do
+ cd $d && print -Nr -- $PWD && cd $OLDPWD
+ done
+ )"}
+}
+
+# define directory alias
+if [[ -n $opt_alias ]]; then
+ if [[ -n $1 && ! -d $1 ]]; then
+ print -u2 "'$1' is not a directory."
+ $EXIT 1
+ fi
+ a=${opt_alias[-1]#=}
+ _scd_Y19oug_abspath d ${1:-$PWD}
+ # alias in the current shell, update alias file if successful
+ hash -d -- $a=$d &&
+ (
+ umask 077
+ hash -dr
+ [[ -r $SCD_ALIAS ]] && source $SCD_ALIAS
+ hash -d -- $a=$d
+ hash -dL >| $SCD_ALIAS
+ )
+ $EXIT $?
+fi
+
+# undefine directory alias
+if [[ -n $opt_unalias ]]; then
+ if [[ -n $1 && ! -d $1 ]]; then
+ print -u2 "'$1' is not a directory."
+ $EXIT 1
+ fi
+ _scd_Y19oug_abspath a ${1:-$PWD}
+ a=$(print -rD ${a})
+ if [[ $a != [~][^/]## ]]; then
+ $EXIT
+ fi
+ a=${a#[~]}
+ # unalias in the current shell, update alias file if successful
+ if unhash -d -- $a 2>/dev/null && [[ -r $SCD_ALIAS ]]; then
+ (
+ umask 077
+ hash -dr
+ source $SCD_ALIAS
+ unhash -d -- $a 2>/dev/null &&
+ hash -dL >| $SCD_ALIAS
+ )
+ fi
+ $EXIT $?
+fi
+
+# The "compress" function collapses repeated directories to
+# one entry with a time stamp that gives equivalent-probability.
+_scd_Y19oug_compress() {
+ awk -v epochseconds=$EPOCHSECONDS -v meanlife=$SCD_MEANLIFE '
+ BEGIN { FS = "[:;]"; }
+ length($0) < 4096 && $2 > 0 {
+ tau = 1.0 * ($2 - epochseconds) / meanlife;
+ if (tau < -6.9078) tau = -6.9078;
+ prob = exp(tau);
+ sub(/^[^;]*;/, "");
+ if (NF) {
+ dlist[last[$0]] = "";
+ dlist[NR] = $0;
+ last[$0] = NR;
+ ptot[$0] += prob;
+ }
+ }
+ END {
+ for (i = 1; i <= NR; ++i) {
+ d = dlist[i];
+ if (d) {
+ ts = log(ptot[d]) * meanlife + epochseconds;
+ printf(": %.0f:0;%s\n", ts, d);
+ }
+ }
+ }
+ ' $*
+}
+
+# Rewrite directory index if it is at least 20% oversized
+if [[ -s $SCD_HISTFILE ]] && \
+(( $(wc -l <$SCD_HISTFILE) > 1.2 * $SCD_HISTSIZE )); then
+ # compress repeated entries
+ m=( ${(f)"$(_scd_Y19oug_compress $SCD_HISTFILE)"} )
+ # purge non-existent directories
+ m=( ${(f)"$(
+ for a in $m; do
+ if [[ -d ${a#*;} ]]; then print -r -- $a; fi
+ done
+ )"}
+ )
+ # cut old entries if still oversized
+ if [[ $#m -gt $SCD_HISTSIZE ]]; then
+ m=( ${m[-$SCD_HISTSIZE,-1]} )
+ fi
+ print -lr -- $m >| ${SCD_HISTFILE}
+fi
+
+# Determine the last recorded directory
+if [[ -s ${SCD_HISTFILE} ]]; then
+ last_directory=${"$(tail -1 ${SCD_HISTFILE})"#*;}
+fi
+
+# The "record" function adds its arguments to the directory index.
+_scd_Y19oug_record() {
+ while [[ -n $last_directory && $1 == $last_directory ]]; do
+ shift
+ done
+ if [[ $# -gt 0 ]]; then
+ ( umask 077
+ p=": ${EPOCHSECONDS}:0;"
+ print -lr -- ${p}${^*} >>| $SCD_HISTFILE )
+ fi
+}
+
+if [[ -n $opt_add ]]; then
+ for d; do
+ if [[ ! -d $d ]]; then
+ print -u2 "Directory '$d' does not exist."
+ $EXIT 2
+ fi
+ done
+ _scd_Y19oug_abspath m ${*:-$PWD}
+ _scd_Y19oug_record $m
+ if [[ -n $opt_recursive ]]; then
+ for d in $m; do
+ print -n "scanning ${d} ... "
+ _scd_Y19oug_record ${d}/**/*(-/N)
+ print "[done]"
+ done
+ fi
+ $EXIT
+fi
+
+# take care of removing entries from the directory index
+if [[ -n $opt_unindex ]]; then
+ if [[ ! -s $SCD_HISTFILE ]]; then
+ $EXIT
+ fi
+ # expand existing directories in the argument list
+ for i in {1..$#}; do
+ if [[ -d ${argv[i]} ]]; then
+ _scd_Y19oug_abspath d ${argv[i]}
+ argv[i]=${d}
+ fi
+ done
+ m="$(awk -v recursive=${opt_recursive} '
+ BEGIN {
+ for (i = 2; i < ARGC; ++i) {
+ argset[ARGV[i]] = 1;
+ delete ARGV[i];
+ }
+ }
+ 1 {
+ d = $0; sub(/^[^;]*;/, "", d);
+ if (d in argset) next;
+ }
+ recursive {
+ for (a in argset) {
+ if (substr(d, 1, length(a) + 1) == a"/") next;
+ }
+ }
+ { print $0 }
+ ' $SCD_HISTFILE ${*:-$PWD} )" || $EXIT $?
+ : >| ${SCD_HISTFILE}
+ [[ ${#m} == 0 ]] || print -r -- $m >> ${SCD_HISTFILE}
+ $EXIT
+fi
+
+# The "action" function is called when there is just one target directory.
+_scd_Y19oug_action() {
+ cd $1 || return $?
+ if [[ -z $SCD_SCRIPT && -n $RUNNING_AS_COMMAND ]]; then
+ print -u2 "Warning: running as command with SCD_SCRIPT undefined."
+ fi
+ if [[ -n $SCD_SCRIPT ]]; then
+ print -r "cd ${(q)1}" >| $SCD_SCRIPT
+ fi
+}
+
+# Match and rank patterns to the index file
+# set global arrays dmatching and drank
+_scd_Y19oug_match() {
+ ## single argument that is an existing directory or directory alias
+ if [[ -z $opt_all && $# == 1 ]] && \
+ [[ -d ${d::=$1} || -d ${d::=${nameddirs[$1]}} ]] && [[ -x $d ]];
+ then
+ _scd_Y19oug_abspath dmatching $d
+ drank[${dmatching[1]}]=1
+ return
+ fi
+
+ # ignore case unless there is an argument with an uppercase letter
+ [[ "$*" == *[[:upper:]]* ]] || ICASE='(#i)'
+ # support "$" as an anchor for the directory name ending
+ argv=( ${argv/(#m)?[$](#e)/${MATCH[1]}(#e)} )
+
+ # calculate rank of all directories in the SCD_HISTFILE and keep it as drank
+ # include a dummy entry for splitting of an empty string is buggy
+ [[ -s $SCD_HISTFILE ]] && drank=( ${(f)"$(
+ print -l /dev/null -10
+ <$SCD_HISTFILE \
+ awk -v epochseconds=$EPOCHSECONDS -v meanlife=$SCD_MEANLIFE '
+ BEGIN { FS = "[:;]"; }
+ length($0) < 4096 && $2 > 0 {
+ tau = 1.0 * ($2 - epochseconds) / meanlife;
+ if (tau < -6.9078) tau = -6.9078;
+ prob = exp(tau);
+ sub(/^[^;]*;/, "");
+ if (NF) ptot[$0] += prob;
+ }
+ END { for (di in ptot) { print di; print ptot[di]; } }'
+ )"}
+ )
+ unset "drank[/dev/null]"
+
+ # filter drank to the entries that match all arguments
+ for a; do
+ p=${ICASE}"*(${a})*"
+ drank=( ${(kv)drank[(I)${~p}]} )
+ done
+ # require at least one argument matches the directory name
+ p=${ICASE}"*(${(j:|:)argv})[^/]#"
+ drank=( ${(kv)drank[(I)${~p}]} )
+
+ # build a list of matching directories reverse-sorted by their probabilities
+ dmatching=( ${(f)"$(
+ for d p in ${(kv)drank}; do
+ print -r -- "$p $d";
+ done | sort -grk1 | cut -d ' ' -f 2-
+ )"}
+ )
+
+ # do not match $HOME or $PWD when run without arguments
+ if [[ $# == 0 ]]; then
+ dmatching=( ${dmatching:#(${HOME}|${PWD})} )
+ fi
+
+ # keep at most SCD_MENUSIZE of matching and valid directories
+ m=( )
+ for d in $dmatching; do
+ [[ ${#m} == $SCD_MENUSIZE ]] && break
+ [[ -d $d && -x $d ]] && m+=$d
+ done
+ dmatching=( $m )
+
+ # find the maximum rank
+ maxrank=0.0
+ for d in $dmatching; do
+ [[ ${drank[$d]} -lt maxrank ]] || maxrank=${drank[$d]}
+ done
+
+ # discard all directories below the rank threshold
+ threshold=$(( maxrank * SCD_THRESHOLD ))
+ if [[ -n ${opt_all} ]]; then
+ threshold=0
+ fi
+ dmatching=( ${^dmatching}(Ne:'(( ${drank[$REPLY]} >= threshold ))':) )
+}
+
+_scd_Y19oug_match $*
+
+## process whatever directories that remained
+if [[ ${#dmatching} == 0 ]]; then
+ print -u2 "No matching directory."
+ $EXIT 1
+fi
+
+## build formatted directory aliases for selection menu or list display
+for d in $dmatching; do
+ if [[ -n ${opt_verbose} ]]; then
+ dalias[$d]=$(printf "%.3g %s" ${drank[$d]} $d)
+ else
+ dalias[$d]=$(print -Dr -- $d)
+ fi
+done
+
+## process the --list option
+if [[ -n $opt_list ]]; then
+ for d in $dmatching; do
+ print -r -- "# ${dalias[$d]}"
+ print -r -- $d
+ done
+ $EXIT
+fi
+
+## process single directory match
+if [[ ${#dmatching} == 1 ]]; then
+ _scd_Y19oug_action $dmatching
+ $EXIT $?
+fi
+
+## here we have multiple matches - display selection menu
+a=( {a-z} {A-Z} )
+a=( ${a[1,${#dmatching}]} )
+p=( )
+for i in {1..${#dmatching}}; do
+ [[ -n ${a[i]} ]] || break
+ p+="${a[i]}) ${dalias[${dmatching[i]}]}"
+done
+
+print -c -r -- $p
+
+if read -s -k 1 d && [[ ${i::=${a[(I)$d]}} -gt 0 ]]; then
+ _scd_Y19oug_action ${dmatching[i]}
+ $EXIT $?
+fi
diff --git a/zsh/.oh-my-zsh/plugins/scd/scd.plugin.zsh b/zsh/.oh-my-zsh/plugins/scd/scd.plugin.zsh
new file mode 100644
index 0000000..0197c53
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/scd/scd.plugin.zsh
@@ -0,0 +1,19 @@
+## The scd script should autoload as a shell function.
+autoload scd
+
+
+## If the scd function exists, define a change-directory-hook function
+## to record visited directories in the scd index.
+if [[ ${+functions[scd]} == 1 ]]; then
+ scd_chpwd_hook() { scd --add $PWD }
+ autoload add-zsh-hook
+ add-zsh-hook chpwd scd_chpwd_hook
+fi
+
+
+## Allow scd usage with unquoted wildcard characters such as "*" or "?".
+alias scd='noglob scd'
+
+
+## Load the directory aliases created by scd if any.
+if [[ -s ~/.scdalias.zsh ]]; then source ~/.scdalias.zsh; fi
diff --git a/zsh/.oh-my-zsh/plugins/screen/README.md b/zsh/.oh-my-zsh/plugins/screen/README.md
new file mode 100644
index 0000000..103e172
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/screen/README.md
@@ -0,0 +1,10 @@
+# screen
+
+This plugin sets title and hardstatus of the tab window for [screen](https://www.gnu.org/software/screen/),
+the terminal multiplexer.
+
+To use it add `screen` to the plugins array in your zshrc file.
+
+```zsh
+plugins=(... screen)
+```
diff --git a/zsh/.oh-my-zsh/plugins/screen/screen.plugin.zsh b/zsh/.oh-my-zsh/plugins/screen/screen.plugin.zsh
new file mode 100644
index 0000000..7009e7a
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/screen/screen.plugin.zsh
@@ -0,0 +1,54 @@
+# if using GNU screen, let the zsh tell screen what the title and hardstatus
+# of the tab window should be.
+if [[ "$TERM" == screen* ]]; then
+ if [[ $_GET_PATH == '' ]]; then
+ _GET_PATH='echo $PWD | sed "s/^\/Users\//~/;s/^\/home\//~/;s/^~$USER/~/"'
+ fi
+ if [[ $_GET_HOST == '' ]]; then
+ _GET_HOST='echo $HOST | sed "s/\..*//"'
+ fi
+
+ # use the current user as the prefix of the current tab title
+ TAB_TITLE_PREFIX='"`'$_GET_HOST'`:`'$_GET_PATH' | sed "s:..*/::"`$PROMPT_CHAR"'
+ # when at the shell prompt, show a truncated version of the current path (with
+ # standard ~ replacement) as the rest of the title.
+ TAB_TITLE_PROMPT='$SHELL:t'
+ # when running a command, show the title of the command as the rest of the
+ # title (truncate to drop the path to the command)
+ TAB_TITLE_EXEC='$cmd[1]:t'
+
+ # use the current path (with standard ~ replacement) in square brackets as the
+ # prefix of the tab window hardstatus.
+ TAB_HARDSTATUS_PREFIX='"[`'$_GET_PATH'`] "'
+ # when at the shell prompt, use the shell name (truncated to remove the path to
+ # the shell) as the rest of the title
+ TAB_HARDSTATUS_PROMPT='$SHELL:t'
+ # when running a command, show the command name and arguments as the rest of
+ # the title
+ TAB_HARDSTATUS_EXEC='$cmd'
+
+ # tell GNU screen what the tab window title ($1) and the hardstatus($2) should be
+ function screen_set()
+ {
+ # set the tab window title (%t) for screen
+ print -nR $'\033k'$1$'\033'\\\
+
+ # set hardstatus of tab window (%h) for screen
+ print -nR $'\033]0;'$2$'\a'
+ }
+ # called by zsh before executing a command
+ function preexec()
+ {
+ local -a cmd; cmd=(${(z)1}) # the command string
+ eval "tab_title=$TAB_TITLE_PREFIX:$TAB_TITLE_EXEC"
+ eval "tab_hardstatus=$TAB_HARDSTATUS_PREFIX:$TAB_HARDSTATUS_EXEC"
+ screen_set $tab_title $tab_hardstatus
+ }
+ # called by zsh before showing the prompt
+ function precmd()
+ {
+ eval "tab_title=$TAB_TITLE_PREFIX:$TAB_TITLE_PROMPT"
+ eval "tab_hardstatus=$TAB_HARDSTATUS_PREFIX:$TAB_HARDSTATUS_PROMPT"
+ screen_set $tab_title $tab_hardstatus
+ }
+fi
\ No newline at end of file
diff --git a/zsh/.oh-my-zsh/plugins/scw/README.md b/zsh/.oh-my-zsh/plugins/scw/README.md
new file mode 100644
index 0000000..d2312c2
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/scw/README.md
@@ -0,0 +1,7 @@
+## Scaleway CLI autocomplete plugin
+
+[scw](https://github.com/scaleway/scaleway-cli): Manage Bare Metal servers from Command Line (as easily as with Docker)
+
+- Adds autocomplete options for all `scw` commands.
+
+Maintainer : Manfred Touron ([@moul](https://github.com/moul))
diff --git a/zsh/.oh-my-zsh/plugins/scw/_scw b/zsh/.oh-my-zsh/plugins/scw/_scw
new file mode 100644
index 0000000..0eb125c
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/scw/_scw
@@ -0,0 +1,333 @@
+#compdef scw
+#
+# zsh completion for scw (https://www.scaleway.com)
+#
+# Inspired by https://github.com/felixr/docker-zsh-completion
+
+__scw_get_servers() {
+ local expl
+ declare -a servers
+ servers=(${(f)"$(_call_program commands scw _completion servers-names)"})
+ _describe -t servers "servers" servers
+}
+
+__scw_stoppedservers() {
+ __scw_get_servers
+}
+
+__scw_runningservers() {
+ __scw_get_servers
+}
+
+__scw_servers () {
+ __scw_get_servers
+}
+
+__scw_images () {
+ local expl
+ declare -a images
+ images=(${(f)"$(_call_program commands scw _completion images-names)"})
+ _describe -t images "images" images
+}
+
+__scw_images_and_snapshots () {
+ __scw_images
+ __scw_snapshots
+}
+
+__scw_snapshots () {
+ local expl
+ declare -a snapshots
+ snapshots=(${(f)"$(_call_program commands scw _completion --prefix snapshots-names)"})
+ _describe -t snapshots "snapshots" snapshots
+}
+
+__scw_bootscripts () {
+ local expl
+ declare -a bootscripts
+ bootscripts=(${(f)"$(_call_program commands scw _completion bootscripts-names)"})
+ _describe -t bootscripts "bootscripts" bootscripts
+}
+
+__scw_tags() {
+ __scw_images
+}
+
+__scw_repositories_with_tags() {
+ __scw_images
+}
+
+__scw_search() {
+ # declare -a scwsearch
+ local cache_policy
+ zstyle -s ":completion:${curcontext}:" cache-policy cache_policy
+ if [[ -z "$cache_policy" ]]; then
+ zstyle ":completion:${curcontext}:" cache-policy __scw_caching_policy
+ fi
+
+ local searchterm cachename
+ searchterm="${words[$CURRENT]%/}"
+ cachename=_scw-search-$searchterm
+
+ local expl
+ local -a result
+ if ( [[ ${(P)+cachename} -eq 0 ]] || _cache_invalid ${cachename#_} ) \
+ && ! _retrieve_cache ${cachename#_}; then
+ _message "Searching for ${searchterm}..."
+ result=(${${${(f)"$(_call_program commands scw search ${searchterm})"}%% *}[2,-1]})
+ _store_cache ${cachename#_} result
+ fi
+ _wanted scwsearch expl 'available images' compadd -a result
+}
+
+__scw_caching_policy()
+{
+ oldp=( "$1"(Nmh+1) ) # 1 hour
+ (( $#oldp ))
+}
+
+
+__scw_repositories () {
+ __scw_images
+}
+
+__scw_commands () {
+ # local -a _scw_subcommands
+ local cache_policy
+
+ zstyle -s ":completion:${curcontext}:" cache-policy cache_policy
+ if [[ -z "$cache_policy" ]]; then
+ zstyle ":completion:${curcontext}:" cache-policy __scw_caching_policy
+ fi
+
+ if ( [[ ${+_scw_subcommands} -eq 0 ]] || _cache_invalid scw_subcommands) \
+ && ! _retrieve_cache scw_subcommands;
+ then
+ local -a lines
+ lines=(${(f)"$(_call_program commands scw 2>&1)"})
+ _scw_subcommands=(${${${lines[$((${lines[(i)Commands:]} + 1)),${lines[(I) *]}]}## #}/ ##/:})
+ _scw_subcommands=($_scw_subcommands 'help:Show help for a command')
+ _store_cache scw_subcommands _scw_subcommands
+ fi
+ _describe -t scw-commands "scw command" _scw_subcommands
+}
+
+__scw_subcommand () {
+ local -a _command_args
+ case "$words[1]" in
+ (attach)
+ _arguments \
+ '--no-stdin[Do not attach stdin]' \
+ ':servers:__scw_runningservers'
+ ;;
+ (commit)
+ _arguments \
+ {-v,--volume=0}'[Volume slot]:volume: ' \
+ ':server:__scw_servers' \
+ ':repository:__scw_repositories_with_tags'
+ ;;
+ (cp)
+ _arguments \
+ ':server:->server' \
+ ':hostpath:_files'
+ case $state in
+ (server)
+ if compset -P '*:'; then
+ _files
+ else
+ __scw_servers -qS ":"
+ fi
+ ;;
+ esac
+ ;;
+ (exec)
+ local state ret
+ _arguments \
+ {-T,--timeout=0}'[Set timeout values to seconds]' \
+ {-w,--wait}'[Wait for SSH to be ready]' \
+ ':servers:__scw_runningservers' \
+ '*::command:->anycommand' && ret=0
+
+ case $state in
+ (anycommand)
+ shift 1 words
+ (( CURRENT-- ))
+ _normal
+ ;;
+ esac
+
+ return ret
+ ;;
+ (history)
+ _arguments \
+ '--no-trunc[Do not truncate output]' \
+ {-q,--quiet}'[Only show numeric IDs]' \
+ '*:images:__scw_images'
+ ;;
+ (images)
+ _arguments \
+ {-a,--all}'[Show all images]' \
+ '--no-trunc[Do not truncate output]' \
+ {-q,--quiet}'[Only show numeric IDs]' \
+ ':repository:__scw_repositories'
+ ;;
+ (info)
+ ;;
+ (inspect)
+ _arguments \
+ {-f,--format=-}'[Format the output using the given go template]:template: ' \
+ '*:servers:__scw_servers'
+ ;;
+ (kill)
+ _arguments \
+ '*:servers:__scw_runningservers'
+ ;;
+ (login)
+ _arguments \
+ {-o,--organization=-}'[Organization]:organization: ' \
+ {-t,--token=-}'[Token]:token: ' \
+ ':server: '
+ ;;
+ (logout)
+ _arguments \
+ ':server: '
+ ;;
+ (logs)
+ _arguments \
+ '*:servers:__scw_servers'
+ ;;
+ (port)
+ _arguments \
+ '1:servers:__scw_runningservers' \
+ '2:port:_ports'
+ ;;
+ (start)
+ _arguments \
+ {-T,--timeout=0}'[Set timeout values to seconds]' \
+ {-w,--wait}'[Wait for SSH to be ready]' \
+ '*:servers:__scw_stoppedservers'
+ ;;
+ (rm)
+ _arguments \
+ '*:servers:__scw_stoppedservers'
+ ;;
+ (rmi)
+ _arguments \
+ '*:images:__scw_images'
+ ;;
+ (restart)
+ _arguments \
+ '*:servers:__scw_runningservers'
+ ;;
+ (stop)
+ _arguments \
+ {-t,--terminate}'[Stop and trash a server with its volumes]' \
+ {-w,--wait}'[Synchronous stop. Wait for server to be stopped]' \
+ '*:servers:__scw_runningservers'
+ ;;
+ (top)
+ _arguments \
+ '1:servers:__scw_runningservers' \
+ '(-)*:: :->ps-arguments'
+ case $state in
+ (ps-arguments)
+ _ps
+ ;;
+ esac
+ ;;
+ (ps)
+ _arguments \
+ {-a,--all}'[Show all servers. Only running servers are shown by default]' \
+ {-l,--latest}'[Show only the latest created server]' \
+ '-n[Show n last created servers, include non-running one]:n:(1 5 10 25 50)' \
+ '--no-trunc[Do not truncate output]' \
+ {-q,--quiet}'[Only show numeric IDs]'
+ ;;
+ (tag)
+ _arguments \
+ {-f,--force}'[force]'\
+ ':image:__scw_images'\
+ ':repository:__scw_repositories_with_tags'
+ ;;
+ (create|run)
+ _arguments \
+ {-a,--attach}'[Attach to stdin, stdout or stderr]' \
+ '*'{-e,--environment=-}'[Set environment variables]:environment variable: ' \
+ '--name=-[Server name]:name: ' \
+ '--bootscript=-[Assign a bootscript]:bootscript:__scw_bootscripts ' \
+ '*-v[Bind mount a volume]:volume: '\
+ '(-):images:__scw_images_and_snapshots' \
+ '(-):command: _command_names -e' \
+ '*::arguments: _normal'
+
+ case $state in
+ (link)
+ if compset -P '*:'; then
+ _wanted alias expl 'Alias' compadd -E ""
+ else
+ __scw_runningservers -qS ":"
+ fi
+ ;;
+ esac
+ ;;
+ (rename)
+ _arguments \
+ ':old name:__scw_servers' \
+ ':new name: '
+ ;;
+ (search)
+ _arguments \
+ '--no-trunc[Do not truncate output]' \
+ ':term: '
+ ;;
+ (wait)
+ _arguments '*:servers:__scw_runningservers'
+ ;;
+ (help)
+ _arguments ':subcommand:__scw_commands'
+ ;;
+ (*)
+ _message 'Unknown sub command'
+ esac
+
+}
+
+_scw () {
+ # Support for subservices, which allows for `compdef _scw scw-shell=_scw_servers`.
+ # Based on /usr/share/zsh/functions/Completion/Unix/_git without support for `ret`.
+ if [[ $service != scw ]]; then
+ _call_function - _$service
+ return
+ fi
+
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments -C \
+ '-H[tcp://host:port to bind/connect to]:socket: ' \
+ '(-): :->command' \
+ '(-)*:: :->option-or-argument'
+
+ if (( CURRENT == 1 )); then
+
+ fi
+ case $state in
+ (command)
+ __scw_commands
+ ;;
+ (option-or-argument)
+ curcontext=${curcontext%:*:*}:scw-$words[1]:
+ __scw_subcommand
+ ;;
+ esac
+}
+
+_scw "$@"
+
+# Local Variables:
+# mode: Shell-Script
+# sh-indentation: 4
+# indent-tabs-mode: nil
+# sh-basic-offset: 4
+# End:
+# vim: ft=zsh sw=4 ts=4 et
diff --git a/zsh/.oh-my-zsh/plugins/sdk/README.md b/zsh/.oh-my-zsh/plugins/sdk/README.md
new file mode 100644
index 0000000..b237f3b
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/sdk/README.md
@@ -0,0 +1,8 @@
+# sdk
+
+Plugin for SDKMAN, a tool for managing parallel versions of multiple Software Development Kits on most Unix based systems.
+Provides autocompletion for all known commands.
+
+## Requirements
+
+ * [SDKMAN](http://sdkman.io/)
diff --git a/zsh/.oh-my-zsh/plugins/sdk/sdk.plugin.zsh b/zsh/.oh-my-zsh/plugins/sdk/sdk.plugin.zsh
new file mode 100644
index 0000000..d00459b
--- /dev/null
+++ b/zsh/.oh-my-zsh/plugins/sdk/sdk.plugin.zsh
@@ -0,0 +1,82 @@
+### SDKMAN Autocomplete for Oh My Zsh
+
+# This is the output from sdkman. All the these options are supported at the
+# moment.
+
+# Usage: sdk [candidate] [version]
+# sdk offline
+#
+# commands:
+# install or i [version]
+# uninstall or rm
+# list or ls [candidate]
+# use or u