From 30e516a3aa47d90b5f507d5ddacb1b9b69567975 Mon Sep 17 00:00:00 2001 From: nasso <11479594+nasso@users.noreply.github.com> Date: Mon, 3 Mar 2025 17:15:43 +0100 Subject: [PATCH 001/199] feat(jj): add jujutsu plugin (#12292) --- plugins/jj/README.md | 89 ++++++++++++++++++++++++++++++++++++++++ plugins/jj/jj.plugin.zsh | 53 ++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 plugins/jj/README.md create mode 100644 plugins/jj/jj.plugin.zsh diff --git a/plugins/jj/README.md b/plugins/jj/README.md new file mode 100644 index 000000000..cd43ed11b --- /dev/null +++ b/plugins/jj/README.md @@ -0,0 +1,89 @@ +# jj - Jujutsu CLI + +This plugin provides autocompletion for [jj](https://martinvonz.github.io/jj). + +To use it, add `jj` to the plugins array of your zshrc file: + +```zsh +plugins=(... jj) +``` + +## Aliases + +| Alias | Command | +| ------ | ----------------------------- | +| jjc | `jj commit` | +| jjcmsg | `jj commit --message` | +| jjd | `jj diff` | +| jjdmsg | `jj desc --message` | +| jjds | `jj desc` | +| jje | `jj edit` | +| jjgcl | `jj git clone` | +| jjgf | `jj git fetch` | +| jjgp | `jj git push` | +| jjl | `jj log` | +| jjla | `jj log -r "all()"` | +| jjn | `jj new` | +| jjrb | `jj rebase` | +| jjrs | `jj restore` | +| jjrt | `cd "$(jj root \|\| echo .)"` | +| jjsp | `jj split` | +| jjsq | `jj squash` | + +## Prompt usage + +Because `jj` has a very powerful [template syntax](https://martinvonz.github.io/jj/latest/templates/), this +plugin only exposes a convenience function `jj_prompt_template` to read information from the current change. +It is basically the same as `jj log --no-graph -r @ -T $1`: + +```sh +_my_theme_jj_info() { + jj_prompt_template 'self.change_id().shortest(3)' +} + +PROMPT='$(_my_theme_jj_info) $' +``` + +`jj_prompt_template` escapes `%` signs in the output. Use `jj_prompt_template_raw` if you don't want that +(e.g. to colorize the output). + +However, because `jj` can be used inside a Git repository, some themes might clash with it. Generally, you can +fix it with a wrapper function that tries `jj` first and then falls back to `git` if it didn't work: + +```sh +_my_theme_vcs_info() { + jj_prompt_template 'self.change_id().shortest(3)' \ + || git_prompt_info +} + +PROMPT='$(_my_theme_vcs_info) $' +``` + +You can find an example +[here](https://github.com/nasso/omzsh/blob/e439e494f22f4fd4ef1b6cb64626255f4b341c1b/themes/sunakayu.zsh-theme). + +### Performance + +Sometimes `jj` can be slower than `git`. + +If you feel slowdowns, consider using the following: + +``` +zstyle :omz:plugins:jj ignore-working-copy yes +``` + +This will add `--ignore-working-copy` to all `jj` commands executed by your prompt. The downside here is that +your prompt might be out-of-sync until the next time `jj` gets a chance to _not_ ignore the working copy (i.e. +you manually run a `jj` command). + +If you prefer to keep your prompt always up-to-date but still don't want to _feel_ the slowdown, you can make +your prompt asynchronous. This plugin doesn't do this automatically so you'd have to hack your theme a bit for +that. + +## See Also + +- [martinvonz/jj](https://github.com/martinvonz/jj) + +## Contributors + +- [nasso](https://github.com/nasso) - Plugin Author diff --git a/plugins/jj/jj.plugin.zsh b/plugins/jj/jj.plugin.zsh new file mode 100644 index 000000000..9f683923d --- /dev/null +++ b/plugins/jj/jj.plugin.zsh @@ -0,0 +1,53 @@ +# if jj is not found, don't do the rest of the script +if (( ! $+commands[jj] )); then + return +fi + +# If the completion file doesn't exist yet, we need to autoload it and +# bind it to `jj`. Otherwise, compinit will have already done that. +if [[ ! -f "$ZSH_CACHE_DIR/completions/_jj" ]]; then + typeset -g -A _comps + autoload -Uz _jj + _comps[jj]=_jj +fi + +jj util completion zsh >| "$ZSH_CACHE_DIR/completions/_jj" &| + +function __jj_prompt_jj() { + local -a flags + flags=("--no-pager") + if zstyle -t ':omz:plugins:jj' ignore-working-copy; then + flags+=("--ignore-working-copy") + fi + command jj $flags "$@" +} + +# convenience functions for themes +function jj_prompt_template_raw() { + __jj_prompt_jj log --no-graph -r @ -T "$@" 2> /dev/null +} + +function jj_prompt_template() { + local out + out=$(jj_prompt_template_raw "$@") || return 1 + echo "${out:gs/%/%%}" +} + +# Aliases (sorted alphabetically) +alias jjc='jj commit' +alias jjcmsg='jj commit --message' +alias jjd='jj diff' +alias jjdmsg='jj desc --message' +alias jjds='jj desc' +alias jje='jj edit' +alias jjgcl='jj git clone' +alias jjgf='jj git fetch' +alias jjgp='jj git push' +alias jjl='jj log' +alias jjla='jj log -r "all()"' +alias jjn='jj new' +alias jjrb='jj rebase' +alias jjrs='jj restore' +alias jjrt='cd "$(jj root || echo .)"' +alias jjsp='jj split' +alias jjsq='jj squash' From 1c2127727af0ac452292f844ee32306f12906d03 Mon Sep 17 00:00:00 2001 From: nasso <11479594+nasso@users.noreply.github.com> Date: Tue, 4 Mar 2025 11:46:29 +0100 Subject: [PATCH 002/199] feat(jj): enable dynamic completion (#13003) --- plugins/jj/jj.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/jj/jj.plugin.zsh b/plugins/jj/jj.plugin.zsh index 9f683923d..06c04958b 100644 --- a/plugins/jj/jj.plugin.zsh +++ b/plugins/jj/jj.plugin.zsh @@ -11,7 +11,7 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_jj" ]]; then _comps[jj]=_jj fi -jj util completion zsh >| "$ZSH_CACHE_DIR/completions/_jj" &| +COMPLETE=zsh jj >| "$ZSH_CACHE_DIR/completions/_jj" &| function __jj_prompt_jj() { local -a flags From f97e871c33da57d20e1b0411da6b1674126192a9 Mon Sep 17 00:00:00 2001 From: Gary Wei <33930674+garywei944@users.noreply.github.com> Date: Tue, 11 Mar 2025 01:51:15 -0700 Subject: [PATCH 003/199] fix(conda): correct typo in alias parameter (#13010) Closes #13009 --- plugins/conda/conda.plugin.zsh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/conda/conda.plugin.zsh b/plugins/conda/conda.plugin.zsh index a93ceeb95..7a130ba7b 100644 --- a/plugins/conda/conda.plugin.zsh +++ b/plugins/conda/conda.plugin.zsh @@ -14,8 +14,8 @@ alias cnl='conda list' alias cnle='conda list --export' alias cnles='conda list --explicit > spec-file.txt' alias cnr='conda remove' -alias cnrn='conda remove -y -all -n' -alias cnrp='conda remove -y -all -p' +alias cnrn='conda remove -y --all -n' +alias cnrp='conda remove -y --all -p' alias cnry='conda remove -y' alias cnsr='conda search' alias cnu='conda update' From 34e9830dd399b6e068e41907def76a7e97653219 Mon Sep 17 00:00:00 2001 From: Linda TJ Date: Thu, 20 Mar 2025 11:22:12 +0100 Subject: [PATCH 004/199] fix(ranq-quote): use https for quote retrieval (#13021) --- plugins/rand-quote/rand-quote.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/rand-quote/rand-quote.plugin.zsh b/plugins/rand-quote/rand-quote.plugin.zsh index 23c21dc8f..1eda54caa 100644 --- a/plugins/rand-quote/rand-quote.plugin.zsh +++ b/plugins/rand-quote/rand-quote.plugin.zsh @@ -8,7 +8,7 @@ function quote { # Get random quote data local data - data="$(command curl -s --connect-timeout 2 "http://www.quotationspage.com/random.php" \ + data="$(command curl -s --connect-timeout 2 "https://www.quotationspage.com/random.php" \ | iconv -c -f ISO-8859-1 -t UTF-8 \ | command grep -a -m 1 'dt class="quote"')" From bea0dd2ca02cdb2c6cc88f2478aafe87a743f42a Mon Sep 17 00:00:00 2001 From: Robert Dober Date: Thu, 20 Mar 2025 11:30:05 +0100 Subject: [PATCH 005/199] feat(mix): autocomplete `format` command (#13012) --- plugins/mix/_mix | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/plugins/mix/_mix b/plugins/mix/_mix index 656c7fe19..346fc8c4f 100644 --- a/plugins/mix/_mix +++ b/plugins/mix/_mix @@ -146,6 +146,16 @@ case $state in (help) _arguments ':feature:__task_list' ;; + (format) + _arguments -C \ + '--check-formatted' \ + '--dot-formatter' \ + '--dry-run' \ + '--force' \ + '--migrate' \ + '--no-exit' \ + '*::file:_files' + ;; (test) _files ;; From da2510c199edfd3fd28d6297b38ff129b20d3d91 Mon Sep 17 00:00:00 2001 From: Hong Xu Date: Thu, 20 Mar 2025 11:41:27 -0700 Subject: [PATCH 006/199] fix(nicoluaj): avoid overriding customization params (#12859) --- themes/nicoulaj.zsh-theme | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) mode change 100644 => 100755 themes/nicoulaj.zsh-theme diff --git a/themes/nicoulaj.zsh-theme b/themes/nicoulaj.zsh-theme old mode 100644 new mode 100755 index 685cd1ade..6435c3833 --- a/themes/nicoulaj.zsh-theme +++ b/themes/nicoulaj.zsh-theme @@ -12,12 +12,12 @@ # ------------------------------------------------------------------------------ # Customizable parameters. -PROMPT_PATH_MAX_LENGTH=30 -PROMPT_DEFAULT_END=❯ -PROMPT_ROOT_END=❯❯❯ -PROMPT_SUCCESS_COLOR=$FG[071] -PROMPT_FAILURE_COLOR=$FG[124] -PROMPT_VCS_INFO_COLOR=$FG[242] +PROMPT_PATH_MAX_LENGTH=${PROMPT_PATH_MAX_LENGTH:-30} +PROMPT_DEFAULT_END=${PROMPT_DEFAULT_END:-❯} +PROMPT_ROOT_END=${PROMPT_ROOT_END:-❯❯❯} +PROMPT_SUCCESS_COLOR=${PROMPT_SUCCESS_COLOR:-$FG[071]} +PROMPT_FAILURE_COLOR=${PROMPT_FAILURE_COLOR:-$FG[124]} +PROMPT_VCS_INFO_COLOR=${PROMPT_VCS_INFO_COLOR:-$FG[242]} # Set required options. setopt promptsubst From 6591606d566cb37d53a7b996f0ff05a59998dc16 Mon Sep 17 00:00:00 2001 From: Ken van der Eerden <15888558+Ken-vdE@users.noreply.github.com> Date: Thu, 20 Mar 2025 19:43:08 +0100 Subject: [PATCH 007/199] feat(jira): add `project` command to open project (#12851) --- plugins/jira/README.md | 1 + plugins/jira/_jira | 1 + plugins/jira/jira.plugin.zsh | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/plugins/jira/README.md b/plugins/jira/README.md index 19266e7f0..f6e2e26f4 100644 --- a/plugins/jira/README.md +++ b/plugins/jira/README.md @@ -26,6 +26,7 @@ This plugin supplies one command, `jira`, through which all its features are exp | `jira new` | Opens a new Jira issue dialogue | | `jira ABC-123` | Opens an existing issue | | `jira ABC-123 m` | Opens an existing issue for adding a comment | +| `jira project ABC` | Opens JIRA project summary | | `jira dashboard [rapid_view]` | Opens your JIRA dashboard | | `jira mine` | Queries for your own issues | | `jira tempo` | Opens your JIRA Tempo | diff --git a/plugins/jira/_jira b/plugins/jira/_jira index 5f7dcd09d..617a3e501 100644 --- a/plugins/jira/_jira +++ b/plugins/jira/_jira @@ -5,6 +5,7 @@ local -a _1st_arguments _1st_arguments=( 'new:create a new issue' 'mine:open my issues' + 'project:open the project' 'dashboard:open the dashboard' 'tempo:open the tempo' 'reported:search for issues reported by a user' diff --git a/plugins/jira/jira.plugin.zsh b/plugins/jira/jira.plugin.zsh index 22e0c82c7..0c90544d5 100644 --- a/plugins/jira/jira.plugin.zsh +++ b/plugins/jira/jira.plugin.zsh @@ -8,6 +8,7 @@ jira Performs the default action jira new Opens a new Jira issue dialogue jira ABC-123 Opens an existing issue jira ABC-123 m Opens an existing issue for adding a comment +jira project ABC Opens JIRA project summary jira dashboard [rapid_view] Opens your JIRA dashboard jira mine Queries for your own issues jira tempo Opens your JIRA Tempo @@ -88,6 +89,9 @@ function jira() { elif [[ "$action" == "mine" ]]; then echo "Opening my issues" open_command "${jira_url}/issues/?filter=-1" + elif [[ "$action" == "project" ]]; then + echo "Opening project" + open_command "${jira_url}/jira/software/c/projects/${2}/summary" elif [[ "$action" == "dashboard" ]]; then echo "Opening dashboard" if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then From 070f823a84642ba93b844fa80382e8375ca941c8 Mon Sep 17 00:00:00 2001 From: bretello Date: Thu, 20 Mar 2025 19:44:01 +0100 Subject: [PATCH 008/199] feat(uv): alias `uv` with `noglob` (#12866) --- plugins/uv/uv.plugin.zsh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/uv/uv.plugin.zsh b/plugins/uv/uv.plugin.zsh index f1ad37e15..abcbc117e 100644 --- a/plugins/uv/uv.plugin.zsh +++ b/plugins/uv/uv.plugin.zsh @@ -3,6 +3,8 @@ if (( ! ${+commands[uv]} )); then return fi +alias uv="noglob uv" + alias uva='uv add' alias uvexp='uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet' alias uvl='uv lock' From 85d60d489c54150cc9df5cef0504f6af90638fbd Mon Sep 17 00:00:00 2001 From: Kristijan Date: Fri, 21 Mar 2025 05:47:01 +1100 Subject: [PATCH 009/199] feat(dirhistory): add support for ghostty (#12868) --- plugins/dirhistory/dirhistory.plugin.zsh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/dirhistory/dirhistory.plugin.zsh b/plugins/dirhistory/dirhistory.plugin.zsh index 8d67c6188..8d66de7f5 100644 --- a/plugins/dirhistory/dirhistory.plugin.zsh +++ b/plugins/dirhistory/dirhistory.plugin.zsh @@ -137,6 +137,7 @@ for keymap in emacs vicmd viins; do case "$TERM_PROGRAM" in Apple_Terminal) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # Terminal.app iTerm.app) bindkey -M $keymap "^[^[[D" dirhistory_zle_dirhistory_back ;; # iTerm2 + ghostty) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # ghostty esac if (( ${+terminfo[kcub1]} )); then @@ -152,6 +153,7 @@ for keymap in emacs vicmd viins; do case "$TERM_PROGRAM" in Apple_Terminal) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # Terminal.app iTerm.app) bindkey -M $keymap "^[^[[C" dirhistory_zle_dirhistory_future ;; # iTerm2 + ghostty) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # ghostty esac if (( ${+terminfo[kcuf1]} )); then @@ -200,6 +202,7 @@ for keymap in emacs vicmd viins; do case "$TERM_PROGRAM" in Apple_Terminal) bindkey -M $keymap "^[[A" dirhistory_zle_dirhistory_up ;; # Terminal.app iTerm.app) bindkey -M $keymap "^[^[[A" dirhistory_zle_dirhistory_up ;; # iTerm2 + ghostty) bindkey -M $keymap "^[[1;3A" dirhistory_zle_dirhistory_up ;; # ghostty esac if (( ${+terminfo[kcuu1]} )); then @@ -215,6 +218,7 @@ for keymap in emacs vicmd viins; do case "$TERM_PROGRAM" in Apple_Terminal) bindkey -M $keymap "^[[B" dirhistory_zle_dirhistory_down ;; # Terminal.app iTerm.app) bindkey -M $keymap "^[^[[B" dirhistory_zle_dirhistory_down ;; # iTerm2 + ghostty) bindkey -M $keymap "^[[1;3B" dirhistory_zle_dirhistory_down ;; # ghostty esac if (( ${+terminfo[kcud1]} )); then From 5eaebdf0fe870a8c599c89c6b70a0c5ee8c78b42 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Thu, 20 Mar 2025 20:02:34 +0100 Subject: [PATCH 010/199] fix(termsupport): ensure ohmyzsh can run with `set -eu` Closes #12870 --- lib/async_prompt.zsh | 3 ++- lib/termsupport.zsh | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/async_prompt.zsh b/lib/async_prompt.zsh index db48446e7..151e24b8c 100644 --- a/lib/async_prompt.zsh +++ b/lib/async_prompt.zsh @@ -26,7 +26,7 @@ autoload -Uz is-at-least # This API is subject to change and optimization. Rely on it at your own risk. function _omz_register_handler { - setopt localoptions noksharrays + setopt localoptions noksharrays unset typeset -ga _omz_async_functions # we want to do nothing if there's no $1 function or we already set it up if [[ -z "$1" ]] || (( ! ${+functions[$1]} )) \ @@ -44,6 +44,7 @@ function _omz_register_handler { # Set up async handlers and callbacks function _omz_async_request { + setopt localoptions noksharrays unset local -i ret=$? typeset -gA _OMZ_ASYNC_FDS _OMZ_ASYNC_PIDS _OMZ_ASYNC_OUTPUT diff --git a/lib/termsupport.zsh b/lib/termsupport.zsh index 087bae9bb..d2fbf42cd 100644 --- a/lib/termsupport.zsh +++ b/lib/termsupport.zsh @@ -47,7 +47,7 @@ fi # Runs before showing the prompt function omz_termsupport_precmd { - [[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return + [[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return 0 title "$ZSH_THEME_TERM_TAB_TITLE_IDLE" "$ZSH_THEME_TERM_TITLE_IDLE" } @@ -145,6 +145,7 @@ esac # Identifies the directory using a file: URI scheme, including # the host name to disambiguate local vs. remote paths. function omz_termsupport_cwd { + setopt localoptions unset # Percent-encode the host and path names. local URL_HOST URL_PATH URL_HOST="$(omz_urlencode -P $HOST)" || return 1 From 068299685ceac5af570232ca5daa0ecd4d1f7d62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Thu, 20 Mar 2025 20:07:36 +0100 Subject: [PATCH 011/199] fix(dirhistory): support iTerm2 natural text key bindings (#11026) Fixes #11026 Fixes #11407 --- plugins/dirhistory/dirhistory.plugin.zsh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/dirhistory/dirhistory.plugin.zsh b/plugins/dirhistory/dirhistory.plugin.zsh index 8d66de7f5..4650666be 100644 --- a/plugins/dirhistory/dirhistory.plugin.zsh +++ b/plugins/dirhistory/dirhistory.plugin.zsh @@ -136,8 +136,11 @@ for keymap in emacs vicmd viins; do case "$TERM_PROGRAM" in Apple_Terminal) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # Terminal.app - iTerm.app) bindkey -M $keymap "^[^[[D" dirhistory_zle_dirhistory_back ;; # iTerm2 ghostty) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # ghostty + iTerm.app) + bindkey -M $keymap "^[^[[D" dirhistory_zle_dirhistory_back + bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back + ;; esac if (( ${+terminfo[kcub1]} )); then @@ -152,8 +155,11 @@ for keymap in emacs vicmd viins; do case "$TERM_PROGRAM" in Apple_Terminal) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # Terminal.app - iTerm.app) bindkey -M $keymap "^[^[[C" dirhistory_zle_dirhistory_future ;; # iTerm2 ghostty) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # ghostty + iTerm.app) + bindkey -M $keymap "^[^[[C" dirhistory_zle_dirhistory_future + bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future + ;; esac if (( ${+terminfo[kcuf1]} )); then From ec07c79d7ef9f30d4f7aef7eb54b605cd78bfb3d Mon Sep 17 00:00:00 2001 From: Xin Li Date: Thu, 20 Mar 2025 12:25:40 -0700 Subject: [PATCH 012/199] feat(tmux): refresh global environments automatically (#5282) --- plugins/tmux/tmux.plugin.zsh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/plugins/tmux/tmux.plugin.zsh b/plugins/tmux/tmux.plugin.zsh index 51cc7d6a5..f6de9166f 100644 --- a/plugins/tmux/tmux.plugin.zsh +++ b/plugins/tmux/tmux.plugin.zsh @@ -15,6 +15,8 @@ fi : ${ZSH_TMUX_AUTOQUIT:=$ZSH_TMUX_AUTOSTART} # Automatically name the new session based on the basename of PWD : ${ZSH_TMUX_AUTONAME_SESSION:=false} +# Automatically pick up tmux environments +: ${ZSH_TMUX_AUTOREFRESH:=true} # Set term to screen or screen-256color based on current terminal support : ${ZSH_TMUX_DETACHED:=false} # Set detached mode @@ -158,6 +160,15 @@ function _zsh_tmux_plugin_run() { fi } +# Refresh tmux environment variables. +function _zsh_tmux_plugin_preexec() +{ + local -a tmux_cmd + tmux_cmd=(command tmux) + + eval $($tmux_cmd show-environment -s) +} + # Use the completions for tmux for our function compdef _tmux _zsh_tmux_plugin_run # Alias tmux to our wrapper function. @@ -184,3 +195,9 @@ if [[ -z "$TMUX" && "$ZSH_TMUX_AUTOSTART" == "true" && -z "$INSIDE_EMACS" && -z _zsh_tmux_plugin_run fi fi + +# Automatically refresh tmux environments if tmux is running. +if [[ -n "$TMUX" && "$ZSH_TMUX_AUTOREFRESH" == "true" ]] && tmux ls >/dev/null 2>/dev/null; then + autoload -U add-zsh-hook + add-zsh-hook preexec _zsh_tmux_plugin_preexec +fi From 0c8c7bf2a8efa66b504d17e3b56881925a580b40 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Thu, 20 Mar 2025 20:23:47 +0100 Subject: [PATCH 013/199] docs(tmux): add note to README for #5282 --- plugins/tmux/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/tmux/README.md b/plugins/tmux/README.md index 28ad3558a..53607b8ad 100644 --- a/plugins/tmux/README.md +++ b/plugins/tmux/README.md @@ -31,6 +31,7 @@ The plugin also supports the following: | Variable | Description | | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | +| `ZSH_TMUX_AUTOREFRESH` | Automatically refresh global environments (default: `true`) | | `ZSH_TMUX_AUTOSTART` | Automatically starts tmux (default: `false`) | | `ZSH_TMUX_AUTOSTART_ONCE` | Autostart only if tmux hasn't been started previously (default: `true`) | | `ZSH_TMUX_AUTOCONNECT` | Automatically connect to a previous session if it exits (default: `true`) | From 22ec00d1f62ffe9c5e04d6eefc49be40e082407d Mon Sep 17 00:00:00 2001 From: Gurram Siddarth Reddy <73605274+siddarthreddygsr@users.noreply.github.com> Date: Fri, 21 Mar 2025 00:59:33 +0530 Subject: [PATCH 014/199] chore(install): option case matching (#12881) --- tools/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index e5f126915..5c9b2c18d 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -399,8 +399,8 @@ EOF "$FMT_YELLOW" "$FMT_RESET" read -r opt case $opt in - y*|Y*|"") ;; - n*|N*) echo "Shell change skipped."; return ;; + [Yy]*|"") ;; + [Nn]*) echo "Shell change skipped."; return ;; *) echo "Invalid choice. Shell change skipped."; return ;; esac From 407be8f0368379892f7c0d5a3994bfca74e06969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Thu, 20 Mar 2025 20:28:39 +0100 Subject: [PATCH 015/199] feat(dirhistory): preserve forward directories with `cde` alias (#9328) Closes #11954 Co-authored-by: Jeff Williams --- plugins/dirhistory/README.md | 43 ++++++++++++++++++++++++ plugins/dirhistory/dirhistory.plugin.zsh | 3 +- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/plugins/dirhistory/README.md b/plugins/dirhistory/README.md index ede9b5410..66e3e0469 100644 --- a/plugins/dirhistory/README.md +++ b/plugins/dirhistory/README.md @@ -60,3 +60,46 @@ to `/usr` again. After that, Alt + Down will probably go to `/usr/bin` if `bin` is the first directory in alphabetical order (depends on your `/usr` folder structure). Alt + Up will return to `/usr`, and once more will get you to the root folder (`/`). + +### cde + +This plugin also provides a `cde` alias that allows you to change to a directory without clearing the next directory stack. +This changes the default behavior of `dirhistory`, which is to clear the next directory stack when changing directories. + +For example, if the shell was started, and the following commands were entered: + +```shell +cd ~ +cd /usr +cd share +cd doc + +# +# +``` + +The directory stack would look like this: + +```sh +➜ /usr typeset -pm dirhistory_\* +typeset -ax dirhistory_past=( /home/user /usr ) +typeset -ax dirhistory_future=( /usr/share/doc /usr/share ) +``` + +This means that pressing Alt + Right, you'd go to `/usr/share` and `/usr/share/doc` (the "future" directories). + +If you run `cd /usr/bin`, the "future" directories will be removed, and you won't be able to access them with Alt + Right: + +```sh +➜ /u/bin typeset -pm dirhistory_\* +typeset -ax dirhistory_past=( /home/user /usr ) +typeset -ax dirhistory_future=( /usr/bin ) +``` + +If you instead run `cde /usr/bin`, the "future" directories will be preserved: + +```sh +➜ /u/bin typeset -pm dirhistory_\* +typeset -ax dirhistory_past=( /home/user /usr /usr/bin ) +typeset -ax dirhistory_future=( /usr/share/doc /usr/share ) +``` diff --git a/plugins/dirhistory/dirhistory.plugin.zsh b/plugins/dirhistory/dirhistory.plugin.zsh index 4650666be..706bb6fb2 100644 --- a/plugins/dirhistory/dirhistory.plugin.zsh +++ b/plugins/dirhistory/dirhistory.plugin.zsh @@ -11,9 +11,10 @@ dirhistory_past=($PWD) dirhistory_future=() export dirhistory_past export dirhistory_future - export DIRHISTORY_SIZE=30 +alias cde='dirhistory_cd' + # Pop the last element of dirhistory_past. # Pass the name of the variable to return the result in. # Returns the element if the array was not empty, From ac1335125cb7fe742d825a95bb288ff8a8bfadd9 Mon Sep 17 00:00:00 2001 From: Adil Erchouk Date: Thu, 20 Mar 2025 20:36:07 +0100 Subject: [PATCH 016/199] feat(macos): add support for Ghostty (#12890) --- plugins/macos/README.md | 1 + plugins/macos/macos.plugin.zsh | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/plugins/macos/README.md b/plugins/macos/README.md index 8245e211f..ccc4331e5 100644 --- a/plugins/macos/README.md +++ b/plugins/macos/README.md @@ -13,6 +13,7 @@ plugins=(... macos) - [iTerm2](https://iterm2.com/) - [Hyper](https://hyper.is/) - [Tabby](https://tabby.sh/) +- [Ghostty](https://ghostty.org) ## Commands diff --git a/plugins/macos/macos.plugin.zsh b/plugins/macos/macos.plugin.zsh index b951a289f..6ddf31ecf 100644 --- a/plugins/macos/macos.plugin.zsh +++ b/plugins/macos/macos.plugin.zsh @@ -85,6 +85,12 @@ EOF tell application "System Events" tell process "Tabby" to keystroke "t" using command down end tell +EOF + elif [[ "$the_app" == 'ghostty' ]]; then + osascript >/dev/null <&2 @@ -139,6 +145,12 @@ EOF tell application "System Events" tell process "Tabby" to keystroke "D" using command down end tell +EOF + elif [[ "$the_app" == 'ghostty' ]]; then + osascript >/dev/null <&2 @@ -194,6 +206,12 @@ EOF tell application "System Events" tell process "Tabby" to keystroke "d" using command down end tell +EOF + elif [[ "$the_app" == 'ghostty' ]]; then + osascript >/dev/null <&2 From 899af6328b395f1db2e74d09880a1af435a188ca Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Fri, 21 Mar 2025 12:47:25 +0100 Subject: [PATCH 017/199] fix(bgnotify): detect if sway is running and not just installed (#12989) Co-authored-by: Carlo Sala --- plugins/bgnotify/bgnotify.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/bgnotify/bgnotify.plugin.zsh b/plugins/bgnotify/bgnotify.plugin.zsh index f6ffb6ed5..dca8250be 100644 --- a/plugins/bgnotify/bgnotify.plugin.zsh +++ b/plugins/bgnotify/bgnotify.plugin.zsh @@ -62,7 +62,7 @@ function bgnotify_formatted { function bgnotify_appid { if (( ${+commands[osascript]} )); then osascript -e "tell application id \"$(bgnotify_programid)\" to get the {id, frontmost, id of front window, visible of front window}" 2>/dev/null - elif [[ -n $WAYLAND_DISPLAY ]] && (( ${+commands[swaymsg]} )); then # wayland+sway + elif [[ -n $WAYLAND_DISPLAY ]] && ([[ -n $SWAYSOCK ]] || [[ -n $I3SOCK ]]) && (( ${+commands[swaymsg]} )); then # wayland+sway local app_id=$(bgnotify_find_sway_appid) [[ -n "$app_id" ]] && echo "$app_id" || echo $EPOCHSECONDS elif [[ -z $WAYLAND_DISPLAY ]] && [[ -n $DISPLAY ]] && (( ${+commands[xprop]} )); then From eeaf9f89b0e8b10a02f16cb6cdd93779c28eb2ea Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Mon, 24 Mar 2025 20:52:31 +0100 Subject: [PATCH 018/199] fix(tmux): disable AUTOREFRESH by default (#13034) --- plugins/tmux/README.md | 2 +- plugins/tmux/tmux.plugin.zsh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/tmux/README.md b/plugins/tmux/README.md index 53607b8ad..39c57f846 100644 --- a/plugins/tmux/README.md +++ b/plugins/tmux/README.md @@ -31,7 +31,7 @@ The plugin also supports the following: | Variable | Description | | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -| `ZSH_TMUX_AUTOREFRESH` | Automatically refresh global environments (default: `true`) | +| `ZSH_TMUX_AUTOREFRESH` | Automatically refresh global environments (default: `false`) | | `ZSH_TMUX_AUTOSTART` | Automatically starts tmux (default: `false`) | | `ZSH_TMUX_AUTOSTART_ONCE` | Autostart only if tmux hasn't been started previously (default: `true`) | | `ZSH_TMUX_AUTOCONNECT` | Automatically connect to a previous session if it exits (default: `true`) | diff --git a/plugins/tmux/tmux.plugin.zsh b/plugins/tmux/tmux.plugin.zsh index f6de9166f..d2729ec09 100644 --- a/plugins/tmux/tmux.plugin.zsh +++ b/plugins/tmux/tmux.plugin.zsh @@ -16,7 +16,7 @@ fi # Automatically name the new session based on the basename of PWD : ${ZSH_TMUX_AUTONAME_SESSION:=false} # Automatically pick up tmux environments -: ${ZSH_TMUX_AUTOREFRESH:=true} +: ${ZSH_TMUX_AUTOREFRESH:=false} # Set term to screen or screen-256color based on current terminal support : ${ZSH_TMUX_DETACHED:=false} # Set detached mode From 1de190e4391ce6c2fbe2bdf0025104cf3cb98231 Mon Sep 17 00:00:00 2001 From: Roeniss Moon Date: Wed, 26 Mar 2025 01:56:06 +0900 Subject: [PATCH 019/199] fix(alias-finder): early return on cmd len <2 (#13030) --- plugins/alias-finder/alias-finder.plugin.zsh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/alias-finder/alias-finder.plugin.zsh b/plugins/alias-finder/alias-finder.plugin.zsh index 5fdfbc835..4786431f3 100644 --- a/plugins/alias-finder/alias-finder.plugin.zsh +++ b/plugins/alias-finder/alias-finder.plugin.zsh @@ -36,7 +36,11 @@ alias-finder() { # make filter to find only shorter results than current cmd if [[ $cheaper == true ]]; then cmdLen=$(echo -n "$cmd" | wc -c) - filter="^'{0,1}.{0,$((cmdLen - 1))}=" + if [[ $cmdLen -le 1 ]]; then + return + fi + + filter="^'?.{1,$((cmdLen - 1))}'?=" # some aliases is surrounded by single quotes fi alias | grep -E "$filter" | grep -E "=$finder" From 4efdc90dba95200b010def504c471f0e191fea84 Mon Sep 17 00:00:00 2001 From: Roeniss Moon Date: Wed, 26 Mar 2025 02:03:02 +0900 Subject: [PATCH 020/199] docs(docker): add section for podman's docker wrapper (#13024) --- plugins/docker/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/docker/README.md b/plugins/docker/README.md index 8619125a2..a9f842db2 100644 --- a/plugins/docker/README.md +++ b/plugins/docker/README.md @@ -39,6 +39,10 @@ following setting. See https://github.com/ohmyzsh/ohmyzsh/issues/11789 for more zstyle ':omz:plugins:docker' legacy-completion yes ``` +### For Podman's Docker wrapper users + +If you use Podman's Docker wrapper, you need to enable legacy completion. See above section. + ## Aliases | Alias | Command | Description | From fa396ad7718af77e896472772bffd4a7e9110193 Mon Sep 17 00:00:00 2001 From: Chriss <77172965+realChriss@users.noreply.github.com> Date: Tue, 25 Mar 2025 18:04:39 +0100 Subject: [PATCH 021/199] feat(docker): add alias for stats (#12988) --- plugins/docker/README.md | 1 + plugins/docker/docker.plugin.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/docker/README.md b/plugins/docker/README.md index a9f842db2..0bc24b54a 100644 --- a/plugins/docker/README.md +++ b/plugins/docker/README.md @@ -77,6 +77,7 @@ If you use Podman's Docker wrapper, you need to enable legacy completion. See ab | drs | `docker container restart` | Restart one or more containers | | dsta | `docker stop $(docker ps -q)` | Stop all running containers | | dstp | `docker container stop` | Stop one or more running containers | +| dsts | `docker stats` | Display real-time streaming statistics for containers | | dtop | `docker top` | Display the running processes of a container | | dvi | `docker volume inspect` | Display detailed information about one or more volumes | | dvls | `docker volume ls` | List all the volumes known to docker | diff --git a/plugins/docker/docker.plugin.zsh b/plugins/docker/docker.plugin.zsh index 16db77df6..5268f6cd6 100644 --- a/plugins/docker/docker.plugin.zsh +++ b/plugins/docker/docker.plugin.zsh @@ -28,6 +28,7 @@ alias dst='docker container start' alias drs='docker container restart' alias dsta='docker stop $(docker ps -q)' alias dstp='docker container stop' +alias dsts='docker stats' alias dtop='docker top' alias dvi='docker volume inspect' alias dvls='docker volume ls' From 506cedb7ca1f4ba91a0ad102e8395d194c0b1a59 Mon Sep 17 00:00:00 2001 From: Roeniss Moon Date: Sat, 29 Mar 2025 18:38:29 +0900 Subject: [PATCH 022/199] chore(alias-finder): code style (#13038) --- plugins/alias-finder/alias-finder.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/alias-finder/alias-finder.plugin.zsh b/plugins/alias-finder/alias-finder.plugin.zsh index 4786431f3..2351a439e 100644 --- a/plugins/alias-finder/alias-finder.plugin.zsh +++ b/plugins/alias-finder/alias-finder.plugin.zsh @@ -47,7 +47,7 @@ alias-finder() { if [[ $exact == true ]]; then break # because exact case is only one - elif [[ $longer = true ]]; then + elif [[ $longer == true ]]; then break # because above grep command already found every longer aliases during first cycle fi From 346c09d469c9d2681399b0938e9af883ebdae829 Mon Sep 17 00:00:00 2001 From: Mikrz Date: Sat, 29 Mar 2025 05:40:25 -0400 Subject: [PATCH 023/199] fix(dnf): function name typo (#13040) --- plugins/dnf/_dnf5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/dnf/_dnf5 b/plugins/dnf/_dnf5 index e194dd5a7..9cbf451a8 100644 --- a/plugins/dnf/_dnf5 +++ b/plugins/dnf/_dnf5 @@ -38,7 +38,7 @@ _dnf5_rpm_files() { _dnf5_packages_or_rpms() { if [[ "$words[CURRENT]" = (*/*|\~*) ]]; then # if looks like a path name - _dnf_rpm_files + _dnf5_rpm_files else _dnf5_packages "$@" fi From 2f3a141f65ba082e1eb42ea3123fc2bd978c0c83 Mon Sep 17 00:00:00 2001 From: Kartik Vashistha Date: Sat, 29 Mar 2025 02:42:46 -0700 Subject: [PATCH 024/199] docs(asdf): match README with 0.16 (#13026) Co-authored-by: Carlo Sala --- plugins/asdf/README.md | 49 ++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/plugins/asdf/README.md b/plugins/asdf/README.md index 4af69a75c..e8ff2d740 100644 --- a/plugins/asdf/README.md +++ b/plugins/asdf/README.md @@ -1,32 +1,39 @@ -## asdf +# asdf Adds integration with [asdf](https://github.com/asdf-vm/asdf), the extendable version manager, with support for Ruby, Node.js, Elixir, Erlang and more. -### Installation +## Installation -1. [Download asdf](https://asdf-vm.com/guide/getting-started.html#_2-download-asdf) by running the following: - - ``` - git clone https://github.com/asdf-vm/asdf.git ~/.asdf - ``` - -2. [Enable asdf](https://asdf-vm.com/guide/getting-started.html#_3-install-asdf) by adding it to your `plugins` definition in `~/.zshrc`. - - ``` - plugins=(asdf) - ``` - -### Usage - -See the [asdf documentation](https://asdf-vm.com/guide/getting-started.html#_4-install-a-plugin) for information on how to use asdf: +1. [Install](https://asdf-vm.com/guide/getting-started.html#_1-install-asdf) asdf and ensure that's it's discoverable on `$PATH`; +2. Enable it by adding it to your `plugins` definition in `~/.zshrc`: +```sh +plugins=(asdf) ``` -asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git + +## Usage + +Refer to the [asdf plugin documentation](https://asdf-vm.com/guide/getting-started.html#_4-install-a-plugin) for information on how to add a plugin and install the many runtime versions for it. + +Example for installing the nodejs plugin and the many runtimes for it: + +```sh +# Add plugin to asdf +asdf plugin add nodejs + +# Install the latest available nodejs runtime version asdf install nodejs latest -asdf global nodejs latest -asdf local nodejs latest + +# Install nodejs v16.5.0 runtime version +asdf install nodejs 16.5.0 + +# Set the latest version in .tools-version in the current working directory +asdf set nodejs latest + +# Set a version globally that will apply to all directories under $HOME +asdf set -u nodejs 16.5.0 ``` -### Maintainer +## Maintainer - [@RobLoach](https://github.com/RobLoach) From a78d006faa022a5104b542d7dec5a3439e72046e Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Sat, 29 Mar 2025 10:47:03 +0100 Subject: [PATCH 025/199] fix(asdf)!: remove legacy <0.16 integration `asdf` plugin only supports asdf 0.16 and ahead from now on. --- plugins/asdf/asdf.plugin.zsh | 55 +++++++----------------------------- 1 file changed, 10 insertions(+), 45 deletions(-) diff --git a/plugins/asdf/asdf.plugin.zsh b/plugins/asdf/asdf.plugin.zsh index 4367e8ca3..318267dcb 100644 --- a/plugins/asdf/asdf.plugin.zsh +++ b/plugins/asdf/asdf.plugin.zsh @@ -1,48 +1,13 @@ -if (( $+commands[asdf] )); then - export ASDF_DATA_DIR="${ASDF_DATA_DIR:-$HOME/.asdf}" - path=("$ASDF_DATA_DIR/shims" $path) +(( ! $+commands[asdf] )) && return - # If the completion file doesn't exist yet, we need to autoload it and - # bind it to `asdf`. Otherwise, compinit will have already done that. - if [[ ! -f "$ZSH_CACHE_DIR/completions/_asdf" ]]; then - typeset -g -A _comps - autoload -Uz _asdf - _comps[asdf]=_asdf - fi - asdf completion zsh >| "$ZSH_CACHE_DIR/completions/_asdf" &| +export ASDF_DATA_DIR="${ASDF_DATA_DIR:-$HOME/.asdf}" +path=("$ASDF_DATA_DIR/shims" $path) - return -fi - -# TODO:(2025-02-12): remove deprecated asdf <0.16 code - -# Find where asdf should be installed -ASDF_DIR="${ASDF_DIR:-$HOME/.asdf}" -ASDF_COMPLETIONS="$ASDF_DIR/completions" - -if [[ ! -f "$ASDF_DIR/asdf.sh" || ! -f "$ASDF_COMPLETIONS/_asdf" ]]; then - # If not found, check for archlinux/AUR package (/opt/asdf-vm/) - if [[ -f "/opt/asdf-vm/asdf.sh" ]]; then - ASDF_DIR="/opt/asdf-vm" - ASDF_COMPLETIONS="$ASDF_DIR" - # If not found, check for Homebrew package - elif (( $+commands[brew] )); then - _ASDF_PREFIX="$(brew --prefix asdf)" - ASDF_DIR="${_ASDF_PREFIX}/libexec" - ASDF_COMPLETIONS="${_ASDF_PREFIX}/share/zsh/site-functions" - unset _ASDF_PREFIX - else - return - fi -fi - -# Load command -if [[ -f "$ASDF_DIR/asdf.sh" ]]; then - source "$ASDF_DIR/asdf.sh" - # Load completions - if [[ -f "$ASDF_COMPLETIONS/_asdf" ]]; then - fpath+=("$ASDF_COMPLETIONS") - autoload -Uz _asdf - compdef _asdf asdf # compdef is already loaded before loading plugins - fi +# If the completion file doesn't exist yet, we need to autoload it and +# bind it to `asdf`. Otherwise, compinit will have already done that. +if [[ ! -f "$ZSH_CACHE_DIR/completions/_asdf" ]]; then + typeset -g -A _comps + autoload -Uz _asdf + _comps[asdf]=_asdf fi +asdf completion zsh >| "$ZSH_CACHE_DIR/completions/_asdf" &| From f81259fb344685e2dc8b67f8ad8764ccd4e8502e Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Sat, 29 Mar 2025 12:55:20 +0100 Subject: [PATCH 026/199] fix(cli): support `noexec` environments (#13042) Closes #13032 --- lib/cli.zsh | 2 +- tools/upgrade.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/cli.zsh b/lib/cli.zsh index aed86e758..3b6308313 100644 --- a/lib/cli.zsh +++ b/lib/cli.zsh @@ -193,7 +193,7 @@ EOF return 1 fi - "$ZSH/tools/changelog.sh" "$version" "${2:-}" "$format" + ZSH="$ZSH" command zsh -f "$ZSH/tools/changelog.sh" "$version" "${2:-}" "$format" } function _omz::plugin { diff --git a/tools/upgrade.sh b/tools/upgrade.sh index c586610c4..1aa3d8af4 100755 --- a/tools/upgrade.sh +++ b/tools/upgrade.sh @@ -254,7 +254,7 @@ if LANG= git pull --quiet --rebase $remote $branch; then # Print changelog to the terminal if [[ $interactive == true && $verbose_mode == default ]]; then - "$ZSH/tools/changelog.sh" HEAD "$last_commit" + ZSH="$ZSH" command zsh -f "$ZSH/tools/changelog.sh" HEAD "$last_commit" fi if [[ $verbose_mode != silent ]]; then From 750d3ac4b493dca13ef0ced55fa6a2cd02dc7ee8 Mon Sep 17 00:00:00 2001 From: Sidar <65621366+Maple38@users.noreply.github.com> Date: Thu, 3 Apr 2025 17:38:51 +0300 Subject: [PATCH 027/199] fix(macos): use `command man` instead of `man` (#13046) --- plugins/macos/macos.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/macos/macos.plugin.zsh b/plugins/macos/macos.plugin.zsh index 6ddf31ecf..4d73d22c3 100644 --- a/plugins/macos/macos.plugin.zsh +++ b/plugins/macos/macos.plugin.zsh @@ -271,7 +271,7 @@ function man-preview() { [[ $# -eq 0 ]] && >&2 echo "Usage: $0 command1 [command2 ...]" && return 1 local page - for page in "${(@f)"$(man -w $@)"}"; do + for page in "${(@f)"$(command man -w $@)"}"; do command mandoc -Tpdf $page | open -f -a Preview done } From a84a0332a822a78ddf3f66d0e1ed3990d4badd12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Apr 2025 23:11:55 +0200 Subject: [PATCH 028/199] chore(deps): bump urllib3 in /.github/workflows/dependencies (#13065) Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.3.0 to 2.4.0. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/2.3.0...2.4.0) --- updated-dependencies: - dependency-name: urllib3 dependency-version: 2.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index 910db7bac..f2044a5f5 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -4,4 +4,4 @@ idna==3.10 PyYAML==6.0.2 requests==2.32.3 semver==3.0.4 -urllib3==2.3.0 +urllib3==2.4.0 From c1e5ff31693f391a0bbb30b12c8e7bc1cc976b7b Mon Sep 17 00:00:00 2001 From: swivelmargarita <55573157+swivelmargarita@users.noreply.github.com> Date: Thu, 17 Apr 2025 19:57:53 +0500 Subject: [PATCH 029/199] fix(branch): handle branches with `/` properly (#13063) Co-authored-by: Takha Polat --- plugins/branch/branch.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/branch/branch.plugin.zsh b/plugins/branch/branch.plugin.zsh index dd5871fdc..c24f9098e 100644 --- a/plugins/branch/branch.plugin.zsh +++ b/plugins/branch/branch.plugin.zsh @@ -8,7 +8,7 @@ function branch_prompt_info() { while [[ "$dir" != '/' ]]; do # Found .git directory if [[ -d "${dir}/.git" ]]; then - branch="${"$(<"${dir}/.git/HEAD")"##*/}" + branch="${"$(<"${dir}/.git/HEAD")"##ref: refs/heads/}" echo '±' "${branch:gs/%/%%}" return fi From a7426f0b38817bf7cd7000a5d378b7cfb059884f Mon Sep 17 00:00:00 2001 From: "Kat R." Date: Sat, 19 Apr 2025 10:49:16 -0700 Subject: [PATCH 030/199] fix(git-prompt): use `--git-common-dir` to load stash count (#13072) --- plugins/git-prompt/gitstatus.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/git-prompt/gitstatus.py b/plugins/git-prompt/gitstatus.py index 94774d828..7cd8f54e2 100644 --- a/plugins/git-prompt/gitstatus.py +++ b/plugins/git-prompt/gitstatus.py @@ -23,9 +23,10 @@ def get_tagname_or_hash(): return hash_ return None -# Re-use method from https://github.com/magicmonty/bash-git-prompt to get stashs count +# Re-use method from https://github.com/magicmonty/bash-git-prompt to get stash count +# Use `--git-common-dir` to avoid problems with git worktrees, which don't have individual stashes def get_stash(): - cmd = Popen(['git', 'rev-parse', '--git-dir'], stdout=PIPE, stderr=PIPE) + cmd = Popen(['git', 'rev-parse', '--git-common-dir'], stdout=PIPE, stderr=PIPE) so, se = cmd.communicate() stash_file = '%s%s' % (so.decode('utf-8').rstrip(), '/logs/refs/stash') @@ -35,7 +36,6 @@ def get_stash(): except IOError: return 0 - # `git status --porcelain --branch` can collect all information # branch, remote_branch, untracked, staged, changed, conflicts, ahead, behind po = Popen(['git', 'status', '--porcelain', '--branch'], env=dict(os.environ, LANG="C"), stdout=PIPE, stderr=PIPE) From afbbdd6099085fbc6a3d06cc44f90b566302bd43 Mon Sep 17 00:00:00 2001 From: Nicholas Wilson Date: Sat, 19 Apr 2025 12:58:05 -0500 Subject: [PATCH 031/199] docs: fix typos (#13061) --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f7455228a..7f57ed55e 100644 --- a/README.md +++ b/README.md @@ -163,7 +163,7 @@ adds any) and extra goodies that are included in that particular plugin. ### Themes -We'll admit it. Early in the Oh My Zsh world, we may have gotten a bit too theme happy. We have over one +We'll admit it. Early in the Oh My Zsh world, we may have gotten a bit too theme-happy. We have over one hundred and fifty themes now bundled. Most of them have [screenshots](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes) on the wiki (We are working on updating this!). Check them out! @@ -218,7 +218,7 @@ terminal window. ZSH_THEME="random" # (...please let it be pie... please be some pie..) ``` -And if you want to pick random theme from a list of your favorite themes: +And if you want to pick a random theme from a list of your favorite themes: ```sh ZSH_THEME_RANDOM_CANDIDATES=( @@ -426,7 +426,7 @@ turn it off by setting the following in your .zshrc file, before Oh My Zsh is so zstyle ':omz:alpha:lib:git' async-prompt no ``` -If your problem is that the git prompt just stopped appearing, you can try to force it setting the following +If your problem is that the git prompt just stopped appearing, you can try to force it by setting the following configuration before `oh-my-zsh.sh` is sourced. If it still does not work, please open an issue with your case. From 95a0ece8d39a7797850ef7a4cc8849b6e1158706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20A=2E=20Aranda=20Guti=C3=A9rrez?= Date: Sat, 19 Apr 2025 20:19:23 +0200 Subject: [PATCH 032/199] fix(agnoster): respect bg / fg user envs (#12897) Co-authored-by: Carlo Sala --- themes/agnoster.zsh-theme | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme index adeffe8c2..21c9cf7d5 100644 --- a/themes/agnoster.zsh-theme +++ b/themes/agnoster.zsh-theme @@ -36,12 +36,12 @@ CURRENT_BG='NONE' case ${SOLARIZED_THEME:-dark} in light) - CURRENT_FG='white' - CURRENT_DEFAULT_FG='white' + CURRENT_FG=${CURRENT_FG:-'white'} + CURRENT_DEFAULT_FG=${CURRENT_DEFAULT_FG:-'white'} ;; *) - CURRENT_FG='black' - CURRENT_DEFAULT_FG='default' + CURRENT_FG=${CURRENT_FG:-'black'} + CURRENT_DEFAULT_FG=${CURRENT_DEFAULT_FG:-'default'} ;; esac From b92874c716776bc8a19773d12354b77d08349d7b Mon Sep 17 00:00:00 2001 From: deimosian <616215+deimosian@users.noreply.github.com> Date: Sat, 19 Apr 2025 14:44:45 -0400 Subject: [PATCH 033/199] fix(archlinux): properly check keyring version (#12979) --- plugins/archlinux/archlinux.plugin.zsh | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/plugins/archlinux/archlinux.plugin.zsh b/plugins/archlinux/archlinux.plugin.zsh index e20a31156..7abd7c2f6 100644 --- a/plugins/archlinux/archlinux.plugin.zsh +++ b/plugins/archlinux/archlinux.plugin.zsh @@ -178,26 +178,27 @@ fi # Check Arch Linux PGP Keyring before System Upgrade to prevent failure. function upgrade() { + sudo pacman -Sy echo ":: Checking Arch Linux PGP Keyring..." local installedver="$(LANG= sudo pacman -Qi archlinux-keyring | grep -Po '(?<=Version : ).*')" local currentver="$(LANG= sudo pacman -Si archlinux-keyring | grep -Po '(?<=Version : ).*')" if [ $installedver != $currentver ]; then echo " Arch Linux PGP Keyring is out of date." echo " Updating before full system upgrade." - sudo pacman -Sy --needed --noconfirm archlinux-keyring + sudo pacman -S --needed --noconfirm archlinux-keyring else echo " Arch Linux PGP Keyring is up to date." echo " Proceeding with full system upgrade." fi if (( $+commands[yay] )); then - yay -Syu + yay -Su elif (( $+commands[trizen] )); then - trizen -Syu + trizen -Su elif (( $+commands[pacaur] )); then - pacaur -Syu + pacaur -Su elif (( $+commands[aura] )); then - sudo aura -Syu + sudo aura -Su else - sudo pacman -Syu + sudo pacman -Su fi } From 9957e4e8be9d63b9c42673f0eb86fa2dea845b32 Mon Sep 17 00:00:00 2001 From: Roeniss Moon Date: Sun, 20 Apr 2025 03:48:34 +0900 Subject: [PATCH 034/199] feat(git): add gcfu alias for `commit --fixup` (#13027) --- plugins/git/README.md | 1 + plugins/git/git.plugin.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/git/README.md b/plugins/git/README.md index bcadc4713..edddc8cd8 100644 --- a/plugins/git/README.md +++ b/plugins/git/README.md @@ -79,6 +79,7 @@ plugins=(... git) | `gcss` | `git commit -S -s` | | `gcssm` | `git commit -S -s -m` | | `gcf` | `git config --list` | +| `gcfu` | `git commit --fixup` | | `gdct` | `git describe --tags $(git rev-list --tags --max-count=1)` | | `gd` | `git diff` | | `gdca` | `git diff --cached` | diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index f34c0726b..1d043da35 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -200,6 +200,7 @@ alias gc!='git commit --verbose --amend' alias gcn='git commit --verbose --no-edit' alias gcn!='git commit --verbose --no-edit --amend' alias gcf='git config --list' +alias gcfu='git commit --fixup' alias gdct='git describe --tags $(git rev-list --tags --max-count=1)' alias gd='git diff' alias gdca='git diff --cached' From 92bad89f8a9141fcdc0b682941ee46729b6e4cb6 Mon Sep 17 00:00:00 2001 From: Arthur <82575487+arthur-mountain@users.noreply.github.com> Date: Sun, 20 Apr 2025 02:55:23 +0800 Subject: [PATCH 035/199] docs(asdf): update usage example (#13055) --- plugins/asdf/README.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/plugins/asdf/README.md b/plugins/asdf/README.md index e8ff2d740..69db6930a 100644 --- a/plugins/asdf/README.md +++ b/plugins/asdf/README.md @@ -19,21 +19,30 @@ Example for installing the nodejs plugin and the many runtimes for it: ```sh # Add plugin to asdf -asdf plugin add nodejs +asdf plugin add nodejs -# Install the latest available nodejs runtime version +# Install the latest available version asdf install nodejs latest -# Install nodejs v16.5.0 runtime version +# Uninstall the latest version +asdf uninstall nodejs latest + +# Install a specific version asdf install nodejs 16.5.0 -# Set the latest version in .tools-version in the current working directory +# Set the latest version in .tool-versions of the `current directory` asdf set nodejs latest -# Set a version globally that will apply to all directories under $HOME -asdf set -u nodejs 16.5.0 +# Set a specific version in the `parent directory` +asdf set -p nodejs 16.5.0 # -p is shorthand for --parent + +# Set a global version under `$HOME` +asdf set -u nodejs 16.5.0 # -u is shorthand for --home ``` +For more commands, run `asdf help` or refer to the +[asdf CLI documentation](https://asdf-vm.com/manage/commands.html#all-commands). + ## Maintainer - [@RobLoach](https://github.com/RobLoach) From de1ca65dcaebd19f5ca6626616bb79b529362458 Mon Sep 17 00:00:00 2001 From: Adam Page Date: Sat, 19 Apr 2025 15:08:03 -0400 Subject: [PATCH 036/199] feat(procs): support completion for `procs<0.14` (#13053) Co-authored-by: Carlo Sala --- plugins/procs/procs.plugin.zsh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/plugins/procs/procs.plugin.zsh b/plugins/procs/procs.plugin.zsh index 332985bf9..8b15f1d5d 100644 --- a/plugins/procs/procs.plugin.zsh +++ b/plugins/procs/procs.plugin.zsh @@ -3,11 +3,19 @@ if (( ! $+commands[procs] )); then fi # If the completion file doesn't exist yet, we need to autoload it and -# bind it to `minikube`. Otherwise, compinit will have already done that. +# bind it to `procs`. Otherwise, compinit will have already done that. if [[ ! -f "$ZSH_CACHE_DIR/completions/_procs" ]]; then typeset -g -A _comps autoload -Uz _procs _comps[procs]=_procs fi -procs --gen-completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs" &| +{ + autoload -Uz is-at-least + local _version=$(procs --version) + if is-at-least "0.14" "${_version#procs }"; then + procs --gen-completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs" + else + procs --completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs" + fi +} &| From 959b6cf5eed78f108dc6e0f46b53816f5168dd3a Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Thu, 24 Apr 2025 15:42:26 +0200 Subject: [PATCH 037/199] fix(emacs): do not emit ANSI escape codes in vterm Closes #13067 --- plugins/emacs/emacs.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/emacs/emacs.plugin.zsh b/plugins/emacs/emacs.plugin.zsh index 5aa621803..3ed6cee19 100644 --- a/plugins/emacs/emacs.plugin.zsh +++ b/plugins/emacs/emacs.plugin.zsh @@ -35,7 +35,7 @@ alias eeval="$EMACS_PLUGIN_LAUNCHER --eval" alias eframe='emacsclient --alternate-editor="" --create-frame' # Emacs ANSI Term tracking -if [[ -n "$INSIDE_EMACS" ]]; then +if [[ -n "$INSIDE_EMACS" ]] && [[ "$INSIDE_EMACS" != "vterm" ]]; then chpwd_emacs() { print -P "\033AnSiTc %d"; } print -P "\033AnSiTc %d" # Track current working directory print -P "\033AnSiTu %n" # Track username From 44913a1f16424f21b5989a0dd7d2c95d02047cec Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Sun, 27 Apr 2025 10:25:02 +0200 Subject: [PATCH 038/199] feat(wd): update to v0.10.0 (#13093) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/wd/_wd.sh | 4 ++++ plugins/wd/wd.sh | 24 ++++++++++++++++++++++-- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 46e7727b8..70f3d03da 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -30,7 +30,7 @@ dependencies: plugins/wd: repo: mfaerevaag/wd branch: master - version: tag:v0.9.3 + version: tag:v0.10.0 precopy: | set -e rm -r test diff --git a/plugins/wd/_wd.sh b/plugins/wd/_wd.sh index 46b032f78..7c416086d 100644 --- a/plugins/wd/_wd.sh +++ b/plugins/wd/_wd.sh @@ -37,6 +37,7 @@ function _wd() { 'rm:Removes the given warp point' 'list:Outputs all stored warp points' 'ls:Show files from given warp point' + 'open:Open warp point in the default file explorer' 'path:Show path to given warp point' 'show:Outputs all warp points that point to the current directory or shows a specific target directory for a point' 'help:Show this extremely helpful text' @@ -73,6 +74,9 @@ function _wd() { ls) _describe -t points "Warp points" warp_points && ret=0 ;; + open) + _describe -t points "Warp points" warp_points && ret=0 + ;; path) _describe -t points "Warp points" warp_points && ret=0 ;; diff --git a/plugins/wd/wd.sh b/plugins/wd/wd.sh index f8b27828f..f7a22ff7d 100755 --- a/plugins/wd/wd.sh +++ b/plugins/wd/wd.sh @@ -8,7 +8,7 @@ # @github.com/mfaerevaag/wd # version -readonly WD_VERSION=0.9.3 +readonly WD_VERSION=0.10.0 # colors readonly WD_BLUE="\033[96m" @@ -86,6 +86,7 @@ Commands: show Print warp points to current directory list Print all stored warp points ls Show files from given warp point (ls) + open Open the warp point in the default file explorer (open / xdg-open) path Show the path to given warp point (pwd) clean Remove points warping to nonexistent directories (will prompt unless --force is used) @@ -377,6 +378,21 @@ wd_ls() ls "${dir/#\~/$HOME}" } +wd_open() +{ + wd_getdir "$1" + if command -v open >/dev/null 2>&1; then + # MacOS, Ubuntu (alias) + open "${dir/#\~/$HOME}" + elif command -v xdg-open >/dev/null 2>&1; then + # Most Linux desktops + xdg-open "${dir/#\~/$HOME}" + else + echo "No known file opener found (need 'open' or 'xdg-open')." >&2 + exit 1 + fi +} + wd_path() { wd_getdir "$1" @@ -521,7 +537,7 @@ do done < "$wd_config_file" # get opts -args=$(getopt -o a:r:c:lhs -l add:,rm:,clean,list,ls:,path:,help,show -- $*) +args=$(getopt -o a:r:c:lhs -l add:,rm:,clean,list,ls:,open:,path:,help,show -- $*) # check if no arguments were given, and that version is not set if [[ ($? -ne 0 || $#* -eq 0) && -z $wd_print_version ]] @@ -571,6 +587,10 @@ else wd_ls "$2" break ;; + "-o"|"--open"|"open") + wd_open "$2" + break + ;; "-p"|"--path"|"path") wd_path "$2" break From 476a7fc89e38a0fdc483ec6452394f2f2e0413bf Mon Sep 17 00:00:00 2001 From: Michael Elliot Date: Sun, 27 Apr 2025 16:26:11 +0800 Subject: [PATCH 039/199] chore: fix typo (#13089) --- oh-my-zsh.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh index b1032841c..2e885219c 100644 --- a/oh-my-zsh.sh +++ b/oh-my-zsh.sh @@ -192,7 +192,7 @@ _omz_source() { fi } -# Load all of the lib files in ~/oh-my-zsh/lib that end in .zsh +# Load all of the lib files in ~/.oh-my-zsh/lib that end in .zsh # TIP: Add files you don't want in git to .gitignore for lib_file ("$ZSH"/lib/*.zsh); do _omz_source "lib/${lib_file:t}" From 137bfbbfd1e39897f02ca47e9f010b0d81cc15ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 27 Apr 2025 14:55:23 +0200 Subject: [PATCH 040/199] chore(deps): bump certifi in /.github/workflows/dependencies (#13094) Bumps [certifi](https://github.com/certifi/python-certifi) from 2025.1.31 to 2025.4.26. - [Commits](https://github.com/certifi/python-certifi/compare/2025.01.31...2025.04.26) --- updated-dependencies: - dependency-name: certifi dependency-version: 2025.4.26 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index f2044a5f5..63eadd07d 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,4 +1,4 @@ -certifi==2025.1.31 +certifi==2025.4.26 charset-normalizer==3.4.1 idna==3.10 PyYAML==6.0.2 From 2ee4f9808ff50bf35f36b28657933afd6d80e268 Mon Sep 17 00:00:00 2001 From: Anand Buddhdev Date: Tue, 29 Apr 2025 10:34:33 +0200 Subject: [PATCH 041/199] docs(python): fix typo (#13096) --- plugins/python/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/python/README.md b/plugins/python/README.md index 490cf88f1..ca424ea55 100644 --- a/plugins/python/README.md +++ b/plugins/python/README.md @@ -34,7 +34,7 @@ virtual environments: `/bin/activate`, and automatically deactivate it when navigating out of it (keeps venv activated in subdirectories). - To enable the feature, set `PYTHON_AUTO_VRUN=true` before sourcing oh-my-zsh. - - The plugin activates the first existing virtual environment, in order, appearing in `$PYTON_VENV_NAMES`. + - The plugin activates the first existing virtual environment, in order, appearing in `$PYTHON_VENV_NAMES`. The default virtual environment name is `venv`. To use a different name, set `PYTHON_VENV_NAME=`. For example: `PYTHON_VENV_NAME=".venv"` From f6a7bbf81a18d30f75bad72de3398d0f55c8792b Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Tue, 29 Apr 2025 10:42:26 +0200 Subject: [PATCH 042/199] fix(debian): avoid `aptitude` hardcoding Closes #13095 --- plugins/debian/debian.plugin.zsh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/debian/debian.plugin.zsh b/plugins/debian/debian.plugin.zsh index 5ef4cfb67..980440c0f 100644 --- a/plugins/debian/debian.plugin.zsh +++ b/plugins/debian/debian.plugin.zsh @@ -83,9 +83,9 @@ else } alias ac="su -ls '$apt_pref clean' root" alias ad="su -lc '$apt_pref update' root" - alias adg="su -lc '$apt_pref update && aptitude $apt_upgr' root" - alias adu="su -lc '$apt_pref update && aptitude dist-upgrade' root" - alias afu="su -lc '$apt-file update'" + alias adg="su -lc '$apt_pref update && $apt_pref $apt_upgr' root" + alias adu="su -lc '$apt_pref update && $apt_pref dist-upgrade' root" + alias afu="su -lc 'apt-file update'" alias au="su -lc '$apt_pref $apt_upgr' root" function ai() { cmd="su -lc '$apt_pref install $@' root" From 8648cd640b428bdd7dea65886c2671ef1e8ffe32 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 May 2025 17:22:51 +0200 Subject: [PATCH 043/199] chore(deps): bump charset-normalizer in /.github/workflows/dependencies (#13100) Bumps [charset-normalizer](https://github.com/jawah/charset_normalizer) from 3.4.1 to 3.4.2. - [Release notes](https://github.com/jawah/charset_normalizer/releases) - [Changelog](https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md) - [Commits](https://github.com/jawah/charset_normalizer/compare/3.4.1...3.4.2) --- updated-dependencies: - dependency-name: charset-normalizer dependency-version: 3.4.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index 63eadd07d..e73c1b5ca 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,5 +1,5 @@ certifi==2025.4.26 -charset-normalizer==3.4.1 +charset-normalizer==3.4.2 idna==3.10 PyYAML==6.0.2 requests==2.32.3 From 51d0e0aa1de9c7f96012b9a0feda6509ed2a025b Mon Sep 17 00:00:00 2001 From: Hanashiko <129686115+Hanashiko@users.noreply.github.com> Date: Mon, 5 May 2025 14:00:29 +0300 Subject: [PATCH 044/199] docs(pip): add explanation for aliases (#13103) --- plugins/pip/README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/plugins/pip/README.md b/plugins/pip/README.md index 70d40c79f..9d1daca9f 100644 --- a/plugins/pip/README.md +++ b/plugins/pip/README.md @@ -20,17 +20,17 @@ the next time you autocomplete `pip install`. ## Aliases -| Alias | Description | -| :------- | :-------------------------------------------- | -| pipi | Install packages | -| pipig | Install package from GitHub repository | -| pipigb | Install package from GitHub branch | -| pipigp | Install package from GitHub pull request | -| pipu | Upgrade packages | -| pipun | Uninstall packages | -| pipgi | Grep through installed packages | -| piplo | List outdated packages | -| pipreq | Create requirements file | -| pipir | Install packages from `requirements.txt` file | -| pipupall | Update all installed packages | -| pipunall | Uninstall all installed packages | +| Alias | Command | Description | +| :--------|:----------------------------------------------------------------------------------|:--------------------------------------------- | +| pipi | `pip install` | Install packages | +| pipig | `pip install "git+https://github.com/user/repo.git"` | Install package from GitHub repository | +| pipigb | `pip install "git+https://github.com/user/repo.git@branch"` | Install package from GitHub branch | +| pipigp | `pip install "git+https://github.com/user/repo.git@refs/pull/PR_NUMBER/head"` | Install package from GitHub pull request | +| pipu | `pip install --upgrade` | Upgrade packages | +| pipun | `pip uninstall` | Uninstall packages | +| pipgi | `pip freeze \| grep` | Grep through installed packages | +| piplo | `pip list --outdated` | List outdated packages | +| pipreq | `pip freeze > requirements.txt` | Create requirements file | +| pipir | `pip install -r requirements.txt` | Install packages from `requirements.txt` file | +| pipupall | `pip list --outdated \| awk 'NR > 2 { print $1 }' \| xargs pip install --upgrade` | Update all installed packages | +| pipunall | `pip list --format freeze \| cut -d= -f1 \| xargs pip uninstall` | Uninstall all installed packages | From 62afbdebb96bf91c044a92b75d86f85a67da67a7 Mon Sep 17 00:00:00 2001 From: Cyril Plisko Date: Tue, 6 May 2025 18:27:04 +0300 Subject: [PATCH 045/199] feat(jj): add `jjgfa` alias (#13105) --- plugins/jj/README.md | 1 + plugins/jj/jj.plugin.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/jj/README.md b/plugins/jj/README.md index cd43ed11b..541b8f907 100644 --- a/plugins/jj/README.md +++ b/plugins/jj/README.md @@ -20,6 +20,7 @@ plugins=(... jj) | jje | `jj edit` | | jjgcl | `jj git clone` | | jjgf | `jj git fetch` | +| jjgfa | `jj git fetch --all-remotes` | | jjgp | `jj git push` | | jjl | `jj log` | | jjla | `jj log -r "all()"` | diff --git a/plugins/jj/jj.plugin.zsh b/plugins/jj/jj.plugin.zsh index 06c04958b..825460517 100644 --- a/plugins/jj/jj.plugin.zsh +++ b/plugins/jj/jj.plugin.zsh @@ -42,6 +42,7 @@ alias jjds='jj desc' alias jje='jj edit' alias jjgcl='jj git clone' alias jjgf='jj git fetch' +alias jjgfa='jj git fetch --all-remotes' alias jjgp='jj git push' alias jjl='jj log' alias jjla='jj log -r "all()"' From 3f8ea81b89cda583acea098c9b7353c295619d4d Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Sun, 11 May 2025 11:06:03 +0200 Subject: [PATCH 046/199] feat(z): update to cf9225fe (#13115) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/z/LICENSE | 2 +- plugins/z/z.plugin.zsh | 13 +++++++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 70f3d03da..23168b91a 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -38,7 +38,7 @@ dependencies: plugins/z: branch: master repo: agkozak/zsh-z - version: dd94ef04acc41748ba171eb219971cb455e0040b + version: cf9225feebfae55e557e103e95ce20eca5eff270 precopy: | set -e test -e README.md && mv -f README.md MANUAL.md diff --git a/plugins/z/LICENSE b/plugins/z/LICENSE index 162cba8d1..b36aeb408 100644 --- a/plugins/z/LICENSE +++ b/plugins/z/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2018-2024 Alexandros Kozak +Copyright (c) 2018-2025 Alexandros Kozak Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/plugins/z/z.plugin.zsh b/plugins/z/z.plugin.zsh index bf15b01de..39b832292 100644 --- a/plugins/z/z.plugin.zsh +++ b/plugins/z/z.plugin.zsh @@ -4,7 +4,7 @@ # # https://github.com/agkozak/zsh-z # -# Copyright (c) 2018-2024 Alexandros Kozak +# Copyright (c) 2018-2025 Alexandros Kozak # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -294,7 +294,16 @@ zshz() { owner=${ZSHZ_OWNER:-${_Z_OWNER}} if (( ZSHZ[USE_FLOCK] )); then - ${ZSHZ[MV]} "$tempfile" "$datafile" 2> /dev/null || ${ZSHZ[RM]} -f "$tempfile" + # An unsual case: if inside Docker container where datafile could be bind + # mounted + if [[ -r '/proc/1/cgroup' && "$(< '/proc/1/cgroup')" == *docker* ]]; then + print "$(< "$tempfile")" > "$datafile" 2> /dev/null + ${ZSHZ[RM]} -f "$tempfile" + # All other cases + else + ${ZSHZ[MV]} "$tempfile" "$datafile" 2> /dev/null || + ${ZSHZ[RM]} -f "$tempfile" + fi if [[ -n $owner ]]; then ${ZSHZ[CHOWN]} ${owner}:"$(id -ng ${owner})" "$datafile" From c34c1da736f4f162206e1153e66850788f3e2e16 Mon Sep 17 00:00:00 2001 From: Lorenzo Bettini Date: Mon, 12 May 2025 09:56:26 +0200 Subject: [PATCH 047/199] docs(vi-mode): explaination for text objects (#13116) --- plugins/vi-mode/README.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/plugins/vi-mode/README.md b/plugins/vi-mode/README.md index 6e781f296..bc78cfa3d 100644 --- a/plugins/vi-mode/README.md +++ b/plugins/vi-mode/README.md @@ -46,7 +46,7 @@ hasn't been defined by theme, *Insert mode* is not displayed by default. You can change these indicators by setting the `MODE_INDICATOR` (*Normal mode*) and `INSERT_MODE_INDICATORS` (*Insert mode*) variables. -This settings support Prompt Expansion sequences. For example: +These settings support Prompt Expansion sequences. For example: ```zsh MODE_INDICATOR="%F{white}+%f" @@ -157,6 +157,27 @@ NOTE: delete/kill commands (`dd`, `D`, `c{motion}`, `C`, `x`,`X`) and yank comma (`y`, `Y`) will copy to the clipboard. Contents can then be put back using paste commands (`P`, `p`). +## Text objects + +Standard text objects are supported with `i` ("inside") and `a` ("around"), e.g., for words; thus, you can select the word the cursor is in with `viw`, or delete the current word, including surrounding spaces, with `daw`. + +For other text objects, you can rely on the built-in functionality of Zsh and enable it accordingly. +For example, for quoted strings, you can copy the commented snippet of : place this in your `.zsrhc` file, e.g., after sourcing oh-my-zsh: + +```sh +autoload -U select-quoted +zle -N select-quoted +for m in visual viopp; do + for c in {a,i}{\',\",\`}; do + bindkey -M $m $c select-quoted + done +done +``` + +Now, in normal mode, you can select everything inside a double-quoted string with `vi"`. +Note that this works even if you're not already inside a quoted string. +For example, you can replace everything inside a single-quoted string in the current line, from wherever the cursor is, with `ci'`. + ## Known issues ### Low `$KEYTIMEOUT` From c95509ebfdbcc3c497f12697cfd2717bcb0a528b Mon Sep 17 00:00:00 2001 From: Igor Aleksandrov Date: Thu, 15 May 2025 01:48:50 +0400 Subject: [PATCH 048/199] feat(kamal): add autocomplete support and aliases for Kamal (https://kamal-deploy.org/) (#13080) --- plugins/kamal/README.md | 16 + plugins/kamal/_kamal | 691 +++++++++++++++++++++++++++++++++ plugins/kamal/kamal.plugin.zsh | 25 ++ 3 files changed, 732 insertions(+) create mode 100644 plugins/kamal/README.md create mode 100644 plugins/kamal/_kamal create mode 100644 plugins/kamal/kamal.plugin.zsh diff --git a/plugins/kamal/README.md b/plugins/kamal/README.md new file mode 100644 index 000000000..af5716826 --- /dev/null +++ b/plugins/kamal/README.md @@ -0,0 +1,16 @@ +# Kamal + +This plugin provides completion for [Kamal](https://kamal-deploy.org/) as well as some +aliases for frequent Kamal commands. + +To use it, add kamal to the plugins array of your zshrc file: + +```zsh +plugins=(... kamal) +``` + +## Aliase + +| Alias | Command | Description | +|-----------|----------------------------------|----------------------------------------------------------------------------------| +| kad | `kamal deploy` | Deploy app to servers | diff --git a/plugins/kamal/_kamal b/plugins/kamal/_kamal new file mode 100644 index 000000000..52b29e814 --- /dev/null +++ b/plugins/kamal/_kamal @@ -0,0 +1,691 @@ +#compdef kamal + +# Description +# ----------- +# zsh completion for Kamal (https://kamal-deploy.org/) +# ------------------------------------------------------------------------- +# Authors +# ------- +# * Igor Aleksandrov +# ------------------------------------------------------------------------- +# Inspiration +# ----------- +# * docker-compose ohmyzsh completion script by @sdurrheimer Steve Durrheimer +# ------------------------------------------------------------------------- + +# _kamal_commands() { +# # Only initialize if empty +# if (( ${#kamal_commands} == 0 )); then +# kamal_commands=( +# accessory +# app +# audit +# build +# config +# deploy +# details +# docs +# help +# init +# lock +# proxy +# prune +# redeploy +# registry +# remove +# rollback +# secrets +# server +# setup +# upgrade +# version +# ) +# fi + +# _values 'Kamal commands' $kamal_commands +# } + +typeset -gr _kamal_commands=( + 'accessory:Control accessory services' + 'app:Control application deployment' + 'audit:Audit security of deployment' + 'build:Build and manage app images' + 'config:Show effective configuration' + 'deploy:Deploy app to servers' + 'details:Show details about deployment' + 'docs:Open documentation in browser' + 'help:Show command help' + 'init:Initialize new Kamal project' + 'lock:Manage deployment locks' + 'proxy:Control reverse proxy' + 'prune:Clean up containers and images' + 'redeploy:Redeploy current version' + 'registry:Manage Docker registry access' + 'remove:Remove app from servers' + 'rollback:Rollback to a previous version' + 'secrets:Manage deployment secrets' + 'server:Control server configuration' + 'setup:Setup initial deployment' + 'upgrade:Upgrade deployment' + 'version:Show Kamal version' +) + +# Helper function to display messages +_kamal_message() { + local msg="$1" + _kamal_message "==> $msg" +} + +# Helper function to extract destination names from ./config/deploy.*.yml +_kamal_destinations() { + local -a dests + local file + + # Check if config directory exists + if [[ ! -d "config" ]]; then + _kamal_message "Cannot find Kamal configuration directory at ./config" && return 1 + fi + + for file in config/deploy.*.yml(N); do + [[ $file =~ config/deploy\.(.+)\.yml ]] && dests+=("${match[1]}") + done + + _values 'Destination' $dests +} + +# Define global _kamal_flags array +typeset -ga _kamal_flags +_kamal_flags=( + '(-v --verbose )'{-v,--verbose}'[Detailed logging]' + '(--no-verbose --skip-verbose)'{--no-verbose,--skip-verbose}'[No detailed logging]' + '(-q --quiet --no-quiet --skip-quiet)'{-q,--quiet}'[Minimal logging]' + '(-q --quiet --no-quiet --skip-quiet)'{--no-quiet,--skip-quiet}'[No minimal logging]' + '--version=[Run commands against a specific app version]:version' + '(-p --primary --no-primary --skip-primary)'{-p,--primary}'[Run commands only on primary host instead of all]' + '(-p --primary --no-primary --skip-primary)'{--no-primary,--skip-primary}'[Do not run commands only on primary host]' + '(-h --hosts)'{-h,--hosts=}'[Run commands on these hosts instead of all]:hosts' + '(-r --roles)'{-r,--roles=}'[Run commands on these roles instead of all]:roles' + '(-c --config-file)'{-c,--config-file=}'[Path to config file]:config file:_files' + '(-d --destination)'{-d,--destination=}'[Specify destination to be used for config file]:destination:_kamal_destinations' + '(-H --skip-hooks)'{-H,--skip-hooks}'[Do not run hooks]' +) + +_kamal() { + local context state state_descr line curcontext="$curcontext" + typeset -A opt_args + + local ret=1 + + _arguments -C \ + $_kamal_flags \ + '1: :->command' \ + '*:: :->args' && ret=0 + + case $state in + (command) + # First argument - show available commands + _describe -t kamal-commands "Kamal commands" _kamal_commands && ret=0 + ;; + (args) + # Subsequent arguments - handle based on the command + case $words[1] in + (accessory) + _kamal_accessory && ret=0 + ;; + (app) + _kamal_app && ret=0 + ;; + (audit) + _arguments $_kamal_flags && ret=0 + ;; + (build) + _kamal_build && ret=0 + ;; + (config) + _arguments $_kamal_flags && ret=0 + ;; + (deploy) + _arguments $_kamal_flags && ret=0 + ;; + (details) + _arguments $_kamal_flags && ret=0 + ;; + (docs) + _arguments $_kamal_flags && ret=0 + ;; + (help) + _kamal_help && ret=0 + ;; + (init) + local -a init_flags + init_flags=( + $_kamal_flags + '(--bundle --no-bundle --skip-bundle)--bundle[Add Kamal to the Gemfile and create a bin/kamal binstub]' + '(--bundle --no-bundle --skip-bundle)--no-bundle[Do not add Kamal to the Gemfile and create a bin/kamal binstub]' + '(--bundle --no-bundle --skip-bundle)--skip-bundle[Skip add Kamal to the Gemfile and create a bin/kamal binstub]' + ) + _arguments $init_flags && ret=0 + ;; + (lock) + _kamal_lock && ret=0 + ;; + (proxy) + _kamal_proxy && ret=0 + ;; + (prune) + _kamal_prune && ret=0 + ;; + (redeploy) + _arguments $_kamal_flags && ret=0 + ;; + (registry) + _kamal_registry && ret=0 + ;; + (remove) + local -a remove_flags + remove_flags=( + $_kamal_flags + '(-y --confirmed --no-confirmed --skip-confirmed)'{-y,--confirmed}'[Proceed without confirmation question]' + '(-y --confirmed --no-confirmed --skip-confirmed)--no-confirmed[Proceed without confirmation question]' + '(-y --confirmed --no-confirmed --skip-confirmed)--skip-confirmed[Proceed without confirmation question]' + ) + _arguments $remove_flags && ret=0 + ;; + (rollback) + if (( CURRENT == 2 )); then + _kamal_message "Enter the version to rollback to" && ret=0 + else + _values $_kamal_flags && ret=0 + fi + ;; + (secrets) + _kamal_secrets && ret=0 + ;; + (server) + _kamal_server && ret=0 + ;; + (setup) + local -a setup_flags + setup_flags=( + $_kamal_flags + '(-P --skip-push)'{-P,--skip-push}'[Skip image build and push]' + ) + _arguments $setup_flags && ret=0 + ;; + (upgrade) + local -a upgrade_flags + upgrade_flags=( + $_kamal_flags + '(-y --confirmed --no-confirmed --skip-confirmed)'{-y,--confirmed}'[Proceed without confirmation question]' + '(-y --confirmed --no-confirmed --skip-confirmed)--no-confirmed[Do not proceed without confirmation question]' + '(-y --confirmed --no-confirmed --skip-confirmed)--skip-confirmed[Skip confirmation question]' + '(--rolling --no-rolling --skip-rolling)--rolling[Upgrade one host at a time]' + '(--rolling --no-rolling --skip-rolling)--no-rolling[Do not upgrade one host at a time]' + '(--rolling --no-rolling --skip-rolling)--skip-rolling[Skip rolling upgrade]' + ) + _arguments $upgrade_flags && ret=0 + ;; + (version) + _arguments $_kamal_flags && ret=0 + esac + ;; + esac + + return ret +} + +_kamal_accessory() { + local context state line + typeset -A opt_args + local ret=1 + + # Define accessory subcommands + local -a accessory_subcommands + accessory_subcommands=( + "boot:Boot new accessory service on host (use NAME=all to boot all accessories)" + "details:Show details about accessory on host (use NAME=all to show all accessories)" + "exec:Execute a custom command on servers within the accessory container (use --help to show options)" + "help:Describe subcommands or one specific subcommand" + "logs:Show log lines from accessory on host (use --help to show options)" + "reboot:Reboot existing accessory on host (stop container, remove container, start new container; use NAME=all to boot all accessories)" + "remove:Remove accessory container, image and data directory from host (use NAME=all to remove all accessories)" + "restart:Restart existing accessory container on host" + "start:Start existing accessory container on host" + "stop:Stop existing accessory container on host" + "upgrade:Upgrade accessories from Kamal 1.x to 2.0 (restart them in 'kamal' network)" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t accessory-commands "Kamal accessory commands" accessory_subcommands && ret=0 + ;; + (args) + case $words[1] in + (boot|details|exec|logs|reboot|remove|restart|start|stop) + # These commands require a NAME parameter + if (( CURRENT == 2 )); then + # At the NAME position - we could add accessory name completion here + # if we had a way to list available accessories + _kamal_message "Specify an accessory name (or 'all' for all accessories)" && ret=0 + elif [[ "$words[1]" == "exec" && CURRENT == 3 ]]; then + # For exec, the 3rd argument is a command + _kamal_message "Enter a command to execute" && ret=0 + elif (( CURRENT > 2 )) && [[ "$words[1]" != "exec" || CURRENT > 3 ]]; then + _values $_kamal_flags && ret=0 + fi + ;; + (help) + # Remove help itself from the list of commands + accessory_subcommands=("${(@)accessory_subcommands:#help*}") + _describe -t accessory-help-commands "Kamal accessory help commands" accessory_subcommands + ;; + (upgrade) + # For upgrade, show flags immediately + _arguments $_kamal_flags && ret=0 + ;; + esac + ;; + esac + + return ret +} + +_kamal_app() { + local context state line + typeset -A opt_args + local ret=1 + + local -a app_subcommands + app_subcommands=( + "boot:Boot app on servers (or reboot app if already running)" + "containers:Show app containers on servers" + "details:Show details about app containers" + "exec:Execute a custom command on servers within the app container (use --help to show options)" + "help:Describe subcommands or one specific subcommand" + "images:Show app images on servers" + "logs:Show log lines from app on servers (use --help to show options)" + "remove:Remove app containers and images from servers" + "stale_containers:Detect app stale containers" + "start:Start existing app container on servers" + "stop:Stop app container on servers" + "version:Show app version currently running on servers" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t app-commands "Kamal app commands" app_subcommands && ret=0 + ;; + (args) + case $words[1] in + (boot|containers|details|images|logs|remove|stale_containers|start|stop) + _arguments $_kamal_flags && ret=0 + ;; + (exec) + # For exec, the next argument is a command + if (( CURRENT == 2 )); then + _kamal_message "Enter a command to execute" && ret=0 + else + _values $_kamal_flags && ret=0 + fi + ;; + (help) + # Remove help itself from the list of commands + app_subcommands=("${(@)app_subcommands:#help*}") + _describe -t app-help-commands "Kamal app help commands" app_subcommands + ;; + esac + ;; + esac + + return ret +} + +_kamal_build() { + local context state line + typeset -A opt_args + local ret=1 + + local -a build_subcommands + build_subcommands=( + "create:Create a build setup" + "deliver:Build app and push app image to registry then pull image on servers" + "details:Show build setup" + "dev:Build using the working directory, tag it as dirty, and push to local image store." + "help:Describe subcommands or one specific subcommand" + "pull:Pull app image from registry onto servers" + "push:Build and push app image to registry" + "remove:Remove build setup" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t build-commands "Kamal build commands" build_subcommands && ret=0 + ;; + (args) + case $words[1] in + (create|deliver|details|dev|pull|push|remove) + _arguments $_kamal_flags && ret=0 + ;; + (help) + # Remove help itself from the list of commands + build_subcommands=("${(@)build_subcommands:#help*}") + _describe -t build-help-commands "Kamal build help commands" build_subcommands + ;; + esac + ;; + esac + + return ret +} + +_kamal_help() { + local ret=1 + + # Make sure kamal_commands is initialized properly + # if (( ${#kamal_commands} == 0 )); then + # _kamal_commands >/dev/null + # fi + + # If we already have a command after "help", return without suggestions + if (( CURRENT > 2 )); then + ret=0 + else + local -a help_commands + # Filter out help from the list of commands + help_commands=("${(@)_kamal_commands:#help}") + + _values 'Kamal help' $help_commands && ret=0 + fi + + return ret +} + +_kamal_lock() { + local context state line + typeset -A opt_args + local ret=1 + + local -a lock_subcommands + lock_subcommands=( + "acquire:Acquire the deploy lock" + "help:Describe subcommands or one specific subcommand" + "release:Release the deploy lock" + "status:Report lock status" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t lock-commands "Kamal lock commands" lock_subcommands && ret=0 + ;; + (args) + case $words[1] in + (acquire) + local -a acquire_flags + acquire_flags=( + $_kamal_flags + '(-m --message)'{-m,--message=}'[A lock message]:message:' # Required flag + ) + _arguments $acquire_flags && ret=0 + ;; + (release|status) + _arguments $_kamal_flags && ret=0 + ;; + (help) + # Remove help itself from the list of commands + lock_subcommands=("${(@)lock_subcommands:#help*}") + _describe -t lock-help-commands "Kamal lock help commands" lock_subcommands + ;; + esac + ;; + esac + + return ret +} + +_kamal_proxy() { + local context state line + typeset -A opt_args + local ret=1 + + local -a proxy_subcommands + proxy_subcommands=( + "boot:Boot proxy on servers" + "boot_config:Manage kamal-proxy boot configuration" + "details:Show details about proxy container from servers" + "help:Describe subcommands or one specific subcommand" + "logs:Show log lines from proxy on servers" + "reboot:Reboot proxy on servers (stop container, remove container, start new container)" + "remove:Remove proxy container and image from servers" + "restart:Restart existing proxy container on servers" + "start:Start existing proxy container on servers" + "stop:Stop existing proxy container on servers" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t proxy-commands "Kamal proxy commands" proxy_subcommands && ret=0 + ;; + (args) + case $words[1] in + (boot|details|logs|reboot|remove|restart|start|stop) + _arguments $_kamal_flags && ret=0 + ;; + (boot_config) + if (( CURRENT == 2 )); then + local -a boot_config_commands=( + "set:Set boot configuration" + "get:Get boot configuration" + "reset:Reset boot configuration" + ) + _describe -t boot-config-commands "Boot config commands" boot_config_commands && ret=0 + else + _values $_kamal_flags && ret=0 + fi + ;; + (help) + # Remove help itself from the list of commands + proxy_subcommands=("${(@)proxy_subcommands:#help*}") + _describe -t proxy-help-commands "Kamal proxy help commands" proxy_subcommands + ;; + esac + ;; + esac + + return ret +} + +_kamal_prune() { + local context state line + typeset -A opt_args + local ret=1 + + local -a prune_subcommands + prune_subcommands=( + "all:Prune unused images and stopped containers" + "containers:Prune all stopped containers, except the last n (default 5)" + "help:Describe subcommands or one specific subcommand" + "images:Prune unused images" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t prune-commands "Kamal prune commands" prune_subcommands && ret=0 + ;; + (args) + case $words[1] in + (all|containers|images) + _arguments $_kamal_flags && ret=0 + ;; + (help) + # Remove help itself from the list of commands + prune_subcommands=("${(@)prune_subcommands:#help*}") + _describe -t prune-help-commands "Kamal prune help commands" prune_subcommands + ;; + esac + ;; + esac + + return ret +} + +_kamal_registry() { + local context state line + typeset -A opt_args + local ret=1 + + local -a registry_subcommands + registry_subcommands=( + "help:Describe subcommands or one specific subcommand" + "login:Log in to registry locally and remotely" + "logout:Log out of registry locally and remotely" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t registry-commands "Kamal registry commands" registry_subcommands && ret=0 + ;; + (args) + case $words[1] in + (help) + # Remove help itself from the list of commands + registry_subcommands=("${(@)registry_subcommands:#help*}") + _describe -t registry-help-commands "Kamal registry help commands" registry_subcommands + ;; + (login|logout) + _arguments $_kamal_flags && ret=0 + ;; + esac + ;; + esac + + return ret +} + +_kamal_secrets() { + local context state line + typeset -A opt_args + local ret=1 + + local -a secrets_subcommands + secrets_subcommands=( + "extract:Extract a single secret from the results of a fetch call" + "fetch:Fetch secrets from a vault" + "help:Describe subcommands or one specific subcommand" + "print:Print the secrets (for debugging)" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t secrets-commands "Kamal secrets commands" secrets_subcommands && ret=0 + ;; + (args) + case $words[1] in + (fetch) + local -a fetch_flags + fetch_flags=( + $_kamal_flags + '(-a --adapter)'{-a,--adapter=}'[Secret storage adapter]:adapter:(aws-parameter-store)' + ) + _arguments $fetch_flags && ret=0 + ;; + (extract|print) + _arguments $_kamal_flags && ret=0 + ;; + (help) + # Remove help itself from the list of commands + secrets_subcommands=("${(@)secrets_subcommands:#help*}") + _describe -t secrets-help-commands "Kamal secrets help commands" secrets_subcommands + ;; + esac + ;; + esac + + return ret +} + +_kamal_server() { + local context state line + typeset -A opt_args + local ret=1 + + local -a server_subcommands + server_subcommands=( + "bootstrap:Set up Docker to run Kamal apps" + "exec:Run a custom command on the server (use --help to show options)" + "help:Describe subcommands or one specific subcommand" + ) + + local -a server_flags + server_flags=( + $_kamal_flags + '(-i --interactive --no-interactive --skip-interactive)'{-i,--interactive}'[Run the command interactively]' + '(-i --interactive --no-interactive --skip-interactive)--no-interactive[Do not run the command interactively]' + '(-i --interactive --no-interactive --skip-interactive)--skip-interactive[Skip interactive mode]' + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t server-commands "Kamal server commands" server_subcommands && ret=0 + ;; + (args) + case $words[1] in + (bootstrap) + _arguments $server_flags && ret=0 + ;; + (exec) + if (( CURRENT == 2 )); then + # For exec, the next argument is a command + _kamal_message "Enter a command to execute" && ret=0 + else + _values $server_flags && ret=0 + fi + ;; + (help) + # Remove help itself from the list of commands + server_subcommands=("${(@)server_subcommands:#help*}") + _describe -t server-help-commands "Kamal server help commands" server_subcommands + ;; + esac + ;; + esac + + return ret +} + +_kamal "$@" \ No newline at end of file diff --git a/plugins/kamal/kamal.plugin.zsh b/plugins/kamal/kamal.plugin.zsh new file mode 100644 index 000000000..e21ab4f92 --- /dev/null +++ b/plugins/kamal/kamal.plugin.zsh @@ -0,0 +1,25 @@ +# Find kamal binary (local ./bin/kamal or global) +function _kamal_command () { + if [ -x "./bin/kamal" ]; then + ./bin/kamal "$@" + else + command kamal "$@" + fi +} + +function which-kamal() { + if [ -x "./bin/kamal" ]; then + echo "Using local ./bin/kamal" + else + echo "Using global $(command -v kamal)" + fi +} + +# Use `_kamal_command`` function for `kamal` command +alias kamal='_kamal_command' + +# Aliases +alias kad='kamal deploy' + +# Hook up completion +compdef _kamal_command=kamal From 881c8b78d3e3ade9bccfddb3e616842807d07a59 Mon Sep 17 00:00:00 2001 From: tobii-dev <77458451+tobii-dev@users.noreply.github.com> Date: Sun, 18 May 2025 19:14:44 +0200 Subject: [PATCH 049/199] feat(termsupport): add WezTerm support (#13121) Co-authored-by: Carlo Sala --- lib/termsupport.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/termsupport.zsh b/lib/termsupport.zsh index d2fbf42cd..994c9c322 100644 --- a/lib/termsupport.zsh +++ b/lib/termsupport.zsh @@ -17,7 +17,7 @@ function title { : ${2=$1} case "$TERM" in - cygwin|xterm*|putty*|rxvt*|konsole*|ansi|mlterm*|alacritty*|st*|foot*|contour*) + cygwin|xterm*|putty*|rxvt*|konsole*|ansi|mlterm*|alacritty*|st*|foot*|contour*|wezterm*) print -Pn "\e]2;${2:q}\a" # set window name print -Pn "\e]1;${1:q}\a" # set tab name ;; From 40c2a72e03b1df100b3937dd44a9754f17c06c6d Mon Sep 17 00:00:00 2001 From: Kirill Fedorov Date: Thu, 22 May 2025 12:23:50 +0300 Subject: [PATCH 050/199] fix(history): handle HIST_STAMPS with whitespace in timestamp format (#13099) Co-authored-by: Kirill Fedorov --- lib/history.zsh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/history.zsh b/lib/history.zsh index 35da57de2..781a0e9de 100644 --- a/lib/history.zsh +++ b/lib/history.zsh @@ -18,10 +18,10 @@ function omz_history { print -u2 History file deleted. elif [[ $# -eq 0 ]]; then # if no arguments provided, show full history starting from 1 - builtin fc $stamp -l 1 + builtin fc "${stamp[@]}" -l 1 else # otherwise, run `fc -l` with a custom format - builtin fc $stamp -l "$@" + builtin fc "${stamp[@]}" -l "$@" fi } From 0354add542b6d769dbe39e10eb0caa0a11b2b716 Mon Sep 17 00:00:00 2001 From: G'lek Tarssza Date: Thu, 22 May 2025 03:27:34 -0600 Subject: [PATCH 051/199] fix(blinks)!: use `default` instead of `black` color (#13123) --- themes/blinks.zsh-theme | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/themes/blinks.zsh-theme b/themes/blinks.zsh-theme index ddb32f7c3..736683c9a 100644 --- a/themes/blinks.zsh-theme +++ b/themes/blinks.zsh-theme @@ -11,11 +11,11 @@ function _prompt_char() { # This theme works with both the "dark" and "light" variants of the # Solarized color schema. Set the SOLARIZED_THEME variable to one of # these two values to choose. If you don't specify, we'll assume you're -# using the "dark" variant. +# using neither variant. case ${SOLARIZED_THEME:-dark} in light) bkg=white;; - *) bkg=black;; + *) bkg=default;; esac ZSH_THEME_GIT_PROMPT_PREFIX=" [%{%B%F{blue}%}" From 1ed17ac0523ebc4d12e4e5324fd5f5ce5dafc668 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kalle=20Ahlstr=C3=B6m?= <71292737+kahlstrm@users.noreply.github.com> Date: Fri, 23 May 2025 16:43:53 +0300 Subject: [PATCH 052/199] feat(terraform): add `init -reconfigure` aliases` (#13129) --- plugins/terraform/README.md | 39 +++++++++++++------------- plugins/terraform/terraform.plugin.zsh | 2 ++ 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/plugins/terraform/README.md b/plugins/terraform/README.md index feaf21d40..6c139ac51 100644 --- a/plugins/terraform/README.md +++ b/plugins/terraform/README.md @@ -15,25 +15,26 @@ plugins=(... terraform) ## Aliases -| Alias | Command | -|---------|----------------------------------| -| `tf` | `terraform` | -| `tfa` | `terraform apply` | -| `tfaa` | `terraform apply -auto-approve` | -| `tfc` | `terraform console` | -| `tfd` | `terraform destroy` | -| `tfd!` | `terraform destroy -auto-approve`| -| `tff` | `terraform fmt` | -| `tffr` | `terraform fmt -recursive` | -| `tfi` | `terraform init` | -| `tfiu` | `terraform init -upgrade` | -| `tfo` | `terraform output` | -| `tfp` | `terraform plan` | -| `tfv` | `terraform validate` | -| `tfs` | `terraform state` | -| `tft` | `terraform test` | -| `tfsh` | `terraform show` | - +| Alias | Command | +| ------- | -------------------------------------- | +| `tf` | `terraform` | +| `tfa` | `terraform apply` | +| `tfaa` | `terraform apply -auto-approve` | +| `tfc` | `terraform console` | +| `tfd` | `terraform destroy` | +| `tfd!` | `terraform destroy -auto-approve` | +| `tff` | `terraform fmt` | +| `tffr` | `terraform fmt -recursive` | +| `tfi` | `terraform init` | +| `tfir` | `terraform init -reconfigure` | +| `tfiu` | `terraform init -upgrade` | +| `tfiur` | `terraform init -upgrade -reconfigure` | +| `tfo` | `terraform output` | +| `tfp` | `terraform plan` | +| `tfv` | `terraform validate` | +| `tfs` | `terraform state` | +| `tft` | `terraform test` | +| `tfsh` | `terraform show` | ## Prompt function diff --git a/plugins/terraform/terraform.plugin.zsh b/plugins/terraform/terraform.plugin.zsh index 046fabb03..0982fa193 100644 --- a/plugins/terraform/terraform.plugin.zsh +++ b/plugins/terraform/terraform.plugin.zsh @@ -24,7 +24,9 @@ alias 'tfd!'='terraform destroy -auto-approve' alias tff='terraform fmt' alias tffr='terraform fmt -recursive' alias tfi='terraform init' +alias tfir='terraform init -reconfigure' alias tfiu='terraform init -upgrade' +alias tfiur='terraform init -upgrade -reconfigure' alias tfo='terraform output' alias tfp='terraform plan' alias tfv='terraform validate' From d39804a5a6ba208159356b6ecd8308b559c588d0 Mon Sep 17 00:00:00 2001 From: Hanashiko <129686115+Hanashiko@users.noreply.github.com> Date: Sat, 24 May 2025 10:30:14 +0300 Subject: [PATCH 053/199] docs(universalarchive): expand documentation (#13136) --- plugins/universalarchive/README.md | 88 ++++++++++++++++++++---------- 1 file changed, 59 insertions(+), 29 deletions(-) diff --git a/plugins/universalarchive/README.md b/plugins/universalarchive/README.md index 93a1bd9fc..bcd33cea0 100644 --- a/plugins/universalarchive/README.md +++ b/plugins/universalarchive/README.md @@ -1,46 +1,76 @@ # universalarchive plugin -Lets you compress files by a command `ua `, supporting various -compression formats (e.g. 7z, tar.gz, lzma, ...). +The `universalarchive` plugin provides a convenient command-line interface for archiving files and directories using a wide variety of compression formats - without having to remember the exact syntax for each tool. -To enable it, add `universalarchive` to the plugins array in your zshrc file: +To enable it, add `universalarchive` to the plugins array in your `.zshrc` file: ```zsh plugins=(... universalarchive) ``` +## Features + - Compress files and directories using a simple, unified command: ua + - Automatically detects file/directory names to generate appropriate output names + - Supports fallback naming if an output file already exists + - Works with many common and advanced compression formats + - Designed for simplicity and quick use in the terminal + ## Usage -Run `ua ` to compress `` into an archive file using ``. -For example: - +Basic command format: ```sh -ua xz *.html +ua +``` +- ``: the archive format to use (e.g., `zip`, `tar.gz`, `xz`, `7z`, etc.) +- ``: one or more files or directories to compress + +## Examples: + +Compresses `notes.txt` and `images` into `notes.zip` +```sh +ua zip notes.txt images/ ``` -this command will compress all `.html` files in directory `folder` into `folder.xz`. +Creates `myproject.tar.gz` +```sh +ua tar.gz myproject/ +``` -This plugin saves you from having to remember which command line arguments compress a file. +Compresses all .log files into `current_folder.xz` +```sh +ua xz *.log +``` -## Supported compression formats +The plugin will generate a default archive filename based on the input: + - For a file, the output is derived from the file name without its extension. + - For a directory, it uses the directory name. + - For multiple files, it uses the name of the common parent directory. -| Extension | Description | -|:-----------------|:-------------------------------| -| `7z` | 7zip file | -| `bz2` | Bzip2 file | -| `gz` | Gzip file | -| `lzma` | LZMA archive | -| `lzo` | LZO archive | -| `rar` | WinRAR archive | -| `tar` | Tarball | -| `tbz`/`tar.bz2` | Tarball with bzip2 compression | -| `tgz`/`tar.gz` | Tarball with gzip compression | -| `tlz`/`tar.lzma` | Tarball with lzma compression | -| `txz`/`tar.xz` | Tarball with lzma2 compression | -| `tZ`/`tar.Z` | Tarball with LZW compression | -| `xz` | LZMA2 archive | -| `Z` | Z archive (LZW) | -| `zip` | Zip archive | -| `zst` | Zstd archive | + If the output file already exists, a unique filename is generated using `mktemp`. -See [list of archive formats](https://en.wikipedia.org/wiki/List_of_archive_formats) for more information regarding the archive formats. +## Supported Archive Formats + +| Format | Description | Tool Used | +|:-----------------|:-------------------------------|:-----------------| +| `7z` | 7zip archive | `7z` | +| `bz2` | Bzip2-compressed file | `bzip2` | +| `gz` | Gzip-compressed file | `gzip` | +| `lzma` | LZMA-compressed file | `lzma` | +| `lzo` | LZO-compressed file | `lzop` | +| `rar` | WinRAR archive | `rar` | +| `tar` | Uncompressed tarball | `tar` | +| `tbz`,`tar.bz2` | Tarball compressed with Bzip2 | `tar + bzip2` | +| `tgz`,`tar.gz` | Tarball compressed with Gzip | `tar + gzip` | +| `tlz`,`tar.lzma` | Tarball compressed with LZMA | `tar + lzma` | +| `txz`,`tar.xz` | Tarball compressed with LZMA2 | `tar + xz` | +| `tZ`,`tar.Z` | Tarball compressed with LZW | `tar + compress` | +| `xz` | XZ-compressed file | `xz` | +| `Z` | LZW-compressed file | `compress` | +| `zip` | Standard Zip archive | `zip` | +| `zst` | Zstandard-compressed file | `zstd` | + + > Note: Some formats may require specific tools to be installed on your system (e.g. `7z`, `rar`, `lzop`, `zstd`). Make sure these tools are available in your `$PATH`. + +## Auto-Completion + +The plugin provides tab-completion for supported formats and input files. Type `ua ` to see available formats, and `ua ` to browse files. From 13c702964c0287059a75eaec98cd71de51f4f19c Mon Sep 17 00:00:00 2001 From: Ilia Burtsev Date: Sat, 24 May 2025 13:39:17 +0300 Subject: [PATCH 054/199] fix(async): ensure `git_prompt_status` can be registered (#13134) --- lib/git.zsh | 198 ++++++++++++++++++++++++++-------------------------- 1 file changed, 99 insertions(+), 99 deletions(-) diff --git a/lib/git.zsh b/lib/git.zsh index a1b4d1587..f4d4229cb 100644 --- a/lib/git.zsh +++ b/lib/git.zsh @@ -39,6 +39,105 @@ function _omz_git_prompt_info() { echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${ref:gs/%/%%}${upstream:gs/%/%%}$(parse_git_dirty)${ZSH_THEME_GIT_PROMPT_SUFFIX}" } +function _omz_git_prompt_status() { + [[ "$(__git_prompt_git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]] && return + + # Maps a git status prefix to an internal constant + # This cannot use the prompt constants, as they may be empty + local -A prefix_constant_map + prefix_constant_map=( + '\?\? ' 'UNTRACKED' + 'A ' 'ADDED' + 'M ' 'MODIFIED' + 'MM ' 'MODIFIED' + ' M ' 'MODIFIED' + 'AM ' 'MODIFIED' + ' T ' 'MODIFIED' + 'R ' 'RENAMED' + ' D ' 'DELETED' + 'D ' 'DELETED' + 'UU ' 'UNMERGED' + 'ahead' 'AHEAD' + 'behind' 'BEHIND' + 'diverged' 'DIVERGED' + 'stashed' 'STASHED' + ) + + # Maps the internal constant to the prompt theme + local -A constant_prompt_map + constant_prompt_map=( + 'UNTRACKED' "$ZSH_THEME_GIT_PROMPT_UNTRACKED" + 'ADDED' "$ZSH_THEME_GIT_PROMPT_ADDED" + 'MODIFIED' "$ZSH_THEME_GIT_PROMPT_MODIFIED" + 'RENAMED' "$ZSH_THEME_GIT_PROMPT_RENAMED" + 'DELETED' "$ZSH_THEME_GIT_PROMPT_DELETED" + 'UNMERGED' "$ZSH_THEME_GIT_PROMPT_UNMERGED" + 'AHEAD' "$ZSH_THEME_GIT_PROMPT_AHEAD" + 'BEHIND' "$ZSH_THEME_GIT_PROMPT_BEHIND" + 'DIVERGED' "$ZSH_THEME_GIT_PROMPT_DIVERGED" + 'STASHED' "$ZSH_THEME_GIT_PROMPT_STASHED" + ) + + # The order that the prompt displays should be added to the prompt + local status_constants + status_constants=( + UNTRACKED ADDED MODIFIED RENAMED DELETED + STASHED UNMERGED AHEAD BEHIND DIVERGED + ) + + local status_text + status_text="$(__git_prompt_git status --porcelain -b 2> /dev/null)" + + # Don't continue on a catastrophic failure + if [[ $? -eq 128 ]]; then + return 1 + fi + + # A lookup table of each git status encountered + local -A statuses_seen + + if __git_prompt_git rev-parse --verify refs/stash &>/dev/null; then + statuses_seen[STASHED]=1 + fi + + local status_lines + status_lines=("${(@f)${status_text}}") + + # If the tracking line exists, get and parse it + if [[ "$status_lines[1]" =~ "^## [^ ]+ \[(.*)\]" ]]; then + local branch_statuses + branch_statuses=("${(@s/,/)match}") + for branch_status in $branch_statuses; do + if [[ ! $branch_status =~ "(behind|diverged|ahead) ([0-9]+)?" ]]; then + continue + fi + local last_parsed_status=$prefix_constant_map[$match[1]] + statuses_seen[$last_parsed_status]=$match[2] + done + fi + + # For each status prefix, do a regex comparison + for status_prefix in ${(k)prefix_constant_map}; do + local status_constant="${prefix_constant_map[$status_prefix]}" + local status_regex=$'(^|\n)'"$status_prefix" + + if [[ "$status_text" =~ $status_regex ]]; then + statuses_seen[$status_constant]=1 + fi + done + + # Display the seen statuses in the order specified + local status_prompt + for status_constant in $status_constants; do + if (( ${+statuses_seen[$status_constant]} )); then + local next_display=$constant_prompt_map[$status_constant] + status_prompt="$next_display$status_prompt" + fi + done + + echo $status_prompt +} + # Use async version if setting is enabled, or unset but zsh version is at least 5.0.6. # This avoids async prompt issues caused by previous zsh versions: # - https://github.com/ohmyzsh/ohmyzsh/issues/12331 @@ -246,105 +345,6 @@ function git_prompt_long_sha() { SHA=$(__git_prompt_git rev-parse HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER" } -function _omz_git_prompt_status() { - [[ "$(__git_prompt_git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]] && return - - # Maps a git status prefix to an internal constant - # This cannot use the prompt constants, as they may be empty - local -A prefix_constant_map - prefix_constant_map=( - '\?\? ' 'UNTRACKED' - 'A ' 'ADDED' - 'M ' 'MODIFIED' - 'MM ' 'MODIFIED' - ' M ' 'MODIFIED' - 'AM ' 'MODIFIED' - ' T ' 'MODIFIED' - 'R ' 'RENAMED' - ' D ' 'DELETED' - 'D ' 'DELETED' - 'UU ' 'UNMERGED' - 'ahead' 'AHEAD' - 'behind' 'BEHIND' - 'diverged' 'DIVERGED' - 'stashed' 'STASHED' - ) - - # Maps the internal constant to the prompt theme - local -A constant_prompt_map - constant_prompt_map=( - 'UNTRACKED' "$ZSH_THEME_GIT_PROMPT_UNTRACKED" - 'ADDED' "$ZSH_THEME_GIT_PROMPT_ADDED" - 'MODIFIED' "$ZSH_THEME_GIT_PROMPT_MODIFIED" - 'RENAMED' "$ZSH_THEME_GIT_PROMPT_RENAMED" - 'DELETED' "$ZSH_THEME_GIT_PROMPT_DELETED" - 'UNMERGED' "$ZSH_THEME_GIT_PROMPT_UNMERGED" - 'AHEAD' "$ZSH_THEME_GIT_PROMPT_AHEAD" - 'BEHIND' "$ZSH_THEME_GIT_PROMPT_BEHIND" - 'DIVERGED' "$ZSH_THEME_GIT_PROMPT_DIVERGED" - 'STASHED' "$ZSH_THEME_GIT_PROMPT_STASHED" - ) - - # The order that the prompt displays should be added to the prompt - local status_constants - status_constants=( - UNTRACKED ADDED MODIFIED RENAMED DELETED - STASHED UNMERGED AHEAD BEHIND DIVERGED - ) - - local status_text - status_text="$(__git_prompt_git status --porcelain -b 2> /dev/null)" - - # Don't continue on a catastrophic failure - if [[ $? -eq 128 ]]; then - return 1 - fi - - # A lookup table of each git status encountered - local -A statuses_seen - - if __git_prompt_git rev-parse --verify refs/stash &>/dev/null; then - statuses_seen[STASHED]=1 - fi - - local status_lines - status_lines=("${(@f)${status_text}}") - - # If the tracking line exists, get and parse it - if [[ "$status_lines[1]" =~ "^## [^ ]+ \[(.*)\]" ]]; then - local branch_statuses - branch_statuses=("${(@s/,/)match}") - for branch_status in $branch_statuses; do - if [[ ! $branch_status =~ "(behind|diverged|ahead) ([0-9]+)?" ]]; then - continue - fi - local last_parsed_status=$prefix_constant_map[$match[1]] - statuses_seen[$last_parsed_status]=$match[2] - done - fi - - # For each status prefix, do a regex comparison - for status_prefix in ${(k)prefix_constant_map}; do - local status_constant="${prefix_constant_map[$status_prefix]}" - local status_regex=$'(^|\n)'"$status_prefix" - - if [[ "$status_text" =~ $status_regex ]]; then - statuses_seen[$status_constant]=1 - fi - done - - # Display the seen statuses in the order specified - local status_prompt - for status_constant in $status_constants; do - if (( ${+statuses_seen[$status_constant]} )); then - local next_display=$constant_prompt_map[$status_constant] - status_prompt="$next_display$status_prompt" - fi - done - - echo $status_prompt -} - # Outputs the name of the current user # Usage example: $(git_current_user_name) function git_current_user_name() { From 526969cad351fe85ff4a9a3949736bc08de2b12d Mon Sep 17 00:00:00 2001 From: Jonas Geiregat <288105+jonas-grgt@users.noreply.github.com> Date: Sat, 24 May 2025 12:40:40 +0200 Subject: [PATCH 055/199] feat(mvn): add verify aliases (#13133) --- plugins/mvn/README.md | 2 ++ plugins/mvn/mvn.plugin.zsh | 2 ++ 2 files changed, 4 insertions(+) diff --git a/plugins/mvn/README.md b/plugins/mvn/README.md index 4181fedc5..bcb26482e 100644 --- a/plugins/mvn/README.md +++ b/plugins/mvn/README.md @@ -33,6 +33,8 @@ if it's found, or the mvn command otherwise. | `mvnct` | `mvn clean test` | | `mvncv` | `mvn clean verify` | | `mvncvst` | `mvn clean verify -DskipTests` | +| `mvnv` | `mvn verify` | +| `mvnvst` | `mvn verify -DskipTests` | | `mvndp` | `mvn deploy` | | `mvndocs` | `mvn dependency:resolve -Dclassifier=javadoc` | | `mvndt` | `mvn dependency:tree` | diff --git a/plugins/mvn/mvn.plugin.zsh b/plugins/mvn/mvn.plugin.zsh index 7bffce36e..8477722b0 100644 --- a/plugins/mvn/mvn.plugin.zsh +++ b/plugins/mvn/mvn.plugin.zsh @@ -62,6 +62,8 @@ alias mvncp='mvn clean package' alias mvnct='mvn clean test' alias mvncv='mvn clean verify' alias mvncvst='mvn clean verify -DskipTests' +alias mvnv='mvn verify' +alias mvnvst='mvn verify -DskipTests' alias mvndp='mvn deploy' alias mvndocs='mvn dependency:resolve -Dclassifier=javadoc' alias mvndt='mvn dependency:tree' From ecdc1e722a9f458b3b5c4900403ee77848e1dba2 Mon Sep 17 00:00:00 2001 From: Hanashiko <129686115+Hanashiko@users.noreply.github.com> Date: Sat, 24 May 2025 13:42:44 +0300 Subject: [PATCH 056/199] docs(rsync): improve README (#13137) --- plugins/rsync/README.md | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/plugins/rsync/README.md b/plugins/rsync/README.md index 032ee7f3b..04d16c88b 100644 --- a/plugins/rsync/README.md +++ b/plugins/rsync/README.md @@ -1,16 +1,26 @@ # rsync -This plugin adds aliases for frequent [rsync](https://rsync.samba.org/) commands. +This plugin adds aliases for frequent [rsync](https://rsync.samba.org/) commands, simplifying file transfer and synchronization tasks. -To use it add `rsync` to the plugins array in you zshrc file. +To use it add `rsync` to the plugins array in you `.zshrc` file. ```zsh plugins=(... rsync) ``` -| Alias | Command | -| ------------------- | ------------------------------------------------ | -| *rsync-copy* | `rsync -avz --progress -h` | -| *rsync-move* | `rsync -avz --progress -h --remove-source-files` | -| *rsync-update* | `rsync -avzu --progress -h` | -| *rsync-synchronize* | `rsync -avzu --delete --progress -h` | +| Alias | Command | Description | +| ------------------- | ------------------------------------------------ | ------------| +| `rsync-copy` | `rsync -avz --progress -h` | Recursively copy files and directories, preserving permissions, timestamps, and symbolic links. Compression is enabled for faster transfers. Progress is displayed in a human-readable format. | +| `rsync-move` | `rsync -avz --progress -h --remove-source-files` | Same as rsync-copy, but removes the source files after a successful transfer (effectively performing a move). | +| `rsync-update` | `rsync -avzu --progress -h` | Like rsync-copy, but only updates files if the source is newer than the destination (or if the destination file is missing). | +| `rsync-synchronize` | `rsync -avzu --delete --progress -h` | Performs bidirectional-style sync: updates files as in rsync-update and deletes files in the destination that no longer exist in the source. Useful for directory synchronization. | + +Explanation of Flags: + - -a: Archive mode; preserves symbolic links, permissions, timestamps, etc. + - -v: Verbose; shows details of the transfer process. + - -z: Compress file data during transfer for efficiency. + - -u: Skip files that are newer on the receiver. + - --progress: Show progress during file transfer. + - -h: Output numbers in human-readable format (e.g., 1K, 234M). + - --remove-source-files: Deletes source files after they are copied (used in rsync-move). + - --delete: Deletes files in the destination that are not present in the source (used in rsync-synchronize). From 095ac3ca8f4c3a89a69ff3b45cb67346f76babbd Mon Sep 17 00:00:00 2001 From: G'lek Tarssza Date: Sat, 24 May 2025 04:44:24 -0600 Subject: [PATCH 057/199] feat(cli): add `--enabled` flag to `omz plugin list` (#13128) --- lib/cli.zsh | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/cli.zsh b/lib/cli.zsh index 3b6308313..0b144e4e7 100644 --- a/lib/cli.zsh +++ b/lib/cli.zsh @@ -72,6 +72,10 @@ function _omz { local -aU plugins plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t)) _describe 'plugin' plugins ;; + plugin::list) + local -a opts + opts=('--enabled:List enabled plugins only') + _describe -o 'options' opts ;; theme::(set|use)) local -aU themes themes=("$ZSH"/themes/*.zsh-theme(-.N:t:r) "$ZSH_CUSTOM"/**/*.zsh-theme(-.N:r:gs:"$ZSH_CUSTOM"/themes/:::gs:"$ZSH_CUSTOM"/:::)) @@ -206,7 +210,7 @@ Available commands: disable Disable plugin(s) enable Enable plugin(s) info Get information of a plugin - list List all available Oh My Zsh plugins + list [--enabled] List Oh My Zsh plugins load Load plugin(s) EOF @@ -449,8 +453,21 @@ function _omz::plugin::info { function _omz::plugin::list { local -a custom_plugins builtin_plugins - custom_plugins=("$ZSH_CUSTOM"/plugins/*(-/N:t)) - builtin_plugins=("$ZSH"/plugins/*(-/N:t)) + + # If --enabled is provided, only list what's enabled + if [[ "$1" == "--enabled" ]]; then + local plugin + for plugin in "${plugins[@]}"; do + if [[ -d "${ZSH_CUSTOM}/plugins/${plugin}" ]]; then + custom_plugins+=("${plugin}") + elif [[ -d "${ZSH}/plugins/${plugin}" ]]; then + builtin_plugins+=("${plugin}") + fi + done + else + custom_plugins=("$ZSH_CUSTOM"/plugins/*(-/N:t)) + builtin_plugins=("$ZSH"/plugins/*(-/N:t)) + fi # If the command is being piped, print all found line by line if [[ ! -t 1 ]]; then From 6ef47526f852114209e36af87938075b4caa28e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Gamboa?= Date: Mon, 26 May 2025 07:27:53 -0400 Subject: [PATCH 058/199] feat(laravel): add `db:wipe` alias (#13071) --- plugins/laravel/README.md | 1 + plugins/laravel/laravel.plugin.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/laravel/README.md b/plugins/laravel/README.md index d722770c9..c5375f270 100644 --- a/plugins/laravel/README.md +++ b/plugins/laravel/README.md @@ -21,6 +21,7 @@ plugins=(... laravel) | `pamfs` | `php artisan migrate:fresh --seed` | | `pamr` | `php artisan migrate:rollback` | | `pads` | `php artisan db:seed` | +| `padw` | `php artisan db:wipe` | ## Makers diff --git a/plugins/laravel/laravel.plugin.zsh b/plugins/laravel/laravel.plugin.zsh index ef462b13c..20a1c473e 100644 --- a/plugins/laravel/laravel.plugin.zsh +++ b/plugins/laravel/laravel.plugin.zsh @@ -12,6 +12,7 @@ alias pamf='php artisan migrate:fresh' alias pamfs='php artisan migrate:fresh --seed' alias pamr='php artisan migrate:rollback' alias pads='php artisan db:seed' +alias padw='php artisan db:wipe' # Makers alias pamm='php artisan make:model' From 658240f49816bd6ae1e693a383e26b703ef2d0fb Mon Sep 17 00:00:00 2001 From: mm503 <182180598+mm503@users.noreply.github.com> Date: Thu, 29 May 2025 02:33:01 -0500 Subject: [PATCH 059/199] feat(kubectl): add aliases for `get events` (#13147) --- plugins/kubectl/README.md | 238 +++++++++++++++-------------- plugins/kubectl/kubectl.plugin.zsh | 2 + 2 files changed, 122 insertions(+), 118 deletions(-) diff --git a/plugins/kubectl/README.md b/plugins/kubectl/README.md index 28a502d11..6f347a8ee 100644 --- a/plugins/kubectl/README.md +++ b/plugins/kubectl/README.md @@ -11,124 +11,126 @@ plugins=(... kubectl) ## Aliases -| Alias | Command | Description | -| :------- | :------------------------------------------------- | :----------------------------------------------------------------------------------------------- | -| k | `kubectl` | The kubectl command | -| kca | `kubectl --all-namespaces` | The kubectl command targeting all namespaces | -| kaf | `kubectl apply -f` | Apply a YML file | -| keti | `kubectl exec -ti` | Drop into an interactive terminal on a container | -| | | **Manage configuration quickly to switch contexts between local, dev and staging** | -| kcuc | `kubectl config use-context` | Set the current-context in a kubeconfig file | -| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig | -| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig | -| kccc | `kubectl config current-context` | Display the current-context | -| kcgc | `kubectl config get-contexts` | List of contexts available | -| | | **General aliases** | -| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector | -| kdelf | `kubectl delete -f` | Delete a pod using the type and name specified in -f argument | -| | | **Pod management** | -| kgp | `kubectl get pods` | List all pods in ps output format | -| kgpl | `kgp -l` | Get pods by label. Example: `kgpl "app=myapp" -n myns` | -| kgpn | `kgp -n` | Get pods by namespace. Example: `kgpn kube-system` | -| kgpsl | `kubectl get pods --show-labels` | List all pods in ps output format with labels | -| kgpw | `kgp --watch` | After listing/getting the requested object, watch for changes | -| kgpwide | `kgp -o wide` | Output in plain-text format with any additional information. For pods, the node name is included | -| kep | `kubectl edit pods` | Edit pods from the default editor | -| kdp | `kubectl describe pods` | Describe all pods | -| kdelp | `kubectl delete pods` | Delete all pods matching passed arguments | -| | | **Service management** | -| kgs | `kubectl get svc` | List all services in ps output format | -| kgsw | `kgs --watch` | After listing all services, watch for changes | -| kgswide | `kgs -o wide` | After listing all services, output in plain-text format with any additional information | -| kes | `kubectl edit svc` | Edit services(svc) from the default editor | -| kds | `kubectl describe svc` | Describe all services in detail | -| kdels | `kubectl delete svc` | Delete all services matching passed argument | -| | | **Ingress management** | -| kgi | `kubectl get ingress` | List ingress resources in ps output format | -| kei | `kubectl edit ingress` | Edit ingress resource from the default editor | -| kdi | `kubectl describe ingress` | Describe ingress resource in detail | -| kdeli | `kubectl delete ingress` | Delete ingress resources matching passed argument | -| | | **Namespace management** | -| kgns | `kubectl get namespaces` | List the current namespaces in a cluster | -| kcn | `kubectl config set-context --current --namespace` | Change current namespace | -| kens | `kubectl edit namespace` | Edit namespace resource from the default editor | -| kdns | `kubectl describe namespace` | Describe namespace resource in detail | -| kdelns | `kubectl delete namespace` | Delete the namespace. WARNING! This deletes everything in the namespace | -| | | **ConfigMap management** | -| kgcm | `kubectl get configmaps` | List the configmaps in ps output format | -| kecm | `kubectl edit configmap` | Edit configmap resource from the default editor | -| kdcm | `kubectl describe configmap` | Describe configmap resource in detail | -| kdelcm | `kubectl delete configmap` | Delete the configmap | -| | | **Secret management** | -| kgsec | `kubectl get secret` | Get secret for decoding | -| kdsec | `kubectl describe secret` | Describe secret resource in detail | -| kdelsec | `kubectl delete secret` | Delete the secret | -| | | **Deployment management** | -| kgd | `kubectl get deployment` | Get the deployment | -| kgdw | `kgd --watch` | After getting the deployment, watch for changes | -| kgdwide | `kgd -o wide` | After getting the deployment, output in plain-text format with any additional information | -| ked | `kubectl edit deployment` | Edit deployment resource from the default editor | -| kdd | `kubectl describe deployment` | Describe deployment resource in detail | -| kdeld | `kubectl delete deployment` | Delete the deployment | -| ksd | `kubectl scale deployment` | Scale a deployment | -| krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment | -| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime | -| | | **Rollout management** | -| kgrs | `kubectl get 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** | -| kpf | `kubectl port-forward` | Forward one or more local ports to a pod | -| | | **Tools for accessing all information** | -| kga | `kubectl get all` | List all resources in ps format | -| kgaa | `kubectl get all --all-namespaces` | List the requested object(s) across all namespaces | -| | | **Logs** | -| kl | `kubectl logs` | Print the logs for a container or resource | -| klf | `kubectl logs -f` | Stream the logs for a container or resource (follow) | -| | | **File copy** | -| kcp | `kubectl cp` | Copy files and directories to and from containers | -| | | **Node management** | -| kgno | `kubectl get nodes` | List the nodes in ps output format | -| kgnosl | `kubectl get nodes --show-labels` | List the nodes in ps output format with labels | -| keno | `kubectl edit node` | Edit nodes resource from the default editor | -| kdno | `kubectl describe node` | Describe node resource in detail | -| kdelno | `kubectl delete node` | Delete the node | -| | | **Persistent Volume Claim management** | -| kgpvc | `kubectl get pvc` | List all PVCs | -| kgpvcw | `kgpvc --watch` | After listing/getting the requested object, watch for changes | -| kepvc | `kubectl edit pvc` | Edit pvcs from the default editor | -| kdpvc | `kubectl describe pvc` | Describe all pvcs | -| kdelpvc | `kubectl delete pvc` | Delete all pvcs matching passed arguments | -| | | **StatefulSets management** | -| kgss | `kubectl get statefulset` | List the statefulsets in ps format | -| kgssw | `kgss --watch` | After getting the list of statefulsets, watch for changes | -| kgsswide | `kgss -o wide` | After getting the statefulsets, output in plain-text format with any additional information | -| kess | `kubectl edit statefulset` | Edit statefulset resource from the default editor | -| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail | -| kdelss | `kubectl delete statefulset` | Delete the statefulset | -| ksss | `kubectl scale statefulset` | Scale a statefulset | -| krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment | -| | | **Service Accounts management** | -| kdsa | `kubectl describe sa` | Describe a service account in details | -| kdelsa | `kubectl delete sa` | Delete the service account | -| | | **DaemonSet management** | -| kgds | `kubectl get daemonset` | List all DaemonSets in ps output format | -| kgdsw | `kgds --watch` | After listing all DaemonSets, watch for changes | -| keds | `kubectl edit daemonset` | Edit DaemonSets from the default editor | -| kdds | `kubectl describe daemonset` | Describe all DaemonSets in detail | -| kdelds | `kubectl delete daemonset` | Delete all DaemonSets matching passed argument | -| | | **CronJob management** | -| kgcj | `kubectl get cronjob` | List all CronJobs in ps output format | -| 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 | +| Alias | Command | Description | +| :------- | :------------------------------------------------------ | :----------------------------------------------------------------------------------------------- | +| k | `kubectl` | The kubectl command | +| kca | `kubectl --all-namespaces` | The kubectl command targeting all namespaces | +| kaf | `kubectl apply -f` | Apply a YML file | +| keti | `kubectl exec -ti` | Drop into an interactive terminal on a container | +| | | **Manage configuration quickly to switch contexts between local, dev and staging** | +| kcuc | `kubectl config use-context` | Set the current-context in a kubeconfig file | +| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig | +| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig | +| kccc | `kubectl config current-context` | Display the current-context | +| kcgc | `kubectl config get-contexts` | List of contexts available | +| | | **General aliases** | +| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector | +| kdelf | `kubectl delete -f` | Delete a pod using the type and name specified in -f argument | +| kge | `kubectl get events --sort-by=".lastTimestamp"` | Get events (sorted by timestamp) | +| kgew | `kubectl get events --watch --sort-by=".lastTimestamp"` | Get events and watch as they occur (sorted by timestamp) | +| | | **Pod management** | +| kgp | `kubectl get pods` | List all pods in ps output format | +| kgpl | `kgp -l` | Get pods by label. Example: `kgpl "app=myapp" -n myns` | +| kgpn | `kgp -n` | Get pods by namespace. Example: `kgpn kube-system` | +| kgpsl | `kubectl get pods --show-labels` | List all pods in ps output format with labels | +| kgpw | `kgp --watch` | After listing/getting the requested object, watch for changes | +| kgpwide | `kgp -o wide` | Output in plain-text format with any additional information. For pods, the node name is included | +| kep | `kubectl edit pods` | Edit pods from the default editor | +| kdp | `kubectl describe pods` | Describe all pods | +| kdelp | `kubectl delete pods` | Delete all pods matching passed arguments | +| | | **Service management** | +| kgs | `kubectl get svc` | List all services in ps output format | +| kgsw | `kgs --watch` | After listing all services, watch for changes | +| kgswide | `kgs -o wide` | After listing all services, output in plain-text format with any additional information | +| kes | `kubectl edit svc` | Edit services(svc) from the default editor | +| kds | `kubectl describe svc` | Describe all services in detail | +| kdels | `kubectl delete svc` | Delete all services matching passed argument | +| | | **Ingress management** | +| kgi | `kubectl get ingress` | List ingress resources in ps output format | +| kei | `kubectl edit ingress` | Edit ingress resource from the default editor | +| kdi | `kubectl describe ingress` | Describe ingress resource in detail | +| kdeli | `kubectl delete ingress` | Delete ingress resources matching passed argument | +| | | **Namespace management** | +| kgns | `kubectl get namespaces` | List the current namespaces in a cluster | +| kcn | `kubectl config set-context --current --namespace` | Change current namespace | +| kens | `kubectl edit namespace` | Edit namespace resource from the default editor | +| kdns | `kubectl describe namespace` | Describe namespace resource in detail | +| kdelns | `kubectl delete namespace` | Delete the namespace. WARNING! This deletes everything in the namespace | +| | | **ConfigMap management** | +| kgcm | `kubectl get configmaps` | List the configmaps in ps output format | +| kecm | `kubectl edit configmap` | Edit configmap resource from the default editor | +| kdcm | `kubectl describe configmap` | Describe configmap resource in detail | +| kdelcm | `kubectl delete configmap` | Delete the configmap | +| | | **Secret management** | +| kgsec | `kubectl get secret` | Get secret for decoding | +| kdsec | `kubectl describe secret` | Describe secret resource in detail | +| kdelsec | `kubectl delete secret` | Delete the secret | +| | | **Deployment management** | +| kgd | `kubectl get deployment` | Get the deployment | +| kgdw | `kgd --watch` | After getting the deployment, watch for changes | +| kgdwide | `kgd -o wide` | After getting the deployment, output in plain-text format with any additional information | +| ked | `kubectl edit deployment` | Edit deployment resource from the default editor | +| kdd | `kubectl describe deployment` | Describe deployment resource in detail | +| kdeld | `kubectl delete deployment` | Delete the deployment | +| ksd | `kubectl scale deployment` | Scale a deployment | +| krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment | +| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime | +| | | **Rollout management** | +| kgrs | `kubectl get 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** | +| kpf | `kubectl port-forward` | Forward one or more local ports to a pod | +| | | **Tools for accessing all information** | +| kga | `kubectl get all` | List all resources in ps format | +| kgaa | `kubectl get all --all-namespaces` | List the requested object(s) across all namespaces | +| | | **Logs** | +| kl | `kubectl logs` | Print the logs for a container or resource | +| klf | `kubectl logs -f` | Stream the logs for a container or resource (follow) | +| | | **File copy** | +| kcp | `kubectl cp` | Copy files and directories to and from containers | +| | | **Node management** | +| kgno | `kubectl get nodes` | List the nodes in ps output format | +| kgnosl | `kubectl get nodes --show-labels` | List the nodes in ps output format with labels | +| keno | `kubectl edit node` | Edit nodes resource from the default editor | +| kdno | `kubectl describe node` | Describe node resource in detail | +| kdelno | `kubectl delete node` | Delete the node | +| | | **Persistent Volume Claim management** | +| kgpvc | `kubectl get pvc` | List all PVCs | +| kgpvcw | `kgpvc --watch` | After listing/getting the requested object, watch for changes | +| kepvc | `kubectl edit pvc` | Edit pvcs from the default editor | +| kdpvc | `kubectl describe pvc` | Describe all pvcs | +| kdelpvc | `kubectl delete pvc` | Delete all pvcs matching passed arguments | +| | | **StatefulSets management** | +| kgss | `kubectl get statefulset` | List the statefulsets in ps format | +| kgssw | `kgss --watch` | After getting the list of statefulsets, watch for changes | +| kgsswide | `kgss -o wide` | After getting the statefulsets, output in plain-text format with any additional information | +| kess | `kubectl edit statefulset` | Edit statefulset resource from the default editor | +| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail | +| kdelss | `kubectl delete statefulset` | Delete the statefulset | +| ksss | `kubectl scale statefulset` | Scale a statefulset | +| krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment | +| | | **Service Accounts management** | +| kdsa | `kubectl describe sa` | Describe a service account in details | +| kdelsa | `kubectl delete sa` | Delete the service account | +| | | **DaemonSet management** | +| kgds | `kubectl get daemonset` | List all DaemonSets in ps output format | +| kgdsw | `kgds --watch` | After listing all DaemonSets, watch for changes | +| keds | `kubectl edit daemonset` | Edit DaemonSets from the default editor | +| kdds | `kubectl describe daemonset` | Describe all DaemonSets in detail | +| kdelds | `kubectl delete daemonset` | Delete all DaemonSets matching passed argument | +| | | **CronJob management** | +| kgcj | `kubectl get cronjob` | List all CronJobs in ps output format | +| 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 33699bdf9..4a72c02af 100644 --- a/plugins/kubectl/kubectl.plugin.zsh +++ b/plugins/kubectl/kubectl.plugin.zsh @@ -36,6 +36,8 @@ alias kcgc='kubectl config get-contexts' # General aliases alias kdel='kubectl delete' alias kdelf='kubectl delete -f' +alias kge='kubectl get events --sort-by=".lastTimestamp"' +alias kgew='kubectl get events --sort-by=".lastTimestamp" --watch' # Pod management. alias kgp='kubectl get pods' From 95ef2516697aa764d1d4bb93ad3490584cc118ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yunus=20Emre=20Akbal=C4=B1k?= <58446763+YunusAkbalik@users.noreply.github.com> Date: Thu, 29 May 2025 13:49:56 +0300 Subject: [PATCH 060/199] feat(dotnet): add `restore` alias (#13146) --- plugins/dotnet/README.md | 1 + plugins/dotnet/dotnet.plugin.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/dotnet/README.md b/plugins/dotnet/README.md index a15e80577..217c46751 100644 --- a/plugins/dotnet/README.md +++ b/plugins/dotnet/README.md @@ -23,3 +23,4 @@ plugins=(... dotnet) | dp | dotnet pack | Create a NuGet package. | | dng | dotnet nuget | Provides additional NuGet commands. | | db | dotnet build | Build a .NET project | +| dres | dotnet restore | Restore dependencies and project-specific tools for a project. | \ No newline at end of file diff --git a/plugins/dotnet/dotnet.plugin.zsh b/plugins/dotnet/dotnet.plugin.zsh index ed7c55024..adc1ec678 100644 --- a/plugins/dotnet/dotnet.plugin.zsh +++ b/plugins/dotnet/dotnet.plugin.zsh @@ -24,3 +24,4 @@ alias da='dotnet add' alias dp='dotnet pack' alias dng='dotnet nuget' alias db='dotnet build' +alias dres='dotnet restore' From ac5295678f3325de1a69f9e2a603d69573112d05 Mon Sep 17 00:00:00 2001 From: AYO_YO <64309671+AYO-YO@users.noreply.github.com> Date: Sun, 8 Jun 2025 16:23:48 +0800 Subject: [PATCH 061/199] feat(agnoster): add conda support (#13160) Co-authored-by: Carlo Sala --- themes/agnoster.zsh-theme | 3 +++ 1 file changed, 3 insertions(+) diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme index 21c9cf7d5..c99b604b5 100644 --- a/themes/agnoster.zsh-theme +++ b/themes/agnoster.zsh-theme @@ -314,6 +314,9 @@ prompt_dir() { # Virtualenv: current working virtualenv prompt_virtualenv() { + if [ -n "$CONDA_DEFAULT_ENV" ]; then + prompt_segment magenta $CURRENT_FG "🐍 $CONDA_DEFAULT_ENV" + fi if [[ -n "$VIRTUAL_ENV" && -n "$VIRTUAL_ENV_DISABLE_PROMPT" ]]; then prompt_segment "$AGNOSTER_VENV_BG" "$AGNOSTER_VENV_FG" "(${VIRTUAL_ENV:t:gs/%/%%})" fi From 788eaa5930eeafceb0cc43f338b0bacf7a2e36a8 Mon Sep 17 00:00:00 2001 From: James Langley Date: Sun, 8 Jun 2025 09:25:23 +0100 Subject: [PATCH 062/199] fix(functions): escape especial chars in WSL (#13158) --- lib/functions.zsh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/functions.zsh b/lib/functions.zsh index b68c35c13..330b0e3e9 100644 --- a/lib/functions.zsh +++ b/lib/functions.zsh @@ -23,6 +23,9 @@ function open_command() { linux*) [[ "$(uname -r)" != *icrosoft* ]] && open_cmd='nohup xdg-open' || { open_cmd='cmd.exe /c start ""' [[ -e "$1" ]] && { 1="$(wslpath -w "${1:a}")" || return 1 } + [[ "$1" = (http|https)://* ]] && { + 1="$(echo "$1" | sed -E 's/([&|()<>^])/^\1/g')" || return 1 + } } ;; msys*) open_cmd='start ""' ;; *) echo "Platform $OSTYPE not supported" From 3ff8c7ef678a990a88ca988c3a4f007296af4934 Mon Sep 17 00:00:00 2001 From: Rob Lugton Date: Tue, 10 Jun 2025 04:40:46 +1000 Subject: [PATCH 063/199] feat(agnoster): add terraform to prompt (#7892) --- themes/agnoster.zsh-theme | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme index c99b604b5..63452378d 100644 --- a/themes/agnoster.zsh-theme +++ b/themes/agnoster.zsh-theme @@ -353,12 +353,19 @@ prompt_aws() { esac } +prompt_terraform() { + local terraform_info=$(tf_prompt_info) + [[ -z "$terraform_info" ]] && return + prompt_segment magenta yellow "TF: $terraform_info" +} + ## Main prompt build_prompt() { RETVAL=$? prompt_status prompt_virtualenv prompt_aws + prompt_terraform prompt_context prompt_dir prompt_git From 042605ee6b2afeb21e380d05b22d5072f0eeff44 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:15:59 +0200 Subject: [PATCH 064/199] chore(deps): bump requests in /.github/workflows/dependencies (#13164) Bumps [requests](https://github.com/psf/requests) from 2.32.3 to 2.32.4. - [Release notes](https://github.com/psf/requests/releases) - [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md) - [Commits](https://github.com/psf/requests/compare/v2.32.3...v2.32.4) --- updated-dependencies: - dependency-name: requests dependency-version: 2.32.4 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index e73c1b5ca..5dae1f64b 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -2,6 +2,6 @@ certifi==2025.4.26 charset-normalizer==3.4.2 idna==3.10 PyYAML==6.0.2 -requests==2.32.3 +requests==2.32.4 semver==3.0.4 urllib3==2.4.0 From 2fbdfa93f942611c56bb02657a39f577bd7f0ef0 Mon Sep 17 00:00:00 2001 From: Sergii Tkachenko Date: Mon, 16 Jun 2025 07:54:12 -0700 Subject: [PATCH 065/199] fix(init): ensure hostname is always valid for macOS (#13171) --- oh-my-zsh.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh index 2e885219c..3e547d358 100644 --- a/oh-my-zsh.sh +++ b/oh-my-zsh.sh @@ -99,8 +99,8 @@ done # Figure out the SHORT hostname if [[ "$OSTYPE" = darwin* ]]; then - # macOS's $HOST changes with dhcp, etc. Use ComputerName if possible. - SHORT_HOST=$(scutil --get ComputerName 2>/dev/null) || SHORT_HOST="${HOST/.*/}" + # macOS's $HOST changes with dhcp, etc. Use LocalHostName if possible. + SHORT_HOST=$(scutil --get LocalHostName 2>/dev/null) || SHORT_HOST="${HOST/.*/}" else SHORT_HOST="${HOST/.*/}" fi From 7ee92de190b3710b55aa04e10eb54e907587e61c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Jun 2025 10:02:32 +0200 Subject: [PATCH 066/199] chore(deps): bump urllib3 in /.github/workflows/dependencies (#13176) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index 5dae1f64b..d2c8bdcc9 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -4,4 +4,4 @@ idna==3.10 PyYAML==6.0.2 requests==2.32.4 semver==3.0.4 -urllib3==2.4.0 +urllib3==2.5.0 From f8022980a3423f25e3d5e1b6a60d2372a2ba006b Mon Sep 17 00:00:00 2001 From: Amr Elsayyad <20210190+AmrElsayyad@users.noreply.github.com> Date: Thu, 19 Jun 2025 11:05:40 +0300 Subject: [PATCH 067/199] feat(ubuntu): add `apt-fast` support (#13175) --- plugins/ubuntu/README.md | 17 +++++++++-------- plugins/ubuntu/ubuntu.plugin.zsh | 15 +++++++++++++-- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/plugins/ubuntu/README.md b/plugins/ubuntu/README.md index 20f5c65ee..4b09ba02b 100644 --- a/plugins/ubuntu/README.md +++ b/plugins/ubuntu/README.md @@ -10,10 +10,11 @@ plugins=(... ubuntu) ## Aliases -Commands that use `$APT` will use `apt` if installed or defer to `apt-get` otherwise. +Commands that use `$APT` will use `apt-fast` if installed, or `apt` if installed, or defer to `apt-get` +otherwise. | Alias | Command | Description | -|---------|--------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------| +| ------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------- | | age | `sudo $APT` | Run apt-get with sudo | | acs | `apt-cache search` | Search the apt-cache with the specified criteria | | acsp | `apt-cache showpkg` | Shows information about the listed packages | @@ -26,7 +27,7 @@ Commands that use `$APT` will use `apt` if installed or defer to `apt-get` other | agd | `sudo $APT dselect-upgrade` | Follows dselect choices for package installation | | agi | `sudo $APT install ` | Install the specified package | | agli | `apt list --installed` | List the installed packages | -| aglu | `sudo apt-get -u upgrade --assume-no` | Run an apt-get upgrade assuming no to all prompts | +| aglu | `apt list --upgradable` | List available updates only | | agp | `sudo $APT purge ` | Remove a package including any configuration files | | agr | `sudo $APT remove ` | Remove a package | | ags | `$APT source ` | Fetch the source for the specified package | @@ -36,21 +37,20 @@ Commands that use `$APT` will use `apt` if installed or defer to `apt-get` other | agar | `sudo $APT autoremove` | Remove automatically installed packages no longer needed | | aguu | `sudo $APT update && sudo $APT upgrade` | Update packages list and upgrade available packages | | allpkgs | `dpkg --get-selections \| grep -v deinstall` | Print all installed packages | -| kclean | `sudo aptitude remove -P ?and(~i~nlinux-(ima\|hea) ?not(~n$(uname -r)))` |Remove ALL kernel images and headers EXCEPT the one in use | +| kclean | `sudo aptitude remove -P ?and(~i~nlinux-(ima\|hea) ?not(~n$(uname -r)))` | Remove ALL kernel images and headers EXCEPT the one in use | | mydeb | `time dpkg-buildpackage -rfakeroot -us -uc` | Create a basic .deb package | | ppap | `sudo ppa-purge ` | Remove the specified PPA | - ## Functions -| Function | Usage |Description | -|-------------------|---------------------------------------|--------------------------------------------------------------------------| +| Function | Usage | Description | +| ----------------- | ------------------------------------- | ------------------------------------------------------------------------ | | aar | `aar ppa:xxxxxx/xxxxxx [packagename]` | apt-add-repository with automatic install/upgrade of the desired package | | apt-history | `apt-history ` | Prints the Apt history of the specified action | | apt-list-packages | `apt-list-packages` | List packages by size | | kerndeb | `kerndeb` | Kernel-package building shortcut | -## Authors: +## Authors - [@AlexBio](https://github.com/AlexBio) - [@dbb](https://github.com/dbb) @@ -59,3 +59,4 @@ Commands that use `$APT` will use `apt` if installed or defer to `apt-get` other - [Nicolas Jonas](https://nextgenthemes.com) - [@loctauxphilippe](https://github.com/loctauxphilippe) - [@HaraldNordgren](https://github.com/HaraldNordgren) +- [@AmrElsayyad](https://github.com/AmrElsayyad) diff --git a/plugins/ubuntu/ubuntu.plugin.zsh b/plugins/ubuntu/ubuntu.plugin.zsh index 7b765a406..66e2d52cb 100644 --- a/plugins/ubuntu/ubuntu.plugin.zsh +++ b/plugins/ubuntu/ubuntu.plugin.zsh @@ -1,11 +1,22 @@ -(( $+commands[apt] )) && APT=apt || APT=apt-get +# Detect available package manager (prefer apt-fast > apt > apt-get) +if (( $+commands[apt-fast] )); then + APT=apt-fast +elif (( $+commands[apt] )); then + APT=apt +else + APT=apt-get +fi alias acs='apt-cache search' alias afs='apt-file search --regexp' # These are apt/apt-get only -alias ags="$APT source" +if (( $+commands[apt] )); then + alias ags="apt source" +else + alias ags="apt-get source" +fi alias acp='apt-cache policy' From 01433503c2a474c049fa56d792ebfd9274e683cc Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Wed, 25 Jun 2025 21:33:17 +0200 Subject: [PATCH 068/199] fix(rbw): reset clipboard in `rbwpw` only in the last invocation (#13185) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous behavior would reset the clipboard after 20 seconds always, even if the `rbwpw` function was called again in between. This commit fixes that behavior. Co-authored-by: Marc Cornellà --- plugins/rbw/rbw.plugin.zsh | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/plugins/rbw/rbw.plugin.zsh b/plugins/rbw/rbw.plugin.zsh index b6cecf8b4..0b55e6e5f 100644 --- a/plugins/rbw/rbw.plugin.zsh +++ b/plugins/rbw/rbw.plugin.zsh @@ -29,9 +29,24 @@ function rbwpw { echo "$service not found" return 1 fi + + # Generate a random identifier for this call to rbwpw + # so we can check if the clipboard content has changed + local _random="$RANDOM" _cache="$ZSH_CACHE_DIR/.rbwpw" + echo -n "$_random" > "$_cache" + + # Use clipcopy to copy the password to the clipboard echo -n $pw | clipcopy echo "password for $service copied!" - {sleep 20 && clipcopy /dev/null} &| + + # Clear the clipboard after 20 seconds, but only if the clipboard hasn't + # changed (if rbwpw hasn't been called again) + { + sleep 20 \ + && [[ "$(<"$_cache")" == "$_random" ]] \ + && clipcopy /dev/null \ + && command rm -f "$_cache" &>/dev/null + } &| } function _rbwpw { From f9d3e0ff568820be25a80ed80b7a4776f3fb009a Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Sun, 29 Jun 2025 17:09:07 +0200 Subject: [PATCH 069/199] feat(wd): update to v0.10.1 (#13192) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/wd/README.md | 9 +++------ plugins/wd/wd.sh | 25 ++++++++++++++++--------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 23168b91a..b67a4c7ed 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -30,7 +30,7 @@ dependencies: plugins/wd: repo: mfaerevaag/wd branch: master - version: tag:v0.10.0 + version: tag:v0.10.1 precopy: | set -e rm -r test diff --git a/plugins/wd/README.md b/plugins/wd/README.md index b345d65f5..1240afe57 100644 --- a/plugins/wd/README.md +++ b/plugins/wd/README.md @@ -65,12 +65,9 @@ Add the following to your `home.nix` then run `home-manager switch`: programs.zsh.plugins = [ { name = "wd"; - src = pkgs.fetchFromGitHub { - owner = "mfaerevaag"; - repo = "wd"; - rev = "v0.5.2"; - sha256 = "sha256-4yJ1qhqhNULbQmt6Z9G22gURfDLe30uV1ascbzqgdhg="; - }; + src = pkgs.zsh-wd; + file = "share/wd/wd.plugin.zsh"; + completions = [ "share/zsh/site-functions" ]; } ]; ``` diff --git a/plugins/wd/wd.sh b/plugins/wd/wd.sh index f7a22ff7d..56c029252 100755 --- a/plugins/wd/wd.sh +++ b/plugins/wd/wd.sh @@ -8,7 +8,7 @@ # @github.com/mfaerevaag/wd # version -readonly WD_VERSION=0.10.0 +readonly WD_VERSION=0.10.1 # colors readonly WD_BLUE="\033[96m" @@ -174,6 +174,11 @@ wd_add() point=$(basename "$PWD") fi + if [ ! -w "$wd_config_file" ]; then + wd_exit_fail "\'$wd_config_file\' is not writeable." + return + fi + if [[ $point =~ "^[\.]+$" ]] then wd_exit_fail "Warp point cannot be just dots" @@ -239,6 +244,11 @@ wd_remove() point_list=$(basename "$PWD") fi + if [ ! -w "$wd_config_file" ]; then + wd_exit_fail "\'$wd_config_file\' is not writeable." + return + fi + for point_name in $point_list ; do if [[ ${points[$point_name]} != "" ]] then @@ -440,6 +450,11 @@ wd_clean() { local count=0 local wd_tmp="" + if [ ! -w "$wd_config_file" ]; then + wd_exit_fail "\'$wd_config_file\' is not writeable." + return + fi + while read -r line do if [[ $line != "" ]] @@ -543,14 +558,6 @@ args=$(getopt -o a:r:c:lhs -l add:,rm:,clean,list,ls:,open:,path:,help,show -- $ if [[ ($? -ne 0 || $#* -eq 0) && -z $wd_print_version ]] then wd_print_usage - -# check if config file is writeable -elif [ ! -w "$wd_config_file" ] -then - # do nothing - # can't run `exit`, as this would exit the executing shell - wd_exit_fail "\'$wd_config_file\' is not writeable." - else # parse rest of options local wd_o From cb72d7dcbf08b435c7f8a6470802b207b2aa02c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kalle=20Ahlstr=C3=B6m?= <71292737+kahlstrm@users.noreply.github.com> Date: Sun, 29 Jun 2025 18:11:47 +0300 Subject: [PATCH 070/199] fix(af-magic): fix venv prompt counting parenthesis (#13190) --- themes/af-magic.zsh-theme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/af-magic.zsh-theme b/themes/af-magic.zsh-theme index 668c4e5de..f47d37340 100644 --- a/themes/af-magic.zsh-theme +++ b/themes/af-magic.zsh-theme @@ -14,7 +14,7 @@ function afmagic_dashes { if [[ -n "$python_env" && "$PS1" = *\(${python_env}\)* ]]; then echo $(( COLUMNS - ${#python_env} - 3 )) elif [[ -n "$VIRTUAL_ENV_PROMPT" && "$PS1" = *${VIRTUAL_ENV_PROMPT}* ]]; then - echo $(( COLUMNS - ${#VIRTUAL_ENV_PROMPT} )) + echo $(( COLUMNS - ${#VIRTUAL_ENV_PROMPT} - 3 )) else echo $COLUMNS fi From 3e7ef0182f59c7990a52cf6ec2981adb56d5b368 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Tue, 1 Jul 2025 17:59:18 +0200 Subject: [PATCH 071/199] chore: document Incident Response Plan (#13195) --- .github/INCIDENT_RESPONSE_PLAN.md | 87 +++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 .github/INCIDENT_RESPONSE_PLAN.md diff --git a/.github/INCIDENT_RESPONSE_PLAN.md b/.github/INCIDENT_RESPONSE_PLAN.md new file mode 100644 index 000000000..3f0b493c6 --- /dev/null +++ b/.github/INCIDENT_RESPONSE_PLAN.md @@ -0,0 +1,87 @@ +# Incident Response Plan + +## Reporting a Vulnerability + +Please see [the latest guidelines](https://github.com/ohmyzsh/ohmyzsh/blob/master/SECURITY.md) for instructions. + +## Phases + +### Triage + +1. Is this a valid security vulnerability? + + - [ ] It affects our CI/CD or any of our repositories. + - [ ] For ohmyzsh/ohmyzsh, it affects the latest commit. + - [ ] For others, it affects the latest commit on the default branch. + - [ ] It affects a third-party dependency: + - [ ] Zsh or git + - [ ] For a plugin, the vulnerability is a result of our usage of the dependency. + +2. What's the scope of the vulnerability? + + - [ ] Our codebase. + - [ ] A direct third-party dependency (Zsh, git, other plugins). + - [ ] An indirect third-party dependency. + - [ ] Out of scope, a third-party dependency that is the responsibility of the user. + - [ ] Out of scope, any other case (edit this plan and add the details). + +3. Is the vulnerability actionable? + + - [ ] Yes, we can submit a fix. + - [ ] Yes, we can disable a feature. + - [ ] Yes, we can mitigate the risk. + - [ ] Yes, we can remove a vulnerable dependency. + - [ ] Yes, we can apply a workaround. + - [ ] Yes, we can apply a patch to a vulnerable dependency ([example for CVE-2021-45444](https://github.com/ohmyzsh/ohmyzsh/blob/cb72d7dcbf08b435c7f8a6470802b207b2aa02c3/lib/vcs_info.zsh)). + - [ ] No, the vulnerability is not actionable. + +4. What's the impact of the vulnerability? + + Assess using the *CIA* triad: + + - **Confidentiality**: example: report or sharing of secrets. + - **Integrity**: affects the integrity of the system (deletion, corruption or encryption of data, OS file corruption, etc.). + - **Availability**: denial of login, deletion of required files to boot / login, etc. + +5. What's the exploitability of the vulnerability? + + Consider how easy it is to exploit, and if it affects all users or requires specific configurations. + +6. What's the severity of the vulnerability? + + You can use the [CVSS v3.1](https://www.first.org/cvss/specification-document) to assess the severity of the vulnerability. + +7. When was the vulnerability introduced? + + - Find the responsible code path. + - Find the commit or Pull Request that introduced the vulnerability. + +8. Who are our security contacts? + + Assess upstream or downstream contacts, and their desired channels of security. + + > TODO: add a list of contacts. + +### Mitigation + +- **Primary focus:** removing possibility of exploitation fast. +- **Secondary focus:** addressing the root cause. + +> [!IMPORTANT] +> Make sure to test that the mitigation works as expected, and does not introduce new vulnerabilities. +> When deploying a patch, make sure not to disclose the vulnerability in the commit message or PR description. + +> TODO: introduce a fast-track update process for security patches. + +### Disclosure + +Primary goal: inform our users about the vulnerability, and whether they are affected or not affected based on information they should be able to check themselves in a straightforward way. + +> TODO: add a vulnerability disclosure template. + +### Learn + +- Document the vulnerability, steps performed, and lessons learned. +- Document the timeline of events. +- Document and address improvements on the Security Incident Response Plan. +- Depending on the severity of the vulnerability, consider disclosing the root cause or not based on likely impact on users and estimated potential victims still affected. From df200c943a1dcfa040f334b8006e495af39205fd Mon Sep 17 00:00:00 2001 From: Zachary Craig Date: Fri, 18 Jul 2025 06:44:05 -0400 Subject: [PATCH 072/199] feat(keychain): support >2.9 (#13189) Co-authored-by: Carlo Sala --- plugins/keychain/keychain.plugin.zsh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/plugins/keychain/keychain.plugin.zsh b/plugins/keychain/keychain.plugin.zsh index f122f7982..8caf671f5 100644 --- a/plugins/keychain/keychain.plugin.zsh +++ b/plugins/keychain/keychain.plugin.zsh @@ -19,8 +19,15 @@ function { # load additional options zstyle -a :omz:plugins:keychain options options - # start keychain... - keychain ${^options:-} --agents ${agents:-gpg} ${^identities} --host $SHORT_HOST + # Check keychain version to decide whether to use --agents + local version_string=$(keychain --version 2>&1 | head -n 2 | tail -n 1 | cut -d ' ' -f 4) + # start keychain, only use --agents for versions below 2.9.0 + autoload -Uz is-at-least + if is-at-least 2.9 "$version_string"; then + keychain ${^options:-} --agents ${agents:-gpg} ${^identities} --host $SHORT_HOST + else + keychain ${^options:-} ${^identities} --host $SHORT_HOST + fi # Get the filenames to store/lookup the environment from _keychain_env_sh="$HOME/.keychain/$SHORT_HOST-sh" From dc3bbcda2689b26cfb16e714225e263fa74e3f70 Mon Sep 17 00:00:00 2001 From: Nihad Abbasov Date: Fri, 18 Jul 2025 13:53:14 +0300 Subject: [PATCH 073/199] feat(web-search): add RubyGems.org (#13210) --- plugins/web-search/README.md | 1 + plugins/web-search/web-search.plugin.zsh | 2 ++ 2 files changed, 3 insertions(+) diff --git a/plugins/web-search/README.md b/plugins/web-search/README.md index d0b03dff2..ed484f237 100644 --- a/plugins/web-search/README.md +++ b/plugins/web-search/README.md @@ -47,6 +47,7 @@ Available search contexts are: | `youtube` | `https://www.youtube.com/results?search_query=` | | `deepl` | `https://www.deepl.com/translator#auto/auto/` | | `dockerhub` | `https://hub.docker.com/search?q=` | +| `gems` | `https://rubygems.org/search?query=` | | `npmpkg` | `https://www.npmjs.com/search?q=` | | `packagist` | `https://packagist.org/?query=` | | `gopkg` | `https://pkg.go.dev/search?m=package&q=` | diff --git a/plugins/web-search/web-search.plugin.zsh b/plugins/web-search/web-search.plugin.zsh index ff77faed7..4eb42be57 100644 --- a/plugins/web-search/web-search.plugin.zsh +++ b/plugins/web-search/web-search.plugin.zsh @@ -28,6 +28,7 @@ function web_search() { youtube "https://www.youtube.com/results?search_query=" deepl "https://www.deepl.com/translator#auto/auto/" dockerhub "https://hub.docker.com/search?q=" + gems "https://rubygems.org/search?query=" npmpkg "https://www.npmjs.com/search?q=" packagist "https://packagist.org/?query=" gopkg "https://pkg.go.dev/search?m=package&q=" @@ -83,6 +84,7 @@ alias ask='web_search ask' alias youtube='web_search youtube' alias deepl='web_search deepl' alias dockerhub='web_search dockerhub' +alias gems='web_search gems' alias npmpkg='web_search npmpkg' alias packagist='web_search packagist' alias gopkg='web_search gopkg' From 8425e9774ea4be998a51c8c73c7f6e33000f9176 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Mon, 21 Jul 2025 10:04:10 +0200 Subject: [PATCH 074/199] fix(keychain): reversed logic Closes #13106 --- plugins/keychain/keychain.plugin.zsh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/keychain/keychain.plugin.zsh b/plugins/keychain/keychain.plugin.zsh index 8caf671f5..ce5351bce 100644 --- a/plugins/keychain/keychain.plugin.zsh +++ b/plugins/keychain/keychain.plugin.zsh @@ -24,9 +24,9 @@ function { # start keychain, only use --agents for versions below 2.9.0 autoload -Uz is-at-least if is-at-least 2.9 "$version_string"; then - keychain ${^options:-} --agents ${agents:-gpg} ${^identities} --host $SHORT_HOST - else keychain ${^options:-} ${^identities} --host $SHORT_HOST + else + keychain ${^options:-} --agents ${agents:-gpg} ${^identities} --host $SHORT_HOST fi # Get the filenames to store/lookup the environment from From 2ac69955e84d5ab2407e848275dfc2768b3b1531 Mon Sep 17 00:00:00 2001 From: Kevin De Keyser Date: Mon, 21 Jul 2025 17:11:35 +0800 Subject: [PATCH 075/199] fix(termsupport): ensure non-error return code (#13217) --- lib/termsupport.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/termsupport.zsh b/lib/termsupport.zsh index 994c9c322..852a543c5 100644 --- a/lib/termsupport.zsh +++ b/lib/termsupport.zsh @@ -53,7 +53,7 @@ function omz_termsupport_precmd { # Runs before executing the command function omz_termsupport_preexec { - [[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return + [[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return 0 emulate -L zsh setopt extended_glob From ff97957f1ccb33b1c1c27e47e2e24789ce2ae33f Mon Sep 17 00:00:00 2001 From: Bacluc Date: Mon, 21 Jul 2025 18:37:09 +0200 Subject: [PATCH 076/199] feat(tmux): avoid autostart inside `zed` editor (#13220) --- plugins/tmux/tmux.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/tmux/tmux.plugin.zsh b/plugins/tmux/tmux.plugin.zsh index d2729ec09..4c184c2d0 100644 --- a/plugins/tmux/tmux.plugin.zsh +++ b/plugins/tmux/tmux.plugin.zsh @@ -188,7 +188,7 @@ function _tmux_directory_session() { alias tds=_tmux_directory_session # Autostart if not already in tmux and enabled. -if [[ -z "$TMUX" && "$ZSH_TMUX_AUTOSTART" == "true" && -z "$INSIDE_EMACS" && -z "$EMACS" && -z "$VIM" && -z "$INTELLIJ_ENVIRONMENT_READER" ]]; then +if [[ -z "$TMUX" && "$ZSH_TMUX_AUTOSTART" == "true" && -z "$INSIDE_EMACS" && -z "$EMACS" && -z "$VIM" && -z "$INTELLIJ_ENVIRONMENT_READER" && -z "$ZED_TERM" ]]; then # Actually don't autostart if we already did and multiple autostarts are disabled. if [[ "$ZSH_TMUX_AUTOSTART_ONCE" == "false" || "$ZSH_TMUX_AUTOSTARTED" != "true" ]]; then export ZSH_TMUX_AUTOSTARTED=true From e3e468d1388d262b0018350a1248a176bfb31660 Mon Sep 17 00:00:00 2001 From: jishudashen Date: Tue, 22 Jul 2025 00:39:25 +0800 Subject: [PATCH 077/199] chore: fix typos (#13219) --- lib/completion.zsh | 2 +- plugins/dnf/_dnf5 | 2 +- plugins/dotnet/dotnet.plugin.zsh | 2 +- plugins/git/git.plugin.zsh | 2 +- plugins/systemadmin/README.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/completion.zsh b/lib/completion.zsh index 5a233a322..3823c2544 100644 --- a/lib/completion.zsh +++ b/lib/completion.zsh @@ -40,7 +40,7 @@ fi # disable named-directories autocompletion zstyle ':completion:*:cd:*' tag-order local-directories directory-stack path-directories -# Use caching so that commands like apt and dpkg complete are useable +# Use caching so that commands like apt and dpkg complete are usable zstyle ':completion:*' use-cache yes zstyle ':completion:*' cache-path $ZSH_CACHE_DIR diff --git a/plugins/dnf/_dnf5 b/plugins/dnf/_dnf5 index 9cbf451a8..3422fae32 100644 --- a/plugins/dnf/_dnf5 +++ b/plugins/dnf/_dnf5 @@ -272,7 +272,7 @@ _dnf5-repoquery() { for v in enhance obsolete provide recommend require suggest supplement; do opts+=( "--what${v}s=[limit to packages that $v specified capabilities]:list of capability: ") done - # mutually exclusive formating options + # mutually exclusive formatting options opts+=( + '(format)' '--conflicts[display capabilities that the package conflicts with]' diff --git a/plugins/dotnet/dotnet.plugin.zsh b/plugins/dotnet/dotnet.plugin.zsh index adc1ec678..2b7782474 100644 --- a/plugins/dotnet/dotnet.plugin.zsh +++ b/plugins/dotnet/dotnet.plugin.zsh @@ -10,7 +10,7 @@ _dotnet_completion() { compdef _dotnet_completion dotnet -# Aliases bellow are here for backwards compatibility +# Aliases below are here for backwards compatibility # added by Shaun Tabone (https://github.com/xontab) alias dn='dotnet new' diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index 1d043da35..335eaa8d0 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -86,7 +86,7 @@ function work_in_progress() { # Aliases # (sorted alphabetically by command) # (order should follow README) -# (in some cases force the alisas order to match README, like for example gke and gk) +# (in some cases force the alias order to match README, like for example gke and gk) # alias grt='cd "$(git rev-parse --show-toplevel || echo .)"' diff --git a/plugins/systemadmin/README.md b/plugins/systemadmin/README.md index 7ff21a635..7847e15e9 100644 --- a/plugins/systemadmin/README.md +++ b/plugins/systemadmin/README.md @@ -49,4 +49,4 @@ plugins=(... systemadmin) | geteip | Gather information regarding an external IP address using [icanhazip.com](https://icanhazip.com) | | getip | Determine the local IP Address with `ip addr` or `ifconfig` | | clrz | Clear zombie processes | -| conssec | Show number of concurrent connections per second based on ngnix/access.log file or another log file if specified | +| conssec | Show number of concurrent connections per second based on nginx/access.log file or another log file if specified | From 537807c863a90c51a4ec6fbb6b818c3668472425 Mon Sep 17 00:00:00 2001 From: Roeniss Moon Date: Tue, 22 Jul 2025 01:58:09 +0900 Subject: [PATCH 078/199] feat(alias-finder): use ripgrep if possible (#13043) Co-authored-by: Carlo Sala --- plugins/alias-finder/README.md | 8 +++++--- plugins/alias-finder/alias-finder.plugin.zsh | 6 +++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/plugins/alias-finder/README.md b/plugins/alias-finder/README.md index a9bbd0838..b24f8d4ac 100644 --- a/plugins/alias-finder/README.md +++ b/plugins/alias-finder/README.md @@ -11,6 +11,8 @@ plugins=(... alias-finder) To enable it for every single command, set zstyle in your `~/.zshrc`. +If the user has installed `rg`([ripgrep](https://github.com/BurntSushi/ripgrep)), it will be used because it's faster. Otherwise, it will use the `grep` command. + ```zsh # ~/.zshrc @@ -28,7 +30,7 @@ When you execute a command alias finder will look at your defined aliases and su Running the un-aliased `git status` command: ```sh -╭─tim@fox ~/repo/gitopolis ‹main› +╭─tim@fox ~/repo/gitopolis ‹main› ╰─$ git status gst='git status' # <=== shorter suggestion from alias-finder @@ -40,7 +42,7 @@ nothing to commit, working tree clean Running a shorter `git st` alias from `.gitconfig` that it suggested : ```sh -╭─tim@fox ~/repo/gitopolis ‹main› +╭─tim@fox ~/repo/gitopolis ‹main› ╰─$ git st gs='git st' # <=== shorter suggestion from alias-finder ## main...origin/main @@ -48,7 +50,7 @@ gs='git st' # <=== shorter suggestion from alias-finder Running the shortest `gs` shell alias that it found: ```sh -╭─tim@fox ~/repo/gitopolis ‹main› +╭─tim@fox ~/repo/gitopolis ‹main› ╰─$ gs # <=== no suggestions alias-finder because this is the shortest ## main...origin/main diff --git a/plugins/alias-finder/alias-finder.plugin.zsh b/plugins/alias-finder/alias-finder.plugin.zsh index 2351a439e..6f24c7089 100644 --- a/plugins/alias-finder/alias-finder.plugin.zsh +++ b/plugins/alias-finder/alias-finder.plugin.zsh @@ -43,7 +43,11 @@ alias-finder() { filter="^'?.{1,$((cmdLen - 1))}'?=" # some aliases is surrounded by single quotes fi - alias | grep -E "$filter" | grep -E "=$finder" + if (( $+commands[rg] )); then + alias | rg "$filter" | rg "=$finder" + else + alias | grep -E "$filter" | grep -E "=$finder" + fi if [[ $exact == true ]]; then break # because exact case is only one From 788b5776c03996d6c88dce786f9e0879a0c3aa6e Mon Sep 17 00:00:00 2001 From: Wagner Moreira <47096330+wagnermor@users.noreply.github.com> Date: Tue, 22 Jul 2025 14:29:47 -0300 Subject: [PATCH 079/199] feat(web-search): add search with `claude.ai` and `grok.com` (#13222) --- plugins/web-search/README.md | 2 ++ plugins/web-search/web-search.plugin.zsh | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/plugins/web-search/README.md b/plugins/web-search/README.md index ed484f237..26017a533 100644 --- a/plugins/web-search/README.md +++ b/plugins/web-search/README.md @@ -52,6 +52,8 @@ Available search contexts are: | `packagist` | `https://packagist.org/?query=` | | `gopkg` | `https://pkg.go.dev/search?m=package&q=` | | `chatgpt` | `https://chatgpt.com/?q=` | +| `claude` | `https://claude.ai/new?q=` | +| `grok` | `https://grok.com/?q=` | | `reddit` | `https://www.reddit.com/search/?q=` | | `ppai` | `https://www.perplexity.ai/search/new?q=` | diff --git a/plugins/web-search/web-search.plugin.zsh b/plugins/web-search/web-search.plugin.zsh index 4eb42be57..b04302ad6 100644 --- a/plugins/web-search/web-search.plugin.zsh +++ b/plugins/web-search/web-search.plugin.zsh @@ -33,6 +33,8 @@ function web_search() { packagist "https://packagist.org/?query=" gopkg "https://pkg.go.dev/search?m=package&q=" chatgpt "https://chatgpt.com/?q=" + grok "https://grok.com/?q=" + claude "https://claude.ai/new?q=" reddit "https://www.reddit.com/search/?q=" ppai "https://www.perplexity.ai/search/new?q=" ) @@ -89,6 +91,8 @@ alias npmpkg='web_search npmpkg' alias packagist='web_search packagist' alias gopkg='web_search gopkg' alias chatgpt='web_search chatgpt' +alias grok='web_search grok' +alias claude='web_search claude' alias reddit='web_search reddit' alias ppai='web_search ppai' @@ -108,3 +112,4 @@ if [[ ${#ZSH_WEB_SEARCH_ENGINES} -gt 0 ]]; then done unset engines key fi + From 13d4176a686507678ffd1b889838356f95f217e0 Mon Sep 17 00:00:00 2001 From: Gregory Menezes Date: Wed, 23 Jul 2025 16:16:18 +1000 Subject: [PATCH 080/199] fix(web-search): rename alias to `claudeai` to avoid conflict with CLI (#13224) --- plugins/web-search/README.md | 2 +- plugins/web-search/web-search.plugin.zsh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/web-search/README.md b/plugins/web-search/README.md index 26017a533..bc017a1f1 100644 --- a/plugins/web-search/README.md +++ b/plugins/web-search/README.md @@ -52,7 +52,7 @@ Available search contexts are: | `packagist` | `https://packagist.org/?query=` | | `gopkg` | `https://pkg.go.dev/search?m=package&q=` | | `chatgpt` | `https://chatgpt.com/?q=` | -| `claude` | `https://claude.ai/new?q=` | +| `claudeai` | `https://claude.ai/new?q=` | | `grok` | `https://grok.com/?q=` | | `reddit` | `https://www.reddit.com/search/?q=` | | `ppai` | `https://www.perplexity.ai/search/new?q=` | diff --git a/plugins/web-search/web-search.plugin.zsh b/plugins/web-search/web-search.plugin.zsh index b04302ad6..14fc613bb 100644 --- a/plugins/web-search/web-search.plugin.zsh +++ b/plugins/web-search/web-search.plugin.zsh @@ -34,7 +34,7 @@ function web_search() { gopkg "https://pkg.go.dev/search?m=package&q=" chatgpt "https://chatgpt.com/?q=" grok "https://grok.com/?q=" - claude "https://claude.ai/new?q=" + claudeai "https://claude.ai/new?q=" reddit "https://www.reddit.com/search/?q=" ppai "https://www.perplexity.ai/search/new?q=" ) From 70f0e5285f802ce6eb7feea4588ff8917246233e Mon Sep 17 00:00:00 2001 From: Malav Bhavsar Date: Fri, 25 Jul 2025 00:53:51 -0700 Subject: [PATCH 081/199] fix(web-search): rename `claude` alias (#13229) Rename the 'claude' alias to 'claudeai' in the web-search plugin to prevent conflicts with the Claude CLI tool. This ensures users can access both the web search functionality and the Claude CLI without collision. --- plugins/web-search/web-search.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/web-search/web-search.plugin.zsh b/plugins/web-search/web-search.plugin.zsh index 14fc613bb..98826ef72 100644 --- a/plugins/web-search/web-search.plugin.zsh +++ b/plugins/web-search/web-search.plugin.zsh @@ -92,7 +92,7 @@ alias packagist='web_search packagist' alias gopkg='web_search gopkg' alias chatgpt='web_search chatgpt' alias grok='web_search grok' -alias claude='web_search claude' +alias claudeai='web_search claudeai' alias reddit='web_search reddit' alias ppai='web_search ppai' From 52f7ad6913cd039c32f4088d101c30db2492d518 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Jul 2025 18:55:43 +0200 Subject: [PATCH 082/199] chore(deps): bump certifi in /.github/workflows/dependencies (#13218) Bumps [certifi](https://github.com/certifi/python-certifi) from 2025.4.26 to 2025.7.14. - [Commits](https://github.com/certifi/python-certifi/compare/2025.04.26...2025.07.14) --- updated-dependencies: - dependency-name: certifi dependency-version: 2025.7.14 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index d2c8bdcc9..4c55ff760 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,4 +1,4 @@ -certifi==2025.4.26 +certifi==2025.7.14 charset-normalizer==3.4.2 idna==3.10 PyYAML==6.0.2 From 98a182d71b59a24d6b694d3e6b7a49212c06e04f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Mon, 28 Jul 2025 19:13:35 +0200 Subject: [PATCH 083/199] ci: add strict permissions to `dependencies.yml` workflow (#13232) Just use `contents:read` initial permission. The other permissions needed are those attached to the @ohmyzsh GitHub App. --- .github/workflows/dependencies.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index 6c7387089..b4a17912b 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -4,6 +4,9 @@ on: schedule: - cron: "0 6 * * 0" +permissions: + contents: read + jobs: check: name: Check for updates From 5c804257ceb5b3062b876afae290adf72c474aad Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Mon, 28 Jul 2025 19:20:50 +0200 Subject: [PATCH 084/199] ci: use `actions/create-github-app-token` (#13233) --- .github/workflows/dependencies.yml | 10 +++++----- .github/workflows/project.yml | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index b4a17912b..0b8eeda93 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -18,11 +18,11 @@ jobs: with: fetch-depth: 0 - name: Authenticate as @ohmyzsh - id: generate_token - uses: ohmyzsh/github-app-token@v2 + id: generate-token + uses: actions/create-github-app-token@v2 with: - app_id: ${{ secrets.OHMYZSH_APP_ID }} - private_key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} + app-id: ${{ secrets.OHMYZSH_APP_ID }} + private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} - name: Setup Python uses: actions/setup-python@v5 with: @@ -30,7 +30,7 @@ jobs: cache: "pip" - name: Process dependencies env: - GH_TOKEN: ${{ steps.generate_token.outputs.token }} + GH_TOKEN: ${{ steps.generate-token.outputs.token }} GIT_APP_NAME: ohmyzsh[bot] GIT_APP_EMAIL: 54982679+ohmyzsh[bot]@users.noreply.github.com TMP_DIR: ${{ runner.temp }} diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index 2c2a1cdaa..8fd4e15d4 100644 --- a/.github/workflows/project.yml +++ b/.github/workflows/project.yml @@ -17,13 +17,13 @@ jobs: if: github.repository == 'ohmyzsh/ohmyzsh' steps: - name: Authenticate as @ohmyzsh - id: generate_token - uses: ohmyzsh/github-app-token@v2 + id: generate-token + uses: actions/create-github-app-token@v2 with: - app_id: ${{ secrets.OHMYZSH_APP_ID }} - private_key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} + app-id: ${{ secrets.OHMYZSH_APP_ID }} + private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} - name: Store app token - run: echo "GH_TOKEN=${{ steps.generate_token.outputs.token }}" >> "$GITHUB_ENV" + run: echo "GH_TOKEN=${{ steps.generate-token.outputs.token }}" >> "$GITHUB_ENV" - name: Read project data env: ORGANIZATION: ohmyzsh From a6beb0f5958e935d33b0edb6d4470c3d7c4e8917 Mon Sep 17 00:00:00 2001 From: Parintorn Thammasitboon <159538649+parintorn0@users.noreply.github.com> Date: Fri, 1 Aug 2025 15:08:48 +0700 Subject: [PATCH 085/199] feat(jonathan): add conda support (#13243) --- themes/jonathan.zsh-theme | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/themes/jonathan.zsh-theme b/themes/jonathan.zsh-theme index da6ed2281..5185ebf77 100644 --- a/themes/jonathan.zsh-theme +++ b/themes/jonathan.zsh-theme @@ -8,14 +8,15 @@ function theme_precmd { local rubypromptsize=${#${(%)$(ruby_prompt_info)}} local pwdsize=${#${(%):-%~}} local venvpromptsize=$((${#$(virtualenv_prompt_info)})) + local condapromptsize=$((${#$(conda_prompt_info)})) # Truncate the path if it's too long. - if (( promptsize + rubypromptsize + pwdsize + venvpromptsize > TERMWIDTH )); then + if (( promptsize + rubypromptsize + pwdsize + venvpromptsize + condapromptsize > TERMWIDTH )); then (( PR_PWDLEN = TERMWIDTH - promptsize )) elif [[ "${langinfo[CODESET]}" = UTF-8 ]]; then - PR_FILLBAR="\${(l:$(( TERMWIDTH - (promptsize + rubypromptsize + pwdsize + venvpromptsize ) ))::${PR_HBAR}:)}" + PR_FILLBAR="\${(l:$(( TERMWIDTH - (promptsize + rubypromptsize + pwdsize + venvpromptsize + condapromptsize ) ))::${PR_HBAR}:)}" else - PR_FILLBAR="${PR_SHIFT_IN}\${(l:$(( TERMWIDTH - (promptsize + rubypromptsize + pwdsize + venvpromptsize ) ))::${altchar[q]:--}:)}${PR_SHIFT_OUT}" + PR_FILLBAR="${PR_SHIFT_IN}\${(l:$(( TERMWIDTH - (promptsize + rubypromptsize + pwdsize + venvpromptsize + condapromptsize ) ))::${altchar[q]:--}:)}${PR_SHIFT_OUT}" fi } @@ -104,7 +105,7 @@ fi PROMPT='${PR_SET_CHARSET}${PR_STITLE}${(e)PR_TITLEBAR}\ ${PR_CYAN}${PR_ULCORNER}${PR_HBAR}${PR_GREY}(\ ${PR_GREEN}%${PR_PWDLEN}<...<%~%<<\ -${PR_GREY})$(virtualenv_prompt_info)$(ruby_prompt_info)${PR_CYAN}${PR_HBAR}${PR_HBAR}${(e)PR_FILLBAR}${PR_HBAR}${PR_GREY}(\ +${PR_GREY})$(virtualenv_prompt_info)$(ruby_prompt_info)$(conda_prompt_info)${PR_CYAN}${PR_HBAR}${PR_HBAR}${(e)PR_FILLBAR}${PR_HBAR}${PR_GREY}(\ ${PR_CYAN}%(!.%SROOT%s.%n)${PR_GREY}@${PR_GREEN}%m:%l\ ${PR_GREY})${PR_CYAN}${PR_HBAR}${PR_URCORNER}\ From ef96242b9baad6b2211c386cb9af9418ace5d876 Mon Sep 17 00:00:00 2001 From: xusd320 Date: Thu, 7 Aug 2025 14:46:00 +0800 Subject: [PATCH 086/199] feat(web-search): add crates.io, docs.rs (#13250) --- plugins/web-search/web-search.plugin.zsh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/web-search/web-search.plugin.zsh b/plugins/web-search/web-search.plugin.zsh index 98826ef72..93237f4e2 100644 --- a/plugins/web-search/web-search.plugin.zsh +++ b/plugins/web-search/web-search.plugin.zsh @@ -37,6 +37,8 @@ function web_search() { claudeai "https://claude.ai/new?q=" reddit "https://www.reddit.com/search/?q=" ppai "https://www.perplexity.ai/search/new?q=" + rscrate "https://crates.io/search?q=" + rsdoc "https://docs.rs/releases/search?query=" ) # check whether the search engine is supported @@ -95,6 +97,8 @@ alias grok='web_search grok' alias claudeai='web_search claudeai' alias reddit='web_search reddit' alias ppai='web_search ppai' +alias rscrate='web_search rscrate' +alias rsdoc='web_search rsdoc' #add your own !bang searches here alias wiki='web_search duckduckgo \!w' From 9d8d4cf41482a95127ca41faecc0a7ee0781ca2e Mon Sep 17 00:00:00 2001 From: drjaska <88596812+drjaska@users.noreply.github.com> Date: Fri, 8 Aug 2025 12:23:24 +0300 Subject: [PATCH 087/199] feat(extract): support `.pk{3,4,7}` files (#13254) --- plugins/extract/README.md | 97 +++++++++++++++--------------- plugins/extract/_extract | 3 + plugins/extract/extract.plugin.zsh | 4 +- 3 files changed, 55 insertions(+), 49 deletions(-) diff --git a/plugins/extract/README.md b/plugins/extract/README.md index e0f571521..7bedfb1c6 100644 --- a/plugins/extract/README.md +++ b/plugins/extract/README.md @@ -14,53 +14,56 @@ plugins=(... extract) ## Supported file extensions -| Extension | Description | -| :---------------- | :----------------------------------- | -| `7z` | 7zip file | -| `Z` | Z archive (LZW) | -| `apk` | Android app file | -| `aar` | Android library file | -| `bz2` | Bzip2 file | -| `cab` | Microsoft cabinet archive | -| `cpio` | Cpio archive | -| `deb` | Debian package | -| `ear` | Enterprise Application aRchive | -| `exe` | Windows executable file | -| `gz` | Gzip file | -| `ipa` | iOS app package | -| `ipsw` | iOS firmware file | -| `jar` | Java Archive | -| `lrz` | LRZ archive | -| `lz4` | LZ4 archive | -| `lzma` | LZMA archive | -| `obscpio` | cpio archive used on OBS | -| `rar` | WinRAR archive | -| `rpm` | RPM package | -| `sublime-package` | Sublime Text package | -| `tar` | Tarball | -| `tar.bz2` | Tarball with bzip2 compression | -| `tar.gz` | Tarball with gzip compression | -| `tar.lrz` | Tarball with lrzip compression | -| `tar.lz` | Tarball with lzip compression | -| `tar.lz4` | Tarball with lz4 compression | -| `tar.xz` | Tarball with lzma2 compression | -| `tar.zma` | Tarball with lzma compression | -| `tar.zst` | Tarball with zstd compression | -| `tbz` | Tarball with bzip compression | -| `tbz2` | Tarball with bzip2 compression | -| `tgz` | Tarball with gzip compression | -| `tlz` | Tarball with lzma compression | -| `txz` | Tarball with lzma2 compression | -| `tzst` | Tarball with zstd compression | -| `vsix` | VS Code extension zip file | -| `war` | Web Application archive (Java-based) | -| `whl` | Python wheel file | -| `xpi` | Mozilla XPI module file | -| `xz` | LZMA2 archive | -| `zip` | Zip archive | -| `zlib` | zlib archive | -| `zst` | Zstandard file (zstd) | -| `zpaq` | Zpaq file | +| Extension | Description | +| :---------------- | :-------------------------------------- | +| `7z` | 7zip file | +| `apk` | Android app file | +| `aar` | Android library file | +| `bz2` | Bzip2 file | +| `cab` | Microsoft cabinet archive | +| `cpio` | Cpio archive | +| `deb` | Debian package | +| `ear` | Enterprise Application aRchive | +| `exe` | Windows executable file | +| `gz` | Gzip file | +| `ipa` | iOS app package | +| `ipsw` | iOS firmware file | +| `jar` | Java Archive | +| `lrz` | LRZ archive | +| `lz4` | LZ4 archive | +| `lzma` | LZMA archive | +| `obscpio` | cpio archive used on OBS | +| `pk3` | Renamed Zip archive used by Quake games | +| `pk4` | Renamed Zip archive used by Quake games | +| `pk7` | Renamed 7zip file used by Quake games | +| `rar` | WinRAR archive | +| `rpm` | RPM package | +| `sublime-package` | Sublime Text package | +| `tar` | Tarball | +| `tar.bz2` | Tarball with bzip2 compression | +| `tar.gz` | Tarball with gzip compression | +| `tar.lrz` | Tarball with lrzip compression | +| `tar.lz` | Tarball with lzip compression | +| `tar.lz4` | Tarball with lz4 compression | +| `tar.xz` | Tarball with lzma2 compression | +| `tar.zma` | Tarball with lzma compression | +| `tar.zst` | Tarball with zstd compression | +| `tbz` | Tarball with bzip compression | +| `tbz2` | Tarball with bzip2 compression | +| `tgz` | Tarball with gzip compression | +| `tlz` | Tarball with lzma compression | +| `txz` | Tarball with lzma2 compression | +| `tzst` | Tarball with zstd compression | +| `vsix` | VS Code extension zip file | +| `war` | Web Application archive (Java-based) | +| `whl` | Python wheel file | +| `xpi` | Mozilla XPI module file | +| `xz` | LZMA2 archive | +| `Z` | Z archive (LZW) | +| `zip` | Zip archive | +| `zlib` | zlib archive | +| `zst` | Zstandard file (zstd) | +| `zpaq` | Zpaq file | See [list of archive formats](https://en.wikipedia.org/wiki/List_of_archive_formats) for more information regarding archive formats. diff --git a/plugins/extract/_extract b/plugins/extract/_extract index 0b43e86bc..6641443d3 100644 --- a/plugins/extract/_extract +++ b/plugins/extract/_extract @@ -19,6 +19,9 @@ local -a exts=( lz4 lzma obscpio + pk3 + pk4 + pk7 rar rpm sublime-package diff --git a/plugins/extract/extract.plugin.zsh b/plugins/extract/extract.plugin.zsh index aa3fd00e6..d8cbc8b94 100644 --- a/plugins/extract/extract.plugin.zsh +++ b/plugins/extract/extract.plugin.zsh @@ -76,11 +76,11 @@ EOF (*.lz4) lz4 -d "$full_path" ;; (*.lzma) unlzma "$full_path" ;; (*.z) uncompress "$full_path" ;; - (*.zip|*.war|*.jar|*.ear|*.sublime-package|*.ipa|*.ipsw|*.xpi|*.apk|*.aar|*.whl|*.vsix|*.crx) unzip "$full_path" ;; + (*.zip|*.war|*.jar|*.ear|*.sublime-package|*.ipa|*.ipsw|*.xpi|*.apk|*.aar|*.whl|*.vsix|*.crx|*.pk3|*.pk4) unzip "$full_path" ;; (*.rar) unrar x -ad "$full_path" ;; (*.rpm) rpm2cpio "$full_path" | cpio --quiet -id ;; - (*.7z | *.7z.[0-9]*) 7za x "$full_path" ;; + (*.7z | *.7z.[0-9]* | *.pk7) 7za x "$full_path" ;; (*.deb) command mkdir -p "control" "data" ar vx "$full_path" > /dev/null From 73024e8f0849ff22ea15dee1d7c38157cefc77d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Aug 2025 10:25:23 +0200 Subject: [PATCH 088/199] chore(deps): bump charset-normalizer in /.github/workflows/dependencies (#13257) Bumps [charset-normalizer](https://github.com/jawah/charset_normalizer) from 3.4.2 to 3.4.3. - [Release notes](https://github.com/jawah/charset_normalizer/releases) - [Changelog](https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md) - [Commits](https://github.com/jawah/charset_normalizer/compare/3.4.2...3.4.3) --- updated-dependencies: - dependency-name: charset-normalizer dependency-version: 3.4.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index 4c55ff760..167f9df8f 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,5 +1,5 @@ certifi==2025.7.14 -charset-normalizer==3.4.2 +charset-normalizer==3.4.3 idna==3.10 PyYAML==6.0.2 requests==2.32.4 From 9fe2c26abd3f476a3377bf37b513e5cabf3f3637 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Aug 2025 13:47:37 +0200 Subject: [PATCH 089/199] chore(deps): bump certifi in /.github/workflows/dependencies (#13246) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index 167f9df8f..09bebefbd 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,4 +1,4 @@ -certifi==2025.7.14 +certifi==2025.8.3 charset-normalizer==3.4.3 idna==3.10 PyYAML==6.0.2 From 801f09c1caf6d3ea8f5d41dea3bdc1c70d7ea913 Mon Sep 17 00:00:00 2001 From: Jacob Rogers Date: Tue, 12 Aug 2025 20:37:03 +1200 Subject: [PATCH 090/199] fix(poetry-env): add support for poetry 2 (#13260) --- plugins/poetry-env/poetry-env.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/poetry-env/poetry-env.plugin.zsh b/plugins/poetry-env/poetry-env.plugin.zsh index dca388dfe..d2d571dbe 100644 --- a/plugins/poetry-env/poetry-env.plugin.zsh +++ b/plugins/poetry-env/poetry-env.plugin.zsh @@ -1,7 +1,7 @@ _togglePoetryShell() { # Determine if currently in a Poetry-managed directory local in_poetry_dir=0 - if [[ -f "$PWD/pyproject.toml" ]] && grep -q 'tool.poetry' "$PWD/pyproject.toml"; then + if [[ -f "$PWD/pyproject.toml" && -f "$PWD/poetry.lock" ]]; then in_poetry_dir=1 fi From 2423b7a12dc4624a2d8a7c58be4ac75cb82fd8c7 Mon Sep 17 00:00:00 2001 From: lucas Date: Wed, 13 Aug 2025 05:14:21 -0300 Subject: [PATCH 091/199] docs(web-search): add missing entries (#13263) --- plugins/web-search/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/web-search/README.md b/plugins/web-search/README.md index bc017a1f1..8d74a08c0 100644 --- a/plugins/web-search/README.md +++ b/plugins/web-search/README.md @@ -56,6 +56,8 @@ Available search contexts are: | `grok` | `https://grok.com/?q=` | | `reddit` | `https://www.reddit.com/search/?q=` | | `ppai` | `https://www.perplexity.ai/search/new?q=` | +| `rscrate` | `https://crates.io/search?q=` | +| `rsdoc` | `https://docs.rs/releases/search?query=` | Also there are aliases for bang-searching DuckDuckGo: From 8bd49fb0475c8be9a9d0f5daa518a8ff3bbe78fb Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Sat, 16 Aug 2025 18:27:50 +0200 Subject: [PATCH 092/199] fix(virtualenv): take into account `$VIRTUAL_ENV_PROMPT` Closes #13262 --- plugins/virtualenv/virtualenv.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/virtualenv/virtualenv.plugin.zsh b/plugins/virtualenv/virtualenv.plugin.zsh index 56707bb98..e339ef956 100644 --- a/plugins/virtualenv/virtualenv.plugin.zsh +++ b/plugins/virtualenv/virtualenv.plugin.zsh @@ -1,6 +1,6 @@ function virtualenv_prompt_info(){ [[ -n ${VIRTUAL_ENV} ]] || return - echo "${ZSH_THEME_VIRTUALENV_PREFIX=[}${VIRTUAL_ENV:t:gs/%/%%}${ZSH_THEME_VIRTUALENV_SUFFIX=]}" + echo "${ZSH_THEME_VIRTUALENV_PREFIX=[}${VIRTUAL_ENV_PROMPT:-${VIRTUAL_ENV:t:gs/%/%%}}${ZSH_THEME_VIRTUALENV_SUFFIX=]}" } # disables prompt mangling in virtual_env/bin/activate From 51760e1d4aa417846b41a32ad845aaacc053a7f5 Mon Sep 17 00:00:00 2001 From: olwooz <24418404+olwooz@users.noreply.github.com> Date: Sun, 17 Aug 2025 01:29:43 +0900 Subject: [PATCH 093/199] feat(installer): add confirmation before overwriting existing .zshrc (#13086) --- tools/install.sh | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tools/install.sh b/tools/install.sh index 5c9b2c18d..d274c2c9f 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -341,6 +341,23 @@ setup_zshrc() { echo "${FMT_YELLOW}Found ${zdot}/.zshrc.${FMT_RESET} ${FMT_GREEN}Keeping...${FMT_RESET}" return fi + + # Ask user for confirmation before backing up and overwriting + echo "${FMT_YELLOW}Found ${zdot}/.zshrc." + echo "The existing .zshrc will be backed up to .zshrc.pre-oh-my-zsh if overwritten." + echo "Make sure your .zshrc contains the following minimal configuration if you choose not to overwrite it:${FMT_RESET}" + echo "----------------------------------------" + cat "$ZSH/templates/minimal.zshrc" + echo "----------------------------------------" + printf '%sDo you want to overwrite it with the Oh My Zsh template? [Y/n]%s ' \ + "$FMT_YELLOW" "$FMT_RESET" + read -r opt + case $opt in + [Yy]*|"") ;; + [Nn]*) echo "Overwrite skipped. Existing .zshrc will be kept."; return ;; + *) echo "Invalid choice. Overwrite skipped. Existing .zshrc will be kept."; return ;; + esac + if [ -e "$OLD_ZSHRC" ]; then OLD_OLD_ZSHRC="${OLD_ZSHRC}-$(date +%Y-%m-%d_%H-%M-%S)" if [ -e "$OLD_OLD_ZSHRC" ]; then @@ -353,7 +370,7 @@ setup_zshrc() { echo "${FMT_YELLOW}Found old .zshrc.pre-oh-my-zsh." \ "${FMT_GREEN}Backing up to ${OLD_OLD_ZSHRC}${FMT_RESET}" fi - echo "${FMT_YELLOW}Found ${zdot}/.zshrc.${FMT_RESET} ${FMT_GREEN}Backing up to ${OLD_ZSHRC}${FMT_RESET}" + echo "${FMT_GREEN}Backing up to ${OLD_ZSHRC}${FMT_RESET}" mv "$zdot/.zshrc" "$OLD_ZSHRC" fi From 5d37f723f6c92d9fe043ea9f0aa460cd0bd0258a Mon Sep 17 00:00:00 2001 From: "Patrick W. Healy" Date: Sat, 16 Aug 2025 14:17:14 -0500 Subject: [PATCH 094/199] fix(asdf): avoid prepending path entry multiple times (#13268) --- plugins/asdf/asdf.plugin.zsh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/asdf/asdf.plugin.zsh b/plugins/asdf/asdf.plugin.zsh index 318267dcb..913949888 100644 --- a/plugins/asdf/asdf.plugin.zsh +++ b/plugins/asdf/asdf.plugin.zsh @@ -1,7 +1,9 @@ (( ! $+commands[asdf] )) && return export ASDF_DATA_DIR="${ASDF_DATA_DIR:-$HOME/.asdf}" -path=("$ASDF_DATA_DIR/shims" $path) + +# Add shims to the front of the path, removing if already present. +path=("$ASDF_DATA_DIR/shims" ${path:#$ASDF_DATA_DIR/shims}) # If the completion file doesn't exist yet, we need to autoload it and # bind it to `asdf`. Otherwise, compinit will have already done that. From 92a03105acd514fe81fb3a1f581ff0daeb11cead Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Sat, 16 Aug 2025 21:26:22 +0200 Subject: [PATCH 095/199] docs(key-bindings): clarify comment Closes #13265 --- lib/key-bindings.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/key-bindings.zsh b/lib/key-bindings.zsh index a5650dd81..bf5d4ba30 100644 --- a/lib/key-bindings.zsh +++ b/lib/key-bindings.zsh @@ -117,7 +117,7 @@ bindkey '^r' history-incremental-search-backward # [Ctrl-r] - Search backwa bindkey ' ' magic-space # [Space] - don't do history expansion -# Edit the current command line in $EDITOR +# Edit the current command line in $VISUAL (or $EDITOR / `vi` if not set) autoload -U edit-command-line zle -N edit-command-line bindkey '\C-x\C-e' edit-command-line From 7504f22a0ce649ab577a6232f2a673ea98d773a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my?= Date: Sat, 16 Aug 2025 21:28:32 +0200 Subject: [PATCH 096/199] feat(battery): add wattage for macOS (#13258) --- plugins/battery/README.md | 6 ++++++ plugins/battery/battery.plugin.zsh | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/plugins/battery/README.md b/plugins/battery/README.md index 73fcb693e..07e4e0b16 100644 --- a/plugins/battery/README.md +++ b/plugins/battery/README.md @@ -19,6 +19,12 @@ For example: BATTERY_CHARGING="⚡️" ``` +You can see the power of your charger using the following setting (MacOS only) + +```zsh +BATTERY_SHOW_WATTS=true +``` + ## Requirements - On Linux, you must have the `acpi` or `acpitool` commands installed on your operating system. diff --git a/plugins/battery/battery.plugin.zsh b/plugins/battery/battery.plugin.zsh index 7977e4d04..c7618f6b3 100644 --- a/plugins/battery/battery.plugin.zsh +++ b/plugins/battery/battery.plugin.zsh @@ -17,8 +17,13 @@ # Modified to add support for OpenBSD # ########################################### +: ${BATTERY_SHOW_WATTS:=false} + if [[ "$OSTYPE" = darwin* ]]; then + function get_charger_power() { + echo "$(ioreg -rc AppleSmartBattery | grep -o '"Watts"=[0-9]\+' | head -1 | grep -o '[0-9]\+')W " + } function battery_is_charging() { ioreg -rc AppleSmartBattery | command grep -q '^.*"ExternalConnected"\ =\ Yes' } @@ -58,7 +63,10 @@ if [[ "$OSTYPE" = darwin* ]]; then fi echo "%{$fg[$color]%}[${battery_pct}%%]%{$reset_color%}" else - echo "${BATTERY_CHARGING-⚡️}" + if [[ "${BATTERY_SHOW_WATTS}" = "true" ]] ; then + watts=$(get_charger_power) + fi + echo "${watts}${BATTERY_CHARGING-⚡️}" fi } From 736632228a5f39573a15f4533b7672851f30bbe6 Mon Sep 17 00:00:00 2001 From: 0xHouss <67522466+0xHouss@users.noreply.github.com> Date: Sat, 16 Aug 2025 20:31:40 +0100 Subject: [PATCH 097/199] feat(copyfile): add error handling (#13248) --- plugins/copyfile/copyfile.plugin.zsh | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/plugins/copyfile/copyfile.plugin.zsh b/plugins/copyfile/copyfile.plugin.zsh index f4eca5acf..3281410e5 100644 --- a/plugins/copyfile/copyfile.plugin.zsh +++ b/plugins/copyfile/copyfile.plugin.zsh @@ -1,7 +1,19 @@ # Copies the contents of a given file to the system or X Windows clipboard # -# copyfile +# Usage: copyfile function copyfile { emulate -L zsh + + if [[ -z "$1" ]]; then + echo "Usage: copyfile " + return 1 + fi + + if [[ ! -f "$1" ]]; then + echo "Error: '$1' is not a valid file." + return 1 + fi + clipcopy $1 + echo ${(%):-"%B$1%b copied to clipboard."} } From c2a69fe5904e074f0049a941c09f039acdce40a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Aug 2025 08:32:18 +0200 Subject: [PATCH 098/199] chore(deps): bump actions/checkout from 4 to 5 (#13271) Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies.yml | 2 +- .github/workflows/installer.yml | 4 ++-- .github/workflows/main.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index 0b8eeda93..7cc53371d 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -14,7 +14,7 @@ jobs: if: github.repository == 'ohmyzsh/ohmyzsh' steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 - name: Authenticate as @ohmyzsh diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index 5593c9175..9e933350f 100644 --- a/.github/workflows/installer.yml +++ b/.github/workflows/installer.yml @@ -26,7 +26,7 @@ jobs: - macos-latest steps: - name: Set up git repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install zsh if: runner.os == 'Linux' run: sudo apt-get update; sudo apt-get install zsh @@ -42,7 +42,7 @@ jobs: - test steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install Vercel CLI run: npm install -g vercel - name: Setup project and deploy diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 264ac31f3..c49324495 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,7 +24,7 @@ jobs: if: github.repository == 'ohmyzsh/ohmyzsh' steps: - name: Set up git repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install zsh run: sudo apt-get update; sudo apt-get install zsh - name: Check syntax From cef64c465aa81b68fbbec5b008eeae1cb63805d3 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Tue, 19 Aug 2025 12:46:13 +0200 Subject: [PATCH 099/199] fix(install): ensure `--unattended` is respected (#13275) Closes #13274 --- tools/install.sh | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index d274c2c9f..8cf62a76e 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -25,9 +25,10 @@ # BRANCH - branch to check out immediately after install (default: master) # # Other options: -# CHSH - 'no' means the installer will not change the default shell (default: yes) -# RUNZSH - 'no' means the installer will not run zsh after the install (default: yes) -# KEEP_ZSHRC - 'yes' means the installer will not replace an existing .zshrc (default: no) +# CHSH - 'no' means the installer will not change the default shell (default: yes) +# RUNZSH - 'no' means the installer will not run zsh after the install (default: yes) +# KEEP_ZSHRC - 'yes' means the installer will not replace an existing .zshrc (default: no) +# OVERWRITE_CONFIRMATION - 'no' means the installer will not ask for confirmation to overwrite the existing .zshrc (default: yes) # # You can also pass some arguments to the install script to set some these options: # --skip-chsh: has the same behavior as setting CHSH to 'no' @@ -77,6 +78,7 @@ BRANCH=${BRANCH:-master} CHSH=${CHSH:-yes} RUNZSH=${RUNZSH:-yes} KEEP_ZSHRC=${KEEP_ZSHRC:-no} +OVERWRITE_CONFIRMATION=${OVERWRITE_CONFIRMATION:-yes} command_exists() { @@ -342,21 +344,23 @@ setup_zshrc() { return fi - # Ask user for confirmation before backing up and overwriting - echo "${FMT_YELLOW}Found ${zdot}/.zshrc." - echo "The existing .zshrc will be backed up to .zshrc.pre-oh-my-zsh if overwritten." - echo "Make sure your .zshrc contains the following minimal configuration if you choose not to overwrite it:${FMT_RESET}" - echo "----------------------------------------" - cat "$ZSH/templates/minimal.zshrc" - echo "----------------------------------------" - printf '%sDo you want to overwrite it with the Oh My Zsh template? [Y/n]%s ' \ - "$FMT_YELLOW" "$FMT_RESET" - read -r opt - case $opt in - [Yy]*|"") ;; - [Nn]*) echo "Overwrite skipped. Existing .zshrc will be kept."; return ;; - *) echo "Invalid choice. Overwrite skipped. Existing .zshrc will be kept."; return ;; - esac + if [ $OVERWRITE_CONFIRMATION != "no" ]; then + # Ask user for confirmation before backing up and overwriting + echo "${FMT_YELLOW}Found ${zdot}/.zshrc." + echo "The existing .zshrc will be backed up to .zshrc.pre-oh-my-zsh if overwritten." + echo "Make sure your .zshrc contains the following minimal configuration if you choose not to overwrite it:${FMT_RESET}" + echo "----------------------------------------" + cat "$ZSH/templates/minimal.zshrc" + echo "----------------------------------------" + printf '%sDo you want to overwrite it with the Oh My Zsh template? [Y/n]%s ' \ + "$FMT_YELLOW" "$FMT_RESET" + read -r opt + case $opt in + [Yy]*|"") ;; + [Nn]*) echo "Overwrite skipped. Existing .zshrc will be kept."; return ;; + *) echo "Invalid choice. Overwrite skipped. Existing .zshrc will be kept."; return ;; + esac + fi if [ -e "$OLD_ZSHRC" ]; then OLD_OLD_ZSHRC="${OLD_ZSHRC}-$(date +%Y-%m-%d_%H-%M-%S)" @@ -510,12 +514,13 @@ main() { if [ ! -t 0 ]; then RUNZSH=no CHSH=no + OVERWRITE_CONFIRMATION=no fi # Parse arguments while [ $# -gt 0 ]; do case $1 in - --unattended) RUNZSH=no; CHSH=no ;; + --unattended) RUNZSH=no; CHSH=no; OVERWRITE_CONFIRMATION=no ;; --skip-chsh) CHSH=no ;; --keep-zshrc) KEEP_ZSHRC=yes ;; esac From b95022dde6a200ba3dbb96c8b997ba74d8db0136 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Aug 2025 02:37:09 +0200 Subject: [PATCH 100/199] chore(deps): bump requests in /.github/workflows/dependencies (#13280) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index 09bebefbd..7388ed765 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -2,6 +2,6 @@ certifi==2025.8.3 charset-normalizer==3.4.3 idna==3.10 PyYAML==6.0.2 -requests==2.32.4 +requests==2.32.5 semver==3.0.4 urllib3==2.5.0 From 266bc17ab3587920a7a98262c78dc5a026583bf3 Mon Sep 17 00:00:00 2001 From: Dennis Dashkevich Date: Tue, 26 Aug 2025 05:51:00 +0300 Subject: [PATCH 101/199] fix(chruby): avoid adding PATH entries twice (#12980) --- plugins/chruby/chruby.plugin.zsh | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/plugins/chruby/chruby.plugin.zsh b/plugins/chruby/chruby.plugin.zsh index 06afef189..1bcc6c6d9 100644 --- a/plugins/chruby/chruby.plugin.zsh +++ b/plugins/chruby/chruby.plugin.zsh @@ -15,6 +15,13 @@ _source-from-omz-settings() { fi } +_source-from-default-location() { + [[ -r /usr/local/share/chruby/chruby.sh ]] || return 1 + + source /usr/local/share/chruby/chruby.sh + source /usr/local/share/chruby/auto.sh +} + _source-from-homebrew() { (( $+commands[brew] )) || return 1 @@ -36,27 +43,14 @@ _source-from-homebrew() { source $_brew_prefix/share/chruby/auto.sh } -_load-chruby-dirs() { - local dir - for dir in "$HOME/.rubies" "$PREFIX/opt/rubies"; do - if [[ -d "$dir" ]]; then - RUBIES+=("$dir") - fi - done -} - # Load chruby -if _source-from-omz-settings; then - _load-chruby-dirs -elif [[ -r "/usr/local/share/chruby/chruby.sh" ]] ; then - source /usr/local/share/chruby/chruby.sh - source /usr/local/share/chruby/auto.sh - _load-chruby-dirs -elif _source-from-homebrew; then - _load-chruby-dirs -fi +_source-from-omz-settings || \ + _source-from-default-location || \ + _source-from-homebrew -unfunction _source-from-homebrew _source-from-omz-settings _load-chruby-dirs +unfunction _source-from-homebrew \ + _source-from-default-location \ + _source-from-omz-settings ## chruby utility functions and aliases From 2525dae6613652ec9cb572bdc2fdf80ef837a967 Mon Sep 17 00:00:00 2001 From: ElisarEisenbach Date: Tue, 26 Aug 2025 06:13:21 +0300 Subject: [PATCH 102/199] feat(git): use remote default branch to guess main branch (#13212) Co-authored-by: Carlo Sala --- plugins/git/git.plugin.zsh | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index 335eaa8d0..830c18939 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -31,16 +31,26 @@ function git_develop_branch() { return 1 } -# Check if main exists and use instead of master +# Get the default branch name from common branch names or fallback to remote HEAD function git_main_branch() { command git rev-parse --git-dir &>/dev/null || return - local ref + + local remote ref + for ref in refs/{heads,remotes/{origin,upstream}}/{main,trunk,mainline,default,stable,master}; do if command git show-ref -q --verify $ref; then echo ${ref:t} return 0 fi done + + # Fallback: try to get the default branch from remote HEAD symbolic refs + for remote in origin upstream; do + ref=$(command git rev-parse --abbrev-ref $remote/HEAD 2>/dev/null) + if [[ $ref == $remote/* ]]; then + echo ${ref#"$remote/"}; return 0 + fi + done # If no main branch was found, fall back to master but return error echo master From 10b750af26c643335726735c832f1029250db90b Mon Sep 17 00:00:00 2001 From: Kevin S Kirkup Date: Mon, 1 Sep 2025 14:28:12 -0400 Subject: [PATCH 103/199] feat(kompost): Add plugin for kompose (#7729) Co-authored-by: Kevin S Kirkup --- plugins/kompose/README.md | 12 ++++++++++++ plugins/kompose/kompose.plugin.zsh | 3 +++ 2 files changed, 15 insertions(+) create mode 100644 plugins/kompose/README.md create mode 100644 plugins/kompose/kompose.plugin.zsh diff --git a/plugins/kompose/README.md b/plugins/kompose/README.md new file mode 100644 index 000000000..e86d9263b --- /dev/null +++ b/plugins/kompose/README.md @@ -0,0 +1,12 @@ +# kompose + +This plugin provides completion for [kompose](https://github.com/kubernetes/kompose), +to migrate from docker compose to Kubernetes resource definitions. + +To use it, add `kompose` to the plugins array in your zshrc file. + +``` +plugins=(... kompose) +``` + +**Author:** [@kevinkirkup](https://github.com/kevinkirkup) diff --git a/plugins/kompose/kompose.plugin.zsh b/plugins/kompose/kompose.plugin.zsh new file mode 100644 index 000000000..764e724e6 --- /dev/null +++ b/plugins/kompose/kompose.plugin.zsh @@ -0,0 +1,3 @@ +if [ $commands[kompose] ]; then + source <(kompose completion zsh) +fi From 28ac0e95daa52e8d784b0560af72c58515e7f7de Mon Sep 17 00:00:00 2001 From: Vanildo Souto Mangueira Date: Mon, 1 Sep 2025 15:31:29 -0300 Subject: [PATCH 104/199] fix(juanghurtado): Changed text color to red when 'root' (#7104) --- themes/juanghurtado.zsh-theme | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/themes/juanghurtado.zsh-theme b/themes/juanghurtado.zsh-theme index dbdfde7b8..95a400e61 100644 --- a/themes/juanghurtado.zsh-theme +++ b/themes/juanghurtado.zsh-theme @@ -34,8 +34,11 @@ ZSH_THEME_GIT_PROMPT_AHEAD=" %{$RED%}(!)" ZSH_THEME_GIT_PROMPT_SHA_BEFORE=" %{$WHITE%}[%{$YELLOW%}" ZSH_THEME_GIT_PROMPT_SHA_AFTER="%{$WHITE%}]" +USER_COLOR=$GREEN_BOLD +[[ $UID -eq 0 ]] && USER_COLOR=$RED_BOLD + # Prompt format PROMPT=' -%{$GREEN_BOLD%}%n@%m%{$WHITE%}:%{$YELLOW%}%~%u$(parse_git_dirty)$(git_prompt_ahead)%{$RESET_COLOR%} +%{$USER_COLOR%}%n@%m%{$WHITE%}:%{$YELLOW%}%~%u$(parse_git_dirty)$(git_prompt_ahead)%{$RESET_COLOR%} %{$BLUE%}>%{$RESET_COLOR%} ' RPROMPT='%{$GREEN_BOLD%}$(git_current_branch)$(git_prompt_short_sha)$(git_prompt_status)%{$RESET_COLOR%}' From 9d00a004b21791557c7d5cd1070b21054125b149 Mon Sep 17 00:00:00 2001 From: ymlair Date: Tue, 2 Sep 2025 02:37:37 +0800 Subject: [PATCH 105/199] feat(tt): add plugin tt (#8273) --- plugins/tt/README.MD | 26 ++++++++++++++++++++++++++ plugins/tt/tt.plugin.zsh | 21 +++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 plugins/tt/README.MD create mode 100644 plugins/tt/tt.plugin.zsh diff --git a/plugins/tt/README.MD b/plugins/tt/README.MD new file mode 100644 index 000000000..6246488be --- /dev/null +++ b/plugins/tt/README.MD @@ -0,0 +1,26 @@ +# TT + +This plugin provides mutual conversion of timestamp and date. + +To use it add tt to the plugins array in your zshrc file. + +```bash +plugins=(... tt) +``` +# Example + +print timestamp for "2019-10-16" +```bash +tt 2019-10-16 +``` + +print timestamp for "2019-10-16 18:41:00" +```bash +tt "2019-10-16 18:41:00" +``` + +print date for "1571222561" +```bash +tt 1571222561 +``` +echo 2019-10-16 18:42:41 diff --git a/plugins/tt/tt.plugin.zsh b/plugins/tt/tt.plugin.zsh new file mode 100644 index 000000000..cffb4b823 --- /dev/null +++ b/plugins/tt/tt.plugin.zsh @@ -0,0 +1,21 @@ +# +# Functions +# +# timestamp to date Or date to timestamp +# +tt () { + if [[ $1 =~ "-" ]] + then + if [[ $1 =~ " " ]] + then + date -j -f "%Y-%m-%d %H:%M:%S" "$1" +%s 2> /dev/null + else + date -j -f "%Y-%m-%d %H:%M:%S" "$1 00:00:00" +%s 2> /dev/null + fi + elif [[ $1 = "" ]] + then + date +%s + else + date -r $1 "+%Y-%m-%d %H:%M:%S" + fi +} From 61b144d809f8f8258cfd74a4bb3c6c8b66bac0b1 Mon Sep 17 00:00:00 2001 From: Benjamin Bock Date: Mon, 1 Sep 2025 20:47:54 +0200 Subject: [PATCH 106/199] feat(magic-enter plugin): Add support for jj to magic-enter plugin (#13241) --- plugins/magic-enter/magic-enter.plugin.zsh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/magic-enter/magic-enter.plugin.zsh b/plugins/magic-enter/magic-enter.plugin.zsh index 55b893535..c3175b70b 100644 --- a/plugins/magic-enter/magic-enter.plugin.zsh +++ b/plugins/magic-enter/magic-enter.plugin.zsh @@ -1,5 +1,6 @@ # Default commands : ${MAGIC_ENTER_GIT_COMMAND:="git status -u ."} # run when in a git repository +: ${MAGIC_ENTER_JJ_COMMAND:="jj st --no-pager ."} # run when in a jj repository : ${MAGIC_ENTER_OTHER_COMMAND:="ls -lh ."} # run anywhere else magic-enter() { @@ -9,7 +10,9 @@ magic-enter() { return fi - if command git rev-parse --is-inside-work-tree &>/dev/null; then + if command jj st &>/dev/null; then # needs to be before git to handle colocated repositories + BUFFER="$MAGIC_ENTER_JJ_COMMAND" + elif command git rev-parse --is-inside-work-tree &>/dev/null; then BUFFER="$MAGIC_ENTER_GIT_COMMAND" else BUFFER="$MAGIC_ENTER_OTHER_COMMAND" From 680298e920069b313650c1e1e413197c251c9cde Mon Sep 17 00:00:00 2001 From: David Chin Date: Mon, 1 Sep 2025 15:02:29 -0400 Subject: [PATCH 107/199] feat(spackenv): Adding Spackenv plugin (#13191) * Add spackenv plugin to handle Spack environment * Use ":t" instead of 'basename' --- plugins/spackenv/README.md | 17 +++++++++++++++++ plugins/spackenv/spackenv.plugin.zsh | 5 +++++ 2 files changed, 22 insertions(+) create mode 100644 plugins/spackenv/README.md create mode 100644 plugins/spackenv/spackenv.plugin.zsh diff --git a/plugins/spackenv/README.md b/plugins/spackenv/README.md new file mode 100644 index 000000000..371515839 --- /dev/null +++ b/plugins/spackenv/README.md @@ -0,0 +1,17 @@ +# spackenv + +Based on the virtualenv plugin. + +The plugin displays information of the created Spack environment and allows background theming. + +To use it, add `spackenv` to the plugins array of your zshrc file: +``` +plugins=(... spackenv) +``` + +The plugin creates a `spackenv_prompt_info` function that you can use in your theme, which displays +the basename of the current `$SPACK_ENV`. It uses two variables to control how that is shown: + +- `ZSH_THEME_SPACKENV_PREFIX`: sets the prefix of the SPACK_ENV. Defaults to `[`. + +- `ZSH_THEME_SPACKENV_SUFFIX`: sets the suffix of the SPACK_ENV. Defaults to `]`. diff --git a/plugins/spackenv/spackenv.plugin.zsh b/plugins/spackenv/spackenv.plugin.zsh new file mode 100644 index 000000000..f626f4fc6 --- /dev/null +++ b/plugins/spackenv/spackenv.plugin.zsh @@ -0,0 +1,5 @@ +function spackenv_prompt_info(){ + [[ -n ${SPACK_ENV} ]] || return + export SPACK_ENV_PROMPT=${SPACK_ENV:t} + echo "${ZSH_THEME_SPACKENV_PREFIX=(}${SPACK_ENV:t:gs/%/%%}${ZSH_THEME_SPACKENV_SUFFIX=)}" +} From b9c9fcfd3fb93c43b456ddb608308c9ac9bffab1 Mon Sep 17 00:00:00 2001 From: Max Modesto Wallin Date: Fri, 5 Sep 2025 02:06:24 +0200 Subject: [PATCH 108/199] feat(repo): auto-complete docs rebase update-refs (#13286) --- plugins/repo/_repo | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/repo/_repo b/plugins/repo/_repo index 2b1f165f1..c7a1eb11e 100644 --- a/plugins/repo/_repo +++ b/plugins/repo/_repo @@ -131,6 +131,8 @@ _repo() "(--autosquash)--no-ff[Pass --autosquash to git rebase]"\ "(--whitespace=)--whitespace=[Pass --whitespace to git rebase]: :__git_apply_whitespace_strategies"\ "(--auto-stash)--auto-stash[Stash local modifications before starting]"\ + "(--update-refs)--update-refs[Automatically force-update any branches that point to commits that are being rebased.]"\ + "(--no-update-refs)--no-update-refs[Turn off the automatic force-update of any branches that point to commits that are being rebased.]"\ && ret=0 ;; (checkout) From 26863c50b3eaad4b13f7dfa07e06053e1d4834a2 Mon Sep 17 00:00:00 2001 From: G'lek Tarssza Date: Fri, 5 Sep 2025 19:55:42 -0600 Subject: [PATCH 109/199] docs(gpg-agent): clarify plugin purpose (#13289) --- plugins/gpg-agent/README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/gpg-agent/README.md b/plugins/gpg-agent/README.md index 8eeb94f92..d66c37a5b 100644 --- a/plugins/gpg-agent/README.md +++ b/plugins/gpg-agent/README.md @@ -1,6 +1,11 @@ # gpg-agent -Enables [GPG's gpg-agent](https://www.gnupg.org/documentation/manuals/gnupg/) if it is not running. +Applies some fixes for some common issues encountered with [GPG's gpg-agent](https://www.gnupg.org/documentation/manuals/gnupg/). + +More specifically, this plugin: + +- Updates the `GPG_TTY` environment variable before each shell execution. +- Updates the `SSH_AUTH_SOCK` environment variable if `enable-ssh-support` is turned on. To use it, add `gpg-agent` to the plugins array of your zshrc file: From 9ad0ce6482858bd56d828fae9e19a4f32b6d3c3a Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Sat, 6 Sep 2025 12:19:49 +0800 Subject: [PATCH 110/199] fix(magic-enter): avoid unexpected console output Closes #13290 --- plugins/magic-enter/magic-enter.plugin.zsh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/magic-enter/magic-enter.plugin.zsh b/plugins/magic-enter/magic-enter.plugin.zsh index c3175b70b..cfb15b60e 100644 --- a/plugins/magic-enter/magic-enter.plugin.zsh +++ b/plugins/magic-enter/magic-enter.plugin.zsh @@ -10,9 +10,9 @@ magic-enter() { return fi - if command jj st &>/dev/null; then # needs to be before git to handle colocated repositories + if command jj st >/dev/null 2>&1; then # needs to be before git to handle colocated repositories BUFFER="$MAGIC_ENTER_JJ_COMMAND" - elif command git rev-parse --is-inside-work-tree &>/dev/null; then + elif command git rev-parse --is-inside-work-tree >/dev/null 2>&1; then BUFFER="$MAGIC_ENTER_GIT_COMMAND" else BUFFER="$MAGIC_ENTER_OTHER_COMMAND" From 7b516064ec099ef3438024dc264972b4251d8c1a Mon Sep 17 00:00:00 2001 From: Conor Meagher Date: Sat, 6 Sep 2025 00:49:07 -0500 Subject: [PATCH 111/199] feat(brew): add three more aliases (#13285) --- plugins/brew/README.md | 3 +++ plugins/brew/brew.plugin.zsh | 3 +++ 2 files changed, 6 insertions(+) diff --git a/plugins/brew/README.md b/plugins/brew/README.md index fccda65b9..89c902ee4 100644 --- a/plugins/brew/README.md +++ b/plugins/brew/README.md @@ -22,6 +22,7 @@ the `brew` binary before sourcing `oh-my-zsh.sh` and it'll set up the environmen | Alias | Command | Description | | -------- | --------------------------------------- | --------------------------------------------------------------------- | | `ba` | `brew autoremove` | Uninstall unnecessary formulae. | +| `bcfg` | `brew config` | Show Homebrew and system configuration info useful for debugging. | | `bci` | `brew info --cask` | Display information about the given cask. | | `bcin` | `brew install --cask` | Install the given cask. | | `bcl` | `brew list --cask` | List installed casks. | @@ -31,6 +32,7 @@ the `brew` binary before sourcing `oh-my-zsh.sh` and it'll set up the environmen | `bcubc` | `brew upgrade --cask && brew cleanup` | Upgrade outdated casks, then run cleanup. | | `bcubo` | `brew update && brew outdated --cask` | Update Homebrew data, then list outdated casks. | | `bcup` | `brew upgrade --cask` | Upgrade all outdated casks. | +| `bdr` | `brew doctor` | Check your system for potential problems. | | `bfu` | `brew upgrade --formula` | Upgrade only formulae (not casks). | | `bi` | `brew install` | Install a formula. | | `bl` | `brew list` | List all installed formulae. | @@ -38,6 +40,7 @@ the `brew` binary before sourcing `oh-my-zsh.sh` and it'll set up the environmen | `brewp` | `brew pin` | Pin a specified formula so that it's not upgraded. | | `brews` | `brew list -1` | List installed formulae or the installed files for a given formula. | | `brewsp` | `brew list --pinned` | List pinned formulae, or show the version of a given formula. | +| `bs` | `brew search` | Perform a substring search of cask tokens and formula names for text. | | `bsl` | `brew services list` | List all running services. | | `bsoff` | `brew services stop` | Stop the service and unregister it from launching at login (or boot). | | `bsoffa` | `bsoff --all` | Stop all started services. | diff --git a/plugins/brew/brew.plugin.zsh b/plugins/brew/brew.plugin.zsh index 4dab6f413..432a36076 100644 --- a/plugins/brew/brew.plugin.zsh +++ b/plugins/brew/brew.plugin.zsh @@ -35,6 +35,7 @@ if [[ -d "$HOMEBREW_PREFIX/share/zsh/site-functions" ]]; then fi alias ba='brew autoremove' +alias bcfg='brew config' alias bci='brew info --cask' alias bcin='brew install --cask' alias bcl='brew list --cask' @@ -44,12 +45,14 @@ alias bcrin='brew reinstall --cask' alias bcubc='brew upgrade --cask && brew cleanup' alias bcubo='brew update && brew outdated --cask' alias bcup='brew upgrade --cask' +alias bdr='brew doctor' alias bfu='brew upgrade --formula' alias bi='brew install' alias bl='brew list' alias bo='brew outdated' alias brewp='brew pin' alias brewsp='brew list --pinned' +alias bs='brew search' alias bsl='brew services list' alias bsoff='brew services stop' alias bsoffa='bsoff --all' From 8c168e26625ac8376d9156b1b189cd2ae8c16dc7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Sep 2025 12:06:41 +0800 Subject: [PATCH 112/199] chore(deps): bump actions/setup-python from 5 to 6 (#13293) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index 7cc53371d..11c0ad0ef 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -24,7 +24,7 @@ jobs: app-id: ${{ secrets.OHMYZSH_APP_ID }} private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.12" cache: "pip" From 9e23925b8581d22033f07f1983587412d3761494 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Wed, 10 Sep 2025 09:30:04 +0800 Subject: [PATCH 113/199] fix(magic-enter): check for cmd existance before executing Closes #13294 --- plugins/magic-enter/magic-enter.plugin.zsh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/magic-enter/magic-enter.plugin.zsh b/plugins/magic-enter/magic-enter.plugin.zsh index cfb15b60e..722d747f3 100644 --- a/plugins/magic-enter/magic-enter.plugin.zsh +++ b/plugins/magic-enter/magic-enter.plugin.zsh @@ -10,9 +10,10 @@ magic-enter() { return fi - if command jj st >/dev/null 2>&1; then # needs to be before git to handle colocated repositories + # needs to be before git to handle colocated repositories + if (( $+commands[jj] )) && command jj st >/dev/null 2>&1; then BUFFER="$MAGIC_ENTER_JJ_COMMAND" - elif command git rev-parse --is-inside-work-tree >/dev/null 2>&1; then + elif (( $+commands[git] )) && command git rev-parse --is-inside-work-tree >/dev/null 2>&1; then BUFFER="$MAGIC_ENTER_GIT_COMMAND" else BUFFER="$MAGIC_ENTER_OTHER_COMMAND" From 2b2d6d746ca3ed6dfac26be331e49fa80a1191ab Mon Sep 17 00:00:00 2001 From: Denys Dovhan Date: Fri, 19 Sep 2025 16:39:50 +0300 Subject: [PATCH 114/199] fix(bgnotify): use lsappinfo, add support for ghostty (#13314) --- plugins/bgnotify/bgnotify.plugin.zsh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/bgnotify/bgnotify.plugin.zsh b/plugins/bgnotify/bgnotify.plugin.zsh index dca8250be..4c1613eed 100644 --- a/plugins/bgnotify/bgnotify.plugin.zsh +++ b/plugins/bgnotify/bgnotify.plugin.zsh @@ -60,8 +60,10 @@ function bgnotify_formatted { } function bgnotify_appid { - if (( ${+commands[osascript]} )); then - osascript -e "tell application id \"$(bgnotify_programid)\" to get the {id, frontmost, id of front window, visible of front window}" 2>/dev/null + if (( ${+commands[lsappinfo]} )); then + lsappinfo info -only bundleid "$(lsappinfo front)" | awk -F= '{print $2}' | tr -d '"' 2>/dev/null + elif (( ${+commands[osascript]} )); then + osascript -e "tell application id \"$(bgnotify_programid)\" to get the {id, frontmost, id of front window, visible of front window}" 2>/dev/null elif [[ -n $WAYLAND_DISPLAY ]] && ([[ -n $SWAYSOCK ]] || [[ -n $I3SOCK ]]) && (( ${+commands[swaymsg]} )); then # wayland+sway local app_id=$(bgnotify_find_sway_appid) [[ -n "$app_id" ]] && echo "$app_id" || echo $EPOCHSECONDS @@ -108,6 +110,7 @@ function bgnotify_programid { case "$TERM_PROGRAM" in iTerm.app) echo 'com.googlecode.iterm2' ;; Apple_Terminal) echo 'com.apple.terminal' ;; + ghostty) echo 'com.mitchellh.ghostty' ;; esac } From 34d6932b081055901ee95512eae5935a11bb51cd Mon Sep 17 00:00:00 2001 From: Lin <56944601+LinPr@users.noreply.github.com> Date: Fri, 19 Sep 2025 21:41:21 +0800 Subject: [PATCH 115/199] feat(task): add completion plugin (#13313) --- plugins/task/README.md | 9 +++++++++ plugins/task/task.plugin.zsh | 14 ++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 plugins/task/README.md create mode 100644 plugins/task/task.plugin.zsh diff --git a/plugins/task/README.md b/plugins/task/README.md new file mode 100644 index 000000000..606289bcd --- /dev/null +++ b/plugins/task/README.md @@ -0,0 +1,9 @@ +# Buf plugin + +This plugin adds completion for [Task CLI](https://taskfile.dev/), a fast, cross-platform build tool inspired by Make, designed for modern workflows. + +To use it, add `task` to the plugins array in your zshrc file: + +```zsh +plugins=(... task) +``` \ No newline at end of file diff --git a/plugins/task/task.plugin.zsh b/plugins/task/task.plugin.zsh new file mode 100644 index 000000000..86b21b3cd --- /dev/null +++ b/plugins/task/task.plugin.zsh @@ -0,0 +1,14 @@ +# Autocompletion for the task CLI (task). +if (( !$+commands[task] )); then + return +fi +# If the completion file doesn't exist yet, we need to autoload it and +# bind it to `task`. Otherwise, compinit will have already done that. +if [[ ! -f "$ZSH_CACHE_DIR/completions/_task" ]]; then + typeset -g -A _comps + autoload -Uz _task + _comps[task]=_task +fi + +# Generate and load task completion +task --completion zsh >! "$ZSH_CACHE_DIR/completions/_task" &| \ No newline at end of file From d3888251acae61f0ce2c7a780e97a5d2f406bd9f Mon Sep 17 00:00:00 2001 From: Paul Frederiksen Date: Fri, 19 Sep 2025 06:47:45 -0700 Subject: [PATCH 116/199] fix(check_for_upgrade): ensure compatibility with screen (#13302) Co-authored-by: Paul Frederiksen --- tools/check_for_upgrade.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh index 35391ea70..44dbb7b31 100644 --- a/tools/check_for_upgrade.sh +++ b/tools/check_for_upgrade.sh @@ -232,7 +232,7 @@ function handle_update() { # Ask for confirmation and only update on 'y', 'Y' or Enter # Otherwise just show a reminder for how to update - echo -n "[oh-my-zsh] Would you like to update? [Y/n] " + printf "[oh-my-zsh] Would you like to update? [Y/n] " read -r -k 1 option [[ "$option" = $'\n' ]] || echo case "$option" in @@ -280,7 +280,7 @@ case "$update_mode" in return 0 elif [[ "$EXIT_STATUS" -ne 0 ]]; then print -P "\n%F{red}[oh-my-zsh] There was an error updating:%f" - printf "\n${fg[yellow]}%s${reset_color}" "$ERROR" + printf "\n${fg[yellow]}%s${reset_color}" "${ERROR}" return 0 fi } always { From c1e9748909af0f26dfe45c98b1f5527c790e31c4 Mon Sep 17 00:00:00 2001 From: jayant011797 Date: Fri, 19 Sep 2025 19:21:23 +0530 Subject: [PATCH 117/199] docs(tldr): state that `tldr` should be installed separately (#13298) --- plugins/tldr/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/tldr/README.md b/plugins/tldr/README.md index fb91d9d1f..03b1dfc73 100644 --- a/plugins/tldr/README.md +++ b/plugins/tldr/README.md @@ -13,3 +13,6 @@ plugins=(... tldr) | Shortcut | Description | |------------------------------------|----------------------------------------------------------------------------| | Esc + tldr | add tldr before the previous command to see the tldr page for this command | + +## Note +You also need to install ```tldr```. From c87eb79140ac359cf4f71604ddbf7209e1282939 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Fri, 19 Sep 2025 15:58:21 +0200 Subject: [PATCH 118/199] feat(cli): only allow `omz pr test` on PRs with `testers needed` label (#13238) --- lib/cli.zsh | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/lib/cli.zsh b/lib/cli.zsh index 0b144e4e7..a002a5073 100644 --- a/lib/cli.zsh +++ b/lib/cli.zsh @@ -621,10 +621,48 @@ function _omz::pr::test { done (( $found )) || { - _omz::log error "could not found the ohmyzsh git remote. Aborting..." + _omz::log error "could not find the ohmyzsh git remote. Aborting..." return 1 } + # Check if Pull Request has the "testers needed" label + _omz::log info "checking if PR #$1 has the 'testers needed' label..." + local pr_json label label_id="MDU6TGFiZWw4NzY1NTkwNA==" + pr_json=$( + curl -fsSL \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "https://api.github.com/repos/ohmyzsh/ohmyzsh/pulls/$1" + ) + + if [[ $? -gt 0 || -z "$pr_json" ]]; then + _omz::log error "error when trying to fetch PR #$1 from GitHub." + return 1 + fi + + # Check if the label is present with jq or grep + if (( $+commands[jq] )); then + label="$(command jq ".labels.[] | select(.node_id == \"$label_id\")" <<< "$pr_json")" + else + label="$(command grep "\"$label_id\"" <<< "$pr_json" 2>/dev/null)" + fi + + # If a maintainer hasn't labeled the PR to test, explain the security risk + if [[ -z "$label" ]]; then + _omz::log warn "PR #$1 does not have the 'testers needed' label. This means that the PR" + _omz::log warn "has not been reviewed by a maintainer and may contain malicious code." + + # Ask for explicit confirmation: user needs to type "yes" to continue + _omz::log prompt "Do you want to continue testing it? [yes/N] " + builtin read -r + if [[ "${REPLY:l}" != yes ]]; then + _omz::log error "PR test canceled. Please ask a maintainer to review and label the PR." + return 1 + else + _omz::log warn "Continuing to check out and test PR #$1. Be careful!" + fi + fi + # Fetch pull request head _omz::log info "fetching PR #$1 to ohmyzsh/pull-$1..." command git fetch -f "$remote" refs/pull/$1/head:ohmyzsh/pull-$1 || { From 7f3d8a34e2d850b51782f0900151413b435296d4 Mon Sep 17 00:00:00 2001 From: StepSecurity Bot Date: Fri, 19 Sep 2025 08:30:10 -0700 Subject: [PATCH 119/199] ci: Harden GitHub Actions [StepSecurity] (#13318) --- .github/workflows/dependencies.yml | 11 ++++++++--- .github/workflows/installer.yml | 14 ++++++++++++-- .github/workflows/main.yml | 7 ++++++- .github/workflows/project.yml | 7 ++++++- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index 11c0ad0ef..3f448fe64 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -13,18 +13,23 @@ jobs: runs-on: ubuntu-latest if: github.repository == 'ohmyzsh/ohmyzsh' steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 + with: + egress-policy: audit + - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 0 - name: Authenticate as @ohmyzsh id: generate-token - uses: actions/create-github-app-token@v2 + uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4 with: app-id: ${{ secrets.OHMYZSH_APP_ID }} private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} - name: Setup Python - uses: actions/setup-python@v6 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: "3.12" cache: "pip" diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index 9e933350f..2d1de706a 100644 --- a/.github/workflows/installer.yml +++ b/.github/workflows/installer.yml @@ -25,8 +25,13 @@ jobs: - ubuntu-latest - macos-latest steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 + with: + egress-policy: audit + - name: Set up git repository - uses: actions/checkout@v5 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Install zsh if: runner.os == 'Linux' run: sudo apt-get update; sudo apt-get install zsh @@ -41,8 +46,13 @@ jobs: needs: - test steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 + with: + egress-policy: audit + - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Install Vercel CLI run: npm install -g vercel - name: Setup project and deploy diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c49324495..b48a3d32b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,8 +23,13 @@ jobs: runs-on: ubuntu-latest if: github.repository == 'ohmyzsh/ohmyzsh' steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 + with: + egress-policy: audit + - name: Set up git repository - uses: actions/checkout@v5 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Install zsh run: sudo apt-get update; sudo apt-get install zsh - name: Check syntax diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index 8fd4e15d4..ba971db15 100644 --- a/.github/workflows/project.yml +++ b/.github/workflows/project.yml @@ -16,9 +16,14 @@ jobs: runs-on: ubuntu-latest if: github.repository == 'ohmyzsh/ohmyzsh' steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 + with: + egress-policy: audit + - name: Authenticate as @ohmyzsh id: generate-token - uses: actions/create-github-app-token@v2 + uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4 with: app-id: ${{ secrets.OHMYZSH_APP_ID }} private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} From ddd77516efb1393af738e57de9522e091c63c5b6 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Fri, 19 Sep 2025 17:55:16 +0200 Subject: [PATCH 120/199] ci: add scorecard automatic update (#13319) --- .github/workflows/scorecard.yml | 65 +++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 .github/workflows/scorecard.yml diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml new file mode 100644 index 000000000..5654fb74b --- /dev/null +++ b/.github/workflows/scorecard.yml @@ -0,0 +1,65 @@ +# This workflow uses actions that are not certified by GitHub. They are provided +# by a third-party and are governed by separate terms of service, privacy +# policy, and support documentation. + +name: Scorecard supply-chain security +on: + # For Branch-Protection check. Only the default branch is supported. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection + branch_protection_rule: + # To guarantee Maintained check is occasionally updated. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained + schedule: + - cron: '20 7 * * 2' + push: + branches: ["master"] + +# Declare default permissions as read only. +permissions: read-all + +jobs: + analysis: + name: Scorecard analysis + runs-on: ubuntu-latest + permissions: + # Needed to upload the results to code-scanning dashboard. + security-events: write + # Needed to publish results and get a badge (see publish_results below). + id-token: write + contents: read + actions: read + # To allow GraphQL ListCommits to work + issues: read + pull-requests: read + # To detect SAST tools + checks: read + + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 + with: + egress-policy: audit + + - name: "Checkout code" + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0 + with: + results_file: results.sarif + results_format: sarif + publish_results: true + + - name: "Upload artifact" + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3 + with: + sarif_file: results.sarif From b428e3177022a5d2c026a670ff9df64fcb704ec2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 10:50:42 +0200 Subject: [PATCH 121/199] chore(deps): bump actions/checkout from 4.3.0 to 5.0.0 (#13323) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 5654fb74b..49b21cbd9 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -41,7 +41,7 @@ jobs: egress-policy: audit - name: "Checkout code" - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false From 58cba614652ce8115138fef5c7d80c8a0c0a58f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 10:50:59 +0200 Subject: [PATCH 122/199] chore(deps): bump ossf/scorecard-action from 2.4.0 to 2.4.2 (#13322) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 49b21cbd9..c366b95bc 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -46,7 +46,7 @@ jobs: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0 + uses: ossf/scorecard-action@05b42c624433fc40578a4040d5cf5e36ddca8cde # v2.4.2 with: results_file: results.sarif results_format: sarif From 763aab3271f4bbe3b41caabd28088b7fb31abae4 Mon Sep 17 00:00:00 2001 From: Christian Kilmer <109920997+ChristianKilmer@users.noreply.github.com> Date: Tue, 23 Sep 2025 05:57:21 -0400 Subject: [PATCH 123/199] fix(command-not-found): support latest homebrew (#13327) Co-authored-by: Carlo Sala --- plugins/command-not-found/command-not-found.plugin.zsh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/command-not-found/command-not-found.plugin.zsh b/plugins/command-not-found/command-not-found.plugin.zsh index c741e18a2..85d778004 100644 --- a/plugins/command-not-found/command-not-found.plugin.zsh +++ b/plugins/command-not-found/command-not-found.plugin.zsh @@ -4,6 +4,10 @@ for file ( # Arch Linux. Must have pkgfile installed: https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found /usr/share/doc/pkgfile/command-not-found.zsh # Homebrew: https://github.com/Homebrew/homebrew-command-not-found + /opt/homebrew/Library/Homebrew/command-not-found/handler.sh + /usr/local/Homebrew/Library/Homebrew/command-not-found/handler.sh + /home/linuxbrew/.linuxbrew/Homebrew/Library/Homebrew/command-not-found/handler.sh + # Old homebrew implementation /opt/homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh /usr/local/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh /home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh From 6d5482ef59d1a3ae3b40b4583317ebe802f81447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Sat, 27 Sep 2025 15:56:46 +0200 Subject: [PATCH 124/199] chore: remove obsolete gitpod integration (#13334) --- .gitpod.Dockerfile | 5 ----- .gitpod.yml | 9 --------- README.md | 1 - 3 files changed, 15 deletions(-) delete mode 100644 .gitpod.Dockerfile delete mode 100644 .gitpod.yml diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile deleted file mode 100644 index b35c80dfb..000000000 --- a/.gitpod.Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM gitpod/workspace-full - -RUN sudo apt-get update && \ - sudo apt-get install -y zsh && \ - sudo rm -rf /var/lib/apt/lists/* diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index ccc57242c..000000000 --- a/.gitpod.yml +++ /dev/null @@ -1,9 +0,0 @@ -image: - file: .gitpod.Dockerfile - -tasks: - - init: | - export EDITOR="command gp open -w" VISUAL="command gp open -w" - cp -f /workspace/ohmyzsh/templates/zshrc.zsh-template ~/.zshrc - ln -sf /workspace/ohmyzsh ~/.oh-my-zsh - command: exec zsh diff --git a/README.md b/README.md index 7f57ed55e..55bfa0c5a 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,6 @@ Twitter), and join us on [Discord](https://discord.gg/ohmyzsh). [![X (formerly Twitter) Follow](https://img.shields.io/twitter/follow/ohmyzsh?label=%40ohmyzsh&logo=x&style=flat)](https://twitter.com/intent/follow?screen_name=ohmyzsh) [![Mastodon Follow](https://img.shields.io/mastodon/follow/111169632522566717?label=%40ohmyzsh&domain=https%3A%2F%2Fmstdn.social&logo=mastodon&style=flat)](https://mstdn.social/@ohmyzsh) [![Discord server](https://img.shields.io/discord/642496866407284746)](https://discord.gg/ohmyzsh) -[![Gitpod ready](https://img.shields.io/badge/Gitpod-ready-blue?logo=gitpod)](https://gitpod.io/#https://github.com/ohmyzsh/ohmyzsh)
Table of Contents From 242e2faa51675494cbfa78a81f3ff47d81039863 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Sat, 27 Sep 2025 20:00:50 +0200 Subject: [PATCH 125/199] ci: improve security in project.yml workflow (#13329) There is no inherent security vulnerability in the workflow, but there were certain practices that increased latent risk. In this commit, we: - Explicitly bind app token for each step that needs it, instead of setting it for all steps after "Store app token" - Refactor "classify" step, to not rely on files passed around, and instead uses only awk script. - Remove all instances of template injection within `run` scripts. There was nothing dangerous, but the practice is unsafe. - Sanitize all unwanted characters from PR plugin and theme names. References: W2M1-06 W2M1-07 --- .github/workflows/project.yml | 64 +++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index ba971db15..e6da2cbe5 100644 --- a/.github/workflows/project.yml +++ b/.github/workflows/project.yml @@ -20,17 +20,15 @@ jobs: uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 with: egress-policy: audit - - name: Authenticate as @ohmyzsh id: generate-token uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4 with: app-id: ${{ secrets.OHMYZSH_APP_ID }} private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} - - name: Store app token - run: echo "GH_TOKEN=${{ steps.generate-token.outputs.token }}" >> "$GITHUB_ENV" - name: Read project data env: + GH_TOKEN: ${{ steps.generate-token.outputs.token }} ORGANIZATION: ohmyzsh PROJECT_NUMBER: "1" run: | @@ -53,14 +51,14 @@ jobs: }' -f org=$ORGANIZATION -F number=$PROJECT_NUMBER > project_data.json # Parse project data - cat >> $GITHUB_ENV <> "$GITHUB_ENV" <> $GITHUB_ENV - - name: Classify Pull Request if: github.event_name == 'pull_request_target' + env: + GH_TOKEN: ${{ steps.generate-token.outputs.token }} + PR_NUMBER: ${{ github.event.pull_request.number }} run: | - touch plugins.list themes.list - - gh pr view ${{ github.event.pull_request.number }} \ - --repo ${{ github.repository }} \ + # Get the list of modified files in the PR, and extract plugins and themes + gh pr view "$PR_NUMBER" \ + --repo "$GITHUB_REPOSITORY" \ --json files --jq '.files.[].path' | awk -F/ ' + BEGIN { + plugins = 0 + themes = 0 + } /^plugins\// { - plugins[$2] = 1 + if (plugin == $2) next + plugin = $2 + plugins++ } /^themes\// { gsub(/\.zsh-theme$/, "", $2) - themes[$2] = 1 + if (theme == $2) next + theme = $2 + themes++ } END { - for (plugin in plugins) { - print plugin >> "plugins.list" + # plugin and theme are values controlled by the PR author + # so we should sanitize them before using anywhere else + if (plugins == 1) { + gsub(/[^a-zA-Z0-9._-]/, "", plugin) + print "PLUGIN=" plugin } - for (theme in themes) { - print theme >> "themes.list" + if (themes == 1) { + gsub(/[^a-zA-Z0-9._-]/, "", theme) + print "THEME=" theme } } - ' - # If only one plugin is modified, add it to the plugin field - if [[ $(wc -l < plugins.list) = 1 ]]; then - echo "PLUGIN=$(cat plugins.list)" >> $GITHUB_ENV - fi - # If only one theme is modified, add it to the theme field - if [[ $(wc -l < themes.list) = 1 ]]; then - echo "THEME=$(cat themes.list)" >> $GITHUB_ENV - fi - + ' >> "$GITHUB_ENV" - name: Fill Pull Request fields in project if: github.event_name == 'pull_request_target' + env: + GH_TOKEN: ${{ steps.generate-token.outputs.token }} run: | gh api graphql -f query=' mutation ( @@ -145,7 +149,7 @@ jobs: } } } - ' -f project=$PROJECT_ID -f item=$ITEM_ID \ - -f plugin_field=$PLUGIN_FIELD_ID -f plugin_value=$PLUGIN \ - -f theme_field=$THEME_FIELD_ID -f theme_value=$THEME \ + ' -f project="$PROJECT_ID" -f item="$ITEM_ID" \ + -f plugin_field="$PLUGIN_FIELD_ID" -f plugin_value="$PLUGIN" \ + -f theme_field="$THEME_FIELD_ID" -f theme_value="$THEME" \ --silent From e7528a5b373568591b0ba4f5c0fe1b552c0d6874 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 08:27:53 +0200 Subject: [PATCH 126/199] chore(deps): bump github/codeql-action from 3.30.3 to 3.30.5 (#13336) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index c366b95bc..e6ff44e4a 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -60,6 +60,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3 + uses: github/codeql-action/upload-sarif@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 with: sarif_file: results.sarif From 9ac3b895d426dfdd000b8ae884a8bf9d42840839 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 08:31:23 +0200 Subject: [PATCH 127/199] chore(deps): bump pyyaml in /.github/workflows/dependencies (#13337) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index 7388ed765..441426dcf 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,7 +1,7 @@ certifi==2025.8.3 charset-normalizer==3.4.3 idna==3.10 -PyYAML==6.0.2 +PyYAML==6.0.3 requests==2.32.5 semver==3.0.4 urllib3==2.5.0 From 1237525b23abf2ad785c7ed434093a11261c71b0 Mon Sep 17 00:00:00 2001 From: DE SILVA T R R Date: Mon, 29 Sep 2025 12:02:18 +0530 Subject: [PATCH 128/199] docs(common-aliases): fix tar.gz command (#13332) --- plugins/common-aliases/README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/common-aliases/README.md b/plugins/common-aliases/README.md index 1417c3056..79e3d0d0f 100644 --- a/plugins/common-aliases/README.md +++ b/plugins/common-aliases/README.md @@ -114,13 +114,13 @@ that file will be open with `acroread`. ### Listing files inside a packed file -| Alias | Command | Description | -| ------ | ---------- | --------------------------------- | -| zip | `unzip -l` | Lists files inside a .zip file | -| rar | `unrar l` | Lists files inside a .rar file | -| tar | `tar tf` | Lists files inside a .tar file | -| tar.gz | `echo` | Lists files inside a .tar.gz file | -| ace | `unace l` | Lists files inside a .ace file | +| Alias | Command | Description | +| ------ | ------------ | --------------------------------- | +| zip | `unzip -l` | Lists files inside a .zip file | +| rar | `unrar l` | Lists files inside a .rar file | +| tar | `tar tf` | Lists files inside a .tar file | +| tar.gz | `tar -ztf` | Lists files inside a .tar.gz file | +| ace | `unace l` | Lists files inside a .ace file | ### Some other features From d57775d89e15687b87eef990b864492d6c973238 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Mon, 29 Sep 2025 08:41:24 +0200 Subject: [PATCH 129/199] fix(git): replace `whatchanged` with `log` (#13338) Closes #13333 --- plugins/git/README.md | 4 ++-- plugins/git/git.plugin.zsh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/git/README.md b/plugins/git/README.md index edddc8cd8..0ecbea7b6 100644 --- a/plugins/git/README.md +++ b/plugins/git/README.md @@ -91,7 +91,7 @@ plugins=(... git) | `gdnolock` | `git diff $@ ":(exclude)package-lock.json" ":(exclude)\*.lock"` | | `gdt` | `git diff-tree --no-commit-id --name-only -r` | | `gf` | `git fetch` | -| `gfa` | `git fetch --all --tags --prune` | +| `gfa` | `git fetch --all --tags --prune` | | `gfo` | `git fetch origin` | | `gg` | `git gui citool` | | `gga` | `git gui citool --amend` | @@ -213,7 +213,7 @@ plugins=(... git) | `gtv` | `git tag \| sort -V` | | `gignore` | `git update-index --assume-unchanged` | | `gunignore` | `git update-index --no-assume-unchanged` | -| `gwch` | `git whatchanged -p --abbrev-commit --pretty=medium` | +| `gwch` | `git log --patch --abbrev-commit --pretty=medium --raw` | | `gwt` | `git worktree` | | `gwtls` | `git worktree list` | | `gwtmv` | `git worktree move` | diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index 830c18939..adca1c3c5 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -409,7 +409,7 @@ alias gts='git tag --sign' alias gtv='git tag | sort -V' alias gignore='git update-index --assume-unchanged' alias gunignore='git update-index --no-assume-unchanged' -alias gwch='git whatchanged -p --abbrev-commit --pretty=medium' +alias gwch='git log --patch --abbrev-commit --pretty=medium --raw' alias gwt='git worktree' alias gwta='git worktree add' alias gwtls='git worktree list' From 1210973cbc978097adfa8f31becf5fe4e2acce99 Mon Sep 17 00:00:00 2001 From: Ardeshir Nahavandi Fard <68429735+Vonarian@users.noreply.github.com> Date: Sun, 5 Oct 2025 10:46:44 +0330 Subject: [PATCH 130/199] fix(flutter): fix captured keyboard during completion generation (#13350) --- plugins/flutter/flutter.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/flutter/flutter.plugin.zsh b/plugins/flutter/flutter.plugin.zsh index 44d196cd4..5e853b78f 100644 --- a/plugins/flutter/flutter.plugin.zsh +++ b/plugins/flutter/flutter.plugin.zsh @@ -26,4 +26,4 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_flutter" ]]; then _comps[flutter]=_flutter fi -flutter zsh-completion >| "$ZSH_CACHE_DIR/completions/_flutter" &| \ No newline at end of file +flutter zsh-completion < /dev/null >| "$ZSH_CACHE_DIR/completions/_flutter" &| \ No newline at end of file From 182dfdf210f961f141903fdd36f65350bcedc904 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 09:21:34 +0200 Subject: [PATCH 131/199] chore(deps): bump ossf/scorecard-action from 2.4.2 to 2.4.3 (#13352) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index e6ff44e4a..31c420581 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -46,7 +46,7 @@ jobs: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@05b42c624433fc40578a4040d5cf5e36ddca8cde # v2.4.2 + uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3 with: results_file: results.sarif results_format: sarif From d4cb4f249c365ba921840f1a4279ffd55d09e9a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 09:21:45 +0200 Subject: [PATCH 132/199] chore(deps): bump certifi in /.github/workflows/dependencies (#13353) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index 441426dcf..0531f9f0a 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,4 +1,4 @@ -certifi==2025.8.3 +certifi==2025.10.5 charset-normalizer==3.4.3 idna==3.10 PyYAML==6.0.3 From c6482fa5be724e9504c6ffe92203440e4c3239b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 09:21:58 +0200 Subject: [PATCH 133/199] chore(deps): bump github/codeql-action from 3.30.5 to 3.30.6 (#13351) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 31c420581..cfaa5f03e 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -60,6 +60,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 + uses: github/codeql-action/upload-sarif@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6 with: sarif_file: results.sarif From 853680fd621a8907338e0eee080dc6cf754408bf Mon Sep 17 00:00:00 2001 From: Paul Frederiksen Date: Thu, 9 Oct 2025 03:52:09 -0700 Subject: [PATCH 134/199] fix(history-substring-search): honor `CASE_SENSITIVE` variable (#13360) --- .../history-substring-search.zsh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plugins/history-substring-search/history-substring-search.zsh b/plugins/history-substring-search/history-substring-search.zsh index 9f0e0b0d5..db516f580 100644 --- a/plugins/history-substring-search/history-substring-search.zsh +++ b/plugins/history-substring-search/history-substring-search.zsh @@ -45,7 +45,14 @@ : ${HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='bg=magenta,fg=white,bold'} : ${HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=white,bold'} -: ${HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i'} + +# Respect CASE_SENSITIVE setting for case sensitivity +if [[ "$CASE_SENSITIVE" = true ]]; then + : ${HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS=''} +else + : ${HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i'} +fi + : ${HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=''} : ${HISTORY_SUBSTRING_SEARCH_FUZZY=''} : ${HISTORY_SUBSTRING_SEARCH_PREFIXED=''} From c5f64018fffbffe6624690e929b6ff745514336b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Oct 2025 11:57:33 +0200 Subject: [PATCH 135/199] chore(deps): bump github/codeql-action from 3.30.6 to 4.30.8 (#13364) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index cfaa5f03e..7f1769540 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -60,6 +60,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6 + uses: github/codeql-action/upload-sarif@f443b600d91635bebf5b0d9ebc620189c0d6fba5 # v4.30.8 with: sarif_file: results.sarif From d1c04d8a33f9127d03b69617c5367db5ceebc8a7 Mon Sep 17 00:00:00 2001 From: Oleg Atamanenko Date: Wed, 15 Oct 2025 02:13:54 -0700 Subject: [PATCH 136/199] chore(task): fix error in README (#13367) --- plugins/task/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/task/README.md b/plugins/task/README.md index 606289bcd..4ef931c03 100644 --- a/plugins/task/README.md +++ b/plugins/task/README.md @@ -1,4 +1,4 @@ -# Buf plugin +# Task plugin This plugin adds completion for [Task CLI](https://taskfile.dev/), a fast, cross-platform build tool inspired by Make, designed for modern workflows. From 064f0c1d0adbe5a4a4a239eab452f80ad0a7ee20 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 11:28:57 +0300 Subject: [PATCH 137/199] chore(deps): bump idna in /.github/workflows/dependencies (#13377) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index 0531f9f0a..d6757a0f6 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,6 +1,6 @@ certifi==2025.10.5 charset-normalizer==3.4.3 -idna==3.10 +idna==3.11 PyYAML==6.0.3 requests==2.32.5 semver==3.0.4 From 1672a12704798353725a5d559acc3917adb0075e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 11:29:15 +0300 Subject: [PATCH 138/199] chore(deps): bump github/codeql-action from 4.30.8 to 4.30.9 (#13376) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 7f1769540..d2e0ff01b 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -60,6 +60,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@f443b600d91635bebf5b0d9ebc620189c0d6fba5 # v4.30.8 + uses: github/codeql-action/upload-sarif@16140ae1a102900babc80a33c44059580f687047 # v4.30.9 with: sarif_file: results.sarif From 8337a07400cbdb1123df51ddd88fb4cf349c30b1 Mon Sep 17 00:00:00 2001 From: Olexandr88 Date: Tue, 21 Oct 2025 11:32:28 +0300 Subject: [PATCH 139/199] chore: update license year (#13369) --- LICENSE.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE.txt b/LICENSE.txt index 2d7ca6f52..a1366bdbc 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2009-2022 Robby Russell and contributors (https://github.com/ohmyzsh/ohmyzsh/contributors) +Copyright (c) 2009-2025 Robby Russell and contributors (https://github.com/ohmyzsh/ohmyzsh/contributors) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From ac9258296117df625ba69d8e3cd1fe4883062c2b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 11:33:03 +0300 Subject: [PATCH 140/199] chore(deps): bump charset-normalizer in /.github/workflows/dependencies (#13378) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index d6757a0f6..cc8b0a28f 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,5 +1,5 @@ certifi==2025.10.5 -charset-normalizer==3.4.3 +charset-normalizer==3.4.4 idna==3.11 PyYAML==6.0.3 requests==2.32.5 From caba9ae0347b5b52b65bccc27ff420cb77b71720 Mon Sep 17 00:00:00 2001 From: Florian Date: Tue, 21 Oct 2025 10:42:04 +0200 Subject: [PATCH 141/199] fix(ssh): use `grep -E` instead of `egrep` (#13380) --- plugins/ssh/ssh.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/ssh/ssh.plugin.zsh b/plugins/ssh/ssh.plugin.zsh index b5b050536..24ad88028 100644 --- a/plugins/ssh/ssh.plugin.zsh +++ b/plugins/ssh/ssh.plugin.zsh @@ -5,7 +5,7 @@ _ssh_configfile="$HOME/.ssh/config" if [[ -f "$_ssh_configfile" ]]; then _ssh_hosts=($( - egrep '^Host.*' "$_ssh_configfile" |\ + grep -E '^Host.*' "$_ssh_configfile" |\ awk '{for (i=2; i<=NF; i++) print $i}' |\ sort |\ uniq |\ From f1934d2c769e43d87fd6b2138bed90ed6b1455fe Mon Sep 17 00:00:00 2001 From: hanskr Date: Tue, 21 Oct 2025 10:48:56 +0200 Subject: [PATCH 142/199] fix(git): improve ggu, ggl, gp, ggfl, ggp functions (#13370) Co-authored-by: Hans Kristian Kismul --- plugins/git/git.plugin.zsh | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index adca1c3c5..a0052891a 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -280,10 +280,11 @@ alias gpra='git pull --rebase --autostash' alias gprav='git pull --rebase --autostash -v' function ggu() { - [[ "$#" != 1 ]] && local b="$(git_current_branch)" - git pull --rebase origin "${b:=$1}" + local b + [[ "$#" != 1 ]] && b="$(git_current_branch)" + git pull --rebase origin "${b:-$1}" } -compdef _git ggu=git-checkout +compdef _git ggu=git-pull alias gprom='git pull --rebase origin $(git_main_branch)' alias gpromi='git pull --rebase=interactive origin $(git_main_branch)' @@ -295,11 +296,12 @@ function ggl() { if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then git pull origin "${*}" else - [[ "$#" == 0 ]] && local b="$(git_current_branch)" - git pull origin "${b:=$1}" + local b + [[ "$#" == 0 ]] && b="$(git_current_branch)" + git pull origin "${b:-$1}" fi } -compdef _git ggl=git-checkout +compdef _git ggl=git-pull alias gluc='git pull upstream $(git_current_branch)' alias glum='git pull upstream $(git_main_branch)' @@ -307,10 +309,11 @@ alias gp='git push' alias gpd='git push --dry-run' function ggf() { - [[ "$#" != 1 ]] && local b="$(git_current_branch)" - git push --force origin "${b:=$1}" + local b + [[ "$#" != 1 ]] && b="$(git_current_branch)" + git push --force origin "${b:-$1}" } -compdef _git ggf=git-checkout +compdef _git ggf=git-push alias gpf!='git push --force' is-at-least 2.30 "$git_version" \ @@ -318,10 +321,11 @@ is-at-least 2.30 "$git_version" \ || alias gpf='git push --force-with-lease' function ggfl() { - [[ "$#" != 1 ]] && local b="$(git_current_branch)" - git push --force-with-lease origin "${b:=$1}" + local b + [[ "$#" != 1 ]] && b="$(git_current_branch)" + git push --force-with-lease origin "${b:-$1}" } -compdef _git ggfl=git-checkout +compdef _git ggfl=git-push alias gpsup='git push --set-upstream origin $(git_current_branch)' is-at-least 2.30 "$git_version" \ @@ -336,11 +340,12 @@ function ggp() { if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then git push origin "${*}" else - [[ "$#" == 0 ]] && local b="$(git_current_branch)" - git push origin "${b:=$1}" + local b + [[ "$#" == 0 ]] && b="$(git_current_branch)" + git push origin "${b:-$1}" fi } -compdef _git ggp=git-checkout +compdef _git ggp=git-push alias gpu='git push upstream' alias grb='git rebase' From bd295c014f47ac2462d6145f87ae627ae765860f Mon Sep 17 00:00:00 2001 From: Jeconias Santos Date: Wed, 22 Oct 2025 14:12:22 -0300 Subject: [PATCH 143/199] feat(terraform): add aliases for workspace management (#12845) --- plugins/terraform/README.md | 3 +++ plugins/terraform/terraform.plugin.zsh | 3 +++ 2 files changed, 6 insertions(+) diff --git a/plugins/terraform/README.md b/plugins/terraform/README.md index 6c139ac51..48fdae282 100644 --- a/plugins/terraform/README.md +++ b/plugins/terraform/README.md @@ -35,6 +35,9 @@ plugins=(... terraform) | `tfs` | `terraform state` | | `tft` | `terraform test` | | `tfsh` | `terraform show` | +| `tfw` | `terraform workspace` | +| `tfwl` | `terraform workspace list` | +| `tfws` | `terraform workspace select` | ## Prompt function diff --git a/plugins/terraform/terraform.plugin.zsh b/plugins/terraform/terraform.plugin.zsh index 0982fa193..b0054d56a 100644 --- a/plugins/terraform/terraform.plugin.zsh +++ b/plugins/terraform/terraform.plugin.zsh @@ -33,3 +33,6 @@ alias tfv='terraform validate' alias tfs='terraform state' alias tft='terraform test' alias tfsh='terraform show' +alias tfw='terraform workspace' +alias tfwl='terraform workspace list' +alias tfws='terraform workspace select' From 38423b4b5ce1ebbcded814642706a5fc300eadda Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Thu, 23 Oct 2025 05:16:17 -0700 Subject: [PATCH 144/199] ci(deps): ensure push permissions are available (#13389) --- .github/workflows/dependencies.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index 3f448fe64..be54fdf41 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -5,7 +5,7 @@ on: - cron: "0 6 * * 0" permissions: - contents: read + contents: write jobs: check: From 55aa4c40e235cceb458689182e8e13f6cd99ca69 Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Thu, 23 Oct 2025 05:23:50 -0700 Subject: [PATCH 145/199] feat(gradle): update to d51199b5 (#13390) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/gradle/_gradle | 349 +++++++++++++++++++++++---------------- 2 files changed, 211 insertions(+), 140 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index b67a4c7ed..8e01a3548 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -12,7 +12,7 @@ dependencies: plugins/gradle: repo: gradle/gradle-completion branch: master - version: 25da917cf5a88f3e58f05be3868a7b2748c8afe6 + version: d51199b54e5b6d7b5a6e37d8a3badc3df7efd8ee precopy: | set -e find . ! -name _gradle ! -name LICENSE -delete diff --git a/plugins/gradle/_gradle b/plugins/gradle/_gradle index ca13fd0b0..369cbc140 100644 --- a/plugins/gradle/_gradle +++ b/plugins/gradle/_gradle @@ -19,18 +19,18 @@ __gradle-init-cache-dir() { } __gradle-set-settings-file() { - # In order of precedence: --settings-file=filename, settings.gradle, settings.gradle.kts + # In order of precedence: settings.gradle, settings.gradle.kts local default_gradle_settings_file="$project_root_dir/settings.gradle" if [[ ! -f $default_gradle_settings_file ]]; then default_gradle_settings_file="$project_root_dir/settings.gradle.kts" fi - gradle_settings_file=${${(v)opt_args[(i)-c|--settings-file]}:-$default_gradle_settings_file} + gradle_settings_file=$default_gradle_settings_file } __gradle-set-build-file() { __gradle-set-settings-file - # In order of precedence: --build-file=filename, rootProject.buildFileName, build.gradle, build.gradle.kts + # In order of precedence: rootProject.buildFileName, build.gradle, build.gradle.kts local default_gradle_build_file_name="build.gradle" if [[ -r $gradle_settings_file ]]; then @@ -45,8 +45,7 @@ __gradle-set-build-file() { default_gradle_build_file="$project_root_dir/build.gradle.kts" fi - # If a build file is specified after '-b' or '--build-file', use this file. - gradle_build_file=${${(v)opt_args[(i)-b|--build-file]}:-$default_gradle_build_file} + gradle_build_file=$default_gradle_build_file } __gradle-set-cache-name() { @@ -94,10 +93,11 @@ __gradle-generate-tasks-cache() { # Reuse Gradle Daemon if IDLE but don't start a new one. local gradle_tasks_output if [[ ! -z "$($gradle_cmd --status 2>/dev/null | grep IDLE)" ]]; then - gradle_tasks_output="$($gradle_cmd --daemon --no-scan --build-file $gradle_build_file --console=plain -q tasks --all 2>/dev/null)" + gradle_tasks_output="$(cd "$project_root_dir" && "$gradle_cmd" --daemon --no-scan --console=plain -q tasks --all 2>/dev/null)" else - gradle_tasks_output="$($gradle_cmd --no-daemon --no-scan --build-file $gradle_build_file --console=plain -q tasks --all 2>/dev/null)" + gradle_tasks_output="$(cd "$project_root_dir" && "$gradle_cmd" --no-daemon --no-scan --console=plain -q tasks --all 2>/dev/null)" fi + local gradle_all_tasks="" root_tasks="" subproject_tasks="" output_line local -a match for output_line in ${(f)"$(printf "%s\n" "${gradle_tasks_output[@]}")"}; do @@ -235,70 +235,106 @@ __gradle_subcommand() { ;; (*) _arguments -C \ - {-a,--no-rebuild}'[Do not rebuild project dependencies.]' \ - '(--no-build-cache)--build-cache[Enable the Gradle build cache.]' \ - {-b,--build-file}'[Specifies the build file.]:build script:_files -g \*.gradle' \ - {-C,--cache}'[Specifies how compiled build scripts should be cached.]:cache policy:(on rebuild)' \ - {-c,--settings-file}'[Specifies the settings file.]:settings file:_files -g \*.gradle' \ - '(--configuration-cache)--no-configuration-cache[Disables the configuration cache. Gradle will not reuse the build configuration from previous builds.]' \ - '--configuration-cache-problems=[Configures how the configuration cache handles problems]:problem handling:(fail warn)' \ - '(--no-configure-on-demand)--configure-on-demand[Only relevant projects are configured in this build run.]' \ - '(--no-configuration-cache)--configuration-cache[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \ - '--console=[Specifies which type of console output to generate.]:console output type:(plain auto rich verbose)' \ - '--continue[Continues task execution after a task failure.]' \ - '-Dorg.gradle.cache.reserved.mb=[Reserve Gradle Daemon memory for operations.]' \ - '-Dorg.gradle.caching=[Set true to enable Gradle build cache.]:enable build cache:(true false)' \ - '-Dorg.gradle.console=[Set type of console output to generate.]:console output type:(plain auto rich verbose)' \ - '-Dorg.gradle.daemon.debug=[Set true to debug Gradle Daemon.]:enable daemon debug:(true false)' \ - '-Dorg.gradle.daemon.idletimeout=[Kill Gradle Daemon after # idle millis.]' \ - '-Dorg.gradle.debug=[Set true to debug Gradle Client.]' \ - '-Dorg.gradle.jvmargs=[Set JVM arguments.]' \ - '-Dorg.gradle.java.home=[Set JDK home dir.]' \ - '-Dorg.gradle.logging.level=[Set default Gradle log level.]:log level:(quiet warn lifecycle info debug)' \ - '-Dorg.gradle.parallel=[Set true to enable parallel project builds.]:enable parallel build:(true false)' \ - '-Dorg.gradle.priority=[Set priority for Gradle worker processes.]:priority:(low normal)' \ - '-Dorg.gradle.unsafe.watch-fs=[Set true to enable Gradle file watcher.]:enable watcher:(true false)' \ - '-Dorg.gradle.warning.mode=[Set types of warnings to log.]:warning level:(all summary none)' \ - '-Dorg.gradle.workers.max=[Set the number of workers Gradle is allowed to use.]' \ - '(-i --info -w --warn -q --quiet)'{-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \ - '(--no-daemon)--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \ - '--foreground[Starts the Gradle daemon in the foreground.]' \ - {-g,--gradle-user-home}'[Specifies the gradle user home directory.]:file:_directories' \ - \*--include-build'[Includes the specified build in the composite.]:file:_directories' \ - \*{-I,--init-script}'[Specifies an initialization script.]:init script:_files -g \*.gradle' \ - '(-d --debug -w --warn -q --quiet)'{-i,--info}'[Set log level to info.]' \ - '--max-workers[Set the maximum number of concurrent workers that Gradle may use.]:number workers' \ - {-m,--dry-run}'[Runs the builds with all task actions disabled.]' \ - '--no-color[Do not use color in the console output. (Removed in Gradle 3.0)]' \ - '(--build-cache)--no-build-cache[Do not use the Gradle build cache.]' \ - '(--configure-on-demand)--no-configure-on-demand[Disables configuration on demand.]' \ - '(--daemon)--no-daemon[Do not use the Gradle daemon to run the build.]' \ - '(--parallel)--no-parallel[Disables parallel execution to build projects.]' \ - '(--scan)--no-scan[Do not create a build scan.]' \ - '--offline[The build should operate without accessing network resources.]' \ - \*{-P+,--project-prop}'[Set project property for the build script (e.g. -Pmyprop=myvalue).]:project property (prop=val):' \ - {-p,--project-dir}'[Specifies the start directory for Gradle.]:start directory:_directories' \ - '(--no-parallel)--parallel[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]' \ - '--profile[Profiles build execution time and generates a report in the /reports/profile directory.]' \ - '--priority[Set priority for Gradle worker processes.]:priority:(low normal)' \ - '--project-cache-dir[Specifies the project-specific cache directory.]:cache directory:_directories' \ - '(-d --debug -w --warn -i --info)'{-q,--quiet}'[Log errors only.]' \ - '--recompile-scripts[Force build script recompiling.]' \ - '--refresh[Refresh the state of resources of the type(s) specified.]:refresh policy:(dependencies)' \ - '--refresh-dependencies[Refresh the state of dependencies.]' \ - '--rerun-tasks[Ignore previously cached task results.]' \ - '(--no-scan)--scan[Create a build scan.]' \ - '(-S --full-stacktrace)'{-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \ - '(-s --stacktrace)'{-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \ - '--system-prop[system property (prop=val)]' \ + '-Dgradle.user.home=[Specifies the Gradle user home directory. Defaults to ~/.gradle]:gradle.user.home:_directories' \ + '-Dorg.gradle.caching.debug=[]' \ + '-Dorg.gradle.caching=[Enables the Gradle build cache. Gradle will try to reuse outputs from previous builds.]:org.gradle.caching:(true false)' \ + '-Dorg.gradle.configuration-cache.entries-per-key=[]' \ + '-Dorg.gradle.configuration-cache.fine-grained-property-tracking=[]' \ + '-Dorg.gradle.configuration-cache.heap-dump-dir=[]:org.gradle.configuration cache.heap dump dir:_directories' \ + '-Dorg.gradle.configuration-cache.inputs.unsafe.ignore.file-system-checks=[]' \ + '-Dorg.gradle.configuration-cache.inputs.unsafe.ignore.in-serialization=[]' \ + '-Dorg.gradle.configuration-cache.integrity-check=[]' \ + '-Dorg.gradle.configuration-cache.max-problems=[]' \ + '-Dorg.gradle.configuration-cache.parallel=[]' \ + '-Dorg.gradle.configuration-cache.problems=[Configures how the configuration cache handles problems (fail or warn). Defaults to fail.]:org.gradle.configuration cache.problems:(fail warn)' \ + '-Dorg.gradle.configuration-cache.read-only=[]' \ + '-Dorg.gradle.configuration-cache.unsafe.ignore.unsupported-build-events-listeners=[]' \ + '-Dorg.gradle.configuration-cache=[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \ + '-Dorg.gradle.configureondemand=[Configure necessary projects only. Gradle will attempt to reduce configuration time for large multi-project builds.]' \ + '-Dorg.gradle.console=[Specifies which type of console output to generate. Values are 'plain', 'colored', 'auto' (default), 'rich' or 'verbose'.]:org.gradle.console:(plain auto rich verbose)' \ + '-Dorg.gradle.continue=[Continue task execution after a task failure.]' \ + '-Dorg.gradle.continuous.quietperiod=[]' \ + '-Dorg.gradle.daemon.healthcheckinterval=[]' \ + '-Dorg.gradle.daemon.idletimeout=[]' \ + '-Dorg.gradle.daemon.registry.base=[]:org.gradle.daemon.registry.base:_directories' \ + '-Dorg.gradle.daemon=[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \ + '-Dorg.gradle.debug.host=[]' \ + '-Dorg.gradle.debug.port=[]' \ + '-Dorg.gradle.debug.server=[]' \ + '-Dorg.gradle.debug.suspend=[]' \ + '-Dorg.gradle.debug=[]:org.gradle.debug:(true false)' \ + '-Dorg.gradle.dependency.verification=[Configures the dependency verification mode. Values are 'strict', 'lenient' or 'off'.]:org.gradle.dependency.verification:(strict lenient off)' \ + '-Dorg.gradle.java.home=[]:org.gradle.java.home:_directories' \ + '-Dorg.gradle.java.installations.auto-detect=[]' \ + '-Dorg.gradle.java.installations.auto-download=[]' \ + '-Dorg.gradle.java.installations.fromEnv=[]' \ + '-Dorg.gradle.java.installations.idea-jdks-directory=[]:org.gradle.java.installations.idea jdks directory:_directories' \ + '-Dorg.gradle.java.installations.paths=[]:org.gradle.java.installations.paths:_directories' \ + '-Dorg.gradle.jvmargs=[]' \ + '-Dorg.gradle.logging.level=[]:org.gradle.logging.level:(quiet warn info debug)' \ + '-Dorg.gradle.logging.stacktrace=[]' \ + '-Dorg.gradle.native=[]' \ + '-Dorg.gradle.parallel=[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]:org.gradle.parallel:(true false)' \ + '-Dorg.gradle.priority=[Specifies the scheduling priority for the Gradle daemon and all processes launched by it. Values are 'normal' (default) or 'low']:org.gradle.priority:(normal low)' \ + '-Dorg.gradle.problems.report=[(Experimental) enables HTML problems report]' \ + '-Dorg.gradle.projectcachedir=[Specify the project-specific cache directory. Defaults to .gradle in the root project directory.]:org.gradle.projectcachedir:_directories' \ + '-Dorg.gradle.unsafe.isolated-projects=[]' \ + '-Dorg.gradle.vfs.verbose=[]' \ + '-Dorg.gradle.vfs.watch=[Enables watching the file system for changes, allowing data about the file system to be re-used for the next build.]:org.gradle.vfs.watch:(true false)' \ + '-Dorg.gradle.warning.mode=[Specifies which mode of warnings to generate. Values are 'all', 'fail', 'summary'(default) or 'none']' \ + '-Dorg.gradle.welcome=[]:org.gradle.welcome:(once never)' \ + '-Dorg.gradle.workers.max=[Configure the number of concurrent workers Gradle is allowed to use.]' \ + (--no-build-cache)'--build-cache[Enables the Gradle build cache. Gradle will try to reuse outputs from previous builds.]' \ + (--no-configuration-cache)'--configuration-cache[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \ + '--configuration-cache-problems[Configures how the configuration cache handles problems (fail or warn). Defaults to fail.]:configuration cache problems:(fail warn)' \ + (--no-configure-on-demand)'--configure-on-demand[Configure necessary projects only. Gradle will attempt to reduce configuration time for large multi-project builds. (incubating)]' \ + '--console[Specifies which type of console output to generate. Values are 'plain', 'colored', 'auto' (default), 'rich' or 'verbose'.]:console:(plain auto rich verbose)' \ + (--no-continue)'--continue[Continue task execution after a task failure.]' \ {-t,--continuous}'[Enables continuous build. Gradle does not exit and will re-execute tasks when task file inputs change.]' \ - {-u,--no-search-upward}"[Don't search in parent folders for a settings.gradle file.]" \ - '(--write-locks)--update-locks[Perform a partial update of the dependency lock.]' \ - '(-d --debug -q --quiet -i --info)'{-w,--warn}'[Log warnings and errors only.]' \ - '--warning-mode=[Set types of warnings to log.]:warning mode:(all summary none)' \ - '(--no-watch-fs)--watch-fs[Gradle watches filesystem for incremental builds.]' \ - '(--update-locks)--write-locks[Persists dependency resolution for locked configurations.]' \ - {-x,--exclude-task}'[Specify a task to be excluded from execution.]' && ret=0 + (--no-daemon)'--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \ + (--quiet,-q,--warn,-w,--info,-i){-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \ + {-F,--dependency-verification}'[Configures the dependency verification mode. Values are 'strict', 'lenient' or 'off'.]:dependency verification:(strict lenient off)' \ + {-m,--dry-run}'[Run the builds with all task actions disabled.]' \ + \*{-x,--exclude-task}'[Specify a task to be excluded from execution.]' \ + '--export-keys[Exports the public keys used for dependency verification.]' \ + '--foreground[Starts the Gradle daemon in the foreground.]' \ + (--stacktrace,-s){-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \ + {-g,--gradle-user-home}'[Specifies the Gradle user home directory. Defaults to ~/.gradle]:gradle user home:_directories' \ + \*'--include-build[Include the specified build in the composite.]:include build:_directories' \ + (--quiet,-q,--warn,-w,--debug,-d){-i,--info}'[Set log level to info.]' \ + \*{-I,--init-script}'[Specify an initialization script.]:init script:_files -g \*.gradle(|.kts)' \ + '--max-workers[Configure the number of concurrent workers Gradle is allowed to use.]' \ + (--build-cache)'--no-build-cache[Disables the Gradle build cache.]' \ + (--configuration-cache)'--no-configuration-cache[Disables the configuration cache.]' \ + (--configure-on-demand)'--no-configure-on-demand[Disables the use of configuration on demand. (incubating)]' \ + (--continue)'--no-continue[Stop task execution after a task failure.]' \ + (--daemon)'--no-daemon[Do not use the Gradle daemon to run the build. Useful occasionally if you have configured Gradle to always run with the daemon by default.]' \ + (--parallel)'--no-parallel[Disables parallel execution to build projects.]' \ + (--problems-report)'--no-problems-report[(Experimental) disables HTML problems report]' \ + {-a,--no-rebuild}'[Do not rebuild project dependencies.]' \ + (--scan)'--no-scan[Disables the creation of a Build Scan.]' \ + (--watch-fs)'--no-watch-fs[Disables watching the file system.]' \ + '--offline[Execute the build without accessing network resources.]' \ + (--no-parallel)'--parallel[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]' \ + '--priority[Specifies the scheduling priority for the Gradle daemon and all processes launched by it. Values are 'normal' (default) or 'low']' \ + (--no-problems-report)'--problems-report[(Experimental) enables HTML problems report]' \ + '--profile[Profile build execution time and generates a report in the /reports/profile directory.]' \ + '--project-cache-dir[Specify the project-specific cache directory. Defaults to .gradle in the root project directory.]:project cache dir:_directories' \ + {-p,--project-dir}'[Specifies the start directory for Gradle. Defaults to current directory.]:project dir:_directories' \ + '--property-upgrade-report[(Experimental) Runs build with experimental property upgrade report.]' \ + (--warn,-w,--info,-i,--debug,-d){-q,--quiet}'[Log errors only.]' \ + {-U,--refresh-dependencies}'[Refresh the state of dependencies.]' \ + '--refresh-keys[Refresh the public keys used for dependency verification.]' \ + '--rerun-tasks[Ignore previously cached task results.]' \ + (--no-scan)'--scan[Generate a Build Scan (powered by Develocity).]' \ + (--full-stacktrace,-S){-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \ + '--task-graph[(Experimental) Print task graph instead of executing tasks.]' \ + \*'--update-locks[Perform a partial update of the dependency lock, letting passed in module notations change version. (incubating)]' \ + (--quiet,-q,--info,-i,--debug,-d){-w,--warn}'[Set log level to warn.]' \ + '--warning-mode[Specifies which mode of warnings to generate. Values are 'all', 'fail', 'summary'(default) or 'none']:warning mode:(all summary none)' \ + (--no-watch-fs)'--watch-fs[Enables watching the file system for changes, allowing data about the file system to be re-used for the next build.]' \ + '--write-locks[Persists dependency resolution for locked configurations, ignoring existing locking information if it exists]' \ + {-M,--write-verification-metadata}'[Generates checksums for dependencies used in the project (comma-separated list)]' && ret=0 ;; esac @@ -324,76 +360,111 @@ _gradle() { typeset -A opt_args _arguments -C \ - '(-)'{-\?,-h,--help}'[Shows a help message.]' \ - {-a,--no-rebuild}'[Do not rebuild project dependencies.]' \ - '(--no-build-cache)--build-cache[Enable the Gradle build cache.]' \ - {-b,--build-file}'[Specifies the build file.]:build script:_files -g \*.gradle' \ - {-C,--cache}'[Specifies how compiled build scripts should be cached.]:cache policy:(on rebuild)' \ - {-c,--settings-file}'[Specifies the settings file.]:settings file:_files -g \*.gradle:->argument-expected' \ - '(--no-configuration-cache)--configuration-cache[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \ - '(--configuration-cache)--no-configuration-cache[Disables the configuration cache. Gradle will not reuse the build configuration from previous builds.]' \ - '--configuration-cache-problems=[Configures how the configuration cache handles problems]:problem handling:(fail warn)' \ - '(--no-configure-on-demand)--configure-on-demand[Only relevant projects are configured in this build run.]' \ - '--console=[Specifies which type of console output to generate.]:console output type:(plain auto rich verbose)' \ - '--continue[Continues task execution after a task failure.]' \ - '-Dorg.gradle.cache.reserved.mb=[Reserve Gradle Daemon memory for operations.]' \ - '-Dorg.gradle.caching=[Set true to enable Gradle build cache.]' \ - '-Dorg.gradle.console=[Set type of console output to generate.]:console output type:(plain auto rich verbose)' \ - '-Dorg.gradle.daemon.debug=[Set true to debug Gradle Daemon.]' \ - '-Dorg.gradle.daemon.idletimeout=[Kill Gradle Daemon after # idle millis.]' \ - '-Dorg.gradle.debug=[Set true to debug Gradle Client.]' \ - '-Dorg.gradle.jvmargs=[Set JVM arguments.]' \ - '-Dorg.gradle.java.home=[Set JDK home dir.]' \ - '-Dorg.gradle.logging.level=[Set default Gradle log level.]:log level:(quiet warn lifecycle info debug)' \ - '-Dorg.gradle.parallel=[Set true to enable parallel project builds.]:(true false)' \ - '-Dorg.gradle.priority=[Set priority for Gradle worker processes.]:priority:(low normal)' \ - '-Dorg.gradle.unsafe.watch-fs=[Set true to enable Gradle file watcher.]:enable watcher:(true false)' \ - '-Dorg.gradle.warning.mode=[Set types of warnings to log.]:warning level:(all summary none)' \ - '-Dorg.gradle.workers.max=[Set the number of workers Gradle is allowed to use.]' \ - '(-i --info -w --warn -q --quiet)'{-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \ - '(--no-daemon)--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \ - '--foreground[Starts the Gradle daemon in the foreground.]' \ - {-g,--gradle-user-home}'[Specifies the gradle user home directory.]:home directory:_directories:->argument-expected' \ - '(-)--gui[Launches the Gradle GUI. (Removed in Gradle 4.0)]' \ - \*--include-build'[Includes the specified build in the composite.]:file:_directories:->argument-expected' \ - \*{-I,--init-script}'[Specifies an initialization script.]:init script:_files -g \*.gradle:->argument-expected' \ - '(-d --debug -w --warn -q --quiet)'{-i,--info}'[Set log level to info.]' \ - '--max-workers[Set the maximum number of concurrent workers that Gradle may use.]:number workers:->argument-expected' \ - {-m,--dry-run}'[Runs the builds with all task actions disabled.]' \ - '--no-color[Do not use color in the console output. (Removed in Gradle 3.0)]' \ - '(--build-cache)--no-build-cache[Do not use the Gradle build cache.]' \ - '(--configure-on-demand)--no-configure-on-demand[Disables configuration on demand.]' \ - '(--daemon)--no-daemon[Do not use the Gradle daemon to run the build.]' \ - '(--parallel)--no-parallel[Disables parallel execution to build projects.]' \ - '(--scan)--no-scan[Do not create a build scan.]' \ - '--offline[The build should operate without accessing network resources.]' \ - \*{-P+,--project-prop}'[Set project property for the build script (e.g. -Pmyprop=myvalue).]:project property (prop=val):->argument-expected' \ - {-p,--project-dir}'[Specifies the start directory for Gradle.]:start directory:_directories:->argument-expected' \ - '(--no-parallel)--parallel[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]' \ - '--priority=[Set priority for Gradle worker processes.]:priority:(low normal)' \ - '--profile[Profiles build execution time and generates a report in the /reports/profile directory.]' \ - '--project-cache-dir=[Specifies the project-specific cache directory.]:cache directory:_directories:->argument-expected' \ - '(-d --debug -w --warn -i --info)'{-q,--quiet}'[Log errors only.]' \ - '--recompile-scripts[Force build script recompiling.]' \ - '--refresh[Refresh the state of resources of the type(s) specified.]:refresh policy:(dependencies)' \ - '--refresh-dependencies[Refresh the state of dependencies.]' \ - '--rerun-tasks[Ignore previously cached task results.]' \ - '(--no-scan)--scan[Create a build scan.]' \ - '(-S --full-stacktrace)'{-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \ - '(-s --stacktrace)'{-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \ - '(-)--status[Shows status of running and recently stopped Gradle Daemons.]' \ - '(-)--stop[Stops all Gradle daemons.]' \ - '--system-prop[system property (prop=val)]' \ +'-Dgradle.user.home=[Specifies the Gradle user home directory. Defaults to ~/.gradle]:gradle.user.home:_directories:->argument-expected' \ + '-Dorg.gradle.caching.debug=[]:->argument-expected' \ + '-Dorg.gradle.caching=[Enables the Gradle build cache. Gradle will try to reuse outputs from previous builds.]:org.gradle.caching:(true false):->argument-expected' \ + '-Dorg.gradle.configuration-cache.entries-per-key=[]:->argument-expected' \ + '-Dorg.gradle.configuration-cache.fine-grained-property-tracking=[]:->argument-expected' \ + '-Dorg.gradle.configuration-cache.heap-dump-dir=[]:org.gradle.configuration cache.heap dump dir:_directories:->argument-expected' \ + '-Dorg.gradle.configuration-cache.inputs.unsafe.ignore.file-system-checks=[]:->argument-expected' \ + '-Dorg.gradle.configuration-cache.inputs.unsafe.ignore.in-serialization=[]:->argument-expected' \ + '-Dorg.gradle.configuration-cache.integrity-check=[]:->argument-expected' \ + '-Dorg.gradle.configuration-cache.max-problems=[]:->argument-expected' \ + '-Dorg.gradle.configuration-cache.parallel=[]:->argument-expected' \ + '-Dorg.gradle.configuration-cache.problems=[Configures how the configuration cache handles problems (fail or warn). Defaults to fail.]:org.gradle.configuration cache.problems:(fail warn):->argument-expected' \ + '-Dorg.gradle.configuration-cache.read-only=[]:->argument-expected' \ + '-Dorg.gradle.configuration-cache.unsafe.ignore.unsupported-build-events-listeners=[]:->argument-expected' \ + '-Dorg.gradle.configuration-cache=[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]:->argument-expected' \ + '-Dorg.gradle.configureondemand=[Configure necessary projects only. Gradle will attempt to reduce configuration time for large multi-project builds.]:->argument-expected' \ + '-Dorg.gradle.console=[Specifies which type of console output to generate. Values are 'plain', 'colored', 'auto' (default), 'rich' or 'verbose'.]:org.gradle.console:(plain auto rich verbose):->argument-expected' \ + '-Dorg.gradle.continue=[Continue task execution after a task failure.]:->argument-expected' \ + '-Dorg.gradle.continuous.quietperiod=[]:->argument-expected' \ + '-Dorg.gradle.daemon.healthcheckinterval=[]:->argument-expected' \ + '-Dorg.gradle.daemon.idletimeout=[]:->argument-expected' \ + '-Dorg.gradle.daemon.registry.base=[]:org.gradle.daemon.registry.base:_directories:->argument-expected' \ + '-Dorg.gradle.daemon=[Uses the Gradle daemon to run the build. Starts the daemon if not running.]:->argument-expected' \ + '-Dorg.gradle.debug.host=[]:->argument-expected' \ + '-Dorg.gradle.debug.port=[]:->argument-expected' \ + '-Dorg.gradle.debug.server=[]:->argument-expected' \ + '-Dorg.gradle.debug.suspend=[]:->argument-expected' \ + '-Dorg.gradle.debug=[]:org.gradle.debug:(true false):->argument-expected' \ + '-Dorg.gradle.dependency.verification=[Configures the dependency verification mode. Values are 'strict', 'lenient' or 'off'.]:org.gradle.dependency.verification:(strict lenient off):->argument-expected' \ + '-Dorg.gradle.java.home=[]:org.gradle.java.home:_directories:->argument-expected' \ + '-Dorg.gradle.java.installations.auto-detect=[]:->argument-expected' \ + '-Dorg.gradle.java.installations.auto-download=[]:->argument-expected' \ + '-Dorg.gradle.java.installations.fromEnv=[]:->argument-expected' \ + '-Dorg.gradle.java.installations.idea-jdks-directory=[]:org.gradle.java.installations.idea jdks directory:_directories:->argument-expected' \ + '-Dorg.gradle.java.installations.paths=[]:org.gradle.java.installations.paths:_directories:->argument-expected' \ + '-Dorg.gradle.jvmargs=[]:->argument-expected' \ + '-Dorg.gradle.logging.level=[]:org.gradle.logging.level:(quiet warn info debug):->argument-expected' \ + '-Dorg.gradle.logging.stacktrace=[]:->argument-expected' \ + '-Dorg.gradle.native=[]:->argument-expected' \ + '-Dorg.gradle.parallel=[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]:org.gradle.parallel:(true false):->argument-expected' \ + '-Dorg.gradle.priority=[Specifies the scheduling priority for the Gradle daemon and all processes launched by it. Values are 'normal' (default) or 'low']:org.gradle.priority:(normal low):->argument-expected' \ + '-Dorg.gradle.problems.report=[(Experimental) enables HTML problems report]:->argument-expected' \ + '-Dorg.gradle.projectcachedir=[Specify the project-specific cache directory. Defaults to .gradle in the root project directory.]:org.gradle.projectcachedir:_directories:->argument-expected' \ + '-Dorg.gradle.unsafe.isolated-projects=[]:->argument-expected' \ + '-Dorg.gradle.vfs.verbose=[]:->argument-expected' \ + '-Dorg.gradle.vfs.watch=[Enables watching the file system for changes, allowing data about the file system to be re-used for the next build.]:org.gradle.vfs.watch:(true false):->argument-expected' \ + '-Dorg.gradle.warning.mode=[Specifies which mode of warnings to generate. Values are 'all', 'fail', 'summary'(default) or 'none']:->argument-expected' \ + '-Dorg.gradle.welcome=[]:org.gradle.welcome:(once never):->argument-expected' \ + '-Dorg.gradle.workers.max=[Configure the number of concurrent workers Gradle is allowed to use.]:->argument-expected' \ + (--no-build-cache)'--build-cache[Enables the Gradle build cache. Gradle will try to reuse outputs from previous builds.]' \ + (--no-configuration-cache)'--configuration-cache[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \ + '--configuration-cache-problems[Configures how the configuration cache handles problems (fail or warn). Defaults to fail.]:configuration cache problems:(fail warn):->argument-expected' \ + (--no-configure-on-demand)'--configure-on-demand[Configure necessary projects only. Gradle will attempt to reduce configuration time for large multi-project builds. (incubating)]' \ + '--console[Specifies which type of console output to generate. Values are 'plain', 'colored', 'auto' (default), 'rich' or 'verbose'.]:console:(plain auto rich verbose):->argument-expected' \ + (--no-continue)'--continue[Continue task execution after a task failure.]' \ {-t,--continuous}'[Enables continuous build. Gradle does not exit and will re-execute tasks when task file inputs change.]' \ - {-u,--no-search-upward}"[Don't search in parent folders for a settings.gradle file.]" \ - '(--write-locks)--update-locks[Perform a partial update of the dependency lock.]' \ - '(-)'{-v,--version}'[Print version info.]' \ - '(-d --debug -q --quiet -i --info)'{-w,--warn}'[Log warnings and errors only.]' \ - '--warning-mode=[Set types of warnings to log.]:warning mode:(all summary none)' \ - '(--update-locks)--write-locks[Persists dependency resolution for locked configurations.]' \ - '(--no-watch-fs)--watch-fs[Gradle watches filesystem for incremental builds.]' \ - {-x,--exclude-task}'[Specify a task to be excluded from execution.]' \ - '(-)*:: :->task-or-option' && ret=0 + (--no-daemon)'--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \ + (--quiet,-q,--warn,-w,--info,-i){-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \ + {-F,--dependency-verification}'[Configures the dependency verification mode. Values are 'strict', 'lenient' or 'off'.]:dependency verification:(strict lenient off):->argument-expected' \ + {-m,--dry-run}'[Run the builds with all task actions disabled.]' \ + \*{-x,--exclude-task}'[Specify a task to be excluded from execution.]' \ + '--export-keys[Exports the public keys used for dependency verification.]' \ + '--foreground[Starts the Gradle daemon in the foreground.]' \ + (--stacktrace,-s){-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \ + {-g,--gradle-user-home}'[Specifies the Gradle user home directory. Defaults to ~/.gradle]:gradle user home:_directories:->argument-expected' \ + {-h,--help}'[Shows a help message.]' \ + \*'--include-build[Include the specified build in the composite.]:include build:_directories:->argument-expected' \ + (--quiet,-q,--warn,-w,--debug,-d){-i,--info}'[Set log level to info.]' \ + \*{-I,--init-script}'[Specify an initialization script.]:init script:_files -g \*.gradle(|.kts):->argument-expected' \ + '--max-workers[Configure the number of concurrent workers Gradle is allowed to use.]:->argument-expected' \ + (--build-cache)'--no-build-cache[Disables the Gradle build cache.]' \ + (--configuration-cache)'--no-configuration-cache[Disables the configuration cache.]' \ + (--configure-on-demand)'--no-configure-on-demand[Disables the use of configuration on demand. (incubating)]' \ + (--continue)'--no-continue[Stop task execution after a task failure.]' \ + (--daemon)'--no-daemon[Do not use the Gradle daemon to run the build. Useful occasionally if you have configured Gradle to always run with the daemon by default.]' \ + (--parallel)'--no-parallel[Disables parallel execution to build projects.]' \ + (--problems-report)'--no-problems-report[(Experimental) disables HTML problems report]' \ + {-a,--no-rebuild}'[Do not rebuild project dependencies.]' \ + (--scan)'--no-scan[Disables the creation of a Build Scan.]' \ + (--watch-fs)'--no-watch-fs[Disables watching the file system.]' \ + '--offline[Execute the build without accessing network resources.]' \ + (--no-parallel)'--parallel[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]' \ + '--priority[Specifies the scheduling priority for the Gradle daemon and all processes launched by it. Values are 'normal' (default) or 'low']:->argument-expected' \ + (--no-problems-report)'--problems-report[(Experimental) enables HTML problems report]' \ + '--profile[Profile build execution time and generates a report in the /reports/profile directory.]' \ + '--project-cache-dir[Specify the project-specific cache directory. Defaults to .gradle in the root project directory.]:project cache dir:_directories:->argument-expected' \ + {-p,--project-dir}'[Specifies the start directory for Gradle. Defaults to current directory.]:project dir:_directories:->argument-expected' \ + '--property-upgrade-report[(Experimental) Runs build with experimental property upgrade report.]' \ + (--warn,-w,--info,-i,--debug,-d){-q,--quiet}'[Log errors only.]' \ + {-U,--refresh-dependencies}'[Refresh the state of dependencies.]' \ + '--refresh-keys[Refresh the public keys used for dependency verification.]' \ + '--rerun-tasks[Ignore previously cached task results.]' \ + (--no-scan)'--scan[Generate a Build Scan (powered by Develocity).]' \ + (--full-stacktrace,-S){-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \ + '--status[Shows status of running and recently stopped Gradle daemon(s).]' \ + '--stop[Stops the Gradle daemon if it is running.]' \ + '--task-graph[(Experimental) Print task graph instead of executing tasks.]' \ + \*'--update-locks[Perform a partial update of the dependency lock, letting passed in module notations change version. (incubating)]' \ + {-v,--version}'[Shows the version info.]' \ + (--quiet,-q,--info,-i,--debug,-d){-w,--warn}'[Set log level to warn.]' \ + '--warning-mode[Specifies which mode of warnings to generate. Values are 'all', 'fail', 'summary'(default) or 'none']:warning mode:(all summary none):->argument-expected' \ + (--no-watch-fs)'--watch-fs[Enables watching the file system for changes, allowing data about the file system to be re-used for the next build.]' \ + '--write-locks[Persists dependency resolution for locked configurations, ignoring existing locking information if it exists]' \ + {-M,--write-verification-metadata}'[Generates checksums for dependencies used in the project (comma-separated list)]:->argument-expected' \ +'(-)*:: :->task-or-option' && ret=0 if [[ $words[CURRENT] != -* && $state != "argument-expected" ]]; then __gradle_tasks && ret=0 From 99017b8eac3d7d0e5ba01c7bf0cf9c6d38985536 Mon Sep 17 00:00:00 2001 From: Alexey Trofimenko Date: Thu, 23 Oct 2025 22:29:46 +0400 Subject: [PATCH 146/199] fix(key-bindings): ensure `` works if line is not empty (#13391) --- lib/key-bindings.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/key-bindings.zsh b/lib/key-bindings.zsh index bf5d4ba30..0d2cecb6a 100644 --- a/lib/key-bindings.zsh +++ b/lib/key-bindings.zsh @@ -112,7 +112,7 @@ bindkey -M vicmd '^[[1;5D' backward-word bindkey '\ew' kill-region # [Esc-w] - Kill from the cursor to the mark -bindkey -s '\el' 'ls\n' # [Esc-l] - run command: ls +bindkey -s '\el' '^q ls\n' # [Esc-l] - run command: ls bindkey '^r' history-incremental-search-backward # [Ctrl-r] - Search backward incrementally for a specified string. The string may begin with ^ to anchor the search to the beginning of the line. bindkey ' ' magic-space # [Space] - don't do history expansion From 969cd28e0d5724019061f10454c02d3ec2a71fd4 Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Sun, 26 Oct 2025 08:56:26 +0100 Subject: [PATCH 147/199] chore(gradle): update completion to 1525cf3f (#13393) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/gradle/_gradle | 46 ++++++++++++++++++++++++++-------------- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 8e01a3548..b8e33e62e 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -12,7 +12,7 @@ dependencies: plugins/gradle: repo: gradle/gradle-completion branch: master - version: d51199b54e5b6d7b5a6e37d8a3badc3df7efd8ee + version: 1525cf3f2242062199ffcf0c5c1055625db6b9d2 precopy: | set -e find . ! -name _gradle ! -name LICENSE -delete diff --git a/plugins/gradle/_gradle b/plugins/gradle/_gradle index 369cbc140..04f6425be 100644 --- a/plugins/gradle/_gradle +++ b/plugins/gradle/_gradle @@ -199,39 +199,53 @@ __gradle_subcommand() { ;; (dependencyInsight) _arguments \ + '--all-variants[Show all variants of each dependency]' \ + '--configuration=[Looks for the dependency in given configuration.]:dependency configuration:_gradle_dependency_configurations' \ '--dependency=[Shows the details of given dependency.]' \ - '--configuration=[Looks for the dependency in given configuration.]:dependency configuration:_gradle_dependency_configurations' && ret=0 + '--single-path[Show at most one path to each dependency]' && ret=0 ;; (help) _arguments \ - '--task[The task to show help for.]' && ret=0 + '--task=[The task to show help for.]' && ret=0 ;; (init) _arguments \ - '--dsl=[DSL to be used in generated scripts.]:dsl:(groovy kotlin)' \ - '--package=[Package for the generated source.]' \ - '--project-name=[Name of the generated project.]' \ - '--test-framework=[Test framework to be used.]:test framework:(junit kotlintest scalatest spock testng)' \ - '--type=[Project type to generate.]:project type:(basic cpp-application cpp-library groovy-application groovy-library java-application java-library kotlin-application kotlin-library pom scala-library)' && ret=0 + '--comments[Include clarifying comments in files.]' \ + '--dsl=[Set the build script DSL to be used in generated scripts.]' \ + '--incubating[Allow the generated build to use new features and APIs.]' \ + '--insecure-protocol=[How to handle insecure URLs used for Maven Repositories.]' \ + '--java-version=[Provides java version to use in the project.]' \ + '--overwrite[Allow existing files in the build directory to be overwritten?]' \ + '--package=[Set the package for source files.]' \ + '--project-name=[Set the project name.]' \ + '--split-project[Split functionality across multiple subprojects?]' \ + '--test-framework=[Set the test framework to be used.]' \ + '--type=[Set the type of project to generate.]' \ + '--use-defaults[Use default values for options not configured explicitly]' && ret=0 ;; (tasks) _arguments \ - '--all[List all tasks, including subproject tasks.]' \ - '--group=[Show tasks only from given task group.]' && ret=0 + '--all[Show additional tasks and detail.]' \ + '--group=[Show tasks for a specific group.]' \ + '--groups=[Show tasks for specific groups (can be used multiple times to specify multiple groups).]' \ + '--types[Show task class types]' && ret=0 ;; (test) _arguments -C \ - '--debug-jvm[Enable debugging for the test process. The process is started suspended and listening on port 5005. Requires the "java" plugin.]' \ - '--fail-fast[Stops test execution after the first failed test. Requires the "java" plugin.]' \ - '--tests=[Sets test class or method name to be included, * is supported. Requires the "java" plugin.]' \ + '--debug-jvm[Enable debugging for the test process. The process is started suspended and listening on port 5005.]' \ + '--fail-fast[Stops test execution after the first failed test.]' \ + '--test-dry-run[Simulate test execution.]' \ + '--tests=[Sets test class or method name to be included (in addition to the test task filters), '*' is supported.]' \ '(-)*:: :->task-or-option' && ret=0 ;; (wrapper) _arguments \ - '--distribution-type=[Binary-only or all with docs and sources]:*:distribution type:(bin all)' \ - '--gradle-version=[Set Gradle version for wrapper]' \ - '--gradle-distribution-sha256-sum=[SHA-256 checksum]' \ - '--gradle-distribution-url=[Set Gradle distribution URL]' && ret=0 + '--distribution-type=[The type of the Gradle distribution to be used by the wrapper.]:*:distribution type:(bin all)' \ + '--gradle-distribution-sha256-sum=[The SHA-256 hash sum of the gradle distribution.]' \ + '--gradle-distribution-url=[The URL to download the Gradle distribution from.]' \ + '--gradle-version=[The version of the Gradle distribution required by the wrapper. The following labels are allowed: latest, release-candidate, release-milestone, release-nightly, and nightly.]' \ + '--network-timeout=[Timeout in ms to use when the wrapper is performing network operations.]' \ + '--validate-url[Sets task to validate the configured distribution url.]' && ret=0 ;; (*) _arguments -C \ From 279e91e1327ed3683d099f59e304ba2c8e1153b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 26 Oct 2025 06:16:55 -0700 Subject: [PATCH 148/199] chore(deps): bump github/codeql-action from 4.30.9 to 4.31.0 (#13394) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index d2e0ff01b..40c795877 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -60,6 +60,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@16140ae1a102900babc80a33c44059580f687047 # v4.30.9 + uses: github/codeql-action/upload-sarif@4e94bd11f71e507f7f87df81788dff88d1dacbfb # v4.31.0 with: sarif_file: results.sarif From 829b8fdea441208c08c9d231079f46215344cc46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 26 Oct 2025 06:17:45 -0700 Subject: [PATCH 149/199] chore(deps): bump actions/upload-artifact from 4.6.2 to 5.0.0 (#13395) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 40c795877..93a55a250 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -53,7 +53,7 @@ jobs: publish_results: true - name: "Upload artifact" - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: SARIF file path: results.sarif From 136298e11073c7b34e5a977595c7ba5345ca910e Mon Sep 17 00:00:00 2001 From: Mohaiminus Sakib <3596793+rode093@users.noreply.github.com> Date: Mon, 27 Oct 2025 19:37:07 +0100 Subject: [PATCH 150/199] feat(nestjs) Adding NestJS plugin (#13104) * Adding NestJS command aliases * Removed installation instructions from the README file of NestJS plugin --- plugins/nestjs/README.md | 52 ++++++++++++++++++++++++++++++++ plugins/nestjs/nestjs.plugin.zsh | 41 +++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 plugins/nestjs/README.md create mode 100644 plugins/nestjs/nestjs.plugin.zsh diff --git a/plugins/nestjs/README.md b/plugins/nestjs/README.md new file mode 100644 index 000000000..295618214 --- /dev/null +++ b/plugins/nestjs/README.md @@ -0,0 +1,52 @@ +# NestJS Plugin for Oh My Zsh + +This plugin provides aliases for common [NestJS CLI](https://docs.nestjs.com/cli/overview) commands. + +## Requirements + +- [NestJS CLI](https://docs.nestjs.com/cli/overview#installation) installed globally: + `npm install -g @nestjs/cli` + +## Aliases + +| Alias | Command | Description | +| :------ | :--------------------------- | :------------------------------------------ | +| `nnew` | `nest new` | Create a new NestJS project | +| `nb` | `nest build` | Build the NestJS application | +| `ns` | `nest start` | Start the application | +| `nsw` | `nest start --watch` | Start the application in watch mode | +| `nsd` | `nest start --dev` | Start the application in dev mode | +| `nsdbg` | `nest start --debug --watch` | Start the application in debug & watch mode | +| `ng` | `nest generate` | Generate a NestJS element | +| `ngm` | `nest generate module` | Generate a module | +| `ngc` | `nest generate controller` | Generate a controller | +| `ngs` | `nest generate service` | Generate a service | +| `ngg` | `nest generate guard` | Generate a guard | +| `ngp` | `nest generate pipe` | Generate a pipe | +| `ngf` | `nest generate filter` | Generate a filter | +| `ngr` | `nest generate resolver` | Generate a GraphQL resolver | +| `ngcl` | `nest generate class` | Generate a class | +| `ngi` | `nest generate interface` | Generate an interface | +| `ngit` | `nest generate interceptor` | Generate an interceptor | +| `ngmi` | `nest generate middleware` | Generate a middleware | +| `ngd` | `nest generate decorator` | Generate a custom decorator | +| `ngres` | `nest generate resource` | Generate a CRUD resource | +| `nglib` | `nest generate library` | Generate a new library | +| `ngsub` | `nest generate sub-app` | Generate a new sub-application (monorepo) | +| `na` | `nest add` | Add a library to the project | +| `ni` | `nest info` | Display NestJS project information | +| `nu` | `nest update` | Update NestJS dependencies | + +## Usage + +1. Add `nestjs` to the `plugins` array in your `~/.zshrc` file: + +```zsh +plugins=(... nestjs) +``` + +2. Restart your terminal or source your `~/.zshrc` file: + +```zsh +source ~/.zshrc +``` diff --git a/plugins/nestjs/nestjs.plugin.zsh b/plugins/nestjs/nestjs.plugin.zsh new file mode 100644 index 000000000..9496abdeb --- /dev/null +++ b/plugins/nestjs/nestjs.plugin.zsh @@ -0,0 +1,41 @@ +# Oh My Zsh plugin for NestJS CLI + +# Check if nest command exists +if ! command -v nest &>/dev/null; then + return +fi + +# Project creation +alias nnew='nest new' + +# Basic development +alias nb='nest build' +alias ns='nest start' +alias nsw='nest start --watch' +alias nsd='nest start --dev' # Alias for start --watch +alias nsdbg='nest start --debug --watch' + +# Code generation (short aliases) +alias ng='nest generate' +alias ngm='nest generate module' +alias ngc='nest generate controller' +alias ngs='nest generate service' +alias ngg='nest generate guard' +alias ngp='nest generate pipe' +alias ngf='nest generate filter' +alias ngr='nest generate resolver' +alias ngcl='nest generate class' +alias ngi='nest generate interface' +alias ngit='nest generate interceptor' +alias ngmi='nest generate middleware' +alias ngd='nest generate decorator' +alias ngres='nest generate resource' +alias nglib='nest generate library' +alias ngsub='nest generate sub-app' + +# Other commands +alias na='nest add' +alias ni='nest info' +alias nu='nest update' + +# You can add more aliases or functions here as needed. From 1dc87da9e6d67c4057303124d2ebcd8c93eb6141 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Wed, 29 Oct 2025 19:46:31 +0100 Subject: [PATCH 151/199] chore: tidy funding (#13401) --- .github/FUNDING.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 6c86ac450..e91717d9d 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1,6 @@ -github: [ohmyzsh, robbyrussell, mcornella, larson-carter, carlosala] +github: + - ohmyzsh + - robbyrussell + - mcornella + - carlosala open_collective: ohmyzsh From 43e880ba45d2785ed0dda3dcaf7b5cd610eb3063 Mon Sep 17 00:00:00 2001 From: Yaroslav Sapak <145782146+IaroslavSapak@users.noreply.github.com> Date: Fri, 31 Oct 2025 04:22:01 +0200 Subject: [PATCH 152/199] feat(vscode): add support for Cursor (#13382) --- plugins/vscode/README.md | 10 +++++++--- plugins/vscode/vscode.plugin.zsh | 4 +++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/plugins/vscode/README.md b/plugins/vscode/README.md index f91b533c9..7c746d3d3 100644 --- a/plugins/vscode/README.md +++ b/plugins/vscode/README.md @@ -1,7 +1,6 @@ # VS Code -This plugin provides useful aliases to simplify the interaction between the command line and VS Code or -VSCodium editor. +This plugin provides useful aliases to simplify the interaction between the command line and VS Code, VSCodium, or Cursor editor. To start using it, add the `vscode` plugin to your `plugins` array in `~/.zshrc`: @@ -18,6 +17,7 @@ You can install either: - VS Code (code) - VS Code Insiders (code-insiders) - VSCodium (codium) +- Cursor (cursor) ### MacOS @@ -33,6 +33,10 @@ open the Command Palette via (F1 or ⇧⌘P) and type shell command to find the > Shell Command: Install 'codium' command in PATH +For Cursor, open the Command Palette via (F1 or ⌘⇧P) and type shell command to find the Shell Command: + +> Shell Command: Install 'cursor' command in PATH + ## Using multiple flavours If for any reason, you ever require to use multiple flavours of VS Code i.e. VS Code (stable) and VS Code @@ -43,7 +47,7 @@ executable. ```zsh ZSH_THEME=... -# Choose between one [code, code-insiders or codium] +# Choose between one [code, code-insiders, codium, or cursor] # The following line will make the plugin to open VS Code Insiders # Invalid entries will be ignored, no aliases will be added VSCODE=code-insiders diff --git a/plugins/vscode/vscode.plugin.zsh b/plugins/vscode/vscode.plugin.zsh index 77367bcac..1635a9832 100644 --- a/plugins/vscode/vscode.plugin.zsh +++ b/plugins/vscode/vscode.plugin.zsh @@ -1,4 +1,4 @@ -# VS Code (stable / insiders) / VSCodium zsh plugin +# VS Code (stable / insiders) / VSCodium / Cursor zsh plugin # Authors: # https://github.com/MarsiBarsi (original author) # https://github.com/babakks @@ -19,6 +19,8 @@ if [[ -z "$VSCODE" ]]; then VSCODE=code-insiders elif which codium &>/dev/null; then VSCODE=codium + elif which cursor &>/dev/null; then + VSCODE=cursor else return fi From 423e9aef522fa954e73b77a99ee627723fc31257 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 08:29:39 +0100 Subject: [PATCH 153/199] chore(deps): bump github/codeql-action from 4.31.0 to 4.31.2 (#13408) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.0 to 4.31.2. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/4e94bd11f71e507f7f87df81788dff88d1dacbfb...0499de31b99561a6d14a36a5f662c2a54f91beee) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 93a55a250..ca2655968 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -60,6 +60,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@4e94bd11f71e507f7f87df81788dff88d1dacbfb # v4.31.0 + uses: github/codeql-action/upload-sarif@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2 with: sarif_file: results.sarif From 90a22b61e66dbd83928be7b9739de554a5f1c09d Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 08:30:05 +0100 Subject: [PATCH 154/199] feat(gradle): update to 25c3d368 (#13407) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/gradle/_gradle | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index b8e33e62e..d85451007 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -12,7 +12,7 @@ dependencies: plugins/gradle: repo: gradle/gradle-completion branch: master - version: 1525cf3f2242062199ffcf0c5c1055625db6b9d2 + version: 25c3d368527e7679e30a63f53cb20540cb285a24 precopy: | set -e find . ! -name _gradle ! -name LICENSE -delete diff --git a/plugins/gradle/_gradle b/plugins/gradle/_gradle index 04f6425be..bbb7353cc 100644 --- a/plugins/gradle/_gradle +++ b/plugins/gradle/_gradle @@ -339,8 +339,10 @@ __gradle_subcommand() { (--warn,-w,--info,-i,--debug,-d){-q,--quiet}'[Log errors only.]' \ {-U,--refresh-dependencies}'[Refresh the state of dependencies.]' \ '--refresh-keys[Refresh the public keys used for dependency verification.]' \ + '--rerun[Causes the task to be re-run even if up-to-date.]' \ '--rerun-tasks[Ignore previously cached task results.]' \ (--no-scan)'--scan[Generate a Build Scan (powered by Develocity).]' \ + {-V,--show-version}'[Print version info and continue.]' \ (--full-stacktrace,-S){-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \ '--task-graph[(Experimental) Print task graph instead of executing tasks.]' \ \*'--update-locks[Perform a partial update of the dependency lock, letting passed in module notations change version. (incubating)]' \ @@ -465,14 +467,16 @@ _gradle() { (--warn,-w,--info,-i,--debug,-d){-q,--quiet}'[Log errors only.]' \ {-U,--refresh-dependencies}'[Refresh the state of dependencies.]' \ '--refresh-keys[Refresh the public keys used for dependency verification.]' \ + '--rerun[Causes the task to be re-run even if up-to-date.]' \ '--rerun-tasks[Ignore previously cached task results.]' \ (--no-scan)'--scan[Generate a Build Scan (powered by Develocity).]' \ + {-V,--show-version}'[Print version info and continue.]' \ (--full-stacktrace,-S){-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \ '--status[Shows status of running and recently stopped Gradle daemon(s).]' \ '--stop[Stops the Gradle daemon if it is running.]' \ '--task-graph[(Experimental) Print task graph instead of executing tasks.]' \ \*'--update-locks[Perform a partial update of the dependency lock, letting passed in module notations change version. (incubating)]' \ - {-v,--version}'[Shows the version info.]' \ + {-v,--version}'[Print version info and exit.]' \ (--quiet,-q,--info,-i,--debug,-d){-w,--warn}'[Set log level to warn.]' \ '--warning-mode[Specifies which mode of warnings to generate. Values are 'all', 'fail', 'summary'(default) or 'none']:warning mode:(all summary none):->argument-expected' \ (--no-watch-fs)'--watch-fs[Enables watching the file system for changes, allowing data about the file system to be re-used for the next build.]' \ From e70086a76a89405caa22f3e7fed6fcc8aeaa6f7c Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Sun, 9 Nov 2025 07:48:59 +0100 Subject: [PATCH 155/199] feat(gradle): update to a9d7c822 (#13413) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index d85451007..08289a04b 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -12,7 +12,7 @@ dependencies: plugins/gradle: repo: gradle/gradle-completion branch: master - version: 25c3d368527e7679e30a63f53cb20540cb285a24 + version: a9d7c822e42cc6a5b028b59e46cffcc8e7bc1134 precopy: | set -e find . ! -name _gradle ! -name LICENSE -delete From 18d0a63df8ed61aad7b25dc9c6f61a7cb88760dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 9 Nov 2025 20:03:00 +0100 Subject: [PATCH 156/199] chore(deps): bump step-security/harden-runner from 2.13.1 to 2.13.2 (#13414) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies.yml | 2 +- .github/workflows/installer.yml | 4 ++-- .github/workflows/main.yml | 2 +- .github/workflows/project.yml | 2 +- .github/workflows/scorecard.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index be54fdf41..9ff5ae375 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -14,7 +14,7 @@ jobs: if: github.repository == 'ohmyzsh/ohmyzsh' steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index 2d1de706a..829d3804f 100644 --- a/.github/workflows/installer.yml +++ b/.github/workflows/installer.yml @@ -26,7 +26,7 @@ jobs: - macos-latest steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit @@ -47,7 +47,7 @@ jobs: - test steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b48a3d32b..5bd062e1b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,7 +24,7 @@ jobs: if: github.repository == 'ohmyzsh/ohmyzsh' steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index e6da2cbe5..1d22ec3d1 100644 --- a/.github/workflows/project.yml +++ b/.github/workflows/project.yml @@ -17,7 +17,7 @@ jobs: if: github.repository == 'ohmyzsh/ohmyzsh' steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit - name: Authenticate as @ohmyzsh diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index ca2655968..6bb853386 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -36,7 +36,7 @@ jobs: steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1 + uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 with: egress-policy: audit From a0576348d012cbcac17967ef66ed996fee188e38 Mon Sep 17 00:00:00 2001 From: Oskar Hermansson Date: Wed, 12 Nov 2025 00:10:26 +0100 Subject: [PATCH 157/199] docs(dotnet): remove `Core` suffix (#13418) --- plugins/dotnet/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/dotnet/README.md b/plugins/dotnet/README.md index 217c46751..2b06d8810 100644 --- a/plugins/dotnet/README.md +++ b/plugins/dotnet/README.md @@ -1,6 +1,6 @@ -# .NET Core CLI plugin +# .NET CLI plugin -This plugin provides completion and useful aliases for [.NET Core CLI](https://dotnet.microsoft.com/). +This plugin provides completion and useful aliases for [.NET CLI](https://dotnet.microsoft.com/). To use it, add `dotnet` to the plugins array in your zshrc file. @@ -23,4 +23,4 @@ plugins=(... dotnet) | dp | dotnet pack | Create a NuGet package. | | dng | dotnet nuget | Provides additional NuGet commands. | | db | dotnet build | Build a .NET project | -| dres | dotnet restore | Restore dependencies and project-specific tools for a project. | \ No newline at end of file +| dres | dotnet restore | Restore dependencies and project-specific tools for a project. | From dca16e8f9a20a84172044621a95832b4d5a1e057 Mon Sep 17 00:00:00 2001 From: Fournet Enzo <63660254+enzofrnt@users.noreply.github.com> Date: Wed, 12 Nov 2025 11:42:35 +0100 Subject: [PATCH 158/199] docs(docker-compose): clarify tool choice (#13399) --- plugins/docker-compose/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/docker-compose/README.md b/plugins/docker-compose/README.md index 66d4e0521..5a0290462 100644 --- a/plugins/docker-compose/README.md +++ b/plugins/docker-compose/README.md @@ -2,6 +2,8 @@ This plugin provides completion for [docker-compose](https://docs.docker.com/compose/) as well as some aliases for frequent docker-compose commands. +This plugin chooses automatically between the legacy `docker-compose` command and the modern +`docker compose` subcommand, preferring `docker-compose` when both are available. To use it, add docker-compose to the plugins array of your zshrc file: From 5a282b9b3050e4851c15cfdb9d79af6a708988b7 Mon Sep 17 00:00:00 2001 From: Artyom Fedosov <50590380+artyom-fedosov@users.noreply.github.com> Date: Fri, 14 Nov 2025 15:21:32 +0200 Subject: [PATCH 159/199] chore(git): remove quotes around `$#` (#13403) --- plugins/git/git.plugin.zsh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index a0052891a..c11799208 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -102,7 +102,7 @@ function work_in_progress() { alias grt='cd "$(git rev-parse --show-toplevel || echo .)"' function ggpnp() { - if [[ "$#" == 0 ]]; then + if [[ $# == 0 ]]; then ggl && ggp else ggl "${*}" && ggp "${*}" @@ -281,7 +281,7 @@ alias gprav='git pull --rebase --autostash -v' function ggu() { local b - [[ "$#" != 1 ]] && b="$(git_current_branch)" + [[ $# != 1 ]] && b="$(git_current_branch)" git pull --rebase origin "${b:-$1}" } compdef _git ggu=git-pull @@ -293,11 +293,11 @@ alias gprumi='git pull --rebase=interactive upstream $(git_main_branch)' alias ggpull='git pull origin "$(git_current_branch)"' function ggl() { - if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then + if [[ $# != 0 ]] && [[ $# != 1 ]]; then git pull origin "${*}" else local b - [[ "$#" == 0 ]] && b="$(git_current_branch)" + [[ $# == 0 ]] && b="$(git_current_branch)" git pull origin "${b:-$1}" fi } @@ -310,7 +310,7 @@ alias gpd='git push --dry-run' function ggf() { local b - [[ "$#" != 1 ]] && b="$(git_current_branch)" + [[ $# != 1 ]] && b="$(git_current_branch)" git push --force origin "${b:-$1}" } compdef _git ggf=git-push @@ -322,7 +322,7 @@ is-at-least 2.30 "$git_version" \ function ggfl() { local b - [[ "$#" != 1 ]] && b="$(git_current_branch)" + [[ $# != 1 ]] && b="$(git_current_branch)" git push --force-with-lease origin "${b:-$1}" } compdef _git ggfl=git-push @@ -337,11 +337,11 @@ alias gpod='git push origin --delete' alias ggpush='git push origin "$(git_current_branch)"' function ggp() { - if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then + if [[ $# != 0 ]] && [[ $# != 1 ]]; then git push origin "${*}" else local b - [[ "$#" == 0 ]] && b="$(git_current_branch)" + [[ $# == 0 ]] && b="$(git_current_branch)" git push origin "${b:-$1}" fi } From 9d93dfaa60ccc7980ad69b75b1accae0232e4e8f Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Sat, 15 Nov 2025 11:39:09 -0300 Subject: [PATCH 160/199] fix(keychain): use pattern matching to detect version (#13423) --- plugins/keychain/keychain.plugin.zsh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/keychain/keychain.plugin.zsh b/plugins/keychain/keychain.plugin.zsh index ce5351bce..23cf1af9a 100644 --- a/plugins/keychain/keychain.plugin.zsh +++ b/plugins/keychain/keychain.plugin.zsh @@ -20,10 +20,11 @@ function { zstyle -a :omz:plugins:keychain options options # Check keychain version to decide whether to use --agents - local version_string=$(keychain --version 2>&1 | head -n 2 | tail -n 1 | cut -d ' ' -f 4) + local version_string=$(keychain --version 2>&1) # start keychain, only use --agents for versions below 2.9.0 autoload -Uz is-at-least - if is-at-least 2.9 "$version_string"; then + if [[ "$version_string" =~ 'keychain ([0-9]+\.[0-9]+)' ]] && \ + is-at-least 2.9 "$match[1]"; then keychain ${^options:-} ${^identities} --host $SHORT_HOST else keychain ${^options:-} --agents ${agents:-gpg} ${^identities} --host $SHORT_HOST From 8c5a60644a2a93fb6b7d76ec7a5598f99b426cf0 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sat, 15 Nov 2025 21:00:26 +0100 Subject: [PATCH 161/199] feat: announce OpenSwag and `omz shop` command (#13428) * Update shop URLs from Planet Argon to OpenSwag and add omz shop command Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: robbyrussell <257+robbyrussell@users.noreply.github.com> Co-authored-by: mcornella <1441704+mcornella@users.noreply.github.com> --- README.md | 2 +- lib/cli.zsh | 11 +++++++++++ tools/install.sh | 2 +- tools/upgrade.sh | 2 +- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 55bfa0c5a..eaa3fb29e 100644 --- a/README.md +++ b/README.md @@ -547,7 +547,7 @@ We're on social media: ## Merchandise We have -[stickers, shirts, and coffee mugs available](https://shop.planetargon.com/collections/oh-my-zsh?utm_source=github) +[stickers, shirts, and coffee mugs available](https://openswag.shop/collections/oh-my-zsh?utm_source=github) for you to show off your love of Oh My Zsh. Again, you will become the talk of the town! ## License diff --git a/lib/cli.zsh b/lib/cli.zsh index a002a5073..c62da36af 100644 --- a/lib/cli.zsh +++ b/lib/cli.zsh @@ -28,6 +28,7 @@ function _omz { 'plugin:Manage plugins' 'pr:Manage Oh My Zsh Pull Requests' 'reload:Reload the current zsh session' + 'shop:Open the Oh My Zsh shop' 'theme:Manage themes' 'update:Update Oh My Zsh' 'version:Show the version' @@ -173,6 +174,7 @@ Available commands: plugin Manage plugins pr Manage Oh My Zsh Pull Requests reload Reload the current zsh session + shop Open the Oh My Zsh shop theme Manage themes update Update Oh My Zsh version Show the version @@ -721,6 +723,15 @@ function _omz::pr::test { ) } +function _omz::shop { + local shop_url="https://openswag.shop/collections/oh-my-zsh" + + _omz::log info "Opening Oh My Zsh shop in your browser..." + _omz::log info "$shop_url" + + open_command "$shop_url" +} + function _omz::reload { # Delete current completion cache command rm -f $_comp_dumpfile $ZSH_COMPDUMP diff --git a/tools/install.sh b/tools/install.sh index 8cf62a76e..d86550cdd 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -505,7 +505,7 @@ print_success() { printf '\n' printf '%s\n' "• Follow us on X: $(fmt_link @ohmyzsh https://x.com/ohmyzsh)" printf '%s\n' "• Join our Discord community: $(fmt_link "Discord server" https://discord.gg/ohmyzsh)" - printf '%s\n' "• Get stickers, t-shirts, coffee mugs and more: $(fmt_link "Planet Argon Shop" https://shop.planetargon.com/collections/oh-my-zsh)" + printf '%s\n' "• Get stickers, t-shirts, coffee mugs and more: $(fmt_link "OpenSwag Shop" https://openswag.shop/collections/oh-my-zsh)" printf '%s\n' $FMT_RESET } diff --git a/tools/upgrade.sh b/tools/upgrade.sh index 1aa3d8af4..82c0624bc 100755 --- a/tools/upgrade.sh +++ b/tools/upgrade.sh @@ -273,7 +273,7 @@ if LANG= git pull --quiet --rebase $remote $branch; then printf "${BLUE}%s${RESET}\n\n" "$message" printf "${BLUE}${BOLD}%s %s${RESET}\n" "To keep up with the latest news and updates, follow us on X:" "$(fmt_link @ohmyzsh https://x.com/ohmyzsh)" printf "${BLUE}${BOLD}%s %s${RESET}\n" "Want to get involved in the community? Join our Discord:" "$(fmt_link "Discord server" https://discord.gg/ohmyzsh)" - printf "${BLUE}${BOLD}%s %s${RESET}\n" "Get your Oh My Zsh swag at:" "$(fmt_link "Planet Argon Shop" https://shop.planetargon.com/collections/oh-my-zsh)" + printf "${BLUE}${BOLD}%s %s${RESET}\n" "Get your Oh My Zsh swag at:" "$(fmt_link "OpenSwag Shop" https://openswag.shop/collections/oh-my-zsh)" elif [[ $verbose_mode == minimal ]]; then printf "${BLUE}%s${RESET}\n" "$message" fi From 73d79fe1376cc773b2bcb7f7a27bff880a4502e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Nov 2025 09:08:43 -0300 Subject: [PATCH 162/199] chore(deps): bump certifi in /.github/workflows/dependencies (#13431) Bumps [certifi](https://github.com/certifi/python-certifi) from 2025.10.5 to 2025.11.12. - [Commits](https://github.com/certifi/python-certifi/compare/2025.10.05...2025.11.12) --- updated-dependencies: - dependency-name: certifi dependency-version: 2025.11.12 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index cc8b0a28f..4fc25d593 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,4 +1,4 @@ -certifi==2025.10.5 +certifi==2025.11.12 charset-normalizer==3.4.4 idna==3.11 PyYAML==6.0.3 From 8a4d6fc0a2b5586f093fb2b96b51e2141f643284 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Nov 2025 09:09:09 -0300 Subject: [PATCH 163/199] chore(deps): bump github/codeql-action from 4.31.2 to 4.31.3 (#13430) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.2 to 4.31.3. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/0499de31b99561a6d14a36a5f662c2a54f91beee...014f16e7ab1402f30e7c3329d33797e7948572db) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 6bb853386..eec4b453d 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -60,6 +60,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2 + uses: github/codeql-action/upload-sarif@014f16e7ab1402f30e7c3329d33797e7948572db # v4.31.3 with: sarif_file: results.sarif From b52dd1a425e9ed9f844ba46cd27ff94a3b4949dc Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 19 Nov 2025 17:44:11 -0800 Subject: [PATCH 164/199] feat: Update OpenSwag domain references to CommitGoods (#13434) * Initial plan * Update all OpenSwag domain references to CommitGoods Co-authored-by: robbyrussell <257+robbyrussell@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: robbyrussell <257+robbyrussell@users.noreply.github.com> --- README.md | 2 +- lib/cli.zsh | 2 +- tools/install.sh | 2 +- tools/upgrade.sh | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index eaa3fb29e..2ccb63b69 100644 --- a/README.md +++ b/README.md @@ -547,7 +547,7 @@ We're on social media: ## Merchandise We have -[stickers, shirts, and coffee mugs available](https://openswag.shop/collections/oh-my-zsh?utm_source=github) +[stickers, shirts, and coffee mugs available](https://commitgoods.com/collections/oh-my-zsh?utm_source=github) for you to show off your love of Oh My Zsh. Again, you will become the talk of the town! ## License diff --git a/lib/cli.zsh b/lib/cli.zsh index c62da36af..55938ba8a 100644 --- a/lib/cli.zsh +++ b/lib/cli.zsh @@ -724,7 +724,7 @@ function _omz::pr::test { } function _omz::shop { - local shop_url="https://openswag.shop/collections/oh-my-zsh" + local shop_url="https://commitgoods.com/collections/oh-my-zsh" _omz::log info "Opening Oh My Zsh shop in your browser..." _omz::log info "$shop_url" diff --git a/tools/install.sh b/tools/install.sh index d86550cdd..c31ce2d55 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -505,7 +505,7 @@ print_success() { printf '\n' printf '%s\n' "• Follow us on X: $(fmt_link @ohmyzsh https://x.com/ohmyzsh)" printf '%s\n' "• Join our Discord community: $(fmt_link "Discord server" https://discord.gg/ohmyzsh)" - printf '%s\n' "• Get stickers, t-shirts, coffee mugs and more: $(fmt_link "OpenSwag Shop" https://openswag.shop/collections/oh-my-zsh)" + printf '%s\n' "• Get stickers, t-shirts, coffee mugs and more: $(fmt_link "CommitGoods Shop" https://commitgoods.com/collections/oh-my-zsh)" printf '%s\n' $FMT_RESET } diff --git a/tools/upgrade.sh b/tools/upgrade.sh index 82c0624bc..01719d217 100755 --- a/tools/upgrade.sh +++ b/tools/upgrade.sh @@ -273,7 +273,7 @@ if LANG= git pull --quiet --rebase $remote $branch; then printf "${BLUE}%s${RESET}\n\n" "$message" printf "${BLUE}${BOLD}%s %s${RESET}\n" "To keep up with the latest news and updates, follow us on X:" "$(fmt_link @ohmyzsh https://x.com/ohmyzsh)" printf "${BLUE}${BOLD}%s %s${RESET}\n" "Want to get involved in the community? Join our Discord:" "$(fmt_link "Discord server" https://discord.gg/ohmyzsh)" - printf "${BLUE}${BOLD}%s %s${RESET}\n" "Get your Oh My Zsh swag at:" "$(fmt_link "OpenSwag Shop" https://openswag.shop/collections/oh-my-zsh)" + printf "${BLUE}${BOLD}%s %s${RESET}\n" "Get your Oh My Zsh swag at:" "$(fmt_link "CommitGoods Shop" https://commitgoods.com/collections/oh-my-zsh)" elif [[ $verbose_mode == minimal ]]; then printf "${BLUE}%s${RESET}\n" "$message" fi From 15bcada010887a519f70f8612c5750b396d49b9d Mon Sep 17 00:00:00 2001 From: StavShukrunRise Date: Sat, 22 Nov 2025 19:11:40 +0200 Subject: [PATCH 165/199] feat(pulumi): add plugin for Pulumi CLI (#13041) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Marc Cornellà --- plugins/pulumi/README.md | 41 ++++++++++++++++++++++++++++++++ plugins/pulumi/pulumi.plugin.zsh | 28 ++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 plugins/pulumi/README.md create mode 100644 plugins/pulumi/pulumi.plugin.zsh diff --git a/plugins/pulumi/README.md b/plugins/pulumi/README.md new file mode 100644 index 000000000..4c771964b --- /dev/null +++ b/plugins/pulumi/README.md @@ -0,0 +1,41 @@ +# Pulumi + +This is an **Oh My Zsh plugin** for the [**Pulumi CLI**](https://www.pulumi.com/docs/iac/cli/), +an Infrastructure as Code (IaC) tool for building, deploying and managing cloud infrastucture. + +This plugin provides: + +- 🚀 Short, intuitive aliases for common Pulumi commands +- 🎯 Auto-completion support for Pulumi + +To use it, add `pulumi` to the plugins array in your `.zshrc` file: + +```zsh +plugins=(... pulumi) +``` + +## ⚡ Aliases + +| Alias | Command | Description | +| -------- | ---------------------- | ----------------------------- | +| `pul` | `pulumi` | Shortcut for Pulumi CLI | +| `pulcs` | `pulumi config set` | Set Pulumi configuration | +| `puld` | `pulumi destroy` | Destroy all resources | +| `pullog` | `pulumi logs -f` | Tail Pulumi logs in real-time | +| `pulp` | `pulumi preview` | Show planned changes | +| `pulr` | `pulumi refresh` | Refresh state from cloud | +| `puls` | `pulumi stack` | Show stack details | +| `pulsh` | `pulumi stack history` | Show stack history | +| `pulsi` | `pulumi stack init` | Initialize a new stack | +| `pulsl` | `pulumi stack ls` | List available stacks | +| `pulso` | `pulumi stack output` | Show stack outputs | +| `pulss` | `pulumi stack select` | Switch stack | +| `pulu` | `pulumi up` | Deploy infrastructure | + +## 🎯 Autocompletion + +If `pulumi gen-completion zsh` is available, this plugin **automatically loads Pulumi auto-completion**. + +## 🛠️ Contribution + +Feel free to open an issue or PR for improvements! 🚀 diff --git a/plugins/pulumi/pulumi.plugin.zsh b/plugins/pulumi/pulumi.plugin.zsh new file mode 100644 index 000000000..70686017f --- /dev/null +++ b/plugins/pulumi/pulumi.plugin.zsh @@ -0,0 +1,28 @@ +if (( ! $+commands[pulumi] )); then + return +fi + +# If the completion file doesn't exist yet, we need to autoload it and +# bind it to `pulumi`. Otherwise, compinit will have already done that. +if [[ ! -f "$ZSH_CACHE_DIR/completions/_pulumi" ]]; then + typeset -g -A _comps + autoload -Uz _pulumi + _comps[pulumi]=_pulumi +fi + +pulumi gen-completion zsh >| "$ZSH_CACHE_DIR/completions/_pulumi" &| + +# Aliases +alias pul='pulumi' +alias pulcs='pulumi config set' +alias puld='pulumi destroy' +alias pullog='pulumi logs -f' +alias pulp='pulumi preview' +alias pulr='pulumi refresh' +alias puls='pulumi stack' +alias pulsh='pulumi stack history' +alias pulsi='pulumi stack init' +alias pulsl='pulumi stack ls' +alias pulso='pulumi stack output' +alias pulss='pulumi stack select' +alias pulu='pulumi up' From b04e01d41822963875db876e1d3e7e7d1b67541c Mon Sep 17 00:00:00 2001 From: Firas Bouzguenda <19820205+mofibo@users.noreply.github.com> Date: Sat, 22 Nov 2025 18:31:03 +0100 Subject: [PATCH 166/199] feat(kubectl): add aliases for `kubectl rollout restart` (#12883) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Marc Cornellà --- plugins/kubectl/README.md | 4 +++- plugins/kubectl/kubectl.plugin.zsh | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/kubectl/README.md b/plugins/kubectl/README.md index 6f347a8ee..e510c5f40 100644 --- a/plugins/kubectl/README.md +++ b/plugins/kubectl/README.md @@ -27,7 +27,7 @@ plugins=(... kubectl) | 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 | | kge | `kubectl get events --sort-by=".lastTimestamp"` | Get events (sorted by timestamp) | -| kgew | `kubectl get events --watch --sort-by=".lastTimestamp"` | Get events and watch as they occur (sorted by timestamp) | +| kgew | `kubectl get events --watch --sort-by=".lastTimestamp"` | Get events and watch as they occur (sorted by timestamp) | | | | **Pod management** | | kgp | `kubectl get pods` | List all pods in ps output format | | kgpl | `kgp -l` | Get pods by label. Example: `kgpl "app=myapp" -n myns` | @@ -74,6 +74,7 @@ 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 | +| krrd | `kubectl rollout restart deployment` | Rollout restart a deployment | | kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime | | | | **Rollout management** | | kgrs | `kubectl get replicaset` | List all ReplicaSets `rs` created by the deployment | @@ -112,6 +113,7 @@ plugins=(... kubectl) | kdelss | `kubectl delete statefulset` | Delete the statefulset | | ksss | `kubectl scale statefulset` | Scale a statefulset | | krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment | +| krrss | `kubectl rollout restart statefulset` | Rollout restart a statefulset | | | | **Service Accounts management** | | kdsa | `kubectl describe sa` | Describe a service account in details | | kdelsa | `kubectl delete sa` | Delete the service account | diff --git a/plugins/kubectl/kubectl.plugin.zsh b/plugins/kubectl/kubectl.plugin.zsh index 4a72c02af..912136da4 100644 --- a/plugins/kubectl/kubectl.plugin.zsh +++ b/plugins/kubectl/kubectl.plugin.zsh @@ -98,6 +98,7 @@ alias kdd='kubectl describe deployment' alias kdeld='kubectl delete deployment' alias ksd='kubectl scale deployment' alias krsd='kubectl rollout status deployment' +alias krrd='kubectl rollout restart deployment' function kres(){ kubectl set env $@ REFRESHED_AT=$(date +%Y%m%d%H%M%S) @@ -120,6 +121,7 @@ alias kdss='kubectl describe statefulset' alias kdelss='kubectl delete statefulset' alias ksss='kubectl scale statefulset' alias krsss='kubectl rollout status statefulset' +alias krrss='kubectl rollout restart statefulset' # Port forwarding alias kpf="kubectl port-forward" From fc2d0f8848aded33596b85eafa0b50d7e6558d0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Sun, 23 Nov 2025 20:50:17 +0100 Subject: [PATCH 167/199] chore: add OpenSSF Best Practices badge (#13443) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2ccb63b69..ab2e57144 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ To learn more, visit [ohmyz.sh](https://ohmyz.sh), follow [@ohmyzsh](https://x.c Twitter), and join us on [Discord](https://discord.gg/ohmyzsh). [![CI](https://github.com/ohmyzsh/ohmyzsh/workflows/CI/badge.svg)](https://github.com/ohmyzsh/ohmyzsh/actions?query=workflow%3ACI) +[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/10713/badge)](https://www.bestpractices.dev/projects/10713) [![X (formerly Twitter) Follow](https://img.shields.io/twitter/follow/ohmyzsh?label=%40ohmyzsh&logo=x&style=flat)](https://twitter.com/intent/follow?screen_name=ohmyzsh) [![Mastodon Follow](https://img.shields.io/mastodon/follow/111169632522566717?label=%40ohmyzsh&domain=https%3A%2F%2Fmstdn.social&logo=mastodon&style=flat)](https://mstdn.social/@ohmyzsh) [![Discord server](https://img.shields.io/discord/642496866407284746)](https://discord.gg/ohmyzsh) From 441299ca775d0e718e72d8cf2490702ac98d3b08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 23 Nov 2025 22:35:53 +0100 Subject: [PATCH 168/199] chore(deps): bump actions/checkout from 5.0.0 to 6.0.0 (#13438) Bumps [actions/checkout](https://github.com/actions/checkout) from 5.0.0 to 6.0.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/08c6903cd8c0fde910a37f88322edcfb5dd907a8...1af3b93b6815bc44a9784bd300feb67ff0d1eeb3) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies.yml | 2 +- .github/workflows/installer.yml | 4 ++-- .github/workflows/main.yml | 2 +- .github/workflows/scorecard.yml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index 9ff5ae375..45dee6f5d 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -19,7 +19,7 @@ jobs: egress-policy: audit - name: Checkout - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: fetch-depth: 0 - name: Authenticate as @ohmyzsh diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index 829d3804f..120381dd8 100644 --- a/.github/workflows/installer.yml +++ b/.github/workflows/installer.yml @@ -31,7 +31,7 @@ jobs: egress-policy: audit - name: Set up git repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - name: Install zsh if: runner.os == 'Linux' run: sudo apt-get update; sudo apt-get install zsh @@ -52,7 +52,7 @@ jobs: egress-policy: audit - name: Checkout - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - name: Install Vercel CLI run: npm install -g vercel - name: Setup project and deploy diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5bd062e1b..8200f50a6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,7 +29,7 @@ jobs: egress-policy: audit - name: Set up git repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - name: Install zsh run: sudo apt-get update; sudo apt-get install zsh - name: Check syntax diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index eec4b453d..5078aecc6 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -41,7 +41,7 @@ jobs: egress-policy: audit - name: "Checkout code" - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false From 0116e7a5af51e1c1bb10f99004224a2136406420 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 23 Nov 2025 22:36:07 +0100 Subject: [PATCH 169/199] chore(deps): bump github/codeql-action from 4.31.3 to 4.31.4 (#13439) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.3 to 4.31.4. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/014f16e7ab1402f30e7c3329d33797e7948572db...e12f0178983d466f2f6028f5cc7a6d786fd97f4b) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 5078aecc6..e57546112 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -60,6 +60,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@014f16e7ab1402f30e7c3329d33797e7948572db # v4.31.3 + uses: github/codeql-action/upload-sarif@e12f0178983d466f2f6028f5cc7a6d786fd97f4b # v4.31.4 with: sarif_file: results.sarif From beadd56dd75e8a40fe0a7d4a5d63ed5bf9efcd48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 23 Nov 2025 22:37:35 +0100 Subject: [PATCH 170/199] chore(deps): bump actions/create-github-app-token from 2.1.4 to 2.2.0 (#13440) Bumps [actions/create-github-app-token](https://github.com/actions/create-github-app-token) from 2.1.4 to 2.2.0. - [Release notes](https://github.com/actions/create-github-app-token/releases) - [Commits](https://github.com/actions/create-github-app-token/compare/67018539274d69449ef7c02e8e71183d1719ab42...7e473efe3cb98aa54f8d4bac15400b15fad77d94) --- updated-dependencies: - dependency-name: actions/create-github-app-token dependency-version: 2.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies.yml | 2 +- .github/workflows/project.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index 45dee6f5d..1c4ae131a 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -24,7 +24,7 @@ jobs: fetch-depth: 0 - name: Authenticate as @ohmyzsh id: generate-token - uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4 + uses: actions/create-github-app-token@7e473efe3cb98aa54f8d4bac15400b15fad77d94 # v2.2.0 with: app-id: ${{ secrets.OHMYZSH_APP_ID }} private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index 1d22ec3d1..6a236e691 100644 --- a/.github/workflows/project.yml +++ b/.github/workflows/project.yml @@ -22,7 +22,7 @@ jobs: egress-policy: audit - name: Authenticate as @ohmyzsh id: generate-token - uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4 + uses: actions/create-github-app-token@7e473efe3cb98aa54f8d4bac15400b15fad77d94 # v2.2.0 with: app-id: ${{ secrets.OHMYZSH_APP_ID }} private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} From 343c5a83cb758e65fd638c7c05672198a9860619 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 30 Nov 2025 16:28:47 +0100 Subject: [PATCH 171/199] chore(deps): bump github/codeql-action from 4.31.4 to 4.31.5 (#13456) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.4 to 4.31.5. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/e12f0178983d466f2f6028f5cc7a6d786fd97f4b...fdbfb4d2750291e159f0156def62b853c2798ca2) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index e57546112..95d1086b8 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -60,6 +60,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@e12f0178983d466f2f6028f5cc7a6d786fd97f4b # v4.31.4 + uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5 with: sarif_file: results.sarif From a449c0247d69726fe4f3ca4fe88182bdb215a5d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 30 Nov 2025 16:29:07 +0100 Subject: [PATCH 172/199] chore(deps): bump actions/setup-python from 6.0.0 to 6.1.0 (#13455) Bumps [actions/setup-python](https://github.com/actions/setup-python) from 6.0.0 to 6.1.0. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/e797f83bcb11b83ae66e0230d6156d7c80228e7c...83679a892e2d95755f2dac6acb0bfd1e9ac5d548) --- updated-dependencies: - dependency-name: actions/setup-python dependency-version: 6.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index 1c4ae131a..000589087 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -29,7 +29,7 @@ jobs: app-id: ${{ secrets.OHMYZSH_APP_ID }} private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} - name: Setup Python - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: "3.12" cache: "pip" From ca5c467db1d495a4b5c0049a4cf476ca7f34b790 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Mon, 1 Dec 2025 09:59:09 +0100 Subject: [PATCH 173/199] fix(dependencies): only open PR if there are relevant changes (#13454) Fixes cases like #13453 --- .github/workflows/dependencies/updater.py | 70 +++++++++++++---------- 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/.github/workflows/dependencies/updater.py b/.github/workflows/dependencies/updater.py index 02cff9030..aee15d9e0 100644 --- a/.github/workflows/dependencies/updater.py +++ b/.github/workflows/dependencies/updater.py @@ -219,32 +219,33 @@ class Dependency: # Create new branch branch = Git.checkout_or_create_branch(branch_name) - # Update dependencies.yml file - self.__update_yaml( - f"tag:{new_version}" if is_tag else status["version"] - ) - # Update dependency files self.__apply_upstream_changes() - # Add all changes and commit - has_new_commit = Git.add_and_commit(self.name, new_version) - - if has_new_commit: - # Push changes to remote - Git.push(branch) - - # Create GitHub PR - GitHub.create_pr( - branch, - f"feat({self.name}): update to version {new_version}", - f"""## Description - -Update for **{self.desc}**: update to version [{new_version}]({status['head_url']}). -Check out the [list of changes]({status['compare_url']}). -""", + if not Git.repo_is_clean(): + # Update dependencies.yml file + self.__update_yaml( + f"tag:{new_version}" if is_tag else status["version"] ) + # Add all changes and commit + has_new_commit = Git.add_and_commit(self.name, new_version) + + if has_new_commit: + # Push changes to remote + Git.push(branch) + + # Create GitHub PR + GitHub.create_pr( + branch, + f"feat({self.name}): update to version {new_version}", + f"""## Description + +Update for **{self.desc}**: update to version [{new_version}]({status["head_url"]}). +Check out the [list of changes]({status["compare_url"]}). +""", + ) + # Clean up repository Git.clean_repo() except (CommandRunner.Exception, shutil.Error) as e: @@ -275,8 +276,8 @@ Check out the [list of changes]({status['compare_url']}). There is a new version of `{self.name}` {self.kind} available. -New version: [{new_version}]({status['head_url']}) -Check out the [list of changes]({status['compare_url']}). +New version: [{new_version}]({status["head_url"]}) +Check out the [list of changes]({status["compare_url"]}). """ print("Creating GitHub issue", file=sys.stderr) @@ -377,21 +378,28 @@ class Git: ) return branch_name + @staticmethod + def repo_is_clean() -> bool: + """ + Returns `True` if the repo is clean. + Returns `False` if the repo is dirty. + """ + try: + CommandRunner.run_or_fail( + ["git", "diff", "--exit-code"], stage="CheckRepoClean" + ) + return True + except CommandRunner.Exception: + return False + @staticmethod def add_and_commit(scope: str, version: str) -> bool: """ Returns `True` if there were changes and were indeed commited. Returns `False` if the repo was clean and no changes were commited. """ - # check if repo is clean (clean => no error, no commit) - try: - CommandRunner.run_or_fail( - ["git", "diff", "--exit-code"], stage="CheckRepoClean" - ) + if Git.repo_is_clean(): return False - except CommandRunner.Exception: - # if it's other kind of error just throw! - pass user_name = os.environ.get("GIT_APP_NAME") user_email = os.environ.get("GIT_APP_EMAIL") From ee30bc535a5a9ec1f062558af2ed8b83ad5af7a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Mon, 1 Dec 2025 10:49:01 +0100 Subject: [PATCH 174/199] refactor(fig)!: remove archived `fig` plugin BREAKING CHANGE: the fig plugin has been removed. `fig` was sunset on September 1, 2024. Having this plugin no longer makes sense. See https://fig.io/ for more information. --- plugins/fig/README.md | 9 --------- plugins/fig/fig.plugin.zsh | 13 ------------- 2 files changed, 22 deletions(-) delete mode 100644 plugins/fig/README.md delete mode 100644 plugins/fig/fig.plugin.zsh diff --git a/plugins/fig/README.md b/plugins/fig/README.md deleted file mode 100644 index 3861958d6..000000000 --- a/plugins/fig/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Fig plugin - -This plugin sets up completion for [Fig](https://fig.io/). - -To use it, add `fig` to the plugins array in your zshrc file: - -```zsh -plugins=(... fig) -``` diff --git a/plugins/fig/fig.plugin.zsh b/plugins/fig/fig.plugin.zsh deleted file mode 100644 index cddb6c7c0..000000000 --- a/plugins/fig/fig.plugin.zsh +++ /dev/null @@ -1,13 +0,0 @@ -if ! (( $+commands[fig] )); then - return -fi - -# If the completion file doesn't exist yet, we need to autoload it and -# bind it to `fig`. Otherwise, compinit will have already done that -if [[ ! -f "$ZSH_CACHE_DIR/completions/_fig" ]]; then - autoload -Uz _fig - typeset -g -A _comps - _comps[fig]=_fig -fi - -fig completion zsh >| "$ZSH_CACHE_DIR/completions/_fig" &| From 977c4f93a65e9befbb6b960c7062f24c5fca6059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Mon, 1 Dec 2025 10:51:33 +0100 Subject: [PATCH 175/199] refactor(rbfu)!: remove deprecated `rbfu` plugin BREAKING CHANGE: `rbfu`, the tool to manage Ruby versions, has long been deprecated (2013-02-05). The plugin has been removed. If you were still using it, consider using alternative Ruby version managers: https://www.jetbrains.com/help/ruby/ruby-version-managers.html --- plugins/rbfu/README.md | 18 ------------- plugins/rbfu/rbfu.plugin.zsh | 49 ------------------------------------ 2 files changed, 67 deletions(-) delete mode 100644 plugins/rbfu/README.md delete mode 100644 plugins/rbfu/rbfu.plugin.zsh diff --git a/plugins/rbfu/README.md b/plugins/rbfu/README.md deleted file mode 100644 index fbcab64de..000000000 --- a/plugins/rbfu/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# rbfu plugin - -This plugin starts [rbfu](https://github.com/hmans/rbfu), a minimal Ruby version -manager, and adds some useful functions. - -To use it, add `rbfu` to the plugins array in your zshrc file: - -```zsh -plugins=(... rbfu) -``` - -**Note: `rbfu` is deprecated and should no longer be used.** - -## Functions - -- `rbfu-rubies`: lists all installed rubies available to rbfu. - -- `rvm_prompt_info`: shows the Ruby version being used with rbfu. diff --git a/plugins/rbfu/rbfu.plugin.zsh b/plugins/rbfu/rbfu.plugin.zsh deleted file mode 100644 index 27dc3eec6..000000000 --- a/plugins/rbfu/rbfu.plugin.zsh +++ /dev/null @@ -1,49 +0,0 @@ -# Enables rbfu with --auto option, if available. -# -# Also provides a command to list all installed/available -# rubies. To ensure compatibility with themes, creates the -# rvm_prompt_info function to return the $RBFU_RUBY_VERSION -# version. - -command -v rbfu &>/dev/null || return - -eval "$(rbfu --init --auto)" - -# Internal: Print ruby version details, if it's currently active, etc. -function _rbfu_rubies_print() { - # 1: path to ruby file - # 2: active ruby - local rb rb_out - rb="${$1:t}" - rb_out="$rb" - - # If the ruby is a symlink, add @ to the name. - if [[ -h "$1" ]]; then - rb_out="${rb_out}${fg[green]}@${reset_color}" - fi - - # If the ruby is active, add * to the name and show it in red. - if [[ "$rb" = "$2" ]]; then - rb_out="${fg[red]}${rb_out} ${fg[red]}*${reset_color}" - fi - - echo $rb_out -} - -# Public: Provide a list with all available rubies, this basically depends -# on ~/.rfbu/rubies. Highlights the currently active ruby version and aliases. -function rbfu-rubies() { - local rbfu_dir active_rb - rbfu_dir="${RBFU_RUBIES:-${HOME}/.rbfu/rubies}" - active_rb="${RBFU_RUBY_VERSION:-system}" - - _rbfu_rubies_print "${rbfu_dir}/system" "$active_rb" - for rb in ${rbfu_dir}/*(N); do - _rbfu_rubies_print "$rb" "$active_rb" - done -} - -# Public: Create rvm_prompt_info command for themes compatibility, unless -# it has already been defined. -(( ${+functions[rvm_prompt_info]} )) || \ -function rvm_prompt_info() { echo "${${RBFU_RUBY_VERSION:=system}:gs/%/%%}" } From e9fc134236323ce3ce376715b1e55a54ed6ac7ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Mon, 1 Dec 2025 11:22:14 +0100 Subject: [PATCH 176/199] ci(dependencies): update job permissions, change commits to `chore` (#13457) --- .github/workflows/dependencies.yml | 5 ++--- .github/workflows/dependencies/updater.py | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index 000589087..a21803ec6 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -4,14 +4,13 @@ on: schedule: - cron: "0 6 * * 0" -permissions: - contents: write - jobs: check: name: Check for updates runs-on: ubuntu-latest if: github.repository == 'ohmyzsh/ohmyzsh' + permissions: + contents: write # this is needed to push commits and branches steps: - name: Harden the runner (Audit all outbound calls) uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 diff --git a/.github/workflows/dependencies/updater.py b/.github/workflows/dependencies/updater.py index aee15d9e0..783161d6c 100644 --- a/.github/workflows/dependencies/updater.py +++ b/.github/workflows/dependencies/updater.py @@ -238,7 +238,7 @@ class Dependency: # Create GitHub PR GitHub.create_pr( branch, - f"feat({self.name}): update to version {new_version}", + f"chore({self.name}): update to version {new_version}", f"""## Description Update for **{self.desc}**: update to version [{new_version}]({status["head_url"]}). @@ -423,7 +423,7 @@ class Git: f"user.email={user_email}", "commit", "-m", - f"feat({scope}): update to {version}", + f"chore({scope}): update to {version}", ], stage="CreateCommit", env=clean_env, From 5f7f41975992ac1e21fd91df866b02ddfd4fad65 Mon Sep 17 00:00:00 2001 From: benzlokzik <121052717+benzlokzik@users.noreply.github.com> Date: Fri, 5 Dec 2025 10:51:45 +0300 Subject: [PATCH 177/199] feat(uv): add alias for pinning Python version (#12914) --- plugins/uv/README.md | 1 + plugins/uv/uv.plugin.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/uv/README.md b/plugins/uv/README.md index 1b99c1185..144ec456a 100644 --- a/plugins/uv/README.md +++ b/plugins/uv/README.md @@ -19,6 +19,7 @@ plugins=(... uv) | uvlu | `uv lock --upgrade` | Lock the dependencies to the newest compatible versions | | uvp | `uv pip` | Manage pip packages | | uvpy | `uv python` | Manage Python installs | +| uvpp | `uv python pin` | Pin the current project to use a specific Python version | | uvr | `uv run` | Run commands within the project's environment | | uvrm | `uv remove` | Remove packages from the project | | uvs | `uv sync` | Sync the environment with the lock file | diff --git a/plugins/uv/uv.plugin.zsh b/plugins/uv/uv.plugin.zsh index abcbc117e..ef0f78f6b 100644 --- a/plugins/uv/uv.plugin.zsh +++ b/plugins/uv/uv.plugin.zsh @@ -12,6 +12,7 @@ alias uvlr='uv lock --refresh' alias uvlu='uv lock --upgrade' alias uvp='uv pip' alias uvpy='uv python' +alias uvpp='uv python pin' alias uvr='uv run' alias uvrm='uv remove' alias uvs='uv sync' From a98a9f7122d583a9547e9a8b2ab8c14570fc6e54 Mon Sep 17 00:00:00 2001 From: Cyril Plisko Date: Fri, 5 Dec 2025 13:00:56 +0200 Subject: [PATCH 178/199] feat(jj): add `jj` aliases for common workflows (#13179) - jj bookmark Aliases for bookmark subcommands - jj git push Aliases for popular push flags - jj new "trunk()" - jj rebase -d "trunk()" - jj status --- plugins/jj/README.md | 17 +++++++++++++++++ plugins/jj/jj.plugin.zsh | 16 ++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/plugins/jj/README.md b/plugins/jj/README.md index 541b8f907..fd964e309 100644 --- a/plugins/jj/README.md +++ b/plugins/jj/README.md @@ -12,6 +12,16 @@ plugins=(... jj) | Alias | Command | | ------ | ----------------------------- | +| jjb | `jj bookmark` | +| jjbc | `jj bookmark create` | +| jjbd | `jj bookmark delete` | +| jjbf | `jj bookmark forget` | +| jjbl | `jj bookmark list` | +| jjbm | `jj bookmark move` | +| jjbr | `jj bookmark rename` | +| jjbs | `jj bookmark set` | +| jjbt | `jj bookmark track` | +| jjbu | `jj bookmark untrack` | | jjc | `jj commit` | | jjcmsg | `jj commit --message` | | jjd | `jj diff` | @@ -22,14 +32,20 @@ plugins=(... jj) | jjgf | `jj git fetch` | | jjgfa | `jj git fetch --all-remotes` | | jjgp | `jj git push` | +| jjgpa | `jj git push --all` | +| jjgpd | `jj git push --deleted` | +| jjgpt | `jj git push --tracked` | | jjl | `jj log` | | jjla | `jj log -r "all()"` | | jjn | `jj new` | +| jjnt | `jj new "trunk()"` | | jjrb | `jj rebase` | +| jjrbm | `jj rebase -d "trunk()"` | | jjrs | `jj restore` | | jjrt | `cd "$(jj root \|\| echo .)"` | | jjsp | `jj split` | | jjsq | `jj squash` | +| jjst | `jj status` | ## Prompt usage @@ -88,3 +104,4 @@ that. ## Contributors - [nasso](https://github.com/nasso) - Plugin Author +- [imp](https://github.com/imp) - Occasional Alias Contributor diff --git a/plugins/jj/jj.plugin.zsh b/plugins/jj/jj.plugin.zsh index 825460517..696bc380b 100644 --- a/plugins/jj/jj.plugin.zsh +++ b/plugins/jj/jj.plugin.zsh @@ -34,6 +34,16 @@ function jj_prompt_template() { } # Aliases (sorted alphabetically) +alias jjb='jj bookmark' +alias jjbc='jj bookmark create' +alias jjbd='jj bookmark delete' +alias jjbf='jj bookmark forget' +alias jjbl='jj bookmark list' +alias jjbm='jj bookmark move' +alias jjbr='jj bookmark rename' +alias jjbs='jj bookmark set' +alias jjbt='jj bookmark track' +alias jjbu='jj bookmark untrack' alias jjc='jj commit' alias jjcmsg='jj commit --message' alias jjd='jj diff' @@ -44,11 +54,17 @@ alias jjgcl='jj git clone' alias jjgf='jj git fetch' alias jjgfa='jj git fetch --all-remotes' alias jjgp='jj git push' +alias jjgpa='jj git push --all' +alias jjgpd='jj git push --deleted' +alias jjgpt='jj git push --tracked' alias jjl='jj log' alias jjla='jj log -r "all()"' alias jjn='jj new' +alias jjnt='jj new "trunk()"' alias jjrb='jj rebase' +alias jjrbm='jj rebase -d "trunk()"' alias jjrs='jj restore' alias jjrt='cd "$(jj root || echo .)"' alias jjsp='jj split' alias jjsq='jj squash' +alias jjst='jj status' From 1b4497fc8f51cfc1f326f3474203f9ea6dfd3804 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Dec 2025 09:06:29 +0100 Subject: [PATCH 179/199] chore(deps): bump urllib3 in /.github/workflows/dependencies (#13464) Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.5.0 to 2.6.0. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/2.5.0...2.6.0) --- updated-dependencies: - dependency-name: urllib3 dependency-version: 2.6.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index 4fc25d593..94eaf3c9a 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -4,4 +4,4 @@ idna==3.11 PyYAML==6.0.3 requests==2.32.5 semver==3.0.4 -urllib3==2.5.0 +urllib3==2.6.0 From 953f526dea332c6ba12f178f61785c5a3aa9ae73 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 7 Dec 2025 18:38:05 +0100 Subject: [PATCH 180/199] chore(deps): bump github/codeql-action from 4.31.5 to 4.31.7 (#13469) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.5 to 4.31.7. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/fdbfb4d2750291e159f0156def62b853c2798ca2...cf1bb45a277cb3c205638b2cd5c984db1c46a412) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 95d1086b8..42a1dc0cb 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -60,6 +60,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5 + uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7 with: sarif_file: results.sarif From 3b66f643e4cfc78dfd62bb332f28f82d7dff2461 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 7 Dec 2025 18:38:26 +0100 Subject: [PATCH 181/199] chore(deps): bump step-security/harden-runner from 2.13.2 to 2.13.3 (#13471) Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.13.2 to 2.13.3. - [Release notes](https://github.com/step-security/harden-runner/releases) - [Commits](https://github.com/step-security/harden-runner/compare/95d9a5deda9de15063e7595e9719c11c38c90ae2...df199fb7be9f65074067a9eb93f12bb4c5547cf2) --- updated-dependencies: - dependency-name: step-security/harden-runner dependency-version: 2.13.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies.yml | 2 +- .github/workflows/installer.yml | 4 ++-- .github/workflows/main.yml | 2 +- .github/workflows/project.yml | 2 +- .github/workflows/scorecard.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index a21803ec6..aeeda6711 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -13,7 +13,7 @@ jobs: contents: write # this is needed to push commits and branches steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 + uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3 with: egress-policy: audit diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index 120381dd8..d48a9603e 100644 --- a/.github/workflows/installer.yml +++ b/.github/workflows/installer.yml @@ -26,7 +26,7 @@ jobs: - macos-latest steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 + uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3 with: egress-policy: audit @@ -47,7 +47,7 @@ jobs: - test steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 + uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3 with: egress-policy: audit diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8200f50a6..ea64e3a2f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,7 +24,7 @@ jobs: if: github.repository == 'ohmyzsh/ohmyzsh' steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 + uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3 with: egress-policy: audit diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index 6a236e691..baaa1f9f2 100644 --- a/.github/workflows/project.yml +++ b/.github/workflows/project.yml @@ -17,7 +17,7 @@ jobs: if: github.repository == 'ohmyzsh/ohmyzsh' steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 + uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3 with: egress-policy: audit - name: Authenticate as @ohmyzsh diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 42a1dc0cb..cc8e0a8eb 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -36,7 +36,7 @@ jobs: steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@95d9a5deda9de15063e7595e9719c11c38c90ae2 # v2.13.2 + uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3 with: egress-policy: audit From 0ebeae78d0ebdefbd0af38bfdad10504770acb82 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 7 Dec 2025 18:38:44 +0100 Subject: [PATCH 182/199] chore(deps): bump actions/create-github-app-token from 2.2.0 to 2.2.1 (#13470) Bumps [actions/create-github-app-token](https://github.com/actions/create-github-app-token) from 2.2.0 to 2.2.1. - [Release notes](https://github.com/actions/create-github-app-token/releases) - [Commits](https://github.com/actions/create-github-app-token/compare/7e473efe3cb98aa54f8d4bac15400b15fad77d94...29824e69f54612133e76f7eaac726eef6c875baf) --- updated-dependencies: - dependency-name: actions/create-github-app-token dependency-version: 2.2.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies.yml | 2 +- .github/workflows/project.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index aeeda6711..753effdcb 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -23,7 +23,7 @@ jobs: fetch-depth: 0 - name: Authenticate as @ohmyzsh id: generate-token - uses: actions/create-github-app-token@7e473efe3cb98aa54f8d4bac15400b15fad77d94 # v2.2.0 + uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1 with: app-id: ${{ secrets.OHMYZSH_APP_ID }} private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index baaa1f9f2..9bb3e6550 100644 --- a/.github/workflows/project.yml +++ b/.github/workflows/project.yml @@ -22,7 +22,7 @@ jobs: egress-policy: audit - name: Authenticate as @ohmyzsh id: generate-token - uses: actions/create-github-app-token@7e473efe3cb98aa54f8d4bac15400b15fad77d94 # v2.2.0 + uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1 with: app-id: ${{ secrets.OHMYZSH_APP_ID }} private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} From ddec79ad4384325e08104574a9e0b81bb8a7e9d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 7 Dec 2025 18:39:14 +0100 Subject: [PATCH 183/199] chore(deps): bump actions/checkout from 6.0.0 to 6.0.1 (#13468) Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.0 to 6.0.1. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/1af3b93b6815bc44a9784bd300feb67ff0d1eeb3...8e8c483db84b4bee98b60c0593521ed34d9990e8) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies.yml | 2 +- .github/workflows/installer.yml | 4 ++-- .github/workflows/main.yml | 2 +- .github/workflows/scorecard.yml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index 753effdcb..149c7fef7 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -18,7 +18,7 @@ jobs: egress-policy: audit - name: Checkout - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 - name: Authenticate as @ohmyzsh diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index d48a9603e..dcf5b52d8 100644 --- a/.github/workflows/installer.yml +++ b/.github/workflows/installer.yml @@ -31,7 +31,7 @@ jobs: egress-policy: audit - name: Set up git repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Install zsh if: runner.os == 'Linux' run: sudo apt-get update; sudo apt-get install zsh @@ -52,7 +52,7 @@ jobs: egress-policy: audit - name: Checkout - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Install Vercel CLI run: npm install -g vercel - name: Setup project and deploy diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ea64e3a2f..a8363eceb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,7 +29,7 @@ jobs: egress-policy: audit - name: Set up git repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Install zsh run: sudo apt-get update; sudo apt-get install zsh - name: Check syntax diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index cc8e0a8eb..068fb5e7d 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -41,7 +41,7 @@ jobs: egress-policy: audit - name: "Checkout code" - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: persist-credentials: false From 72acd2ca90d01e09f7960d6b62b8eb30e476de6c Mon Sep 17 00:00:00 2001 From: Mohaiminus Sakib <3596793+rode093@users.noreply.github.com> Date: Mon, 8 Dec 2025 16:57:50 +0100 Subject: [PATCH 184/199] feat(uv): add more useful aliases (#13462) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Mohaiminus Sakib Co-authored-by: Marc Cornellà --- plugins/uv/README.md | 43 +++++++++++++++++++++++----------------- plugins/uv/uv.plugin.zsh | 6 ++++++ 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/plugins/uv/README.md b/plugins/uv/README.md index 144ec456a..266963e18 100644 --- a/plugins/uv/README.md +++ b/plugins/uv/README.md @@ -1,6 +1,7 @@ # uv plugin -This plugin automatically installs [uv](https://github.com/astral-sh/uv)'s completions for you, and keeps them up to date. It also adds convenient aliases for common usage. +This plugin automatically installs [uv](https://github.com/astral-sh/uv)'s completions for you, +and keeps them up to date. It also adds convenient aliases for common usage. To use it, add `uv` to the plugins array in your zshrc file: @@ -10,20 +11,26 @@ plugins=(... uv) ## Aliases -| Alias | Command | Description | -|:----- |------------------------------------------------------------------------ |:-------------------------------------------------------------------- | -| uva | `uv add` | Add packages to the project | -| uvexp | `uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet` | Export the lock file to `requirements.txt` | -| uvl | `uv lock` | Lock the dependencies | -| uvlr | `uv lock --refresh` | Rebuild the lock file without upgrading dependencies | -| uvlu | `uv lock --upgrade` | Lock the dependencies to the newest compatible versions | -| uvp | `uv pip` | Manage pip packages | -| uvpy | `uv python` | Manage Python installs | -| uvpp | `uv python pin` | Pin the current project to use a specific Python version | -| uvr | `uv run` | Run commands within the project's environment | -| uvrm | `uv remove` | Remove packages from the project | -| uvs | `uv sync` | Sync the environment with the lock file | -| uvsr | `uv sync --refresh` | "Force" sync the environment with the lock file (ignore cache) | -| uvsu | `uv sync --upgrade` | Sync the environment, allowing upgrades and ignoring the lock file | -| uvup | `uv self update` | Update the UV tool to the latest version | -| uvv | `uv venv` | Manage virtual environments | +| Alias | Command | Description | +| :---- | ---------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- | +| uva | `uv add` | Add packages to the project | +| uvexp | `uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet` | Export the lock file to `requirements.txt` | +| uvi | `uv init` | Initialize a new project in current workspace and environment. | +| uvinw | `uv init --no-workspace` | Initialize a new project in a new workspace and environment | +| uvl | `uv lock` | Lock the dependencies | +| uvlr | `uv lock --refresh` | Rebuild the lock file without upgrading dependencies | +| uvlu | `uv lock --upgrade` | Lock the dependencies to the newest compatible versions | +| uvp | `uv pip` | Manage pip packages | +| uvpi | `uv python install` | Install a specific version of python | +| uvpl | `uv python list` | Lists all python version installed | +| uvpp | `uv python pin` | Pin the current project to use a specific Python version | +| uvpu | `uv python uninstall` | Remove a specific version of python | +| uvpy | `uv python` | Manage Python installs | +| uvr | `uv run` | Run commands within the project's environment | +| uvrm | `uv remove` | Remove packages from the project | +| uvs | `uv sync` | Sync the environment with the lock file | +| uvsr | `uv sync --refresh` | "Force" sync the environment with the lock file (ignore cache) | +| uvsu | `uv sync --upgrade` | Sync the environment, allowing upgrades and ignoring the lock file | +| uvtr | `uv tree` | Displays the full dependency tree for the current project environment | +| uvup | `uv self update` | Update the UV tool to the latest version | +| uvv | `uv venv` | Manage virtual environments | diff --git a/plugins/uv/uv.plugin.zsh b/plugins/uv/uv.plugin.zsh index ef0f78f6b..0c0795e56 100644 --- a/plugins/uv/uv.plugin.zsh +++ b/plugins/uv/uv.plugin.zsh @@ -7,10 +7,15 @@ alias uv="noglob uv" alias uva='uv add' alias uvexp='uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet' +alias uvi='uv init' +alias uvinw='uv init --no-workspace' alias uvl='uv lock' alias uvlr='uv lock --refresh' alias uvlu='uv lock --upgrade' alias uvp='uv pip' +alias uvpi='uv python install' +alias uvpl='uv python list' +alias uvpu='uv python uninstall' alias uvpy='uv python' alias uvpp='uv python pin' alias uvr='uv run' @@ -18,6 +23,7 @@ alias uvrm='uv remove' alias uvs='uv sync' alias uvsr='uv sync --refresh' alias uvsu='uv sync --upgrade' +alias uvtr='uv tree' alias uvup='uv self update' alias uvv='uv venv' From 92aed2e93624124182ba977a91efa5bbe1e76d5f Mon Sep 17 00:00:00 2001 From: Tanzim Hossain Romel Date: Wed, 10 Dec 2025 01:14:31 +0600 Subject: [PATCH 185/199] feat(extract): add unar as fallback for RAR extraction (#13472) Add unar as a fallback when unrar is not available for extracting RAR files. This addresses the issue where unrar has been removed from Homebrew due to licensing issues. The extraction now: - Prefers unrar if available (backward compatible) - Falls back to unar if unrar is not found - Shows helpful error message if neither tool is installed --- plugins/extract/extract.plugin.zsh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/plugins/extract/extract.plugin.zsh b/plugins/extract/extract.plugin.zsh index d8cbc8b94..aed77e7d7 100644 --- a/plugins/extract/extract.plugin.zsh +++ b/plugins/extract/extract.plugin.zsh @@ -77,7 +77,15 @@ EOF (*.lzma) unlzma "$full_path" ;; (*.z) uncompress "$full_path" ;; (*.zip|*.war|*.jar|*.ear|*.sublime-package|*.ipa|*.ipsw|*.xpi|*.apk|*.aar|*.whl|*.vsix|*.crx|*.pk3|*.pk4) unzip "$full_path" ;; - (*.rar) unrar x -ad "$full_path" ;; + (*.rar) + if (( $+commands[unrar] )); then + unrar x -ad "$full_path" + elif (( $+commands[unar] )); then + unar -o . "$full_path" + else + echo "extract: cannot extract RAR files: install unrar or unar" >&2 + success=1 + fi ;; (*.rpm) rpm2cpio "$full_path" | cpio --quiet -id ;; (*.7z | *.7z.[0-9]* | *.pk7) 7za x "$full_path" ;; From f84341c57478445d534d0318231df8157ddfed3e Mon Sep 17 00:00:00 2001 From: tDwtp Date: Thu, 11 Dec 2025 15:05:23 +0100 Subject: [PATCH 186/199] fix(git): git_status_prompt should respect spaces in prefixes (#13478) --- lib/git.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/git.zsh b/lib/git.zsh index f4d4229cb..8d38f3268 100644 --- a/lib/git.zsh +++ b/lib/git.zsh @@ -117,7 +117,7 @@ function _omz_git_prompt_status() { fi # For each status prefix, do a regex comparison - for status_prefix in ${(k)prefix_constant_map}; do + for status_prefix in "${(@k)prefix_constant_map}"; do local status_constant="${prefix_constant_map[$status_prefix]}" local status_regex=$'(^|\n)'"$status_prefix" From a4e15fdb1695ace2d6d67fb62729393b94d62836 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 09:57:41 +0100 Subject: [PATCH 187/199] chore(deps): bump github/codeql-action from 4.31.7 to 4.31.8 (#13481) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 068fb5e7d..3a1f5c92c 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -60,6 +60,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7 + uses: github/codeql-action/upload-sarif@1b168cd39490f61582a9beae412bb7057a6b2c4e # v4.31.8 with: sarif_file: results.sarif From 57781231bbef3df293ce3a4ae4bc58643f839c97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 09:59:27 +0100 Subject: [PATCH 188/199] chore(deps): bump urllib3 in /.github/workflows/dependencies (#13482) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index 94eaf3c9a..44ec3fb30 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -4,4 +4,4 @@ idna==3.11 PyYAML==6.0.3 requests==2.32.5 semver==3.0.4 -urllib3==2.6.0 +urllib3==2.6.2 From 1fee750c3bf53164ea93f564fe53764bb727f9ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 09:59:52 +0100 Subject: [PATCH 189/199] chore(deps): bump step-security/harden-runner from 2.13.3 to 2.14.0 (#13483) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies.yml | 2 +- .github/workflows/installer.yml | 4 ++-- .github/workflows/main.yml | 2 +- .github/workflows/project.yml | 2 +- .github/workflows/scorecard.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index 149c7fef7..8d8f5cc73 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -13,7 +13,7 @@ jobs: contents: write # this is needed to push commits and branches steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3 + uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: egress-policy: audit diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index dcf5b52d8..eef5bf322 100644 --- a/.github/workflows/installer.yml +++ b/.github/workflows/installer.yml @@ -26,7 +26,7 @@ jobs: - macos-latest steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3 + uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: egress-policy: audit @@ -47,7 +47,7 @@ jobs: - test steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3 + uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: egress-policy: audit diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a8363eceb..5917d5316 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,7 +24,7 @@ jobs: if: github.repository == 'ohmyzsh/ohmyzsh' steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3 + uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: egress-policy: audit diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index 9bb3e6550..70597cab6 100644 --- a/.github/workflows/project.yml +++ b/.github/workflows/project.yml @@ -17,7 +17,7 @@ jobs: if: github.repository == 'ohmyzsh/ohmyzsh' steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3 + uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: egress-policy: audit - name: Authenticate as @ohmyzsh diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 3a1f5c92c..2ce0dd5ff 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -36,7 +36,7 @@ jobs: steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3 + uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: egress-policy: audit From 7192af5239aaa3b22cb61de8c73702dcf8b1dc06 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 11:07:43 +0100 Subject: [PATCH 190/199] chore(deps): bump actions/upload-artifact from 5.0.0 to 6.0.0 (#13480) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 2ce0dd5ff..a40c491c5 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -53,7 +53,7 @@ jobs: publish_results: true - name: "Upload artifact" - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: SARIF file path: results.sarif From b5c449e1eb69d1390d1ea9ceba9f504fad383780 Mon Sep 17 00:00:00 2001 From: leggatron Date: Wed, 17 Dec 2025 02:04:09 -0500 Subject: [PATCH 191/199] feat(terraform): add `-parallelism=1` aliases (#13484) --- plugins/terraform/README.md | 2 ++ plugins/terraform/terraform.plugin.zsh | 2 ++ 2 files changed, 4 insertions(+) diff --git a/plugins/terraform/README.md b/plugins/terraform/README.md index 48fdae282..f7a9a93dc 100644 --- a/plugins/terraform/README.md +++ b/plugins/terraform/README.md @@ -20,9 +20,11 @@ plugins=(... terraform) | `tf` | `terraform` | | `tfa` | `terraform apply` | | `tfaa` | `terraform apply -auto-approve` | +| `tfap` | `terraform apply -parallelism=1` | | `tfc` | `terraform console` | | `tfd` | `terraform destroy` | | `tfd!` | `terraform destroy -auto-approve` | +| `tfdp` | `terraform destroy -parallelism=1` | | `tff` | `terraform fmt` | | `tffr` | `terraform fmt -recursive` | | `tfi` | `terraform init` | diff --git a/plugins/terraform/terraform.plugin.zsh b/plugins/terraform/terraform.plugin.zsh index b0054d56a..9026994e4 100644 --- a/plugins/terraform/terraform.plugin.zsh +++ b/plugins/terraform/terraform.plugin.zsh @@ -18,9 +18,11 @@ function tf_version_prompt_info() { alias tf='terraform' alias tfa='terraform apply' alias tfaa='terraform apply -auto-approve' +alias tfap='terraform apply -parallelism=1' alias tfc='terraform console' alias tfd='terraform destroy' alias 'tfd!'='terraform destroy -auto-approve' +alias tfdp='terraform destroy -parallelism=1' alias tff='terraform fmt' alias tffr='terraform fmt -recursive' alias tfi='terraform init' From d4a62a271529aab00db83dac72fdbd205dddc7ea Mon Sep 17 00:00:00 2001 From: Arvin Verain Date: Thu, 18 Dec 2025 01:35:46 +0800 Subject: [PATCH 192/199] refactor(git)!: remove old deprecated aliases (#13149) BREAKING CHANGE: the following deprecated aliases have been removed: gup, gupv, gupa, gupav, gupom, gupom. The following aliases have been deprecated: ggpull, ggpur, ggpush. `current_branch` has also been deprecated, in favor of `git_current_branch`. --- plugins/git/README.md | 48 ++++++++++++++------------------------ plugins/git/git.plugin.zsh | 36 +++++++++------------------- 2 files changed, 29 insertions(+), 55 deletions(-) diff --git a/plugins/git/README.md b/plugins/git/README.md index 0ecbea7b6..bbbb28bdf 100644 --- a/plugins/git/README.md +++ b/plugins/git/README.md @@ -234,40 +234,29 @@ branch exists. We do this via the function `git_main_branch`. These are aliases that have been removed, renamed, or otherwise modified in a way that may, or may not, receive further support. -| Alias | Command | Modification | -| :------- | :-------------------------------------------------------- | :-------------------------------------------------------- | -| `gap` | `git add --patch` | New alias: `gapa`. | -| `gcl` | `git config --list` | New alias: `gcf`. | -| `gdc` | `git diff --cached` | New alias: `gdca`. | -| `gdt` | `git difftool` | No replacement. | -| `ggpull` | `git pull origin $(current_branch)` | New alias: `ggl`. (`ggpull` still exists for now though.) | -| `ggpur` | `git pull --rebase origin $(current_branch)` | New alias: `ggu`. (`ggpur` still exists for now though.) | -| `ggpush` | `git push origin $(current_branch)` | New alias: `ggp`. (`ggpush` still exists for now though.) | -| `gk` | `gitk --all --branches` | Now aliased to `gitk --all --branches`. | -| `glg` | `git log --stat --max-count=10` | Now aliased to `git log --stat --color`. | -| `glgg` | `git log --graph --max-count=10` | Now aliased to `git log --graph --color`. | -| `gwc` | `git whatchanged -p --abbrev-commit --pretty = medium` | New alias: `gwch`. | -| `gup` | `git pull --rebase` | now alias `gpr` | -| `gupv` | `git pull --rebase -v` | now alias `gprv` | -| `gupa` | `git pull --rebase --autostash` | now alias `gpra` | -| `gupav` | `git pull --rebase --autostash -v` | now alias `gprav` | -| `gupom` | `git pull --rebase origin $(git_main_branch)` | now alias `gprom` | -| `gupomi` | `git pull --rebase=interactive origin $(git_main_branch)` | now alias `gpromi` | +| Alias | Command | Modification | +| :------- | :-------------------------------------------------------- | :-----------------------------------------------------| +| `gap` | `git add --patch` | New alias: `gapa` | +| `gcl` | `git config --list` | New alias: `gcf` | +| `gdt` | `git difftool` | No replacement | +| `ggpull` | `git pull origin $(git_current_branch)` | New function: `ggl` (`ggpull` is now aliased to this) | +| `ggpur` | `git pull --rebase origin $(git_current_branch)` | New function: `ggu` (`ggpur` is now aliased to this) | +| `ggpush` | `git push origin $(git_current_branch)` | New function: `ggp` (`ggpush` is now aliased to this) | ## Functions ### Current -| Command | Description | -| :----------------------- | :-------------------------------------------------------------------------------------------------------------- | -| `current_branch` | Returns the name of the current branch. | -| `git_current_user_email` | Returns the `user.email` config value. (Lives in `lib/git.zsh`.) | -| `git_current_user_name` | Returns the `user.name` config value. (Lives in `lib/git.zsh`.) | -| `git_develop_branch` | Returns the name of the “development” branch: `dev`, `devel`, `development` if they exist, `develop` otherwise. | -| `git_main_branch` | Returns the name of the main branch: `main` if it exists, `master` otherwise. | -| `grename ` | Renames branch `` to ``, including on the origin remote. | -| `gbda` | Deletes all merged branches | -| `gbds` | Deletes all squash-merged branches (**Note: performance degrades with number of branches**) | +| Command | Description | +| :----------------------- | :------------------------------------------------------------------------------------------------------------- | +| `git_current_branch` | Returns the name of the current branch (Lives in `lib/git.zsh`) | +| `git_current_user_email` | Returns the `user.email` config value (Lives in `lib/git.zsh`) | +| `git_current_user_name` | Returns the `user.name` config value (Lives in `lib/git.zsh`) | +| `git_develop_branch` | Returns the name of the “development” branch: `dev`, `devel`, `development` if they exist, `develop` otherwise | +| `git_main_branch` | Returns the name of the main branch: `main` if it exists, `master` otherwise | +| `grename ` | Renames branch `` to ``, including on the origin remote | +| `gbda` | Deletes all merged branches | +| `gbds` | Deletes all squash-merged branches (**Note: performance degrades with number of branches**) | ### Work in Progress (WIP) @@ -287,4 +276,3 @@ Note that `gwip` and `gunwip` are aliases, but are also documented here to group | Command | Description | Reason | | :------------------- | :-------------------------------------- | :--------------------------------------------------------------- | -| `current_repository` | Return the names of the current remotes | Didn't work properly. Use `git remote -v` instead (`grv` alias). | diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index c11799208..a240e1fb3 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -8,14 +8,6 @@ git_version="${${(As: :)$(git version 2>/dev/null)}[3]}" # (order should follow README) # -# The name of the current branch -# Back-compatibility wrapper for when this function was defined here in -# the plugin, before being pulled in to core lib/git.zsh as git_current_branch() -# to fix the core -> git plugin dependency. -function current_branch() { - git_current_branch -} - # Check for develop and similarly named branches function git_develop_branch() { command git rev-parse --git-dir &>/dev/null || return @@ -110,7 +102,6 @@ function ggpnp() { } compdef _git ggpnp=git-checkout -alias ggpur='ggu' alias g='git' alias ga='git add' alias gaa='git add --all' @@ -290,7 +281,6 @@ alias gprom='git pull --rebase origin $(git_main_branch)' alias gpromi='git pull --rebase=interactive origin $(git_main_branch)' alias gprum='git pull --rebase upstream $(git_main_branch)' alias gprumi='git pull --rebase=interactive upstream $(git_main_branch)' -alias ggpull='git pull origin "$(git_current_branch)"' function ggl() { if [[ $# != 0 ]] && [[ $# != 1 ]]; then @@ -334,7 +324,6 @@ is-at-least 2.30 "$git_version" \ alias gpv='git push --verbose' alias gpoat='git push origin --all && git push origin --tags' alias gpod='git push origin --delete' -alias ggpush='git push origin "$(git_current_branch)"' function ggp() { if [[ $# != 0 ]] && [[ $# != 1 ]]; then @@ -427,19 +416,16 @@ alias gke='\gitk --all $(git log --walk-reflogs --pretty=%h) &!' unset git_version -# Logic for adding warnings on deprecated aliases -local old_alias new_alias -for old_alias new_alias ( - # TODO(2023-10-19): remove deprecated `git pull --rebase` aliases - gup gpr - gupv gprv - gupa gpra - gupav gprav - gupom gprom - gupomi gpromi +# Logic for adding warnings on deprecated aliases or functions +local old_name new_name +for old_name new_name ( + current_branch git_current_branch + ggpull ggl + ggpur ggu + ggpush ggp ); do - aliases[$old_alias]=" - print -Pu2 \"%F{yellow}[oh-my-zsh] '%F{red}${old_alias}%F{yellow}' is a deprecated alias, using '%F{green}${new_alias}%F{yellow}' instead.%f\" - $new_alias" + aliases[$old_name]=" + print -Pu2 \"%F{yellow}[oh-my-zsh] '%F{red}${old_name}%F{yellow}' is deprecated, using '%F{green}${new_name}%F{yellow}' instead.%f\" + $new_name" done -unset old_alias new_alias +unset old_name new_name From 475b18f39a2406d1ba173e36f243935be413239d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my?= Date: Wed, 17 Dec 2025 18:50:21 +0100 Subject: [PATCH 193/199] fix(kubectl)!: change alias from `kl` to `klog` (#13204) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BREAKING CHANGE: `kl` alias has been renamed to `klog`, because of conflict with https://github.com/robinovitch61/kl. Co-authored-by: Marc Cornellà --- plugins/kubectl/README.md | 2 +- plugins/kubectl/kubectl.plugin.zsh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/kubectl/README.md b/plugins/kubectl/README.md index e510c5f40..19c36c991 100644 --- a/plugins/kubectl/README.md +++ b/plugins/kubectl/README.md @@ -88,7 +88,7 @@ plugins=(... kubectl) | kga | `kubectl get all` | List all resources in ps format | | kgaa | `kubectl get all --all-namespaces` | List the requested object(s) across all namespaces | | | | **Logs** | -| kl | `kubectl logs` | Print the logs for a container or resource | +| klog | `kubectl logs` | Print the logs for a container or resource | | klf | `kubectl logs -f` | Stream the logs for a container or resource (follow) | | | | **File copy** | | kcp | `kubectl cp` | Copy files and directories to and from containers | diff --git a/plugins/kubectl/kubectl.plugin.zsh b/plugins/kubectl/kubectl.plugin.zsh index 912136da4..1792d5967 100644 --- a/plugins/kubectl/kubectl.plugin.zsh +++ b/plugins/kubectl/kubectl.plugin.zsh @@ -131,7 +131,7 @@ alias kga='kubectl get all' alias kgaa='kubectl get all --all-namespaces' # Logs -alias kl='kubectl logs' +alias klog='kubectl logs' alias kl1h='kubectl logs --since 1h' alias kl1m='kubectl logs --since 1m' alias kl1s='kubectl logs --since 1s' From 8a231b19308140ca88732e4cb0f3de9768036bfb Mon Sep 17 00:00:00 2001 From: Yurii Liaskovets Date: Wed, 17 Dec 2025 19:55:47 +0200 Subject: [PATCH 194/199] feat!: unify `auto-approve` aliases in `terraform` and `opentofu` (#12795) BREAKING CHANGE: `tfaa` (apply auto-approve) aliases are now named `tfa!` to require extra effort on potentially destructive action, in a similar fashion to destroy auto-approve. --- plugins/opentofu/README.md | 2 +- plugins/opentofu/opentofu.plugin.zsh | 2 +- plugins/terraform/README.md | 4 ++-- plugins/terraform/terraform.plugin.zsh | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/opentofu/README.md b/plugins/opentofu/README.md index 45b98c3c9..059664d47 100644 --- a/plugins/opentofu/README.md +++ b/plugins/opentofu/README.md @@ -19,7 +19,7 @@ plugins=(... opentofu) |--------|------------------------------| | `tt` | `tofu` | | `tta` | `tofu apply` | -| `ttaa` | `tofu apply -auto-approve` | +| `tta!` | `tofu apply -auto-approve` | | `ttc` | `tofu console` | | `ttd` | `tofu destroy` | | `ttd!` | `tofu destroy -auto-approve` | diff --git a/plugins/opentofu/opentofu.plugin.zsh b/plugins/opentofu/opentofu.plugin.zsh index bb65c12e3..b7a3ba3b6 100644 --- a/plugins/opentofu/opentofu.plugin.zsh +++ b/plugins/opentofu/opentofu.plugin.zsh @@ -29,7 +29,7 @@ function tofu_version_prompt_info() { alias tt='tofu' alias tta='tofu apply' -alias ttaa='tofu apply -auto-approve' +alias tta!='tofu apply -auto-approve' alias ttc='tofu console' alias ttd='tofu destroy' alias ttd!='tofu destroy -auto-approve' diff --git a/plugins/terraform/README.md b/plugins/terraform/README.md index f7a9a93dc..711139ef0 100644 --- a/plugins/terraform/README.md +++ b/plugins/terraform/README.md @@ -16,10 +16,10 @@ plugins=(... terraform) ## Aliases | Alias | Command | -| ------- | -------------------------------------- | +|---------|----------------------------------------| | `tf` | `terraform` | | `tfa` | `terraform apply` | -| `tfaa` | `terraform apply -auto-approve` | +| `tfa!` | `terraform apply -auto-approve` | | `tfap` | `terraform apply -parallelism=1` | | `tfc` | `terraform console` | | `tfd` | `terraform destroy` | diff --git a/plugins/terraform/terraform.plugin.zsh b/plugins/terraform/terraform.plugin.zsh index 9026994e4..1359ddd44 100644 --- a/plugins/terraform/terraform.plugin.zsh +++ b/plugins/terraform/terraform.plugin.zsh @@ -17,11 +17,11 @@ function tf_version_prompt_info() { alias tf='terraform' alias tfa='terraform apply' -alias tfaa='terraform apply -auto-approve' +alias tfa!='terraform apply -auto-approve' alias tfap='terraform apply -parallelism=1' alias tfc='terraform console' alias tfd='terraform destroy' -alias 'tfd!'='terraform destroy -auto-approve' +alias tfd!='terraform destroy -auto-approve' alias tfdp='terraform destroy -parallelism=1' alias tff='terraform fmt' alias tffr='terraform fmt -recursive' From 945d89f7ae86c740f0e09e94b7baf9b12a384535 Mon Sep 17 00:00:00 2001 From: NanoNova Date: Thu, 18 Dec 2025 02:27:29 +0800 Subject: [PATCH 195/199] feat(kubectl): add aliases for kustomization directories (#13033) --- plugins/kubectl/README.md | 2 ++ plugins/kubectl/kubectl.plugin.zsh | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/plugins/kubectl/README.md b/plugins/kubectl/README.md index 19c36c991..f4b0d6663 100644 --- a/plugins/kubectl/README.md +++ b/plugins/kubectl/README.md @@ -16,6 +16,7 @@ plugins=(... kubectl) | k | `kubectl` | The kubectl command | | kca | `kubectl --all-namespaces` | The kubectl command targeting all namespaces | | kaf | `kubectl apply -f` | Apply a YML file | +| kapk | `kubectl apply -k` | Apply a kustomization directory | | keti | `kubectl exec -ti` | Drop into an interactive terminal on a container | | | | **Manage configuration quickly to switch contexts between local, dev and staging** | | kcuc | `kubectl config use-context` | Set the current-context in a kubeconfig file | @@ -26,6 +27,7 @@ plugins=(... kubectl) | | | **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 | +| kdelk | `kubectl delete -k` | Delete all resources defined in a kustomization directory | | kge | `kubectl get events --sort-by=".lastTimestamp"` | Get events (sorted by timestamp) | | kgew | `kubectl get events --watch --sort-by=".lastTimestamp"` | Get events and watch as they occur (sorted by timestamp) | | | | **Pod management** | diff --git a/plugins/kubectl/kubectl.plugin.zsh b/plugins/kubectl/kubectl.plugin.zsh index 1792d5967..1e6080454 100644 --- a/plugins/kubectl/kubectl.plugin.zsh +++ b/plugins/kubectl/kubectl.plugin.zsh @@ -21,6 +21,9 @@ alias kca='_kca(){ kubectl "$@" --all-namespaces; unset -f _kca; }; _kca' # Apply a YML file alias kaf='kubectl apply -f' +# Apply a kustomization directory +alias kapk='kubectl apply -k' + # Drop into an interactive terminal on a container alias keti='kubectl exec -t -i' @@ -36,6 +39,7 @@ alias kcgc='kubectl config get-contexts' # General aliases alias kdel='kubectl delete' alias kdelf='kubectl delete -f' +alias kdelk='kubectl delete -k' alias kge='kubectl get events --sort-by=".lastTimestamp"' alias kgew='kubectl get events --sort-by=".lastTimestamp" --watch' From 95de26572e6790ea178193580c625c9109119176 Mon Sep 17 00:00:00 2001 From: Arvin Verain Date: Fri, 19 Dec 2025 17:05:49 +0800 Subject: [PATCH 196/199] revert(git): revert deprecation for `gg*` aliases (#13485) These aliases have long been expected and integrated with user workflows. Reverting our decision to deprecate them. --- plugins/git/README.md | 3 --- plugins/git/git.plugin.zsh | 6 +++--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/plugins/git/README.md b/plugins/git/README.md index bbbb28bdf..0090fa6cf 100644 --- a/plugins/git/README.md +++ b/plugins/git/README.md @@ -239,9 +239,6 @@ receive further support. | `gap` | `git add --patch` | New alias: `gapa` | | `gcl` | `git config --list` | New alias: `gcf` | | `gdt` | `git difftool` | No replacement | -| `ggpull` | `git pull origin $(git_current_branch)` | New function: `ggl` (`ggpull` is now aliased to this) | -| `ggpur` | `git pull --rebase origin $(git_current_branch)` | New function: `ggu` (`ggpur` is now aliased to this) | -| `ggpush` | `git push origin $(git_current_branch)` | New function: `ggp` (`ggpush` is now aliased to this) | ## Functions diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index a240e1fb3..9ef60d69a 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -102,6 +102,7 @@ function ggpnp() { } compdef _git ggpnp=git-checkout +alias ggpur='ggu' alias g='git' alias ga='git add' alias gaa='git add --all' @@ -281,6 +282,7 @@ alias gprom='git pull --rebase origin $(git_main_branch)' alias gpromi='git pull --rebase=interactive origin $(git_main_branch)' alias gprum='git pull --rebase upstream $(git_main_branch)' alias gprumi='git pull --rebase=interactive upstream $(git_main_branch)' +alias ggpull='git pull origin "$(git_current_branch)"' function ggl() { if [[ $# != 0 ]] && [[ $# != 1 ]]; then @@ -324,6 +326,7 @@ is-at-least 2.30 "$git_version" \ alias gpv='git push --verbose' alias gpoat='git push origin --all && git push origin --tags' alias gpod='git push origin --delete' +alias ggpush='git push origin "$(git_current_branch)"' function ggp() { if [[ $# != 0 ]] && [[ $# != 1 ]]; then @@ -420,9 +423,6 @@ unset git_version local old_name new_name for old_name new_name ( current_branch git_current_branch - ggpull ggl - ggpur ggu - ggpush ggp ); do aliases[$old_name]=" print -Pu2 \"%F{yellow}[oh-my-zsh] '%F{red}${old_name}%F{yellow}' is deprecated, using '%F{green}${new_name}%F{yellow}' instead.%f\" From 3a730949839e24f6536f8c34867adeab8404f0a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 21 Dec 2025 14:07:16 +0100 Subject: [PATCH 197/199] chore(deps): bump github/codeql-action from 4.31.8 to 4.31.9 (#13486) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.8 to 4.31.9. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/1b168cd39490f61582a9beae412bb7057a6b2c4e...5d4e8d1aca955e8d8589aabd499c5cae939e33c7) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.9 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index a40c491c5..8c8113b2c 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -60,6 +60,6 @@ jobs: retention-days: 5 - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@1b168cd39490f61582a9beae412bb7057a6b2c4e # v4.31.8 + uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9 with: sarif_file: results.sarif From 129aeee6bcfcbb149598f69b2054ff1ddc73ec5e Mon Sep 17 00:00:00 2001 From: bretello Date: Mon, 22 Dec 2025 13:20:24 +0100 Subject: [PATCH 198/199] feat(clipboard): send value to tmux client when copying (#13451) --- lib/clipboard.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/clipboard.zsh b/lib/clipboard.zsh index 5d149f056..27e81525a 100644 --- a/lib/clipboard.zsh +++ b/lib/clipboard.zsh @@ -82,7 +82,7 @@ function detect-clipboard() { function clipcopy() { cat "${1:-/dev/stdin}" | termux-clipboard-set; } function clippaste() { termux-clipboard-get; } elif [ -n "${TMUX:-}" ] && (( ${+commands[tmux]} )); then - function clipcopy() { tmux load-buffer "${1:--}"; } + function clipcopy() { tmux load-buffer -w "${1:--}"; } function clippaste() { tmux save-buffer -; } else function _retry_clipboard_detection_or_fail() { From 0f45f82c0afdcaf71b193e349d01c069a3fb9de7 Mon Sep 17 00:00:00 2001 From: "Daniel R. Neal" Date: Mon, 22 Dec 2025 04:31:21 -0800 Subject: [PATCH 199/199] feat(tmux): add 'to' alias for session attachment (#13479) --- plugins/tmux/README.md | 1 + plugins/tmux/tmux.plugin.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/tmux/README.md b/plugins/tmux/README.md index 39c57f846..aaa81aa17 100644 --- a/plugins/tmux/README.md +++ b/plugins/tmux/README.md @@ -23,6 +23,7 @@ The plugin also supports the following: | `tkss` | tmux kill-session -t | Terminate named running tmux session | | `tksv` | tmux kill-server | Terminate all running tmux sessions | | `tl` | tmux list-sessions | Displays a list of running tmux sessions | +| `to` | tmux new-session -A -s | Create or attach to a named tmux session | | `tmux` | `_zsh_tmux_plugin_run` | Start a new tmux session | | `tmuxconf` | `$EDITOR $ZSH_TMUX_CONFIG` | Open .tmux.conf file with an editor | | `ts` | tmux new-session -s | Create a new named tmux session | diff --git a/plugins/tmux/tmux.plugin.zsh b/plugins/tmux/tmux.plugin.zsh index 4c184c2d0..b1d97e98f 100644 --- a/plugins/tmux/tmux.plugin.zsh +++ b/plugins/tmux/tmux.plugin.zsh @@ -81,6 +81,7 @@ alias tmuxconf='$EDITOR $ZSH_TMUX_CONFIG' _build_tmux_alias "ta" "attach" "-t" _build_tmux_alias "tad" "attach -d" "-t" +_build_tmux_alias "to" "new-session -A" "-s" _build_tmux_alias "ts" "new-session" "-s" _build_tmux_alias "tkss" "kill-session" "-t"