From 01433503c2a474c049fa56d792ebfd9274e683cc Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Wed, 25 Jun 2025 21:33:17 +0200 Subject: [PATCH 001/187] 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 002/187] 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 003/187] 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 004/187] 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 005/187] 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 006/187] 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 007/187] 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 008/187] 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 009/187] 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 010/187] 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 011/187] 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 012/187] 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 013/187] 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 014/187] 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 015/187] 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 016/187] 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 017/187] 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 018/187] 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 019/187] 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 020/187] 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 021/187] 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 022/187] 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 023/187] 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 024/187] 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 025/187] 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 026/187] 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 027/187] 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 028/187] 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 029/187] 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 030/187] 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 031/187] 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 032/187] 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 033/187] 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 034/187] 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 035/187] 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 036/187] 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 037/187] 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 038/187] 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 039/187] 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 040/187] 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 041/187] 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 042/187] 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 043/187] 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 044/187] 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 045/187] 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 046/187] 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 047/187] 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 048/187] 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 049/187] 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 050/187] 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 051/187] 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 052/187] 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 053/187] 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 054/187] 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 055/187] 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 056/187] 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 057/187] 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 058/187] 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 059/187] 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 060/187] 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 061/187] 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 062/187] 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 063/187] 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 064/187] 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 065/187] 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 066/187] 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 067/187] 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 068/187] 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 069/187] 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 070/187] 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 071/187] 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 072/187] 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 073/187] 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 074/187] 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 075/187] 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 076/187] 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 077/187] 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 078/187] 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 079/187] 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 080/187] 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 081/187] 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 082/187] 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 083/187] 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 084/187] 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 085/187] 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 086/187] 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 087/187] 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 088/187] 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 089/187] 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 090/187] 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 091/187] 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 092/187] 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 093/187] 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 094/187] 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 095/187] 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 096/187] 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 097/187] 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 098/187] 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 099/187] 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 100/187] 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 101/187] 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 102/187] 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 103/187] 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 104/187] 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 105/187] 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 106/187] 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 107/187] 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 108/187] 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 109/187] 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 110/187] 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 111/187] 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 112/187] 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 113/187] 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 114/187] 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 115/187] 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 116/187] 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 117/187] 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 118/187] 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 119/187] 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 120/187] 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 121/187] 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 122/187] 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 123/187] 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 124/187] 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 125/187] 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 126/187] 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 127/187] 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 128/187] 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 129/187] 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 130/187] 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 131/187] 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 132/187] 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" From a79b37b95461ea2be32578957473375954ab31ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Tue, 30 Dec 2025 07:55:41 +0100 Subject: [PATCH 133/187] Revert "fix(kubectl)!: change alias from `kl` to `klog` (#13204)" This reverts commit 475b18f39a2406d1ba173e36f243935be413239d. --- 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 f4b0d6663..5e4ae7e60 100644 --- a/plugins/kubectl/README.md +++ b/plugins/kubectl/README.md @@ -90,7 +90,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** | -| klog | `kubectl logs` | Print the logs for a container or resource | +| 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 | diff --git a/plugins/kubectl/kubectl.plugin.zsh b/plugins/kubectl/kubectl.plugin.zsh index 1e6080454..ba371cd87 100644 --- a/plugins/kubectl/kubectl.plugin.zsh +++ b/plugins/kubectl/kubectl.plugin.zsh @@ -135,7 +135,7 @@ alias kga='kubectl get all' alias kgaa='kubectl get all --all-namespaces' # Logs -alias klog='kubectl logs' +alias kl='kubectl logs' alias kl1h='kubectl logs --since 1h' alias kl1m='kubectl logs --since 1m' alias kl1s='kubectl logs --since 1s' From d23d3ea69fdb839088e6e5589557cce77b34aaf8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 Jan 2026 21:50:31 +0100 Subject: [PATCH 134/187] chore(deps): bump certifi in /.github/workflows/dependencies (#13499) Bumps [certifi](https://github.com/certifi/python-certifi) from 2025.11.12 to 2026.1.4. - [Commits](https://github.com/certifi/python-certifi/compare/2025.11.12...2026.01.04) --- updated-dependencies: - dependency-name: certifi dependency-version: 2026.1.4 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/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 44ec3fb30..584a96ac9 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,4 +1,4 @@ -certifi==2025.11.12 +certifi==2026.1.4 charset-normalizer==3.4.4 idna==3.11 PyYAML==6.0.3 From 72625e2f2f6666d46ff522eca8c4e801102ecbae Mon Sep 17 00:00:00 2001 From: Tom Parker-Shemilt Date: Mon, 5 Jan 2026 10:41:34 +0000 Subject: [PATCH 135/187] ci(deps): add kube-ps1 to dependencies (#13283) Co-authored-by: Carlo Sala --- .github/dependencies.yml | 8 ++++++++ .github/workflows/dependencies/updater.py | 10 ++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 08289a04b..048cc0f7f 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -27,6 +27,14 @@ dependencies: postcopy: | set -e test -e dependencies/OMZ-README.md && cat dependencies/OMZ-README.md >> README.md + plugins/kube-ps1: + repo: jonmosco/kube-ps1 + branch: master + version: e1da055e905a91242f0c5a89a425a64ee8adcd6b + precopy: | + set -e + find . ! -name kube-ps1.sh ! -name LICENSE ! -name README.md -delete + test -e kube-ps1.sh && mv kube-ps1.sh kube-ps1.plugin.zsh plugins/wd: repo: mfaerevaag/wd branch: master diff --git a/.github/workflows/dependencies/updater.py b/.github/workflows/dependencies/updater.py index 783161d6c..a830e5210 100644 --- a/.github/workflows/dependencies/updater.py +++ b/.github/workflows/dependencies/updater.py @@ -595,9 +595,15 @@ def main(): # Cache YAML version DependencyStore.set(data) - + dependencies = data["dependencies"] - for path in dependencies: + if len(sys.argv) > 1: + # argv is list of dependencies to run, default is all of them + dependency_list = sys.argv[1:] + else: + dependency_list = dependencies.keys() + + for path in dependency_list: dependency = Dependency(path, dependencies[path]) dependency.update_or_notify() From 28d4ab6e98a5caecccd6b1946ecfa3c51fbda362 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Mon, 5 Jan 2026 12:36:14 +0100 Subject: [PATCH 136/187] ci(deps): add GH_TOKEN to GitHub API requests (#13502) --- .github/workflows/dependencies/updater.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dependencies/updater.py b/.github/workflows/dependencies/updater.py index a830e5210..b61e5858a 100644 --- a/.github/workflows/dependencies/updater.py +++ b/.github/workflows/dependencies/updater.py @@ -18,6 +18,13 @@ TMP_DIR = os.path.join(os.environ.get("TMP_DIR", "/tmp"), "ohmyzsh") DEPS_YAML_FILE = ".github/dependencies.yml" # Dry run flag DRY_RUN = os.environ.get("DRY_RUN", "0") == "1" +# GitHub Token is needed to avoid rate limiting +GH_TOKEN = os.environ.get("GH_TOKEN") +HEADERS = { + "Accept": "application/vnd.github+json", +} +if GH_TOKEN: + HEADERS["Authorization"] = f"Bearer {GH_TOKEN}" # utils for tag comparison BASEVERSION = re.compile( @@ -453,7 +460,7 @@ class GitHub: url = f"https://api.github.com/repos/{repo}/git/refs/tags" # Send a GET request to the GitHub API - response = requests.get(url) + response = requests.get(url, headers=HEADERS) current_version = coerce(current_tag) if current_version is None: raise ValueError( @@ -513,7 +520,7 @@ class GitHub: url = f"https://api.github.com/repos/{repo}/compare/{version}...{branch}" # Send a GET request to the GitHub API - response = requests.get(url) + response = requests.get(url, headers=HEADERS) # If the request was successful if response.status_code == 200: @@ -595,14 +602,14 @@ def main(): # Cache YAML version DependencyStore.set(data) - + dependencies = data["dependencies"] if len(sys.argv) > 1: # argv is list of dependencies to run, default is all of them dependency_list = sys.argv[1:] else: dependency_list = dependencies.keys() - + for path in dependency_list: dependency = Dependency(path, dependencies[path]) dependency.update_or_notify() From 2daffdf101f21575f7904d92b29c16bcb448aa10 Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Mon, 5 Jan 2026 13:07:40 +0100 Subject: [PATCH 137/187] chore(kube-ps1): update to 0b0e6daf (#13503) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/kube-ps1/LICENSE | 201 ++++++++++++++++++ plugins/kube-ps1/README.md | 201 ++++++++++++++---- plugins/kube-ps1/kube-ps1.plugin.zsh | 307 +++++++++++++++------------ 4 files changed, 533 insertions(+), 178 deletions(-) create mode 100644 plugins/kube-ps1/LICENSE diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 048cc0f7f..270cb9ec6 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -30,7 +30,7 @@ dependencies: plugins/kube-ps1: repo: jonmosco/kube-ps1 branch: master - version: e1da055e905a91242f0c5a89a425a64ee8adcd6b + version: 0b0e6daf4197ecabb1ae4f2d46fb148a8e1e73e5 precopy: | set -e find . ! -name kube-ps1.sh ! -name LICENSE ! -name README.md -delete diff --git a/plugins/kube-ps1/LICENSE b/plugins/kube-ps1/LICENSE new file mode 100644 index 000000000..261eeb9e9 --- /dev/null +++ b/plugins/kube-ps1/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/plugins/kube-ps1/README.md b/plugins/kube-ps1/README.md index be3c184be..ef6d781ad 100644 --- a/plugins/kube-ps1/README.md +++ b/plugins/kube-ps1/README.md @@ -1,49 +1,82 @@ # kube-ps1: Kubernetes prompt for bash and zsh +![GitHub Release](https://img.shields.io/github/v/release/jonmosco/kube-ps1) +[![CI](https://github.com/jonmosco/kube-ps1/actions/workflows/ci.yml/badge.svg)](https://github.com/jonmosco/kube-ps1/actions/workflows/ci.yml) + A script that lets you add the current Kubernetes context and namespace configured on `kubectl` to your Bash/Zsh prompt strings (i.e. the `$PS1`). Inspired by several tools used to simplify usage of `kubectl`. +![prompt demo](img/kube-ps1-demo.gif) + ## Installing -### MacOS +### Packages + +### MacOS Brew Ports Homebrew package manager: +```sh +brew update +brew install kube-ps1 ``` -$ brew update -$ brew install kube-ps1 + +### Arch Linux + +AUR Package available at [https://aur.archlinux.org/packages/kube-ps1/](https://aur.archlinux.org/packages/kube-ps1/). + +### Oh My Zsh + +https://github.com/ohmyzsh/ohmyzsh + +kube-ps1 is included as a plugin in the oh-my-zsh project. To enable it, edit your `~/.zshrc` and +add the plugin: + +```bash +plugins=( + kube-ps1 +) +PROMPT='$(kube_ps1)'$PROMPT # or RPROMPT='$(kube_ps1)' ``` -### From Source + +## Zsh zinit plugin + +### Using [zinit](https://github.com/zdharma-continuum/zinit) + +Update `.zshrc` with: + +```sh +zinit light jonmosco/kube-ps1 +PROMPT='$(kube_ps1)'$PROMPT # or RPROMPT='$(kube_ps1)' +``` + +### Fig + +Install `kube-ps1` in zsh, bash, or fish with one click. + + + +### From Source (git clone) 1. Clone this repository 2. Source the kube-ps1.sh in your `~/.zshrc` or your `~/.bashrc` -### Arch Linux -AUR Package available at [https://aur.archlinux.org/packages/kube-ps1/](https://aur.archlinux.org/packages/kube-ps1/). - #### Zsh + ```sh source /path/to/kube-ps1.sh -PROMPT='$(kube_ps1)'$PROMPT +PROMPT='$(kube_ps1)'$PROMPT # or RPROMPT='$(kube_ps1)' ``` + #### Bash + ```sh source /path/to/kube-ps1.sh PS1='[\u@\h \W $(kube_ps1)]\$ ' ``` -### Zsh Plugin Managers - -#### Using [zplugin](https://github.com/zdharma/zplugin) - -Update `.zshrc` with: -```sh -zplugin light jonmosco/kube-ps1 -PROMPT='$(kube_ps1)'$PROMPT -``` - ## Requirements The default prompt assumes you have the `kubectl` command line utility installed. @@ -54,22 +87,23 @@ Official installation instructions and binaries are available: If using this with OpenShift, the `oc` tool needs installed. It can be obtained from brew ports: -``` +```sh brew install openshift-cli ``` + or the source can be downloaded: -[OC Client Tools](https://www.openshift.org/download.html) +[OC Client Tools](https://github.com/okd-project/okd/releases) -Set the binary to `oc` with the following environment variable: +Set the binary to `oc` with the following variable: -``` +```sh KUBE_PS1_BINARY=oc ``` If neither binary is available, the prompt will print the following: -``` +```sh (|BINARY-N/A:N/A) ``` @@ -90,13 +124,13 @@ tmux, and like the functionality provided by kube-ps1, checkout the The default prompt layout is: -``` +```sh (|:) ``` If the current-context is not set, kube-ps1 will return the following: -``` +```sh (|N/A:N/A) ``` @@ -107,7 +141,7 @@ run `kubeoff`. To disable the prompt for all shell sessions, run `kubeoff -g`. You can enable it again in the current shell by running `kubeon`, and globally with `kubeon -g`. -``` +```sh kubeon : turn on kube-ps1 status for this shell. Takes precedence over global setting for current session kubeon -g : turn on kube-ps1 status globally @@ -116,39 +150,69 @@ kubeoff : turn off kube-ps1 status for this shell. Takes precedence over kubeoff -g : turn off kube-ps1 status globally ``` +## Symbol + +The default symbols are UTF8 and should work with most fonts. If you want to use the Kubernetes and OpenShift +glyphs, you need to install a patched font that contains the glyph. [Nerd Fonts](https://www.nerdfonts.com/) provides both glyphs. Follow their installation instructions to install the patched font. + +`KUBE_PS1_SYMBOL_CUSTOM` options + +| Options | Symbol | Description | +| ------------- | ------ | ----------- | +| default (empty string) | ⎈ | Default symbol (Unicode `\u2388`) | +| img | ☸️ | Symbol often used to represent Kubernetes (Unicode `\u2638`) | +| oc | ![openshift-glyph](img/openshift-glyph.png) | Symbol representing OpenShift (Unicode `\ue7b7`) | +| k8s | ![k8s-glyph](img/k8s-glyph.png) | Symbol representing Kubernetes (Unicode `\ue7b7`) | + +To set the symbol to one of the custom glyphs, add the following to your `~/.bashrc` or `~/.zshrc`: + +```sh +KUBE_PS1_SYMBOL_CUSTOM=img +``` + +To set the symbol to the default, set the `KUBE_PS1_SYMBOL` to an empty string. + +Heres a demo of the symbols in action: +![kube-ps1-symbols](img/kube-ps1-symbol-demo.gif) + +If the font is not properly installed, and the glyph is not available, it will display an empty set of brackets or similar: + +```sh + echo -n "\ue7b7" + +``` + ## Customization The default settings can be overridden in `~/.bashrc` or `~/.zshrc` by setting -the following environment variables: +the following variables: | Variable | Default | Meaning | | :------- | :-----: | ------- | | `KUBE_PS1_BINARY` | `kubectl` | Default Kubernetes binary | | `KUBE_PS1_NS_ENABLE` | `true` | Display the namespace. If set to `false`, this will also disable `KUBE_PS1_DIVIDER` | -| `KUBE_PS1_PREFIX` | `(` | Prompt opening character | -| `KUBE_PS1_SYMBOL_ENABLE` | `true ` | Display the prompt Symbol. If set to `false`, this will also disable `KUBE_PS1_SEPARATOR` | +| `KUBE_PS1_PREFIX` | `(` | Prompt opening character | +| `KUBE_PS1_SYMBOL_ENABLE` | `true` | Display the prompt Symbol. If set to `false`, this will also disable `KUBE_PS1_SEPARATOR` | | `KUBE_PS1_SYMBOL_PADDING` | `false` | Adds a space (padding) after the symbol to prevent clobbering prompt characters | -| `KUBE_PS1_SYMBOL_DEFAULT` | `⎈ ` | Default prompt symbol. Unicode `\u2388` | -| `KUBE_PS1_SYMBOL_USE_IMG` | `false` | ☸️ , Unicode `\u2638` as the prompt symbol | +| `KUBE_PS1_SYMBOL_CUSTOM` | `⎈` | Change the Default prompt symbol. Unicode `\u2388`. Options are `k8s`, `img`, `oc` | +| `KUBE_PS1_SYMBOL_COLOR` | `blue` | Change the Default symbol color. | | `KUBE_PS1_SEPARATOR` | | | Separator between symbol and context name | | `KUBE_PS1_DIVIDER` | `:` | Separator between context and namespace | | `KUBE_PS1_SUFFIX` | `)` | Prompt closing character | | `KUBE_PS1_CLUSTER_FUNCTION` | No default, must be user supplied | Function to customize how cluster is displayed | | `KUBE_PS1_NAMESPACE_FUNCTION` | No default, must be user supplied | Function to customize how namespace is displayed | -| `KUBE_PS1_KUBECONFIG_SYMLINK` | `false` | Treat `KUBECONFIG` and `~/.kube/config` files as symbolic links | - -For terminals that do not support UTF-8, the symbol will be replaced with the -string `k8s`. +| `KUBE_PS1_CTX_COLOR_FUNCTION` | No default, must be user supplied | Function to customize context color based on context name | +| `KUBE_PS1_HIDE_IF_NOCONTEXT` | `false` | Hide the kube-ps1 prompt if no context is set | To disable a feature, set it to an empty string: -``` +```sh KUBE_PS1_SEPARATOR='' ``` ## Colors -The default colors are set with the following environment variables: +The default colors are set with the following variables: | Variable | Default | Meaning | | :------- | :-----: | ------- | @@ -166,13 +230,13 @@ namespace. Set the variable to an empty string if you do not want color for each prompt section: -``` +```sh KUBE_PS1_CTX_COLOR='' ``` Names are usable for the following colors: -``` +```text black, red, green, yellow, blue, magenta, cyan ``` @@ -216,6 +280,45 @@ export KUBE_PS1_NAMESPACE_FUNCTION=get_namespace_upper In both cases, the variable is set to the name of the function, and you must have defined the function in your shell configuration before kube_ps1 is called. The function must accept a single parameter and echo out the final value. +## Dynamic Context Colors + +You can set different colors for different contexts using the +`KUBE_PS1_CTX_COLOR_FUNCTION` variable. This is useful for color-coding +contexts to make production environments stand out visually. + +For example, to make production contexts red and development contexts green: + +```sh +function kube_ps1_ctx_color() { + local context="$1" + + case "$context" in + *prod*) + echo "red" + ;; + *dev*) + echo "green" + ;; + *staging*|*stg*) + echo "yellow" + ;; + *) + echo "cyan" # default color for other contexts + ;; + esac +} + +export KUBE_PS1_CTX_COLOR_FUNCTION=kube_ps1_ctx_color +``` + +The function receives the context name as the first parameter and should echo +the desired color name. All color options supported by `KUBE_PS1_CTX_COLOR` are +available, including named colors (black, red, green, yellow, blue, magenta, +cyan, white) and 256-color codes (0-256). + +If `KUBE_PS1_CTX_COLOR_FUNCTION` is not set, kube-ps1 will use the value of +`KUBE_PS1_CTX_COLOR` (default: red). + ### Bug Reports and shell configuration Due to the vast ways of customizing the shell, please try the prompt with a @@ -224,18 +327,28 @@ minimal configuration before submitting a bug report. This can be done as follows for each shell before loading kube-ps1: Bash: -```bash + +```sh bash --norc ``` Zsh: -```bash + +```sh zsh -f or zsh --no-rcs ``` -## Contributors +For the prompt symbol, a patched font that contains the glyphs must be installed. +[Nerd Fonts Downloads](https://www.nerdfonts.com/font-downloads) provides patched +fonts containing the glyphs. Please consult their documentation for this, support +is out of scope for this project. -* [Ahmet Alp Balkan](https://github.com/ahmetb) -* Jared Yanovich +### Contributors + +Thank you to everyone in the community for their contributions to kube-ps1! + + + + diff --git a/plugins/kube-ps1/kube-ps1.plugin.zsh b/plugins/kube-ps1/kube-ps1.plugin.zsh index 7edc62de8..95e91e0d3 100644 --- a/plugins/kube-ps1/kube-ps1.plugin.zsh +++ b/plugins/kube-ps1/kube-ps1.plugin.zsh @@ -3,7 +3,7 @@ # Kubernetes prompt helper for bash/zsh # Displays current context and namespace -# Copyright 2021 Jon Mosco +# Copyright 2026 Jon Mosco # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -24,9 +24,9 @@ # Override these values in ~/.zshrc or ~/.bashrc KUBE_PS1_BINARY="${KUBE_PS1_BINARY:-kubectl}" KUBE_PS1_SYMBOL_ENABLE="${KUBE_PS1_SYMBOL_ENABLE:-true}" -KUBE_PS1_SYMBOL_DEFAULT=${KUBE_PS1_SYMBOL_DEFAULT:-$'\u2388'} KUBE_PS1_SYMBOL_PADDING="${KUBE_PS1_SYMBOL_PADDING:-false}" -KUBE_PS1_SYMBOL_USE_IMG="${KUBE_PS1_SYMBOL_USE_IMG:-false}" +KUBE_PS1_SYMBOL_COLOR="${KUBE_PS1_SYMBOL_COLOR:-}" + KUBE_PS1_NS_ENABLE="${KUBE_PS1_NS_ENABLE:-true}" KUBE_PS1_CONTEXT_ENABLE="${KUBE_PS1_CONTEXT_ENABLE:-true}" KUBE_PS1_PREFIX="${KUBE_PS1_PREFIX-(}" @@ -34,29 +34,28 @@ KUBE_PS1_SEPARATOR="${KUBE_PS1_SEPARATOR-|}" KUBE_PS1_DIVIDER="${KUBE_PS1_DIVIDER-:}" KUBE_PS1_SUFFIX="${KUBE_PS1_SUFFIX-)}" -KUBE_PS1_SYMBOL_COLOR="${KUBE_PS1_SYMBOL_COLOR-blue}" -KUBE_PS1_CTX_COLOR="${KUBE_PS1_CTX_COLOR-red}" -KUBE_PS1_NS_COLOR="${KUBE_PS1_NS_COLOR-cyan}" -KUBE_PS1_BG_COLOR="${KUBE_PS1_BG_COLOR}" +KUBE_PS1_HIDE_IF_NOCONTEXT="${KUBE_PS1_HIDE_IF_NOCONTEXT:-false}" -KUBE_PS1_KUBECONFIG_CACHE="${KUBECONFIG}" -KUBE_PS1_KUBECONFIG_SYMLINK="${KUBE_PS1_KUBECONFIG_SYMLINK:-false}" -KUBE_PS1_DISABLE_PATH="${HOME}/.kube/kube-ps1/disabled" -KUBE_PS1_LAST_TIME=0 -KUBE_PS1_CLUSTER_FUNCTION="${KUBE_PS1_CLUSTER_FUNCTION}" -KUBE_PS1_NAMESPACE_FUNCTION="${KUBE_PS1_NAMESPACE_FUNCTION}" +_KUBE_PS1_KUBECONFIG_CACHE="${KUBECONFIG}" +_KUBE_PS1_DISABLE_PATH="${HOME}/.kube/kube-ps1/disabled" +_KUBE_PS1_LAST_TIME=0 # Determine our shell -if [ "${ZSH_VERSION-}" ]; then - KUBE_PS1_SHELL="zsh" -elif [ "${BASH_VERSION-}" ]; then - KUBE_PS1_SHELL="bash" -fi +_kube_ps1_shell_type() { + local _KUBE_PS1_SHELL_TYPE + + if [ "${ZSH_VERSION-}" ]; then + _KUBE_PS1_SHELL_TYPE="zsh" + elif [ "${BASH_VERSION-}" ]; then + _KUBE_PS1_SHELL_TYPE="bash" + fi + echo $_KUBE_PS1_SHELL_TYPE +} _kube_ps1_init() { - [[ -f "${KUBE_PS1_DISABLE_PATH}" ]] && KUBE_PS1_ENABLED=off + [[ -f "${_KUBE_PS1_DISABLE_PATH}" ]] && KUBE_PS1_ENABLED=off - case "${KUBE_PS1_SHELL}" in + case "$(_kube_ps1_shell_type)" in "zsh") _KUBE_PS1_OPEN_ESC="%{" _KUBE_PS1_CLOSE_ESC="%}" @@ -64,7 +63,7 @@ _kube_ps1_init() { _KUBE_PS1_DEFAULT_FG="%f" setopt PROMPT_SUBST autoload -U add-zsh-hook - add-zsh-hook precmd _kube_ps1_update_cache + add-zsh-hook precmd _kube_ps1_prompt_update zmodload -F zsh/stat b:zstat zmodload zsh/datetime ;; @@ -73,75 +72,75 @@ _kube_ps1_init() { _KUBE_PS1_CLOSE_ESC=$'\002' _KUBE_PS1_DEFAULT_BG=$'\033[49m' _KUBE_PS1_DEFAULT_FG=$'\033[39m' - [[ $PROMPT_COMMAND =~ _kube_ps1_update_cache ]] || PROMPT_COMMAND="_kube_ps1_update_cache;${PROMPT_COMMAND:-:}" + [[ $PROMPT_COMMAND =~ _kube_ps1_prompt_update ]] || PROMPT_COMMAND="_kube_ps1_prompt_update;${PROMPT_COMMAND:-:}" ;; esac } _kube_ps1_color_fg() { - local KUBE_PS1_FG_CODE + local _KUBE_PS1_FG_CODE case "${1}" in - black) KUBE_PS1_FG_CODE=0;; - red) KUBE_PS1_FG_CODE=1;; - green) KUBE_PS1_FG_CODE=2;; - yellow) KUBE_PS1_FG_CODE=3;; - blue) KUBE_PS1_FG_CODE=4;; - magenta) KUBE_PS1_FG_CODE=5;; - cyan) KUBE_PS1_FG_CODE=6;; - white) KUBE_PS1_FG_CODE=7;; + black) _KUBE_PS1_FG_CODE=0;; + red) _KUBE_PS1_FG_CODE=1;; + green) _KUBE_PS1_FG_CODE=2;; + yellow) _KUBE_PS1_FG_CODE=3;; + blue) _KUBE_PS1_FG_CODE=4;; + magenta) _KUBE_PS1_FG_CODE=5;; + cyan) _KUBE_PS1_FG_CODE=6;; + white) _KUBE_PS1_FG_CODE=7;; # 256 - [0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-6]) KUBE_PS1_FG_CODE="${1}";; - *) KUBE_PS1_FG_CODE=default + [0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-6]) _KUBE_PS1_FG_CODE="${1}";; + *) _KUBE_PS1_FG_CODE=default esac - if [[ "${KUBE_PS1_FG_CODE}" == "default" ]]; then - KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}" + if [[ "${_KUBE_PS1_FG_CODE}" == "default" ]]; then + _KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}" return - elif [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then - KUBE_PS1_FG_CODE="%F{$KUBE_PS1_FG_CODE}" - elif [[ "${KUBE_PS1_SHELL}" == "bash" ]]; then + elif [[ "$(_kube_ps1_shell_type)" == "zsh" ]]; then + _KUBE_PS1_FG_CODE="%F{$_KUBE_PS1_FG_CODE}" + elif [[ "$(_kube_ps1_shell_type)" == "bash" ]]; then if tput setaf 1 &> /dev/null; then - KUBE_PS1_FG_CODE="$(tput setaf ${KUBE_PS1_FG_CODE})" - elif [[ $KUBE_PS1_FG_CODE -ge 0 ]] && [[ $KUBE_PS1_FG_CODE -le 256 ]]; then - KUBE_PS1_FG_CODE="\033[38;5;${KUBE_PS1_FG_CODE}m" + _KUBE_PS1_FG_CODE="$(tput setaf "${_KUBE_PS1_FG_CODE}")" + elif [[ $_KUBE_PS1_FG_CODE -ge 0 ]] && [[ $_KUBE_PS1_FG_CODE -le 256 ]]; then + _KUBE_PS1_FG_CODE="\033[38;5;${_KUBE_PS1_FG_CODE}m" else - KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}" + _KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}" fi fi - echo ${_KUBE_PS1_OPEN_ESC}${KUBE_PS1_FG_CODE}${_KUBE_PS1_CLOSE_ESC} + echo "${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_FG_CODE}${_KUBE_PS1_CLOSE_ESC}" } _kube_ps1_color_bg() { - local KUBE_PS1_BG_CODE + local _KUBE_PS1_BG_CODE case "${1}" in - black) KUBE_PS1_BG_CODE=0;; - red) KUBE_PS1_BG_CODE=1;; - green) KUBE_PS1_BG_CODE=2;; - yellow) KUBE_PS1_BG_CODE=3;; - blue) KUBE_PS1_BG_CODE=4;; - magenta) KUBE_PS1_BG_CODE=5;; - cyan) KUBE_PS1_BG_CODE=6;; - white) KUBE_PS1_BG_CODE=7;; + black) _KUBE_PS1_BG_CODE=0;; + red) _KUBE_PS1_BG_CODE=1;; + green) _KUBE_PS1_BG_CODE=2;; + yellow) _KUBE_PS1_BG_CODE=3;; + blue) _KUBE_PS1_BG_CODE=4;; + magenta) _KUBE_PS1_BG_CODE=5;; + cyan) _KUBE_PS1_BG_CODE=6;; + white) _KUBE_PS1_BG_CODE=7;; # 256 - [0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-6]) KUBE_PS1_BG_CODE="${1}";; - *) KUBE_PS1_BG_CODE=$'\033[0m';; + [0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-6]) _KUBE_PS1_BG_CODE="${1}";; + *) _KUBE_PS1_BG_CODE=$'\033[0m';; esac - if [[ "${KUBE_PS1_BG_CODE}" == "default" ]]; then - KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_BG}" + if [[ "${_KUBE_PS1_BG_CODE}" == "default" ]]; then + _KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_BG}" return - elif [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then - KUBE_PS1_BG_CODE="%K{$KUBE_PS1_BG_CODE}" - elif [[ "${KUBE_PS1_SHELL}" == "bash" ]]; then + elif [[ "$(_kube_ps1_shell_type)" == "zsh" ]]; then + _KUBE_PS1_BG_CODE="%K{$_KUBE_PS1_BG_CODE}" + elif [[ "$(_kube_ps1_shell_type)" == "bash" ]]; then if tput setaf 1 &> /dev/null; then - KUBE_PS1_BG_CODE="$(tput setab ${KUBE_PS1_BG_CODE})" - elif [[ $KUBE_PS1_BG_CODE -ge 0 ]] && [[ $KUBE_PS1_BG_CODE -le 256 ]]; then - KUBE_PS1_BG_CODE="\033[48;5;${KUBE_PS1_BG_CODE}m" + _KUBE_PS1_BG_CODE="$(tput setab "${_KUBE_PS1_BG_CODE}")" + elif [[ $_KUBE_PS1_BG_CODE -ge 0 ]] && [[ $_KUBE_PS1_BG_CODE -le 256 ]]; then + _KUBE_PS1_BG_CODE="\033[48;5;${_KUBE_PS1_BG_CODE}m" else - KUBE_PS1_BG_CODE="${DEFAULT_BG}" + _KUBE_PS1_BG_CODE="${DEFAULT_BG}" fi fi - echo ${OPEN_ESC}${KUBE_PS1_BG_CODE}${CLOSE_ESC} + echo "${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_BG_CODE}${_KUBE_PS1_CLOSE_ESC}" } _kube_ps1_binary_check() { @@ -149,38 +148,60 @@ _kube_ps1_binary_check() { } _kube_ps1_symbol() { + # Exit early if symbol display is disabled [[ "${KUBE_PS1_SYMBOL_ENABLE}" == false ]] && return - case "${KUBE_PS1_SHELL}" in - bash) - if ((BASH_VERSINFO[0] >= 4)) && [[ $'\u2388' != "\\u2388" ]]; then - KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_DEFAULT}" - KUBE_PS1_SYMBOL_IMG=$'\u2638\ufe0f' - else - KUBE_PS1_SYMBOL=$'\xE2\x8E\x88' - KUBE_PS1_SYMBOL_IMG=$'\xE2\x98\xB8' - fi + local symbol_arg="${KUBE_PS1_SYMBOL_CUSTOM}" + + local symbol="" + local symbol_default=$'\u2388' + local symbol_img="☸️" + local k8s_glyph=$'\Uf10fe' + local k8s_symbol_color=blue + local oc_glyph=$'\ue7b7' + local oc_symbol_color=red + local custom_symbol_color="${KUBE_PS1_SYMBOL_COLOR:-$k8s_symbol_color}" + + # Choose the symbol based on the provided argument or environment variable + case "${symbol_arg}" in + "img") + symbol="${symbol_img}" + ;; + "k8s") + symbol="$(_kube_ps1_color_fg "${custom_symbol_color}")${k8s_glyph}${KUBE_PS1_RESET_COLOR}" + ;; + "oc") + symbol="$(_kube_ps1_color_fg ${oc_symbol_color})${oc_glyph}${KUBE_PS1_RESET_COLOR}" ;; - zsh) - KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_DEFAULT}" - KUBE_PS1_SYMBOL_IMG="\u2638";; *) - KUBE_PS1_SYMBOL="k8s" + case "$(_kube_ps1_shell_type)" in + bash) + if ((BASH_VERSINFO[0] >= 4)) && [[ $'\u2388' != "\\u2388" ]]; then + symbol="$(_kube_ps1_color_fg $custom_symbol_color)${symbol_default}${KUBE_PS1_RESET_COLOR}" + symbol_img=$'\u2638\ufe0f' + else + symbol=$'\xE2\x8E\x88' + symbol_img=$'\xE2\x98\xB8' + fi + ;; + zsh) + symbol="$(_kube_ps1_color_fg $custom_symbol_color)${symbol_default}${KUBE_PS1_RESET_COLOR}" + symbol_img="☸️" + ;; + *) + symbol="k8s" + esac esac - if [[ "${KUBE_PS1_SYMBOL_USE_IMG}" == true ]]; then - KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_IMG}" - fi - + # Append padding if enabled if [[ "${KUBE_PS1_SYMBOL_PADDING}" == true ]]; then - echo "${KUBE_PS1_SYMBOL} " + echo "${symbol} " else - echo "${KUBE_PS1_SYMBOL}" + echo "${symbol}" fi - } -_kube_ps1_split() { +_kube_ps1_split_config() { type setopt >/dev/null 2>&1 && setopt SH_WORD_SPLIT local IFS=$1 echo $2 @@ -191,32 +212,21 @@ _kube_ps1_file_newer_than() { local file=$1 local check_time=$2 - if [[ "${KUBE_PS1_KUBECONFIG_SYMLINK}" == "true" ]]; then - if [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then - mtime=$(zstat -L +mtime "${file}") - elif stat -c "%s" /dev/null &> /dev/null; then - # GNU stat - mtime=$(stat -c %Y "${file}") - else - # BSD stat - mtime=$(stat -f %m "$file") - fi + if [[ "$(_kube_ps1_shell_type)" == "zsh" ]]; then + # Use zstat '-F %s.%s' to make it compatible with low zsh version (eg: 5.0.2) + mtime=$(zstat -L +mtime -F %s.%s "${file}") + elif stat -c "%s" /dev/null &> /dev/null; then + # GNU stat + mtime=$(stat -L -c %Y "${file}") else - if [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then - mtime=$(zstat +mtime "${file}") - elif stat -c "%s" /dev/null &> /dev/null; then - # GNU stat - mtime=$(stat -L -c %Y "${file}") - else - # BSD stat - mtime=$(stat -L -f %m "$file") - fi + # BSD stat + mtime=$(stat -L -f %m "$file") fi [[ "${mtime}" -gt "${check_time}" ]] } -_kube_ps1_update_cache() { +_kube_ps1_prompt_update() { local return_code=$? [[ "${KUBE_PS1_ENABLED}" == "off" ]] && return $return_code @@ -225,27 +235,35 @@ _kube_ps1_update_cache() { # No ability to fetch context/namespace; display N/A. KUBE_PS1_CONTEXT="BINARY-N/A" KUBE_PS1_NAMESPACE="N/A" - return + return $return_code fi - if [[ "${KUBECONFIG}" != "${KUBE_PS1_KUBECONFIG_CACHE}" ]]; then + if [[ "${KUBECONFIG}" != "${_KUBE_PS1_KUBECONFIG_CACHE}" ]]; then # User changed KUBECONFIG; unconditionally refetch. - KUBE_PS1_KUBECONFIG_CACHE=${KUBECONFIG} + _KUBE_PS1_KUBECONFIG_CACHE=${KUBECONFIG} _kube_ps1_get_context_ns - return + return $return_code fi # kubectl will read the environment variable $KUBECONFIG # otherwise set it to ~/.kube/config local conf - for conf in $(_kube_ps1_split : "${KUBECONFIG:-${HOME}/.kube/config}"); do + local config_file_cache + + for conf in $(_kube_ps1_split_config : "${KUBECONFIG:-${HOME}/.kube/config}"); do [[ -r "${conf}" ]] || continue - if _kube_ps1_file_newer_than "${conf}" "${KUBE_PS1_LAST_TIME}"; then + config_file_cache+=":${conf}" + if _kube_ps1_file_newer_than "${conf}" "${_KUBE_PS1_LAST_TIME}"; then _kube_ps1_get_context_ns - return + return $return_code fi done + if [[ "${config_file_cache}" != "${_KUBE_PS1_CFGFILES_READ_CACHE}" ]]; then + _kube_ps1_get_context_ns + return $return_code + fi + return $return_code } @@ -255,8 +273,8 @@ _kube_ps1_get_context() { # Set namespace to 'N/A' if it is not defined KUBE_PS1_CONTEXT="${KUBE_PS1_CONTEXT:-N/A}" - if [[ ! -z "${KUBE_PS1_CLUSTER_FUNCTION}" ]]; then - KUBE_PS1_CONTEXT=$($KUBE_PS1_CLUSTER_FUNCTION $KUBE_PS1_CONTEXT) + if [[ -n "${KUBE_PS1_CLUSTER_FUNCTION}" ]]; then + KUBE_PS1_CONTEXT="$("${KUBE_PS1_CLUSTER_FUNCTION}" "${KUBE_PS1_CONTEXT}")" fi fi } @@ -264,27 +282,36 @@ _kube_ps1_get_context() { _kube_ps1_get_ns() { if [[ "${KUBE_PS1_NS_ENABLE}" == true ]]; then KUBE_PS1_NAMESPACE="$(${KUBE_PS1_BINARY} config view --minify --output 'jsonpath={..namespace}' 2>/dev/null)" - # Set namespace to 'default' if it is not defined - KUBE_PS1_NAMESPACE="${KUBE_PS1_NAMESPACE:-default}" + KUBE_PS1_NAMESPACE="${KUBE_PS1_NAMESPACE:-N/A}" - if [[ ! -z "${KUBE_PS1_NAMESPACE_FUNCTION}" ]]; then - KUBE_PS1_NAMESPACE=$($KUBE_PS1_NAMESPACE_FUNCTION $KUBE_PS1_NAMESPACE) + if [[ -n "${KUBE_PS1_NAMESPACE_FUNCTION}" ]]; then + KUBE_PS1_NAMESPACE="$("${KUBE_PS1_NAMESPACE_FUNCTION}" "${KUBE_PS1_NAMESPACE}")" fi fi } _kube_ps1_get_context_ns() { # Set the command time - if [[ "${KUBE_PS1_SHELL}" == "bash" ]]; then + if [[ "$(_kube_ps1_shell_type)" == "bash" ]]; then if ((BASH_VERSINFO[0] >= 4 && BASH_VERSINFO[1] >= 2)); then - KUBE_PS1_LAST_TIME=$(printf '%(%s)T') + _KUBE_PS1_LAST_TIME=$(printf '%(%s)T') else - KUBE_PS1_LAST_TIME=$(date +%s) + _KUBE_PS1_LAST_TIME=$(date +%s) fi - elif [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then - KUBE_PS1_LAST_TIME=$EPOCHSECONDS + elif [[ "$(_kube_ps1_shell_type)" == "zsh" ]]; then + _KUBE_PS1_LAST_TIME=$EPOCHREALTIME fi + KUBE_PS1_CONTEXT="${KUBE_PS1_CONTEXT:-N/A}" + KUBE_PS1_NAMESPACE="${KUBE_PS1_NAMESPACE:-N/A}" + + # Cache which cfgfiles we can read in case they change. + local conf + _KUBE_PS1_CFGFILES_READ_CACHE= + for conf in $(_kube_ps1_split_config : "${KUBECONFIG:-${HOME}/.kube/config}"); do + [[ -r $conf ]] && _KUBE_PS1_CFGFILES_READ_CACHE+=":$conf" + done + _kube_ps1_get_context _kube_ps1_get_ns } @@ -298,7 +325,7 @@ Toggle kube-ps1 prompt on Usage: kubeon [-g | --global] [-h | --help] -With no arguments, turn off kube-ps1 status for this shell instance (default). +With no arguments, turn oon kube-ps1 status for this shell instance (default). -g --global turn on kube-ps1 status globally -h --help print this message @@ -322,7 +349,7 @@ kubeon() { if [[ "${1}" == '-h' || "${1}" == '--help' ]]; then _kubeon_usage elif [[ "${1}" == '-g' || "${1}" == '--global' ]]; then - rm -f -- "${KUBE_PS1_DISABLE_PATH}" + rm -f -- "${_KUBE_PS1_DISABLE_PATH}" elif [[ "$#" -ne 0 ]]; then echo -e "error: unrecognized flag ${1}\\n" _kubeon_usage @@ -336,8 +363,8 @@ kubeoff() { if [[ "${1}" == '-h' || "${1}" == '--help' ]]; then _kubeoff_usage elif [[ "${1}" == '-g' || "${1}" == '--global' ]]; then - mkdir -p -- "$(dirname "${KUBE_PS1_DISABLE_PATH}")" - touch -- "${KUBE_PS1_DISABLE_PATH}" + mkdir -p -- "$(dirname "${_KUBE_PS1_DISABLE_PATH}")" + touch -- "${_KUBE_PS1_DISABLE_PATH}" elif [[ $# -ne 0 ]]; then echo "error: unrecognized flag ${1}" >&2 _kubeoff_usage @@ -351,22 +378,29 @@ kubeoff() { kube_ps1() { [[ "${KUBE_PS1_ENABLED}" == "off" ]] && return [[ -z "${KUBE_PS1_CONTEXT}" ]] && [[ "${KUBE_PS1_CONTEXT_ENABLE}" == true ]] && return + [[ "${KUBE_PS1_CONTEXT}" == "N/A" ]] && [[ ${KUBE_PS1_HIDE_IF_NOCONTEXT} == true ]] && return + local KUBE_PS1 local KUBE_PS1_RESET_COLOR="${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_DEFAULT_FG}${_KUBE_PS1_CLOSE_ESC}" + # If background color is set, reset color should also reset the background + if [[ -n "${KUBE_PS1_BG_COLOR}" ]]; then + KUBE_PS1_RESET_COLOR="${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_DEFAULT_FG}${_KUBE_PS1_DEFAULT_BG}${_KUBE_PS1_CLOSE_ESC}" + fi + # Background Color - [[ -n "${KUBE_PS1_BG_COLOR}" ]] && KUBE_PS1+="$(_kube_ps1_color_bg ${KUBE_PS1_BG_COLOR})" + [[ -n "${KUBE_PS1_BG_COLOR}" ]] && KUBE_PS1+="$(_kube_ps1_color_bg "${KUBE_PS1_BG_COLOR}")" # Prefix if [[ -z "${KUBE_PS1_PREFIX_COLOR:-}" ]] && [[ -n "${KUBE_PS1_PREFIX}" ]]; then KUBE_PS1+="${KUBE_PS1_PREFIX}" else - KUBE_PS1+="$(_kube_ps1_color_fg $KUBE_PS1_PREFIX_COLOR)${KUBE_PS1_PREFIX}${KUBE_PS1_RESET_COLOR}" + KUBE_PS1+="$(_kube_ps1_color_fg "${KUBE_PS1_PREFIX_COLOR}")${KUBE_PS1_PREFIX}${KUBE_PS1_RESET_COLOR}" fi # Symbol - KUBE_PS1+="$(_kube_ps1_color_fg $KUBE_PS1_SYMBOL_COLOR)$(_kube_ps1_symbol)${KUBE_PS1_RESET_COLOR}" + KUBE_PS1+="$(_kube_ps1_symbol)" if [[ -n "${KUBE_PS1_SEPARATOR}" ]] && [[ "${KUBE_PS1_SYMBOL_ENABLE}" == true ]]; then KUBE_PS1+="${KUBE_PS1_SEPARATOR}" @@ -374,7 +408,14 @@ kube_ps1() { # Context if [[ "${KUBE_PS1_CONTEXT_ENABLE}" == true ]]; then - KUBE_PS1+="$(_kube_ps1_color_fg $KUBE_PS1_CTX_COLOR)${KUBE_PS1_CONTEXT}${KUBE_PS1_RESET_COLOR}" + local ctx_color="${KUBE_PS1_CTX_COLOR:-red}" + + # Allow custom function to override color based on context + if [[ -n "${KUBE_PS1_CTX_COLOR_FUNCTION}" ]]; then + ctx_color="$("${KUBE_PS1_CTX_COLOR_FUNCTION}" "${KUBE_PS1_CONTEXT}")" + fi + + KUBE_PS1+="$(_kube_ps1_color_fg "${ctx_color}")${KUBE_PS1_CONTEXT}${KUBE_PS1_RESET_COLOR}" fi # Namespace @@ -382,14 +423,14 @@ kube_ps1() { if [[ -n "${KUBE_PS1_DIVIDER}" ]] && [[ "${KUBE_PS1_CONTEXT_ENABLE}" == true ]]; then KUBE_PS1+="${KUBE_PS1_DIVIDER}" fi - KUBE_PS1+="$(_kube_ps1_color_fg ${KUBE_PS1_NS_COLOR})${KUBE_PS1_NAMESPACE}${KUBE_PS1_RESET_COLOR}" + KUBE_PS1+="$(_kube_ps1_color_fg "${KUBE_PS1_NS_COLOR:-cyan}")${KUBE_PS1_NAMESPACE}${KUBE_PS1_RESET_COLOR}" fi # Suffix if [[ -z "${KUBE_PS1_SUFFIX_COLOR:-}" ]] && [[ -n "${KUBE_PS1_SUFFIX}" ]]; then KUBE_PS1+="${KUBE_PS1_SUFFIX}" else - KUBE_PS1+="$(_kube_ps1_color_fg $KUBE_PS1_SUFFIX_COLOR)${KUBE_PS1_SUFFIX}${KUBE_PS1_RESET_COLOR}" + KUBE_PS1+="$(_kube_ps1_color_fg "${KUBE_PS1_SUFFIX_COLOR}")${KUBE_PS1_SUFFIX}${KUBE_PS1_RESET_COLOR}" fi # Close Background color if defined From 6634f44826bc068e753523a04600d6e6fed04f19 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Jan 2026 09:28:11 +0100 Subject: [PATCH 138/187] chore(deps): bump urllib3 in /.github/workflows/dependencies (#13506) Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.6.2 to 2.6.3. - [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.6.2...2.6.3) --- updated-dependencies: - dependency-name: urllib3 dependency-version: 2.6.3 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 584a96ac9..5f31d8798 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.2 +urllib3==2.6.3 From ed21aa196182d87e15a1290ddb3b0b6acb9f35b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C3=96zg=C3=BCr?= <226712+halilim@users.noreply.github.com> Date: Thu, 8 Jan 2026 13:43:14 +0300 Subject: [PATCH 139/187] fix(mise)!: remove unneeded hook-env call (#13491) BREAKING CHANGE: Backwards compatibility for `rtx` has been removed. Please migrate to `mise` if you are affected by this change. --- plugins/mise/mise.plugin.zsh | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/plugins/mise/mise.plugin.zsh b/plugins/mise/mise.plugin.zsh index 96686f6aa..96373f5d2 100644 --- a/plugins/mise/mise.plugin.zsh +++ b/plugins/mise/mise.plugin.zsh @@ -1,27 +1,17 @@ -# TODO: 2024-01-03 remove rtx support -local __mise=mise if (( ! $+commands[mise] )); then - if (( $+commands[rtx] )); then - __mise=rtx - else - return - fi + return fi # Load mise hooks -eval "$($__mise activate zsh)" - -# Hook mise into current environment -eval "$($__mise hook-env -s zsh)" +eval "$(mise activate zsh)" # If the completion file doesn't exist yet, we need to autoload it and # bind it to `mise`. Otherwise, compinit will have already done that. -if [[ ! -f "$ZSH_CACHE_DIR/completions/_$__mise" ]]; then +if [[ ! -f "$ZSH_CACHE_DIR/completions/_mise" ]]; then typeset -g -A _comps - autoload -Uz _$__mise - _comps[$__mise]=_$__mise + autoload -Uz _mise + _comps[mise]=_mise fi # Generate and load mise completion -$__mise completion zsh >| "$ZSH_CACHE_DIR/completions/_$__mise" &| -unset __mise +mise completion zsh >| "$ZSH_CACHE_DIR/completions/_mise" &| From 871d4b9816e6a8bdf809149c79f468d0fcb888db Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Thu, 8 Jan 2026 12:02:40 +0100 Subject: [PATCH 140/187] fix(1password)!: remove v1 support (#13507) BREAKING CHANGE: `op` v1 support has been removed. Please migrate to v2 if you are affected by this change. --- plugins/1password/_opswd | 10 ---------- plugins/1password/opswd | 41 ---------------------------------------- 2 files changed, 51 deletions(-) diff --git a/plugins/1password/_opswd b/plugins/1password/_opswd index dbc094f87..694df5cfa 100644 --- a/plugins/1password/_opswd +++ b/plugins/1password/_opswd @@ -6,14 +6,4 @@ function _opswd() { [[ -z "$services" ]] || compadd -a -- services } -# TODO: 2022-03-26: Remove support for op CLI 1 -autoload -Uz is-at-least -is-at-least 2.0.0 $(op --version) || { - function _opswd() { - local -a services - services=("${(@f)$(op list items --categories Login 2>/dev/null | op get item - --fields title 2>/dev/null)}") - [[ -z "$services" ]] || compadd -a -- services - } -} - _opswd "$@" diff --git a/plugins/1password/opswd b/plugins/1password/opswd index 753de9f99..9e09ae735 100644 --- a/plugins/1password/opswd +++ b/plugins/1password/opswd @@ -46,45 +46,4 @@ function opswd() { (sleep 20 && clipcopy /dev/null) &! } -# TODO: 2022-03-26: Remove support for op CLI 1 -autoload -Uz is-at-least -is-at-least 2.0.0 $(op --version) || { - print -ru2 ${(%):-"%F{yellow}opswd: usage with op version $(op --version) is deprecated. Upgrade to CLI 2 and reload zsh. -For instructions, see https://developer.1password.com/docs/cli/upgrade.%f"} - - # opswd puts the password of the named service into the clipboard. If there's a - # one time password, it will be copied into the clipboard after 10 seconds. The - # clipboard is cleared after another 20 seconds. - function opswd() { - if [[ $# -lt 1 ]]; then - echo "Usage: opswd " - return 1 - fi - - local service=$1 - - # If not logged in, print error and return - op list users > /dev/null || return - - local password - # Copy the password to the clipboard - if ! password=$(op get item "$service" --fields password 2>/dev/null); then - echo "error: could not obtain password for $service" - return 1 - fi - - echo -n "$password" | clipcopy - echo "✔ password for $service copied to clipboard" - - # If there's a one time password, copy it to the clipboard after 5 seconds - local totp - if totp=$(op get totp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then - sleep 10 && echo -n "$totp" | clipcopy - echo "✔ TOTP for $service copied to clipboard" - fi - - (sleep 20 && clipcopy /dev/null) &! - } -} - opswd "$@" From 35068db8373917a23eb9e3dabeb6596348e6534c Mon Sep 17 00:00:00 2001 From: Match <132382032+gayanMatch@users.noreply.github.com> Date: Sun, 11 Jan 2026 03:54:11 -0800 Subject: [PATCH 141/187] feat(jj): add alias for `jj abandon` (#13510) --- 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 fd964e309..ad16dde89 100644 --- a/plugins/jj/README.md +++ b/plugins/jj/README.md @@ -12,6 +12,7 @@ plugins=(... jj) | Alias | Command | | ------ | ----------------------------- | +| jja | `jj abandon` | | jjb | `jj bookmark` | | jjbc | `jj bookmark create` | | jjbd | `jj bookmark delete` | diff --git a/plugins/jj/jj.plugin.zsh b/plugins/jj/jj.plugin.zsh index 696bc380b..4b0400f9d 100644 --- a/plugins/jj/jj.plugin.zsh +++ b/plugins/jj/jj.plugin.zsh @@ -34,6 +34,7 @@ function jj_prompt_template() { } # Aliases (sorted alphabetically) +alias jja='jj abandon' alias jjb='jj bookmark' alias jjbc='jj bookmark create' alias jjbd='jj bookmark delete' From ec14da72fbf8b5016bb1533d4af3ff3bb2ac7a19 Mon Sep 17 00:00:00 2001 From: Olexandr88 Date: Wed, 14 Jan 2026 19:54:21 +0200 Subject: [PATCH 142/187] chore: update LICENSE (#13509) --- LICENSE.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE.txt b/LICENSE.txt index a1366bdbc..1ea913ac4 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2009-2025 Robby Russell and contributors (https://github.com/ohmyzsh/ohmyzsh/contributors) +Copyright (c) 2009-2026 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 47e990ccad6b914226a91f05ed6f04ec0981716d Mon Sep 17 00:00:00 2001 From: Sassan torabkheslat Date: Sun, 18 Jan 2026 18:48:55 +0100 Subject: [PATCH 143/187] feat(brew): add aliases for reinstall and HEAD install (#13446) Add new aliases: - br: brew reinstall - bih: brew install --HEAD - brh: brew reinstall --HEAD --- 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 89c902ee4..ab0b9cd73 100644 --- a/plugins/brew/README.md +++ b/plugins/brew/README.md @@ -35,11 +35,14 @@ the `brew` binary before sourcing `oh-my-zsh.sh` and it'll set up the environmen | `bdr` | `brew doctor` | Check your system for potential problems. | | `bfu` | `brew upgrade --formula` | Upgrade only formulae (not casks). | | `bi` | `brew install` | Install a formula. | +| `bih` | `brew install --HEAD` | Install a formula with --HEAD | | `bl` | `brew list` | List all installed formulae. | | `bo` | `brew outdated` | List installed formulae that have an updated version available. | +| `br` | `brew reinstall` | Reinstall a formula. | | `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. | +| `brh` | `brew reinstall --HEAD` | Reinstall a formula with --HEAD | | `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). | diff --git a/plugins/brew/brew.plugin.zsh b/plugins/brew/brew.plugin.zsh index 432a36076..7d5db2068 100644 --- a/plugins/brew/brew.plugin.zsh +++ b/plugins/brew/brew.plugin.zsh @@ -48,10 +48,13 @@ alias bcup='brew upgrade --cask' alias bdr='brew doctor' alias bfu='brew upgrade --formula' alias bi='brew install' +alias bih='brew install --HEAD' alias bl='brew list' alias bo='brew outdated' +alias br='brew reinstall' alias brewp='brew pin' alias brewsp='brew list --pinned' +alias brh='brew reinstall --HEAD' alias bs='brew search' alias bsl='brew services list' alias bsoff='brew services stop' From 834fbf371196b6136dacf113b90713c2f2f42a6f Mon Sep 17 00:00:00 2001 From: Arbian Shkodra <97307964+arbianshkodra@users.noreply.github.com> Date: Sun, 18 Jan 2026 18:50:45 +0100 Subject: [PATCH 144/187] feat(hcloud): add plugin for Hetzner Cloud CLI (#13473) Add a new plugin for the Hetzner Cloud CLI (hcloud) with: - Auto-completion support - Comprehensive aliases for all major hcloud commands - Context management shortcuts - Server, volume, network, and firewall management aliases - Load balancer and certificate management shortcuts - Documentation with complete alias reference --- plugins/hcloud/README.md | 143 +++++++++++++++++++++++++++++++ plugins/hcloud/hcloud.plugin.zsh | 129 ++++++++++++++++++++++++++++ 2 files changed, 272 insertions(+) create mode 100644 plugins/hcloud/README.md create mode 100644 plugins/hcloud/hcloud.plugin.zsh diff --git a/plugins/hcloud/README.md b/plugins/hcloud/README.md new file mode 100644 index 000000000..6cac675c5 --- /dev/null +++ b/plugins/hcloud/README.md @@ -0,0 +1,143 @@ +# hcloud plugin + +This plugin adds completion for the [Hetzner Cloud CLI](https://github.com/hetznercloud/cli), +as well as some aliases for common hcloud commands. + +To use it, add `hcloud` to the plugins array in your zshrc file: + +```zsh +plugins=(... hcloud) +``` + +## Aliases + +| Alias | Command | Description | +| :--------- | :---------------------------------------- | :------------------------------------------------------------ | +| hc | `hcloud` | The hcloud command | +| | | **Context Management** | +| hcctx | `hcloud context` | Manage contexts | +| hcctxls | `hcloud context list` | List all contexts | +| hcctxu | `hcloud context use` | Use a context | +| hcctxc | `hcloud context create` | Create a new context | +| hcctxd | `hcloud context delete` | Delete a context | +| hcctxa | `hcloud context active` | Show active context | +| | | **Server Management** | +| hcs | `hcloud server` | Manage servers | +| hcsl | `hcloud server list` | List all servers | +| hcsc | `hcloud server create` | Create a server | +| hcsd | `hcloud server delete` | Delete a server | +| hcsdesc | `hcloud server describe` | Describe a server | +| hcspoff | `hcloud server poweroff` | Power off a server | +| hcspon | `hcloud server poweron` | Power on a server | +| hcsr | `hcloud server reboot` | Reboot a server | +| hcsreset | `hcloud server reset` | Reset a server | +| hcssh | `hcloud server ssh` | SSH into a server | +| hcse | `hcloud server enable-rescue` | Enable rescue mode for a server | +| hcsdr | `hcloud server disable-rescue` | Disable rescue mode for a server | +| hcsip | `hcloud server ip` | Manage server IPs | +| hcsa | `hcloud server attach-iso` | Attach an ISO to a server | +| hcsda | `hcloud server detach-iso` | Detach an ISO from a server | +| hcscip | `hcloud server change-type` | Change server type | +| | | **Volume Management** | +| hcv | `hcloud volume` | Manage volumes | +| hcvl | `hcloud volume list` | List all volumes | +| hcvc | `hcloud volume create` | Create a volume | +| hcvd | `hcloud volume delete` | Delete a volume | +| hcvdesc | `hcloud volume describe` | Describe a volume | +| hcva | `hcloud volume attach` | Attach a volume to a server | +| hcvda | `hcloud volume detach` | Detach a volume from a server | +| hcvr | `hcloud volume resize` | Resize a volume | +| | | **Network Management** | +| hcn | `hcloud network` | Manage networks | +| hcnl | `hcloud network list` | List all networks | +| hcnc | `hcloud network create` | Create a network | +| hcnd | `hcloud network delete` | Delete a network | +| hcndesc | `hcloud network describe` | Describe a network | +| hcnas | `hcloud network add-subnet` | Add a subnet to a network | +| hcnds | `hcloud network delete-subnet` | Delete a subnet from a network | +| hcnar | `hcloud network add-route` | Add a route to a network | +| hcndr | `hcloud network delete-route` | Delete a route from a network | +| | | **Floating IP Management** | +| hcfip | `hcloud floating-ip` | Manage floating IPs | +| hcfipl | `hcloud floating-ip list` | List all floating IPs | +| hcfipc | `hcloud floating-ip create` | Create a floating IP | +| hcfipd | `hcloud floating-ip delete` | Delete a floating IP | +| hcfipdesc | `hcloud floating-ip describe` | Describe a floating IP | +| hcfipa | `hcloud floating-ip assign` | Assign a floating IP to a server | +| hcfipua | `hcloud floating-ip unassign` | Unassign a floating IP from a server | +| | | **SSH Key Management** | +| hcsk | `hcloud ssh-key` | Manage SSH keys | +| hcskl | `hcloud ssh-key list` | List all SSH keys | +| hcskc | `hcloud ssh-key create` | Create an SSH key | +| hcskd | `hcloud ssh-key delete` | Delete an SSH key | +| hcskdesc | `hcloud ssh-key describe` | Describe an SSH key | +| hcsku | `hcloud ssh-key update` | Update an SSH key | +| | | **Image Management** | +| hci | `hcloud image` | Manage images | +| hcil | `hcloud image list` | List all images | +| hcid | `hcloud image delete` | Delete an image | +| hcidesc | `hcloud image describe` | Describe an image | +| hciu | `hcloud image update` | Update an image | +| | | **Firewall Management** | +| hcfw | `hcloud firewall` | Manage firewalls | +| hcfwl | `hcloud firewall list` | List all firewalls | +| hcfwc | `hcloud firewall create` | Create a firewall | +| hcfwd | `hcloud firewall delete` | Delete a firewall | +| hcfwdesc | `hcloud firewall describe` | Describe a firewall | +| hcfwar | `hcloud firewall add-rule` | Add a rule to a firewall | +| hcfwdr | `hcloud firewall delete-rule` | Delete a rule from a firewall | +| hcfwas | `hcloud firewall apply-to-resource` | Apply a firewall to a resource | +| hcfwrs | `hcloud firewall remove-from-resource` | Remove a firewall from a resource | +| | | **Load Balancer Management** | +| hclb | `hcloud load-balancer` | Manage load balancers | +| hclbl | `hcloud load-balancer list` | List all load balancers | +| hclbc | `hcloud load-balancer create` | Create a load balancer | +| hclbd | `hcloud load-balancer delete` | Delete a load balancer | +| hclbdesc | `hcloud load-balancer describe` | Describe a load balancer | +| hclbu | `hcloud load-balancer update` | Update a load balancer | +| hclbas | `hcloud load-balancer add-service` | Add a service to a load balancer | +| hclbds | `hcloud load-balancer delete-service` | Delete a service from a load balancer | +| hclbat | `hcloud load-balancer add-target` | Add a target to a load balancer | +| hclbdt | `hcloud load-balancer delete-target` | Delete a target from a load balancer | +| | | **Certificate Management** | +| hccert | `hcloud certificate` | Manage certificates | +| hccertl | `hcloud certificate list` | List all certificates | +| hccertc | `hcloud certificate create` | Create a certificate | +| hccertd | `hcloud certificate delete` | Delete a certificate | +| hccertdesc | `hcloud certificate describe` | Describe a certificate | +| hccertu | `hcloud certificate update` | Update a certificate | +| | | **Datacenter and Location Info** | +| hcdc | `hcloud datacenter list` | List all datacenters | +| hcloc | `hcloud location list` | List all locations | +| hcst | `hcloud server-type list` | List all server types | +| hcit | `hcloud image list --type system` | List all system images | + +## Requirements + +This plugin requires the [Hetzner Cloud CLI](https://github.com/hetznercloud/cli) to be installed. + +### Installation + +Install the Hetzner Cloud CLI using one of the following methods: + +**macOS (Homebrew):** +```bash +brew install hcloud +``` + +**Linux (from source):** +```bash +go install github.com/hetznercloud/cli/cmd/hcloud@latest +``` + +**Or download a prebuilt binary from the [releases page](https://github.com/hetznercloud/cli/releases).** + +### Setup + +After installation, create a context and authenticate: + +```bash +hcloud context create my-project +``` + +You'll be prompted to enter your Hetzner Cloud API token, which you can generate in the [Hetzner Cloud Console](https://console.hetzner.cloud/). diff --git a/plugins/hcloud/hcloud.plugin.zsh b/plugins/hcloud/hcloud.plugin.zsh new file mode 100644 index 000000000..3b1d4321e --- /dev/null +++ b/plugins/hcloud/hcloud.plugin.zsh @@ -0,0 +1,129 @@ +# hcloud plugin for oh-my-zsh +# Hetzner Cloud CLI: https://github.com/hetznercloud/cli + +if (( ! $+commands[hcloud] )); then + return +fi + +# If the completion file doesn't exist yet, we need to autoload it and +# bind it to `hcloud`. Otherwise, compinit will have already done that. +if [[ ! -f "$ZSH_CACHE_DIR/completions/_hcloud" ]]; then + typeset -g -A _comps + autoload -Uz _hcloud + _comps[hcloud]=_hcloud +fi + +hcloud completion zsh 2> /dev/null >| "$ZSH_CACHE_DIR/completions/_hcloud" &| + +# Main alias +alias hc='hcloud' + +# Context management +alias hcctx='hcloud context' +alias hcctxls='hcloud context list' +alias hcctxu='hcloud context use' +alias hcctxc='hcloud context create' +alias hcctxd='hcloud context delete' +alias hcctxa='hcloud context active' + +# Server management +alias hcs='hcloud server' +alias hcsl='hcloud server list' +alias hcsc='hcloud server create' +alias hcsd='hcloud server delete' +alias hcsdesc='hcloud server describe' +alias hcspoff='hcloud server poweroff' +alias hcspon='hcloud server poweron' +alias hcsr='hcloud server reboot' +alias hcsreset='hcloud server reset' +alias hcssh='hcloud server ssh' +alias hcse='hcloud server enable-rescue' +alias hcsdr='hcloud server disable-rescue' +alias hcsip='hcloud server ip' + +# Server actions +alias hcsa='hcloud server attach-iso' +alias hcsda='hcloud server detach-iso' +alias hcscip='hcloud server change-type' + +# Volume management +alias hcv='hcloud volume' +alias hcvl='hcloud volume list' +alias hcvc='hcloud volume create' +alias hcvd='hcloud volume delete' +alias hcvdesc='hcloud volume describe' +alias hcva='hcloud volume attach' +alias hcvda='hcloud volume detach' +alias hcvr='hcloud volume resize' + +# Network management +alias hcn='hcloud network' +alias hcnl='hcloud network list' +alias hcnc='hcloud network create' +alias hcnd='hcloud network delete' +alias hcndesc='hcloud network describe' +alias hcnas='hcloud network add-subnet' +alias hcnds='hcloud network delete-subnet' +alias hcnar='hcloud network add-route' +alias hcndr='hcloud network delete-route' + +# Floating IP management +alias hcfip='hcloud floating-ip' +alias hcfipl='hcloud floating-ip list' +alias hcfipc='hcloud floating-ip create' +alias hcfipd='hcloud floating-ip delete' +alias hcfipdesc='hcloud floating-ip describe' +alias hcfipa='hcloud floating-ip assign' +alias hcfipua='hcloud floating-ip unassign' + +# SSH key management +alias hcsk='hcloud ssh-key' +alias hcskl='hcloud ssh-key list' +alias hcskc='hcloud ssh-key create' +alias hcskd='hcloud ssh-key delete' +alias hcskdesc='hcloud ssh-key describe' +alias hcsku='hcloud ssh-key update' + +# Image management +alias hci='hcloud image' +alias hcil='hcloud image list' +alias hcid='hcloud image delete' +alias hcidesc='hcloud image describe' +alias hciu='hcloud image update' + +# Firewall management +alias hcfw='hcloud firewall' +alias hcfwl='hcloud firewall list' +alias hcfwc='hcloud firewall create' +alias hcfwd='hcloud firewall delete' +alias hcfwdesc='hcloud firewall describe' +alias hcfwar='hcloud firewall add-rule' +alias hcfwdr='hcloud firewall delete-rule' +alias hcfwas='hcloud firewall apply-to-resource' +alias hcfwrs='hcloud firewall remove-from-resource' + +# Load balancer management +alias hclb='hcloud load-balancer' +alias hclbl='hcloud load-balancer list' +alias hclbc='hcloud load-balancer create' +alias hclbd='hcloud load-balancer delete' +alias hclbdesc='hcloud load-balancer describe' +alias hclbu='hcloud load-balancer update' +alias hclbas='hcloud load-balancer add-service' +alias hclbds='hcloud load-balancer delete-service' +alias hclbat='hcloud load-balancer add-target' +alias hclbdt='hcloud load-balancer delete-target' + +# Certificate management +alias hccert='hcloud certificate' +alias hccertl='hcloud certificate list' +alias hccertc='hcloud certificate create' +alias hccertd='hcloud certificate delete' +alias hccertdesc='hcloud certificate describe' +alias hccertu='hcloud certificate update' + +# Datacenter and location info +alias hcdc='hcloud datacenter list' +alias hcloc='hcloud location list' +alias hcst='hcloud server-type list' +alias hcit='hcloud image list --type system' From 4677b798aa8bd5b60746b3dc0b5fd278b33226f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jan 2026 09:22:09 +0100 Subject: [PATCH 145/187] chore(deps): bump github/codeql-action from 4.31.9 to 4.31.10 (#13524) 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 8c8113b2c..441538acd 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@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9 + uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 with: sarif_file: results.sarif From 99b243b9a98576037c864ff115b1fe96621fec8a Mon Sep 17 00:00:00 2001 From: Robby Russell Date: Mon, 19 Jan 2026 00:25:59 -0800 Subject: [PATCH 146/187] chore: add AI guidelines (#13520) Co-authored-by: Claude --- .github/PULL_REQUEST_TEMPLATE.md | 1 + CONTRIBUTING.md | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5c94caeb5..4d4b7845f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -7,6 +7,7 @@ - [ ] I have read the contribution guide and followed all the instructions. - [ ] The code follows the code style guide detailed in the wiki. - [ ] The code is mine or it's from somewhere with an MIT-compatible license. +- [ ] If I used AI tools (ChatGPT, Claude, Gemini, etc.) to assist with this contribution, I've disclosed it below. - [ ] The code is efficient, to the best of my ability, and does not waste computer resources. - [ ] The code is stable and I have tested it myself, to the best of my abilities. - [ ] If the code introduces new aliases, I provide a valid use case for all plugin users down below. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6c8b8446e..5168cdeaf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,6 +20,7 @@ you would make is not already covered. - [Getting started](#getting-started) - [You have a solution](#you-have-a-solution) - [You have an addition](#you-have-an-addition) +- [A note on AI-assisted contributions](#a-note-on-ai-assisted-contributions) - [Use the Search, Luke](#use-the-search-luke) - [Commit Guidelines](#commit-guidelines) - [Format](#format) @@ -125,6 +126,30 @@ Because of this, from now on, we require that new aliases follow these condition This list is not exhaustive! Please remember that your alias will be in the machines of many people, so it should be justified why they should have it. +## A note on AI-assisted contributions + +We'll admit it: AI tools can be pretty helpful for coding tasks, and we're not here to gatekeep how you get your work done. We use these tools ourselves! 🤖 + +But here's the thing—Oh My Zsh is maintained by a small team of volunteers who do this in their spare time. We already have hundreds of pending PRs, and we want to make sure we're spending our limited time effectively. + +If you used AI tools meaningfully in your contribution (code generation, agentic coding assistants, etc.), please mention it in your PR description. Basic autocomplete doesn't count, but if an AI wrote substantial parts of your code, just let us know. + +**Examples of good disclosure:** +- "Used ChatGPT to help generate the initial regex pattern for parsing git status output" +- "Claude assisted with writing the unit tests for this feature" +- "Generated with Gemini and then reviewed/tested manually" +- Or simply: "AI-assisted" in your PR description + +Here's what we're looking for: + +- **You understand your code**: You should be able to explain what your contribution does and how it works. We want to collaborate with humans who are invested in the project. +- **Context matters**: Tell us what problem you're solving, how you tested it, and link to relevant docs. Small, incremental changes work better than massive generated overhauls. +- **Quality over quantity**: We'd rather have one thoughtful, well-tested contribution than ten AI-generated PRs that need extensive review. + +The disclosure helps us know how much guidance to offer. If we're just reviewing AI output that you can't explain or improve, that changes the dynamic—and frankly, it's not a great use of anyone's time. + +As always, we reserve the right to decline any contribution. PRs that appear to be unreviewed AI output, or code the contributor can't explain, may be closed without extensive feedback. + ---- ## Use the Search, Luke From 233e81db4e21215b22bc3bf934478ec5245e6510 Mon Sep 17 00:00:00 2001 From: Vinfall <91039000+Vinfall@users.noreply.github.com> Date: Tue, 20 Jan 2026 17:15:02 +0800 Subject: [PATCH 147/187] feat(command-not-found): support void linux (#13531) --- plugins/command-not-found/README.md | 7 ++++--- plugins/command-not-found/command-not-found.plugin.zsh | 8 +++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/plugins/command-not-found/README.md b/plugins/command-not-found/README.md index 88761bb88..5079b1fb5 100644 --- a/plugins/command-not-found/README.md +++ b/plugins/command-not-found/README.md @@ -22,14 +22,15 @@ Try: sudo apt install It works out of the box with the command-not-found packages for: -- [Ubuntu](https://www.porcheron.info/command-not-found-for-zsh/) +- [Ubuntu](https://launchpad.net/ubuntu/+source/command-not-found) - [Debian](https://packages.debian.org/search?keywords=command-not-found) -- [Arch Linux](https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found) -- [macOS (Homebrew)](https://github.com/Homebrew/homebrew-command-not-found) +- [Arch Linux](https://wiki.archlinux.org/title/Zsh#pkgfile_"command_not_found"_handler) +- [macOS (Homebrew)](https://github.com/Homebrew/brew/blob/main/docs/Command-Not-Found.md) - [Fedora](https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound) - [NixOS](https://github.com/NixOS/nixpkgs/tree/master/nixos/modules/programs/command-not-found) - [Termux](https://github.com/termux/command-not-found) - [SUSE](https://www.unix.com/man-page/suse/1/command-not-found/) - [Gentoo](https://github.com/AndrewAmmerlaan/command-not-found-gentoo/tree/main) +- [Void Linux](https://codeberg.org/classabbyamp/xbps-command-not-found) You can add support for other platforms by submitting a Pull Request. diff --git a/plugins/command-not-found/command-not-found.plugin.zsh b/plugins/command-not-found/command-not-found.plugin.zsh index 85d778004..a85dbfdc3 100644 --- a/plugins/command-not-found/command-not-found.plugin.zsh +++ b/plugins/command-not-found/command-not-found.plugin.zsh @@ -1,13 +1,15 @@ ## Platforms with a built-in command-not-found handler init file for file ( - # Arch Linux. Must have pkgfile installed: https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found + # Arch Linux. Must have pkgfile installed: https://wiki.archlinux.org/title/Zsh#pkgfile_"command_not_found"_handler /usr/share/doc/pkgfile/command-not-found.zsh - # Homebrew: https://github.com/Homebrew/homebrew-command-not-found + # Void Linux: https://codeberg.org/classabbyamp/xbps-command-not-found + /usr/share/zsh/plugins/xbps-command-not-found/xbps-command-not-found.zsh + # Homebrew: https://github.com/Homebrew/brew/blob/main/docs/Command-Not-Found.md /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 + # 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 e0766905519fbc7982a590a195ee7c3e8bb594e8 Mon Sep 17 00:00:00 2001 From: HOHOH134 <1992537+showchi@users.noreply.github.com> Date: Tue, 20 Jan 2026 17:21:56 +0800 Subject: [PATCH 148/187] feat(gitignore): use cdn as endpoint (#13497) --- plugins/gitignore/README.md | 4 ++-- plugins/gitignore/gitignore.plugin.zsh | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/plugins/gitignore/README.md b/plugins/gitignore/README.md index 23c7887cf..ea991a951 100644 --- a/plugins/gitignore/README.md +++ b/plugins/gitignore/README.md @@ -1,6 +1,6 @@ # gitignore -This plugin enables you the use of [gitignore.io](https://www.toptal.com/developers/gitignore) from the command line. You need an active internet connection. +This plugin enables you to use [gitignore.io](https://www.gitignore.io) from the command line. You need an active internet connection to fetch templates. The plugin uses the gitignore.io CDN endpoint to simplify access and improve reliability. To use it, add `gitignore` to the plugins array in your zshrc file: @@ -14,4 +14,4 @@ plugins=(... gitignore) * `gi [TEMPLATENAME]`: Show git-ignore output on the command line, e.g. `gi java` to exclude class and package files. -* `gi [TEMPLATENAME] >> .gitignore`: Appending programming language settings to your projects .gitignore. +* `gi [TEMPLATENAME] >> .gitignore`: Append the template rules to your project's `.gitignore` file. diff --git a/plugins/gitignore/gitignore.plugin.zsh b/plugins/gitignore/gitignore.plugin.zsh index 3271d61a9..a9f3f6453 100644 --- a/plugins/gitignore/gitignore.plugin.zsh +++ b/plugins/gitignore/gitignore.plugin.zsh @@ -1,12 +1,21 @@ -function gi() { curl -fLw '\n' https://www.toptal.com/developers/gitignore/api/"${(j:,:)@}" } +# gitignore plugin for oh-my-zsh +# Uses gitignore.io CDN endpoint +function _gi_curl() { + curl -sfL "https://www.gitignore.io/api/$1" +} + +function gi() { + local query="${(j:,:)@}" + _gi_curl "$query" || return 1 +} _gitignoreio_get_command_list() { - curl -sfL https://www.toptal.com/developers/gitignore/api/list | tr "," "\n" + _gi_curl "list" | tr "," "\n" } _gitignoreio () { compset -P '*,' - compadd -S '' `_gitignoreio_get_command_list` + compadd -S '' $(_gitignoreio_get_command_list) } -compdef _gitignoreio gi +compdef _gitignoreio gi \ No newline at end of file From db66764f46104be3c8bd10ddf50bf38c3c885027 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 25 Jan 2026 16:10:50 +0100 Subject: [PATCH 149/187] chore(deps): bump actions/setup-python from 6.1.0 to 6.2.0 (#13540) Bumps [actions/setup-python](https://github.com/actions/setup-python) from 6.1.0 to 6.2.0. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/83679a892e2d95755f2dac6acb0bfd1e9ac5d548...a309ff8b426b58ec0e2a45f0f869d46889d02405) --- updated-dependencies: - dependency-name: actions/setup-python dependency-version: 6.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 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index 8d8f5cc73..46d91025c 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -28,7 +28,7 @@ jobs: app-id: ${{ secrets.OHMYZSH_APP_ID }} private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} - name: Setup Python - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: "3.12" cache: "pip" From 0074e724f8b16b2e3c0931242b22d796cd9d1caa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jan 2026 08:14:24 +0100 Subject: [PATCH 150/187] chore(deps): bump actions/checkout from 6.0.1 to 6.0.2 (#13541) Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.1 to 6.0.2. - [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/8e8c483db84b4bee98b60c0593521ed34d9990e8...de0fac2e4500dabe0009e67214ff5f5447ce83dd) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.0.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.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 46d91025c..53f2bd1a8 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -18,7 +18,7 @@ jobs: egress-policy: audit - name: Checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Authenticate as @ohmyzsh diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index eef5bf322..394798692 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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - 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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - 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 5917d5316..fceb5d347 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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - 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 441538acd..5e202aeb9 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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false From 67cd8c4673512d08238461f7ce00715da01665d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jan 2026 08:14:57 +0100 Subject: [PATCH 151/187] chore(deps): bump github/codeql-action from 4.31.10 to 4.31.11 (#13539) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.10 to 4.31.11. - [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/cdefb33c0f6224e58673d9004f47f7cb3e328b89...19b2f06db2b6f5108140aeb04014ef02b648f789) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.31.11 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 5e202aeb9..5b158434a 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@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 + uses: github/codeql-action/upload-sarif@19b2f06db2b6f5108140aeb04014ef02b648f789 # v4.31.11 with: sarif_file: results.sarif From 1a253c375a962e99160681be2afc5a51a0ccf4c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 09:49:06 +0100 Subject: [PATCH 152/187] chore(deps): bump github/codeql-action from 4.31.11 to 4.32.0 (#13548) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.31.11 to 4.32.0. - [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/19b2f06db2b6f5108140aeb04014ef02b648f789...b20883b0cd1f46c72ae0ba6d1090936928f9fa30) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.32.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/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 5b158434a..a9bec2dcb 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@19b2f06db2b6f5108140aeb04014ef02b648f789 # v4.31.11 + uses: github/codeql-action/upload-sarif@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0 with: sarif_file: results.sarif From 9df4ea095fe27ccd0ee95f2d34bab884c4a75585 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 09:49:29 +0100 Subject: [PATCH 153/187] chore(deps): bump step-security/harden-runner from 2.14.0 to 2.14.1 (#13547) Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.14.0 to 2.14.1. - [Release notes](https://github.com/step-security/harden-runner/releases) - [Commits](https://github.com/step-security/harden-runner/compare/20cf305ff2072d973412fa9b1e3a4f227bda3c76...e3f713f2d8f53843e71c69a996d56f51aa9adfb9) --- updated-dependencies: - dependency-name: step-security/harden-runner dependency-version: 2.14.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/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 53f2bd1a8..86f5d2f05 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@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 + uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 with: egress-policy: audit diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index 394798692..9277491c6 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@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 + uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 with: egress-policy: audit @@ -47,7 +47,7 @@ jobs: - test steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 + uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 with: egress-policy: audit diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fceb5d347..c0973c52d 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@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 + uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 with: egress-policy: audit diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index 70597cab6..f84e09d46 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@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 + uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 with: egress-policy: audit - name: Authenticate as @ohmyzsh diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index a9bec2dcb..1cf5a801e 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@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 + uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 with: egress-policy: audit From 116be8badd2f8af564e4be4853eaa70f21ad82c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 8 Feb 2026 21:09:10 +0100 Subject: [PATCH 154/187] chore(deps): bump step-security/harden-runner from 2.14.1 to 2.14.2 (#13557) Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.14.1 to 2.14.2. - [Release notes](https://github.com/step-security/harden-runner/releases) - [Commits](https://github.com/step-security/harden-runner/compare/e3f713f2d8f53843e71c69a996d56f51aa9adfb9...5ef0c079ce82195b2a36a210272d6b661572d83e) --- updated-dependencies: - dependency-name: step-security/harden-runner dependency-version: 2.14.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.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 86f5d2f05..027c2c755 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@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 with: egress-policy: audit diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index 9277491c6..62a736471 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@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.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@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 with: egress-policy: audit diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c0973c52d..0fb18b42f 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@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 with: egress-policy: audit diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index f84e09d46..b0c018d77 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@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 with: egress-policy: audit - name: Authenticate as @ohmyzsh diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 1cf5a801e..3fa953d56 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@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 with: egress-policy: audit From 41c5b9677afaf239268197546cfc8e003a073c97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 8 Feb 2026 21:09:55 +0100 Subject: [PATCH 155/187] chore(deps): bump github/codeql-action from 4.32.0 to 4.32.2 (#13558) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.32.0 to 4.32.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/b20883b0cd1f46c72ae0ba6d1090936928f9fa30...45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.32.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 3fa953d56..7df41e439 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@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0 + uses: github/codeql-action/upload-sarif@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 with: sarif_file: results.sarif From 88659ed193cd1af0ba3679c9de3c85f21003f3d4 Mon Sep 17 00:00:00 2001 From: Ranga Nirmal Date: Wed, 11 Feb 2026 17:01:06 +0530 Subject: [PATCH 156/187] fix(appearance): ensure arg separation in `test-ls-args` (#13556) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Marc Cornellà --- lib/theme-and-appearance.zsh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/theme-and-appearance.zsh b/lib/theme-and-appearance.zsh index 585e969d8..5cfa2e631 100644 --- a/lib/theme-and-appearance.zsh +++ b/lib/theme-and-appearance.zsh @@ -40,9 +40,9 @@ if [[ -z "$LS_COLORS" ]]; then fi function test-ls-args { - local cmd="$1" # ls, gls, colorls, ... - local args="${@[2,-1]}" # arguments except the first one - command "$cmd" "$args" /dev/null &>/dev/null + # Usage: test-ls-args cmd args... + # e.g. test-ls-args gls --color + command "$@" /dev/null &>/dev/null } # Find the option for using colors in ls, depending on the version From cdd31a7ab321dfb0f151df37a0712d93c131bbe4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Feb 2026 09:14:58 +0100 Subject: [PATCH 157/187] chore(deps): bump github/codeql-action from 4.32.2 to 4.32.3 (#13570) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.32.2 to 4.32.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/45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2...9e907b5e64f6b83e7804b09294d44122997950d6) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.32.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 7df41e439..99a8b82ce 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@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 + uses: github/codeql-action/upload-sarif@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 with: sarif_file: results.sarif From a8aca3fba5008bc954f4795eba14b03ea8b42959 Mon Sep 17 00:00:00 2001 From: c0mpile Date: Mon, 16 Feb 2026 06:01:00 -0500 Subject: [PATCH 158/187] fix(dnf): ensure correct alias for different version (#13559) --- plugins/dnf/dnf.plugin.zsh | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/plugins/dnf/dnf.plugin.zsh b/plugins/dnf/dnf.plugin.zsh index 642422fe1..29bb64e64 100644 --- a/plugins/dnf/dnf.plugin.zsh +++ b/plugins/dnf/dnf.plugin.zsh @@ -6,14 +6,22 @@ command -v dnf5 > /dev/null && dnfprog=dnf5 alias dnfl="${dnfprog} list" # List packages alias dnfli="${dnfprog} list installed" # List installed packages -alias dnfgl="${dnfprog} grouplist" # List package groups alias dnfmc="${dnfprog} makecache" # Generate metadata cache alias dnfp="${dnfprog} info" # Show package information alias dnfs="${dnfprog} search" # Search package alias dnfu="sudo ${dnfprog} upgrade" # Upgrade package alias dnfi="sudo ${dnfprog} install" # Install package -alias dnfgi="sudo ${dnfprog} groupinstall" # Install package group alias dnfr="sudo ${dnfprog} remove" # Remove package -alias dnfgr="sudo ${dnfprog} groupremove" # Remove package group alias dnfc="sudo ${dnfprog} clean all" # Clean cache + +# Conditional aliases based on dnfprog value +if [[ "${dnfprog}" == "dnf5" ]]; then + alias dnfgl="${dnfprog} group list" # List package groups (dnf5) + alias dnfgi="sudo ${dnfprog} group install" # Install package group (dnf5) + alias dnfgr="sudo ${dnfprog} group remove" # Remove package group (dnf5) +else + alias dnfgl="${dnfprog} grouplist" # List package groups (dnf) + alias dnfgi="sudo ${dnfprog} groupinstall" # Install package group (dnf) + alias dnfgr="sudo ${dnfprog} groupremove" # Remove package group (dnf) +fi From 993afc8267591707ae48a89de3480e05ff30b3fd Mon Sep 17 00:00:00 2001 From: Thomas Witt Date: Mon, 16 Feb 2026 13:08:13 +0200 Subject: [PATCH 159/187] feat(dotenv): add named pipe (FIFO) support (#13561) --- plugins/dotenv/README.md | 8 ++++++++ plugins/dotenv/dotenv.plugin.zsh | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/plugins/dotenv/README.md b/plugins/dotenv/README.md index ab9d329f6..5dbcf0fb1 100644 --- a/plugins/dotenv/README.md +++ b/plugins/dotenv/README.md @@ -78,6 +78,14 @@ change. NOTE: if a directory is found in both the allowed and disallowed lists, the disallowed list takes preference, _i.e._ the .env file will never be sourced. +## Named Pipe (FIFO) Support + +The plugin supports `.env` files provided as UNIX named pipes (FIFOs) in addition to regular files. +This is useful when secrets managers like [1Password Environments](https://developer.1password.com/docs/environment/) +mount `.env` files as named pipes to inject secrets on-the-fly without writing them to disk. + +No additional configuration is required — the plugin automatically detects and sources named pipes. + ## Version Control **It's strongly recommended to add `.env` file to `.gitignore`**, because usually it contains sensitive information such as your credentials, secret keys, passwords etc. You don't want to commit this file, it's supposed to be local only. diff --git a/plugins/dotenv/dotenv.plugin.zsh b/plugins/dotenv/dotenv.plugin.zsh index 46cd4b10a..c44c369b5 100644 --- a/plugins/dotenv/dotenv.plugin.zsh +++ b/plugins/dotenv/dotenv.plugin.zsh @@ -11,7 +11,7 @@ ## Functions source_env() { - if [[ ! -f "$ZSH_DOTENV_FILE" ]]; then + if [[ ! -f "$ZSH_DOTENV_FILE" ]] && [[ ! -p "$ZSH_DOTENV_FILE" ]]; then return fi From 45dd7d006ab2650273d9859f7e3224cf757a9db3 Mon Sep 17 00:00:00 2001 From: Eve <162624394+aviu16@users.noreply.github.com> Date: Mon, 16 Feb 2026 06:10:27 -0500 Subject: [PATCH 160/187] fix(zsh-navigation-tools): quote some potential space-filled strings (#13567) --- plugins/zsh-navigation-tools/n-list | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/zsh-navigation-tools/n-list b/plugins/zsh-navigation-tools/n-list index a852b083a..3be02191d 100644 --- a/plugins/zsh-navigation-tools/n-list +++ b/plugins/zsh-navigation-tools/n-list @@ -55,9 +55,9 @@ _nlist_cursor_visibility() { [ "$1" = "1" ] && { tput cvvis; tput cnorm } [ "$1" = "0" ] && tput civis elif [ "$_nlist_has_terminfo" = "1" ]; then - [ "$1" = "1" ] && { [ -n $terminfo[cvvis] ] && echo -n $terminfo[cvvis]; - [ -n $terminfo[cnorm] ] && echo -n $terminfo[cnorm] } - [ "$1" = "0" ] && [ -n $terminfo[civis] ] && echo -n $terminfo[civis] + [ "$1" = "1" ] && { [ -n "$terminfo[cvvis]" ] && echo -n "$terminfo[cvvis]"; + [ -n "$terminfo[cnorm]" ] && echo -n "$terminfo[cnorm]" } + [ "$1" = "0" ] && [ -n "$terminfo[civis]" ] && echo -n "$terminfo[civis]" fi } From 44f2a128aaee9f52391fe357d103e54f7f40fabb Mon Sep 17 00:00:00 2001 From: Eve <162624394+aviu16@users.noreply.github.com> Date: Wed, 18 Feb 2026 06:34:12 -0500 Subject: [PATCH 161/187] fix(thefuck): quote ZSH_CACHE_DIR path (#13569) path wasnt quoted, would break if it had spaces --- plugins/thefuck/thefuck.plugin.zsh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/thefuck/thefuck.plugin.zsh b/plugins/thefuck/thefuck.plugin.zsh index 2ab4eb6e2..8cc389349 100644 --- a/plugins/thefuck/thefuck.plugin.zsh +++ b/plugins/thefuck/thefuck.plugin.zsh @@ -5,8 +5,8 @@ if [[ -z $commands[thefuck] ]]; then fi # Register alias -[[ ! -a $ZSH_CACHE_DIR/thefuck ]] && thefuck --alias > $ZSH_CACHE_DIR/thefuck -source $ZSH_CACHE_DIR/thefuck +[[ ! -a "$ZSH_CACHE_DIR/thefuck" ]] && thefuck --alias > "$ZSH_CACHE_DIR/thefuck" +source "$ZSH_CACHE_DIR/thefuck" fuck-command-line() { local FUCK="$(THEFUCK_REQUIRE_CONFIRMATION=0 thefuck $(fc -ln -1 | tail -n 1) 2> /dev/null)" From 52d93f18d61f11db69b4591d7fc7bd5578954d30 Mon Sep 17 00:00:00 2001 From: Grigorii Sokolik Date: Thu, 19 Feb 2026 12:57:49 +0200 Subject: [PATCH 162/187] feat(virtualenvwrapper): add archlinux support (#13584) --- plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh index 1a3ae37b8..d57c5031e 100644 --- a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh +++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh @@ -4,6 +4,7 @@ function { $commands[virtualenvwrapper.sh] \ /usr/share/virtualenvwrapper/virtualenvwrapper{_lazy,}.sh \ /usr/local/bin/virtualenvwrapper{_lazy,}.sh \ + /usr/bin/virtualenvwrapper{_lazy,}.sh \ /etc/bash_completion.d/virtualenvwrapper \ /usr/share/bash-completion/completions/virtualenvwrapper \ $HOME/.local/bin/virtualenvwrapper.sh From 7f8d6b1fcaa70d3739ca2b3c990cf7fc58e8f0ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Feb 2026 10:41:05 +0100 Subject: [PATCH 163/187] chore(deps): bump github/codeql-action from 4.32.3 to 4.32.4 (#13590) 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 99a8b82ce..7768f956d 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@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 + uses: github/codeql-action/upload-sarif@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 with: sarif_file: results.sarif From 2117ee5cf794e1b826751183f4f745718c1491e8 Mon Sep 17 00:00:00 2001 From: nervo Date: Mon, 23 Feb 2026 10:43:26 +0100 Subject: [PATCH 164/187] feat(molecule): introduce molecule plugin (#12760) --- plugins/molecule/README.md | 9 +++++++++ plugins/molecule/molecule.plugin.zsh | 14 ++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 plugins/molecule/README.md create mode 100644 plugins/molecule/molecule.plugin.zsh diff --git a/plugins/molecule/README.md b/plugins/molecule/README.md new file mode 100644 index 000000000..27b21f941 --- /dev/null +++ b/plugins/molecule/README.md @@ -0,0 +1,9 @@ +# Molecule plugin + +This plugin adds completion for [Molecule](https://ansible.readthedocs.io/projects/molecule/), the project designed to aid in the development and testing of Ansible roles.. + +To use it, add `molecule` to the plugins array in your zshrc file: + +```zsh +plugins=(... molecule) +``` diff --git a/plugins/molecule/molecule.plugin.zsh b/plugins/molecule/molecule.plugin.zsh new file mode 100644 index 000000000..65ba85e64 --- /dev/null +++ b/plugins/molecule/molecule.plugin.zsh @@ -0,0 +1,14 @@ +# Completion +if (( ! $+commands[molecule] )); then + return +fi + +# If the completion file doesn't exist yet, we need to autoload it and +# bind it to `molecule`. Otherwise, compinit will have already done that. +if [[ ! -f "$ZSH_CACHE_DIR/completions/_molecule" ]]; then + typeset -g -A _comps + autoload -Uz _molecule + _comps[molecule]=_molecule +fi + +_MOLECULE_COMPLETE=zsh_source molecule >| "$ZSH_CACHE_DIR/completions/_molecule" &| From 536515d186984b40caccc5fb790ab4c0d54e2f64 Mon Sep 17 00:00:00 2001 From: Jason <61755100+jasonjacinth@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:16:40 +0530 Subject: [PATCH 165/187] docs(yum): fix typo (#13589) --- plugins/yum/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/yum/README.md b/plugins/yum/README.md index fec584911..162dcd59f 100644 --- a/plugins/yum/README.md +++ b/plugins/yum/README.md @@ -22,6 +22,6 @@ plugins=(... yum) | yi | `sudo yum install` | Install package | | ygi | `sudo yum groupinstall` | Install package group | | yr | `sudo yum remove` | Remove package | -| ygr | `sudo yum groupremove` | Remove pagage group | +| ygr | `sudo yum groupremove` | Remove package group | | yrl | `sudo yum remove --remove-leaves` | Remove package and leaves | | yc | `sudo yum clean all` | Clean yum cache | From 400591e71c894063eb08b6cae18ab66c19a1b756 Mon Sep 17 00:00:00 2001 From: Adam Spiers Date: Mon, 23 Feb 2026 10:33:24 +0000 Subject: [PATCH 166/187] fix(colored-man-pages): quote array expansion (#13591) --- plugins/colored-man-pages/colored-man-pages.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/colored-man-pages/colored-man-pages.plugin.zsh b/plugins/colored-man-pages/colored-man-pages.plugin.zsh index 57facbb5c..26a8b5927 100644 --- a/plugins/colored-man-pages/colored-man-pages.plugin.zsh +++ b/plugins/colored-man-pages/colored-man-pages.plugin.zsh @@ -43,7 +43,7 @@ function colored() { environment+=( PATH="${__colored_man_pages_dir}:$PATH" ) fi - command env $environment "$@" + command env "${environment[@]}" "$@" } # Colorize man and dman/debman (from debian-goodies) From 5c4f27b7166360bd23709f24642b247eac30a147 Mon Sep 17 00:00:00 2001 From: PascalKont Date: Wed, 25 Feb 2026 11:42:24 +0100 Subject: [PATCH 167/187] feat(molecule): introduce molecule aliases (#13594) --- plugins/molecule/README.md | 13 ++++++++++++- plugins/molecule/molecule.plugin.zsh | 8 ++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/plugins/molecule/README.md b/plugins/molecule/README.md index 27b21f941..5c4476626 100644 --- a/plugins/molecule/README.md +++ b/plugins/molecule/README.md @@ -1,9 +1,20 @@ # Molecule plugin -This plugin adds completion for [Molecule](https://ansible.readthedocs.io/projects/molecule/), the project designed to aid in the development and testing of Ansible roles.. +This plugin adds aliases and completion for [Molecule](https://ansible.readthedocs.io/projects/molecule/), the +project designed to aid in the development and testing of Ansible roles.. To use it, add `molecule` to the plugins array in your zshrc file: ```zsh plugins=(... molecule) ``` + +## Aliases + +| Alias | Command | Description | +| :---- | :---------------- | ---------------------------------------------------------------------------------- | +| mol | molecule | Molecule aids in the development and testing of Ansible roles. | +| mcr | molecule create | Use the provisioner to start the instances. | +| mcon | molecule converge | Use the provisioner to configure instances (dependency, create, prepare converge). | +| mls | molecule list | List status of instances. | +| mvf | molecule verify | Run automated tests against instances. | diff --git a/plugins/molecule/molecule.plugin.zsh b/plugins/molecule/molecule.plugin.zsh index 65ba85e64..cee25ab03 100644 --- a/plugins/molecule/molecule.plugin.zsh +++ b/plugins/molecule/molecule.plugin.zsh @@ -12,3 +12,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_molecule" ]]; then fi _MOLECULE_COMPLETE=zsh_source molecule >| "$ZSH_CACHE_DIR/completions/_molecule" &| + +# Alias +# molecule: https://docs.ansible.com/projects/molecule/ +alias mol='molecule' +alias mcr='molecule create' +alias mcon='molecule converge' +alias mls='molecule list' +alias mvf='molecule verify' From 6bb9718dd27262caf1278fa34844106b1770ba61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Mar 2026 16:41:50 +0100 Subject: [PATCH 168/187] chore(deps): bump actions/upload-artifact from 6.0.0 to 7.0.0 (#13599) 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 7768f956d..1120d9c44 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@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: SARIF file path: results.sarif From 3fd2331ae892d67aa8412f26342834836bd6b5ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Mar 2026 16:42:13 +0100 Subject: [PATCH 169/187] chore(deps): bump step-security/harden-runner from 2.14.2 to 2.15.0 (#13601) 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 027c2c755..eaaf19625 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@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 with: egress-policy: audit diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index 62a736471..e211d70a6 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@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.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@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 with: egress-policy: audit diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0fb18b42f..8a3eb82e8 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@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 with: egress-policy: audit diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index b0c018d77..5722819f0 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@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 with: egress-policy: audit - name: Authenticate as @ohmyzsh diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 1120d9c44..ca35f6ccb 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@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 with: egress-policy: audit From 25d4d753bfe235040ebaea068b21feca8570e156 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Mar 2026 16:42:33 +0100 Subject: [PATCH 170/187] chore(deps): bump certifi in /.github/workflows/dependencies (#13600) 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 5f31d8798..a2b13749c 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,4 +1,4 @@ -certifi==2026.1.4 +certifi==2026.2.25 charset-normalizer==3.4.4 idna==3.11 PyYAML==6.0.3 From bf2948322b134dfc30e7ed7e7cd267ae064795bc Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 20:08:07 +0100 Subject: [PATCH 171/187] chore(kube-ps1): update to 9b41c091 (#13522) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/kube-ps1/kube-ps1.plugin.zsh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 270cb9ec6..761989bfe 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -30,7 +30,7 @@ dependencies: plugins/kube-ps1: repo: jonmosco/kube-ps1 branch: master - version: 0b0e6daf4197ecabb1ae4f2d46fb148a8e1e73e5 + version: 9b41c091d5dd4a99e58cf58b5d98a4847937b1bb precopy: | set -e find . ! -name kube-ps1.sh ! -name LICENSE ! -name README.md -delete diff --git a/plugins/kube-ps1/kube-ps1.plugin.zsh b/plugins/kube-ps1/kube-ps1.plugin.zsh index 95e91e0d3..9dcd6da44 100644 --- a/plugins/kube-ps1/kube-ps1.plugin.zsh +++ b/plugins/kube-ps1/kube-ps1.plugin.zsh @@ -385,9 +385,9 @@ kube_ps1() { local KUBE_PS1_RESET_COLOR="${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_DEFAULT_FG}${_KUBE_PS1_CLOSE_ESC}" # If background color is set, reset color should also reset the background - if [[ -n "${KUBE_PS1_BG_COLOR}" ]]; then - KUBE_PS1_RESET_COLOR="${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_DEFAULT_FG}${_KUBE_PS1_DEFAULT_BG}${_KUBE_PS1_CLOSE_ESC}" - fi + # if [[ -n "${KUBE_PS1_BG_COLOR}" ]]; then + # KUBE_PS1_RESET_COLOR="${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_DEFAULT_FG}${_KUBE_PS1_DEFAULT_BG}${_KUBE_PS1_CLOSE_ESC}" + # fi # Background Color [[ -n "${KUBE_PS1_BG_COLOR}" ]] && KUBE_PS1+="$(_kube_ps1_color_bg "${KUBE_PS1_BG_COLOR}")" From 4f8632db32a557ba66f43986db151abb93f4e26b Mon Sep 17 00:00:00 2001 From: Nicknamess96 <113626193+Nicknamess96@users.noreply.github.com> Date: Wed, 4 Mar 2026 09:25:22 +0100 Subject: [PATCH 172/187] docs(jj): compatibility with git async prompt (#13602) Co-authored-by: Nicknames96 --- plugins/jj/README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/plugins/jj/README.md b/plugins/jj/README.md index ad16dde89..6f10b5b99 100644 --- a/plugins/jj/README.md +++ b/plugins/jj/README.md @@ -98,6 +98,25 @@ If you prefer to keep your prompt always up-to-date but still don't want to _fee your prompt asynchronous. This plugin doesn't do this automatically so you'd have to hack your theme a bit for that. +### Git async-prompt compatibility + +If you use a wrapper function that calls `git_prompt_info` (as shown above), it won't work with +the default git async-prompt mode. This is because async-prompt only registers its background worker +when it detects `$(git_prompt_info)` literally in your prompt variables. A wrapper like +`$(_my_theme_vcs_info)` won't match, so the async output stays empty. + +To fix this, add one of the following to your `.zshrc` **before** Oh My Zsh is sourced: + +```zsh +# Option 1: force async handlers to always register (recommended, keeps async behavior) +zstyle ':omz:alpha:lib:git' async-prompt force + +# Option 2: disable async-prompt entirely (simpler, but prompt may feel slower in large repos) +zstyle ':omz:alpha:lib:git' async-prompt no +``` + +See [#13555](https://github.com/ohmyzsh/ohmyzsh/issues/13555) for details. + ## See Also - [martinvonz/jj](https://github.com/martinvonz/jj) From 5292fea2ba2b76fc86f4878c3b1bfda31f86ca4b Mon Sep 17 00:00:00 2001 From: Markus Hofbauer Date: Wed, 4 Mar 2026 09:28:48 +0100 Subject: [PATCH 173/187] feat(pre-commit): add `prek` support (#13529) Closes #13432 --- plugins/pre-commit/README.md | 17 ++++++++++------- plugins/pre-commit/pre-commit.plugin.zsh | 21 +++++++++++++++------ 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/plugins/pre-commit/README.md b/plugins/pre-commit/README.md index e6d80d369..e098ea2e8 100644 --- a/plugins/pre-commit/README.md +++ b/plugins/pre-commit/README.md @@ -1,6 +1,8 @@ # Pre-commit plugin This plugin adds aliases for common commands of [pre-commit](https://pre-commit.com/). +It also supports [prek](https://github.com/prek/prek) as a drop-in replacement. +If `prek` is available, it will be used; otherwise, `pre-commit` is used as fallback. To use this plugin, add it to the plugins array in your zshrc file: @@ -10,10 +12,11 @@ plugins=(... pre-commit) ## Aliases -| Alias | Command | Description | -| ------- | -------------------------------------- | ------------------------------------------------------ | -| prc | `pre-commit` | The `pre-commit` command | -| prcau | `pre-commit autoupdate` | Update hooks automatically | -| prcr | `pre-commit run` | The `pre-commit run` command | -| prcra | `pre-commit run --all-files` | Run pre-commit hooks on all files | -| prcrf | `pre-commit run --files` | Run pre-commit hooks on a given list of files | +| Alias | Command | Description | +| ----- | ------------------------------------------------------ | --------------------------------------------- | +| prc | `prek` or `pre-commit` | The pre-commit command | +| prcau | `prek auto-update` or `pre-commit autoupdate` | Update hooks automatically | +| prcr | `prek run` or `pre-commit run` | The pre-commit run command | +| prcra | `prek run --all-files` or `pre-commit run --all-files` | Run pre-commit hooks on all files | +| prcrf | `prek run --files` or `pre-commit run --files` | Run pre-commit hooks on a given list of files | + diff --git a/plugins/pre-commit/pre-commit.plugin.zsh b/plugins/pre-commit/pre-commit.plugin.zsh index c3d0c6290..11219fed2 100644 --- a/plugins/pre-commit/pre-commit.plugin.zsh +++ b/plugins/pre-commit/pre-commit.plugin.zsh @@ -1,8 +1,17 @@ -# Aliases for pre-commit -alias prc='pre-commit' +# Aliases for pre-commit (uses prek if available, else pre-commit) +if command -v prek &> /dev/null; then + _prc_cmd='prek' + _prc_autoupdate='auto-update' +else + _prc_cmd='pre-commit' + _prc_autoupdate='autoupdate' +fi -alias prcau='pre-commit autoupdate' +alias prc="$_prc_cmd" + +alias prcau="$_prc_cmd $_prc_autoupdate" + +alias prcr="$_prc_cmd run" +alias prcra="$_prc_cmd run --all-files" +alias prcrf="$_prc_cmd run --files" -alias prcr='pre-commit run' -alias prcra='pre-commit run --all-files' -alias prcrf='pre-commit run --files' From abc23729197518958535a2405f4affef6acbb689 Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Fri, 6 Mar 2026 11:09:41 +0100 Subject: [PATCH 174/187] chore(history-substring-search): update to version 14c8d2e0 (#13521) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> Co-authored-by: Marc Cornellà --- .github/dependencies.yml | 2 +- plugins/history-substring-search/README.md | 2 +- .../history-substring-search.plugin.zsh | 7 +++++++ .../history-substring-search.zsh | 13 +++---------- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 761989bfe..0383b075f 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -19,7 +19,7 @@ dependencies: plugins/history-substring-search: repo: zsh-users/zsh-history-substring-search branch: master - version: 87ce96b1862928d84b1afe7c173316614b30e301 + version: 14c8d2e0ffaee98f2df9850b19944f32546fdea5 precopy: | set -e rm -f zsh-history-substring-search.plugin.zsh diff --git a/plugins/history-substring-search/README.md b/plugins/history-substring-search/README.md index 71a389535..49bed5255 100644 --- a/plugins/history-substring-search/README.md +++ b/plugins/history-substring-search/README.md @@ -79,7 +79,7 @@ Using [Zinit](https://github.com/zdharma-continuum/zinit): 2. Load the plugin in `~/.zshrc`: - zinit load 'zsh-users/zsh-history-substring-search + zinit load 'zsh-users/zsh-history-substring-search' zinit ice wait atload'_history_substring_search_config' 3. Run `exec zsh` to take changes into account: diff --git a/plugins/history-substring-search/history-substring-search.plugin.zsh b/plugins/history-substring-search/history-substring-search.plugin.zsh index 077105ea3..c7c4235c2 100644 --- a/plugins/history-substring-search/history-substring-search.plugin.zsh +++ b/plugins/history-substring-search/history-substring-search.plugin.zsh @@ -3,6 +3,13 @@ 0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}" 0="${${(M)0:#/*}:-$PWD/$0}" +# Respect case sensitivity settings for globbing in history search +if [[ "$CASE_SENSITIVE" = true ]]; then + : ${HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS=''} +else + : ${HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i'} +fi + source ${0:A:h}/history-substring-search.zsh diff --git a/plugins/history-substring-search/history-substring-search.zsh b/plugins/history-substring-search/history-substring-search.zsh index db516f580..2137b7950 100644 --- a/plugins/history-substring-search/history-substring-search.zsh +++ b/plugins/history-substring-search/history-substring-search.zsh @@ -45,14 +45,7 @@ : ${HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='bg=magenta,fg=white,bold'} : ${HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=white,bold'} - -# 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_GLOBBING_FLAGS='i'} : ${HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=''} : ${HISTORY_SUBSTRING_SEARCH_FUZZY=''} : ${HISTORY_SUBSTRING_SEARCH_PREFIXED=''} @@ -302,8 +295,8 @@ _history-substring-search-begin() { fi # - # Escape and join query parts with wildcard character '*' as separator - # `(j:CHAR:)` join array to string with CHAR as separator + # Escape and join query parts with wildcard character '*' as seperator + # `(j:CHAR:)` join array to string with CHAR as seperator # local search_pattern="${(j:*:)_history_substring_search_query_parts[@]//(#m)[\][()|\\*?#<>~^]/\\$MATCH}*" From 1e3abc123f690c9bdd416e8224f1beb47c96f1c7 Mon Sep 17 00:00:00 2001 From: layla <111667698+04cb@users.noreply.github.com> Date: Fri, 6 Mar 2026 19:09:18 +0800 Subject: [PATCH 175/187] chore: change freeBSD to FreeBSD (#13614) --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ab2e57144..d7f143397 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ Twitter), and join us on [Discord](https://discord.gg/ohmyzsh). - [Manual Installation](#manual-installation) - [Installation Problems](#installation-problems) - [Custom Plugins And Themes](#custom-plugins-and-themes) - - [Enable GNU ls In macOS And freeBSD Systems](#enable-gnu-ls-in-macos-and-freebsd-systems) + - [Enable GNU ls In macOS And FreeBSD Systems](#enable-gnu-ls-in-macos-and-freebsd-systems) - [Skip Aliases](#skip-aliases) - [Async git prompt](#async-git-prompt) - [Getting Updates](#getting-updates) @@ -70,7 +70,7 @@ Twitter), and join us on [Discord](https://discord.gg/ohmyzsh). | O/S | Status | | :------------- | :----: | | Android | ✅ | -| freeBSD | ✅ | +| FreeBSD | ✅ | | LCARS | 🛸 | | Linux | ✅ | | macOS | ✅ | @@ -349,7 +349,7 @@ If you have many functions that go well together, you can put them as a `XYZ.plu If you would like to override the functionality of a plugin distributed with Oh My Zsh, create a plugin of the same name in the `custom/plugins/` directory and it will be loaded instead of the one in `plugins/`. -### Enable GNU ls In macOS And freeBSD Systems +### Enable GNU ls In macOS And FreeBSD Systems From 2bc4538c364a33970ef0c5819d0f3582f57e559b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 21:20:08 +0100 Subject: [PATCH 176/187] chore(deps): bump step-security/harden-runner from 2.15.0 to 2.15.1 (#13620) Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.15.0 to 2.15.1. - [Release notes](https://github.com/step-security/harden-runner/releases) - [Commits](https://github.com/step-security/harden-runner/compare/a90bcbc6539c36a85cdfeb73f7e2f433735f215b...58077d3c7e43986b6b15fba718e8ea69e387dfcc) --- updated-dependencies: - dependency-name: step-security/harden-runner dependency-version: 2.15.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/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 eaaf19625..a88dc0b3d 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@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 + uses: step-security/harden-runner@58077d3c7e43986b6b15fba718e8ea69e387dfcc # v2.15.1 with: egress-policy: audit diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index e211d70a6..ab4c16d94 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@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 + uses: step-security/harden-runner@58077d3c7e43986b6b15fba718e8ea69e387dfcc # v2.15.1 with: egress-policy: audit @@ -47,7 +47,7 @@ jobs: - test steps: - name: Harden the runner (Audit all outbound calls) - uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 + uses: step-security/harden-runner@58077d3c7e43986b6b15fba718e8ea69e387dfcc # v2.15.1 with: egress-policy: audit diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8a3eb82e8..56af88892 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@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 + uses: step-security/harden-runner@58077d3c7e43986b6b15fba718e8ea69e387dfcc # v2.15.1 with: egress-policy: audit diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index 5722819f0..d4140fa82 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@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 + uses: step-security/harden-runner@58077d3c7e43986b6b15fba718e8ea69e387dfcc # v2.15.1 with: egress-policy: audit - name: Authenticate as @ohmyzsh diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index ca35f6ccb..390bcb28b 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@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 + uses: step-security/harden-runner@58077d3c7e43986b6b15fba718e8ea69e387dfcc # v2.15.1 with: egress-policy: audit From 44c0e856f878d4859a20e55c00dae397c5095175 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 21:20:27 +0100 Subject: [PATCH 177/187] chore(deps): bump github/codeql-action from 4.32.4 to 4.32.6 (#13622) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.32.4 to 4.32.6. - [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/89a39a4e59826350b863aa6b6252a07ad50cf83e...0d579ffd059c29b07949a3cce3983f0780820c98) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.32.6 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 390bcb28b..54c71e045 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@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 + uses: github/codeql-action/upload-sarif@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 with: sarif_file: results.sarif From d1222044bc3094498cefd478b1a7c859b7922708 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Mar 2026 21:20:56 +0100 Subject: [PATCH 178/187] chore(deps): bump charset-normalizer in /.github/workflows/dependencies (#13621) Bumps [charset-normalizer](https://github.com/jawah/charset_normalizer) from 3.4.4 to 3.4.5. - [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.4...3.4.5) --- updated-dependencies: - dependency-name: charset-normalizer dependency-version: 3.4.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/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 a2b13749c..5d8243d4b 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,5 +1,5 @@ certifi==2026.2.25 -charset-normalizer==3.4.4 +charset-normalizer==3.4.5 idna==3.11 PyYAML==6.0.3 requests==2.32.5 From 8df5c1b18b1393dc5046c729094f897bd3636a9b Mon Sep 17 00:00:00 2001 From: Alessandro Elio Cantini Date: Tue, 10 Mar 2026 10:52:12 +0100 Subject: [PATCH 179/187] fix(last-working-dir): use explicit return 0 in early-exit guards (#13623) --- plugins/last-working-dir/last-working-dir.plugin.zsh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/last-working-dir/last-working-dir.plugin.zsh b/plugins/last-working-dir/last-working-dir.plugin.zsh index b816f6a8f..951ebff10 100644 --- a/plugins/last-working-dir/last-working-dir.plugin.zsh +++ b/plugins/last-working-dir/last-working-dir.plugin.zsh @@ -23,8 +23,8 @@ lwd() { # # - This isn't the first time the plugin is loaded # - We're not in the $HOME directory (e.g. if terminal opened a different folder) -[[ -z "$ZSH_LAST_WORKING_DIRECTORY" ]] || return -[[ "$PWD" == "$HOME" ]] || return +[[ -z "$ZSH_LAST_WORKING_DIRECTORY" ]] || return 0 +[[ "$PWD" == "$HOME" ]] || return 0 if lwd 2>/dev/null; then ZSH_LAST_WORKING_DIRECTORY=1 From 7de13621b376ab5e616dbc3729b52fbfde92d0e1 Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Sun, 15 Mar 2026 09:26:19 +0100 Subject: [PATCH 180/187] chore(gradle): update to dd3a8adb (#13635) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/gradle/_gradle | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 0383b075f..4f4fef93b 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -12,7 +12,7 @@ dependencies: plugins/gradle: repo: gradle/gradle-completion branch: master - version: a9d7c822e42cc6a5b028b59e46cffcc8e7bc1134 + version: dd3a8adb47e51b1f6e4dc180cb04bd02d5fccd4a precopy: | set -e find . ! -name _gradle ! -name LICENSE -delete diff --git a/plugins/gradle/_gradle b/plugins/gradle/_gradle index bbb7353cc..588f33011 100644 --- a/plugins/gradle/_gradle +++ b/plugins/gradle/_gradle @@ -265,6 +265,7 @@ __gradle_subcommand() { '-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.unicode=[Specifies which character types are allowed in console output to generate. Values are 'auto' (default), 'disable' or 'enable'.]' \ '-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=[]' \ @@ -292,6 +293,7 @@ __gradle_subcommand() { '-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.tooling.parallel=[]' \ '-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)' \ @@ -303,6 +305,7 @@ __gradle_subcommand() { '--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)' \ + '--console-unicode[Specifies which character types are allowed in console output to generate. Values are 'auto' (default), 'disable' or 'enable'.]' \ (--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.]' \ (--no-daemon)'--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \ @@ -344,7 +347,7 @@ __gradle_subcommand() { (--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.]' \ + '--task-graph[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)' \ @@ -392,6 +395,7 @@ _gradle() { '-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.unicode=[Specifies which character types are allowed in console output to generate. Values are 'auto' (default), 'disable' or 'enable'.]:->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' \ @@ -419,6 +423,7 @@ _gradle() { '-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.tooling.parallel=[]:->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' \ @@ -430,6 +435,7 @@ _gradle() { '--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' \ + '--console-unicode[Specifies which character types are allowed in console output to generate. Values are 'auto' (default), 'disable' or 'enable'.]:->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.]' \ (--no-daemon)'--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \ @@ -474,7 +480,7 @@ _gradle() { (--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.]' \ + '--task-graph[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}'[Print version info and exit.]' \ (--quiet,-q,--info,-i,--debug,-d){-w,--warn}'[Set log level to warn.]' \ From b42f22643aab1873086baba5ffa1d68dd3ba8ee9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 07:52:03 +0100 Subject: [PATCH 181/187] chore(deps): bump actions/create-github-app-token from 2.2.1 to 3.0.0 (#13636) Bumps [actions/create-github-app-token](https://github.com/actions/create-github-app-token) from 2.2.1 to 3.0.0. - [Release notes](https://github.com/actions/create-github-app-token/releases) - [Commits](https://github.com/actions/create-github-app-token/compare/29824e69f54612133e76f7eaac726eef6c875baf...f8d387b68d61c58ab83c6c016672934102569859) --- updated-dependencies: - dependency-name: actions/create-github-app-token dependency-version: 3.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/project.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index a88dc0b3d..1eec78cc3 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@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1 + uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 # v3.0.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 d4140fa82..23d630013 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@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1 + uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 # v3.0.0 with: app-id: ${{ secrets.OHMYZSH_APP_ID }} private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} From bec3f2244a978d1e1391bc28964ba36a3cf0ad28 Mon Sep 17 00:00:00 2001 From: Rohan Santhosh Kumar <181558744+Rohan5commit@users.noreply.github.com> Date: Mon, 16 Mar 2026 19:00:44 +0800 Subject: [PATCH 182/187] docs(vscode): fix typo (#13627) Co-authored-by: rohan436 --- plugins/vscode/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/vscode/README.md b/plugins/vscode/README.md index 7c746d3d3..4661057a8 100644 --- a/plugins/vscode/README.md +++ b/plugins/vscode/README.md @@ -10,7 +10,7 @@ plugins=(... vscode) ## Requirements -This plugin requires to have a flavour of VS Code installed and it's executable available in PATH. +This plugin requires to have a flavour of VS Code installed and its executable available in PATH. You can install either: From 4daba1431696953a7737c7b64fc46cb05a736282 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C3=96zg=C3=BCr?= <226712+halilim@users.noreply.github.com> Date: Wed, 18 Mar 2026 19:26:47 +0300 Subject: [PATCH 183/187] refactor(bundler): Remove bundle_install and just use: bundle install (#13617) --- plugins/bundler/README.md | 24 ++++++++++----------- plugins/bundler/bundler.plugin.zsh | 34 +----------------------------- 2 files changed, 13 insertions(+), 45 deletions(-) diff --git a/plugins/bundler/README.md b/plugins/bundler/README.md index 7b79cbcdc..ddf547276 100644 --- a/plugins/bundler/README.md +++ b/plugins/bundler/README.md @@ -11,18 +11,18 @@ plugins=(... bundler) ## Aliases -| Alias | Command | Description | -|--------|--------------------------------------|------------------------------------------------------------------------------------------| -| `ba` | `bundle add` | Add gem to the Gemfile and run bundle install | -| `bck` | `bundle check` | Verifies if dependencies are satisfied by installed gems | -| `bcn` | `bundle clean` | Cleans up unused gems in your bundler directory | -| `be` | `bundle exec` | Execute a command in the context of the bundle | -| `bi` | `bundle install --jobs=` | Install the dependencies specified in your Gemfile (using all cores in bundler >= 1.4.0) | -| `bl` | `bundle list` | List all the gems in the bundle | -| `bo` | `bundle open` | Opens the source directory for a gem in your bundle | -| `bout` | `bundle outdated` | List installed gems with newer versions available | -| `bp` | `bundle package` | Package your needed .gem files into your application | -| `bu` | `bundle update` | Update your gems to the latest available versions | +| Alias | Command | Description | +| ------ | ----------------- | -------------------------------------------------------- | +| `ba` | `bundle add` | Add gem to the Gemfile and run bundle install | +| `bck` | `bundle check` | Verifies if dependencies are satisfied by installed gems | +| `bcn` | `bundle clean` | Cleans up unused gems in your bundler directory | +| `be` | `bundle exec` | Execute a command in the context of the bundle | +| `bi` | `bundle install` | Install the dependencies specified in your Gemfile | +| `bl` | `bundle list` | List all the gems in the bundle | +| `bo` | `bundle open` | Opens the source directory for a gem in your bundle | +| `bout` | `bundle outdated` | List installed gems with newer versions available | +| `bp` | `bundle package` | Package your needed .gem files into your application | +| `bu` | `bundle update` | Update your gems to the latest available versions | ## Gem wrapper diff --git a/plugins/bundler/bundler.plugin.zsh b/plugins/bundler/bundler.plugin.zsh index c1cbb13dd..53b36f092 100644 --- a/plugins/bundler/bundler.plugin.zsh +++ b/plugins/bundler/bundler.plugin.zsh @@ -4,45 +4,13 @@ alias ba="bundle add" alias bck="bundle check" alias bcn="bundle clean" alias be="bundle exec" -alias bi="bundle_install" +alias bi="bundle install" alias bl="bundle list" alias bo="bundle open" alias bout="bundle outdated" alias bp="bundle package" alias bu="bundle update" -## Functions - -bundle_install() { - # Bail out if bundler is not installed - if (( ! $+commands[bundle] )); then - echo "Bundler is not installed" - return 1 - fi - - # Bail out if not in a bundled project - if ! _within-bundled-project; then - echo "Can't 'bundle install' outside a bundled project" - return 1 - fi - - # Check the bundler version is at least 1.4.0 - autoload -Uz is-at-least - local bundler_version=$(bundle version | cut -d' ' -f3) - if ! is-at-least 1.4.0 "$bundler_version"; then - bundle install "$@" - return $? - fi - - # If bundler is at least 1.4.0, use all the CPU cores to bundle install - if [[ "$OSTYPE" = (darwin|freebsd)* ]]; then - local cores_num="$(sysctl -n hw.ncpu)" - else - local cores_num="$(nproc)" - fi - BUNDLE_JOBS="$cores_num" bundle install "$@" -} - ## Gem wrapper bundled_commands=( From 44394e7225cd2e2200fa2e6a0ed957fed6a4d5d0 Mon Sep 17 00:00:00 2001 From: Nikan Eidi Date: Thu, 19 Mar 2026 12:05:20 -0400 Subject: [PATCH 184/187] feat(docker): add aliases for container, network, and system prune (#13612) * feat(docker): add aliases for container, network, and system prune This PR adds missing aliases for Docker prune commands (container, network, and system) to the docker plugin, improving consistency with the existing image and volume prune aliases. * docs(docker): add prune aliases to README Added 'dcprune', 'dnprune', and 'dsprune' aliases for container, network, and system pruning. * docs(docker): add prune aliases to README --- plugins/docker/README.md | 3 +++ plugins/docker/docker.plugin.zsh | 3 +++ 2 files changed, 6 insertions(+) diff --git a/plugins/docker/README.md b/plugins/docker/README.md index 0bc24b54a..79b42bd51 100644 --- a/plugins/docker/README.md +++ b/plugins/docker/README.md @@ -51,6 +51,7 @@ If you use Podman's Docker wrapper, you need to enable legacy completion. See ab | dcin | `docker container inspect` | Display detailed information on one or more containers | | dcls | `docker container ls` | List all the running docker containers | | dclsa | `docker container ls -a` | List all running and stopped containers | +| dcprune | `docker container prune` | Remove all stopped containers | | dib | `docker image build` | Build an image from a Dockerfile (same as docker build) | | dii | `docker image inspect` | Display detailed information on one or more images | | dils | `docker image ls` | List docker images | @@ -64,6 +65,7 @@ If you use Podman's Docker wrapper, you need to enable legacy completion. See ab | dndcn | `docker network disconnect` | Disconnect a container from a network | | dni | `docker network inspect` | Return information about one or more networks | | dnls | `docker network ls` | List all networks the engine daemon knows about, including those spanning multiple hosts | +| dnprune | `docker network prune` | Remove all unused networks | | dnrm | `docker network rm` | Remove one or more networks | | dpo | `docker container port` | List port mappings or a specific mapping for the container | | dps | `docker ps` | List all the running docker containers | @@ -73,6 +75,7 @@ If you use Podman's Docker wrapper, you need to enable legacy completion. See ab | drit | `docker container run -it` | Create a new container and start it in an interactive shell | | drm | `docker container rm` | Remove the specified container(s) | | drm! | `docker container rm -f` | Force the removal of a running container (uses SIGKILL) | +| dsprune | `docker system prune` | Remove unused data | | dst | `docker container start` | Start one or more stopped containers | | drs | `docker container restart` | Restart one or more containers | | dsta | `docker stop $(docker ps -q)` | Stop all running containers | diff --git a/plugins/docker/docker.plugin.zsh b/plugins/docker/docker.plugin.zsh index 5268f6cd6..9d7cf8641 100644 --- a/plugins/docker/docker.plugin.zsh +++ b/plugins/docker/docker.plugin.zsh @@ -2,6 +2,7 @@ alias dbl='docker build' alias dcin='docker container inspect' alias dcls='docker container ls' alias dclsa='docker container ls -a' +alias dcprune='docker container prune' alias dib='docker image build' alias dii='docker image inspect' alias dils='docker image ls' @@ -15,6 +16,7 @@ alias dncn='docker network connect' alias dndcn='docker network disconnect' alias dni='docker network inspect' alias dnls='docker network ls' +alias dnprune='docker network prune' alias dnrm='docker network rm' alias dpo='docker container port' alias dps='docker ps' @@ -24,6 +26,7 @@ alias dr='docker container run' alias drit='docker container run -it' alias drm='docker container rm' alias 'drm!'='docker container rm -f' +alias dsprune='docker system prune' alias dst='docker container start' alias drs='docker container restart' alias dsta='docker stop $(docker ps -q)' From cfad9e07f696742a4d3f6ba64d6d6cd7df488a6d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 09:12:34 +0100 Subject: [PATCH 185/187] chore(deps): bump step-security/harden-runner from 2.15.1 to 2.16.0 (#13641) 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 1eec78cc3..8053b7aee 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@58077d3c7e43986b6b15fba718e8ea69e387dfcc # v2.15.1 + uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 with: egress-policy: audit diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index ab4c16d94..cead84c62 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@58077d3c7e43986b6b15fba718e8ea69e387dfcc # v2.15.1 + uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.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@58077d3c7e43986b6b15fba718e8ea69e387dfcc # v2.15.1 + uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 with: egress-policy: audit diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 56af88892..e0d9a7219 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@58077d3c7e43986b6b15fba718e8ea69e387dfcc # v2.15.1 + uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 with: egress-policy: audit diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index 23d630013..ab9d4d120 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@58077d3c7e43986b6b15fba718e8ea69e387dfcc # v2.15.1 + uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 with: egress-policy: audit - name: Authenticate as @ohmyzsh diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 54c71e045..7b77d1070 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@58077d3c7e43986b6b15fba718e8ea69e387dfcc # v2.15.1 + uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 with: egress-policy: audit From 21dbafa904181d7c921bda18ba88e3c76dcd6c35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 09:12:49 +0100 Subject: [PATCH 186/187] chore(deps): bump github/codeql-action from 4.32.6 to 4.34.1 (#13642) 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 7b77d1070..b3f070cc7 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@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 + uses: github/codeql-action/upload-sarif@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 with: sarif_file: results.sarif From df64afb062707212180324f83b3d92e573d709ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 09:13:10 +0100 Subject: [PATCH 187/187] chore(deps): bump charset-normalizer from 3.4.5 to 3.4.6 (#13643) 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 5d8243d4b..105f06ee8 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,5 +1,5 @@ certifi==2026.2.25 -charset-normalizer==3.4.5 +charset-normalizer==3.4.6 idna==3.11 PyYAML==6.0.3 requests==2.32.5