From 11a23144ad189b6befee2332383188dbffecee6c Mon Sep 17 00:00:00 2001
From: Marc Cornellà <hello@mcornella.com>
Date: Tue, 22 Feb 2022 11:18:43 +0100
Subject: feat(copypath): add plugin to copy file paths to clipboard (#7569)

Closes #7569
Closes #10714
---
 plugins/copypath/README.md           | 15 +++++++++++++++
 plugins/copypath/copypath.plugin.zsh | 15 +++++++++++++++
 2 files changed, 30 insertions(+)
 create mode 100644 plugins/copypath/README.md
 create mode 100644 plugins/copypath/copypath.plugin.zsh

(limited to 'plugins')

diff --git a/plugins/copypath/README.md b/plugins/copypath/README.md
new file mode 100644
index 000000000..1e5a463a6
--- /dev/null
+++ b/plugins/copypath/README.md
@@ -0,0 +1,15 @@
+# copypath plugin
+
+Copies the path of given directory or file to the system clipboard.
+
+To use it, add `copypath` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... copypath)
+```
+
+## Usage
+
+- `copypath`: copies the absolute path of the current directory.
+
+- `copypath <file_or_directory>`: copies the absolute path of the given file.
diff --git a/plugins/copypath/copypath.plugin.zsh b/plugins/copypath/copypath.plugin.zsh
new file mode 100644
index 000000000..8fe0a85f4
--- /dev/null
+++ b/plugins/copypath/copypath.plugin.zsh
@@ -0,0 +1,15 @@
+# Copies the path of given directory or file to the system or X Windows clipboard.
+# Copy current directory if no parameter.
+function copypath {
+  # If no argument passed, use current directory
+  local file="${1:-.}"
+
+  # If argument is not an absolute path, prepend $PWD
+  [[ $file = /* ]] || file="$PWD/$file"
+
+  # Copy the absolute path without resolving symlinks
+  # If clipcopy fails, exit the function with an error
+  print -n "${file:a}" | clipcopy || return 1
+
+  echo ${(%):-"%B${file:a}%b copied to clipboard."}
+}
-- 
cgit v1.2.3-70-g09d2


From 6f1036293cdc1af12dbe6390a061c147de1196ff Mon Sep 17 00:00:00 2001
From: Marc Cornellà <hello@mcornella.com>
Date: Tue, 22 Feb 2022 11:23:14 +0100
Subject: refactor(copydir)!: deprecate plugin in favor of `copypath`

BREAKING CHANGE: the `copydir` plugin is deprecated. Instead of
using `copydir`, use `copypath` which also supports copying
the path of other files or directories specified.
---
 plugins/copydir/README.md          | 9 +--------
 plugins/copydir/copydir.plugin.zsh | 8 +++++---
 2 files changed, 6 insertions(+), 11 deletions(-)

(limited to 'plugins')

diff --git a/plugins/copydir/README.md b/plugins/copydir/README.md
index 594bf1065..cf24b789f 100644
--- a/plugins/copydir/README.md
+++ b/plugins/copydir/README.md
@@ -1,10 +1,3 @@
 # copydir plugin
 
-Copies the path of your current folder to the system clipboard.
-
-To use, add `copydir` to your plugins array:
-```
-plugins=(... copydir)
-```
-
-Then use the command `copydir` to copy the $PWD.
+This plugin is deprecated. Use the [`copypath` plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/copypath) instead.
diff --git a/plugins/copydir/copydir.plugin.zsh b/plugins/copydir/copydir.plugin.zsh
index c45106240..a2b489ec0 100644
--- a/plugins/copydir/copydir.plugin.zsh
+++ b/plugins/copydir/copydir.plugin.zsh
@@ -1,5 +1,7 @@
-# Copies the pathname of the current directory to the system or X Windows clipboard
+echo ${(%):-'%F{yellow}The `%Bcopydir%b` plugin is deprecated. Use the `%Bcopypath%b` plugin instead.%f'}
+source "$ZSH/plugins/copypath/copypath.plugin.zsh"
+
+# TODO: 2022-02-22: Remove deprecated copydir function.
 function copydir {
-  emulate -L zsh
-  print -n $PWD | clipcopy
+  copypath
 }
-- 
cgit v1.2.3-70-g09d2


From 97e6989729efce1f091d02e0274392ed547b9bb4 Mon Sep 17 00:00:00 2001
From: Carlo Sala <carlosalag@protonmail.com>
Date: Thu, 24 Feb 2022 19:23:15 +0100
Subject: fix(helm): support completion for snap installs (#10723)

---
 plugins/helm/helm.plugin.zsh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'plugins')

diff --git a/plugins/helm/helm.plugin.zsh b/plugins/helm/helm.plugin.zsh
index cadfa551a..05bb19a44 100644
--- a/plugins/helm/helm.plugin.zsh
+++ b/plugins/helm/helm.plugin.zsh
@@ -14,9 +14,9 @@ command mkdir -p "$ZSH_CACHE_DIR/completions"
 # If the completion file does not exist, generate it and then source it
 # Otherwise, source it and regenerate in the background
 if [[ ! -f "$ZSH_CACHE_DIR/completions/_helm" ]]; then
-  helm completion zsh >| "$ZSH_CACHE_DIR/completions/_helm"
+  helm completion zsh | tee "$ZSH_CACHE_DIR/completions/_helm" >/dev/null
   source "$ZSH_CACHE_DIR/completions/_helm"
 else
   source "$ZSH_CACHE_DIR/completions/_helm"
-  helm completion zsh >| "$ZSH_CACHE_DIR/completions/_helm" &|
+  helm completion zsh | tee "$ZSH_CACHE_DIR/completions/_helm" >/dev/null &|
 fi
-- 
cgit v1.2.3-70-g09d2


From e9348575371aa8ec8811356d997942559c026d07 Mon Sep 17 00:00:00 2001
From: Carlo Sala <carlosalag@protonmail.com>
Date: Thu, 24 Feb 2022 19:23:41 +0100
Subject: fix(kubectl): support completion for snap installs (#10727)

---
 plugins/kubectl/kubectl.plugin.zsh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'plugins')

diff --git a/plugins/kubectl/kubectl.plugin.zsh b/plugins/kubectl/kubectl.plugin.zsh
index eed5727d1..89efeaca5 100644
--- a/plugins/kubectl/kubectl.plugin.zsh
+++ b/plugins/kubectl/kubectl.plugin.zsh
@@ -11,11 +11,11 @@ if (( $+commands[kubectl] )); then
   # If the completion file does not exist, generate it and then source it
   # Otherwise, source it and regenerate in the background
   if [[ ! -f "$ZSH_CACHE_DIR/completions/_kubectl" ]]; then
-    kubectl completion zsh >| "$ZSH_CACHE_DIR/completions/_kubectl"
+    kubectl completion zsh | tee "$ZSH_CACHE_DIR/completions/_kubectl" >/dev/null
     source "$ZSH_CACHE_DIR/completions/_kubectl"
   else
     source "$ZSH_CACHE_DIR/completions/_kubectl"
-    kubectl completion zsh >| "$ZSH_CACHE_DIR/completions/_kubectl" &|
+    kubectl completion zsh | tee "$ZSH_CACHE_DIR/completions/_kubectl" >/dev/null &|
   fi
 fi
 
-- 
cgit v1.2.3-70-g09d2


From 511ed65408231d04ed266066bba777d48ebec795 Mon Sep 17 00:00:00 2001
From: Marc Cornellà <hello@mcornella.com>
Date: Mon, 28 Feb 2022 10:03:02 +0100
Subject: fix(aws): allow empty prefix and suffix in prompt function (#10744)

Fixes #10744
---
 plugins/aws/aws.plugin.zsh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'plugins')

diff --git a/plugins/aws/aws.plugin.zsh b/plugins/aws/aws.plugin.zsh
index 920a7139d..b8625d7ac 100644
--- a/plugins/aws/aws.plugin.zsh
+++ b/plugins/aws/aws.plugin.zsh
@@ -158,7 +158,7 @@ compctl -K _aws_profiles asp acp aws_change_access_key
 # AWS prompt
 function aws_prompt_info() {
   [[ -n "$AWS_PROFILE" ]] || return
-  echo "${ZSH_THEME_AWS_PREFIX:=<aws:}${AWS_PROFILE:gs/%/%%}${ZSH_THEME_AWS_SUFFIX:=>}"
+  echo "${ZSH_THEME_AWS_PREFIX=<aws:}${AWS_PROFILE:gs/%/%%}${ZSH_THEME_AWS_SUFFIX=>}"
 }
 
 if [[ "$SHOW_AWS_PROMPT" != false && "$RPROMPT" != *'$(aws_prompt_info)'* ]]; then
-- 
cgit v1.2.3-70-g09d2


From eaa60244210ffddb99451910e569790e3630bf89 Mon Sep 17 00:00:00 2001
From: "JM\" (Jason Meridth)" <jmeridth@gmail.com>
Date: Wed, 2 Mar 2022 13:47:55 -0600
Subject: feat(autoenv): add path for Apple Silicon Homebrew (#10749)

---
 plugins/autoenv/autoenv.plugin.zsh | 1 +
 1 file changed, 1 insertion(+)

(limited to 'plugins')

diff --git a/plugins/autoenv/autoenv.plugin.zsh b/plugins/autoenv/autoenv.plugin.zsh
index bd03cf4b2..229a8a834 100644
--- a/plugins/autoenv/autoenv.plugin.zsh
+++ b/plugins/autoenv/autoenv.plugin.zsh
@@ -13,6 +13,7 @@ if ! type autoenv_init >/dev/null; then
       ~/.autoenv
       ~/.local/bin
       /usr/local/opt/autoenv
+      /opt/homebrew/opt/autoenv
       /usr/local/bin
       /usr/share/autoenv-git
       ~/Library/Python/bin
-- 
cgit v1.2.3-70-g09d2


From f96a900ea3f33868310749aaf4e5a68b3118e621 Mon Sep 17 00:00:00 2001
From: Carlo Sala <carlosalag@protonmail.com>
Date: Sat, 5 Mar 2022 19:18:56 +0100
Subject: feat(fzf)!: default to using `fd` before `rg` (#10757)

BREAKING CHANGE: if both `fd` and `rg` are installed, default to using `fd`. This
is the recommendation of the ripgrep author, and it's been found to be faster.
If you want to force using `rg`, set the `FZF_DEFAULT_COMMAND` variable.
---
 plugins/fzf/README.md      | 2 +-
 plugins/fzf/fzf.plugin.zsh | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

(limited to 'plugins')

diff --git a/plugins/fzf/README.md b/plugins/fzf/README.md
index 15d4d31f3..beedf4690 100644
--- a/plugins/fzf/README.md
+++ b/plugins/fzf/README.md
@@ -31,8 +31,8 @@ export FZF_DEFAULT_COMMAND='<your fzf default command>'
 
 If not set, the plugin will try to set it to these, in the order in which they're found:
 
-- [`rg`](https://github.com/BurntSushi/ripgrep)
 - [`fd`](https://github.com/sharkdp/fd)
+- [`rg`](https://github.com/BurntSushi/ripgrep)
 - [`ag`](https://github.com/ggreer/the_silver_searcher)
 
 ### `DISABLE_FZF_AUTO_COMPLETION`
diff --git a/plugins/fzf/fzf.plugin.zsh b/plugins/fzf/fzf.plugin.zsh
index 102605958..b86af0d2d 100644
--- a/plugins/fzf/fzf.plugin.zsh
+++ b/plugins/fzf/fzf.plugin.zsh
@@ -191,10 +191,10 @@ fzf_setup_using_openbsd \
 unset -f -m 'fzf_setup_*'
 
 if [[ -z "$FZF_DEFAULT_COMMAND" ]]; then
-  if (( $+commands[rg] )); then
-    export FZF_DEFAULT_COMMAND='rg --files --hidden --glob "!.git/*"'
-  elif (( $+commands[fd] )); then
+  if (( $+commands[fd] )); then
     export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude .git'
+  elif (( $+commands[rg] )); then
+    export FZF_DEFAULT_COMMAND='rg --files --hidden --glob "!.git/*"'
   elif (( $+commands[ag] )); then
     export FZF_DEFAULT_COMMAND='ag -l --hidden -g "" --ignore .git'
   fi
-- 
cgit v1.2.3-70-g09d2


From 3343891ea6e8fd84632fabc6bc11a43f8b024e9e Mon Sep 17 00:00:00 2001
From: Vitul Rana <vitulrana@gmail.com>
Date: Mon, 7 Mar 2022 15:08:56 +0530
Subject: feat(kubectl): add aliases for job management (#9992)

---
 plugins/kubectl/README.md          | 5 +++++
 plugins/kubectl/kubectl.plugin.zsh | 6 ++++++
 2 files changed, 11 insertions(+)

(limited to 'plugins')

diff --git a/plugins/kubectl/README.md b/plugins/kubectl/README.md
index f6651c8cd..f77788482 100644
--- a/plugins/kubectl/README.md
+++ b/plugins/kubectl/README.md
@@ -120,6 +120,11 @@ plugins=(... kubectl)
 | kecj    | `kubectl edit cronjob`              | Edit CronJob from the default editor                                                             |
 | kdcj    | `kubectl describe cronjob`          | Describe a CronJob in details                                                                    |
 | kdelcj  | `kubectl delete cronjob`            | Delete the CronJob                                                                               |
+|         |                                     | **Job management**                                                                               |
+| kgj     | `kubectl get job`                   | List all Job in ps output format                                                                 |
+| kej     | `kubectl edit job`                  | Edit a Job in details                                                                            |
+| kdj     | `kubectl describe job`              | Describe the Job                                                                                 |
+| kdelj   | `kubectl delete job`                | Delete the Job                                                                                   |
 
 ## Wrappers
 
diff --git a/plugins/kubectl/kubectl.plugin.zsh b/plugins/kubectl/kubectl.plugin.zsh
index 89efeaca5..3e87c2395 100644
--- a/plugins/kubectl/kubectl.plugin.zsh
+++ b/plugins/kubectl/kubectl.plugin.zsh
@@ -178,6 +178,12 @@ alias kecj='kubectl edit cronjob'
 alias kdcj='kubectl describe cronjob'
 alias kdelcj='kubectl delete cronjob'
 
+# Job management.
+alias kgj='kubectl get job'
+alias kej='kubectl edit job'
+alias kdj='kubectl describe job'
+alias kdelj='kubectl delete job'
+
 # Only run if the user actually has kubectl installed
 if (( ${+_comps[kubectl]} )); then
   function kj() { kubectl "$@" -o json | jq; }
-- 
cgit v1.2.3-70-g09d2


From d4c939d61ebd204599240a60d7473bbc241fb5b7 Mon Sep 17 00:00:00 2001
From: Eric Semeniuc <3838856+esemeniuc@users.noreply.github.com>
Date: Mon, 7 Mar 2022 01:43:05 -0800
Subject: feat(kubectl): add aliases for replicasets (#10100)

---
 plugins/kubectl/README.md          | 8 +++++---
 plugins/kubectl/kubectl.plugin.zsh | 4 +++-
 2 files changed, 8 insertions(+), 4 deletions(-)

(limited to 'plugins')

diff --git a/plugins/kubectl/README.md b/plugins/kubectl/README.md
index f77788482..579a90b3b 100644
--- a/plugins/kubectl/README.md
+++ b/plugins/kubectl/README.md
@@ -22,7 +22,7 @@ plugins=(... kubectl)
 | 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
+| 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                                    |
@@ -71,9 +71,11 @@ plugins=(... kubectl)
 | 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                                                         |
+| 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                                             |
+| kgrs    | `kubectl get replicaset`            | List all ReplicaSets `rs` created by the deployment                                              |
+| kdrs    | `kubectl describe replicaset`       | Describe ReplicaSet in detail                                                                    |
+| kers    | `kubectl edit replicaset`           | Edit ReplicaSet from the default editor                                                          |
 | krh     | `kubectl rollout history`           | Check the revisions of this deployment                                                           |
 | kru     | `kubectl rollout undo`              | Rollback to the previous revision                                                                |
 |         |                                     | **Port forwarding**                                                                              |
diff --git a/plugins/kubectl/kubectl.plugin.zsh b/plugins/kubectl/kubectl.plugin.zsh
index 3e87c2395..0ee252ac3 100644
--- a/plugins/kubectl/kubectl.plugin.zsh
+++ b/plugins/kubectl/kubectl.plugin.zsh
@@ -112,7 +112,9 @@ function kres(){
 }
 
 # Rollout management.
-alias kgrs='kubectl get rs'
+alias kgrs='kubectl get replicaset'
+alias kdrs='kubectl describe replicaset'
+alias kers='kubectl edit replicaset'
 alias krh='kubectl rollout history'
 alias kru='kubectl rollout undo'
 
-- 
cgit v1.2.3-70-g09d2


From 93b348b172506be46000f3be1cebda76d4c71999 Mon Sep 17 00:00:00 2001
From: Ivan <c.ivan.felix.r@gmail.com>
Date: Mon, 7 Mar 2022 03:58:18 -0600
Subject: feat(rvm): add `rb31` shortcut to use ruby 3.1 (#10745)

---
 plugins/rvm/README.md      | 1 +
 plugins/rvm/rvm.plugin.zsh | 1 +
 2 files changed, 2 insertions(+)

(limited to 'plugins')

diff --git a/plugins/rvm/README.md b/plugins/rvm/README.md
index 258c89420..576b037b0 100644
--- a/plugins/rvm/README.md
+++ b/plugins/rvm/README.md
@@ -23,6 +23,7 @@ plugins=(... rvm)
 | `rb26`       | `rvm use ruby-2.6`   |
 | `rb27`       | `rvm use ruby-2.7`   |
 | `rb30`       | `rvm use ruby-3.0`   |
+| `rb31`       | `rvm use ruby-3.1`   |
 | `rvm-update` | `rvm get head`       |
 | `gems`       | `gem list`           |
 | `rvms`       | `rvm gemset`         |
diff --git a/plugins/rvm/rvm.plugin.zsh b/plugins/rvm/rvm.plugin.zsh
index 864389ba8..2a091d019 100644
--- a/plugins/rvm/rvm.plugin.zsh
+++ b/plugins/rvm/rvm.plugin.zsh
@@ -26,6 +26,7 @@ rubies=(
   26  'ruby-2.6'
   27  'ruby-2.7'
   30  'ruby-3.0'
+  31  'ruby-3.1'
 )
 
 for v in ${(k)rubies}; do
-- 
cgit v1.2.3-70-g09d2


From 9350e1ff8724341534a8def2ce76ede88a4c2868 Mon Sep 17 00:00:00 2001
From: Marc Cornellà <hello@mcornella.com>
Date: Mon, 7 Mar 2022 11:13:18 +0100
Subject: fix(coffee): fix completion bug on missing `coffee` command (#10759)

This commit fixes the error

  _coffee:49: bad math expression: operand expected at `< 2 '

when the coffee command is missing or the `coffee --version` command fails.

It also uses is-at-least to check for the cut-off version for suggesting
`--lint` and `--require` arguments, instead of using `cut` multiple times.

Fixes #10759
---
 plugins/coffee/_coffee | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

(limited to 'plugins')

diff --git a/plugins/coffee/_coffee b/plugins/coffee/_coffee
index 5e52b30e6..e2814f7ba 100644
--- a/plugins/coffee/_coffee
+++ b/plugins/coffee/_coffee
@@ -39,14 +39,14 @@
 #
 # ------------------------------------------------------------------------------
 
-local curcontext="$curcontext" state line ret=1 version opts first second third
+local curcontext="$curcontext" state line ret=1 version
+local -a opts
 typeset -A opt_args
-version=(${(f)"$(_call_program version $words[1] --version)"})
+version=(${(f)"$(_call_program version $words[1] --version)"}) || return ret
 version=${${(z)${version[1]}}[3]}
-first=$(echo $version|cut -d '.' -f 1)
-second=$(echo $version|cut -d '.' -f 2)
-third=$(echo $version|cut -d '.' -f 3)
-if (( $first < 2 )) &&  (( $second < 7 )) && (( $third < 3 ));then
+
+autoload -Uz is-at-least
+if ! is-at-least 1.6.3 "$version"; then
   opts+=('(-l --lint)'{-l,--lint}'[pipe the compiled JavaScript through JavaScript Lint]'
          '(-r --require)'{-r,--require}'[require a library before executing your script]:library')
 fi
-- 
cgit v1.2.3-70-g09d2


From 3075d0c0ab823fbf3f52e9dfa33edd4be70f4679 Mon Sep 17 00:00:00 2001
From: Alexey Poimtsev <25312+alec-c4@users.noreply.github.com>
Date: Fri, 15 Jan 2021 22:23:15 +0300
Subject: feat(rails)!: run old rake aliases with `rails` (#9601)

BREAKING CHANGE: we've updated the aliases that run `rake` to use
`rails` instead because that's how they are run since Rails v5.
The old `rake` aliases can still be run by using the `rk` prefix
(e.g. the `rake test` alias has been changed from `rt` to `rkt`).

Closes #9601
Closes #9813
Fixes #10696

Co-authored-by: Vsevolod Voloshyn <seva.voloshin@gmail.com>
---
 plugins/rails/README.md        | 111 +++++++++++++++++++++++++----------------
 plugins/rails/rails.plugin.zsh |  70 ++++++++++++++++----------
 2 files changed, 113 insertions(+), 68 deletions(-)

(limited to 'plugins')

diff --git a/plugins/rails/README.md b/plugins/rails/README.md
index efdb8f8ba..0a6c68c75 100644
--- a/plugins/rails/README.md
+++ b/plugins/rails/README.md
@@ -12,47 +12,46 @@ plugins=(... rails)
 
 ### 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                         |
-| `rr`  | `rails routes`             | List all defined routes                            |
-| `rrg` | `rails routes \| grep`     | List and filter the defined routes                 |
-| `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    |
-| `rt`    | `rake test`                     | Run Rails tests                                        |
-| `rmd`   | `rake middleware`               | Interact with Rails middlewares                        |
-| `rsts`  | `rake stats`                    | Print code statistics                                  |
+| 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                 |
+| `rdc`   | `rails db:create`                | Create the database                                    |
+| `rdd`   | `rails db:drop`                  | Delete the database                                    |
+| `rdm`   | `rails db:migrate`               | Run pending db migrations                              |
+| `rdmd`  | `rails db:migrate:down`          | Undo specific db migration                             |
+| `rdmr`  | `rails db:migrate:redo`          | Redo specific db migration                             |
+| `rdms`  | `rails db:migrate:status`        | Show current db migration status                       |
+| `rdmtc` | `rails db:migrate db:test:clone` | Run pending migrations and clone db into test database |
+| `rdmu`  | `rails db:migrate:up`            | Run specific db migration                              |
+| `rdr`   | `rails db:rollback`              | Roll back the last migration                           |
+| `rdrs`  | `rails db:reset`                 | Delete the database and set it up again                |
+| `rds`   | `rails db:seed`                  | Seed the database                                      |
+| `rdsl`  | `rails db:schema:load`           | Load the database schema                               |
+| `rdtc`  | `rails db:test:clone`            | Clone the database into the test database              |
+| `rdtp`  | `rails db:test:prepare`          | Duplicate the db schema into your test database        |
+| `rgen`  | `rails generate`                 | Generate boilerplate code                              |
+| `rgm`   | `rails generate migration`       | Generate a db migration                                |
+| `rlc`   | `rails log:clear`                | Clear Rails logs                                       |
+| `rmd`   | `rails middleware`               | Interact with Rails middlewares                        |
+| `rn`    | `rails notes`                    | Search for notes (`FIXME`, `TODO`) in code comments    |
+| `rp`    | `rails plugin`                   | Run a Rails plugin command                             |
+| `rr`    | `rails routes`                   | List all defined routes                                |
+| `rrg`   | `rails routes \| grep`           | List and filter the defined routes                     |
+| `rs`    | `rails server`                   | Launch a web server                                    |
+| `rsb`   | `rails server --bind`            | Launch a web server binding it to a specific IP        |
+| `rsd`   | `rails server --debugger`        | Launch a web server with debugger                      |
+| `rsp`   | `rails server --port`            | Launch a web server and specify the listening port     |
+| `rsts`  | `rails stats`                    | Print code statistics                                  |
+| `rt`    | `rails test`                     | Run Rails tests                                        |
+| `ru`    | `rails runner`                   | Run Ruby code in the context of Rails                  |
 
 ### 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        |
@@ -60,7 +59,7 @@ plugins=(... rails)
 ### 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        |
@@ -68,15 +67,41 @@ plugins=(... rails)
 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 rake aliases
+
+The following commands are run [using `rails` instead of `rake` since Rails v5][1], but are preserved under the
+prefix `rk` for backwards compatibility.
+
+[1]: https://guides.rubyonrails.org/v5.2/command_line.html#bin-rails
+
+| Alias    | Command                         | Description                                            |
+| -------- | ------------------------------- | ------------------------------------------------------ |
+| `rkdc`   | `rake db:create`                | Create the database                                    |
+| `rkdd`   | `rake db:drop`                  | Delete the database                                    |
+| `rkdm`   | `rake db:migrate`               | Run pending db migrations                              |
+| `rkdms`  | `rake db:migrate:status`        | Show current db migration status                       |
+| `rkdmtc` | `rake db:migrate db:test:clone` | Run pending migrations and clone db into test database |
+| `rkdr`   | `rake db:rollback`              | Roll back the last migration                           |
+| `rkdrs`  | `rake db:reset`                 | Delete the database and set it up again                |
+| `rkds`   | `rake db:seed`                  | Seed the database                                      |
+| `rkdsl`  | `rake db:schema:load`           | Load the database schema                               |
+| `rkdtc`  | `rake db:test:clone`            | Clone the database into the test database              |
+| `rkdtp`  | `rake db:test:prepare`          | Duplicate the db schema into your test database        |
+| `rklc`   | `rake log:clear`                | Clear Rails logs                                       |
+| `rkmd`   | `rake middleware`               | Interact with Rails middlewares                        |
+| `rkn`    | `rake notes`                    | Search for notes (`FIXME`, `TODO`) in code comments    |
+| `rksts`  | `rake stats`                    | Print code statistics                                  |
+| `rkt`    | `rake test`                     | Run Rails tests                                        |
+
 ### Legacy stuff
 
 | Alias   | Command                            |
-|---------|------------------------------------|
-| `sstat` | `thin --stats "/thin/stats" start` |
-| `sg`    | `ruby script/generate`             |
+| ------- | ---------------------------------- |
+| `sc`    | `ruby script/console`              |
 | `sd`    | `ruby script/destroy`              |
+| `sd`    | `ruby script/server --debugger`    |
+| `sg`    | `ruby script/generate`             |
 | `sp`    | `ruby script/plugin`               |
 | `sr`    | `ruby script/runner`               |
 | `ssp`   | `ruby script/spec`                 |
-| `sc`    | `ruby script/console`              |
-| `sd`    | `ruby script/server --debugger`    |
+| `sstat` | `thin --stats "/thin/stats" start` |
diff --git a/plugins/rails/rails.plugin.zsh b/plugins/rails/rails.plugin.zsh
index 29b413434..f2b0f8293 100644
--- a/plugins/rails/rails.plugin.zsh
+++ b/plugins/rails/rails.plugin.zsh
@@ -43,47 +43,67 @@ alias rc='rails console'
 alias rcs='rails console --sandbox'
 alias rd='rails destroy'
 alias rdb='rails dbconsole'
+alias rdc='rails db:create'
+alias rdd='rails db:drop'
+alias rdm='rails db:migrate'
+alias rdmd='rails db:migrate:down'
+alias rdmr='rails db:migrate:redo'
+alias rdms='rails db:migrate:status'
+alias rdmtc='rails db:migrate db:test:clone'
+alias rdmu='rails db:migrate:up'
+alias rdr='rails db:rollback'
+alias rdrs='rails db:reset'
+alias rds='rails db:seed'
+alias rdsl='rails db:schema:load'
+alias rdtc='rails db:test:clone'
+alias rdtp='rails db:test:prepare'
 alias rgen='rails generate'
 alias rgm='rails generate migration'
+alias rlc='rails log:clear'
+alias rmd='rails middleware'
+alias rn='rails notes'
 alias rp='rails plugin'
 alias rr='rails routes'
 alias rrg='rails routes | grep'
-alias ru='rails runner'
 alias rs='rails server'
+alias rsb='rails server --bind'
 alias rsd='rails server --debugger'
 alias rsp='rails server --port'
-alias rsb='rails server --bind'
+alias rsts='rails stats'
+alias rt='rails test'
+alias ru='rails runner'
+
 
 # Rake aliases
-alias rdm='rake db:migrate'
-alias rdmr='rake db:migrate:redo'
-alias rdmd='rake db:migrate:down'
-alias rdms='rake db:migrate:status'
-alias rdmu='rake db:migrate:up'
-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 rt='rake test'
-alias rmd='rake middleware'
-alias rsts='rake stats'
+alias rkdc='rake db:create'
+alias rkdd='rake db:drop'
+alias rkdm='rake db:migrate'
+alias rkdmd='rake db:migrate:down'
+alias rkdmr='rake db:migrate:redo'
+alias rkdms='rake db:migrate:status'
+alias rkdmtc='rake db:migrate db:test:clone'
+alias rkdmu='rake db:migrate:up'
+alias rkdr='rake db:rollback'
+alias rkdrs='rake db:reset'
+alias rkds='rake db:seed'
+alias rkdsl='rake db:schema:load'
+alias rkdtc='rake db:test:clone'
+alias rkdtp='rake db:test:prepare'
+alias rklc='rake log:clear'
+alias rkmd='rake middleware'
+alias rkn='rake notes'
+alias rksts='rake stats'
+alias rkt='rake test'
 
 # legacy stuff
-alias sstat='thin --stats "/thin/stats" start'
-alias sg='ruby script/generate'
+alias sc='ruby script/console'
 alias sd='ruby script/destroy'
+alias sd='ruby script/server --debugger'
+alias sg='ruby script/generate'
 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'
+alias sstat='thin --stats "/thin/stats" start'
 
 function remote_console() {
   /usr/bin/env ssh $1 "( cd $2 && ruby script/console production )"
-- 
cgit v1.2.3-70-g09d2


From 47d313c90409f63ee6b06c65f2372bbf847c106b Mon Sep 17 00:00:00 2001
From: Marc Cornellà <hello@mcornella.com>
Date: Mon, 7 Mar 2022 15:20:03 +0100
Subject: chore(rails): fix comments and docs

---
 plugins/rails/README.md        | 11 ++++++++---
 plugins/rails/rails.plugin.zsh | 12 ++++++++----
 2 files changed, 16 insertions(+), 7 deletions(-)

(limited to 'plugins')

diff --git a/plugins/rails/README.md b/plugins/rails/README.md
index 0a6c68c75..3eee12fbd 100644
--- a/plugins/rails/README.md
+++ b/plugins/rails/README.md
@@ -1,6 +1,7 @@
 # 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.
+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:
 
@@ -67,7 +68,9 @@ plugins=(... rails)
 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 rake aliases
+## Legacy
+
+### Rake aliases
 
 The following commands are run [using `rails` instead of `rake` since Rails v5][1], but are preserved under the
 prefix `rk` for backwards compatibility.
@@ -93,7 +96,7 @@ prefix `rk` for backwards compatibility.
 | `rksts`  | `rake stats`                    | Print code statistics                                  |
 | `rkt`    | `rake test`                     | Run Rails tests                                        |
 
-### Legacy stuff
+### Other
 
 | Alias   | Command                            |
 | ------- | ---------------------------------- |
@@ -105,3 +108,5 @@ prefix `rk` for backwards compatibility.
 | `sr`    | `ruby script/runner`               |
 | `ssp`   | `ruby script/spec`                 |
 | `sstat` | `thin --stats "/thin/stats" start` |
+
+- `remote_console <server> <directory>`: runs `ruby script/console production` on a remote server.
diff --git a/plugins/rails/rails.plugin.zsh b/plugins/rails/rails.plugin.zsh
index f2b0f8293..e724bffc4 100644
--- a/plugins/rails/rails.plugin.zsh
+++ b/plugins/rails/rails.plugin.zsh
@@ -1,3 +1,4 @@
+# rails command wrapper
 function _rails_command () {
   if [ -e "bin/stubs/rails" ]; then
     bin/stubs/rails $@
@@ -12,28 +13,31 @@ function _rails_command () {
   fi
 }
 
+alias rails='_rails_command'
+compdef _rails_command=rails
+
+# rake command wrapper
 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
+  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
 
+# Log aliases
 alias devlog='tail -f log/development.log'
 alias prodlog='tail -f log/production.log'
 alias testlog='tail -f log/test.log'
 
+# Environment settings
 alias -g RED='RAILS_ENV=development'
 alias -g REP='RAILS_ENV=production'
 alias -g RET='RAILS_ENV=test'
-- 
cgit v1.2.3-70-g09d2


From 98ed582e6a143517d8c1ac229a4da8e4246217f1 Mon Sep 17 00:00:00 2001
From: romanch <romanchsharma@gmail.com>
Date: Fri, 15 Jan 2021 09:33:48 +0530
Subject: feat(rails): add `fmns` alias for `foreman start` (#9600)

Closes #9600
---
 plugins/rails/README.md        | 6 ++++++
 plugins/rails/rails.plugin.zsh | 2 ++
 2 files changed, 8 insertions(+)

(limited to 'plugins')

diff --git a/plugins/rails/README.md b/plugins/rails/README.md
index 3eee12fbd..fa66750f0 100644
--- a/plugins/rails/README.md
+++ b/plugins/rails/README.md
@@ -49,6 +49,12 @@ plugins=(... rails)
 | `rt`    | `rails test`                     | Run Rails tests                                        |
 | `ru`    | `rails runner`                   | Run Ruby code in the context of Rails                  |
 
+### Foreman
+
+| Alias  | Command         | Description                               |
+| ------ | --------------- | ----------------------------------------- |
+| `fmns` | `foreman start` | Interact with your Rails app from the CLI |
+
 ### Utility aliases
 
 | Alias     | Command                       | Description                                    |
diff --git a/plugins/rails/rails.plugin.zsh b/plugins/rails/rails.plugin.zsh
index e724bffc4..b11cbb5c7 100644
--- a/plugins/rails/rails.plugin.zsh
+++ b/plugins/rails/rails.plugin.zsh
@@ -77,6 +77,8 @@ alias rsts='rails stats'
 alias rt='rails test'
 alias ru='rails runner'
 
+# Foreman aliases
+alias fmns='foreman start'
 
 # Rake aliases
 alias rkdc='rake db:create'
-- 
cgit v1.2.3-70-g09d2


From 40f49342f587167292461242dc13fdb93363278a Mon Sep 17 00:00:00 2001
From: Marc Cornellà <hello@mcornella.com>
Date: Mon, 7 Mar 2022 16:01:34 +0100
Subject: fix(rails): bundle more up-to-date zsh-completions completion version

Source: https://github.com/zsh-users/zsh-completions/blob/55d07cc/src/_rails
---
 plugins/rails/_rails | 688 ++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 623 insertions(+), 65 deletions(-)

(limited to 'plugins')

diff --git a/plugins/rails/_rails b/plugins/rails/_rails
index ad7505506..6dc85d458 100644
--- a/plugins/rails/_rails
+++ b/plugins/rails/_rails
@@ -1,66 +1,624 @@
 #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
+# ------------------------------------------------------------------------------
+# Copyright (c) 2016 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 Ruby on Rails (http://rubyonrails.org/).
+#
+# ------------------------------------------------------------------------------
+# Authors
+# -------
+#
+#  * Kazuya Takeshima (https://github.com/mitukiii)
+#
+# ------------------------------------------------------------------------------
+
+
+_rails() {
+  local context state line curcontext="$curcontext"
+
+  if (( CURRENT > 2 )); then
+    (( CURRENT-- ))
+    shift words
+    _call_function - "_rails_${words[1]}" || _nothing
+  else
+    __rails_commands
+  fi
+}
+
+__rails_commands() {
+  local context state line curcontext="$curcontext"
+
+  local -a rails_options
+  __rails_setup_rails_options
+
+  _arguments -C \
+    $rails_options \
+    ': :->command'
+
+  case "$state" in
+    command)
+      local -a commands
+      local application_directory
+      __rails_setup_application_directory
+
+      if [ -n "$application_directory" ]; then
+        commands=(
+          {generate,g}'[Generate new code]'
+          {console,c}'[Start the Rails console]'
+          {server,s}'[Start the Rails server]'
+          {dbconsole,db}'[Start a console for the database specified in config/database.yml]'
+          application'[Generate the Rails application code]'
+          {destroy,d}'[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]'
+          {runner,r}'[Run a piece of code in the application environment]'
+          {test,t}'[Run tests]'
+        )
+      else
+        commands=(
+          new'[Create a new Rails application]'
+        )
+      fi
+
+      _values 'command' $commands
+      ;;
+  esac
+}
+
+__rails_setup_application_directory() {
+  application_directory="$(pwd)"
+
+  while [ -n "$application_directory" ]; do
+    if [ -f "${application_directory}/script/rails" -o -f "${application_directory}/bin/rails" ]; then
+      return
+    fi
+    application_directory="${application_directory%/*}"
+  done
+
+  application_directory=
+}
+
+__rails_setup_rails_options() {
+  rails_options=(
+    {-h,--help}'[Show this help message and quit]'
+    {-v,--version}'[Show Rails version number and quit]'
+  )
+}
+
+__rails_setup_runtime_options() {
+  runtime_options=(
+    '(-f --force)'{-f,--force}'[Overwrite files that already exist]'
+    '(-p --pretend)'{-p,--pretend}'[Run but do not make any changes]'
+    '(-q --quiet)'{-q,--quiet}'[Suppress status output]'
+    '(-s --skip)'{-s,--skip}'[Skip files that already exist]'
+  )
+}
+
+__rails_setup_generators_options() {
+  local -a runtime_options
+  __rails_setup_runtime_options
+
+  generators_options=(
+    $runtime_options
+    --skip-namespace'[Skip namespace (affects only isolated applications)]'
+    --old-style-hash"[Force using old style hash (:foo => 'bar') on Ruby >= 1.9]"
+  )
+}
+
+__rails_setup_model_generators_options() {
+  local -a generators_options
+  __rails_setup_generators_options
+
+  model_generators_options=(
+    $generators_options
+    '(-o --orm)'{-o,--orm=}'[Orm to be invoked]:orm'
+  )
+}
+
+__rails_setup_resource_generators_options() {
+  local -a model_generators_options
+  __rails_setup_model_generators_options
+
+  resource_generators_options=(
+    $model_generators_options
+    --force-plural'[Forces the use of a plural ModelName]'
+    --resource-route'[Indicates when to generate resource route]: :__rails_boolean'
+  )
+}
+
+__rails_boolean() {
+  _values 'boolean' 'true' 'false'
+}
+
+__rails_migration_fields() {
+  if compset -P '*:*:'; then
+    _values 'index' 'index' 'uniq'
+  else
+    if compset -P '*:'; then
+      _values -s ':' 'type' 'string' 'text' 'integer' 'float' 'decimal' 'datetime' 'timestamp' 'time' 'date' 'binary' 'boolean' 'references'
+    else
+      _guard '[[:alnum:]_]#' 'field'
+    fi
+  fi
+}
+
+_rails_generate() {
+  local context state line curcontext="$curcontext"
+
+  if (( CURRENT > 2 )); then
+    (( CURRENT-- ))
+    shift words
+    _call_function - "_rails_generate_${words[1]}" || _rails_generate_default
+  else
+    __rails_generate_commands
+  fi
+}
+
+_rails_g() {
+  _rails_generate
+}
+
+__rails_generate_commands() {
+  local context curcontext="$curcontext" update_policy
+
+  zstyle -s ":completion:${curcontext}:" cache-policy update_policy
+  if [ -z "$update_policy" ]; then
+    zstyle ":completion:${curcontext}:" cache-policy _rails_generate_commands_caching_policy
+  fi
+
+  local application_directory
+  __rails_setup_application_directory
+  local cache_name
+  cache_name="rails/${application_directory##*/}/all_generators"
+  if ! _retrieve_cache ${cache_name}; then
+    local -a all_generators
+    all_generators=($(_call_program rails_generators rails generate 2> /dev/null | awk '/^  [a-zA-Z_]+/{ print $1 }'))
+    _store_cache ${cache_name} all_generators
+  fi
+
+  local -a rails_generators
+  rails_generators=(${all_generators:#*:*})
+  _describe -t rails_generators 'rails generator' rails_generators
+
+  local -a -U namespaces
+  local namespace
+  local -a generators
+  namespaces=(${(R)${(M)all_generators:#*:*}%:*})
+  for namespace in $namespaces; do
+    generators=(${${(M)all_generators:#${namespace}:*}/:/\\:})
+    _describe -t ${namespace}_generators "${namespace/_/ } generator" generators
+  done
+}
+
+_rails_generate_commands_caching_policy() {
+  local application_directory
+  __rails_setup_application_directory
+
+  if [ "${application_directory}/Gemfile" -nt "$1" ]; then
+    return 0
+  fi
+
+  local -a oldp
+  oldp=( "$1"(Nmw+1) )
+  (( $#oldp ))
+}
+
+_rails_generate_default() {
+  local -a generators_options
+  __rails_setup_generators_options
+
+  _arguments \
+    $generators_options \
+    '*:argument'
+}
+
+_rails_generate_assets() {
+  local -a generators_options
+  __rails_setup_generators_options
+
+  _arguments \
+    $generators_options \
+    '(-j --javascripts)'{-j,--javascripts}'[Generate JavaScripts]: :__rails_boolean' \
+    '(-y --stylesheets)'{-y,--stylesheets}'[Generate Stylesheets]: :__rails_boolean' \
+    '(-je --javascript-engine)'{-je,--javascript-engine=}'[Engine for JavaScripts]:javascript engine' \
+    '(-se --stylesheet-engine)'{-se,--stylesheet-engine=}'[Engine for Stylesheets]:stylesheet engine' \
+    ': :_guard "^-*" "name"'
+}
+
+_rails_generate_controller() {
+  local -a generators_options
+  __rails_setup_generators_options
+
+  _arguments \
+    $generators_options \
+    '(-e --template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \
+    '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \
+    --helper'[Indicates when to generate helper]: :__rails_boolean' \
+    --assets'[Indicates when to generate assets]: :__rails_boolean' \
+    ': :_guard "^-*" "name"' \
+    '*: :_guard "^-*" "action"'
+}
+
+_rails_generate_generator() {
+  local -a generators_options
+  __rails_setup_generators_options
+
+  _arguments \
+    $generators_options \
+    --namespace'[Namespace generator under lib/generators/name]: :__rails_boolean' \
+    ': :_guard "^-*" "name"'
+}
+
+_rails_generate_helper() {
+  local -a generators_options
+  __rails_setup_generators_options
+
+  _arguments \
+    $generators_options \
+    '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \
+    ': :_guard "^-*" "name"' \
+}
+
+_rails_generate_integration_test() {
+  local -a generators_options
+  __rails_setup_generators_options
+
+  _arguments \
+    $generators_options \
+    --integration-tool='[Integration tool to be invoke]:integration tool' \
+    ': :_guard "^-*" "name"' \
+}
+
+_rails_generate_jbuilder() {
+  local -a generators_options
+  __rails_setup_generators_options
+
+  _arguments \
+    $generators_options \
+    ': :_guard "^-*" "name"' \
+    '*: :__rails_migration_fields'
+}
+
+_rails_generate_mailer() {
+  local -a generators_options
+  __rails_setup_generators_options
+
+  _arguments \
+    $generators_options \
+    '(-e --template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \
+    '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \
+    ': :_guard "^-*" "name"' \
+    '*: :_guard "^-*" "method"'
+}
+
+_rails_generate_migration() {
+  local -a modelgenerators_options
+  __rails_setup_model_generators_options
+
+  _arguments \
+    $model_generators_options \
+    ': :_guard "^-*" "name"' \
+    '*: :__rails_migration_fields'
+}
+
+_rails_generate_model() {
+  _rails_generate_migration
+}
+
+_rails_generate_observer() {
+  local -a model_generators_options
+  __rails_setup_model_generators_options
+
+  _arguments \
+    $model_generators_options \
+    ': :_guard "^-*" "name"'
+}
+
+_rails_generate_performance_test() {
+  local -a generators_options
+  __rails_setup_generators_options
+
+  _arguments \
+    $generators_options \
+    --performance-tool='[Performance tool to be invoked]:performance tool' \
+    ': :_guard "^-*" "name"' \
+}
+
+_rails_generate_resource() {
+  local context state line curcontext="$curcontext"
+
+  local -a resource_generators_options
+  __rails_setup_resource_generators_options
+
+  _arguments -C \
+    $resource_generators_options \
+    '(-c --resource-controller)'{-c,--resource-controller=}'[Resource controller to be invoked]:name' \
+    '(-a --actions)'{-a,--actions=}'[Actions for the resource controller]: :->actions' \
+    ': :->name' \
+    '*: :->fields'
+
+  if (( words[(I)(--actions=*|-a)] > 0 && words[(I)(--actions=*|-a)] == words[(I)-*] )); then
+    state=actions
+  fi
+
+  case "$state" in
+    actions)
+      _guard "[[:alnum:]_]#" "actions"
+      ;;
+    name)
+      _guard "^-*" "name"
+      ;;
+    fields)
+      __rails_migration_fields
+      ;;
+  esac
+}
+
+_rails_generate_scaffold() {
+  local -a resource_generators_options
+  __rails_setup_resource_generators_options
+
+  _arguments \
+    $resource_generators_options \
+    '(-y --stylesheets)'{-y,--stylesheets}'[Generate Stylesheets]: :__rails_boolean' \
+    '(-se --stylesheet-engine)'{-se,--stylesheet-engine=}'[Engine for Stylesheets]:stylesheet engine' \
+    '(-c --scaffold-controller)'{-c,--scaffold-controller=}'[Scaffold controller to be invoked]:name' \
+    --assets'[Indicates when to generate assets]:boolean:(true false)' \
+    ': :_guard "^-*" "name"' \
+    '*: :__rails_migration_fields'
+}
+
+_rails_generate_scaffold_controller() {
+  local -a model_generators_options
+  __rails_setup_model_generators_options
+
+  _arguments \
+    $model_generators_options \
+    '(-e --template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \
+    '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \
+      --helper'[Indicates when to generate helper]: :__rails_boolean' \
+    ': :_guard "^-*" "name"'
+}
+
+_rails_generate_session_migration() {
+  local -a model_generators_options
+  __rails_setup_model_generators_options
+
+  _arguments \
+    $model_generators_options \
+    ': :_guard "^-*" "name"'
+}
+
+_rails_generate_task() {
+  local -a generators_options
+  __rails_setup_generators_options
+
+  _arguments \
+    $generators_options \
+    ': :_guard "^-*" "name"' \
+    '*: :_guard "^-*" "action"'
+}
+
+_rails_console() {
+  _arguments \
+    '(- *)'{-h,--help}'[Show this help message]' \
+    '(-s --sandbox)'{-s,--sandbox}'[Rollback database modifications on exit]' \
+    --debugger'[Enable ruby-debugging for the console]'
+}
+
+_rails_c() {
+  _rails_console
+}
+
+_rails_server() {
+  _arguments \
+    '(- *)'{-h,--help}'[Show this help message]' \
+    '(-p --port)'{-p,--port=}'[Runs Rails on the specified port]: :_guard "[[\:digit\:]]#" "port"' \
+    '(-b --binding)'{-b,--binding=}'[Binds Rails to the specified ip]:ip:_hosts' \
+    '(-c --config)'{-c,--config=}'[Use custom rackup configuration file]:file:_files -g "*.ru"' \
+    '(-d --daemon)'{-d,--daemon}'[Make server run as a Daemon]' \
+    '(-u --debugger)'{-u,--debugger}'[Enable ruby-debugging for the server]' \
+    '(-e --environment)'{-e,--environment=}'[Specifies the environment to run this server under (test/development/production)]:name:(test development production)' \
+    '(-P --pid)'{-P,--pid=}'[Specifies the PID file]:pid:_files -g "*.pid"'
+}
+
+_rails_s() {
+  _rails_server
+}
+
+_rails_dbconsole() {
+  _arguments \
+    '(- *)'--help'[Show this help message]' \
+    '(-p --include-password)'{-p,--include-password}'[Automatically provide the password from database.yml]' \
+    --mode'[Automatically put the sqlite3 database in the specified mode (html, list, line, column)]:mode:(html list line column)' \
+    --header
+}
+
+_rails_new() {
+  local context state line curcontext="$curcontext"
+
+  local _a rails_options runtime_options
+  __rails_setup_rails_options
+  __rails_setup_runtime_options
+
+  _arguments -C \
+    $rails_options \
+    $runtime_options \
+    '(-r --ruby)'{-r,--ruby=}'[Path to the Ruby binary of your choice]:path' \
+    '(-b --builder)'{-b,--builder=}'[Path to a application builder (can be a filesystem path or URL)]: :->path_or_url' \
+    '(-m --template)'{-m,--template=}'[Path to an application template (can be a filesystem path or URL)]: :->path_or_url' \
+    --skip-gemfile"[Don't create a Gemfile]" \
+    --skip-bundle"[Don't run bundle install]" \
+    '(-G --skip-git)'{-G,--skip-git}'[Skip Git ignores and keeps]' \
+    '(-O --skip-active-record)'{-O,--skip-active-record}'[Skip Active Record files]' \
+    '(-S --skip-sprockets)'{-S,--skip-sprockets}'[Skip Sprockets files]' \
+    '(-d --database)'{-d,--database=}'[Preconfigure for selected database]:database:(mysql oracle postgresql sqlite3 frontbase ibm_db sqlserver jdbcmysql jdbcsqlite3 jdbcpostgresql jdbc)' \
+    '(-j --javascript)'{-j,--javascript=}'[Preconfigure for selected JavaScript library]:javascript' \
+    '(-J --skip-javascript)'{-J,--skip-javascript}'[Skip JavaScript files]' \
+    --dev'[Setup the application with Gemfile pointing to your Rails checkout]' \
+    --edge'[Setup the application with Gemfile pointing to Rails repository]' \
+    '(-T --skip-test-unit)'{-T,--skip-test-unit}'[Skip Test::Unit files]' \
+    --old-style-hash"[Force using old style hash (:foo => 'bar') on Ruby >= 1.9]" \
+    ':app path:_directories'
+
+  case "$state" in
+    path_or_url)
+      _alternative \
+        'files:path:_files -g "*.rb"' \
+        'url:url:_urls'
+      ;;
+  esac
+}
+
+_rails_application() {
+  _rails_new
+}
+
+_rails_db() {
+  _rails_dbconsole
+}
+
+_rails_destroy() {
+  _rails_generate
+}
+
+_rails_d() {
+  _rails_destroy
+}
+
+_rails_benchmarker() {
+  _arguments \
+    '(- *)'{-h,--help}'[Show this help message]' \
+    '(-r --runs)'{-r,--runs}'[Number of runs]: :_guard "[[\:digit\:]]#" "number"' \
+    '(-o --output)'{-o,--output}'[Directory to use when writing the results]:directory:_directories' \
+    '(-m --metrics)'{-m,--metrics}'[Metrics to use]: :_values -s "," "metrics" "wall_time" "memory" "objects" "gc_runs" "gc_time"' \
+    '*: :_guard "^-*" "ruby code"'
+}
+
+_rails_profiler() {
+  _arguments \
+    '(- *)'{-h,--help}'[Show this help message]' \
+    '(-r --runs)'{-r,--runs}'[Number of runs]: :_guard "[[\:digit\:]]#" "number"' \
+    '(-o --output)'{-o,--output}'[Directory to use when writing the results]:directory:_directories' \
+    '(-m --metrics)'{-m,--metrics}'[Metrics to use]: :_values -s "," "metrics" "process_time" "memory" "objects"' \
+    '(-f --formats)'{-f,--formats}'[Formats to output to]: :_values -s "," "formats" "flat" "graph" "html" "call_tree" "call_stack"' \
+    '*: :_guard "^-*" "ruby code"'
+}
+
+_rails_plugin() {
+  local context state line curcontext="$curcontext"
+
+  if (( CURRENT > 2 )); then
+    (( CURRENT-- ))
+    shift words
+    _call_function - "_rails_plugin_${words[1]}" || _nothing
+  else
+    __rails_plugin_commands
+  fi
+}
+
+__rails_plugin_commands() {
+  _values 'plugin command' \
+    install'[Install plugin(s) from known repositories or URLs]' \
+    remove'[Uninstall plugins]' \
+    new
+}
+
+_rails_plugin_install() {
+  _arguments \
+    '(-x --externals)'{-x,--externals}'[Use svn:externals to grab the plugin. Enables plugin updates and plugin versioning]' \
+    '(-o --checkout)'{-o,--checkout}'[Use svn checkout to grab the plugin. Enables updating but does not add a svn:externals entry]' \
+    '(-e --export)'{-e,--export}'[Use svn export to grab the plugin. Exports the plugin, allowing you to check it into your local repository. Does not enable updates or add an svn:externals entry]' \
+    '(-q --quiet)'{-q,--quiet}'[Suppresses the output from installation. Ignored if -v is passed (rails plugin -v install ...)]' \
+    '(-r --revision)'{-r,--revision=}'[Checks out the given revision from subversion or git. Ignored if subversion/git is not used]:revision' \
+    '(-f --force)'{-f,--force}"[Reinstalls a plugin if it's already installed]" \
+    '*:plugin:_urls'
+}
+
+_rails_plugin_remove() {
+  local -a plugins
+
+  plugins=($(_call_program rails_plugins ls -1 vendor/plugins))
+
+  _describe -t plugins 'plugin' plugins
+}
+
+_rails_plugin_new() {
+  _rails_new
+}
+
+_rails_runner() {
+  local context state line curcontext="$curcontext"
+
+  _arguments -C \
+    '(- *)'{-h,--help}'[Show this help message]' \
+    '(-e --environment)'{-e,--environment=}'[Specifies the environment for the runner to operate under (test/development/production)]:name:(test development production)' \
+    ': :->code_or_path'
+
+  case "$state" in
+    code_or_path)
+      _alternative \
+        'files:filename:_files -g "*.rb"' \
+        'codes:ruby code:_guard "^-*" "ruby code"'
+      ;;
+  esac
+}
+
+_rails_r() {
+  _rails_runner
+}
+
+_rails_test() {
+  local context state line curcontext="$curcontext"
+
+  _arguments -C \
+    ': :->path'
+
+  case "$state" in
+    path)
+      _alternative \
+        'files:filename:_files -g "*.rb"'
+      ;;
+  esac
+}
+
+_rails_t() {
+  _rails_test
+}
+
+_rails "$@"
+
+# Local Variables:
+# mode: Shell-Script
+# sh-indentation: 2
+# indent-tabs-mode: nil
+# sh-basic-offset: 2
+# End:
+# vim: ft=zsh sw=2 ts=2 et
-- 
cgit v1.2.3-70-g09d2


From c4699f8ee11ab74cd5ef1d7ae13c170fd5e7f976 Mon Sep 17 00:00:00 2001
From: Marc Cornellà <hello@mcornella.com>
Date: Thu, 10 Mar 2022 20:41:10 +0100
Subject: fix(dash): fix "no application knows how to open URL" error (#10767)

Fixes #10767
---
 plugins/dash/dash.plugin.zsh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'plugins')

diff --git a/plugins/dash/dash.plugin.zsh b/plugins/dash/dash.plugin.zsh
index ace2e33c1..0a627cb7d 100644
--- a/plugins/dash/dash.plugin.zsh
+++ b/plugins/dash/dash.plugin.zsh
@@ -1,5 +1,5 @@
 # Usage: dash [keyword:]query
-dash() { open dash://"$*" }
+dash() { open -a Dash.app dash://"$*" }
 compdef _dash dash
 
 _dash() {
-- 
cgit v1.2.3-70-g09d2


From 345976874550efa09fa7e9cdbe1215ce27d1541b Mon Sep 17 00:00:00 2001
From: Marc Cornellà <hello@mcornella.com>
Date: Thu, 10 Mar 2022 20:56:37 +0100
Subject: perf(dash): improve dash completion performance

---
 plugins/dash/dash.plugin.zsh | 130 ++++++++++++++++++++++---------------------
 1 file changed, 67 insertions(+), 63 deletions(-)

(limited to 'plugins')

diff --git a/plugins/dash/dash.plugin.zsh b/plugins/dash/dash.plugin.zsh
index 0a627cb7d..f6801a870 100644
--- a/plugins/dash/dash.plugin.zsh
+++ b/plugins/dash/dash.plugin.zsh
@@ -5,76 +5,80 @@ compdef _dash dash
 _dash() {
   # No sense doing this for anything except the 2nd position and if we haven't
   # specified which docset to query against
-  if [[ $CURRENT -eq 2 && ! "$words[2]" =~ ":" ]]; then
-    local -a _all_docsets
-    _all_docsets=()
-    # Use defaults to get the array of docsets from preferences
-    # Have to smash it into one big line so that each docset is an element of
-    # our DOCSETS array
-    DOCSETS=("${(@f)$(defaults read com.kapeli.dashdoc docsets | tr -d '\n' | grep -oE '\{.*?\}')}")
+  if [[ $CURRENT -ne 2 || "$words[2]" =~ ":" ]]; then
+    return
+  fi
 
-    # remove all newlines since defaults prints so pretty like
-    # Now get each docset and output each on their own line
-    for doc in "$DOCSETS[@]"; do
-      # Only output docsets that are actually enabled
-      if [[ "`echo $doc | grep -Eo \"isEnabled = .*?;\" | sed 's/[^01]//g'`" == "0" ]]; then
-        continue
+  local -aU docsets
+  docsets=()
+
+  # Use defaults to get the array of docsets from preferences
+  # Have to smash it into one big line so that each docset is an element of our docsets array
+  # Only output docsets that are actually enabled
+  local -a enabled_docsets
+  enabled_docsets=("${(@f)$(defaults read com.kapeli.dashdoc docsets \
+    | tr -d '\n' | grep -oE '\{.*?\}' | grep -E 'isEnabled = 1;')}")
+
+  local docset name keyword
+  # Now get each docset and output each on their own line
+  for docset in "$enabled_docsets[@]"; do
+    keyword=''
+    # Order of preference as explained to me by @kapeli via email
+    for locator in keyword suggestedKeyword platform; do
+      # Echo the docset, try to find the appropriate keyword
+      # Strip doublequotes and colon from any keyword so that everything has the
+      # same format when output (we'll add the colon in the completion)
+      if [[ "$docset" =~ "$locator = ([^;]*);" ]]; then
+        keyword="${match[1]//[\":]}"
       fi
 
-      keyword=''
+      if [[ -z "$keyword" ]]; then
+        continue
+      fi
 
-      # Order of preference as explained to me by @kapeli via email
-      KEYWORD_LOCATORS=(keyword suggestedKeyword platform)
-      for locator in "$KEYWORD_LOCATORS[@]"; do
-        # Echo the docset, try to find the appropriate keyword
-        # Strip doublequotes and colon from any keyword so that everything has the
-        # same format when output (we'll add the colon in the completion)
-        keyword=`echo $doc | grep -Eo "$locator = .*?;" | sed -e "s/$locator = \(.*\);/\1/" -e "s/[\":]//g"`
-        if [[ ! -z "$keyword" ]]; then
-          # if we fall back to platform, we should do some checking per @kapeli
-          if [[ "$locator" == "platform" ]]; then
-            # Since these are the only special cases right now, let's not do the
-            # expensive processing unless we have to
-            if [[ "$keyword" = (python|java|qt|cocos2d) ]]; then
-              docsetName=`echo $doc | grep -Eo "docsetName = .*?;" | sed -e "s/docsetName = \(.*\);/\1/" -e "s/[\":]//g"`
-              case "$keyword" in
-                python)
-                  case "$docsetName" in
-                    "Python 2") keyword="python2" ;;
-                    "Python 3") keyword="python3" ;;
-                  esac ;;
-                java)
-                  case "$docsetName" in
-                    "Java SE7") keyword="java7" ;;
-                    "Java SE6") keyword="java6" ;;
-                    "Java SE8") keyword="java8" ;;
-                  esac ;;
-                qt)
-                  case "$docsetName" in
-                    "Qt 5") keyword="qt5" ;;
-                    "Qt 4"|Qt) keyword="qt4" ;;
-                  esac ;;
-                cocos2d)
-                  case "$docsetName" in
-                    Cocos3D) keyword="cocos3d" ;;
-                  esac ;;
-              esac
-            fi
+      # if we fall back to platform, we should do some checking per @kapeli
+      if [[ "$locator" == "platform" ]]; then
+        # Since these are the only special cases right now, let's not do the
+        # expensive processing unless we have to
+        if [[ "$keyword" = (python|java|qt|cocos2d) ]]; then
+          if [[ "$docset" =~ "docsetName = ([^;]*);" ]]; then
+            name="${match[1]//[\":]}"
+            case "$keyword" in
+              python)
+                case "$name" in
+                  "Python 2") keyword="python2" ;;
+                  "Python 3") keyword="python3" ;;
+                esac ;;
+              java)
+                case "$name" in
+                  "Java SE7") keyword="java7" ;;
+                  "Java SE6") keyword="java6" ;;
+                  "Java SE8") keyword="java8" ;;
+                esac ;;
+              qt)
+                case "$name" in
+                  "Qt 5") keyword="qt5" ;;
+                  "Qt 4"|Qt) keyword="qt4" ;;
+                esac ;;
+              cocos2d)
+                case "$name" in
+                  Cocos3D) keyword="cocos3d" ;;
+                esac ;;
+            esac
           fi
-
-          # Bail once we have a match
-          break
         fi
-      done
-
-      # If we have a keyword, add it to the list!
-      if [[ ! -z "$keyword" ]]; then
-        _all_docsets+=($keyword)
       fi
+
+      # Bail once we have a match
+      break
     done
 
-    # special thanks to [arx] on #zsh for getting me sorted on this piece
-    compadd -qS: -- "$_all_docsets[@]"
-    return
-  fi
+    # If we have a keyword, add it to the list!
+    if [[ -n "$keyword" ]]; then
+      docsets+=($keyword)
+    fi
+  done
+
+  # special thanks to [arx] on #zsh for getting me sorted on this piece
+  compadd -qS: -- "$docsets[@]"
 }
-- 
cgit v1.2.3-70-g09d2


From f0b5cb133063b16c25afd8740a0c96ca884ee822 Mon Sep 17 00:00:00 2001
From: Leon <82407168+sed-i@users.noreply.github.com>
Date: Fri, 18 Mar 2022 12:09:05 +0000
Subject: feat(terraform): add alias `tfo` for terraform output (#10667)

---
 plugins/terraform/README.md            | 1 +
 plugins/terraform/terraform.plugin.zsh | 1 +
 2 files changed, 2 insertions(+)

(limited to 'plugins')

diff --git a/plugins/terraform/README.md b/plugins/terraform/README.md
index 474346dc0..59c6e7f2a 100644
--- a/plugins/terraform/README.md
+++ b/plugins/terraform/README.md
@@ -22,6 +22,7 @@ plugins=(... terraform)
 | `tfd` | `terraform destroy`  |
 | `tff` | `terraform fmt`      |
 | `tfi` | `terraform init`     |
+| `tfo` | `terraform output`   |
 | `tfp` | `terraform plan`     |
 | `tfv` | `terraform validate` |
 
diff --git a/plugins/terraform/terraform.plugin.zsh b/plugins/terraform/terraform.plugin.zsh
index f224b79f0..d9e39e6ac 100644
--- a/plugins/terraform/terraform.plugin.zsh
+++ b/plugins/terraform/terraform.plugin.zsh
@@ -13,5 +13,6 @@ alias tfa='terraform apply'
 alias tfd='terraform destroy'
 alias tff='terraform fmt'
 alias tfi='terraform init'
+alias tfo='terraform output'
 alias tfp='terraform plan'
 alias tfv='terraform validate'
-- 
cgit v1.2.3-70-g09d2


From c96fc233c4903ba75fba5bc55e7f91f9dc8e460e Mon Sep 17 00:00:00 2001
From: Wayne Lloyd <waynelloyd@outlook.com>
Date: Fri, 18 Mar 2022 12:11:00 +0000
Subject: fix(gpg-agent): suppress errors from `gpgconf` (#10769)

---
 plugins/gpg-agent/gpg-agent.plugin.zsh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'plugins')

diff --git a/plugins/gpg-agent/gpg-agent.plugin.zsh b/plugins/gpg-agent/gpg-agent.plugin.zsh
index 0adc8de5d..1f4be20b0 100644
--- a/plugins/gpg-agent/gpg-agent.plugin.zsh
+++ b/plugins/gpg-agent/gpg-agent.plugin.zsh
@@ -9,7 +9,7 @@ autoload -U add-zsh-hook
 add-zsh-hook preexec _gpg-agent_update-tty_preexec
 
 # If enable-ssh-support is set, fix ssh agent integration
-if [[ $(gpgconf --list-options gpg-agent | awk -F: '$1=="enable-ssh-support" {print $10}') = 1 ]]; then
+if [[ $(gpgconf --list-options gpg-agent 2>/dev/null | awk -F: '$1=="enable-ssh-support" {print $10}') = 1 ]]; then
   unset SSH_AGENT_PID
   if [[ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]]; then
     export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
-- 
cgit v1.2.3-70-g09d2


From 50113a53f379b7d98e6921ba58e8440324beb32c Mon Sep 17 00:00:00 2001
From: Carlo Sala <carlosalag@protonmail.com>
Date: Tue, 22 Mar 2022 22:39:37 +0100
Subject: feat(toolbox): add plugin to show `toolbox` prompt info (#10685)

---
 plugins/toolbox/README.md          | 19 +++++++++++++++++++
 plugins/toolbox/kubectx.plugin.zsh |  3 +++
 2 files changed, 22 insertions(+)
 create mode 100644 plugins/toolbox/README.md
 create mode 100644 plugins/toolbox/kubectx.plugin.zsh

(limited to 'plugins')

diff --git a/plugins/toolbox/README.md b/plugins/toolbox/README.md
new file mode 100644
index 000000000..aac2bb3b0
--- /dev/null
+++ b/plugins/toolbox/README.md
@@ -0,0 +1,19 @@
+# toolbox plugin
+
+Plugin for [toolbox](https://containertoolbx.org), a tool to use containerized CLI environments.
+
+To use it, add `toolbox` to your plugins array in your `.zshrc` file:
+
+```zsh
+plugins=(... toolbox)
+```
+
+## Prompt function
+
+This plugins adds `toolbox_prompt_info()` function. Using it in your prompt, it will show the toolbox indicator ⬢ (if you are running in a toolbox container), and nothing if not.
+
+You can use it by adding `$(toolbox_prompt_info)` to your `PROMPT` or `RPROMPT` variable:
+
+```zsh
+RPROMPT='$(toolbox_prompt_info)'
+```
diff --git a/plugins/toolbox/kubectx.plugin.zsh b/plugins/toolbox/kubectx.plugin.zsh
new file mode 100644
index 000000000..8b6bf5ecd
--- /dev/null
+++ b/plugins/toolbox/kubectx.plugin.zsh
@@ -0,0 +1,3 @@
+function toolbox_prompt_info() {
+  [[ -f /run/.toolboxenv ]] && echo "⬢"
+}
-- 
cgit v1.2.3-70-g09d2


From 4dce175e0e4a678b7f93be80c64247c8f5fbab3e Mon Sep 17 00:00:00 2001
From: Suchandra Thapa <suchandra+github@gmail.com>
Date: Thu, 24 Mar 2022 01:21:36 -1000
Subject: feat(fzf): support `fzf` installed with MacPorts (#10794)

---
 plugins/fzf/fzf.plugin.zsh | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

(limited to 'plugins')

diff --git a/plugins/fzf/fzf.plugin.zsh b/plugins/fzf/fzf.plugin.zsh
index b86af0d2d..a946cf762 100644
--- a/plugins/fzf/fzf.plugin.zsh
+++ b/plugins/fzf/fzf.plugin.zsh
@@ -173,6 +173,32 @@ function fzf_setup_using_cygwin() {
   return 0
 }
 
+function fzf_setup_using_macports() {
+  # If the command is not found, the package isn't installed
+  (( $+commands[fzf] )) || return 1
+
+  # The fzf-zsh-completion package installs the auto-completion in
+  local completions="/opt/local/share/zsh/site-functions/fzf"
+  # The fzf-zsh-completion package installs the key-bindings file in
+  local key_bindings="/opt/local/share/fzf/shell/key-bindings.zsh"
+
+  if [[ ! -f "$completions" || ! -f "$key_bindings" ]]; then
+    return 1
+  fi
+
+  # Auto-completion
+  if [[ -o interactive && "$DISABLE_FZF_AUTO_COMPLETION" != "true" ]]; then
+    source "$completions" 2>/dev/null
+  fi
+
+  # Key bindings
+  if [[ "$DISABLE_FZF_KEY_BINDINGS" != "true" ]]; then
+    source "$key_bindings" 2>/dev/null
+  fi
+
+  return 0
+}
+
 # Indicate to user that fzf installation not found if nothing worked
 function fzf_setup_error() {
   cat >&2 <<'EOF'
@@ -185,6 +211,7 @@ fzf_setup_using_openbsd \
   || fzf_setup_using_debian \
   || fzf_setup_using_opensuse \
   || fzf_setup_using_cygwin \
+  || fzf_setup_using_macports \
   || fzf_setup_using_base_dir \
   || fzf_setup_error
 
-- 
cgit v1.2.3-70-g09d2


From a64d9403775f45036daf3b66693c35df7bab3c53 Mon Sep 17 00:00:00 2001
From: Marc Cornellà <hello@mcornella.com>
Date: Sat, 26 Mar 2022 15:10:56 +0100
Subject: refactor(1password): extract `opswd` function

---
 plugins/1password/1password.plugin.zsh | 51 +++++-----------------------------
 plugins/1password/_opswd               |  9 ++++++
 plugins/1password/opswd                | 37 ++++++++++++++++++++++++
 3 files changed, 53 insertions(+), 44 deletions(-)
 create mode 100644 plugins/1password/_opswd
 create mode 100644 plugins/1password/opswd

(limited to 'plugins')

diff --git a/plugins/1password/1password.plugin.zsh b/plugins/1password/1password.plugin.zsh
index 9398b02b4..941523ca8 100644
--- a/plugins/1password/1password.plugin.zsh
+++ b/plugins/1password/1password.plugin.zsh
@@ -1,46 +1,9 @@
-if (( ${+commands[op]} )); then
-  eval "$(op completion zsh)"
-  compdef _op op
-fi
+# Do nothing if op is not installed
+(( ${+commands[op]} )) || return
 
-# opswd puts the password of the named service into the clipboard. If there's a
-# one time password, it will be copied into the clipboard after 10 seconds. The
-# clipboard is cleared after another 20 seconds.
-function opswd() {
-  if [[ $# -lt 1 ]]; then
-    echo "Usage: opswd <service>"
-    return 1
-  fi
+# Load op completion
+eval "$(op completion zsh)"
+compdef _op op
 
-  local service=$1
-
-  # If not logged in, print error and return
-  op list users > /dev/null || return
-
-  local password
-  # Copy the password to the clipboard
-  if ! password=$(op get item "$service" --fields password 2>/dev/null); then
-    echo "error: could not obtain password for $service"
-    return 1
-  fi
-
-  echo -n "$password" | clipcopy
-  echo "✔ password for $service copied to clipboard"
-
-  # If there's a one time password, copy it to the clipboard after 5 seconds
-  local totp
-  if totp=$(op get totp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then
-    sleep 10 && echo -n "$totp" | clipcopy
-    echo "✔ TOTP for $service copied to clipboard"
-  fi
-
-  (sleep 20 && clipcopy </dev/null 2>/dev/null) &!
-}
-
-function _opswd() {
-  local -a services
-  services=("${(@f)$(op list items --categories Login 2>/dev/null | op get item - --fields title 2>/dev/null)}")
-  [[ -z "$services" ]] || compadd -a -- services
-}
-
-compdef _opswd opswd
+# Load opswd function
+autoload -Uz opswd
diff --git a/plugins/1password/_opswd b/plugins/1password/_opswd
new file mode 100644
index 000000000..b92bf8fc8
--- /dev/null
+++ b/plugins/1password/_opswd
@@ -0,0 +1,9 @@
+#compdef opswd
+
+function _opswd() {
+  local -a services
+  services=("${(@f)$(op list items --categories Login 2>/dev/null | op get item - --fields title 2>/dev/null)}")
+  [[ -z "$services" ]] || compadd -a -- services
+}
+
+_opswd "$@"
diff --git a/plugins/1password/opswd b/plugins/1password/opswd
new file mode 100644
index 000000000..6849d42b3
--- /dev/null
+++ b/plugins/1password/opswd
@@ -0,0 +1,37 @@
+#autoload
+
+# opswd puts the password of the named service into the clipboard. If there's a
+# one time password, it will be copied into the clipboard after 10 seconds. The
+# clipboard is cleared after another 20 seconds.
+function opswd() {
+  if [[ $# -lt 1 ]]; then
+    echo "Usage: opswd <service>"
+    return 1
+  fi
+
+  local service=$1
+
+  # If not logged in, print error and return
+  op list users > /dev/null || return
+
+  local password
+  # Copy the password to the clipboard
+  if ! password=$(op get item "$service" --fields password 2>/dev/null); then
+    echo "error: could not obtain password for $service"
+    return 1
+  fi
+
+  echo -n "$password" | clipcopy
+  echo "✔ password for $service copied to clipboard"
+
+  # If there's a one time password, copy it to the clipboard after 5 seconds
+  local totp
+  if totp=$(op get totp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then
+    sleep 10 && echo -n "$totp" | clipcopy
+    echo "✔ TOTP for $service copied to clipboard"
+  fi
+
+  (sleep 20 && clipcopy </dev/null 2>/dev/null) &!
+}
+
+opswd "$@"
-- 
cgit v1.2.3-70-g09d2


From dbadfa0810c0be346b98c02cc802c33fa43bee11 Mon Sep 17 00:00:00 2001
From: Adam Pike <adam.pike@1password.com>
Date: Sat, 26 Mar 2022 15:11:04 +0100
Subject: refactor(1password): support CLI 2 and soft-deprecate CLI 1 (#10787)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This change still supports CLI 1, but shows a deprecation warning
on the first run of `opswd`. Support for CLI 1 shall be removed
in the near future.

Closes #10787

Co-authored-by: Marc Cornellà <hello@mcornella.com>
---
 plugins/1password/README.md | 11 ++++++----
 plugins/1password/_opswd    | 12 ++++++++++-
 plugins/1password/opswd     | 49 +++++++++++++++++++++++++++++++++++++++++----
 3 files changed, 63 insertions(+), 9 deletions(-)

(limited to 'plugins')

diff --git a/plugins/1password/README.md b/plugins/1password/README.md
index f6790ca8a..f6854da53 100644
--- a/plugins/1password/README.md
+++ b/plugins/1password/README.md
@@ -25,11 +25,14 @@ which service you want to get.
 For example, `opswd github.com` will put your GitHub password into your clipboard, and if
 a TOTP is available, it will be copied to the clipboard after 10 seconds.
 
-> NOTE: you need to be logged in for `opswd` to work. See:
+> NOTE: you need to be signed in for `opswd` to work. If you are using biometric unlock,
+> 1Password CLI will automatically prompt you to sign in. See:
 >
-> - [Sign in or out](https://support.1password.com/command-line/#sign-in-or-out)
-> - [Session management](https://support.1password.com/command-line/#appendix-session-management)
+> - [Get started with 1Password CLI 2: Sign in](https://developer.1password.com/docs/cli/get-started#sign-in)
+> - [Sign in to your 1Password account manually](https://developer.1password.com/docs/cli/sign-in-manually)
 
 ## Requirements
 
-- [1Password's command line utility](https://1password.com/downloads/command-line/).
+- [1Password CLI 2](https://developer.1password.com/docs/cli/get-started#install)
+
+  > NOTE: if you're using 1Password CLI 1, [see how to upgrade to CLI 2](https://developer.1password.com/docs/cli/upgrade).
diff --git a/plugins/1password/_opswd b/plugins/1password/_opswd
index b92bf8fc8..dbc094f87 100644
--- a/plugins/1password/_opswd
+++ b/plugins/1password/_opswd
@@ -2,8 +2,18 @@
 
 function _opswd() {
   local -a services
-  services=("${(@f)$(op list items --categories Login 2>/dev/null | op get item - --fields title 2>/dev/null)}")
+  services=("${(@f)$(op item list --categories Login --cache 2>/dev/null | awk 'NR != 1 { print $2 }')}")
   [[ -z "$services" ]] || compadd -a -- services
 }
 
+# TODO: 2022-03-26: Remove support for op CLI 1
+autoload -Uz is-at-least
+is-at-least 2.0.0 $(op --version) || {
+  function _opswd() {
+    local -a services
+    services=("${(@f)$(op list items --categories Login 2>/dev/null | op get item - --fields title 2>/dev/null)}")
+    [[ -z "$services" ]] || compadd -a -- services
+  }
+}
+
 _opswd "$@"
diff --git a/plugins/1password/opswd b/plugins/1password/opswd
index 6849d42b3..57672807e 100644
--- a/plugins/1password/opswd
+++ b/plugins/1password/opswd
@@ -12,11 +12,11 @@ function opswd() {
   local service=$1
 
   # If not logged in, print error and return
-  op list users > /dev/null || return
+  op user list > /dev/null || return
 
   local password
   # Copy the password to the clipboard
-  if ! password=$(op get item "$service" --fields password 2>/dev/null); then
+  if ! password=$(op item get "$service" --fields password 2>/dev/null); then
     echo "error: could not obtain password for $service"
     return 1
   fi
@@ -24,9 +24,9 @@ function opswd() {
   echo -n "$password" | clipcopy
   echo "✔ password for $service copied to clipboard"
 
-  # If there's a one time password, copy it to the clipboard after 5 seconds
+  # If there's a one time password, copy it to the clipboard after 10 seconds
   local totp
-  if totp=$(op get totp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then
+  if totp=$(op item get --otp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then
     sleep 10 && echo -n "$totp" | clipcopy
     echo "✔ TOTP for $service copied to clipboard"
   fi
@@ -34,4 +34,45 @@ function opswd() {
   (sleep 20 && clipcopy </dev/null 2>/dev/null) &!
 }
 
+# TODO: 2022-03-26: Remove support for op CLI 1
+autoload -Uz is-at-least
+is-at-least 2.0.0 $(op --version) || {
+  print -ru2 ${(%):-"%F{yellow}opswd: usage with op version $(op --version) is deprecated. Upgrade to CLI 2 and reload zsh.
+For instructions, see https://developer.1password.com/docs/cli/upgrade.%f"}
+
+  # opswd puts the password of the named service into the clipboard. If there's a
+  # one time password, it will be copied into the clipboard after 10 seconds. The
+  # clipboard is cleared after another 20 seconds.
+  function opswd() {
+    if [[ $# -lt 1 ]]; then
+      echo "Usage: opswd <service>"
+      return 1
+    fi
+
+    local service=$1
+
+    # If not logged in, print error and return
+    op list users > /dev/null || return
+
+    local password
+    # Copy the password to the clipboard
+    if ! password=$(op get item "$service" --fields password 2>/dev/null); then
+      echo "error: could not obtain password for $service"
+      return 1
+    fi
+
+    echo -n "$password" | clipcopy
+    echo "✔ password for $service copied to clipboard"
+
+    # If there's a one time password, copy it to the clipboard after 5 seconds
+    local totp
+    if totp=$(op get totp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then
+      sleep 10 && echo -n "$totp" | clipcopy
+      echo "✔ TOTP for $service copied to clipboard"
+    fi
+
+    (sleep 20 && clipcopy </dev/null 2>/dev/null) &!
+  }
+}
+
 opswd "$@"
-- 
cgit v1.2.3-70-g09d2


From 3f214329d631b3ae39d6b283262c77819a0078de Mon Sep 17 00:00:00 2001
From: Carlo Sala <carlosalag@protonmail.com>
Date: Mon, 28 Mar 2022 13:38:49 +0200
Subject: chore: removing old completion code (#10616)

---
 plugins/cargo/cargo.plugin.zsh     |  8 --------
 plugins/deno/deno.plugin.zsh       | 13 -------------
 plugins/fnm/fnm.plugin.zsh         | 13 -------------
 plugins/gh/gh.plugin.zsh           | 13 -------------
 plugins/helm/helm.plugin.zsh       |  9 ---------
 plugins/kubectl/kubectl.plugin.zsh |  9 ---------
 plugins/rbw/rbw.plugin.zsh         |  6 ------
 plugins/rust/rust.plugin.zsh       |  5 -----
 plugins/rustup/rustup.plugin.zsh   |  8 --------
 plugins/volta/volta.plugin.zsh     |  5 -----
 10 files changed, 89 deletions(-)

(limited to 'plugins')

diff --git a/plugins/cargo/cargo.plugin.zsh b/plugins/cargo/cargo.plugin.zsh
index e4b338207..692025e8f 100644
--- a/plugins/cargo/cargo.plugin.zsh
+++ b/plugins/cargo/cargo.plugin.zsh
@@ -1,14 +1,6 @@
 print ${(%):-'%F{yellow}The `cargo` plugin is deprecated and has been moved to the `rust` plugin.'}
 print ${(%):-'Please update your .zshrc to use the `%Brust%b` plugin instead.%f'}
 
-# TODO: 2021-12-28: remove this block
-# Handle $0 according to the standard:
-# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
-0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
-0="${${(M)0:#/*}:-$PWD/$0}"
-# Remove old generated completion file
-command rm -f "${0:A:h}/_cargo" "$ZSH_CACHE_DIR/cargo_version"
-
 (( ${fpath[(Ie)$ZSH/plugins/rust]} )) || {
   fpath=("$ZSH/plugins/rust" $fpath)
   source "$ZSH/plugins/rust/rust.plugin.zsh"
diff --git a/plugins/deno/deno.plugin.zsh b/plugins/deno/deno.plugin.zsh
index 6c12bae13..7708f84df 100644
--- a/plugins/deno/deno.plugin.zsh
+++ b/plugins/deno/deno.plugin.zsh
@@ -16,19 +16,6 @@ if (( ! $+commands[deno] )); then
   return
 fi
 
-# TODO: 2021-12-28: remove this block
-# Handle $0 according to the standard:
-# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
-0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
-0="${${(M)0:#/*}:-$PWD/$0}"
-# Remove old generated files
-command rm -f "${0:A:h}/_deno" "$ZSH_CACHE_DIR/deno_version"
-
-# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh
-# Add completions folder in $ZSH_CACHE_DIR
-command mkdir -p "$ZSH_CACHE_DIR/completions"
-(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
 # If the completion file doesn't exist yet, we need to autoload it and
 # bind it to `deno`. Otherwise, compinit will have already done that.
 if [[ ! -f "$ZSH_CACHE_DIR/completions/_deno" ]]; then
diff --git a/plugins/fnm/fnm.plugin.zsh b/plugins/fnm/fnm.plugin.zsh
index 044e16a04..6219025cd 100644
--- a/plugins/fnm/fnm.plugin.zsh
+++ b/plugins/fnm/fnm.plugin.zsh
@@ -2,19 +2,6 @@ if (( ! $+commands[fnm] )); then
   return
 fi
 
-# TODO: 2021-12-28: remove this block
-# Handle $0 according to the standard:
-# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
-0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
-0="${${(M)0:#/*}:-$PWD/$0}"
-# remove old generated files
-command rm -f "${0:A:h}/_fnm" "$ZSH_CACHE_DIR/fnm_version"
-
-# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh
-# Add completions folder in $ZSH_CACHE_DIR
-command mkdir -p "$ZSH_CACHE_DIR/completions"
-(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
 # If the completion file doesn't exist yet, we need to autoload it and
 # bind it to `fnm`. Otherwise, compinit will have already done that.
 if [[ ! -f "$ZSH_CACHE_DIR/completions/_fnm" ]]; then
diff --git a/plugins/gh/gh.plugin.zsh b/plugins/gh/gh.plugin.zsh
index 9263220ca..1d8d84c55 100644
--- a/plugins/gh/gh.plugin.zsh
+++ b/plugins/gh/gh.plugin.zsh
@@ -3,19 +3,6 @@ if (( ! $+commands[gh] )); then
   return
 fi
 
-# TODO: 2021-12-28: remove this block
-# Handle $0 according to the standard:
-# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
-0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
-0="${${(M)0:#/*}:-$PWD/$0}"
-# Remove old generated files
-command rm -f "${0:A:h}/_gh" "$ZSH_CACHE_DIR/gh_version"
-
-# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh
-# Add completions folder in $ZSH_CACHE_DIR
-command mkdir -p "$ZSH_CACHE_DIR/completions"
-(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
 # If the completion file doesn't exist yet, we need to autoload it and
 # bind it to `gh`. Otherwise, compinit will have already done that.
 if [[ ! -f "$ZSH_CACHE_DIR/completions/_gh" ]]; then
diff --git a/plugins/helm/helm.plugin.zsh b/plugins/helm/helm.plugin.zsh
index 05bb19a44..151c43d88 100644
--- a/plugins/helm/helm.plugin.zsh
+++ b/plugins/helm/helm.plugin.zsh
@@ -2,15 +2,6 @@ if (( ! $+commands[helm] )); then
   return
 fi
 
-# TODO: 2021-12-28: delete this block
-# Remove old generated file
-command rm -f "${ZSH_CACHE_DIR}/helm_completion"
-
-# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh
-# Add completions folder in $ZSH_CACHE_DIR
-command mkdir -p "$ZSH_CACHE_DIR/completions"
-(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
 # If the completion file does not exist, generate it and then source it
 # Otherwise, source it and regenerate in the background
 if [[ ! -f "$ZSH_CACHE_DIR/completions/_helm" ]]; then
diff --git a/plugins/kubectl/kubectl.plugin.zsh b/plugins/kubectl/kubectl.plugin.zsh
index 0ee252ac3..095d2b328 100644
--- a/plugins/kubectl/kubectl.plugin.zsh
+++ b/plugins/kubectl/kubectl.plugin.zsh
@@ -1,13 +1,4 @@
 if (( $+commands[kubectl] )); then
-  # TODO: 2022-01-05: remove this block
-  # remove old generated files
-  command rm -f "$ZSH_CACHE_DIR/kubectl_completion"
-
-  # TODO: 2022-01-05: remove this bit of code as it exists in oh-my-zsh.sh
-  # Add completions folder in $ZSH_CACHE_DIR
-  command mkdir -p "$ZSH_CACHE_DIR/completions"
-  (( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
   # If the completion file does not exist, generate it and then source it
   # Otherwise, source it and regenerate in the background
   if [[ ! -f "$ZSH_CACHE_DIR/completions/_kubectl" ]]; then
diff --git a/plugins/rbw/rbw.plugin.zsh b/plugins/rbw/rbw.plugin.zsh
index 523e35aff..b6cecf8b4 100644
--- a/plugins/rbw/rbw.plugin.zsh
+++ b/plugins/rbw/rbw.plugin.zsh
@@ -2,12 +2,6 @@ if (( ! $+commands[rbw] )); then
   return
 fi
 
-# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh
-# Add completions folder in $ZSH_CACHE_DIR
-command mkdir -p "$ZSH_CACHE_DIR/completions"
-(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
-
 # If the completion file doesn't exist yet, we need to autoload it and
 # bind it to `rbw`. Otherwise, compinit will have already done that.
 if [[ ! -f "$ZSH_CACHE_DIR/completions/_rbw" ]]; then
diff --git a/plugins/rust/rust.plugin.zsh b/plugins/rust/rust.plugin.zsh
index db6ca9e74..858f14126 100644
--- a/plugins/rust/rust.plugin.zsh
+++ b/plugins/rust/rust.plugin.zsh
@@ -2,11 +2,6 @@ if ! (( $+commands[rustup] && $+commands[cargo] )); then
   return
 fi
 
-# Add completions folder in $ZSH_CACHE_DIR
-# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh
-command mkdir -p "$ZSH_CACHE_DIR/completions"
-(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
 # If the completion file doesn't exist yet, we need to autoload it and
 # bind it to `cargo`. Otherwise, compinit will have already done that
 if [[ ! -f "$ZSH_CACHE_DIR/completions/_cargo" ]]; then
diff --git a/plugins/rustup/rustup.plugin.zsh b/plugins/rustup/rustup.plugin.zsh
index 3d59c1c54..ef141cf8f 100644
--- a/plugins/rustup/rustup.plugin.zsh
+++ b/plugins/rustup/rustup.plugin.zsh
@@ -1,14 +1,6 @@
 print ${(%):-'%F{yellow}The `rustup` plugin is deprecated and has been moved to the `rust` plugin.'}
 print ${(%):-'Please update your .zshrc to use the `%Brust%b` plugin instead.%f'}
 
-# TODO: 2021-12-28: remove this block
-# Handle $0 according to the standard:
-# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
-0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
-0="${${(M)0:#/*}:-$PWD/$0}"
-# Remove old generated completion file
-command rm -f "${0:A:h}/_rustup" "$ZSH_CACHE_DIR/rustup_version"
-
 (( ${fpath[(Ie)$ZSH/plugins/rust]} )) || {
   fpath=("$ZSH/plugins/rust" $fpath)
   source "$ZSH/plugins/rust/rust.plugin.zsh"
diff --git a/plugins/volta/volta.plugin.zsh b/plugins/volta/volta.plugin.zsh
index 79319394c..ab05ed5df 100644
--- a/plugins/volta/volta.plugin.zsh
+++ b/plugins/volta/volta.plugin.zsh
@@ -3,11 +3,6 @@ if (( ! $+commands[volta] )); then
   return
 fi
 
-# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh
-# Add completions folder in $ZSH_CACHE_DIR
-command mkdir -p "$ZSH_CACHE_DIR/completions"
-(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
 # If the completion file doesn't exist yet, we need to autoload it and
 # bind it to `deno`. Otherwise, compinit will have already done that.
 if [[ ! -f "$ZSH_CACHE_DIR/completions/_volta" ]]; then
-- 
cgit v1.2.3-70-g09d2


From d77ac9e29d6079a7ecd561417772c3218aac94b1 Mon Sep 17 00:00:00 2001
From: Mark Mercado <mmercado@digitalocean.com>
Date: Tue, 29 Mar 2022 05:45:20 -0400
Subject: feat(charm): add plugin for `charm` (#10803)

---
 plugins/charm/README.md        |  9 +++++++++
 plugins/charm/charm.plugin.zsh | 14 ++++++++++++++
 2 files changed, 23 insertions(+)
 create mode 100644 plugins/charm/README.md
 create mode 100644 plugins/charm/charm.plugin.zsh

(limited to 'plugins')

diff --git a/plugins/charm/README.md b/plugins/charm/README.md
new file mode 100644
index 000000000..f237dceeb
--- /dev/null
+++ b/plugins/charm/README.md
@@ -0,0 +1,9 @@
+# Charm plugin
+
+This plugin adds completion for the [charm](https://github.com/charmbracelet/charm) CLI.
+
+To use it, add `charm` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... charm)
+```
diff --git a/plugins/charm/charm.plugin.zsh b/plugins/charm/charm.plugin.zsh
new file mode 100644
index 000000000..52361ce95
--- /dev/null
+++ b/plugins/charm/charm.plugin.zsh
@@ -0,0 +1,14 @@
+# Autocompletion for the Charm CLI (charm).
+if (( ! $+commands[charm] )); then
+  return
+fi
+
+# If the completion file doesn't exist yet, we need to autoload it and
+# bind it to `charm`. Otherwise, compinit will have already done that.
+if [[ ! -f "$ZSH_CACHE_DIR/completions/_charm" ]]; then
+  typeset -g -A _comps
+  autoload -Uz _charm
+  _comps[charm]=_charm
+fi
+
+charm completion zsh >| "$ZSH_CACHE_DIR/completions/_charm" &|
-- 
cgit v1.2.3-70-g09d2


From 93435bff4947ca0855d4d8ecc4786877578f0dd3 Mon Sep 17 00:00:00 2001
From: Alejandro Gastón Alvarez <alegasalv@gmail.com>
Date: Tue, 29 Mar 2022 17:23:45 +0200
Subject: docs(bazel): improve plugin README (#10806)

---
 plugins/bazel/README.md | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

(limited to 'plugins')

diff --git a/plugins/bazel/README.md b/plugins/bazel/README.md
index e5ffe6ea1..fc375d219 100644
--- a/plugins/bazel/README.md
+++ b/plugins/bazel/README.md
@@ -1,5 +1,14 @@
-## Bazel autocomplete plugin
+# Bazel plugin
 
-A copy of the completion script from the
-[bazelbuild/bazel](https://github.com/bazelbuild/bazel/master/scripts/zsh_completion/_bazel)
-git repo.
+This plugin adds completion for [bazel](https://bazel.build), an open-source build and
+test tool that scalably supports multi-language and multi-platform projects.
+
+To use it, add `bazel` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... bazel)
+```
+
+The plugin has a copy of [the completion script from the git repository][1].
+
+[1]: https://github.com/bazelbuild/bazel/blob/master/scripts/zsh_completion/_bazel
-- 
cgit v1.2.3-70-g09d2


From e079babdce1f41a6c85296fba7df1672d98e04bd Mon Sep 17 00:00:00 2001
From: Marc Cornellà <hello@mcornella.com>
Date: Thu, 31 Mar 2022 12:31:09 +0200
Subject: chore: fix some instances of bad wording

Co-authored-by: inclusive-coding-bot <inclusive-coding-bot@github.com>
---
 plugins/sprunge/README.md              | 8 +++++++-
 plugins/sprunge/sprunge.plugin.zsh     | 4 ----
 plugins/svn-fast-info/README.md        | 4 ++--
 plugins/zsh-navigation-tools/README.md | 2 +-
 4 files changed, 10 insertions(+), 8 deletions(-)

(limited to 'plugins')

diff --git a/plugins/sprunge/README.md b/plugins/sprunge/README.md
index fb70d42eb..01274cabb 100644
--- a/plugins/sprunge/README.md
+++ b/plugins/sprunge/README.md
@@ -18,7 +18,8 @@ plugins=(... sprunge)
 | `echo data \| sprunge`       | Any piped data will be uploaded           |
 
 Once sprunge has processed the input it will give you a unique HTTP address:
-```
+
+```console
 $ sprunge "hello"
 http://sprunge.us/XxjnKz
 ```
@@ -30,3 +31,8 @@ http://sprunge.us/XxjnKz
 - Argument precedence goes as follows: stdin > piped input > text strings.
 - If a filename is misspelled or doesn't have the necessary path description, it will NOT
   generate an error, but instead treat it as a text string.
+
+## Credits
+
+- Original code: [shellperson.net](https://web.archive.org/web/20190601000000*/https://www.shellperson.net/sprunge-pastebin-script/).
+- Adapted by: Matt Parnell (@ilikenwf).
diff --git a/plugins/sprunge/sprunge.plugin.zsh b/plugins/sprunge/sprunge.plugin.zsh
index 5d5687a82..48dff5837 100644
--- a/plugins/sprunge/sprunge.plugin.zsh
+++ b/plugins/sprunge/sprunge.plugin.zsh
@@ -1,7 +1,3 @@
-# Contributed and SLIGHTLY modded by Matt Parnell/ilikenwf <parwok -at- gmail>
-# Created by the blogger at the URL below...I don't know where to find his/her name
-# Original found at https://www.shellperson.net/sprunge-pastebin-script/
-
 sprunge() {
   if [[ "$1" = --help ]]; then
     fmt -s >&2 << EOF
diff --git a/plugins/svn-fast-info/README.md b/plugins/svn-fast-info/README.md
index 771378254..e86ba21e3 100644
--- a/plugins/svn-fast-info/README.md
+++ b/plugins/svn-fast-info/README.md
@@ -9,10 +9,10 @@ To use it, add `svn-fast-info` to the plugins array in your zshrc file:
 plugins=(... svn-fast-info)
 ```
 
-It's faster because his efficient use of svn (single svn call) which saves a lot on a huge codebase
+It's faster because it has an efficient use of svn (single svn call) which saves a lot on a huge codebase.
 It displays the current status of the local files (added, deleted, modified, replaced, or else...)
 
-Use `svn_prompt_info` method to display the svn repository status in your theme. 
+Use `svn_prompt_info` method to display the svn repository status in your theme.
 
 ## Functions
 
diff --git a/plugins/zsh-navigation-tools/README.md b/plugins/zsh-navigation-tools/README.md
index bdbfac976..4dc9cdba2 100644
--- a/plugins/zsh-navigation-tools/README.md
+++ b/plugins/zsh-navigation-tools/README.md
@@ -226,7 +226,7 @@ Zsh plugins may look scary, as they seem to have some "architecture". In fact, w
 1. It has its directory added to `fpath`
 2. It has any first `*.plugin.zsh` file sourced
 
-That's it. When one contributes to Oh-My-Zsh or creates a plugin for any plugin manager, he only needs to account for this.
+That's it. When one contributes to Oh-My-Zsh or creates a plugin for any plugin manager, they only need to account for this.
 The same with doing any non-typical Zsh Navigation Tools installation.
 
 ## More
-- 
cgit v1.2.3-70-g09d2


From 6fa5a4f71da2981e0242c139d11c0b4324bab5c1 Mon Sep 17 00:00:00 2001
From: Marc Cornellà <hello@mcornella.com>
Date: Thu, 31 Mar 2022 12:35:26 +0200
Subject: chore(sprunge): fix Internet Archive URL

---
 plugins/sprunge/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'plugins')

diff --git a/plugins/sprunge/README.md b/plugins/sprunge/README.md
index 01274cabb..80e3b30dc 100644
--- a/plugins/sprunge/README.md
+++ b/plugins/sprunge/README.md
@@ -34,5 +34,5 @@ http://sprunge.us/XxjnKz
 
 ## Credits
 
-- Original code: [shellperson.net](https://web.archive.org/web/20190601000000*/https://www.shellperson.net/sprunge-pastebin-script/).
+- Original code: [shellperson.net](https://web.archive.org/web/20190910065842/https://www.shellperson.net/sprunge-pastebin-script/).
 - Adapted by: Matt Parnell (@ilikenwf).
-- 
cgit v1.2.3-70-g09d2