From 5c17bcd21f104d2508e0bc94d984c4d9e6a607da Mon Sep 17 00:00:00 2001 From: Bhanu Date: Wed, 8 Jan 2025 00:34:00 -0800 Subject: [PATCH 001/305] feat(web-search): add perplexity.ai (#12815) --- 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 ad3741fc9..d0b03dff2 100644 --- a/plugins/web-search/README.md +++ b/plugins/web-search/README.md @@ -52,6 +52,7 @@ Available search contexts are: | `gopkg` | `https://pkg.go.dev/search?m=package&q=` | | `chatgpt` | `https://chatgpt.com/?q=` | | `reddit` | `https://www.reddit.com/search/?q=` | +| `ppai` | `https://www.perplexity.ai/search/new?q=` | Also there are aliases for bang-searching DuckDuckGo: diff --git a/plugins/web-search/web-search.plugin.zsh b/plugins/web-search/web-search.plugin.zsh index b97e33a0b..ff77faed7 100644 --- a/plugins/web-search/web-search.plugin.zsh +++ b/plugins/web-search/web-search.plugin.zsh @@ -33,6 +33,7 @@ function web_search() { gopkg "https://pkg.go.dev/search?m=package&q=" chatgpt "https://chatgpt.com/?q=" reddit "https://www.reddit.com/search/?q=" + ppai "https://www.perplexity.ai/search/new?q=" ) # check whether the search engine is supported @@ -87,6 +88,7 @@ alias packagist='web_search packagist' alias gopkg='web_search gopkg' alias chatgpt='web_search chatgpt' alias reddit='web_search reddit' +alias ppai='web_search ppai' #add your own !bang searches here alias wiki='web_search duckduckgo \!w' From 276e540eed9c47d11539dfcd056cd9d162e1c732 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Fri, 10 Jan 2025 14:11:33 +0100 Subject: [PATCH 002/305] fix(cli): ensure `ksharrays` is unset Closes #12900 --- lib/cli.zsh | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/cli.zsh b/lib/cli.zsh index 38a84840c..c63185a3d 100644 --- a/lib/cli.zsh +++ b/lib/cli.zsh @@ -1,6 +1,7 @@ #!/usr/bin/env zsh function omz { + setopt localoptions noksharrays [[ $# -gt 0 ]] || { _omz::help return 1 From cae2e451933ffe1108bfd00fa67ff5d63741ab85 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 10 Jan 2025 14:17:49 +0100 Subject: [PATCH 003/305] fix(rust): call `rustc` through `rustup run` (#12901) --- plugins/rust/rust.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/rust/rust.plugin.zsh b/plugins/rust/rust.plugin.zsh index 858f14126..567cebc64 100644 --- a/plugins/rust/rust.plugin.zsh +++ b/plugins/rust/rust.plugin.zsh @@ -22,5 +22,5 @@ fi rustup completions zsh >| "$ZSH_CACHE_DIR/completions/_rustup" &| cat >| "$ZSH_CACHE_DIR/completions/_cargo" <<'EOF' #compdef cargo -source "$(rustc +${${(z)$(rustup default)}[1]} --print sysroot)"/share/zsh/site-functions/_cargo +source "$(rustup run ${${(z)$(rustup default)}[1]} rustc --print sysroot)"/share/zsh/site-functions/_cargo EOF From 7a3695aadf51aaa24e79175b1684d4836e31956d Mon Sep 17 00:00:00 2001 From: Michele Bologna Date: Sun, 12 Jan 2025 14:25:00 +0100 Subject: [PATCH 004/305] fix(grc): add linuxbrew path (#12903) --- plugins/grc/grc.plugin.zsh | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/grc/grc.plugin.zsh b/plugins/grc/grc.plugin.zsh index 55ffc1a1e..fc6ecc8ac 100644 --- a/plugins/grc/grc.plugin.zsh +++ b/plugins/grc/grc.plugin.zsh @@ -5,6 +5,7 @@ files=( /etc/grc.zsh # default /usr/local/etc/grc.zsh # homebrew darwin-x64 /opt/homebrew/etc/grc.zsh # homebrew darwin-arm64 + /home/linuxbrew/.linuxbrew/etc/grc.zsh # linuxbrew /usr/share/grc/grc.zsh # Gentoo Linux (app-misc/grc) ) From 04cba220f7bd7b27483a5b346e2ca717f0341895 Mon Sep 17 00:00:00 2001 From: Nico Just Date: Wed, 15 Jan 2025 12:40:52 +0100 Subject: [PATCH 005/305] feat(eza): add color-scale options (#12841) --- plugins/eza/README.md | 23 +++++++++++++++++++++++ plugins/eza/eza.plugin.zsh | 8 ++++++++ 2 files changed, 31 insertions(+) diff --git a/plugins/eza/README.md b/plugins/eza/README.md index 90e549994..bec1f85cb 100644 --- a/plugins/eza/README.md +++ b/plugins/eza/README.md @@ -65,6 +65,29 @@ If `yes`, sets the `--icons` option of `eza`, adding icons for files and folders Default: `no` +### `color-scale` + +```zsh +zstyle ':omz:plugins:eza' 'color-scale' all|age|size +``` + +Highlight levels of field(s) distinctly. Use comma(,) separated list of `all`, `age`, `size` + +Default: `none` + +### `color-scale-mode` + +```zsh +zstyle ':omz:plugins:eza' 'color-scale-mode' gradient|fixed +``` + +Choose the mode for highlighting: + +- `gradient` (default) -- gradient coloring +- `fixed` -- fixed coloring + +Default: `gradient` + ### `size-prefix` ```zsh diff --git a/plugins/eza/eza.plugin.zsh b/plugins/eza/eza.plugin.zsh index f25f1c30b..60ed1eb27 100644 --- a/plugins/eza/eza.plugin.zsh +++ b/plugins/eza/eza.plugin.zsh @@ -34,6 +34,14 @@ function _configure_eza() { if zstyle -t ':omz:plugins:eza' 'icons'; then _EZA_TAIL+=("--icons=auto") fi + zstyle -s ':omz:plugins:eza' 'color-scale' _val + if [[ $_val ]]; then + _EZA_TAIL+=("--color-scale=$_val") + fi + zstyle -s ':omz:plugins:eza' 'color-scale-mode' _val + if [[ $_val == (gradient|fixed) ]]; then + _EZA_TAIL+=("--color-scale-mode=$_val") + fi zstyle -s ':omz:plugins:eza' 'time-style' _val if [[ $_val ]]; then _EZA_TAIL+=("--time-style='$_val'") From 028d65363230b4aa54f3aaa14e03237243a2f1d8 Mon Sep 17 00:00:00 2001 From: Abhijeet Vashistha Date: Wed, 15 Jan 2025 21:33:32 +0530 Subject: [PATCH 006/305] fix(sonicradish): reset color typo (#12912) --- themes/sonicradish.zsh-theme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/sonicradish.zsh-theme b/themes/sonicradish.zsh-theme index db6170969..11d66a27e 100644 --- a/themes/sonicradish.zsh-theme +++ b/themes/sonicradish.zsh-theme @@ -29,7 +29,7 @@ ZSH_THEME_GIT_PROMPT_SUFFIX="%{$GIT_PROMPT_INFO%} :" ZSH_THEME_GIT_PROMPT_DIRTY=" %{$GIT_DIRTY_COLOR%}✘" ZSH_THEME_GIT_PROMPT_CLEAN=" %{$GIT_CLEAN_COLOR%}✔" -ZSH_THEME_GIT_PROMPT_ADDED="%{$FG[103]%}✚%{$rset_color%}" +ZSH_THEME_GIT_PROMPT_ADDED="%{$FG[103]%}✚%{$reset_color%}" ZSH_THEME_GIT_PROMPT_MODIFIED="%{$FG[103]%}✹%{$reset_color%}" ZSH_THEME_GIT_PROMPT_DELETED="%{$FG[103]%}✖%{$reset_color%}" ZSH_THEME_GIT_PROMPT_RENAMED="%{$FG[103]%}➜%{$reset_color%}" From 8c5b71b2f430283d0e9404ad1d2b470ed336aaab Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Sun, 19 Jan 2025 04:18:37 -0600 Subject: [PATCH 007/305] ci(deps): update `gitfast` to its new structure (#12922) Co-authored-by: Carlo Sala --- .github/dependencies.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 3386e55a0..2c92aee52 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -5,8 +5,10 @@ dependencies: version: tag:v2.1 postcopy: | set -e - rm -rf git-completion.plugin.zsh Makefile README.adoc t tools - test -e git-completion.zsh && mv -f git-completion.zsh _git + rm -rf git-completion.plugin.zsh Makefile t tools + mv README.adoc MANUAL.adoc + mv -f src/* . + rmdir src plugins/gradle: repo: gradle/gradle-completion branch: master From d689aa289e5dcda7c35b907af62bd08feb679b37 Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Sun, 19 Jan 2025 11:20:14 +0100 Subject: [PATCH 008/305] feat(gitfast): update to version v2.2 (#12923) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/gitfast/MANUAL.adoc | 40 +++++++++++++++++++++++++++++ plugins/gitfast/_git | 18 +++---------- plugins/gitfast/git-completion.bash | 2 ++ 4 files changed, 46 insertions(+), 16 deletions(-) create mode 100644 plugins/gitfast/MANUAL.adoc diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 2c92aee52..02995d6cd 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -2,7 +2,7 @@ dependencies: plugins/gitfast: repo: felipec/git-completion branch: master - version: tag:v2.1 + version: tag:v2.2 postcopy: | set -e rm -rf git-completion.plugin.zsh Makefile t tools diff --git a/plugins/gitfast/MANUAL.adoc b/plugins/gitfast/MANUAL.adoc new file mode 100644 index 000000000..5333f5a2c --- /dev/null +++ b/plugins/gitfast/MANUAL.adoc @@ -0,0 +1,40 @@ +This project is a friendly fork of the official Git completion +(`contrib/completion`) and prompt scripts for Bash, Zsh, and possibly other +shells. + +Most Git developers use the Bash shell, for which the completion scripts work +rather well, however, Zsh is typically neglected. I've sent many patches to fix +the issues, many have been merged, but many have been ignored, thus the need for +a canonical location of a good, working Zsh completion. + +There are advantages for Bash users too. Currently the scripts under `contrib` are tied to the +specific Git version, for example the completion scripts of version v2.40 +(https://git.kernel.org/pub/scm/git/git.git/plain/contrib/completion/git-completion.bash?h=v2.40.0[git-completion.bash]) +have issues with older versions of Git (e.g. v2.33); the ones in +this project don't. + +With `git-completion` you can be sure you are using the latest completion that +works in both shells, and any Git version. + +This is a sister project of the +https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/gitfast[Oh My Zsh +gitfast] plugin (that I also maintain), which has similar needs. + +== Installation == + +* https://github.com/felipec/git-completion/wiki/Bash[Bash instructions] +* https://github.com/felipec/git-completion/wiki/Zsh[Zsh instructions] + +== Improvements from upstream == + +This is a short list of the benefits you get: + +* Easier installation +* Tons of bug fixes +* Works with older versions of git +* Zsh: much more options +* Zsh: quoting works properly +* Zsh: automatic suffix removal + +For a full list of all the patches on top of upstream git check +https://github.com/felipec/git-completion/wiki/Patches[Patches]. diff --git a/plugins/gitfast/_git b/plugins/gitfast/_git index 31bf88c1c..1283c713e 100644 --- a/plugins/gitfast/_git +++ b/plugins/gitfast/_git @@ -2,23 +2,11 @@ # zsh completion wrapper for git # -# Copyright (c) 2012-2020 Felipe Contreras +# Copyright (c) 2012-2024 Felipe Contreras # -# The recommended way to install this script is to make a copy of it as a -# file named '_git' inside any directory in your fpath. +# The recommended way to use this script is to prepend its location to your $fpath: # -# For example, create a directory '~/.zsh/', copy this file to '~/.zsh/_git', -# and then add the following to your ~/.zshrc file: -# -# fpath=(~/.zsh $fpath) -# -# You need git's bash completion script installed. By default bash-completion's -# location will be used (e.g. pkg-config --variable=completionsdir bash-completion). -# -# If your bash completion script is somewhere else, you can specify the -# location in your ~/.zshrc: -# -# zstyle ':completion:*:*:git:*' script ~/.git-completion.bash +# fpath=($git_completion_srcdir $fpath) # zstyle -T ':completion:*:*:git:*' tag-order && \ diff --git a/plugins/gitfast/git-completion.bash b/plugins/gitfast/git-completion.bash index 9a2045f26..8a790ca69 100644 --- a/plugins/gitfast/git-completion.bash +++ b/plugins/gitfast/git-completion.bash @@ -1,6 +1,8 @@ # bash/zsh completion support for core Git. # # Copyright (C) 2006,2007 Shawn O. Pearce +# Copyright (c) 2012-2024 Felipe Contreras +# # Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/). # Distributed under the GNU General Public License, version 2.0. # From 6e9cda3d30d8e73c11e4d32044b7f4c5e06f822d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jan 2025 23:30:40 +0100 Subject: [PATCH 009/305] chore(deps): bump semver in /.github/workflows/dependencies (#12924) Bumps [semver](https://github.com/python-semver/python-semver) from 3.0.2 to 3.0.3. - [Release notes](https://github.com/python-semver/python-semver/releases) - [Changelog](https://github.com/python-semver/python-semver/blob/master/CHANGELOG.rst) - [Commits](https://github.com/python-semver/python-semver/compare/3.0.2...3.0.3) --- updated-dependencies: - dependency-name: semver 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 a3922cd03..d8149743c 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -3,5 +3,5 @@ charset-normalizer==3.4.1 idna==3.10 PyYAML==6.0.2 requests==2.32.3 -semver==3.0.2 +semver==3.0.3 urllib3==2.3.0 From cca4043238421ae8e018720326d5357027f27cf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Thu, 23 Jan 2025 19:54:50 +0100 Subject: [PATCH 010/305] feat(python): support multiple venvs via `$PYTHON_VENV_NAMES` (#12932) --- plugins/python/README.md | 45 ++++++++++++++++++++++++++------ plugins/python/python.plugin.zsh | 26 +++++++++++++++--- 2 files changed, 59 insertions(+), 12 deletions(-) diff --git a/plugins/python/README.md b/plugins/python/README.md index 8014992de..490cf88f1 100644 --- a/plugins/python/README.md +++ b/plugins/python/README.md @@ -24,16 +24,45 @@ plugins=(... python) The plugin provides three utilities to manage Python 3.3+ [venv](https://docs.python.org/3/library/venv.html) virtual environments: -- `mkv [name]`: make a new virtual environment called `name` (default: if set `$PYTHON_VENV_NAME`, else - `venv`) in the current directory. +- `mkv [name]`: make a new virtual environment called `name` in the current directory. + **Default**: `$PYTHON_VENV_NAME` if set, otherwise `venv`. -- `vrun [name]`: Activate the virtual environment called `name` (default: if set `$PYTHON_VENV_NAME`, else - `venv`) in the current directory. +- `vrun [name]`: activate the virtual environment called `name` in the current directory. + **Default**: the first existing in `$PYTHON_VENV_NAMES`. -- `auto_vrun`: Automatically activate the venv virtual environment when entering a directory containing +- `auto_vrun`: automatically activate the venv virtual environment when entering a directory containing `/bin/activate`, and automatically deactivate it when navigating out of it (keeps venv activated in subdirectories). - - To enable the feature, set `export PYTHON_AUTO_VRUN=true` before sourcing oh-my-zsh. - - Plugin activates first virtual environment in lexicographic order whose name begins with ``. + - To enable the feature, set `PYTHON_AUTO_VRUN=true` before sourcing oh-my-zsh. + - The plugin activates the first existing virtual environment, in order, appearing in `$PYTON_VENV_NAMES`. The default virtual environment name is `venv`. To use a different name, set - `export PYTHON_VENV_NAME=`. For example: `export PYTHON_VENV_NAME=".venv"` + `PYTHON_VENV_NAME=`. For example: `PYTHON_VENV_NAME=".venv"` + +### Settings + +You can set these variables in your `.zshrc` file, before Oh My Zsh is sourced. +For example: + +```sh +PYTHON_VENV_NAME=".venv" +PYTHON_VENV_NAMES=($PYTHON_VENV_NAME venv) +... +plugins=(... python) +source "$ZSH/oh-my-zsh.sh" +``` + + +## `$PYTHON_VENV_NAME` + +**Default**: `venv`. + +Preferred name for virtual environments, for example when creating via `mkv`. + +## `$PYTHON_VENV_NAMES` + +**Default**: `$PYTHON_VENV_NAME venv .venv`. + +Array of virtual environment names to be checked, in order, by `vrun` and `auto_vrun`. +This means these functions will load the first existing virtual environment in this list. +Duplicate names are ignored. + diff --git a/plugins/python/python.plugin.zsh b/plugins/python/python.plugin.zsh index 63733e1de..2b139ddf0 100644 --- a/plugins/python/python.plugin.zsh +++ b/plugins/python/python.plugin.zsh @@ -47,12 +47,29 @@ alias pygrep='grep -nr --include="*.py"' alias pyserver="python3 -m http.server" -## venv utilities +## venv settings : ${PYTHON_VENV_NAME:=venv} +# Array of possible virtual environment names to look for, in order +# -U for removing duplicates +typeset -gaU PYTHON_VENV_NAMES +[[ -n "$PYTHON_VENV_NAMES" ]] || PYTHON_VENV_NAMES=($PYTHON_VENV_NAME venv .venv) + # Activate a the python virtual environment specified. -# If none specified, use $PYTHON_VENV_NAME, else 'venv'. +# If none specified, use the first existing in $PYTHON_VENV_NAMES. function vrun() { + if [[ -z "$1" ]]; then + local name + for name in $PYTHON_VENV_NAMES; do + local venvpath="${name:P}" + if [[ -d "$venvpath" ]]; then + vrun "$name" + return $? + fi + done + echo >&2 "Error: no virtual environment found in current directory" + fi + local name="${1:-$PYTHON_VENV_NAME}" local venvpath="${name:P}" @@ -91,10 +108,11 @@ if [[ "$PYTHON_AUTO_VRUN" == "true" ]]; then fi if [[ $PWD != ${VIRTUAL_ENV:h} ]]; then - for _file in "${PYTHON_VENV_NAME}"*/bin/activate(N.); do + local file + for file in "${^PYTHON_VENV_NAMES[@]}"/bin/activate(N.); do # make sure we're not in a venv already (( $+functions[deactivate] )) && deactivate > /dev/null 2>&1 - source $_file > /dev/null 2>&1 + source $file > /dev/null 2>&1 break done fi From 501f29f90c67bfb47506715c894e710c46ae3e0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Thu, 23 Jan 2025 20:10:10 +0100 Subject: [PATCH 011/305] fix(tailscale): fix completion binding for alias to `Tailscale` (#12928) Fixes #12928 --- plugins/tailscale/tailscale.plugin.zsh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plugins/tailscale/tailscale.plugin.zsh b/plugins/tailscale/tailscale.plugin.zsh index e0e011196..8b4e1e34d 100644 --- a/plugins/tailscale/tailscale.plugin.zsh +++ b/plugins/tailscale/tailscale.plugin.zsh @@ -15,4 +15,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_tailscale" ]]; then fi fi +# If using the alias, let's make sure that the aliased executable is also bound +# in case the alias points to "Tailscale" instead of "tailscale". +# See https://github.com/ohmyzsh/ohmyzsh/discussions/12928 +if (( $+aliases[tailscale] )); then + _comps[${aliases[tailscale]:t}]=_tailscale +fi + tailscale completion zsh >| "$ZSH_CACHE_DIR/completions/_tailscale" &| From 9a0e22c184f4348b4bda4cd3de306d65eb541341 Mon Sep 17 00:00:00 2001 From: jamesrtnz Date: Fri, 24 Jan 2025 08:24:43 +1300 Subject: [PATCH 012/305] feat(perl): add `perlbrew` auto activation (#12814) Co-authored-by: Carlo Sala --- plugins/perl/README.md | 40 +++++++++++++++++++++--------------- plugins/perl/perl.plugin.zsh | 9 ++++++++ 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/plugins/perl/README.md b/plugins/perl/README.md index dd9b7dc75..a387455c1 100644 --- a/plugins/perl/README.md +++ b/plugins/perl/README.md @@ -8,30 +8,36 @@ To use it, add `perl` to the plugins array in your zshrc file: plugins=(... perl) ``` +## Perlbrew activation + +If the plugin detects that `perlbrew` hasn't been activated, yet there is an installation of it in +`$PERLBREW_ROOT`, it'll initialize by default. To avoid this behaviour, set `ZSH_PERLBREW_ACTIVATE=false` +before `source oh-my-zsh.sh` in your zshrc. + ## Aliases -| Aliases | Command | Description | -| :------------ | :----------------- | :------------------------------------- | -| pbi | `perlbrew install` | Install specific perl version | -| pbl | `perlbrew list` | List all perl version installed | -| pbo | `perlbrew off` | Go back to the system perl | -| pbs | `perlbrew switch` | Turn it back on | -| pbu | `perlbrew use` | Use specific version of perl | -| pd | `perldoc` | Show the perl documentation | -| ple | `perl -wlne` | Use perl like awk/sed | -| latest-perl | `curl ...` | Show the latest stable release of Perl | +| Aliases | Command | Description | +| :---------- | :----------------- | :------------------------------------- | +| pbi | `perlbrew install` | Install specific perl version | +| pbl | `perlbrew list` | List all perl version installed | +| pbo | `perlbrew off` | Go back to the system perl | +| pbs | `perlbrew switch` | Turn it back on | +| pbu | `perlbrew use` | Use specific version of perl | +| pd | `perldoc` | Show the perl documentation | +| ple | `perl -wlne` | Use perl like awk/sed | +| latest-perl | `curl ...` | Show the latest stable release of Perl | ## Functions -* `newpl`: creates a basic Perl script file and opens it with $EDITOR. +- `newpl`: creates a basic Perl script file and opens it with $EDITOR. -* `pgs`: Perl Global Substitution: `pgs ` - Looks for `` and replaces it with `` in ``. +- `pgs`: Perl Global Substitution: `pgs ` Looks for + `` and replaces it with `` in ``. -* `prep`: Perl grep, because 'grep -P' is terrible: `prep []` - Lets you work with pipes or files (if no `` provided, use stdin). +- `prep`: Perl grep, because 'grep -P' is terrible: `prep []` Lets you work with pipes or + files (if no `` provided, use stdin). ## Requirements -In order to make this work, you will need to have perl installed. -More info on the usage and install: https://www.perl.org/get.html +In order to make this work, you will need to have perl installed. More info on the usage and install: +https://www.perl.org/get.html diff --git a/plugins/perl/perl.plugin.zsh b/plugins/perl/perl.plugin.zsh index 678e88d97..137fa252a 100644 --- a/plugins/perl/perl.plugin.zsh +++ b/plugins/perl/perl.plugin.zsh @@ -54,3 +54,12 @@ pgs() { # [find] [replace] [filename] prep() { # [pattern] [filename unless STDOUT] perl -nle 'print if /'"$1"'/;' $2 } + +# If the 'perlbrew' function isn't defined, perlbrew isn't setup. +if [[ $ZSH_PERLBREW_ACTIVATE != false ]] && (( ! $+functions[perlbrew] )); then + local _perlbrew="${PERLBREW_ROOT:-${HOME}/perl5/perlbrew}" + if [[ -f "${_perlbrew}/etc/bashrc" ]]; then + source "${_perlbrew}/etc/bashrc" + fi + unset _perlbrew +fi From bd0a5b2598f5614aa60b056783cd3acb803c664a Mon Sep 17 00:00:00 2001 From: Keith Bennett Date: Fri, 24 Jan 2025 02:28:44 +0700 Subject: [PATCH 013/305] docs(chucknorris): add useful note (#12822) --- plugins/chucknorris/README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plugins/chucknorris/README.md b/plugins/chucknorris/README.md index 0562b3b59..655e7cf11 100644 --- a/plugins/chucknorris/README.md +++ b/plugins/chucknorris/README.md @@ -36,3 +36,10 @@ Last login: Fri Jan 30 23:12:26 on ttys001 - `cowsay` if using `chuck_cow` Available via homebrew, apt, ... + +> [!NOTE] +> In addition to installing `fortune`, it may be necessary to run: +> +> `strfile $ZSH/plugins/chucknorris/fortunes/chucknorris\n` +> +> (include the "\n" literally) to write the fortune data to the proper directory. From 1bae19973671dde75506c541ba576de4dae8cb29 Mon Sep 17 00:00:00 2001 From: Thomas Boyer Date: Thu, 23 Jan 2025 20:37:00 +0100 Subject: [PATCH 014/305] fix(direnv): warn user if command not found (#12840) Co-authored-by: Carlo Sala --- plugins/direnv/direnv.plugin.zsh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/direnv/direnv.plugin.zsh b/plugins/direnv/direnv.plugin.zsh index 0a33194dd..c026dbe76 100644 --- a/plugins/direnv/direnv.plugin.zsh +++ b/plugins/direnv/direnv.plugin.zsh @@ -1,5 +1,8 @@ -# Don't continue if direnv is not found -command -v direnv &>/dev/null || return +# If direnv is not found, don't continue and print a warning +if (( ! $+commands[direnv] )); then + echo "Warning: direnv not found. Please install direnv and ensure it's in your PATH before using this plugin." + return +fi _direnv_hook() { trap -- '' SIGINT; From 4e29c670a48a17276d04b3e47262b10f28dfcc0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Thu, 23 Jan 2025 20:38:12 +0100 Subject: [PATCH 015/305] fix(changelog): show if there are no changes (#12934) --- tools/changelog.sh | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tools/changelog.sh b/tools/changelog.sh index c4b26079e..ff409115f 100755 --- a/tools/changelog.sh +++ b/tools/changelog.sh @@ -400,6 +400,9 @@ function display-release { function display:breaking { (( $#breaking != 0 )) || return 0 + # If we reach here we have shown commits, set flag + shown_commits=1 + case "$output" in text) printf '\e[31m'; fmt:header "BREAKING CHANGES" 3 ;; raw) fmt:header "BREAKING CHANGES" 3 ;; @@ -427,6 +430,9 @@ function display-release { # If no commits found of type $type, go to next type (( $#hashes != 0 )) || return 0 + # If we reach here we have shown commits, set flag + shown_commits=1 + fmt:header "${TYPES[$type]}" 3 for hash in $hashes; do echo " - $(fmt:hash) $(fmt:scope)$(fmt:subject)" @@ -444,6 +450,9 @@ function display-release { # If no commits found under "other" types, don't display anything (( $#changes != 0 )) || return 0 + # If we reach here we have shown commits, set flag + shown_commits=1 + fmt:header "Other changes" 3 for hash type in ${(kv)changes}; do case "$type" in @@ -498,7 +507,7 @@ function main { # Commit classification arrays local -A types subjects scopes breaking reverts - local truncate=0 read_commits=0 + local truncate=0 read_commits=0 shown_commits=0 local version tag local hash refs subject body @@ -569,6 +578,10 @@ function main { echo " ...more commits omitted" echo fi + + if (( ! shown_commits )); then + echo "No changes to mention." + fi } # Use raw output if stdout is not a tty From 69410e702014b6f6f09f659a5747c5a6ace7a09a Mon Sep 17 00:00:00 2001 From: fossdd Date: Thu, 23 Jan 2025 20:43:27 +0100 Subject: [PATCH 016/305] feat(foot): add foot plugin (#12849) --- plugins/foot/README.md | 35 +++++++++++++++++++++++++++++++++++ plugins/foot/foot.plugin.zsh | 10 ++++++++++ 2 files changed, 45 insertions(+) create mode 100644 plugins/foot/README.md create mode 100644 plugins/foot/foot.plugin.zsh diff --git a/plugins/foot/README.md b/plugins/foot/README.md new file mode 100644 index 000000000..67777d9fa --- /dev/null +++ b/plugins/foot/README.md @@ -0,0 +1,35 @@ +# foot + +This plugin adds shell integration for [foot, a fast, lightweight and +minimalistic Wayland terminal emulator](https://codeberg.org/dnkl/foot). + +To use, add `foot` to the list of plugins in your `.zshrc` file: + +```zsh +plugins=(... foot) +``` + +## Spawning new terminal instances in the current working directory + +When spawning a new terminal instance (with `ctrl+shift+n` by default), the new +instance will start in the current working directory. + +## Jumping between prompts + +Foot can move the current viewport to focus prompts of already executed +commands (bound to ctrl+shift+z/x by default). + +## Piping last command's output + +The key binding `pipe-command-output` can pipe the last command's output to an +application of your choice (similar to the other `pipe-*` key bindings): + +``` +[key-bindings] +pipe-command-output=[sh -c "f=$(mktemp); cat - > $f; footclient emacsclient -nw $f; rm $f"] Control+Shift+g +``` + +When pressing ctrl+shift+g, the last command's output is written to a +temporary file, then an emacsclient is started in a new footclient instance. +The temporary file is removed after the footclient instance has closed. + diff --git a/plugins/foot/foot.plugin.zsh b/plugins/foot/foot.plugin.zsh new file mode 100644 index 000000000..c1d077e26 --- /dev/null +++ b/plugins/foot/foot.plugin.zsh @@ -0,0 +1,10 @@ +function precmd { + print -Pn "\e]133;A\e\\" + if ! builtin zle; then + print -n "\e]133;D\e\\" + fi +} + +function preexec { + print -n "\e]133;C\e\\" +} From d2e79501b252ffafa2a25b541f67332c3e186807 Mon Sep 17 00:00:00 2001 From: shun095 <8069181+shun095@users.noreply.github.com> Date: Fri, 24 Jan 2025 05:04:45 +0900 Subject: [PATCH 017/305] fix(timer): minutes calculation logic (#12857) --- plugins/timer/timer.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/timer/timer.plugin.zsh b/plugins/timer/timer.plugin.zsh index d21d59989..6baf1f681 100644 --- a/plugins/timer/timer.plugin.zsh +++ b/plugins/timer/timer.plugin.zsh @@ -6,7 +6,7 @@ __timer_current_time() { } __timer_format_duration() { - local mins=$(printf '%.0f' $(($1 / 60))) + local mins=$(printf '%.0f' $(($(IFS='.' read int dec <<< "$1"; echo $int) / 60))) local secs=$(printf "%.${TIMER_PRECISION:-1}f" $(($1 - 60 * mins))) local duration_str=$(echo "${mins}m${secs}s") local format="${TIMER_FORMAT:-/%d}" From 85c49414926ad86f76d7bad3635f948bb5f883cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Thu, 23 Jan 2025 21:06:00 +0100 Subject: [PATCH 018/305] fix(cli)!: remove harmful `--unattended` flag for `omz update` (#12935) Co-authored-by: Carlo Sala --- README.md | 11 +++++++++++ lib/cli.zsh | 15 +++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 58828cf7f..f7455228a 100644 --- a/README.md +++ b/README.md @@ -487,6 +487,17 @@ wait a week?) you just need to run: omz update ``` +> [!NOTE] +> If you want to automate this process in a script, you should call directly the `upgrade` script, like this: +> +> ```sh +> $ZSH/tools/upgrade.sh +> ``` +> +> See more options in the [FAQ: How do I update Oh My Zsh?](https://github.com/ohmyzsh/ohmyzsh/wiki/FAQ#how-do-i-update-oh-my-zsh). +> +> **USE OF `omz update --unattended` HAS BEEN REMOVED, AS IT HAS SIDE EFFECTS**. + Magic! 🎉 ## Uninstalling Oh My Zsh diff --git a/lib/cli.zsh b/lib/cli.zsh index c63185a3d..aed86e758 100644 --- a/lib/cli.zsh +++ b/lib/cli.zsh @@ -823,6 +823,13 @@ function _omz::update { return 1 } + # Check if --unattended was passed + [[ "$1" != --unattended ]] || { + _omz::log error "the \`\e[2m--unattended\e[0m\` flag is no longer supported, use the \`\e[2mupgrade.sh\e[0m\` script instead." + _omz::log error "for more information see https://github.com/ohmyzsh/ohmyzsh/wiki/FAQ#how-do-i-update-oh-my-zsh" + return 1 + } + local last_commit=$(builtin cd -q "$ZSH"; git rev-parse HEAD 2>/dev/null) [[ $? -eq 0 ]] || { _omz::log error "\`$ZSH\` is not a git directory. Aborting..." @@ -831,11 +838,7 @@ function _omz::update { # Run update script zstyle -s ':omz:update' verbose verbose_mode || verbose_mode=default - if [[ "$1" != --unattended ]]; then - ZSH="$ZSH" command zsh -f "$ZSH/tools/upgrade.sh" -i -v $verbose_mode || return $? - else - ZSH="$ZSH" command zsh -f "$ZSH/tools/upgrade.sh" -v $verbose_mode || return $? - fi + ZSH="$ZSH" command zsh -f "$ZSH/tools/upgrade.sh" -i -v $verbose_mode || return $? # Update last updated file zmodload zsh/datetime @@ -844,7 +847,7 @@ function _omz::update { command rm -rf "$ZSH/log/update.lock" # Restart the zsh session if there were changes - if [[ "$1" != --unattended && "$(builtin cd -q "$ZSH"; git rev-parse HEAD)" != "$last_commit" ]]; then + if [[ "$(builtin cd -q "$ZSH"; git rev-parse HEAD)" != "$last_commit" ]]; then # Old zsh versions don't have ZSH_ARGZERO local zsh="${ZSH_ARGZERO:-${functrace[-1]%:*}}" # Check whether to run a login shell From 5fd2059e5eda17ee07501a21d47189d4b96d6ff3 Mon Sep 17 00:00:00 2001 From: Ken van der Eerden <15888558+Ken-vdE@users.noreply.github.com> Date: Thu, 23 Jan 2025 21:08:55 +0100 Subject: [PATCH 019/305] feat(jira): allow branch name customization (#12850) Co-authored-by: Carlo Sala --- plugins/jira/README.md | 16 ++++++++++++++ plugins/jira/jira.plugin.zsh | 43 +++++++++++++++++++++--------------- 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/plugins/jira/README.md b/plugins/jira/README.md index 7cfb81b19..19266e7f0 100644 --- a/plugins/jira/README.md +++ b/plugins/jira/README.md @@ -43,6 +43,22 @@ starting with "_": "MP-1234_fix_dashboard". In both these cases, the issue opene This is also checks if the prefix is in the name, and adds it if not, so: "MP-1234" opens the issue "MP-1234", "mp-1234" opens the issue "mp-1234", and "1234" opens the issue "MP-1234". +If your branch naming convention deviates, you can overwrite the jira_branch function to determine and echo the Jira issue key yourself. +Define a function `jira_branch` after sourcing `oh-my-zsh.sh` in your `.zshrc`. +Example: +```zsh +# Determine branch name from naming convention 'type/KEY-123/description'. +function jira_branch() { + # Get name of the branch + issue_arg=$(git rev-parse --abbrev-ref HEAD) + # Strip prefixes like feature/ or bugfix/ + issue_arg=${issue_arg#*/} + # Strip suffixes like /some-branch-description + issue_arg=${issue_arg%%/*} + # Return the value + echo $issue_arg +} +``` #### Debugging usage diff --git a/plugins/jira/jira.plugin.zsh b/plugins/jira/jira.plugin.zsh index 9bcf4cc7b..22e0c82c7 100644 --- a/plugins/jira/jira.plugin.zsh +++ b/plugins/jira/jira.plugin.zsh @@ -17,6 +17,30 @@ jira branch Opens an existing issue matching the current bra EOF } +# If your branch naming convention deviates, you can partially override this plugin function +# to determine the jira issue key based on your formatting. +# See https://github.com/ohmyzsh/ohmyzsh/wiki/Customization#partially-overriding-an-existing-plugin +function jira_branch() { + # Get name of the branch + issue_arg=$(git rev-parse --abbrev-ref HEAD) + # Strip prefixes like feature/ or bugfix/ + issue_arg=${issue_arg##*/} + # Strip suffixes starting with _ + issue_arg=(${(s:_:)issue_arg}) + # If there is only one part, it means that there is a different delimiter. Try with - + if [[ ${#issue_arg[@]} = 1 && ${issue_arg} == *-* ]]; then + issue_arg=(${(s:-:)issue_arg}) + issue_arg="${issue_arg[1]}-${issue_arg[2]}" + else + issue_arg=${issue_arg[1]} + fi + if [[ "${issue_arg:l}" = ${jira_prefix:l}* ]]; then + echo "${issue_arg}" + else + echo "${jira_prefix}${issue_arg}" + fi +} + function jira() { emulate -L zsh local action jira_url jira_prefix @@ -91,24 +115,7 @@ function jira() { # but `branch` is a special case that will parse the current git branch local issue_arg issue if [[ "$action" == "branch" ]]; then - # Get name of the branch - issue_arg=$(git rev-parse --abbrev-ref HEAD) - # Strip prefixes like feature/ or bugfix/ - issue_arg=${issue_arg##*/} - # Strip suffixes starting with _ - issue_arg=(${(s:_:)issue_arg}) - # If there is only one part, it means that there is a different delimiter. Try with - - if [[ ${#issue_arg[@]} = 1 && ${issue_arg} == *-* ]]; then - issue_arg=(${(s:-:)issue_arg}) - issue_arg="${issue_arg[1]}-${issue_arg[2]}" - else - issue_arg=${issue_arg[1]} - fi - if [[ "${issue_arg:l}" = ${jira_prefix:l}* ]]; then - issue="${issue_arg}" - else - issue="${jira_prefix}${issue_arg}" - fi + issue=$(jira_branch) else issue_arg=${(U)action} issue="${jira_prefix}${issue_arg}" From 3bd48b12c8047a12986c79b825ea2451fe5f0ddb Mon Sep 17 00:00:00 2001 From: Eduardo Roberto Date: Fri, 24 Jan 2025 20:39:17 +0000 Subject: [PATCH 020/305] chore: ignore `.zwc` files (#12936) --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 10bd4bebc..a53da3b3e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,6 @@ log/ # editor configs .vscode .idea + +# zcompile cached files +*.zwc From cc9259d6ad6b1d3cab488cc02f705be1c840c785 Mon Sep 17 00:00:00 2001 From: Marcus Voltolim <9442331+marcusvoltolim@users.noreply.github.com> Date: Fri, 24 Jan 2025 17:40:58 -0300 Subject: [PATCH 021/305] docs(git-auto-fetch): fix typo (#12937) --- plugins/git-auto-fetch/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/git-auto-fetch/README.md b/plugins/git-auto-fetch/README.md index e96ab42a3..0d7431bba 100644 --- a/plugins/git-auto-fetch/README.md +++ b/plugins/git-auto-fetch/README.md @@ -18,7 +18,7 @@ You can change the fetch interval in your .zshrc: GIT_AUTO_FETCH_INTERVAL=1200 # in seconds ``` -A log of `git fetch --all` will be saved in `.git/FETCH_LOG`. +A log of `git-fetch-all` will be saved in `.git/FETCH_LOG`. ## Toggle auto-fetch per folder From 9ffc14c3e1de2054fa113e2c7d42cbdac542769b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 26 Jan 2025 14:11:35 +0100 Subject: [PATCH 022/305] chore(deps): bump semver from 3.0.3 to 3.0.4 in /.github/workflows/dependencies (#12938) 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 d8149743c..0471ccc4a 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -3,5 +3,5 @@ charset-normalizer==3.4.1 idna==3.10 PyYAML==6.0.2 requests==2.32.3 -semver==3.0.3 +semver==3.0.4 urllib3==2.3.0 From ce9a4a0196a372b153a592ecd61b728cd88bb767 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Sun, 26 Jan 2025 14:21:14 +0100 Subject: [PATCH 023/305] feat(dnf): add `dnf5` completion Closes #12939 --- plugins/dnf/_dnf5 | 570 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 570 insertions(+) create mode 100644 plugins/dnf/_dnf5 diff --git a/plugins/dnf/_dnf5 b/plugins/dnf/_dnf5 new file mode 100644 index 000000000..e194dd5a7 --- /dev/null +++ b/plugins/dnf/_dnf5 @@ -0,0 +1,570 @@ +#compdef dnf5 +# based on dnf-5.2.6.2 + +# utility functions + +_dnf5_helper() { + _call_program specs $service "${(q-)@}" "${(q-)PREFIX}\*" \ + -qC --assumeno --nogpgcheck 2>/dev/null command' '*:: :->cmd_args' && ret=0 + + case $state in + command) _dnf5_commands && ret=0 ;; + cmd_args) _dnf5_subcmds_opts && ret=0 ;; + esac + return ret +} + +_dnf5 "$@" From 33d4db7feeacaf82c8e277555010cd6f5d9f1c7c Mon Sep 17 00:00:00 2001 From: Guspan Tanadi <36249910+guspan-tanadi@users.noreply.github.com> Date: Wed, 29 Jan 2025 20:59:04 +0700 Subject: [PATCH 024/305] docs(ember-cli): fix typo (#12945) --- plugins/ember-cli/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/ember-cli/README.md b/plugins/ember-cli/README.md index 419704ade..1532eea9c 100644 --- a/plugins/ember-cli/README.md +++ b/plugins/ember-cli/README.md @@ -29,5 +29,5 @@ plugins=(... ember-cli) - [BilalBudhani](https://github.com/BilalBudhani) - [eubenesa](https://github.com/eubenesa) -- [scottkidder](https://github.com/scottkidder] +- [scottkidder](https://github.com/scottkidder) - [t-sauer](https://www.github.com/t-sauer) From 1c34b0e67d4f1dff36a079f31d7dafe8bcf92f6e Mon Sep 17 00:00:00 2001 From: soemiran Date: Thu, 30 Jan 2025 16:14:04 +0100 Subject: [PATCH 025/305] feat(terraform): support `TF_DATA_DIR` in `tf_prompt_info` (#12949) --- plugins/terraform/terraform.plugin.zsh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/terraform/terraform.plugin.zsh b/plugins/terraform/terraform.plugin.zsh index 1c1d1b37e..046fabb03 100644 --- a/plugins/terraform/terraform.plugin.zsh +++ b/plugins/terraform/terraform.plugin.zsh @@ -2,9 +2,9 @@ function tf_prompt_info() { # dont show 'default' workspace in home dir [[ "$PWD" != ~ ]] || return # check if in terraform dir and file exists - [[ -d .terraform && -r .terraform/environment ]] || return + [[ -d "${TF_DATA_DIR:-.terraform}" && -r "${TF_DATA_DIR:-.terraform}/environment" ]] || return - local workspace="$(< .terraform/environment)" + local workspace="$(< "${TF_DATA_DIR:-.terraform}/environment")" echo "${ZSH_THEME_TF_PROMPT_PREFIX-[}${workspace:gs/%/%%}${ZSH_THEME_TF_PROMPT_SUFFIX-]}" } From 2343ad517d3439877e85c03846a38e4b3bf6d984 Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Sun, 2 Feb 2025 07:50:33 +0100 Subject: [PATCH 026/305] feat(wd): update to v0.9.3 (#12954) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/wd/wd.sh | 53 ++++++++++++++++++++++++++++++++++------ 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 02995d6cd..46e7727b8 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -30,7 +30,7 @@ dependencies: plugins/wd: repo: mfaerevaag/wd branch: master - version: tag:v0.9.2 + version: tag:v0.9.3 precopy: | set -e rm -r test diff --git a/plugins/wd/wd.sh b/plugins/wd/wd.sh index 962ad9afa..f8b27828f 100755 --- a/plugins/wd/wd.sh +++ b/plugins/wd/wd.sh @@ -8,7 +8,7 @@ # @github.com/mfaerevaag/wd # version -readonly WD_VERSION=0.9.2 +readonly WD_VERSION=0.9.3 # colors readonly WD_BLUE="\033[96m" @@ -256,20 +256,47 @@ wd_remove() } wd_browse() { + # Check if fzf is installed if ! command -v fzf >/dev/null; then - echo "This functionality requires fzf. Please install fzf first." + wd_print_msg "$WD_RED" "This functionality requires fzf. Please install fzf first." return 1 fi + + # Ensure wd_config_file is properly set + if [[ -z $wd_config_file ]]; then + wd_config_file="${WD_CONFIG:-$HOME/.warprc}" + fi + + # Check if config file exists + if [[ ! -f $wd_config_file ]]; then + wd_print_msg "$WD_RED" "Config file $wd_config_file does not exist. Please create it first." + return 1 + fi + + # Read entries from the config file local entries=("${(@f)$(sed "s:${HOME}:~:g" "$wd_config_file" | awk -F ':' '{print $1 " -> " $2}')}") + if [[ -z $entries ]]; then + wd_print_msg "$WD_YELLOW" "You don't have any warp points to browse" + return 1 + fi + + # Temp file for remove operations local script_path="${${(%):-%x}:h}" local wd_remove_output=$(mktemp "${TMPDIR:-/tmp}/wd.XXXXXXXXXX") + + # Create fzf bindings entries=("All warp points:" "Press enter to select. Press delete to remove" "${entries[@]}") - local fzf_bind="delete:execute(echo {} | awk -F ' -> ' '{print \$1}' | xargs -I {} "$script_path/wd.sh" rm {} > "$wd_remove_output")+abort" + local fzf_bind="delete:execute(echo {} | awk -F ' -> ' '{print \$1}' | xargs -I {} \"$script_path/wd.sh\" rm {} > \"$wd_remove_output\")+abort" + + # Run fzf local selected_entry=$(printf '%s\n' "${entries[@]}" | fzf --height 100% --reverse --header-lines=2 --bind="$fzf_bind") + + # Handle selection if [[ -e $wd_remove_output ]]; then cat "$wd_remove_output" - rm "$wd_remove_output" + rm -f "$wd_remove_output" fi + if [[ -n $selected_entry ]]; then local selected_point="${selected_entry%% ->*}" selected_point=$(echo "$selected_point" | xargs) @@ -278,14 +305,26 @@ wd_browse() { } wd_browse_widget() { - if [[ -e $wd_config_file ]]; then + # Ensure wd_config_file is properly set + if [[ -z $wd_config_file ]]; then + wd_config_file="${WD_CONFIG:-$HOME/.warprc}" + fi + + # Check if config file exists + if [[ ! -f $wd_config_file ]]; then + wd_print_msg "$WD_RED" "Config file $wd_config_file does not exist. Please create it first." + return 1 + fi + + # Call wd_browse to handle the selection wd_browse + + # Restore the zsh buffer and cursor after running wd_browse saved_buffer=$BUFFER saved_cursor=$CURSOR BUFFER= zle redisplay zle accept-line - fi } wd_restore_buffer() { @@ -578,7 +617,7 @@ unset wd_print_msg unset wd_yesorno unset wd_print_usage unset wd_alt_config -unset wd_config_file +#unset wd_config_file do not unset this - breaks keybind unset wd_quiet_mode unset wd_print_version unset wd_force_mode From 2b547d113b7e55a556b695c9372f1beb721efd67 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 2 Feb 2025 13:38:22 +0100 Subject: [PATCH 027/305] chore(deps): bump certifi in /.github/workflows/dependencies (#12955) Bumps [certifi](https://github.com/certifi/python-certifi) from 2024.12.14 to 2025.1.31. - [Commits](https://github.com/certifi/python-certifi/compare/2024.12.14...2025.01.31) --- updated-dependencies: - dependency-name: certifi 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 0471ccc4a..910db7bac 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,4 +1,4 @@ -certifi==2024.12.14 +certifi==2025.1.31 charset-normalizer==3.4.1 idna==3.10 PyYAML==6.0.2 From db32c6ccce91e0b36873c8bfccd1e40f452a2060 Mon Sep 17 00:00:00 2001 From: Daniel Mensinger Date: Tue, 4 Feb 2025 13:37:02 +0100 Subject: [PATCH 028/305] fix(mvn): handle directories in `` (#12957) --- plugins/mvn/mvn.plugin.zsh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/mvn/mvn.plugin.zsh b/plugins/mvn/mvn.plugin.zsh index a569a87fa..7bffce36e 100644 --- a/plugins/mvn/mvn.plugin.zsh +++ b/plugins/mvn/mvn.plugin.zsh @@ -101,8 +101,14 @@ function listMavenCompletions { new_file="../pom.xml" fi - # if file doesn't exist break file="${file:h}/${new_file}" + + # if the file points to a directory, assume it is a pom.xml in that directory + if [[ -d "$file" ]]; then + file="${file}/pom.xml" + fi + + # if file doesn't exist break if ! [[ -e "$file" ]]; then break fi From 4d9d346718caa6efdf6f350ed803e70d34fc6577 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Wed, 12 Feb 2025 20:15:25 +0100 Subject: [PATCH 029/305] feat(asdf): support asdf v0.16 ahead Co-authored-by: Valgard Trontheim Closes #12964 Closes #12967 --- plugins/asdf/asdf.plugin.zsh | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/plugins/asdf/asdf.plugin.zsh b/plugins/asdf/asdf.plugin.zsh index 7635d20c3..4367e8ca3 100644 --- a/plugins/asdf/asdf.plugin.zsh +++ b/plugins/asdf/asdf.plugin.zsh @@ -1,3 +1,21 @@ +if (( $+commands[asdf] )); then + export ASDF_DATA_DIR="${ASDF_DATA_DIR:-$HOME/.asdf}" + path=("$ASDF_DATA_DIR/shims" $path) + + # If the completion file doesn't exist yet, we need to autoload it and + # bind it to `asdf`. Otherwise, compinit will have already done that. + if [[ ! -f "$ZSH_CACHE_DIR/completions/_asdf" ]]; then + typeset -g -A _comps + autoload -Uz _asdf + _comps[asdf]=_asdf + fi + asdf completion zsh >| "$ZSH_CACHE_DIR/completions/_asdf" &| + + return +fi + +# TODO:(2025-02-12): remove deprecated asdf <0.16 code + # Find where asdf should be installed ASDF_DIR="${ASDF_DIR:-$HOME/.asdf}" ASDF_COMPLETIONS="$ASDF_DIR/completions" From 8074eb8b46d20a2f3ad2b99201388900a2e33450 Mon Sep 17 00:00:00 2001 From: Dennis Dashkevich Date: Wed, 12 Feb 2025 22:24:56 +0300 Subject: [PATCH 030/305] fix(chruby): update brew sourcing for Apple Silicon (#12941) Co-authored-by: Carlo Sala --- plugins/chruby/chruby.plugin.zsh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/chruby/chruby.plugin.zsh b/plugins/chruby/chruby.plugin.zsh index 1210897c4..06afef189 100644 --- a/plugins/chruby/chruby.plugin.zsh +++ b/plugins/chruby/chruby.plugin.zsh @@ -22,6 +22,8 @@ _source-from-homebrew() { # check default brew prefix if [[ -h /usr/local/opt/chruby ]];then _brew_prefix="/usr/local/opt/chruby" + elif [[ -h /opt/homebrew/opt/chruby ]]; then + _brew_prefix="/opt/homebrew/opt/chruby" else # ok , it is not default prefix # this call to brew is expensive ( about 400 ms ), so at least let's make it only once From 0e99f402cd5a335042559396ae300a7668bac933 Mon Sep 17 00:00:00 2001 From: Stephen Gelman Date: Wed, 12 Feb 2025 13:33:35 -0600 Subject: [PATCH 031/305] feat(agnoster): add color config and add some git stuff (#12505) Co-authored-by: Kilobyte22 Co-authored-by: Carlo Sala --- themes/agnoster.zsh-theme | 147 ++++++++++++++++++++++++++++++-------- 1 file changed, 118 insertions(+), 29 deletions(-) diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme index c2a542163..67db2cf46 100644 --- a/themes/agnoster.zsh-theme +++ b/themes/agnoster.zsh-theme @@ -39,6 +39,63 @@ case ${SOLARIZED_THEME:-dark} in *) CURRENT_FG='black';; esac +### Theme Configuration Initialization +# +# Override these settings in your ~/.zshrc + +# Current working directory +: ${AGNOSTER_DIR_FG:=${CURRENT_FG}} +: ${AGNOSTER_DIR_BG:=blue} + +# user@host +: ${AGNOSTER_CONTEXT_FG:=default} +: ${AGNOSTER_CONTEXT_BG:=black} + +# Git related +: ${AGNOSTER_GIT_CLEAN_FG:=${CURRENT_FG}} +: ${AGNOSTER_GIT_CLEAN_BG:=green} +: ${AGNOSTER_GIT_DIRTY_FG:=black} +: ${AGNOSTER_GIT_DIRTY_BG:=yellow} + +# Bazaar related +: ${AGNOSTER_BZR_CLEAN_FG:=${CURRENT_FG}} +: ${AGNOSTER_BZR_CLEAN_BG:=green} +: ${AGNOSTER_BZR_DIRTY_FG:=black} +: ${AGNOSTER_BZR_DIRTY_BG:=yellow} + +# Mercurial related +: ${AGNOSTER_HG_NEWFILE_FG:=white} +: ${AGNOSTER_HG_NEWFILE_BG:=red} +: ${AGNOSTER_HG_CHANGED_FG:=black} +: ${AGNOSTER_HG_CHANGED_BG:=yellow} +: ${AGNOSTER_HG_CLEAN_FG:=${CURRENT_FG}} +: ${AGNOSTER_HG_CLEAN_BG:=green} + +# VirtualEnv colors +: ${AGNOSTER_VENV_FG:=black} +: ${AGNOSTER_VENV_BG:=blue} + +# AWS Profile colors +: ${AGNOSTER_AWS_PROD_FG:=yellow} +: ${AGNOSTER_AWS_PROD_BG:=red} +: ${AGNOSTER_AWS_FG:=black} +: ${AGNOSTER_AWS_BG:=green} + +# Status symbols +: ${AGNOSTER_STATUS_RETVAL_FG:=red} +: ${AGNOSTER_STATUS_ROOT_FG:=yellow} +: ${AGNOSTER_STATUS_JOB_FG:=cyan} +: ${AGNOSTER_STATUS_BG:=black} + +## Non-Color settings - set to 'true' to enable +# Show the actual numeric return value rather than a cross symbol. +: ${AGNOSTER_STATUS_RETVAL_NUMERIC:=false} +# Show git working dir in the style "/git/root   master  relative/dir" instead of "/git/root/relative/dir   master" +: ${AGNOSTER_GIT_INLINE:=false} +# Show the git branch status in the prompt rather than the generic branch symbol +: ${AGNOSTER_GIT_BRANCH_STATUS:=true} + + # Special Powerline characters () { @@ -83,16 +140,36 @@ prompt_end() { CURRENT_BG='' } +git_toplevel() { + local repo_root=$(git rev-parse --show-toplevel) + if [[ $repo_root = '' ]]; then + # We are in a bare repo. Use git dir as root + repo_root=$(git rev-parse --git-dir) + if [[ $repo_root = '.' ]]; then + repo_root=$PWD + fi + fi + echo -n $repo_root +} + ### Prompt components # Each component will draw itself, and hide itself if no information needs to be shown # Context: user@hostname (who am I and where am I) prompt_context() { if [[ "$USERNAME" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then - prompt_segment black default "%(!.%{%F{yellow}%}.)%n@%m" + prompt_segment "$AGNOSTER_CONTEXT_BG" "$AGNOSTER_CONTEXT_FG" "%(!.%{%F{$AGNOSTER_STATUS_ROOT_FG}%}.)%n@%m" fi } +prompt_git_relative() { + local repo_root=$(git_toplevel) + local path_in_repo=$(pwd | sed "s/^$(echo "$repo_root" | sed 's:/:\\/:g;s/\$/\\$/g')//;s:^/::;s:/$::;") + if [[ $path_in_repo != '' ]]; then + prompt_segment "$AGNOSTER_DIR_BG" "$AGNOSTER_DIR_FG" "$path_in_repo" + fi; +} + # Git: branch/detached head, dirty status prompt_git() { (( $+commands[git] )) || return @@ -113,20 +190,22 @@ prompt_git() { ref="◈ $(command git describe --exact-match --tags HEAD 2> /dev/null)" || \ ref="➦ $(command git rev-parse --short HEAD 2> /dev/null)" if [[ -n $dirty ]]; then - prompt_segment yellow black + prompt_segment "$AGNOSTER_GIT_DIRTY_BG" "$AGNOSTER_GIT_DIRTY_FG" else - prompt_segment green $CURRENT_FG + prompt_segment "$AGNOSTER_GIT_CLEAN_BG" "$AGNOSTER_GIT_CLEAN_FG" fi - local ahead behind - ahead=$(command git log --oneline @{upstream}.. 2>/dev/null) - behind=$(command git log --oneline ..@{upstream} 2>/dev/null) - if [[ -n "$ahead" ]] && [[ -n "$behind" ]]; then - PL_BRANCH_CHAR=$'\u21c5' - elif [[ -n "$ahead" ]]; then - PL_BRANCH_CHAR=$'\u21b1' - elif [[ -n "$behind" ]]; then - PL_BRANCH_CHAR=$'\u21b0' + if [[ $AGNOSTER_GIT_BRANCH_STATUS == 'true' ]]; then + local ahead behind + ahead=$(command git log --oneline @{upstream}.. 2>/dev/null) + behind=$(command git log --oneline ..@{upstream} 2>/dev/null) + if [[ -n "$ahead" ]] && [[ -n "$behind" ]]; then + PL_BRANCH_CHAR=$'\u21c5' + elif [[ -n "$ahead" ]]; then + PL_BRANCH_CHAR=$'\u21b1' + elif [[ -n "$behind" ]]; then + PL_BRANCH_CHAR=$'\u21b0' + fi fi if [[ -e "${repo_path}/BISECT_LOG" ]]; then @@ -149,6 +228,7 @@ prompt_git() { zstyle ':vcs_info:*' actionformats ' %u%c' vcs_info echo -n "${${ref:gs/%/%%}/refs\/heads\//$PL_BRANCH_CHAR }${vcs_info_msg_0_%% }${mode}" + [[ $AGNOSTER_GIT_INLINE == 'true' ]] && prompt_git_relative fi } @@ -168,12 +248,12 @@ prompt_bzr() { status_all=$(echo -n "$bzr_status" | head -n1 | wc -m) revision=${$(command bzr log -r-1 --log-format line | cut -d: -f1):gs/%/%%} if [[ $status_mod -gt 0 ]] ; then - prompt_segment yellow black "bzr@$revision ✚" + prompt_segment "$AGNOSTER_BZR_DIRTY_BG" "$AGNOSTER_BZR_DIRTY_FG" "bzr@$revision ✚" else if [[ $status_all -gt 0 ]] ; then - prompt_segment yellow black "bzr@$revision" + prompt_segment "$AGNOSTER_BZR_DIRTY_BG" "$AGNOSTER_BZR_DIRTY_FG" "bzr@$revision" else - prompt_segment green black "bzr@$revision" + prompt_segment "$AGNOSTER_BZR_CLEAN_BG" "$AGNOSTER_BZR_CLEAN_FG" "bzr@$revision" fi fi fi @@ -186,15 +266,15 @@ prompt_hg() { if $(command hg prompt >/dev/null 2>&1); then if [[ $(command hg prompt "{status|unknown}") = "?" ]]; then # if files are not added - prompt_segment red white + prompt_segment "$AGNOSTER_HG_NEWFILE_BG" "$AGNOSTER_HG_NEWFILE_FG" st='±' elif [[ -n $(command hg prompt "{status|modified}") ]]; then # if any modification - prompt_segment yellow black + prompt_segment "$AGNOSTER_HG_CHANGED_BG" "$AGNOSTER_HG_CHANGED_FG" st='±' else # if working copy is clean - prompt_segment green $CURRENT_FG + prompt_segment "$AGNOSTER_HG_CLEAN_BG" "$AGNOSTER_HG_CLEAN_FG" fi echo -n ${$(command hg prompt "☿ {rev}@{branch}"):gs/%/%%} $st else @@ -202,13 +282,13 @@ prompt_hg() { rev=$(command hg id -n 2>/dev/null | sed 's/[^-0-9]//g') branch=$(command hg id -b 2>/dev/null) if command hg st | command grep -q "^\?"; then - prompt_segment red black + prompt_segment "$AGNOSTER_HG_NEWFILE_BG" "$AGNOSTER_HG_NEWFILE_FG" st='±' elif command hg st | command grep -q "^[MA]"; then - prompt_segment yellow black + prompt_segment "$AGNOSTER_HG_CHANGED_BG" "$AGNOSTER_HG_CHANGED_FG" st='±' else - prompt_segment green $CURRENT_FG + prompt_segment "$AGNOSTER_HG_CLEAN_BG" "$AGNOSTER_HG_CLEAN_FG" fi echo -n "☿ ${rev:gs/%/%%}@${branch:gs/%/%%}" $st fi @@ -217,13 +297,18 @@ prompt_hg() { # Dir: current working directory prompt_dir() { - prompt_segment blue $CURRENT_FG '%~' + if [[ $AGNOSTER_GIT_INLINE == 'true' ]] && $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then + # Git repo and inline path enabled, hence only show the git root + prompt_segment "$AGNOSTER_DIR_BG" "$AGNOSTER_DIR_FG" "$(git_toplevel | sed "s:^$HOME:~:")" + else + prompt_segment "$AGNOSTER_DIR_BG" "$AGNOSTER_DIR_FG" '%~' + fi } # Virtualenv: current working virtualenv prompt_virtualenv() { if [[ -n "$VIRTUAL_ENV" && -n "$VIRTUAL_ENV_DISABLE_PROMPT" ]]; then - prompt_segment blue black "(${VIRTUAL_ENV:t:gs/%/%%})" + prompt_segment "$AGNOSTER_VENV_BG" "$AGNOSTER_VENV_FG" "(${VIRTUAL_ENV:t:gs/%/%%})" fi } @@ -234,11 +319,15 @@ prompt_virtualenv() { prompt_status() { local -a symbols - [[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}✘" - [[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}⚡" - [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}⚙" + if [[ $AGNOSTER_STATUS_RETVAL_NUMERIC == 'true' ]]; then + [[ $RETVAL -ne 0 ]] && symbols+="%{%F{$AGNOSTER_STATUS_RETVAL_FG}%}$RETVAL" + else + [[ $RETVAL -ne 0 ]] && symbols+="%{%F{$AGNOSTER_STATUS_RETVAL_FG}%}✘" + fi + [[ $UID -eq 0 ]] && symbols+="%{%F{$AGNOSTER_STATUS_ROOT_FG}%}⚡" + [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{$AGNOSTER_STATUS_JOB_FG}%}⚙" - [[ -n "$symbols" ]] && prompt_segment black default "$symbols" + [[ -n "$symbols" ]] && prompt_segment "$AGNOSTER_STATUS_BG" default "$symbols" } #AWS Profile: @@ -249,8 +338,8 @@ prompt_status() { prompt_aws() { [[ -z "$AWS_PROFILE" || "$SHOW_AWS_PROMPT" = false ]] && return case "$AWS_PROFILE" in - *-prod|*production*) prompt_segment red yellow "AWS: ${AWS_PROFILE:gs/%/%%}" ;; - *) prompt_segment green black "AWS: ${AWS_PROFILE:gs/%/%%}" ;; + *-prod|*production*) prompt_segment "$AGNOSTER_AWS_PROD_BG" "$AGNOSTER_AWS_PROD_FG" "AWS: ${AWS_PROFILE:gs/%/%%}" ;; + *) prompt_segment "$AGNOSTER_AWS_BG" "$AGNOSTER_AWS_FG" "AWS: ${AWS_PROFILE:gs/%/%%}" ;; esac } From 7d32e7fc3fb56032252548a690744a26c3ac3059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Thu, 13 Feb 2025 12:22:23 +0100 Subject: [PATCH 032/305] fix(updater): detect p10k instant prompt (#12971) Fixes #12781 --- tools/check_for_upgrade.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh index 1ecab5c0b..35391ea70 100644 --- a/tools/check_for_upgrade.sh +++ b/tools/check_for_upgrade.sh @@ -27,7 +27,7 @@ zstyle -s ':omz:update' mode update_mode || { # - $ZSH is not a git repository if [[ "$update_mode" = disabled ]] \ || [[ ! -w "$ZSH" || ! -O "$ZSH" ]] \ - || [[ ! -t 1 ]] \ + || [[ ! -t 1 && ${POWERLEVEL9K_INSTANT_PROMPT:-off} == off ]] \ || ! command git --version 2>&1 >/dev/null \ || (builtin cd -q "$ZSH"; ! command git rev-parse --is-inside-work-tree &>/dev/null); then unset update_mode @@ -112,6 +112,11 @@ function update_ohmyzsh() { local verbose_mode zstyle -s ':omz:update' verbose verbose_mode || verbose_mode=default + # Force verbose mode to silent if p10k instant prompt is enabled + if [[ ${POWERLEVEL9K_INSTANT_PROMPT:-off} != "off" ]]; then + verbose_mode=silent + fi + if [[ "$update_mode" != background-alpha ]] \ && LANG= ZSH="$ZSH" zsh -f "$ZSH/tools/upgrade.sh" -i -v $verbose_mode; then update_last_updated_file From 92da3108b52be506dc1334e8f0dc67c5d1c13d57 Mon Sep 17 00:00:00 2001 From: Adrien Plazas Date: Fri, 14 Feb 2025 10:18:01 +0100 Subject: [PATCH 033/305] fix(agnoster): print white text over black (#12525) --- themes/agnoster.zsh-theme | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme index 67db2cf46..b48bac56a 100644 --- a/themes/agnoster.zsh-theme +++ b/themes/agnoster.zsh-theme @@ -48,7 +48,7 @@ esac : ${AGNOSTER_DIR_BG:=blue} # user@host -: ${AGNOSTER_CONTEXT_FG:=default} +: ${AGNOSTER_CONTEXT_FG:=white} : ${AGNOSTER_CONTEXT_BG:=black} # Git related @@ -85,6 +85,7 @@ esac : ${AGNOSTER_STATUS_RETVAL_FG:=red} : ${AGNOSTER_STATUS_ROOT_FG:=yellow} : ${AGNOSTER_STATUS_JOB_FG:=cyan} +: ${AGNOSTER_STATUS_FG:=white} : ${AGNOSTER_STATUS_BG:=black} ## Non-Color settings - set to 'true' to enable @@ -327,7 +328,7 @@ prompt_status() { [[ $UID -eq 0 ]] && symbols+="%{%F{$AGNOSTER_STATUS_ROOT_FG}%}⚡" [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{$AGNOSTER_STATUS_JOB_FG}%}⚙" - [[ -n "$symbols" ]] && prompt_segment "$AGNOSTER_STATUS_BG" default "$symbols" + [[ -n "$symbols" ]] && prompt_segment "$AGNOSTER_STATUS_BG" "$AGNOSTER_STATUS_FG" "$symbols" } #AWS Profile: From 6e7ac0544e71c7b777746cb50f70de68c6495b86 Mon Sep 17 00:00:00 2001 From: tuzi3040 <28290621+tuzi3040@users.noreply.github.com> Date: Wed, 19 Feb 2025 19:37:18 +0800 Subject: [PATCH 034/305] fix(agnoster): print white text over black for light theme only (#12983) --- themes/agnoster.zsh-theme | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme index b48bac56a..adeffe8c2 100644 --- a/themes/agnoster.zsh-theme +++ b/themes/agnoster.zsh-theme @@ -35,8 +35,14 @@ CURRENT_BG='NONE' case ${SOLARIZED_THEME:-dark} in - light) CURRENT_FG='white';; - *) CURRENT_FG='black';; + light) + CURRENT_FG='white' + CURRENT_DEFAULT_FG='white' + ;; + *) + CURRENT_FG='black' + CURRENT_DEFAULT_FG='default' + ;; esac ### Theme Configuration Initialization @@ -48,7 +54,7 @@ esac : ${AGNOSTER_DIR_BG:=blue} # user@host -: ${AGNOSTER_CONTEXT_FG:=white} +: ${AGNOSTER_CONTEXT_FG:=${CURRENT_DEFAULT_FG}} : ${AGNOSTER_CONTEXT_BG:=black} # Git related @@ -85,7 +91,7 @@ esac : ${AGNOSTER_STATUS_RETVAL_FG:=red} : ${AGNOSTER_STATUS_ROOT_FG:=yellow} : ${AGNOSTER_STATUS_JOB_FG:=cyan} -: ${AGNOSTER_STATUS_FG:=white} +: ${AGNOSTER_STATUS_FG:=${CURRENT_DEFAULT_FG}} : ${AGNOSTER_STATUS_BG:=black} ## Non-Color settings - set to 'true' to enable From 30e516a3aa47d90b5f507d5ddacb1b9b69567975 Mon Sep 17 00:00:00 2001 From: nasso <11479594+nasso@users.noreply.github.com> Date: Mon, 3 Mar 2025 17:15:43 +0100 Subject: [PATCH 035/305] feat(jj): add jujutsu plugin (#12292) --- plugins/jj/README.md | 89 ++++++++++++++++++++++++++++++++++++++++ plugins/jj/jj.plugin.zsh | 53 ++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 plugins/jj/README.md create mode 100644 plugins/jj/jj.plugin.zsh diff --git a/plugins/jj/README.md b/plugins/jj/README.md new file mode 100644 index 000000000..cd43ed11b --- /dev/null +++ b/plugins/jj/README.md @@ -0,0 +1,89 @@ +# jj - Jujutsu CLI + +This plugin provides autocompletion for [jj](https://martinvonz.github.io/jj). + +To use it, add `jj` to the plugins array of your zshrc file: + +```zsh +plugins=(... jj) +``` + +## Aliases + +| Alias | Command | +| ------ | ----------------------------- | +| jjc | `jj commit` | +| jjcmsg | `jj commit --message` | +| jjd | `jj diff` | +| jjdmsg | `jj desc --message` | +| jjds | `jj desc` | +| jje | `jj edit` | +| jjgcl | `jj git clone` | +| jjgf | `jj git fetch` | +| jjgp | `jj git push` | +| jjl | `jj log` | +| jjla | `jj log -r "all()"` | +| jjn | `jj new` | +| jjrb | `jj rebase` | +| jjrs | `jj restore` | +| jjrt | `cd "$(jj root \|\| echo .)"` | +| jjsp | `jj split` | +| jjsq | `jj squash` | + +## Prompt usage + +Because `jj` has a very powerful [template syntax](https://martinvonz.github.io/jj/latest/templates/), this +plugin only exposes a convenience function `jj_prompt_template` to read information from the current change. +It is basically the same as `jj log --no-graph -r @ -T $1`: + +```sh +_my_theme_jj_info() { + jj_prompt_template 'self.change_id().shortest(3)' +} + +PROMPT='$(_my_theme_jj_info) $' +``` + +`jj_prompt_template` escapes `%` signs in the output. Use `jj_prompt_template_raw` if you don't want that +(e.g. to colorize the output). + +However, because `jj` can be used inside a Git repository, some themes might clash with it. Generally, you can +fix it with a wrapper function that tries `jj` first and then falls back to `git` if it didn't work: + +```sh +_my_theme_vcs_info() { + jj_prompt_template 'self.change_id().shortest(3)' \ + || git_prompt_info +} + +PROMPT='$(_my_theme_vcs_info) $' +``` + +You can find an example +[here](https://github.com/nasso/omzsh/blob/e439e494f22f4fd4ef1b6cb64626255f4b341c1b/themes/sunakayu.zsh-theme). + +### Performance + +Sometimes `jj` can be slower than `git`. + +If you feel slowdowns, consider using the following: + +``` +zstyle :omz:plugins:jj ignore-working-copy yes +``` + +This will add `--ignore-working-copy` to all `jj` commands executed by your prompt. The downside here is that +your prompt might be out-of-sync until the next time `jj` gets a chance to _not_ ignore the working copy (i.e. +you manually run a `jj` command). + +If you prefer to keep your prompt always up-to-date but still don't want to _feel_ the slowdown, you can make +your prompt asynchronous. This plugin doesn't do this automatically so you'd have to hack your theme a bit for +that. + +## See Also + +- [martinvonz/jj](https://github.com/martinvonz/jj) + +## Contributors + +- [nasso](https://github.com/nasso) - Plugin Author diff --git a/plugins/jj/jj.plugin.zsh b/plugins/jj/jj.plugin.zsh new file mode 100644 index 000000000..9f683923d --- /dev/null +++ b/plugins/jj/jj.plugin.zsh @@ -0,0 +1,53 @@ +# if jj is not found, don't do the rest of the script +if (( ! $+commands[jj] )); then + return +fi + +# If the completion file doesn't exist yet, we need to autoload it and +# bind it to `jj`. Otherwise, compinit will have already done that. +if [[ ! -f "$ZSH_CACHE_DIR/completions/_jj" ]]; then + typeset -g -A _comps + autoload -Uz _jj + _comps[jj]=_jj +fi + +jj util completion zsh >| "$ZSH_CACHE_DIR/completions/_jj" &| + +function __jj_prompt_jj() { + local -a flags + flags=("--no-pager") + if zstyle -t ':omz:plugins:jj' ignore-working-copy; then + flags+=("--ignore-working-copy") + fi + command jj $flags "$@" +} + +# convenience functions for themes +function jj_prompt_template_raw() { + __jj_prompt_jj log --no-graph -r @ -T "$@" 2> /dev/null +} + +function jj_prompt_template() { + local out + out=$(jj_prompt_template_raw "$@") || return 1 + echo "${out:gs/%/%%}" +} + +# Aliases (sorted alphabetically) +alias jjc='jj commit' +alias jjcmsg='jj commit --message' +alias jjd='jj diff' +alias jjdmsg='jj desc --message' +alias jjds='jj desc' +alias jje='jj edit' +alias jjgcl='jj git clone' +alias jjgf='jj git fetch' +alias jjgp='jj git push' +alias jjl='jj log' +alias jjla='jj log -r "all()"' +alias jjn='jj new' +alias jjrb='jj rebase' +alias jjrs='jj restore' +alias jjrt='cd "$(jj root || echo .)"' +alias jjsp='jj split' +alias jjsq='jj squash' From 1c2127727af0ac452292f844ee32306f12906d03 Mon Sep 17 00:00:00 2001 From: nasso <11479594+nasso@users.noreply.github.com> Date: Tue, 4 Mar 2025 11:46:29 +0100 Subject: [PATCH 036/305] feat(jj): enable dynamic completion (#13003) --- plugins/jj/jj.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/jj/jj.plugin.zsh b/plugins/jj/jj.plugin.zsh index 9f683923d..06c04958b 100644 --- a/plugins/jj/jj.plugin.zsh +++ b/plugins/jj/jj.plugin.zsh @@ -11,7 +11,7 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_jj" ]]; then _comps[jj]=_jj fi -jj util completion zsh >| "$ZSH_CACHE_DIR/completions/_jj" &| +COMPLETE=zsh jj >| "$ZSH_CACHE_DIR/completions/_jj" &| function __jj_prompt_jj() { local -a flags From f97e871c33da57d20e1b0411da6b1674126192a9 Mon Sep 17 00:00:00 2001 From: Gary Wei <33930674+garywei944@users.noreply.github.com> Date: Tue, 11 Mar 2025 01:51:15 -0700 Subject: [PATCH 037/305] fix(conda): correct typo in alias parameter (#13010) Closes #13009 --- plugins/conda/conda.plugin.zsh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/conda/conda.plugin.zsh b/plugins/conda/conda.plugin.zsh index a93ceeb95..7a130ba7b 100644 --- a/plugins/conda/conda.plugin.zsh +++ b/plugins/conda/conda.plugin.zsh @@ -14,8 +14,8 @@ alias cnl='conda list' alias cnle='conda list --export' alias cnles='conda list --explicit > spec-file.txt' alias cnr='conda remove' -alias cnrn='conda remove -y -all -n' -alias cnrp='conda remove -y -all -p' +alias cnrn='conda remove -y --all -n' +alias cnrp='conda remove -y --all -p' alias cnry='conda remove -y' alias cnsr='conda search' alias cnu='conda update' From 34e9830dd399b6e068e41907def76a7e97653219 Mon Sep 17 00:00:00 2001 From: Linda TJ Date: Thu, 20 Mar 2025 11:22:12 +0100 Subject: [PATCH 038/305] fix(ranq-quote): use https for quote retrieval (#13021) --- plugins/rand-quote/rand-quote.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/rand-quote/rand-quote.plugin.zsh b/plugins/rand-quote/rand-quote.plugin.zsh index 23c21dc8f..1eda54caa 100644 --- a/plugins/rand-quote/rand-quote.plugin.zsh +++ b/plugins/rand-quote/rand-quote.plugin.zsh @@ -8,7 +8,7 @@ function quote { # Get random quote data local data - data="$(command curl -s --connect-timeout 2 "http://www.quotationspage.com/random.php" \ + data="$(command curl -s --connect-timeout 2 "https://www.quotationspage.com/random.php" \ | iconv -c -f ISO-8859-1 -t UTF-8 \ | command grep -a -m 1 'dt class="quote"')" From bea0dd2ca02cdb2c6cc88f2478aafe87a743f42a Mon Sep 17 00:00:00 2001 From: Robert Dober Date: Thu, 20 Mar 2025 11:30:05 +0100 Subject: [PATCH 039/305] feat(mix): autocomplete `format` command (#13012) --- plugins/mix/_mix | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/plugins/mix/_mix b/plugins/mix/_mix index 656c7fe19..346fc8c4f 100644 --- a/plugins/mix/_mix +++ b/plugins/mix/_mix @@ -146,6 +146,16 @@ case $state in (help) _arguments ':feature:__task_list' ;; + (format) + _arguments -C \ + '--check-formatted' \ + '--dot-formatter' \ + '--dry-run' \ + '--force' \ + '--migrate' \ + '--no-exit' \ + '*::file:_files' + ;; (test) _files ;; From da2510c199edfd3fd28d6297b38ff129b20d3d91 Mon Sep 17 00:00:00 2001 From: Hong Xu Date: Thu, 20 Mar 2025 11:41:27 -0700 Subject: [PATCH 040/305] fix(nicoluaj): avoid overriding customization params (#12859) --- themes/nicoulaj.zsh-theme | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) mode change 100644 => 100755 themes/nicoulaj.zsh-theme diff --git a/themes/nicoulaj.zsh-theme b/themes/nicoulaj.zsh-theme old mode 100644 new mode 100755 index 685cd1ade..6435c3833 --- a/themes/nicoulaj.zsh-theme +++ b/themes/nicoulaj.zsh-theme @@ -12,12 +12,12 @@ # ------------------------------------------------------------------------------ # Customizable parameters. -PROMPT_PATH_MAX_LENGTH=30 -PROMPT_DEFAULT_END=❯ -PROMPT_ROOT_END=❯❯❯ -PROMPT_SUCCESS_COLOR=$FG[071] -PROMPT_FAILURE_COLOR=$FG[124] -PROMPT_VCS_INFO_COLOR=$FG[242] +PROMPT_PATH_MAX_LENGTH=${PROMPT_PATH_MAX_LENGTH:-30} +PROMPT_DEFAULT_END=${PROMPT_DEFAULT_END:-❯} +PROMPT_ROOT_END=${PROMPT_ROOT_END:-❯❯❯} +PROMPT_SUCCESS_COLOR=${PROMPT_SUCCESS_COLOR:-$FG[071]} +PROMPT_FAILURE_COLOR=${PROMPT_FAILURE_COLOR:-$FG[124]} +PROMPT_VCS_INFO_COLOR=${PROMPT_VCS_INFO_COLOR:-$FG[242]} # Set required options. setopt promptsubst From 6591606d566cb37d53a7b996f0ff05a59998dc16 Mon Sep 17 00:00:00 2001 From: Ken van der Eerden <15888558+Ken-vdE@users.noreply.github.com> Date: Thu, 20 Mar 2025 19:43:08 +0100 Subject: [PATCH 041/305] feat(jira): add `project` command to open project (#12851) --- plugins/jira/README.md | 1 + plugins/jira/_jira | 1 + plugins/jira/jira.plugin.zsh | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/plugins/jira/README.md b/plugins/jira/README.md index 19266e7f0..f6e2e26f4 100644 --- a/plugins/jira/README.md +++ b/plugins/jira/README.md @@ -26,6 +26,7 @@ This plugin supplies one command, `jira`, through which all its features are exp | `jira new` | Opens a new Jira issue dialogue | | `jira ABC-123` | Opens an existing issue | | `jira ABC-123 m` | Opens an existing issue for adding a comment | +| `jira project ABC` | Opens JIRA project summary | | `jira dashboard [rapid_view]` | Opens your JIRA dashboard | | `jira mine` | Queries for your own issues | | `jira tempo` | Opens your JIRA Tempo | diff --git a/plugins/jira/_jira b/plugins/jira/_jira index 5f7dcd09d..617a3e501 100644 --- a/plugins/jira/_jira +++ b/plugins/jira/_jira @@ -5,6 +5,7 @@ local -a _1st_arguments _1st_arguments=( 'new:create a new issue' 'mine:open my issues' + 'project:open the project' 'dashboard:open the dashboard' 'tempo:open the tempo' 'reported:search for issues reported by a user' diff --git a/plugins/jira/jira.plugin.zsh b/plugins/jira/jira.plugin.zsh index 22e0c82c7..0c90544d5 100644 --- a/plugins/jira/jira.plugin.zsh +++ b/plugins/jira/jira.plugin.zsh @@ -8,6 +8,7 @@ jira Performs the default action jira new Opens a new Jira issue dialogue jira ABC-123 Opens an existing issue jira ABC-123 m Opens an existing issue for adding a comment +jira project ABC Opens JIRA project summary jira dashboard [rapid_view] Opens your JIRA dashboard jira mine Queries for your own issues jira tempo Opens your JIRA Tempo @@ -88,6 +89,9 @@ function jira() { elif [[ "$action" == "mine" ]]; then echo "Opening my issues" open_command "${jira_url}/issues/?filter=-1" + elif [[ "$action" == "project" ]]; then + echo "Opening project" + open_command "${jira_url}/jira/software/c/projects/${2}/summary" elif [[ "$action" == "dashboard" ]]; then echo "Opening dashboard" if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then From 070f823a84642ba93b844fa80382e8375ca941c8 Mon Sep 17 00:00:00 2001 From: bretello Date: Thu, 20 Mar 2025 19:44:01 +0100 Subject: [PATCH 042/305] feat(uv): alias `uv` with `noglob` (#12866) --- plugins/uv/uv.plugin.zsh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/uv/uv.plugin.zsh b/plugins/uv/uv.plugin.zsh index f1ad37e15..abcbc117e 100644 --- a/plugins/uv/uv.plugin.zsh +++ b/plugins/uv/uv.plugin.zsh @@ -3,6 +3,8 @@ if (( ! ${+commands[uv]} )); then return fi +alias uv="noglob uv" + alias uva='uv add' alias uvexp='uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet' alias uvl='uv lock' From 85d60d489c54150cc9df5cef0504f6af90638fbd Mon Sep 17 00:00:00 2001 From: Kristijan Date: Fri, 21 Mar 2025 05:47:01 +1100 Subject: [PATCH 043/305] feat(dirhistory): add support for ghostty (#12868) --- plugins/dirhistory/dirhistory.plugin.zsh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/dirhistory/dirhistory.plugin.zsh b/plugins/dirhistory/dirhistory.plugin.zsh index 8d67c6188..8d66de7f5 100644 --- a/plugins/dirhistory/dirhistory.plugin.zsh +++ b/plugins/dirhistory/dirhistory.plugin.zsh @@ -137,6 +137,7 @@ for keymap in emacs vicmd viins; do case "$TERM_PROGRAM" in Apple_Terminal) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # Terminal.app iTerm.app) bindkey -M $keymap "^[^[[D" dirhistory_zle_dirhistory_back ;; # iTerm2 + ghostty) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # ghostty esac if (( ${+terminfo[kcub1]} )); then @@ -152,6 +153,7 @@ for keymap in emacs vicmd viins; do case "$TERM_PROGRAM" in Apple_Terminal) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # Terminal.app iTerm.app) bindkey -M $keymap "^[^[[C" dirhistory_zle_dirhistory_future ;; # iTerm2 + ghostty) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # ghostty esac if (( ${+terminfo[kcuf1]} )); then @@ -200,6 +202,7 @@ for keymap in emacs vicmd viins; do case "$TERM_PROGRAM" in Apple_Terminal) bindkey -M $keymap "^[[A" dirhistory_zle_dirhistory_up ;; # Terminal.app iTerm.app) bindkey -M $keymap "^[^[[A" dirhistory_zle_dirhistory_up ;; # iTerm2 + ghostty) bindkey -M $keymap "^[[1;3A" dirhistory_zle_dirhistory_up ;; # ghostty esac if (( ${+terminfo[kcuu1]} )); then @@ -215,6 +218,7 @@ for keymap in emacs vicmd viins; do case "$TERM_PROGRAM" in Apple_Terminal) bindkey -M $keymap "^[[B" dirhistory_zle_dirhistory_down ;; # Terminal.app iTerm.app) bindkey -M $keymap "^[^[[B" dirhistory_zle_dirhistory_down ;; # iTerm2 + ghostty) bindkey -M $keymap "^[[1;3B" dirhistory_zle_dirhistory_down ;; # ghostty esac if (( ${+terminfo[kcud1]} )); then From 5eaebdf0fe870a8c599c89c6b70a0c5ee8c78b42 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Thu, 20 Mar 2025 20:02:34 +0100 Subject: [PATCH 044/305] fix(termsupport): ensure ohmyzsh can run with `set -eu` Closes #12870 --- lib/async_prompt.zsh | 3 ++- lib/termsupport.zsh | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/async_prompt.zsh b/lib/async_prompt.zsh index db48446e7..151e24b8c 100644 --- a/lib/async_prompt.zsh +++ b/lib/async_prompt.zsh @@ -26,7 +26,7 @@ autoload -Uz is-at-least # This API is subject to change and optimization. Rely on it at your own risk. function _omz_register_handler { - setopt localoptions noksharrays + setopt localoptions noksharrays unset typeset -ga _omz_async_functions # we want to do nothing if there's no $1 function or we already set it up if [[ -z "$1" ]] || (( ! ${+functions[$1]} )) \ @@ -44,6 +44,7 @@ function _omz_register_handler { # Set up async handlers and callbacks function _omz_async_request { + setopt localoptions noksharrays unset local -i ret=$? typeset -gA _OMZ_ASYNC_FDS _OMZ_ASYNC_PIDS _OMZ_ASYNC_OUTPUT diff --git a/lib/termsupport.zsh b/lib/termsupport.zsh index 087bae9bb..d2fbf42cd 100644 --- a/lib/termsupport.zsh +++ b/lib/termsupport.zsh @@ -47,7 +47,7 @@ fi # Runs before showing the prompt function omz_termsupport_precmd { - [[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return + [[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return 0 title "$ZSH_THEME_TERM_TAB_TITLE_IDLE" "$ZSH_THEME_TERM_TITLE_IDLE" } @@ -145,6 +145,7 @@ esac # Identifies the directory using a file: URI scheme, including # the host name to disambiguate local vs. remote paths. function omz_termsupport_cwd { + setopt localoptions unset # Percent-encode the host and path names. local URL_HOST URL_PATH URL_HOST="$(omz_urlencode -P $HOST)" || return 1 From 068299685ceac5af570232ca5daa0ecd4d1f7d62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Thu, 20 Mar 2025 20:07:36 +0100 Subject: [PATCH 045/305] fix(dirhistory): support iTerm2 natural text key bindings (#11026) Fixes #11026 Fixes #11407 --- plugins/dirhistory/dirhistory.plugin.zsh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/dirhistory/dirhistory.plugin.zsh b/plugins/dirhistory/dirhistory.plugin.zsh index 8d66de7f5..4650666be 100644 --- a/plugins/dirhistory/dirhistory.plugin.zsh +++ b/plugins/dirhistory/dirhistory.plugin.zsh @@ -136,8 +136,11 @@ for keymap in emacs vicmd viins; do case "$TERM_PROGRAM" in Apple_Terminal) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # Terminal.app - iTerm.app) bindkey -M $keymap "^[^[[D" dirhistory_zle_dirhistory_back ;; # iTerm2 ghostty) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # ghostty + iTerm.app) + bindkey -M $keymap "^[^[[D" dirhistory_zle_dirhistory_back + bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back + ;; esac if (( ${+terminfo[kcub1]} )); then @@ -152,8 +155,11 @@ for keymap in emacs vicmd viins; do case "$TERM_PROGRAM" in Apple_Terminal) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # Terminal.app - iTerm.app) bindkey -M $keymap "^[^[[C" dirhistory_zle_dirhistory_future ;; # iTerm2 ghostty) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # ghostty + iTerm.app) + bindkey -M $keymap "^[^[[C" dirhistory_zle_dirhistory_future + bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future + ;; esac if (( ${+terminfo[kcuf1]} )); then From ec07c79d7ef9f30d4f7aef7eb54b605cd78bfb3d Mon Sep 17 00:00:00 2001 From: Xin Li Date: Thu, 20 Mar 2025 12:25:40 -0700 Subject: [PATCH 046/305] feat(tmux): refresh global environments automatically (#5282) --- plugins/tmux/tmux.plugin.zsh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/plugins/tmux/tmux.plugin.zsh b/plugins/tmux/tmux.plugin.zsh index 51cc7d6a5..f6de9166f 100644 --- a/plugins/tmux/tmux.plugin.zsh +++ b/plugins/tmux/tmux.plugin.zsh @@ -15,6 +15,8 @@ fi : ${ZSH_TMUX_AUTOQUIT:=$ZSH_TMUX_AUTOSTART} # Automatically name the new session based on the basename of PWD : ${ZSH_TMUX_AUTONAME_SESSION:=false} +# Automatically pick up tmux environments +: ${ZSH_TMUX_AUTOREFRESH:=true} # Set term to screen or screen-256color based on current terminal support : ${ZSH_TMUX_DETACHED:=false} # Set detached mode @@ -158,6 +160,15 @@ function _zsh_tmux_plugin_run() { fi } +# Refresh tmux environment variables. +function _zsh_tmux_plugin_preexec() +{ + local -a tmux_cmd + tmux_cmd=(command tmux) + + eval $($tmux_cmd show-environment -s) +} + # Use the completions for tmux for our function compdef _tmux _zsh_tmux_plugin_run # Alias tmux to our wrapper function. @@ -184,3 +195,9 @@ if [[ -z "$TMUX" && "$ZSH_TMUX_AUTOSTART" == "true" && -z "$INSIDE_EMACS" && -z _zsh_tmux_plugin_run fi fi + +# Automatically refresh tmux environments if tmux is running. +if [[ -n "$TMUX" && "$ZSH_TMUX_AUTOREFRESH" == "true" ]] && tmux ls >/dev/null 2>/dev/null; then + autoload -U add-zsh-hook + add-zsh-hook preexec _zsh_tmux_plugin_preexec +fi From 0c8c7bf2a8efa66b504d17e3b56881925a580b40 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Thu, 20 Mar 2025 20:23:47 +0100 Subject: [PATCH 047/305] docs(tmux): add note to README for #5282 --- plugins/tmux/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/tmux/README.md b/plugins/tmux/README.md index 28ad3558a..53607b8ad 100644 --- a/plugins/tmux/README.md +++ b/plugins/tmux/README.md @@ -31,6 +31,7 @@ The plugin also supports the following: | Variable | Description | | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | +| `ZSH_TMUX_AUTOREFRESH` | Automatically refresh global environments (default: `true`) | | `ZSH_TMUX_AUTOSTART` | Automatically starts tmux (default: `false`) | | `ZSH_TMUX_AUTOSTART_ONCE` | Autostart only if tmux hasn't been started previously (default: `true`) | | `ZSH_TMUX_AUTOCONNECT` | Automatically connect to a previous session if it exits (default: `true`) | From 22ec00d1f62ffe9c5e04d6eefc49be40e082407d Mon Sep 17 00:00:00 2001 From: Gurram Siddarth Reddy <73605274+siddarthreddygsr@users.noreply.github.com> Date: Fri, 21 Mar 2025 00:59:33 +0530 Subject: [PATCH 048/305] chore(install): option case matching (#12881) --- tools/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/install.sh b/tools/install.sh index e5f126915..5c9b2c18d 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -399,8 +399,8 @@ EOF "$FMT_YELLOW" "$FMT_RESET" read -r opt case $opt in - y*|Y*|"") ;; - n*|N*) echo "Shell change skipped."; return ;; + [Yy]*|"") ;; + [Nn]*) echo "Shell change skipped."; return ;; *) echo "Invalid choice. Shell change skipped."; return ;; esac From 407be8f0368379892f7c0d5a3994bfca74e06969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Thu, 20 Mar 2025 20:28:39 +0100 Subject: [PATCH 049/305] feat(dirhistory): preserve forward directories with `cde` alias (#9328) Closes #11954 Co-authored-by: Jeff Williams --- plugins/dirhistory/README.md | 43 ++++++++++++++++++++++++ plugins/dirhistory/dirhistory.plugin.zsh | 3 +- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/plugins/dirhistory/README.md b/plugins/dirhistory/README.md index ede9b5410..66e3e0469 100644 --- a/plugins/dirhistory/README.md +++ b/plugins/dirhistory/README.md @@ -60,3 +60,46 @@ to `/usr` again. After that, Alt + Down will probably go to `/usr/bin` if `bin` is the first directory in alphabetical order (depends on your `/usr` folder structure). Alt + Up will return to `/usr`, and once more will get you to the root folder (`/`). + +### cde + +This plugin also provides a `cde` alias that allows you to change to a directory without clearing the next directory stack. +This changes the default behavior of `dirhistory`, which is to clear the next directory stack when changing directories. + +For example, if the shell was started, and the following commands were entered: + +```shell +cd ~ +cd /usr +cd share +cd doc + +# +# +``` + +The directory stack would look like this: + +```sh +➜ /usr typeset -pm dirhistory_\* +typeset -ax dirhistory_past=( /home/user /usr ) +typeset -ax dirhistory_future=( /usr/share/doc /usr/share ) +``` + +This means that pressing Alt + Right, you'd go to `/usr/share` and `/usr/share/doc` (the "future" directories). + +If you run `cd /usr/bin`, the "future" directories will be removed, and you won't be able to access them with Alt + Right: + +```sh +➜ /u/bin typeset -pm dirhistory_\* +typeset -ax dirhistory_past=( /home/user /usr ) +typeset -ax dirhistory_future=( /usr/bin ) +``` + +If you instead run `cde /usr/bin`, the "future" directories will be preserved: + +```sh +➜ /u/bin typeset -pm dirhistory_\* +typeset -ax dirhistory_past=( /home/user /usr /usr/bin ) +typeset -ax dirhistory_future=( /usr/share/doc /usr/share ) +``` diff --git a/plugins/dirhistory/dirhistory.plugin.zsh b/plugins/dirhistory/dirhistory.plugin.zsh index 4650666be..706bb6fb2 100644 --- a/plugins/dirhistory/dirhistory.plugin.zsh +++ b/plugins/dirhistory/dirhistory.plugin.zsh @@ -11,9 +11,10 @@ dirhistory_past=($PWD) dirhistory_future=() export dirhistory_past export dirhistory_future - export DIRHISTORY_SIZE=30 +alias cde='dirhistory_cd' + # Pop the last element of dirhistory_past. # Pass the name of the variable to return the result in. # Returns the element if the array was not empty, From ac1335125cb7fe742d825a95bb288ff8a8bfadd9 Mon Sep 17 00:00:00 2001 From: Adil Erchouk Date: Thu, 20 Mar 2025 20:36:07 +0100 Subject: [PATCH 050/305] feat(macos): add support for Ghostty (#12890) --- plugins/macos/README.md | 1 + plugins/macos/macos.plugin.zsh | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/plugins/macos/README.md b/plugins/macos/README.md index 8245e211f..ccc4331e5 100644 --- a/plugins/macos/README.md +++ b/plugins/macos/README.md @@ -13,6 +13,7 @@ plugins=(... macos) - [iTerm2](https://iterm2.com/) - [Hyper](https://hyper.is/) - [Tabby](https://tabby.sh/) +- [Ghostty](https://ghostty.org) ## Commands diff --git a/plugins/macos/macos.plugin.zsh b/plugins/macos/macos.plugin.zsh index b951a289f..6ddf31ecf 100644 --- a/plugins/macos/macos.plugin.zsh +++ b/plugins/macos/macos.plugin.zsh @@ -85,6 +85,12 @@ EOF tell application "System Events" tell process "Tabby" to keystroke "t" using command down end tell +EOF + elif [[ "$the_app" == 'ghostty' ]]; then + osascript >/dev/null <&2 @@ -139,6 +145,12 @@ EOF tell application "System Events" tell process "Tabby" to keystroke "D" using command down end tell +EOF + elif [[ "$the_app" == 'ghostty' ]]; then + osascript >/dev/null <&2 @@ -194,6 +206,12 @@ EOF tell application "System Events" tell process "Tabby" to keystroke "d" using command down end tell +EOF + elif [[ "$the_app" == 'ghostty' ]]; then + osascript >/dev/null <&2 From 899af6328b395f1db2e74d09880a1af435a188ca Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Fri, 21 Mar 2025 12:47:25 +0100 Subject: [PATCH 051/305] fix(bgnotify): detect if sway is running and not just installed (#12989) Co-authored-by: Carlo Sala --- plugins/bgnotify/bgnotify.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/bgnotify/bgnotify.plugin.zsh b/plugins/bgnotify/bgnotify.plugin.zsh index f6ffb6ed5..dca8250be 100644 --- a/plugins/bgnotify/bgnotify.plugin.zsh +++ b/plugins/bgnotify/bgnotify.plugin.zsh @@ -62,7 +62,7 @@ function bgnotify_formatted { function bgnotify_appid { if (( ${+commands[osascript]} )); then osascript -e "tell application id \"$(bgnotify_programid)\" to get the {id, frontmost, id of front window, visible of front window}" 2>/dev/null - elif [[ -n $WAYLAND_DISPLAY ]] && (( ${+commands[swaymsg]} )); then # wayland+sway + elif [[ -n $WAYLAND_DISPLAY ]] && ([[ -n $SWAYSOCK ]] || [[ -n $I3SOCK ]]) && (( ${+commands[swaymsg]} )); then # wayland+sway local app_id=$(bgnotify_find_sway_appid) [[ -n "$app_id" ]] && echo "$app_id" || echo $EPOCHSECONDS elif [[ -z $WAYLAND_DISPLAY ]] && [[ -n $DISPLAY ]] && (( ${+commands[xprop]} )); then From eeaf9f89b0e8b10a02f16cb6cdd93779c28eb2ea Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Mon, 24 Mar 2025 20:52:31 +0100 Subject: [PATCH 052/305] fix(tmux): disable AUTOREFRESH by default (#13034) --- plugins/tmux/README.md | 2 +- plugins/tmux/tmux.plugin.zsh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/tmux/README.md b/plugins/tmux/README.md index 53607b8ad..39c57f846 100644 --- a/plugins/tmux/README.md +++ b/plugins/tmux/README.md @@ -31,7 +31,7 @@ The plugin also supports the following: | Variable | Description | | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -| `ZSH_TMUX_AUTOREFRESH` | Automatically refresh global environments (default: `true`) | +| `ZSH_TMUX_AUTOREFRESH` | Automatically refresh global environments (default: `false`) | | `ZSH_TMUX_AUTOSTART` | Automatically starts tmux (default: `false`) | | `ZSH_TMUX_AUTOSTART_ONCE` | Autostart only if tmux hasn't been started previously (default: `true`) | | `ZSH_TMUX_AUTOCONNECT` | Automatically connect to a previous session if it exits (default: `true`) | diff --git a/plugins/tmux/tmux.plugin.zsh b/plugins/tmux/tmux.plugin.zsh index f6de9166f..d2729ec09 100644 --- a/plugins/tmux/tmux.plugin.zsh +++ b/plugins/tmux/tmux.plugin.zsh @@ -16,7 +16,7 @@ fi # Automatically name the new session based on the basename of PWD : ${ZSH_TMUX_AUTONAME_SESSION:=false} # Automatically pick up tmux environments -: ${ZSH_TMUX_AUTOREFRESH:=true} +: ${ZSH_TMUX_AUTOREFRESH:=false} # Set term to screen or screen-256color based on current terminal support : ${ZSH_TMUX_DETACHED:=false} # Set detached mode From 1de190e4391ce6c2fbe2bdf0025104cf3cb98231 Mon Sep 17 00:00:00 2001 From: Roeniss Moon Date: Wed, 26 Mar 2025 01:56:06 +0900 Subject: [PATCH 053/305] fix(alias-finder): early return on cmd len <2 (#13030) --- plugins/alias-finder/alias-finder.plugin.zsh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/alias-finder/alias-finder.plugin.zsh b/plugins/alias-finder/alias-finder.plugin.zsh index 5fdfbc835..4786431f3 100644 --- a/plugins/alias-finder/alias-finder.plugin.zsh +++ b/plugins/alias-finder/alias-finder.plugin.zsh @@ -36,7 +36,11 @@ alias-finder() { # make filter to find only shorter results than current cmd if [[ $cheaper == true ]]; then cmdLen=$(echo -n "$cmd" | wc -c) - filter="^'{0,1}.{0,$((cmdLen - 1))}=" + if [[ $cmdLen -le 1 ]]; then + return + fi + + filter="^'?.{1,$((cmdLen - 1))}'?=" # some aliases is surrounded by single quotes fi alias | grep -E "$filter" | grep -E "=$finder" From 4efdc90dba95200b010def504c471f0e191fea84 Mon Sep 17 00:00:00 2001 From: Roeniss Moon Date: Wed, 26 Mar 2025 02:03:02 +0900 Subject: [PATCH 054/305] docs(docker): add section for podman's docker wrapper (#13024) --- plugins/docker/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/docker/README.md b/plugins/docker/README.md index 8619125a2..a9f842db2 100644 --- a/plugins/docker/README.md +++ b/plugins/docker/README.md @@ -39,6 +39,10 @@ following setting. See https://github.com/ohmyzsh/ohmyzsh/issues/11789 for more zstyle ':omz:plugins:docker' legacy-completion yes ``` +### For Podman's Docker wrapper users + +If you use Podman's Docker wrapper, you need to enable legacy completion. See above section. + ## Aliases | Alias | Command | Description | From fa396ad7718af77e896472772bffd4a7e9110193 Mon Sep 17 00:00:00 2001 From: Chriss <77172965+realChriss@users.noreply.github.com> Date: Tue, 25 Mar 2025 18:04:39 +0100 Subject: [PATCH 055/305] feat(docker): add alias for stats (#12988) --- plugins/docker/README.md | 1 + plugins/docker/docker.plugin.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/docker/README.md b/plugins/docker/README.md index a9f842db2..0bc24b54a 100644 --- a/plugins/docker/README.md +++ b/plugins/docker/README.md @@ -77,6 +77,7 @@ If you use Podman's Docker wrapper, you need to enable legacy completion. See ab | drs | `docker container restart` | Restart one or more containers | | dsta | `docker stop $(docker ps -q)` | Stop all running containers | | dstp | `docker container stop` | Stop one or more running containers | +| dsts | `docker stats` | Display real-time streaming statistics for containers | | dtop | `docker top` | Display the running processes of a container | | dvi | `docker volume inspect` | Display detailed information about one or more volumes | | dvls | `docker volume ls` | List all the volumes known to docker | diff --git a/plugins/docker/docker.plugin.zsh b/plugins/docker/docker.plugin.zsh index 16db77df6..5268f6cd6 100644 --- a/plugins/docker/docker.plugin.zsh +++ b/plugins/docker/docker.plugin.zsh @@ -28,6 +28,7 @@ alias dst='docker container start' alias drs='docker container restart' alias dsta='docker stop $(docker ps -q)' alias dstp='docker container stop' +alias dsts='docker stats' alias dtop='docker top' alias dvi='docker volume inspect' alias dvls='docker volume ls' From 506cedb7ca1f4ba91a0ad102e8395d194c0b1a59 Mon Sep 17 00:00:00 2001 From: Roeniss Moon Date: Sat, 29 Mar 2025 18:38:29 +0900 Subject: [PATCH 056/305] chore(alias-finder): code style (#13038) --- plugins/alias-finder/alias-finder.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/alias-finder/alias-finder.plugin.zsh b/plugins/alias-finder/alias-finder.plugin.zsh index 4786431f3..2351a439e 100644 --- a/plugins/alias-finder/alias-finder.plugin.zsh +++ b/plugins/alias-finder/alias-finder.plugin.zsh @@ -47,7 +47,7 @@ alias-finder() { if [[ $exact == true ]]; then break # because exact case is only one - elif [[ $longer = true ]]; then + elif [[ $longer == true ]]; then break # because above grep command already found every longer aliases during first cycle fi From 346c09d469c9d2681399b0938e9af883ebdae829 Mon Sep 17 00:00:00 2001 From: Mikrz Date: Sat, 29 Mar 2025 05:40:25 -0400 Subject: [PATCH 057/305] fix(dnf): function name typo (#13040) --- plugins/dnf/_dnf5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/dnf/_dnf5 b/plugins/dnf/_dnf5 index e194dd5a7..9cbf451a8 100644 --- a/plugins/dnf/_dnf5 +++ b/plugins/dnf/_dnf5 @@ -38,7 +38,7 @@ _dnf5_rpm_files() { _dnf5_packages_or_rpms() { if [[ "$words[CURRENT]" = (*/*|\~*) ]]; then # if looks like a path name - _dnf_rpm_files + _dnf5_rpm_files else _dnf5_packages "$@" fi From 2f3a141f65ba082e1eb42ea3123fc2bd978c0c83 Mon Sep 17 00:00:00 2001 From: Kartik Vashistha Date: Sat, 29 Mar 2025 02:42:46 -0700 Subject: [PATCH 058/305] docs(asdf): match README with 0.16 (#13026) Co-authored-by: Carlo Sala --- plugins/asdf/README.md | 49 ++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/plugins/asdf/README.md b/plugins/asdf/README.md index 4af69a75c..e8ff2d740 100644 --- a/plugins/asdf/README.md +++ b/plugins/asdf/README.md @@ -1,32 +1,39 @@ -## asdf +# asdf Adds integration with [asdf](https://github.com/asdf-vm/asdf), the extendable version manager, with support for Ruby, Node.js, Elixir, Erlang and more. -### Installation +## Installation -1. [Download asdf](https://asdf-vm.com/guide/getting-started.html#_2-download-asdf) by running the following: - - ``` - git clone https://github.com/asdf-vm/asdf.git ~/.asdf - ``` - -2. [Enable asdf](https://asdf-vm.com/guide/getting-started.html#_3-install-asdf) by adding it to your `plugins` definition in `~/.zshrc`. - - ``` - plugins=(asdf) - ``` - -### Usage - -See the [asdf documentation](https://asdf-vm.com/guide/getting-started.html#_4-install-a-plugin) for information on how to use asdf: +1. [Install](https://asdf-vm.com/guide/getting-started.html#_1-install-asdf) asdf and ensure that's it's discoverable on `$PATH`; +2. Enable it by adding it to your `plugins` definition in `~/.zshrc`: +```sh +plugins=(asdf) ``` -asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git + +## Usage + +Refer to the [asdf plugin documentation](https://asdf-vm.com/guide/getting-started.html#_4-install-a-plugin) for information on how to add a plugin and install the many runtime versions for it. + +Example for installing the nodejs plugin and the many runtimes for it: + +```sh +# Add plugin to asdf +asdf plugin add nodejs + +# Install the latest available nodejs runtime version asdf install nodejs latest -asdf global nodejs latest -asdf local nodejs latest + +# Install nodejs v16.5.0 runtime version +asdf install nodejs 16.5.0 + +# Set the latest version in .tools-version in the current working directory +asdf set nodejs latest + +# Set a version globally that will apply to all directories under $HOME +asdf set -u nodejs 16.5.0 ``` -### Maintainer +## Maintainer - [@RobLoach](https://github.com/RobLoach) From a78d006faa022a5104b542d7dec5a3439e72046e Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Sat, 29 Mar 2025 10:47:03 +0100 Subject: [PATCH 059/305] fix(asdf)!: remove legacy <0.16 integration `asdf` plugin only supports asdf 0.16 and ahead from now on. --- plugins/asdf/asdf.plugin.zsh | 55 +++++++----------------------------- 1 file changed, 10 insertions(+), 45 deletions(-) diff --git a/plugins/asdf/asdf.plugin.zsh b/plugins/asdf/asdf.plugin.zsh index 4367e8ca3..318267dcb 100644 --- a/plugins/asdf/asdf.plugin.zsh +++ b/plugins/asdf/asdf.plugin.zsh @@ -1,48 +1,13 @@ -if (( $+commands[asdf] )); then - export ASDF_DATA_DIR="${ASDF_DATA_DIR:-$HOME/.asdf}" - path=("$ASDF_DATA_DIR/shims" $path) +(( ! $+commands[asdf] )) && return - # If the completion file doesn't exist yet, we need to autoload it and - # bind it to `asdf`. Otherwise, compinit will have already done that. - if [[ ! -f "$ZSH_CACHE_DIR/completions/_asdf" ]]; then - typeset -g -A _comps - autoload -Uz _asdf - _comps[asdf]=_asdf - fi - asdf completion zsh >| "$ZSH_CACHE_DIR/completions/_asdf" &| +export ASDF_DATA_DIR="${ASDF_DATA_DIR:-$HOME/.asdf}" +path=("$ASDF_DATA_DIR/shims" $path) - return -fi - -# TODO:(2025-02-12): remove deprecated asdf <0.16 code - -# Find where asdf should be installed -ASDF_DIR="${ASDF_DIR:-$HOME/.asdf}" -ASDF_COMPLETIONS="$ASDF_DIR/completions" - -if [[ ! -f "$ASDF_DIR/asdf.sh" || ! -f "$ASDF_COMPLETIONS/_asdf" ]]; then - # If not found, check for archlinux/AUR package (/opt/asdf-vm/) - if [[ -f "/opt/asdf-vm/asdf.sh" ]]; then - ASDF_DIR="/opt/asdf-vm" - ASDF_COMPLETIONS="$ASDF_DIR" - # If not found, check for Homebrew package - elif (( $+commands[brew] )); then - _ASDF_PREFIX="$(brew --prefix asdf)" - ASDF_DIR="${_ASDF_PREFIX}/libexec" - ASDF_COMPLETIONS="${_ASDF_PREFIX}/share/zsh/site-functions" - unset _ASDF_PREFIX - else - return - fi -fi - -# Load command -if [[ -f "$ASDF_DIR/asdf.sh" ]]; then - source "$ASDF_DIR/asdf.sh" - # Load completions - if [[ -f "$ASDF_COMPLETIONS/_asdf" ]]; then - fpath+=("$ASDF_COMPLETIONS") - autoload -Uz _asdf - compdef _asdf asdf # compdef is already loaded before loading plugins - fi +# If the completion file doesn't exist yet, we need to autoload it and +# bind it to `asdf`. Otherwise, compinit will have already done that. +if [[ ! -f "$ZSH_CACHE_DIR/completions/_asdf" ]]; then + typeset -g -A _comps + autoload -Uz _asdf + _comps[asdf]=_asdf fi +asdf completion zsh >| "$ZSH_CACHE_DIR/completions/_asdf" &| From f81259fb344685e2dc8b67f8ad8764ccd4e8502e Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Sat, 29 Mar 2025 12:55:20 +0100 Subject: [PATCH 060/305] fix(cli): support `noexec` environments (#13042) Closes #13032 --- lib/cli.zsh | 2 +- tools/upgrade.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/cli.zsh b/lib/cli.zsh index aed86e758..3b6308313 100644 --- a/lib/cli.zsh +++ b/lib/cli.zsh @@ -193,7 +193,7 @@ EOF return 1 fi - "$ZSH/tools/changelog.sh" "$version" "${2:-}" "$format" + ZSH="$ZSH" command zsh -f "$ZSH/tools/changelog.sh" "$version" "${2:-}" "$format" } function _omz::plugin { diff --git a/tools/upgrade.sh b/tools/upgrade.sh index c586610c4..1aa3d8af4 100755 --- a/tools/upgrade.sh +++ b/tools/upgrade.sh @@ -254,7 +254,7 @@ if LANG= git pull --quiet --rebase $remote $branch; then # Print changelog to the terminal if [[ $interactive == true && $verbose_mode == default ]]; then - "$ZSH/tools/changelog.sh" HEAD "$last_commit" + ZSH="$ZSH" command zsh -f "$ZSH/tools/changelog.sh" HEAD "$last_commit" fi if [[ $verbose_mode != silent ]]; then From 750d3ac4b493dca13ef0ced55fa6a2cd02dc7ee8 Mon Sep 17 00:00:00 2001 From: Sidar <65621366+Maple38@users.noreply.github.com> Date: Thu, 3 Apr 2025 17:38:51 +0300 Subject: [PATCH 061/305] fix(macos): use `command man` instead of `man` (#13046) --- plugins/macos/macos.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/macos/macos.plugin.zsh b/plugins/macos/macos.plugin.zsh index 6ddf31ecf..4d73d22c3 100644 --- a/plugins/macos/macos.plugin.zsh +++ b/plugins/macos/macos.plugin.zsh @@ -271,7 +271,7 @@ function man-preview() { [[ $# -eq 0 ]] && >&2 echo "Usage: $0 command1 [command2 ...]" && return 1 local page - for page in "${(@f)"$(man -w $@)"}"; do + for page in "${(@f)"$(command man -w $@)"}"; do command mandoc -Tpdf $page | open -f -a Preview done } From a84a0332a822a78ddf3f66d0e1ed3990d4badd12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Apr 2025 23:11:55 +0200 Subject: [PATCH 062/305] chore(deps): bump urllib3 in /.github/workflows/dependencies (#13065) Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.3.0 to 2.4.0. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/2.3.0...2.4.0) --- updated-dependencies: - dependency-name: urllib3 dependency-version: 2.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index 910db7bac..f2044a5f5 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -4,4 +4,4 @@ idna==3.10 PyYAML==6.0.2 requests==2.32.3 semver==3.0.4 -urllib3==2.3.0 +urllib3==2.4.0 From c1e5ff31693f391a0bbb30b12c8e7bc1cc976b7b Mon Sep 17 00:00:00 2001 From: swivelmargarita <55573157+swivelmargarita@users.noreply.github.com> Date: Thu, 17 Apr 2025 19:57:53 +0500 Subject: [PATCH 063/305] fix(branch): handle branches with `/` properly (#13063) Co-authored-by: Takha Polat --- plugins/branch/branch.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/branch/branch.plugin.zsh b/plugins/branch/branch.plugin.zsh index dd5871fdc..c24f9098e 100644 --- a/plugins/branch/branch.plugin.zsh +++ b/plugins/branch/branch.plugin.zsh @@ -8,7 +8,7 @@ function branch_prompt_info() { while [[ "$dir" != '/' ]]; do # Found .git directory if [[ -d "${dir}/.git" ]]; then - branch="${"$(<"${dir}/.git/HEAD")"##*/}" + branch="${"$(<"${dir}/.git/HEAD")"##ref: refs/heads/}" echo '±' "${branch:gs/%/%%}" return fi From a7426f0b38817bf7cd7000a5d378b7cfb059884f Mon Sep 17 00:00:00 2001 From: "Kat R." Date: Sat, 19 Apr 2025 10:49:16 -0700 Subject: [PATCH 064/305] fix(git-prompt): use `--git-common-dir` to load stash count (#13072) --- plugins/git-prompt/gitstatus.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/git-prompt/gitstatus.py b/plugins/git-prompt/gitstatus.py index 94774d828..7cd8f54e2 100644 --- a/plugins/git-prompt/gitstatus.py +++ b/plugins/git-prompt/gitstatus.py @@ -23,9 +23,10 @@ def get_tagname_or_hash(): return hash_ return None -# Re-use method from https://github.com/magicmonty/bash-git-prompt to get stashs count +# Re-use method from https://github.com/magicmonty/bash-git-prompt to get stash count +# Use `--git-common-dir` to avoid problems with git worktrees, which don't have individual stashes def get_stash(): - cmd = Popen(['git', 'rev-parse', '--git-dir'], stdout=PIPE, stderr=PIPE) + cmd = Popen(['git', 'rev-parse', '--git-common-dir'], stdout=PIPE, stderr=PIPE) so, se = cmd.communicate() stash_file = '%s%s' % (so.decode('utf-8').rstrip(), '/logs/refs/stash') @@ -35,7 +36,6 @@ def get_stash(): except IOError: return 0 - # `git status --porcelain --branch` can collect all information # branch, remote_branch, untracked, staged, changed, conflicts, ahead, behind po = Popen(['git', 'status', '--porcelain', '--branch'], env=dict(os.environ, LANG="C"), stdout=PIPE, stderr=PIPE) From afbbdd6099085fbc6a3d06cc44f90b566302bd43 Mon Sep 17 00:00:00 2001 From: Nicholas Wilson Date: Sat, 19 Apr 2025 12:58:05 -0500 Subject: [PATCH 065/305] docs: fix typos (#13061) --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f7455228a..7f57ed55e 100644 --- a/README.md +++ b/README.md @@ -163,7 +163,7 @@ adds any) and extra goodies that are included in that particular plugin. ### Themes -We'll admit it. Early in the Oh My Zsh world, we may have gotten a bit too theme happy. We have over one +We'll admit it. Early in the Oh My Zsh world, we may have gotten a bit too theme-happy. We have over one hundred and fifty themes now bundled. Most of them have [screenshots](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes) on the wiki (We are working on updating this!). Check them out! @@ -218,7 +218,7 @@ terminal window. ZSH_THEME="random" # (...please let it be pie... please be some pie..) ``` -And if you want to pick random theme from a list of your favorite themes: +And if you want to pick a random theme from a list of your favorite themes: ```sh ZSH_THEME_RANDOM_CANDIDATES=( @@ -426,7 +426,7 @@ turn it off by setting the following in your .zshrc file, before Oh My Zsh is so zstyle ':omz:alpha:lib:git' async-prompt no ``` -If your problem is that the git prompt just stopped appearing, you can try to force it setting the following +If your problem is that the git prompt just stopped appearing, you can try to force it by setting the following configuration before `oh-my-zsh.sh` is sourced. If it still does not work, please open an issue with your case. From 95a0ece8d39a7797850ef7a4cc8849b6e1158706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20A=2E=20Aranda=20Guti=C3=A9rrez?= Date: Sat, 19 Apr 2025 20:19:23 +0200 Subject: [PATCH 066/305] fix(agnoster): respect bg / fg user envs (#12897) Co-authored-by: Carlo Sala --- themes/agnoster.zsh-theme | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme index adeffe8c2..21c9cf7d5 100644 --- a/themes/agnoster.zsh-theme +++ b/themes/agnoster.zsh-theme @@ -36,12 +36,12 @@ CURRENT_BG='NONE' case ${SOLARIZED_THEME:-dark} in light) - CURRENT_FG='white' - CURRENT_DEFAULT_FG='white' + CURRENT_FG=${CURRENT_FG:-'white'} + CURRENT_DEFAULT_FG=${CURRENT_DEFAULT_FG:-'white'} ;; *) - CURRENT_FG='black' - CURRENT_DEFAULT_FG='default' + CURRENT_FG=${CURRENT_FG:-'black'} + CURRENT_DEFAULT_FG=${CURRENT_DEFAULT_FG:-'default'} ;; esac From b92874c716776bc8a19773d12354b77d08349d7b Mon Sep 17 00:00:00 2001 From: deimosian <616215+deimosian@users.noreply.github.com> Date: Sat, 19 Apr 2025 14:44:45 -0400 Subject: [PATCH 067/305] fix(archlinux): properly check keyring version (#12979) --- plugins/archlinux/archlinux.plugin.zsh | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/plugins/archlinux/archlinux.plugin.zsh b/plugins/archlinux/archlinux.plugin.zsh index e20a31156..7abd7c2f6 100644 --- a/plugins/archlinux/archlinux.plugin.zsh +++ b/plugins/archlinux/archlinux.plugin.zsh @@ -178,26 +178,27 @@ fi # Check Arch Linux PGP Keyring before System Upgrade to prevent failure. function upgrade() { + sudo pacman -Sy echo ":: Checking Arch Linux PGP Keyring..." local installedver="$(LANG= sudo pacman -Qi archlinux-keyring | grep -Po '(?<=Version : ).*')" local currentver="$(LANG= sudo pacman -Si archlinux-keyring | grep -Po '(?<=Version : ).*')" if [ $installedver != $currentver ]; then echo " Arch Linux PGP Keyring is out of date." echo " Updating before full system upgrade." - sudo pacman -Sy --needed --noconfirm archlinux-keyring + sudo pacman -S --needed --noconfirm archlinux-keyring else echo " Arch Linux PGP Keyring is up to date." echo " Proceeding with full system upgrade." fi if (( $+commands[yay] )); then - yay -Syu + yay -Su elif (( $+commands[trizen] )); then - trizen -Syu + trizen -Su elif (( $+commands[pacaur] )); then - pacaur -Syu + pacaur -Su elif (( $+commands[aura] )); then - sudo aura -Syu + sudo aura -Su else - sudo pacman -Syu + sudo pacman -Su fi } From 9957e4e8be9d63b9c42673f0eb86fa2dea845b32 Mon Sep 17 00:00:00 2001 From: Roeniss Moon Date: Sun, 20 Apr 2025 03:48:34 +0900 Subject: [PATCH 068/305] feat(git): add gcfu alias for `commit --fixup` (#13027) --- plugins/git/README.md | 1 + plugins/git/git.plugin.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/git/README.md b/plugins/git/README.md index bcadc4713..edddc8cd8 100644 --- a/plugins/git/README.md +++ b/plugins/git/README.md @@ -79,6 +79,7 @@ plugins=(... git) | `gcss` | `git commit -S -s` | | `gcssm` | `git commit -S -s -m` | | `gcf` | `git config --list` | +| `gcfu` | `git commit --fixup` | | `gdct` | `git describe --tags $(git rev-list --tags --max-count=1)` | | `gd` | `git diff` | | `gdca` | `git diff --cached` | diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index f34c0726b..1d043da35 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -200,6 +200,7 @@ alias gc!='git commit --verbose --amend' alias gcn='git commit --verbose --no-edit' alias gcn!='git commit --verbose --no-edit --amend' alias gcf='git config --list' +alias gcfu='git commit --fixup' alias gdct='git describe --tags $(git rev-list --tags --max-count=1)' alias gd='git diff' alias gdca='git diff --cached' From 92bad89f8a9141fcdc0b682941ee46729b6e4cb6 Mon Sep 17 00:00:00 2001 From: Arthur <82575487+arthur-mountain@users.noreply.github.com> Date: Sun, 20 Apr 2025 02:55:23 +0800 Subject: [PATCH 069/305] docs(asdf): update usage example (#13055) --- plugins/asdf/README.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/plugins/asdf/README.md b/plugins/asdf/README.md index e8ff2d740..69db6930a 100644 --- a/plugins/asdf/README.md +++ b/plugins/asdf/README.md @@ -19,21 +19,30 @@ Example for installing the nodejs plugin and the many runtimes for it: ```sh # Add plugin to asdf -asdf plugin add nodejs +asdf plugin add nodejs -# Install the latest available nodejs runtime version +# Install the latest available version asdf install nodejs latest -# Install nodejs v16.5.0 runtime version +# Uninstall the latest version +asdf uninstall nodejs latest + +# Install a specific version asdf install nodejs 16.5.0 -# Set the latest version in .tools-version in the current working directory +# Set the latest version in .tool-versions of the `current directory` asdf set nodejs latest -# Set a version globally that will apply to all directories under $HOME -asdf set -u nodejs 16.5.0 +# Set a specific version in the `parent directory` +asdf set -p nodejs 16.5.0 # -p is shorthand for --parent + +# Set a global version under `$HOME` +asdf set -u nodejs 16.5.0 # -u is shorthand for --home ``` +For more commands, run `asdf help` or refer to the +[asdf CLI documentation](https://asdf-vm.com/manage/commands.html#all-commands). + ## Maintainer - [@RobLoach](https://github.com/RobLoach) From de1ca65dcaebd19f5ca6626616bb79b529362458 Mon Sep 17 00:00:00 2001 From: Adam Page Date: Sat, 19 Apr 2025 15:08:03 -0400 Subject: [PATCH 070/305] feat(procs): support completion for `procs<0.14` (#13053) Co-authored-by: Carlo Sala --- plugins/procs/procs.plugin.zsh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/plugins/procs/procs.plugin.zsh b/plugins/procs/procs.plugin.zsh index 332985bf9..8b15f1d5d 100644 --- a/plugins/procs/procs.plugin.zsh +++ b/plugins/procs/procs.plugin.zsh @@ -3,11 +3,19 @@ if (( ! $+commands[procs] )); then fi # If the completion file doesn't exist yet, we need to autoload it and -# bind it to `minikube`. Otherwise, compinit will have already done that. +# bind it to `procs`. Otherwise, compinit will have already done that. if [[ ! -f "$ZSH_CACHE_DIR/completions/_procs" ]]; then typeset -g -A _comps autoload -Uz _procs _comps[procs]=_procs fi -procs --gen-completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs" &| +{ + autoload -Uz is-at-least + local _version=$(procs --version) + if is-at-least "0.14" "${_version#procs }"; then + procs --gen-completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs" + else + procs --completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs" + fi +} &| From 959b6cf5eed78f108dc6e0f46b53816f5168dd3a Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Thu, 24 Apr 2025 15:42:26 +0200 Subject: [PATCH 071/305] fix(emacs): do not emit ANSI escape codes in vterm Closes #13067 --- plugins/emacs/emacs.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/emacs/emacs.plugin.zsh b/plugins/emacs/emacs.plugin.zsh index 5aa621803..3ed6cee19 100644 --- a/plugins/emacs/emacs.plugin.zsh +++ b/plugins/emacs/emacs.plugin.zsh @@ -35,7 +35,7 @@ alias eeval="$EMACS_PLUGIN_LAUNCHER --eval" alias eframe='emacsclient --alternate-editor="" --create-frame' # Emacs ANSI Term tracking -if [[ -n "$INSIDE_EMACS" ]]; then +if [[ -n "$INSIDE_EMACS" ]] && [[ "$INSIDE_EMACS" != "vterm" ]]; then chpwd_emacs() { print -P "\033AnSiTc %d"; } print -P "\033AnSiTc %d" # Track current working directory print -P "\033AnSiTu %n" # Track username From 44913a1f16424f21b5989a0dd7d2c95d02047cec Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Sun, 27 Apr 2025 10:25:02 +0200 Subject: [PATCH 072/305] feat(wd): update to v0.10.0 (#13093) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/wd/_wd.sh | 4 ++++ plugins/wd/wd.sh | 24 ++++++++++++++++++++++-- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 46e7727b8..70f3d03da 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -30,7 +30,7 @@ dependencies: plugins/wd: repo: mfaerevaag/wd branch: master - version: tag:v0.9.3 + version: tag:v0.10.0 precopy: | set -e rm -r test diff --git a/plugins/wd/_wd.sh b/plugins/wd/_wd.sh index 46b032f78..7c416086d 100644 --- a/plugins/wd/_wd.sh +++ b/plugins/wd/_wd.sh @@ -37,6 +37,7 @@ function _wd() { 'rm:Removes the given warp point' 'list:Outputs all stored warp points' 'ls:Show files from given warp point' + 'open:Open warp point in the default file explorer' 'path:Show path to given warp point' 'show:Outputs all warp points that point to the current directory or shows a specific target directory for a point' 'help:Show this extremely helpful text' @@ -73,6 +74,9 @@ function _wd() { ls) _describe -t points "Warp points" warp_points && ret=0 ;; + open) + _describe -t points "Warp points" warp_points && ret=0 + ;; path) _describe -t points "Warp points" warp_points && ret=0 ;; diff --git a/plugins/wd/wd.sh b/plugins/wd/wd.sh index f8b27828f..f7a22ff7d 100755 --- a/plugins/wd/wd.sh +++ b/plugins/wd/wd.sh @@ -8,7 +8,7 @@ # @github.com/mfaerevaag/wd # version -readonly WD_VERSION=0.9.3 +readonly WD_VERSION=0.10.0 # colors readonly WD_BLUE="\033[96m" @@ -86,6 +86,7 @@ Commands: show Print warp points to current directory list Print all stored warp points ls Show files from given warp point (ls) + open Open the warp point in the default file explorer (open / xdg-open) path Show the path to given warp point (pwd) clean Remove points warping to nonexistent directories (will prompt unless --force is used) @@ -377,6 +378,21 @@ wd_ls() ls "${dir/#\~/$HOME}" } +wd_open() +{ + wd_getdir "$1" + if command -v open >/dev/null 2>&1; then + # MacOS, Ubuntu (alias) + open "${dir/#\~/$HOME}" + elif command -v xdg-open >/dev/null 2>&1; then + # Most Linux desktops + xdg-open "${dir/#\~/$HOME}" + else + echo "No known file opener found (need 'open' or 'xdg-open')." >&2 + exit 1 + fi +} + wd_path() { wd_getdir "$1" @@ -521,7 +537,7 @@ do done < "$wd_config_file" # get opts -args=$(getopt -o a:r:c:lhs -l add:,rm:,clean,list,ls:,path:,help,show -- $*) +args=$(getopt -o a:r:c:lhs -l add:,rm:,clean,list,ls:,open:,path:,help,show -- $*) # check if no arguments were given, and that version is not set if [[ ($? -ne 0 || $#* -eq 0) && -z $wd_print_version ]] @@ -571,6 +587,10 @@ else wd_ls "$2" break ;; + "-o"|"--open"|"open") + wd_open "$2" + break + ;; "-p"|"--path"|"path") wd_path "$2" break From 476a7fc89e38a0fdc483ec6452394f2f2e0413bf Mon Sep 17 00:00:00 2001 From: Michael Elliot Date: Sun, 27 Apr 2025 16:26:11 +0800 Subject: [PATCH 073/305] chore: fix typo (#13089) --- oh-my-zsh.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh index b1032841c..2e885219c 100644 --- a/oh-my-zsh.sh +++ b/oh-my-zsh.sh @@ -192,7 +192,7 @@ _omz_source() { fi } -# Load all of the lib files in ~/oh-my-zsh/lib that end in .zsh +# Load all of the lib files in ~/.oh-my-zsh/lib that end in .zsh # TIP: Add files you don't want in git to .gitignore for lib_file ("$ZSH"/lib/*.zsh); do _omz_source "lib/${lib_file:t}" From 137bfbbfd1e39897f02ca47e9f010b0d81cc15ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 27 Apr 2025 14:55:23 +0200 Subject: [PATCH 074/305] chore(deps): bump certifi in /.github/workflows/dependencies (#13094) Bumps [certifi](https://github.com/certifi/python-certifi) from 2025.1.31 to 2025.4.26. - [Commits](https://github.com/certifi/python-certifi/compare/2025.01.31...2025.04.26) --- updated-dependencies: - dependency-name: certifi dependency-version: 2025.4.26 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index f2044a5f5..63eadd07d 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,4 +1,4 @@ -certifi==2025.1.31 +certifi==2025.4.26 charset-normalizer==3.4.1 idna==3.10 PyYAML==6.0.2 From 2ee4f9808ff50bf35f36b28657933afd6d80e268 Mon Sep 17 00:00:00 2001 From: Anand Buddhdev Date: Tue, 29 Apr 2025 10:34:33 +0200 Subject: [PATCH 075/305] docs(python): fix typo (#13096) --- plugins/python/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/python/README.md b/plugins/python/README.md index 490cf88f1..ca424ea55 100644 --- a/plugins/python/README.md +++ b/plugins/python/README.md @@ -34,7 +34,7 @@ virtual environments: `/bin/activate`, and automatically deactivate it when navigating out of it (keeps venv activated in subdirectories). - To enable the feature, set `PYTHON_AUTO_VRUN=true` before sourcing oh-my-zsh. - - The plugin activates the first existing virtual environment, in order, appearing in `$PYTON_VENV_NAMES`. + - The plugin activates the first existing virtual environment, in order, appearing in `$PYTHON_VENV_NAMES`. The default virtual environment name is `venv`. To use a different name, set `PYTHON_VENV_NAME=`. For example: `PYTHON_VENV_NAME=".venv"` From f6a7bbf81a18d30f75bad72de3398d0f55c8792b Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Tue, 29 Apr 2025 10:42:26 +0200 Subject: [PATCH 076/305] fix(debian): avoid `aptitude` hardcoding Closes #13095 --- plugins/debian/debian.plugin.zsh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/debian/debian.plugin.zsh b/plugins/debian/debian.plugin.zsh index 5ef4cfb67..980440c0f 100644 --- a/plugins/debian/debian.plugin.zsh +++ b/plugins/debian/debian.plugin.zsh @@ -83,9 +83,9 @@ else } alias ac="su -ls '$apt_pref clean' root" alias ad="su -lc '$apt_pref update' root" - alias adg="su -lc '$apt_pref update && aptitude $apt_upgr' root" - alias adu="su -lc '$apt_pref update && aptitude dist-upgrade' root" - alias afu="su -lc '$apt-file update'" + alias adg="su -lc '$apt_pref update && $apt_pref $apt_upgr' root" + alias adu="su -lc '$apt_pref update && $apt_pref dist-upgrade' root" + alias afu="su -lc 'apt-file update'" alias au="su -lc '$apt_pref $apt_upgr' root" function ai() { cmd="su -lc '$apt_pref install $@' root" From 8648cd640b428bdd7dea65886c2671ef1e8ffe32 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 4 May 2025 17:22:51 +0200 Subject: [PATCH 077/305] chore(deps): bump charset-normalizer in /.github/workflows/dependencies (#13100) Bumps [charset-normalizer](https://github.com/jawah/charset_normalizer) from 3.4.1 to 3.4.2. - [Release notes](https://github.com/jawah/charset_normalizer/releases) - [Changelog](https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md) - [Commits](https://github.com/jawah/charset_normalizer/compare/3.4.1...3.4.2) --- updated-dependencies: - dependency-name: charset-normalizer dependency-version: 3.4.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index 63eadd07d..e73c1b5ca 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,5 +1,5 @@ certifi==2025.4.26 -charset-normalizer==3.4.1 +charset-normalizer==3.4.2 idna==3.10 PyYAML==6.0.2 requests==2.32.3 From 51d0e0aa1de9c7f96012b9a0feda6509ed2a025b Mon Sep 17 00:00:00 2001 From: Hanashiko <129686115+Hanashiko@users.noreply.github.com> Date: Mon, 5 May 2025 14:00:29 +0300 Subject: [PATCH 078/305] docs(pip): add explanation for aliases (#13103) --- plugins/pip/README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/plugins/pip/README.md b/plugins/pip/README.md index 70d40c79f..9d1daca9f 100644 --- a/plugins/pip/README.md +++ b/plugins/pip/README.md @@ -20,17 +20,17 @@ the next time you autocomplete `pip install`. ## Aliases -| Alias | Description | -| :------- | :-------------------------------------------- | -| pipi | Install packages | -| pipig | Install package from GitHub repository | -| pipigb | Install package from GitHub branch | -| pipigp | Install package from GitHub pull request | -| pipu | Upgrade packages | -| pipun | Uninstall packages | -| pipgi | Grep through installed packages | -| piplo | List outdated packages | -| pipreq | Create requirements file | -| pipir | Install packages from `requirements.txt` file | -| pipupall | Update all installed packages | -| pipunall | Uninstall all installed packages | +| Alias | Command | Description | +| :--------|:----------------------------------------------------------------------------------|:--------------------------------------------- | +| pipi | `pip install` | Install packages | +| pipig | `pip install "git+https://github.com/user/repo.git"` | Install package from GitHub repository | +| pipigb | `pip install "git+https://github.com/user/repo.git@branch"` | Install package from GitHub branch | +| pipigp | `pip install "git+https://github.com/user/repo.git@refs/pull/PR_NUMBER/head"` | Install package from GitHub pull request | +| pipu | `pip install --upgrade` | Upgrade packages | +| pipun | `pip uninstall` | Uninstall packages | +| pipgi | `pip freeze \| grep` | Grep through installed packages | +| piplo | `pip list --outdated` | List outdated packages | +| pipreq | `pip freeze > requirements.txt` | Create requirements file | +| pipir | `pip install -r requirements.txt` | Install packages from `requirements.txt` file | +| pipupall | `pip list --outdated \| awk 'NR > 2 { print $1 }' \| xargs pip install --upgrade` | Update all installed packages | +| pipunall | `pip list --format freeze \| cut -d= -f1 \| xargs pip uninstall` | Uninstall all installed packages | From 62afbdebb96bf91c044a92b75d86f85a67da67a7 Mon Sep 17 00:00:00 2001 From: Cyril Plisko Date: Tue, 6 May 2025 18:27:04 +0300 Subject: [PATCH 079/305] feat(jj): add `jjgfa` alias (#13105) --- plugins/jj/README.md | 1 + plugins/jj/jj.plugin.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/jj/README.md b/plugins/jj/README.md index cd43ed11b..541b8f907 100644 --- a/plugins/jj/README.md +++ b/plugins/jj/README.md @@ -20,6 +20,7 @@ plugins=(... jj) | jje | `jj edit` | | jjgcl | `jj git clone` | | jjgf | `jj git fetch` | +| jjgfa | `jj git fetch --all-remotes` | | jjgp | `jj git push` | | jjl | `jj log` | | jjla | `jj log -r "all()"` | diff --git a/plugins/jj/jj.plugin.zsh b/plugins/jj/jj.plugin.zsh index 06c04958b..825460517 100644 --- a/plugins/jj/jj.plugin.zsh +++ b/plugins/jj/jj.plugin.zsh @@ -42,6 +42,7 @@ alias jjds='jj desc' alias jje='jj edit' alias jjgcl='jj git clone' alias jjgf='jj git fetch' +alias jjgfa='jj git fetch --all-remotes' alias jjgp='jj git push' alias jjl='jj log' alias jjla='jj log -r "all()"' From 3f8ea81b89cda583acea098c9b7353c295619d4d Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Sun, 11 May 2025 11:06:03 +0200 Subject: [PATCH 080/305] feat(z): update to cf9225fe (#13115) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/z/LICENSE | 2 +- plugins/z/z.plugin.zsh | 13 +++++++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 70f3d03da..23168b91a 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -38,7 +38,7 @@ dependencies: plugins/z: branch: master repo: agkozak/zsh-z - version: dd94ef04acc41748ba171eb219971cb455e0040b + version: cf9225feebfae55e557e103e95ce20eca5eff270 precopy: | set -e test -e README.md && mv -f README.md MANUAL.md diff --git a/plugins/z/LICENSE b/plugins/z/LICENSE index 162cba8d1..b36aeb408 100644 --- a/plugins/z/LICENSE +++ b/plugins/z/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2018-2024 Alexandros Kozak +Copyright (c) 2018-2025 Alexandros Kozak Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/plugins/z/z.plugin.zsh b/plugins/z/z.plugin.zsh index bf15b01de..39b832292 100644 --- a/plugins/z/z.plugin.zsh +++ b/plugins/z/z.plugin.zsh @@ -4,7 +4,7 @@ # # https://github.com/agkozak/zsh-z # -# Copyright (c) 2018-2024 Alexandros Kozak +# Copyright (c) 2018-2025 Alexandros Kozak # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -294,7 +294,16 @@ zshz() { owner=${ZSHZ_OWNER:-${_Z_OWNER}} if (( ZSHZ[USE_FLOCK] )); then - ${ZSHZ[MV]} "$tempfile" "$datafile" 2> /dev/null || ${ZSHZ[RM]} -f "$tempfile" + # An unsual case: if inside Docker container where datafile could be bind + # mounted + if [[ -r '/proc/1/cgroup' && "$(< '/proc/1/cgroup')" == *docker* ]]; then + print "$(< "$tempfile")" > "$datafile" 2> /dev/null + ${ZSHZ[RM]} -f "$tempfile" + # All other cases + else + ${ZSHZ[MV]} "$tempfile" "$datafile" 2> /dev/null || + ${ZSHZ[RM]} -f "$tempfile" + fi if [[ -n $owner ]]; then ${ZSHZ[CHOWN]} ${owner}:"$(id -ng ${owner})" "$datafile" From c34c1da736f4f162206e1153e66850788f3e2e16 Mon Sep 17 00:00:00 2001 From: Lorenzo Bettini Date: Mon, 12 May 2025 09:56:26 +0200 Subject: [PATCH 081/305] docs(vi-mode): explaination for text objects (#13116) --- plugins/vi-mode/README.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/plugins/vi-mode/README.md b/plugins/vi-mode/README.md index 6e781f296..bc78cfa3d 100644 --- a/plugins/vi-mode/README.md +++ b/plugins/vi-mode/README.md @@ -46,7 +46,7 @@ hasn't been defined by theme, *Insert mode* is not displayed by default. You can change these indicators by setting the `MODE_INDICATOR` (*Normal mode*) and `INSERT_MODE_INDICATORS` (*Insert mode*) variables. -This settings support Prompt Expansion sequences. For example: +These settings support Prompt Expansion sequences. For example: ```zsh MODE_INDICATOR="%F{white}+%f" @@ -157,6 +157,27 @@ NOTE: delete/kill commands (`dd`, `D`, `c{motion}`, `C`, `x`,`X`) and yank comma (`y`, `Y`) will copy to the clipboard. Contents can then be put back using paste commands (`P`, `p`). +## Text objects + +Standard text objects are supported with `i` ("inside") and `a` ("around"), e.g., for words; thus, you can select the word the cursor is in with `viw`, or delete the current word, including surrounding spaces, with `daw`. + +For other text objects, you can rely on the built-in functionality of Zsh and enable it accordingly. +For example, for quoted strings, you can copy the commented snippet of : place this in your `.zsrhc` file, e.g., after sourcing oh-my-zsh: + +```sh +autoload -U select-quoted +zle -N select-quoted +for m in visual viopp; do + for c in {a,i}{\',\",\`}; do + bindkey -M $m $c select-quoted + done +done +``` + +Now, in normal mode, you can select everything inside a double-quoted string with `vi"`. +Note that this works even if you're not already inside a quoted string. +For example, you can replace everything inside a single-quoted string in the current line, from wherever the cursor is, with `ci'`. + ## Known issues ### Low `$KEYTIMEOUT` From c95509ebfdbcc3c497f12697cfd2717bcb0a528b Mon Sep 17 00:00:00 2001 From: Igor Aleksandrov Date: Thu, 15 May 2025 01:48:50 +0400 Subject: [PATCH 082/305] feat(kamal): add autocomplete support and aliases for Kamal (https://kamal-deploy.org/) (#13080) --- plugins/kamal/README.md | 16 + plugins/kamal/_kamal | 691 +++++++++++++++++++++++++++++++++ plugins/kamal/kamal.plugin.zsh | 25 ++ 3 files changed, 732 insertions(+) create mode 100644 plugins/kamal/README.md create mode 100644 plugins/kamal/_kamal create mode 100644 plugins/kamal/kamal.plugin.zsh diff --git a/plugins/kamal/README.md b/plugins/kamal/README.md new file mode 100644 index 000000000..af5716826 --- /dev/null +++ b/plugins/kamal/README.md @@ -0,0 +1,16 @@ +# Kamal + +This plugin provides completion for [Kamal](https://kamal-deploy.org/) as well as some +aliases for frequent Kamal commands. + +To use it, add kamal to the plugins array of your zshrc file: + +```zsh +plugins=(... kamal) +``` + +## Aliase + +| Alias | Command | Description | +|-----------|----------------------------------|----------------------------------------------------------------------------------| +| kad | `kamal deploy` | Deploy app to servers | diff --git a/plugins/kamal/_kamal b/plugins/kamal/_kamal new file mode 100644 index 000000000..52b29e814 --- /dev/null +++ b/plugins/kamal/_kamal @@ -0,0 +1,691 @@ +#compdef kamal + +# Description +# ----------- +# zsh completion for Kamal (https://kamal-deploy.org/) +# ------------------------------------------------------------------------- +# Authors +# ------- +# * Igor Aleksandrov +# ------------------------------------------------------------------------- +# Inspiration +# ----------- +# * docker-compose ohmyzsh completion script by @sdurrheimer Steve Durrheimer +# ------------------------------------------------------------------------- + +# _kamal_commands() { +# # Only initialize if empty +# if (( ${#kamal_commands} == 0 )); then +# kamal_commands=( +# accessory +# app +# audit +# build +# config +# deploy +# details +# docs +# help +# init +# lock +# proxy +# prune +# redeploy +# registry +# remove +# rollback +# secrets +# server +# setup +# upgrade +# version +# ) +# fi + +# _values 'Kamal commands' $kamal_commands +# } + +typeset -gr _kamal_commands=( + 'accessory:Control accessory services' + 'app:Control application deployment' + 'audit:Audit security of deployment' + 'build:Build and manage app images' + 'config:Show effective configuration' + 'deploy:Deploy app to servers' + 'details:Show details about deployment' + 'docs:Open documentation in browser' + 'help:Show command help' + 'init:Initialize new Kamal project' + 'lock:Manage deployment locks' + 'proxy:Control reverse proxy' + 'prune:Clean up containers and images' + 'redeploy:Redeploy current version' + 'registry:Manage Docker registry access' + 'remove:Remove app from servers' + 'rollback:Rollback to a previous version' + 'secrets:Manage deployment secrets' + 'server:Control server configuration' + 'setup:Setup initial deployment' + 'upgrade:Upgrade deployment' + 'version:Show Kamal version' +) + +# Helper function to display messages +_kamal_message() { + local msg="$1" + _kamal_message "==> $msg" +} + +# Helper function to extract destination names from ./config/deploy.*.yml +_kamal_destinations() { + local -a dests + local file + + # Check if config directory exists + if [[ ! -d "config" ]]; then + _kamal_message "Cannot find Kamal configuration directory at ./config" && return 1 + fi + + for file in config/deploy.*.yml(N); do + [[ $file =~ config/deploy\.(.+)\.yml ]] && dests+=("${match[1]}") + done + + _values 'Destination' $dests +} + +# Define global _kamal_flags array +typeset -ga _kamal_flags +_kamal_flags=( + '(-v --verbose )'{-v,--verbose}'[Detailed logging]' + '(--no-verbose --skip-verbose)'{--no-verbose,--skip-verbose}'[No detailed logging]' + '(-q --quiet --no-quiet --skip-quiet)'{-q,--quiet}'[Minimal logging]' + '(-q --quiet --no-quiet --skip-quiet)'{--no-quiet,--skip-quiet}'[No minimal logging]' + '--version=[Run commands against a specific app version]:version' + '(-p --primary --no-primary --skip-primary)'{-p,--primary}'[Run commands only on primary host instead of all]' + '(-p --primary --no-primary --skip-primary)'{--no-primary,--skip-primary}'[Do not run commands only on primary host]' + '(-h --hosts)'{-h,--hosts=}'[Run commands on these hosts instead of all]:hosts' + '(-r --roles)'{-r,--roles=}'[Run commands on these roles instead of all]:roles' + '(-c --config-file)'{-c,--config-file=}'[Path to config file]:config file:_files' + '(-d --destination)'{-d,--destination=}'[Specify destination to be used for config file]:destination:_kamal_destinations' + '(-H --skip-hooks)'{-H,--skip-hooks}'[Do not run hooks]' +) + +_kamal() { + local context state state_descr line curcontext="$curcontext" + typeset -A opt_args + + local ret=1 + + _arguments -C \ + $_kamal_flags \ + '1: :->command' \ + '*:: :->args' && ret=0 + + case $state in + (command) + # First argument - show available commands + _describe -t kamal-commands "Kamal commands" _kamal_commands && ret=0 + ;; + (args) + # Subsequent arguments - handle based on the command + case $words[1] in + (accessory) + _kamal_accessory && ret=0 + ;; + (app) + _kamal_app && ret=0 + ;; + (audit) + _arguments $_kamal_flags && ret=0 + ;; + (build) + _kamal_build && ret=0 + ;; + (config) + _arguments $_kamal_flags && ret=0 + ;; + (deploy) + _arguments $_kamal_flags && ret=0 + ;; + (details) + _arguments $_kamal_flags && ret=0 + ;; + (docs) + _arguments $_kamal_flags && ret=0 + ;; + (help) + _kamal_help && ret=0 + ;; + (init) + local -a init_flags + init_flags=( + $_kamal_flags + '(--bundle --no-bundle --skip-bundle)--bundle[Add Kamal to the Gemfile and create a bin/kamal binstub]' + '(--bundle --no-bundle --skip-bundle)--no-bundle[Do not add Kamal to the Gemfile and create a bin/kamal binstub]' + '(--bundle --no-bundle --skip-bundle)--skip-bundle[Skip add Kamal to the Gemfile and create a bin/kamal binstub]' + ) + _arguments $init_flags && ret=0 + ;; + (lock) + _kamal_lock && ret=0 + ;; + (proxy) + _kamal_proxy && ret=0 + ;; + (prune) + _kamal_prune && ret=0 + ;; + (redeploy) + _arguments $_kamal_flags && ret=0 + ;; + (registry) + _kamal_registry && ret=0 + ;; + (remove) + local -a remove_flags + remove_flags=( + $_kamal_flags + '(-y --confirmed --no-confirmed --skip-confirmed)'{-y,--confirmed}'[Proceed without confirmation question]' + '(-y --confirmed --no-confirmed --skip-confirmed)--no-confirmed[Proceed without confirmation question]' + '(-y --confirmed --no-confirmed --skip-confirmed)--skip-confirmed[Proceed without confirmation question]' + ) + _arguments $remove_flags && ret=0 + ;; + (rollback) + if (( CURRENT == 2 )); then + _kamal_message "Enter the version to rollback to" && ret=0 + else + _values $_kamal_flags && ret=0 + fi + ;; + (secrets) + _kamal_secrets && ret=0 + ;; + (server) + _kamal_server && ret=0 + ;; + (setup) + local -a setup_flags + setup_flags=( + $_kamal_flags + '(-P --skip-push)'{-P,--skip-push}'[Skip image build and push]' + ) + _arguments $setup_flags && ret=0 + ;; + (upgrade) + local -a upgrade_flags + upgrade_flags=( + $_kamal_flags + '(-y --confirmed --no-confirmed --skip-confirmed)'{-y,--confirmed}'[Proceed without confirmation question]' + '(-y --confirmed --no-confirmed --skip-confirmed)--no-confirmed[Do not proceed without confirmation question]' + '(-y --confirmed --no-confirmed --skip-confirmed)--skip-confirmed[Skip confirmation question]' + '(--rolling --no-rolling --skip-rolling)--rolling[Upgrade one host at a time]' + '(--rolling --no-rolling --skip-rolling)--no-rolling[Do not upgrade one host at a time]' + '(--rolling --no-rolling --skip-rolling)--skip-rolling[Skip rolling upgrade]' + ) + _arguments $upgrade_flags && ret=0 + ;; + (version) + _arguments $_kamal_flags && ret=0 + esac + ;; + esac + + return ret +} + +_kamal_accessory() { + local context state line + typeset -A opt_args + local ret=1 + + # Define accessory subcommands + local -a accessory_subcommands + accessory_subcommands=( + "boot:Boot new accessory service on host (use NAME=all to boot all accessories)" + "details:Show details about accessory on host (use NAME=all to show all accessories)" + "exec:Execute a custom command on servers within the accessory container (use --help to show options)" + "help:Describe subcommands or one specific subcommand" + "logs:Show log lines from accessory on host (use --help to show options)" + "reboot:Reboot existing accessory on host (stop container, remove container, start new container; use NAME=all to boot all accessories)" + "remove:Remove accessory container, image and data directory from host (use NAME=all to remove all accessories)" + "restart:Restart existing accessory container on host" + "start:Start existing accessory container on host" + "stop:Stop existing accessory container on host" + "upgrade:Upgrade accessories from Kamal 1.x to 2.0 (restart them in 'kamal' network)" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t accessory-commands "Kamal accessory commands" accessory_subcommands && ret=0 + ;; + (args) + case $words[1] in + (boot|details|exec|logs|reboot|remove|restart|start|stop) + # These commands require a NAME parameter + if (( CURRENT == 2 )); then + # At the NAME position - we could add accessory name completion here + # if we had a way to list available accessories + _kamal_message "Specify an accessory name (or 'all' for all accessories)" && ret=0 + elif [[ "$words[1]" == "exec" && CURRENT == 3 ]]; then + # For exec, the 3rd argument is a command + _kamal_message "Enter a command to execute" && ret=0 + elif (( CURRENT > 2 )) && [[ "$words[1]" != "exec" || CURRENT > 3 ]]; then + _values $_kamal_flags && ret=0 + fi + ;; + (help) + # Remove help itself from the list of commands + accessory_subcommands=("${(@)accessory_subcommands:#help*}") + _describe -t accessory-help-commands "Kamal accessory help commands" accessory_subcommands + ;; + (upgrade) + # For upgrade, show flags immediately + _arguments $_kamal_flags && ret=0 + ;; + esac + ;; + esac + + return ret +} + +_kamal_app() { + local context state line + typeset -A opt_args + local ret=1 + + local -a app_subcommands + app_subcommands=( + "boot:Boot app on servers (or reboot app if already running)" + "containers:Show app containers on servers" + "details:Show details about app containers" + "exec:Execute a custom command on servers within the app container (use --help to show options)" + "help:Describe subcommands or one specific subcommand" + "images:Show app images on servers" + "logs:Show log lines from app on servers (use --help to show options)" + "remove:Remove app containers and images from servers" + "stale_containers:Detect app stale containers" + "start:Start existing app container on servers" + "stop:Stop app container on servers" + "version:Show app version currently running on servers" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t app-commands "Kamal app commands" app_subcommands && ret=0 + ;; + (args) + case $words[1] in + (boot|containers|details|images|logs|remove|stale_containers|start|stop) + _arguments $_kamal_flags && ret=0 + ;; + (exec) + # For exec, the next argument is a command + if (( CURRENT == 2 )); then + _kamal_message "Enter a command to execute" && ret=0 + else + _values $_kamal_flags && ret=0 + fi + ;; + (help) + # Remove help itself from the list of commands + app_subcommands=("${(@)app_subcommands:#help*}") + _describe -t app-help-commands "Kamal app help commands" app_subcommands + ;; + esac + ;; + esac + + return ret +} + +_kamal_build() { + local context state line + typeset -A opt_args + local ret=1 + + local -a build_subcommands + build_subcommands=( + "create:Create a build setup" + "deliver:Build app and push app image to registry then pull image on servers" + "details:Show build setup" + "dev:Build using the working directory, tag it as dirty, and push to local image store." + "help:Describe subcommands or one specific subcommand" + "pull:Pull app image from registry onto servers" + "push:Build and push app image to registry" + "remove:Remove build setup" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t build-commands "Kamal build commands" build_subcommands && ret=0 + ;; + (args) + case $words[1] in + (create|deliver|details|dev|pull|push|remove) + _arguments $_kamal_flags && ret=0 + ;; + (help) + # Remove help itself from the list of commands + build_subcommands=("${(@)build_subcommands:#help*}") + _describe -t build-help-commands "Kamal build help commands" build_subcommands + ;; + esac + ;; + esac + + return ret +} + +_kamal_help() { + local ret=1 + + # Make sure kamal_commands is initialized properly + # if (( ${#kamal_commands} == 0 )); then + # _kamal_commands >/dev/null + # fi + + # If we already have a command after "help", return without suggestions + if (( CURRENT > 2 )); then + ret=0 + else + local -a help_commands + # Filter out help from the list of commands + help_commands=("${(@)_kamal_commands:#help}") + + _values 'Kamal help' $help_commands && ret=0 + fi + + return ret +} + +_kamal_lock() { + local context state line + typeset -A opt_args + local ret=1 + + local -a lock_subcommands + lock_subcommands=( + "acquire:Acquire the deploy lock" + "help:Describe subcommands or one specific subcommand" + "release:Release the deploy lock" + "status:Report lock status" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t lock-commands "Kamal lock commands" lock_subcommands && ret=0 + ;; + (args) + case $words[1] in + (acquire) + local -a acquire_flags + acquire_flags=( + $_kamal_flags + '(-m --message)'{-m,--message=}'[A lock message]:message:' # Required flag + ) + _arguments $acquire_flags && ret=0 + ;; + (release|status) + _arguments $_kamal_flags && ret=0 + ;; + (help) + # Remove help itself from the list of commands + lock_subcommands=("${(@)lock_subcommands:#help*}") + _describe -t lock-help-commands "Kamal lock help commands" lock_subcommands + ;; + esac + ;; + esac + + return ret +} + +_kamal_proxy() { + local context state line + typeset -A opt_args + local ret=1 + + local -a proxy_subcommands + proxy_subcommands=( + "boot:Boot proxy on servers" + "boot_config:Manage kamal-proxy boot configuration" + "details:Show details about proxy container from servers" + "help:Describe subcommands or one specific subcommand" + "logs:Show log lines from proxy on servers" + "reboot:Reboot proxy on servers (stop container, remove container, start new container)" + "remove:Remove proxy container and image from servers" + "restart:Restart existing proxy container on servers" + "start:Start existing proxy container on servers" + "stop:Stop existing proxy container on servers" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t proxy-commands "Kamal proxy commands" proxy_subcommands && ret=0 + ;; + (args) + case $words[1] in + (boot|details|logs|reboot|remove|restart|start|stop) + _arguments $_kamal_flags && ret=0 + ;; + (boot_config) + if (( CURRENT == 2 )); then + local -a boot_config_commands=( + "set:Set boot configuration" + "get:Get boot configuration" + "reset:Reset boot configuration" + ) + _describe -t boot-config-commands "Boot config commands" boot_config_commands && ret=0 + else + _values $_kamal_flags && ret=0 + fi + ;; + (help) + # Remove help itself from the list of commands + proxy_subcommands=("${(@)proxy_subcommands:#help*}") + _describe -t proxy-help-commands "Kamal proxy help commands" proxy_subcommands + ;; + esac + ;; + esac + + return ret +} + +_kamal_prune() { + local context state line + typeset -A opt_args + local ret=1 + + local -a prune_subcommands + prune_subcommands=( + "all:Prune unused images and stopped containers" + "containers:Prune all stopped containers, except the last n (default 5)" + "help:Describe subcommands or one specific subcommand" + "images:Prune unused images" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t prune-commands "Kamal prune commands" prune_subcommands && ret=0 + ;; + (args) + case $words[1] in + (all|containers|images) + _arguments $_kamal_flags && ret=0 + ;; + (help) + # Remove help itself from the list of commands + prune_subcommands=("${(@)prune_subcommands:#help*}") + _describe -t prune-help-commands "Kamal prune help commands" prune_subcommands + ;; + esac + ;; + esac + + return ret +} + +_kamal_registry() { + local context state line + typeset -A opt_args + local ret=1 + + local -a registry_subcommands + registry_subcommands=( + "help:Describe subcommands or one specific subcommand" + "login:Log in to registry locally and remotely" + "logout:Log out of registry locally and remotely" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t registry-commands "Kamal registry commands" registry_subcommands && ret=0 + ;; + (args) + case $words[1] in + (help) + # Remove help itself from the list of commands + registry_subcommands=("${(@)registry_subcommands:#help*}") + _describe -t registry-help-commands "Kamal registry help commands" registry_subcommands + ;; + (login|logout) + _arguments $_kamal_flags && ret=0 + ;; + esac + ;; + esac + + return ret +} + +_kamal_secrets() { + local context state line + typeset -A opt_args + local ret=1 + + local -a secrets_subcommands + secrets_subcommands=( + "extract:Extract a single secret from the results of a fetch call" + "fetch:Fetch secrets from a vault" + "help:Describe subcommands or one specific subcommand" + "print:Print the secrets (for debugging)" + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t secrets-commands "Kamal secrets commands" secrets_subcommands && ret=0 + ;; + (args) + case $words[1] in + (fetch) + local -a fetch_flags + fetch_flags=( + $_kamal_flags + '(-a --adapter)'{-a,--adapter=}'[Secret storage adapter]:adapter:(aws-parameter-store)' + ) + _arguments $fetch_flags && ret=0 + ;; + (extract|print) + _arguments $_kamal_flags && ret=0 + ;; + (help) + # Remove help itself from the list of commands + secrets_subcommands=("${(@)secrets_subcommands:#help*}") + _describe -t secrets-help-commands "Kamal secrets help commands" secrets_subcommands + ;; + esac + ;; + esac + + return ret +} + +_kamal_server() { + local context state line + typeset -A opt_args + local ret=1 + + local -a server_subcommands + server_subcommands=( + "bootstrap:Set up Docker to run Kamal apps" + "exec:Run a custom command on the server (use --help to show options)" + "help:Describe subcommands or one specific subcommand" + ) + + local -a server_flags + server_flags=( + $_kamal_flags + '(-i --interactive --no-interactive --skip-interactive)'{-i,--interactive}'[Run the command interactively]' + '(-i --interactive --no-interactive --skip-interactive)--no-interactive[Do not run the command interactively]' + '(-i --interactive --no-interactive --skip-interactive)--skip-interactive[Skip interactive mode]' + ) + + _arguments -C \ + '1: :->subcmd' \ + '*:: :->args' && ret=0 + + case $state in + (subcmd) + _describe -t server-commands "Kamal server commands" server_subcommands && ret=0 + ;; + (args) + case $words[1] in + (bootstrap) + _arguments $server_flags && ret=0 + ;; + (exec) + if (( CURRENT == 2 )); then + # For exec, the next argument is a command + _kamal_message "Enter a command to execute" && ret=0 + else + _values $server_flags && ret=0 + fi + ;; + (help) + # Remove help itself from the list of commands + server_subcommands=("${(@)server_subcommands:#help*}") + _describe -t server-help-commands "Kamal server help commands" server_subcommands + ;; + esac + ;; + esac + + return ret +} + +_kamal "$@" \ No newline at end of file diff --git a/plugins/kamal/kamal.plugin.zsh b/plugins/kamal/kamal.plugin.zsh new file mode 100644 index 000000000..e21ab4f92 --- /dev/null +++ b/plugins/kamal/kamal.plugin.zsh @@ -0,0 +1,25 @@ +# Find kamal binary (local ./bin/kamal or global) +function _kamal_command () { + if [ -x "./bin/kamal" ]; then + ./bin/kamal "$@" + else + command kamal "$@" + fi +} + +function which-kamal() { + if [ -x "./bin/kamal" ]; then + echo "Using local ./bin/kamal" + else + echo "Using global $(command -v kamal)" + fi +} + +# Use `_kamal_command`` function for `kamal` command +alias kamal='_kamal_command' + +# Aliases +alias kad='kamal deploy' + +# Hook up completion +compdef _kamal_command=kamal From 881c8b78d3e3ade9bccfddb3e616842807d07a59 Mon Sep 17 00:00:00 2001 From: tobii-dev <77458451+tobii-dev@users.noreply.github.com> Date: Sun, 18 May 2025 19:14:44 +0200 Subject: [PATCH 083/305] feat(termsupport): add WezTerm support (#13121) Co-authored-by: Carlo Sala --- lib/termsupport.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/termsupport.zsh b/lib/termsupport.zsh index d2fbf42cd..994c9c322 100644 --- a/lib/termsupport.zsh +++ b/lib/termsupport.zsh @@ -17,7 +17,7 @@ function title { : ${2=$1} case "$TERM" in - cygwin|xterm*|putty*|rxvt*|konsole*|ansi|mlterm*|alacritty*|st*|foot*|contour*) + cygwin|xterm*|putty*|rxvt*|konsole*|ansi|mlterm*|alacritty*|st*|foot*|contour*|wezterm*) print -Pn "\e]2;${2:q}\a" # set window name print -Pn "\e]1;${1:q}\a" # set tab name ;; From 40c2a72e03b1df100b3937dd44a9754f17c06c6d Mon Sep 17 00:00:00 2001 From: Kirill Fedorov Date: Thu, 22 May 2025 12:23:50 +0300 Subject: [PATCH 084/305] fix(history): handle HIST_STAMPS with whitespace in timestamp format (#13099) Co-authored-by: Kirill Fedorov --- lib/history.zsh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/history.zsh b/lib/history.zsh index 35da57de2..781a0e9de 100644 --- a/lib/history.zsh +++ b/lib/history.zsh @@ -18,10 +18,10 @@ function omz_history { print -u2 History file deleted. elif [[ $# -eq 0 ]]; then # if no arguments provided, show full history starting from 1 - builtin fc $stamp -l 1 + builtin fc "${stamp[@]}" -l 1 else # otherwise, run `fc -l` with a custom format - builtin fc $stamp -l "$@" + builtin fc "${stamp[@]}" -l "$@" fi } From 0354add542b6d769dbe39e10eb0caa0a11b2b716 Mon Sep 17 00:00:00 2001 From: G'lek Tarssza Date: Thu, 22 May 2025 03:27:34 -0600 Subject: [PATCH 085/305] fix(blinks)!: use `default` instead of `black` color (#13123) --- themes/blinks.zsh-theme | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/themes/blinks.zsh-theme b/themes/blinks.zsh-theme index ddb32f7c3..736683c9a 100644 --- a/themes/blinks.zsh-theme +++ b/themes/blinks.zsh-theme @@ -11,11 +11,11 @@ function _prompt_char() { # This theme works with both the "dark" and "light" variants of the # Solarized color schema. Set the SOLARIZED_THEME variable to one of # these two values to choose. If you don't specify, we'll assume you're -# using the "dark" variant. +# using neither variant. case ${SOLARIZED_THEME:-dark} in light) bkg=white;; - *) bkg=black;; + *) bkg=default;; esac ZSH_THEME_GIT_PROMPT_PREFIX=" [%{%B%F{blue}%}" From 1ed17ac0523ebc4d12e4e5324fd5f5ce5dafc668 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kalle=20Ahlstr=C3=B6m?= <71292737+kahlstrm@users.noreply.github.com> Date: Fri, 23 May 2025 16:43:53 +0300 Subject: [PATCH 086/305] feat(terraform): add `init -reconfigure` aliases` (#13129) --- plugins/terraform/README.md | 39 +++++++++++++------------- plugins/terraform/terraform.plugin.zsh | 2 ++ 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/plugins/terraform/README.md b/plugins/terraform/README.md index feaf21d40..6c139ac51 100644 --- a/plugins/terraform/README.md +++ b/plugins/terraform/README.md @@ -15,25 +15,26 @@ plugins=(... terraform) ## Aliases -| Alias | Command | -|---------|----------------------------------| -| `tf` | `terraform` | -| `tfa` | `terraform apply` | -| `tfaa` | `terraform apply -auto-approve` | -| `tfc` | `terraform console` | -| `tfd` | `terraform destroy` | -| `tfd!` | `terraform destroy -auto-approve`| -| `tff` | `terraform fmt` | -| `tffr` | `terraform fmt -recursive` | -| `tfi` | `terraform init` | -| `tfiu` | `terraform init -upgrade` | -| `tfo` | `terraform output` | -| `tfp` | `terraform plan` | -| `tfv` | `terraform validate` | -| `tfs` | `terraform state` | -| `tft` | `terraform test` | -| `tfsh` | `terraform show` | - +| Alias | Command | +| ------- | -------------------------------------- | +| `tf` | `terraform` | +| `tfa` | `terraform apply` | +| `tfaa` | `terraform apply -auto-approve` | +| `tfc` | `terraform console` | +| `tfd` | `terraform destroy` | +| `tfd!` | `terraform destroy -auto-approve` | +| `tff` | `terraform fmt` | +| `tffr` | `terraform fmt -recursive` | +| `tfi` | `terraform init` | +| `tfir` | `terraform init -reconfigure` | +| `tfiu` | `terraform init -upgrade` | +| `tfiur` | `terraform init -upgrade -reconfigure` | +| `tfo` | `terraform output` | +| `tfp` | `terraform plan` | +| `tfv` | `terraform validate` | +| `tfs` | `terraform state` | +| `tft` | `terraform test` | +| `tfsh` | `terraform show` | ## Prompt function diff --git a/plugins/terraform/terraform.plugin.zsh b/plugins/terraform/terraform.plugin.zsh index 046fabb03..0982fa193 100644 --- a/plugins/terraform/terraform.plugin.zsh +++ b/plugins/terraform/terraform.plugin.zsh @@ -24,7 +24,9 @@ alias 'tfd!'='terraform destroy -auto-approve' alias tff='terraform fmt' alias tffr='terraform fmt -recursive' alias tfi='terraform init' +alias tfir='terraform init -reconfigure' alias tfiu='terraform init -upgrade' +alias tfiur='terraform init -upgrade -reconfigure' alias tfo='terraform output' alias tfp='terraform plan' alias tfv='terraform validate' From d39804a5a6ba208159356b6ecd8308b559c588d0 Mon Sep 17 00:00:00 2001 From: Hanashiko <129686115+Hanashiko@users.noreply.github.com> Date: Sat, 24 May 2025 10:30:14 +0300 Subject: [PATCH 087/305] docs(universalarchive): expand documentation (#13136) --- plugins/universalarchive/README.md | 88 ++++++++++++++++++++---------- 1 file changed, 59 insertions(+), 29 deletions(-) diff --git a/plugins/universalarchive/README.md b/plugins/universalarchive/README.md index 93a1bd9fc..bcd33cea0 100644 --- a/plugins/universalarchive/README.md +++ b/plugins/universalarchive/README.md @@ -1,46 +1,76 @@ # universalarchive plugin -Lets you compress files by a command `ua `, supporting various -compression formats (e.g. 7z, tar.gz, lzma, ...). +The `universalarchive` plugin provides a convenient command-line interface for archiving files and directories using a wide variety of compression formats - without having to remember the exact syntax for each tool. -To enable it, add `universalarchive` to the plugins array in your zshrc file: +To enable it, add `universalarchive` to the plugins array in your `.zshrc` file: ```zsh plugins=(... universalarchive) ``` +## Features + - Compress files and directories using a simple, unified command: ua + - Automatically detects file/directory names to generate appropriate output names + - Supports fallback naming if an output file already exists + - Works with many common and advanced compression formats + - Designed for simplicity and quick use in the terminal + ## Usage -Run `ua ` to compress `` into an archive file using ``. -For example: - +Basic command format: ```sh -ua xz *.html +ua +``` +- ``: the archive format to use (e.g., `zip`, `tar.gz`, `xz`, `7z`, etc.) +- ``: one or more files or directories to compress + +## Examples: + +Compresses `notes.txt` and `images` into `notes.zip` +```sh +ua zip notes.txt images/ ``` -this command will compress all `.html` files in directory `folder` into `folder.xz`. +Creates `myproject.tar.gz` +```sh +ua tar.gz myproject/ +``` -This plugin saves you from having to remember which command line arguments compress a file. +Compresses all .log files into `current_folder.xz` +```sh +ua xz *.log +``` -## Supported compression formats +The plugin will generate a default archive filename based on the input: + - For a file, the output is derived from the file name without its extension. + - For a directory, it uses the directory name. + - For multiple files, it uses the name of the common parent directory. -| Extension | Description | -|:-----------------|:-------------------------------| -| `7z` | 7zip file | -| `bz2` | Bzip2 file | -| `gz` | Gzip file | -| `lzma` | LZMA archive | -| `lzo` | LZO archive | -| `rar` | WinRAR archive | -| `tar` | Tarball | -| `tbz`/`tar.bz2` | Tarball with bzip2 compression | -| `tgz`/`tar.gz` | Tarball with gzip compression | -| `tlz`/`tar.lzma` | Tarball with lzma compression | -| `txz`/`tar.xz` | Tarball with lzma2 compression | -| `tZ`/`tar.Z` | Tarball with LZW compression | -| `xz` | LZMA2 archive | -| `Z` | Z archive (LZW) | -| `zip` | Zip archive | -| `zst` | Zstd archive | + If the output file already exists, a unique filename is generated using `mktemp`. -See [list of archive formats](https://en.wikipedia.org/wiki/List_of_archive_formats) for more information regarding the archive formats. +## Supported Archive Formats + +| Format | Description | Tool Used | +|:-----------------|:-------------------------------|:-----------------| +| `7z` | 7zip archive | `7z` | +| `bz2` | Bzip2-compressed file | `bzip2` | +| `gz` | Gzip-compressed file | `gzip` | +| `lzma` | LZMA-compressed file | `lzma` | +| `lzo` | LZO-compressed file | `lzop` | +| `rar` | WinRAR archive | `rar` | +| `tar` | Uncompressed tarball | `tar` | +| `tbz`,`tar.bz2` | Tarball compressed with Bzip2 | `tar + bzip2` | +| `tgz`,`tar.gz` | Tarball compressed with Gzip | `tar + gzip` | +| `tlz`,`tar.lzma` | Tarball compressed with LZMA | `tar + lzma` | +| `txz`,`tar.xz` | Tarball compressed with LZMA2 | `tar + xz` | +| `tZ`,`tar.Z` | Tarball compressed with LZW | `tar + compress` | +| `xz` | XZ-compressed file | `xz` | +| `Z` | LZW-compressed file | `compress` | +| `zip` | Standard Zip archive | `zip` | +| `zst` | Zstandard-compressed file | `zstd` | + + > Note: Some formats may require specific tools to be installed on your system (e.g. `7z`, `rar`, `lzop`, `zstd`). Make sure these tools are available in your `$PATH`. + +## Auto-Completion + +The plugin provides tab-completion for supported formats and input files. Type `ua ` to see available formats, and `ua ` to browse files. From 13c702964c0287059a75eaec98cd71de51f4f19c Mon Sep 17 00:00:00 2001 From: Ilia Burtsev Date: Sat, 24 May 2025 13:39:17 +0300 Subject: [PATCH 088/305] fix(async): ensure `git_prompt_status` can be registered (#13134) --- lib/git.zsh | 198 ++++++++++++++++++++++++++-------------------------- 1 file changed, 99 insertions(+), 99 deletions(-) diff --git a/lib/git.zsh b/lib/git.zsh index a1b4d1587..f4d4229cb 100644 --- a/lib/git.zsh +++ b/lib/git.zsh @@ -39,6 +39,105 @@ function _omz_git_prompt_info() { echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${ref:gs/%/%%}${upstream:gs/%/%%}$(parse_git_dirty)${ZSH_THEME_GIT_PROMPT_SUFFIX}" } +function _omz_git_prompt_status() { + [[ "$(__git_prompt_git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]] && return + + # Maps a git status prefix to an internal constant + # This cannot use the prompt constants, as they may be empty + local -A prefix_constant_map + prefix_constant_map=( + '\?\? ' 'UNTRACKED' + 'A ' 'ADDED' + 'M ' 'MODIFIED' + 'MM ' 'MODIFIED' + ' M ' 'MODIFIED' + 'AM ' 'MODIFIED' + ' T ' 'MODIFIED' + 'R ' 'RENAMED' + ' D ' 'DELETED' + 'D ' 'DELETED' + 'UU ' 'UNMERGED' + 'ahead' 'AHEAD' + 'behind' 'BEHIND' + 'diverged' 'DIVERGED' + 'stashed' 'STASHED' + ) + + # Maps the internal constant to the prompt theme + local -A constant_prompt_map + constant_prompt_map=( + 'UNTRACKED' "$ZSH_THEME_GIT_PROMPT_UNTRACKED" + 'ADDED' "$ZSH_THEME_GIT_PROMPT_ADDED" + 'MODIFIED' "$ZSH_THEME_GIT_PROMPT_MODIFIED" + 'RENAMED' "$ZSH_THEME_GIT_PROMPT_RENAMED" + 'DELETED' "$ZSH_THEME_GIT_PROMPT_DELETED" + 'UNMERGED' "$ZSH_THEME_GIT_PROMPT_UNMERGED" + 'AHEAD' "$ZSH_THEME_GIT_PROMPT_AHEAD" + 'BEHIND' "$ZSH_THEME_GIT_PROMPT_BEHIND" + 'DIVERGED' "$ZSH_THEME_GIT_PROMPT_DIVERGED" + 'STASHED' "$ZSH_THEME_GIT_PROMPT_STASHED" + ) + + # The order that the prompt displays should be added to the prompt + local status_constants + status_constants=( + UNTRACKED ADDED MODIFIED RENAMED DELETED + STASHED UNMERGED AHEAD BEHIND DIVERGED + ) + + local status_text + status_text="$(__git_prompt_git status --porcelain -b 2> /dev/null)" + + # Don't continue on a catastrophic failure + if [[ $? -eq 128 ]]; then + return 1 + fi + + # A lookup table of each git status encountered + local -A statuses_seen + + if __git_prompt_git rev-parse --verify refs/stash &>/dev/null; then + statuses_seen[STASHED]=1 + fi + + local status_lines + status_lines=("${(@f)${status_text}}") + + # If the tracking line exists, get and parse it + if [[ "$status_lines[1]" =~ "^## [^ ]+ \[(.*)\]" ]]; then + local branch_statuses + branch_statuses=("${(@s/,/)match}") + for branch_status in $branch_statuses; do + if [[ ! $branch_status =~ "(behind|diverged|ahead) ([0-9]+)?" ]]; then + continue + fi + local last_parsed_status=$prefix_constant_map[$match[1]] + statuses_seen[$last_parsed_status]=$match[2] + done + fi + + # For each status prefix, do a regex comparison + for status_prefix in ${(k)prefix_constant_map}; do + local status_constant="${prefix_constant_map[$status_prefix]}" + local status_regex=$'(^|\n)'"$status_prefix" + + if [[ "$status_text" =~ $status_regex ]]; then + statuses_seen[$status_constant]=1 + fi + done + + # Display the seen statuses in the order specified + local status_prompt + for status_constant in $status_constants; do + if (( ${+statuses_seen[$status_constant]} )); then + local next_display=$constant_prompt_map[$status_constant] + status_prompt="$next_display$status_prompt" + fi + done + + echo $status_prompt +} + # Use async version if setting is enabled, or unset but zsh version is at least 5.0.6. # This avoids async prompt issues caused by previous zsh versions: # - https://github.com/ohmyzsh/ohmyzsh/issues/12331 @@ -246,105 +345,6 @@ function git_prompt_long_sha() { SHA=$(__git_prompt_git rev-parse HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER" } -function _omz_git_prompt_status() { - [[ "$(__git_prompt_git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]] && return - - # Maps a git status prefix to an internal constant - # This cannot use the prompt constants, as they may be empty - local -A prefix_constant_map - prefix_constant_map=( - '\?\? ' 'UNTRACKED' - 'A ' 'ADDED' - 'M ' 'MODIFIED' - 'MM ' 'MODIFIED' - ' M ' 'MODIFIED' - 'AM ' 'MODIFIED' - ' T ' 'MODIFIED' - 'R ' 'RENAMED' - ' D ' 'DELETED' - 'D ' 'DELETED' - 'UU ' 'UNMERGED' - 'ahead' 'AHEAD' - 'behind' 'BEHIND' - 'diverged' 'DIVERGED' - 'stashed' 'STASHED' - ) - - # Maps the internal constant to the prompt theme - local -A constant_prompt_map - constant_prompt_map=( - 'UNTRACKED' "$ZSH_THEME_GIT_PROMPT_UNTRACKED" - 'ADDED' "$ZSH_THEME_GIT_PROMPT_ADDED" - 'MODIFIED' "$ZSH_THEME_GIT_PROMPT_MODIFIED" - 'RENAMED' "$ZSH_THEME_GIT_PROMPT_RENAMED" - 'DELETED' "$ZSH_THEME_GIT_PROMPT_DELETED" - 'UNMERGED' "$ZSH_THEME_GIT_PROMPT_UNMERGED" - 'AHEAD' "$ZSH_THEME_GIT_PROMPT_AHEAD" - 'BEHIND' "$ZSH_THEME_GIT_PROMPT_BEHIND" - 'DIVERGED' "$ZSH_THEME_GIT_PROMPT_DIVERGED" - 'STASHED' "$ZSH_THEME_GIT_PROMPT_STASHED" - ) - - # The order that the prompt displays should be added to the prompt - local status_constants - status_constants=( - UNTRACKED ADDED MODIFIED RENAMED DELETED - STASHED UNMERGED AHEAD BEHIND DIVERGED - ) - - local status_text - status_text="$(__git_prompt_git status --porcelain -b 2> /dev/null)" - - # Don't continue on a catastrophic failure - if [[ $? -eq 128 ]]; then - return 1 - fi - - # A lookup table of each git status encountered - local -A statuses_seen - - if __git_prompt_git rev-parse --verify refs/stash &>/dev/null; then - statuses_seen[STASHED]=1 - fi - - local status_lines - status_lines=("${(@f)${status_text}}") - - # If the tracking line exists, get and parse it - if [[ "$status_lines[1]" =~ "^## [^ ]+ \[(.*)\]" ]]; then - local branch_statuses - branch_statuses=("${(@s/,/)match}") - for branch_status in $branch_statuses; do - if [[ ! $branch_status =~ "(behind|diverged|ahead) ([0-9]+)?" ]]; then - continue - fi - local last_parsed_status=$prefix_constant_map[$match[1]] - statuses_seen[$last_parsed_status]=$match[2] - done - fi - - # For each status prefix, do a regex comparison - for status_prefix in ${(k)prefix_constant_map}; do - local status_constant="${prefix_constant_map[$status_prefix]}" - local status_regex=$'(^|\n)'"$status_prefix" - - if [[ "$status_text" =~ $status_regex ]]; then - statuses_seen[$status_constant]=1 - fi - done - - # Display the seen statuses in the order specified - local status_prompt - for status_constant in $status_constants; do - if (( ${+statuses_seen[$status_constant]} )); then - local next_display=$constant_prompt_map[$status_constant] - status_prompt="$next_display$status_prompt" - fi - done - - echo $status_prompt -} - # Outputs the name of the current user # Usage example: $(git_current_user_name) function git_current_user_name() { From 526969cad351fe85ff4a9a3949736bc08de2b12d Mon Sep 17 00:00:00 2001 From: Jonas Geiregat <288105+jonas-grgt@users.noreply.github.com> Date: Sat, 24 May 2025 12:40:40 +0200 Subject: [PATCH 089/305] feat(mvn): add verify aliases (#13133) --- plugins/mvn/README.md | 2 ++ plugins/mvn/mvn.plugin.zsh | 2 ++ 2 files changed, 4 insertions(+) diff --git a/plugins/mvn/README.md b/plugins/mvn/README.md index 4181fedc5..bcb26482e 100644 --- a/plugins/mvn/README.md +++ b/plugins/mvn/README.md @@ -33,6 +33,8 @@ if it's found, or the mvn command otherwise. | `mvnct` | `mvn clean test` | | `mvncv` | `mvn clean verify` | | `mvncvst` | `mvn clean verify -DskipTests` | +| `mvnv` | `mvn verify` | +| `mvnvst` | `mvn verify -DskipTests` | | `mvndp` | `mvn deploy` | | `mvndocs` | `mvn dependency:resolve -Dclassifier=javadoc` | | `mvndt` | `mvn dependency:tree` | diff --git a/plugins/mvn/mvn.plugin.zsh b/plugins/mvn/mvn.plugin.zsh index 7bffce36e..8477722b0 100644 --- a/plugins/mvn/mvn.plugin.zsh +++ b/plugins/mvn/mvn.plugin.zsh @@ -62,6 +62,8 @@ alias mvncp='mvn clean package' alias mvnct='mvn clean test' alias mvncv='mvn clean verify' alias mvncvst='mvn clean verify -DskipTests' +alias mvnv='mvn verify' +alias mvnvst='mvn verify -DskipTests' alias mvndp='mvn deploy' alias mvndocs='mvn dependency:resolve -Dclassifier=javadoc' alias mvndt='mvn dependency:tree' From ecdc1e722a9f458b3b5c4900403ee77848e1dba2 Mon Sep 17 00:00:00 2001 From: Hanashiko <129686115+Hanashiko@users.noreply.github.com> Date: Sat, 24 May 2025 13:42:44 +0300 Subject: [PATCH 090/305] docs(rsync): improve README (#13137) --- plugins/rsync/README.md | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/plugins/rsync/README.md b/plugins/rsync/README.md index 032ee7f3b..04d16c88b 100644 --- a/plugins/rsync/README.md +++ b/plugins/rsync/README.md @@ -1,16 +1,26 @@ # rsync -This plugin adds aliases for frequent [rsync](https://rsync.samba.org/) commands. +This plugin adds aliases for frequent [rsync](https://rsync.samba.org/) commands, simplifying file transfer and synchronization tasks. -To use it add `rsync` to the plugins array in you zshrc file. +To use it add `rsync` to the plugins array in you `.zshrc` file. ```zsh plugins=(... rsync) ``` -| Alias | Command | -| ------------------- | ------------------------------------------------ | -| *rsync-copy* | `rsync -avz --progress -h` | -| *rsync-move* | `rsync -avz --progress -h --remove-source-files` | -| *rsync-update* | `rsync -avzu --progress -h` | -| *rsync-synchronize* | `rsync -avzu --delete --progress -h` | +| Alias | Command | Description | +| ------------------- | ------------------------------------------------ | ------------| +| `rsync-copy` | `rsync -avz --progress -h` | Recursively copy files and directories, preserving permissions, timestamps, and symbolic links. Compression is enabled for faster transfers. Progress is displayed in a human-readable format. | +| `rsync-move` | `rsync -avz --progress -h --remove-source-files` | Same as rsync-copy, but removes the source files after a successful transfer (effectively performing a move). | +| `rsync-update` | `rsync -avzu --progress -h` | Like rsync-copy, but only updates files if the source is newer than the destination (or if the destination file is missing). | +| `rsync-synchronize` | `rsync -avzu --delete --progress -h` | Performs bidirectional-style sync: updates files as in rsync-update and deletes files in the destination that no longer exist in the source. Useful for directory synchronization. | + +Explanation of Flags: + - -a: Archive mode; preserves symbolic links, permissions, timestamps, etc. + - -v: Verbose; shows details of the transfer process. + - -z: Compress file data during transfer for efficiency. + - -u: Skip files that are newer on the receiver. + - --progress: Show progress during file transfer. + - -h: Output numbers in human-readable format (e.g., 1K, 234M). + - --remove-source-files: Deletes source files after they are copied (used in rsync-move). + - --delete: Deletes files in the destination that are not present in the source (used in rsync-synchronize). From 095ac3ca8f4c3a89a69ff3b45cb67346f76babbd Mon Sep 17 00:00:00 2001 From: G'lek Tarssza Date: Sat, 24 May 2025 04:44:24 -0600 Subject: [PATCH 091/305] feat(cli): add `--enabled` flag to `omz plugin list` (#13128) --- lib/cli.zsh | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/cli.zsh b/lib/cli.zsh index 3b6308313..0b144e4e7 100644 --- a/lib/cli.zsh +++ b/lib/cli.zsh @@ -72,6 +72,10 @@ function _omz { local -aU plugins plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(-.N:h:t)) _describe 'plugin' plugins ;; + plugin::list) + local -a opts + opts=('--enabled:List enabled plugins only') + _describe -o 'options' opts ;; theme::(set|use)) local -aU themes themes=("$ZSH"/themes/*.zsh-theme(-.N:t:r) "$ZSH_CUSTOM"/**/*.zsh-theme(-.N:r:gs:"$ZSH_CUSTOM"/themes/:::gs:"$ZSH_CUSTOM"/:::)) @@ -206,7 +210,7 @@ Available commands: disable Disable plugin(s) enable Enable plugin(s) info Get information of a plugin - list List all available Oh My Zsh plugins + list [--enabled] List Oh My Zsh plugins load Load plugin(s) EOF @@ -449,8 +453,21 @@ function _omz::plugin::info { function _omz::plugin::list { local -a custom_plugins builtin_plugins - custom_plugins=("$ZSH_CUSTOM"/plugins/*(-/N:t)) - builtin_plugins=("$ZSH"/plugins/*(-/N:t)) + + # If --enabled is provided, only list what's enabled + if [[ "$1" == "--enabled" ]]; then + local plugin + for plugin in "${plugins[@]}"; do + if [[ -d "${ZSH_CUSTOM}/plugins/${plugin}" ]]; then + custom_plugins+=("${plugin}") + elif [[ -d "${ZSH}/plugins/${plugin}" ]]; then + builtin_plugins+=("${plugin}") + fi + done + else + custom_plugins=("$ZSH_CUSTOM"/plugins/*(-/N:t)) + builtin_plugins=("$ZSH"/plugins/*(-/N:t)) + fi # If the command is being piped, print all found line by line if [[ ! -t 1 ]]; then From 6ef47526f852114209e36af87938075b4caa28e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Gamboa?= Date: Mon, 26 May 2025 07:27:53 -0400 Subject: [PATCH 092/305] feat(laravel): add `db:wipe` alias (#13071) --- plugins/laravel/README.md | 1 + plugins/laravel/laravel.plugin.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/laravel/README.md b/plugins/laravel/README.md index d722770c9..c5375f270 100644 --- a/plugins/laravel/README.md +++ b/plugins/laravel/README.md @@ -21,6 +21,7 @@ plugins=(... laravel) | `pamfs` | `php artisan migrate:fresh --seed` | | `pamr` | `php artisan migrate:rollback` | | `pads` | `php artisan db:seed` | +| `padw` | `php artisan db:wipe` | ## Makers diff --git a/plugins/laravel/laravel.plugin.zsh b/plugins/laravel/laravel.plugin.zsh index ef462b13c..20a1c473e 100644 --- a/plugins/laravel/laravel.plugin.zsh +++ b/plugins/laravel/laravel.plugin.zsh @@ -12,6 +12,7 @@ alias pamf='php artisan migrate:fresh' alias pamfs='php artisan migrate:fresh --seed' alias pamr='php artisan migrate:rollback' alias pads='php artisan db:seed' +alias padw='php artisan db:wipe' # Makers alias pamm='php artisan make:model' From 658240f49816bd6ae1e693a383e26b703ef2d0fb Mon Sep 17 00:00:00 2001 From: mm503 <182180598+mm503@users.noreply.github.com> Date: Thu, 29 May 2025 02:33:01 -0500 Subject: [PATCH 093/305] feat(kubectl): add aliases for `get events` (#13147) --- plugins/kubectl/README.md | 238 +++++++++++++++-------------- plugins/kubectl/kubectl.plugin.zsh | 2 + 2 files changed, 122 insertions(+), 118 deletions(-) diff --git a/plugins/kubectl/README.md b/plugins/kubectl/README.md index 28a502d11..6f347a8ee 100644 --- a/plugins/kubectl/README.md +++ b/plugins/kubectl/README.md @@ -11,124 +11,126 @@ plugins=(... kubectl) ## Aliases -| Alias | Command | Description | -| :------- | :------------------------------------------------- | :----------------------------------------------------------------------------------------------- | -| k | `kubectl` | The kubectl command | -| kca | `kubectl --all-namespaces` | The kubectl command targeting all namespaces | -| kaf | `kubectl apply -f` | Apply a YML file | -| keti | `kubectl exec -ti` | Drop into an interactive terminal on a container | -| | | **Manage configuration quickly to switch contexts between local, dev and staging** | -| kcuc | `kubectl config use-context` | Set the current-context in a kubeconfig file | -| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig | -| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig | -| kccc | `kubectl config current-context` | Display the current-context | -| kcgc | `kubectl config get-contexts` | List of contexts available | -| | | **General aliases** | -| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector | -| kdelf | `kubectl delete -f` | Delete a pod using the type and name specified in -f argument | -| | | **Pod management** | -| kgp | `kubectl get pods` | List all pods in ps output format | -| kgpl | `kgp -l` | Get pods by label. Example: `kgpl "app=myapp" -n myns` | -| kgpn | `kgp -n` | Get pods by namespace. Example: `kgpn kube-system` | -| kgpsl | `kubectl get pods --show-labels` | List all pods in ps output format with labels | -| kgpw | `kgp --watch` | After listing/getting the requested object, watch for changes | -| kgpwide | `kgp -o wide` | Output in plain-text format with any additional information. For pods, the node name is included | -| kep | `kubectl edit pods` | Edit pods from the default editor | -| kdp | `kubectl describe pods` | Describe all pods | -| kdelp | `kubectl delete pods` | Delete all pods matching passed arguments | -| | | **Service management** | -| kgs | `kubectl get svc` | List all services in ps output format | -| kgsw | `kgs --watch` | After listing all services, watch for changes | -| kgswide | `kgs -o wide` | After listing all services, output in plain-text format with any additional information | -| kes | `kubectl edit svc` | Edit services(svc) from the default editor | -| kds | `kubectl describe svc` | Describe all services in detail | -| kdels | `kubectl delete svc` | Delete all services matching passed argument | -| | | **Ingress management** | -| kgi | `kubectl get ingress` | List ingress resources in ps output format | -| kei | `kubectl edit ingress` | Edit ingress resource from the default editor | -| kdi | `kubectl describe ingress` | Describe ingress resource in detail | -| kdeli | `kubectl delete ingress` | Delete ingress resources matching passed argument | -| | | **Namespace management** | -| kgns | `kubectl get namespaces` | List the current namespaces in a cluster | -| kcn | `kubectl config set-context --current --namespace` | Change current namespace | -| kens | `kubectl edit namespace` | Edit namespace resource from the default editor | -| kdns | `kubectl describe namespace` | Describe namespace resource in detail | -| kdelns | `kubectl delete namespace` | Delete the namespace. WARNING! This deletes everything in the namespace | -| | | **ConfigMap management** | -| kgcm | `kubectl get configmaps` | List the configmaps in ps output format | -| kecm | `kubectl edit configmap` | Edit configmap resource from the default editor | -| kdcm | `kubectl describe configmap` | Describe configmap resource in detail | -| kdelcm | `kubectl delete configmap` | Delete the configmap | -| | | **Secret management** | -| kgsec | `kubectl get secret` | Get secret for decoding | -| kdsec | `kubectl describe secret` | Describe secret resource in detail | -| kdelsec | `kubectl delete secret` | Delete the secret | -| | | **Deployment management** | -| kgd | `kubectl get deployment` | Get the deployment | -| kgdw | `kgd --watch` | After getting the deployment, watch for changes | -| kgdwide | `kgd -o wide` | After getting the deployment, output in plain-text format with any additional information | -| ked | `kubectl edit deployment` | Edit deployment resource from the default editor | -| kdd | `kubectl describe deployment` | Describe deployment resource in detail | -| kdeld | `kubectl delete deployment` | Delete the deployment | -| ksd | `kubectl scale deployment` | Scale a deployment | -| krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment | -| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime | -| | | **Rollout management** | -| kgrs | `kubectl get replicaset` | List all ReplicaSets `rs` created by the deployment | -| kdrs | `kubectl describe replicaset` | Describe ReplicaSet in detail | -| kers | `kubectl edit replicaset` | Edit ReplicaSet from the default editor | -| krh | `kubectl rollout history` | Check the revisions of this deployment | -| kru | `kubectl rollout undo` | Rollback to the previous revision | -| | | **Port forwarding** | -| kpf | `kubectl port-forward` | Forward one or more local ports to a pod | -| | | **Tools for accessing all information** | -| kga | `kubectl get all` | List all resources in ps format | -| kgaa | `kubectl get all --all-namespaces` | List the requested object(s) across all namespaces | -| | | **Logs** | -| kl | `kubectl logs` | Print the logs for a container or resource | -| klf | `kubectl logs -f` | Stream the logs for a container or resource (follow) | -| | | **File copy** | -| kcp | `kubectl cp` | Copy files and directories to and from containers | -| | | **Node management** | -| kgno | `kubectl get nodes` | List the nodes in ps output format | -| kgnosl | `kubectl get nodes --show-labels` | List the nodes in ps output format with labels | -| keno | `kubectl edit node` | Edit nodes resource from the default editor | -| kdno | `kubectl describe node` | Describe node resource in detail | -| kdelno | `kubectl delete node` | Delete the node | -| | | **Persistent Volume Claim management** | -| kgpvc | `kubectl get pvc` | List all PVCs | -| kgpvcw | `kgpvc --watch` | After listing/getting the requested object, watch for changes | -| kepvc | `kubectl edit pvc` | Edit pvcs from the default editor | -| kdpvc | `kubectl describe pvc` | Describe all pvcs | -| kdelpvc | `kubectl delete pvc` | Delete all pvcs matching passed arguments | -| | | **StatefulSets management** | -| kgss | `kubectl get statefulset` | List the statefulsets in ps format | -| kgssw | `kgss --watch` | After getting the list of statefulsets, watch for changes | -| kgsswide | `kgss -o wide` | After getting the statefulsets, output in plain-text format with any additional information | -| kess | `kubectl edit statefulset` | Edit statefulset resource from the default editor | -| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail | -| kdelss | `kubectl delete statefulset` | Delete the statefulset | -| ksss | `kubectl scale statefulset` | Scale a statefulset | -| krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment | -| | | **Service Accounts management** | -| kdsa | `kubectl describe sa` | Describe a service account in details | -| kdelsa | `kubectl delete sa` | Delete the service account | -| | | **DaemonSet management** | -| kgds | `kubectl get daemonset` | List all DaemonSets in ps output format | -| kgdsw | `kgds --watch` | After listing all DaemonSets, watch for changes | -| keds | `kubectl edit daemonset` | Edit DaemonSets from the default editor | -| kdds | `kubectl describe daemonset` | Describe all DaemonSets in detail | -| kdelds | `kubectl delete daemonset` | Delete all DaemonSets matching passed argument | -| | | **CronJob management** | -| kgcj | `kubectl get cronjob` | List all CronJobs in ps output format | -| kecj | `kubectl edit cronjob` | Edit CronJob from the default editor | -| kdcj | `kubectl describe cronjob` | Describe a CronJob in details | -| kdelcj | `kubectl delete cronjob` | Delete the CronJob | -| | | **Job management** | -| kgj | `kubectl get job` | List all Job in ps output format | -| kej | `kubectl edit job` | Edit a Job in details | -| kdj | `kubectl describe job` | Describe the Job | -| kdelj | `kubectl delete job` | Delete the Job | +| Alias | Command | Description | +| :------- | :------------------------------------------------------ | :----------------------------------------------------------------------------------------------- | +| k | `kubectl` | The kubectl command | +| kca | `kubectl --all-namespaces` | The kubectl command targeting all namespaces | +| kaf | `kubectl apply -f` | Apply a YML file | +| keti | `kubectl exec -ti` | Drop into an interactive terminal on a container | +| | | **Manage configuration quickly to switch contexts between local, dev and staging** | +| kcuc | `kubectl config use-context` | Set the current-context in a kubeconfig file | +| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig | +| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig | +| kccc | `kubectl config current-context` | Display the current-context | +| kcgc | `kubectl config get-contexts` | List of contexts available | +| | | **General aliases** | +| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector | +| kdelf | `kubectl delete -f` | Delete a pod using the type and name specified in -f argument | +| kge | `kubectl get events --sort-by=".lastTimestamp"` | Get events (sorted by timestamp) | +| kgew | `kubectl get events --watch --sort-by=".lastTimestamp"` | Get events and watch as they occur (sorted by timestamp) | +| | | **Pod management** | +| kgp | `kubectl get pods` | List all pods in ps output format | +| kgpl | `kgp -l` | Get pods by label. Example: `kgpl "app=myapp" -n myns` | +| kgpn | `kgp -n` | Get pods by namespace. Example: `kgpn kube-system` | +| kgpsl | `kubectl get pods --show-labels` | List all pods in ps output format with labels | +| kgpw | `kgp --watch` | After listing/getting the requested object, watch for changes | +| kgpwide | `kgp -o wide` | Output in plain-text format with any additional information. For pods, the node name is included | +| kep | `kubectl edit pods` | Edit pods from the default editor | +| kdp | `kubectl describe pods` | Describe all pods | +| kdelp | `kubectl delete pods` | Delete all pods matching passed arguments | +| | | **Service management** | +| kgs | `kubectl get svc` | List all services in ps output format | +| kgsw | `kgs --watch` | After listing all services, watch for changes | +| kgswide | `kgs -o wide` | After listing all services, output in plain-text format with any additional information | +| kes | `kubectl edit svc` | Edit services(svc) from the default editor | +| kds | `kubectl describe svc` | Describe all services in detail | +| kdels | `kubectl delete svc` | Delete all services matching passed argument | +| | | **Ingress management** | +| kgi | `kubectl get ingress` | List ingress resources in ps output format | +| kei | `kubectl edit ingress` | Edit ingress resource from the default editor | +| kdi | `kubectl describe ingress` | Describe ingress resource in detail | +| kdeli | `kubectl delete ingress` | Delete ingress resources matching passed argument | +| | | **Namespace management** | +| kgns | `kubectl get namespaces` | List the current namespaces in a cluster | +| kcn | `kubectl config set-context --current --namespace` | Change current namespace | +| kens | `kubectl edit namespace` | Edit namespace resource from the default editor | +| kdns | `kubectl describe namespace` | Describe namespace resource in detail | +| kdelns | `kubectl delete namespace` | Delete the namespace. WARNING! This deletes everything in the namespace | +| | | **ConfigMap management** | +| kgcm | `kubectl get configmaps` | List the configmaps in ps output format | +| kecm | `kubectl edit configmap` | Edit configmap resource from the default editor | +| kdcm | `kubectl describe configmap` | Describe configmap resource in detail | +| kdelcm | `kubectl delete configmap` | Delete the configmap | +| | | **Secret management** | +| kgsec | `kubectl get secret` | Get secret for decoding | +| kdsec | `kubectl describe secret` | Describe secret resource in detail | +| kdelsec | `kubectl delete secret` | Delete the secret | +| | | **Deployment management** | +| kgd | `kubectl get deployment` | Get the deployment | +| kgdw | `kgd --watch` | After getting the deployment, watch for changes | +| kgdwide | `kgd -o wide` | After getting the deployment, output in plain-text format with any additional information | +| ked | `kubectl edit deployment` | Edit deployment resource from the default editor | +| kdd | `kubectl describe deployment` | Describe deployment resource in detail | +| kdeld | `kubectl delete deployment` | Delete the deployment | +| ksd | `kubectl scale deployment` | Scale a deployment | +| krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment | +| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime | +| | | **Rollout management** | +| kgrs | `kubectl get replicaset` | List all ReplicaSets `rs` created by the deployment | +| kdrs | `kubectl describe replicaset` | Describe ReplicaSet in detail | +| kers | `kubectl edit replicaset` | Edit ReplicaSet from the default editor | +| krh | `kubectl rollout history` | Check the revisions of this deployment | +| kru | `kubectl rollout undo` | Rollback to the previous revision | +| | | **Port forwarding** | +| kpf | `kubectl port-forward` | Forward one or more local ports to a pod | +| | | **Tools for accessing all information** | +| kga | `kubectl get all` | List all resources in ps format | +| kgaa | `kubectl get all --all-namespaces` | List the requested object(s) across all namespaces | +| | | **Logs** | +| kl | `kubectl logs` | Print the logs for a container or resource | +| klf | `kubectl logs -f` | Stream the logs for a container or resource (follow) | +| | | **File copy** | +| kcp | `kubectl cp` | Copy files and directories to and from containers | +| | | **Node management** | +| kgno | `kubectl get nodes` | List the nodes in ps output format | +| kgnosl | `kubectl get nodes --show-labels` | List the nodes in ps output format with labels | +| keno | `kubectl edit node` | Edit nodes resource from the default editor | +| kdno | `kubectl describe node` | Describe node resource in detail | +| kdelno | `kubectl delete node` | Delete the node | +| | | **Persistent Volume Claim management** | +| kgpvc | `kubectl get pvc` | List all PVCs | +| kgpvcw | `kgpvc --watch` | After listing/getting the requested object, watch for changes | +| kepvc | `kubectl edit pvc` | Edit pvcs from the default editor | +| kdpvc | `kubectl describe pvc` | Describe all pvcs | +| kdelpvc | `kubectl delete pvc` | Delete all pvcs matching passed arguments | +| | | **StatefulSets management** | +| kgss | `kubectl get statefulset` | List the statefulsets in ps format | +| kgssw | `kgss --watch` | After getting the list of statefulsets, watch for changes | +| kgsswide | `kgss -o wide` | After getting the statefulsets, output in plain-text format with any additional information | +| kess | `kubectl edit statefulset` | Edit statefulset resource from the default editor | +| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail | +| kdelss | `kubectl delete statefulset` | Delete the statefulset | +| ksss | `kubectl scale statefulset` | Scale a statefulset | +| krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment | +| | | **Service Accounts management** | +| kdsa | `kubectl describe sa` | Describe a service account in details | +| kdelsa | `kubectl delete sa` | Delete the service account | +| | | **DaemonSet management** | +| kgds | `kubectl get daemonset` | List all DaemonSets in ps output format | +| kgdsw | `kgds --watch` | After listing all DaemonSets, watch for changes | +| keds | `kubectl edit daemonset` | Edit DaemonSets from the default editor | +| kdds | `kubectl describe daemonset` | Describe all DaemonSets in detail | +| kdelds | `kubectl delete daemonset` | Delete all DaemonSets matching passed argument | +| | | **CronJob management** | +| kgcj | `kubectl get cronjob` | List all CronJobs in ps output format | +| kecj | `kubectl edit cronjob` | Edit CronJob from the default editor | +| kdcj | `kubectl describe cronjob` | Describe a CronJob in details | +| kdelcj | `kubectl delete cronjob` | Delete the CronJob | +| | | **Job management** | +| kgj | `kubectl get job` | List all Job in ps output format | +| kej | `kubectl edit job` | Edit a Job in details | +| kdj | `kubectl describe job` | Describe the Job | +| kdelj | `kubectl delete job` | Delete the Job | ## Wrappers diff --git a/plugins/kubectl/kubectl.plugin.zsh b/plugins/kubectl/kubectl.plugin.zsh index 33699bdf9..4a72c02af 100644 --- a/plugins/kubectl/kubectl.plugin.zsh +++ b/plugins/kubectl/kubectl.plugin.zsh @@ -36,6 +36,8 @@ alias kcgc='kubectl config get-contexts' # General aliases alias kdel='kubectl delete' alias kdelf='kubectl delete -f' +alias kge='kubectl get events --sort-by=".lastTimestamp"' +alias kgew='kubectl get events --sort-by=".lastTimestamp" --watch' # Pod management. alias kgp='kubectl get pods' From 95ef2516697aa764d1d4bb93ad3490584cc118ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yunus=20Emre=20Akbal=C4=B1k?= <58446763+YunusAkbalik@users.noreply.github.com> Date: Thu, 29 May 2025 13:49:56 +0300 Subject: [PATCH 094/305] feat(dotnet): add `restore` alias (#13146) --- plugins/dotnet/README.md | 1 + plugins/dotnet/dotnet.plugin.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/dotnet/README.md b/plugins/dotnet/README.md index a15e80577..217c46751 100644 --- a/plugins/dotnet/README.md +++ b/plugins/dotnet/README.md @@ -23,3 +23,4 @@ plugins=(... dotnet) | dp | dotnet pack | Create a NuGet package. | | dng | dotnet nuget | Provides additional NuGet commands. | | db | dotnet build | Build a .NET project | +| dres | dotnet restore | Restore dependencies and project-specific tools for a project. | \ No newline at end of file diff --git a/plugins/dotnet/dotnet.plugin.zsh b/plugins/dotnet/dotnet.plugin.zsh index ed7c55024..adc1ec678 100644 --- a/plugins/dotnet/dotnet.plugin.zsh +++ b/plugins/dotnet/dotnet.plugin.zsh @@ -24,3 +24,4 @@ alias da='dotnet add' alias dp='dotnet pack' alias dng='dotnet nuget' alias db='dotnet build' +alias dres='dotnet restore' From ac5295678f3325de1a69f9e2a603d69573112d05 Mon Sep 17 00:00:00 2001 From: AYO_YO <64309671+AYO-YO@users.noreply.github.com> Date: Sun, 8 Jun 2025 16:23:48 +0800 Subject: [PATCH 095/305] feat(agnoster): add conda support (#13160) Co-authored-by: Carlo Sala --- themes/agnoster.zsh-theme | 3 +++ 1 file changed, 3 insertions(+) diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme index 21c9cf7d5..c99b604b5 100644 --- a/themes/agnoster.zsh-theme +++ b/themes/agnoster.zsh-theme @@ -314,6 +314,9 @@ prompt_dir() { # Virtualenv: current working virtualenv prompt_virtualenv() { + if [ -n "$CONDA_DEFAULT_ENV" ]; then + prompt_segment magenta $CURRENT_FG "🐍 $CONDA_DEFAULT_ENV" + fi if [[ -n "$VIRTUAL_ENV" && -n "$VIRTUAL_ENV_DISABLE_PROMPT" ]]; then prompt_segment "$AGNOSTER_VENV_BG" "$AGNOSTER_VENV_FG" "(${VIRTUAL_ENV:t:gs/%/%%})" fi From 788eaa5930eeafceb0cc43f338b0bacf7a2e36a8 Mon Sep 17 00:00:00 2001 From: James Langley Date: Sun, 8 Jun 2025 09:25:23 +0100 Subject: [PATCH 096/305] fix(functions): escape especial chars in WSL (#13158) --- lib/functions.zsh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/functions.zsh b/lib/functions.zsh index b68c35c13..330b0e3e9 100644 --- a/lib/functions.zsh +++ b/lib/functions.zsh @@ -23,6 +23,9 @@ function open_command() { linux*) [[ "$(uname -r)" != *icrosoft* ]] && open_cmd='nohup xdg-open' || { open_cmd='cmd.exe /c start ""' [[ -e "$1" ]] && { 1="$(wslpath -w "${1:a}")" || return 1 } + [[ "$1" = (http|https)://* ]] && { + 1="$(echo "$1" | sed -E 's/([&|()<>^])/^\1/g')" || return 1 + } } ;; msys*) open_cmd='start ""' ;; *) echo "Platform $OSTYPE not supported" From 3ff8c7ef678a990a88ca988c3a4f007296af4934 Mon Sep 17 00:00:00 2001 From: Rob Lugton Date: Tue, 10 Jun 2025 04:40:46 +1000 Subject: [PATCH 097/305] feat(agnoster): add terraform to prompt (#7892) --- themes/agnoster.zsh-theme | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme index c99b604b5..63452378d 100644 --- a/themes/agnoster.zsh-theme +++ b/themes/agnoster.zsh-theme @@ -353,12 +353,19 @@ prompt_aws() { esac } +prompt_terraform() { + local terraform_info=$(tf_prompt_info) + [[ -z "$terraform_info" ]] && return + prompt_segment magenta yellow "TF: $terraform_info" +} + ## Main prompt build_prompt() { RETVAL=$? prompt_status prompt_virtualenv prompt_aws + prompt_terraform prompt_context prompt_dir prompt_git From 042605ee6b2afeb21e380d05b22d5072f0eeff44 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:15:59 +0200 Subject: [PATCH 098/305] chore(deps): bump requests in /.github/workflows/dependencies (#13164) Bumps [requests](https://github.com/psf/requests) from 2.32.3 to 2.32.4. - [Release notes](https://github.com/psf/requests/releases) - [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md) - [Commits](https://github.com/psf/requests/compare/v2.32.3...v2.32.4) --- updated-dependencies: - dependency-name: requests dependency-version: 2.32.4 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index e73c1b5ca..5dae1f64b 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -2,6 +2,6 @@ certifi==2025.4.26 charset-normalizer==3.4.2 idna==3.10 PyYAML==6.0.2 -requests==2.32.3 +requests==2.32.4 semver==3.0.4 urllib3==2.4.0 From 2fbdfa93f942611c56bb02657a39f577bd7f0ef0 Mon Sep 17 00:00:00 2001 From: Sergii Tkachenko Date: Mon, 16 Jun 2025 07:54:12 -0700 Subject: [PATCH 099/305] fix(init): ensure hostname is always valid for macOS (#13171) --- oh-my-zsh.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh index 2e885219c..3e547d358 100644 --- a/oh-my-zsh.sh +++ b/oh-my-zsh.sh @@ -99,8 +99,8 @@ done # Figure out the SHORT hostname if [[ "$OSTYPE" = darwin* ]]; then - # macOS's $HOST changes with dhcp, etc. Use ComputerName if possible. - SHORT_HOST=$(scutil --get ComputerName 2>/dev/null) || SHORT_HOST="${HOST/.*/}" + # macOS's $HOST changes with dhcp, etc. Use LocalHostName if possible. + SHORT_HOST=$(scutil --get LocalHostName 2>/dev/null) || SHORT_HOST="${HOST/.*/}" else SHORT_HOST="${HOST/.*/}" fi From 7ee92de190b3710b55aa04e10eb54e907587e61c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Jun 2025 10:02:32 +0200 Subject: [PATCH 100/305] chore(deps): bump urllib3 in /.github/workflows/dependencies (#13176) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/dependencies/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/requirements.txt b/.github/workflows/dependencies/requirements.txt index 5dae1f64b..d2c8bdcc9 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -4,4 +4,4 @@ idna==3.10 PyYAML==6.0.2 requests==2.32.4 semver==3.0.4 -urllib3==2.4.0 +urllib3==2.5.0 From f8022980a3423f25e3d5e1b6a60d2372a2ba006b Mon Sep 17 00:00:00 2001 From: Amr Elsayyad <20210190+AmrElsayyad@users.noreply.github.com> Date: Thu, 19 Jun 2025 11:05:40 +0300 Subject: [PATCH 101/305] feat(ubuntu): add `apt-fast` support (#13175) --- plugins/ubuntu/README.md | 17 +++++++++-------- plugins/ubuntu/ubuntu.plugin.zsh | 15 +++++++++++++-- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/plugins/ubuntu/README.md b/plugins/ubuntu/README.md index 20f5c65ee..4b09ba02b 100644 --- a/plugins/ubuntu/README.md +++ b/plugins/ubuntu/README.md @@ -10,10 +10,11 @@ plugins=(... ubuntu) ## Aliases -Commands that use `$APT` will use `apt` if installed or defer to `apt-get` otherwise. +Commands that use `$APT` will use `apt-fast` if installed, or `apt` if installed, or defer to `apt-get` +otherwise. | Alias | Command | Description | -|---------|--------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------| +| ------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------- | | age | `sudo $APT` | Run apt-get with sudo | | acs | `apt-cache search` | Search the apt-cache with the specified criteria | | acsp | `apt-cache showpkg` | Shows information about the listed packages | @@ -26,7 +27,7 @@ Commands that use `$APT` will use `apt` if installed or defer to `apt-get` other | agd | `sudo $APT dselect-upgrade` | Follows dselect choices for package installation | | agi | `sudo $APT install ` | Install the specified package | | agli | `apt list --installed` | List the installed packages | -| aglu | `sudo apt-get -u upgrade --assume-no` | Run an apt-get upgrade assuming no to all prompts | +| aglu | `apt list --upgradable` | List available updates only | | agp | `sudo $APT purge ` | Remove a package including any configuration files | | agr | `sudo $APT remove ` | Remove a package | | ags | `$APT source ` | Fetch the source for the specified package | @@ -36,21 +37,20 @@ Commands that use `$APT` will use `apt` if installed or defer to `apt-get` other | agar | `sudo $APT autoremove` | Remove automatically installed packages no longer needed | | aguu | `sudo $APT update && sudo $APT upgrade` | Update packages list and upgrade available packages | | allpkgs | `dpkg --get-selections \| grep -v deinstall` | Print all installed packages | -| kclean | `sudo aptitude remove -P ?and(~i~nlinux-(ima\|hea) ?not(~n$(uname -r)))` |Remove ALL kernel images and headers EXCEPT the one in use | +| kclean | `sudo aptitude remove -P ?and(~i~nlinux-(ima\|hea) ?not(~n$(uname -r)))` | Remove ALL kernel images and headers EXCEPT the one in use | | mydeb | `time dpkg-buildpackage -rfakeroot -us -uc` | Create a basic .deb package | | ppap | `sudo ppa-purge ` | Remove the specified PPA | - ## Functions -| Function | Usage |Description | -|-------------------|---------------------------------------|--------------------------------------------------------------------------| +| Function | Usage | Description | +| ----------------- | ------------------------------------- | ------------------------------------------------------------------------ | | aar | `aar ppa:xxxxxx/xxxxxx [packagename]` | apt-add-repository with automatic install/upgrade of the desired package | | apt-history | `apt-history ` | Prints the Apt history of the specified action | | apt-list-packages | `apt-list-packages` | List packages by size | | kerndeb | `kerndeb` | Kernel-package building shortcut | -## Authors: +## Authors - [@AlexBio](https://github.com/AlexBio) - [@dbb](https://github.com/dbb) @@ -59,3 +59,4 @@ Commands that use `$APT` will use `apt` if installed or defer to `apt-get` other - [Nicolas Jonas](https://nextgenthemes.com) - [@loctauxphilippe](https://github.com/loctauxphilippe) - [@HaraldNordgren](https://github.com/HaraldNordgren) +- [@AmrElsayyad](https://github.com/AmrElsayyad) diff --git a/plugins/ubuntu/ubuntu.plugin.zsh b/plugins/ubuntu/ubuntu.plugin.zsh index 7b765a406..66e2d52cb 100644 --- a/plugins/ubuntu/ubuntu.plugin.zsh +++ b/plugins/ubuntu/ubuntu.plugin.zsh @@ -1,11 +1,22 @@ -(( $+commands[apt] )) && APT=apt || APT=apt-get +# Detect available package manager (prefer apt-fast > apt > apt-get) +if (( $+commands[apt-fast] )); then + APT=apt-fast +elif (( $+commands[apt] )); then + APT=apt +else + APT=apt-get +fi alias acs='apt-cache search' alias afs='apt-file search --regexp' # These are apt/apt-get only -alias ags="$APT source" +if (( $+commands[apt] )); then + alias ags="apt source" +else + alias ags="apt-get source" +fi alias acp='apt-cache policy' From 01433503c2a474c049fa56d792ebfd9274e683cc Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Wed, 25 Jun 2025 21:33:17 +0200 Subject: [PATCH 102/305] 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 103/305] 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 104/305] 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 105/305] 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 106/305] 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 107/305] 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 108/305] 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 109/305] 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 110/305] 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 111/305] 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 112/305] 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 113/305] 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 114/305] 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 115/305] 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 116/305] 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 117/305] 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 118/305] 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 119/305] 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 120/305] 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 121/305] 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 122/305] 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 123/305] 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 124/305] 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 125/305] 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 126/305] 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 127/305] 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 128/305] 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 129/305] 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 130/305] 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 131/305] 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 132/305] 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 133/305] 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 134/305] 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 135/305] 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 136/305] 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 137/305] 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 138/305] 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 139/305] 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 140/305] 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 141/305] 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 142/305] 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 143/305] 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 144/305] 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 145/305] 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 146/305] 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 147/305] 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 148/305] 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 149/305] 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 150/305] 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 151/305] 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 152/305] 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 153/305] 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 154/305] 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 155/305] 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 156/305] 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 157/305] 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 158/305] 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 159/305] 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 160/305] 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 161/305] 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 162/305] 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 163/305] 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 164/305] 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 165/305] 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 166/305] 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 167/305] 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 168/305] 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 169/305] 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 170/305] 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 171/305] 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 172/305] 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 173/305] 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 174/305] 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 175/305] 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 176/305] 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 177/305] 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 178/305] 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 179/305] 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 180/305] 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 181/305] 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 182/305] 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 183/305] 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 184/305] 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 185/305] 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 186/305] 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 187/305] 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 188/305] 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 189/305] 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 190/305] 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 191/305] 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 192/305] 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 193/305] 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 194/305] 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 195/305] 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 196/305] 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 197/305] 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 198/305] 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 199/305] 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 200/305] 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 201/305] 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 202/305] 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 203/305] 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 204/305] 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 205/305] 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 206/305] 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 207/305] 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 208/305] 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 209/305] 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 210/305] 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 211/305] 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 212/305] 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 213/305] 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 214/305] 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 215/305] 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 216/305] 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 217/305] 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 218/305] 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 219/305] 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 220/305] 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 221/305] 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 222/305] 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 223/305] 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 224/305] 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 225/305] 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 226/305] 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 227/305] 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 228/305] 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 229/305] 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 230/305] 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 231/305] 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 232/305] 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 233/305] 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 234/305] 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 235/305] 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 236/305] 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 237/305] 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 238/305] 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 239/305] 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 240/305] 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 241/305] 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 242/305] 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 243/305] 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 244/305] 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 245/305] 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 246/305] 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 247/305] 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 248/305] 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 249/305] 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 250/305] 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 251/305] 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 252/305] 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 253/305] 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 254/305] 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 255/305] 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 256/305] 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 257/305] 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 258/305] 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 259/305] 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 260/305] 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 261/305] 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 262/305] 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 263/305] 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 264/305] 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 265/305] 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 266/305] 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 267/305] 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 268/305] 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 269/305] 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 270/305] 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 271/305] 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 272/305] 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 273/305] 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 274/305] 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 275/305] 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 276/305] 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 277/305] 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 278/305] 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 279/305] 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 280/305] 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 281/305] 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 282/305] 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 283/305] 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 284/305] 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 285/305] 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 286/305] 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 287/305] 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 288/305] 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 From 2614f529ce921cbcac60d65b86653d25528b8e34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Janiszewski?= <99132132+przemek890@users.noreply.github.com> Date: Tue, 24 Mar 2026 08:44:42 +0100 Subject: [PATCH 289/305] docs(poetry): fix typo (#13646) --- .gitignore | 6 ++++++ plugins/poetry/README.md | 10 +++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index a53da3b3e..145ae9c27 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,12 @@ custom/ # temp files directories cache/ log/ + +# Vim swap/backup files *.swp +*.swo + +# macOS system files .DS_Store # editor configs @@ -13,3 +18,4 @@ log/ # zcompile cached files *.zwc +*.zwc.old diff --git a/plugins/poetry/README.md b/plugins/poetry/README.md index 7b7905a41..3e7ada439 100644 --- a/plugins/poetry/README.md +++ b/plugins/poetry/README.md @@ -10,27 +10,27 @@ plugins=(... poetry) ## Aliases -| Alias | Command | Description +| Alias | Command | Description | |:----- |--------------------------------------------------- |:--------------------------------------------------------------------------------------- | | pad | `poetry add` | Add packages to `pyproject.toml` and install them | | pbld | `poetry build` | Build the source and wheels archives | | pch | `poetry check` | Validate the content of the `pyproject.toml` and its consistency with the `poetry.lock` | | pcmd | `poetry list` | Display all the available Poetry commands | | pconf | `poetry config --list` | Allow you to edit poetry config settings and repositories | -| pexp | `poetry export --without-hashes > requirements.txt | Export the lock file to `requirements.txt` | +| pexp | `poetry export --without-hashes > requirements.txt` | Export the lock file to `requirements.txt` | | pin | `poetry init` | Create a `pyproject.toml` interactively | | pinst | `poetry install` | Read the `pyproject.toml`, resolve the dependencies, and install them | | plck | `poetry lock` | Lock the dependencies in `pyproject.toml` without installing | | pnew | `poetry new` | Create a directory structure suitable for most Python projects | -| ppath | `poetry env info --path` | Get the path of the currently activated virtualenv` | +| ppath | `poetry env info --path` | Get the path of the currently activated virtualenv | | pplug | `poetry self show plugins` | List all the installed Poetry plugins | -| ppub | `poetry publish` | Publish the builded (`poetry build` command) package to the remote repository | +| ppub | `poetry publish` | Publish the built (`poetry build` command) package to the remote repository | | prm | `poetry remove` | Remove packages from `pyproject.toml` and uninstall them | | prun | `poetry run` | Executes the given command inside the project’s virtualenv | | psad | `poetry self add` | Add the Poetry plugin and install dependencies to make it work | | psh | `poetry shell` | Spawns a shell within the virtual environment. If one doesn’t exist, it will be created | | pshw | `poetry show` | List all the available dependencies | -| pslt | `poetry show --latest` | List lastest version of the dependencies | +| pslt | `poetry show --latest` | List latest version of the dependencies | | psup | `poetry self update` | Update Poetry to the latest version (default) or to the specified version | | psync | `poetry install --sync` | Synchronize your environment with the `poetry.lock` | | ptree | `poetry show --tree` | List the dependencies as tree | From 7e7cb5a23c63bde29dd45e3bed2599556b638cf5 Mon Sep 17 00:00:00 2001 From: Nathanael Tehilla Gunawan Date: Tue, 24 Mar 2026 03:50:36 -0400 Subject: [PATCH 290/305] fix(dpoggi): ensure correct Ghostty rendering (#13644) --- themes/dpoggi.zsh-theme | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/themes/dpoggi.zsh-theme b/themes/dpoggi.zsh-theme index 6469a2009..1d1e3412c 100644 --- a/themes/dpoggi.zsh-theme +++ b/themes/dpoggi.zsh-theme @@ -1,10 +1,7 @@ if [ $UID -eq 0 ]; then NCOLOR="red"; else NCOLOR="green"; fi local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})" -PROMPT='%{$fg[$NCOLOR]%}%n%{$reset_color%}@%{$fg[cyan]%}%m\ -%{$reset_color%}:%{$fg[magenta]%}%~\ -$(git_prompt_info) \ -%{$fg[red]%}%(!.#.»)%{$reset_color%} ' +PROMPT='%{$fg[$NCOLOR]%}%n%{$reset_color%}@%{$fg[cyan]%}%m%{$reset_color%}:%{$fg[magenta]%}%~$(git_prompt_info) %{$fg[red]%}%(!.#.»)%{$reset_color%} ' PROMPT2='%{$fg[red]%}\ %{$reset_color%}' RPS1='${return_code}' From 9151236d1e0cb64b2e803d7ec1736c7a717efc33 Mon Sep 17 00:00:00 2001 From: Alexey Trofimenko Date: Tue, 24 Mar 2026 11:54:43 +0400 Subject: [PATCH 291/305] feat(yarn): use proper `$PWD` var (#13639) --- plugins/yarn/_yarn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/yarn/_yarn b/plugins/yarn/_yarn index 9ffe5660c..50d3e4396 100644 --- a/plugins/yarn/_yarn +++ b/plugins/yarn/_yarn @@ -111,7 +111,7 @@ _yarn_commands_scripts() { packageJson=$(_yarn_find_package_json $opt_args[--cwd]) binaries=($(builtin cd $opt_args[--cwd] && echo node_modules/.bin/*(x:t))) else - packageJson=$(_yarn_find_package_json $pwd) + packageJson=$(_yarn_find_package_json $PWD) binaries=($(echo node_modules/.bin/*(x:t))) fi @@ -135,7 +135,7 @@ _yarn_scripts() { binaries=($(builtin cd $_yarn_run_cwd && yarn bin | perl -wln -e 'm{^[^:]+: (\S+)$} and print $1')) fi else - packageJson=$(_yarn_find_package_json $pwd) + packageJson=$(_yarn_find_package_json $PWD) if [[ -d node_modules ]]; then binaries=($(echo node_modules/.bin/*(x:t))) else From 11c17189830320524b92df5698af0180d77b70d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 18:38:42 +0100 Subject: [PATCH 292/305] chore(deps): bump requests from 2.32.5 to 2.33.0 in /.github/workflows/dependencies (#13649) 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 105f06ee8..359cee696 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -2,6 +2,6 @@ certifi==2026.2.25 charset-normalizer==3.4.6 idna==3.11 PyYAML==6.0.3 -requests==2.32.5 +requests==2.33.0 semver==3.0.4 urllib3==2.6.3 From 76ffd9e22acc7f11ca501f03d6999adbdb9baa61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Thu, 26 Mar 2026 20:09:56 +0100 Subject: [PATCH 293/305] fix(installer): handle sudo shims that don't support -k flag (#13651) Related to #13585 Co-authored-by: Daniel Bates --- tools/install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/install.sh b/tools/install.sh index c31ce2d55..d907b795c 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -473,7 +473,8 @@ EOF # be prompted for the password either way, so this shouldn't cause any issues. # if user_can_sudo; then - sudo -k chsh -s "$zsh" "$USER" # -k forces the password prompt + sudo -k >/dev/null 2>&1 # -k forces the password prompt + sudo chsh -s "$zsh" "$USER" else chsh -s "$zsh" "$USER" # run chsh normally fi From cb13cc539fa87f1c8f57dbbaefa3d3dcbaa85099 Mon Sep 17 00:00:00 2001 From: Adam Alston Date: Sun, 29 Mar 2026 02:02:29 -0400 Subject: [PATCH 294/305] docs(vscode): align README with current CLI behavior (#13653) --- plugins/vscode/README.md | 75 ++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/plugins/vscode/README.md b/plugins/vscode/README.md index 4661057a8..43581a8ce 100644 --- a/plugins/vscode/README.md +++ b/plugins/vscode/README.md @@ -1,6 +1,6 @@ # VS Code -This plugin provides useful aliases to simplify the interaction between the command line and VS Code, VSCodium, or Cursor editor. +This plugin provides useful aliases to simplify interaction between the command line and VS Code, VSCodium, or Cursor. To start using it, add the `vscode` plugin to your `plugins` array in `~/.zshrc`: @@ -10,46 +10,45 @@ plugins=(... vscode) ## Requirements -This plugin requires to have a flavour of VS Code installed and its executable available in PATH. +This plugin requires one of the supported editors to be installed and its executable to be available in `PATH`. -You can install either: +You can install one of the following: -- VS Code (code) -- VS Code Insiders (code-insiders) -- VSCodium (codium) -- Cursor (cursor) +- VS Code (`code`) +- VS Code Insiders (`code-insiders`) +- VSCodium (`codium`) +- Cursor (`cursor`) -### MacOS +### macOS -While Linux installations will add the executable to PATH, MacOS users might still have to do this manually: +While Linux installations usually add the executable to `PATH`, macOS users might still have to do this manually: [For VS Code and VS Code Insiders](https://code.visualstudio.com/docs/setup/mac#_launching-from-the-command-line), -open the Command Palette via (F1 or ⇧⌘P) and type shell command to find the Shell Command: +open the Command Palette with `F1` or `Shift+Cmd+P`, then search for the following command: > Shell Command: Install 'code' command in PATH [For VSCodium](https://github.com/VSCodium/vscodium/blob/master/DOCS.md#how-do-i-open-vscodium-from-the-terminal), -open the Command Palette via (F1 or ⇧⌘P) and type shell command to find the Shell Command: +open the Command Palette with `F1` or `Shift+Cmd+P`, then search for the following command: > 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: +For Cursor, open the Command Palette with `F1` or `Cmd+Shift+P`, then search for the following command: > Shell Command: Install 'cursor' command in PATH -## Using multiple flavours +## Choosing an editor -If for any reason, you ever require to use multiple flavours of VS Code i.e. VS Code (stable) and VS Code -Insiders, you can manually specify the flavour's executable. Add the following line to the .zshrc file -(between the `ZSH_THEME` and the `plugins=()` lines). This will make the plugin use your manually defined -executable. +If you have multiple supported editors installed, e.g., VS Code (stable) and VS Code Insiders, you can manually +specify which executable the plugin should use. Add the following line to `~/.zshrc` between the `ZSH_THEME` +and `plugins=()` lines. This makes the plugin use your manually defined executable. ```zsh ZSH_THEME=... -# 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 +# Choose one of `code`, `code-insiders`, `codium`, or `cursor`. +# The following line makes the plugin open VS Code Insiders. +# Invalid entries are ignored and no aliases are added. VSCODE=code-insiders plugins=(... vscode) @@ -61,29 +60,29 @@ source $ZSH/oh-my-zsh.sh | Alias | Command | Description | | ----------------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------- | -| vsc | code . | Open the current folder in VS code | -| vsc `dir` | code `dir` | Open passed folder in VS code | -| vsca `dir` | code --add `dir` | Add folder(s) to the last active window | +| vsc | code . | Open the current folder in VS Code | +| vsc `[args ...]` | code `[args ...]` | Pass arguments through to VS Code, e.g., a file, folder, or CLI flags. | +| vsca `dir` | code --add `dir` | Add one or more folders to the last active window. | | vscd `file` `file` | code --diff `file` `file` | Compare two files with each other. | | vscg `file:line[:char]` | code --goto `file:line[:char]` | Open a file at the path on the specified line and character position. | -| vscn | code --new-window | Force to open a new window. | -| vscr | code --reuse-window | Force to open a file or folder in the last active window. | +| vscn | code --new-window | Force opening in a new window. | +| vscr | code --reuse-window | Force opening a file or folder in the last active window. | | vscw | code --wait | Wait for the files to be closed before returning. | -| vscu `dir` | code --user-data-dir `dir` | Specifies the directory that user data is kept in. Can be used to open multiple distinct instances of Code. | +| vscu `dir` | code --user-data-dir `dir` | Specifies the directory where user data is stored. Can be used to open multiple distinct instances of Code. | | vscp `profile` | code --profile `profile` | Specifies the profile to open Code with. | -## Extensions aliases +## Extension aliases -| Alias | Command | Description | -| ----------------------- | ---------------------------------------------------------------- | --------------------------------- | -| vsced `dir` | code --extensions-dir `dir` | Set the root path for extensions. | -| vscie `id or vsix-path` | code --install-extension `extension-id> or Date: Mon, 30 Mar 2026 09:53:36 +0200 Subject: [PATCH 295/305] chore(deps): bump github/codeql-action from 4.34.1 to 4.35.1 (#13654) 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 b3f070cc7..a7d573a7c 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@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 + uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1 with: sarif_file: results.sarif From f0e2160abb4a08986fc8f5e05dadfcfdd91cf3de Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 14:39:19 +0200 Subject: [PATCH 296/305] chore(kube-ps1): update to e19c9ee8 (#13666) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/kube-ps1/kube-ps1.plugin.zsh | 36 ++++++++++++++++++---------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 4f4fef93b..ff239c657 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -30,7 +30,7 @@ dependencies: plugins/kube-ps1: repo: jonmosco/kube-ps1 branch: master - version: 9b41c091d5dd4a99e58cf58b5d98a4847937b1bb + version: e19c9ee867c5655814c384a6bf543e330e6ef1b7 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 9dcd6da44..f59b92df9 100644 --- a/plugins/kube-ps1/kube-ps1.plugin.zsh +++ b/plugins/kube-ps1/kube-ps1.plugin.zsh @@ -55,7 +55,17 @@ _kube_ps1_shell_type() { _kube_ps1_init() { [[ -f "${_KUBE_PS1_DISABLE_PATH}" ]] && KUBE_PS1_ENABLED=off - case "$(_kube_ps1_shell_type)" in + # Detect shell type once and cache it + _KUBE_PS1_SHELL="$(_kube_ps1_shell_type)" + + # Check tput availability once + if tput setaf 1 &> /dev/null; then + _KUBE_PS1_TPUT_AVAILABLE=true + else + _KUBE_PS1_TPUT_AVAILABLE=false + fi + + case "${_KUBE_PS1_SHELL}" in "zsh") _KUBE_PS1_OPEN_ESC="%{" _KUBE_PS1_CLOSE_ESC="%}" @@ -96,10 +106,10 @@ _kube_ps1_color_fg() { if [[ "${_KUBE_PS1_FG_CODE}" == "default" ]]; then _KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}" return - elif [[ "$(_kube_ps1_shell_type)" == "zsh" ]]; then + elif [[ "${_KUBE_PS1_SHELL}" == "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 + elif [[ "${_KUBE_PS1_SHELL}" == "bash" ]]; then + if [[ "${_KUBE_PS1_TPUT_AVAILABLE}" == "true" ]]; 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" @@ -129,15 +139,15 @@ _kube_ps1_color_bg() { if [[ "${_KUBE_PS1_BG_CODE}" == "default" ]]; then _KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_BG}" return - elif [[ "$(_kube_ps1_shell_type)" == "zsh" ]]; then + elif [[ "${_KUBE_PS1_SHELL}" == "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 + elif [[ "${_KUBE_PS1_SHELL}" == "bash" ]]; then + if [[ "${_KUBE_PS1_TPUT_AVAILABLE}" == "true" ]]; 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" else - _KUBE_PS1_BG_CODE="${DEFAULT_BG}" + _KUBE_PS1_BG_CODE="${_KUBE_PS1_DEFAULT_BG}" fi fi echo "${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_BG_CODE}${_KUBE_PS1_CLOSE_ESC}" @@ -174,7 +184,7 @@ _kube_ps1_symbol() { symbol="$(_kube_ps1_color_fg ${oc_symbol_color})${oc_glyph}${KUBE_PS1_RESET_COLOR}" ;; *) - case "$(_kube_ps1_shell_type)" in + case "${_KUBE_PS1_SHELL}" in bash) if ((BASH_VERSINFO[0] >= 4)) && [[ $'\u2388' != "\\u2388" ]]; then symbol="$(_kube_ps1_color_fg $custom_symbol_color)${symbol_default}${KUBE_PS1_RESET_COLOR}" @@ -212,7 +222,7 @@ _kube_ps1_file_newer_than() { local file=$1 local check_time=$2 - if [[ "$(_kube_ps1_shell_type)" == "zsh" ]]; then + if [[ "${_KUBE_PS1_SHELL}" == "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 @@ -292,13 +302,13 @@ _kube_ps1_get_ns() { _kube_ps1_get_context_ns() { # Set the command time - if [[ "$(_kube_ps1_shell_type)" == "bash" ]]; then + if [[ "${_KUBE_PS1_SHELL}" == "bash" ]]; then if ((BASH_VERSINFO[0] >= 4 && BASH_VERSINFO[1] >= 2)); then _KUBE_PS1_LAST_TIME=$(printf '%(%s)T') else _KUBE_PS1_LAST_TIME=$(date +%s) fi - elif [[ "$(_kube_ps1_shell_type)" == "zsh" ]]; then + elif [[ "${_KUBE_PS1_SHELL}" == "zsh" ]]; then _KUBE_PS1_LAST_TIME=$EPOCHREALTIME fi @@ -325,7 +335,7 @@ Toggle kube-ps1 prompt on Usage: kubeon [-g | --global] [-h | --help] -With no arguments, turn oon kube-ps1 status for this shell instance (default). +With no arguments, turn on kube-ps1 status for this shell instance (default). -g --global turn on kube-ps1 status globally -h --help print this message From beab0c0b3cf68e7a94a6657b8715781d7b372d35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 19:26:46 +0200 Subject: [PATCH 297/305] chore(deps): bump step-security/harden-runner from 2.16.0 to 2.16.1 (#13667) Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.16.0 to 2.16.1. - [Release notes](https://github.com/step-security/harden-runner/releases) - [Commits](https://github.com/step-security/harden-runner/compare/fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594...fe104658747b27e96e4f7e80cd0a94068e53901d) --- updated-dependencies: - dependency-name: step-security/harden-runner dependency-version: 2.16.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 8053b7aee..8af40663f 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@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index cead84c62..504d9bba0 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@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.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@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e0d9a7219..0c4051872 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@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index ab9d4d120..526c55bac 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@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit - name: Authenticate as @ohmyzsh diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index a7d573a7c..197bdd314 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@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit From d1fb3ebfc74ac41ccf8c185e802396e128022b6f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 19:27:23 +0200 Subject: [PATCH 298/305] chore(deps): bump requests in /.github/workflows/dependencies (#13668) Bumps [requests](https://github.com/psf/requests) from 2.33.0 to 2.33.1. - [Release notes](https://github.com/psf/requests/releases) - [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md) - [Commits](https://github.com/psf/requests/compare/v2.33.0...v2.33.1) --- updated-dependencies: - dependency-name: requests dependency-version: 2.33.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/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 359cee696..db31e834f 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -2,6 +2,6 @@ certifi==2026.2.25 charset-normalizer==3.4.6 idna==3.11 PyYAML==6.0.3 -requests==2.33.0 +requests==2.33.1 semver==3.0.4 urllib3==2.6.3 From 887a864aba396c0e6dcf7c0254f455676f830daa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 19:28:10 +0200 Subject: [PATCH 299/305] chore(deps): bump charset-normalizer in /.github/workflows/dependencies (#13669) Bumps [charset-normalizer](https://github.com/jawah/charset_normalizer) from 3.4.6 to 3.4.7. - [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.6...3.4.7) --- updated-dependencies: - dependency-name: charset-normalizer dependency-version: 3.4.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/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 db31e834f..91d0503df 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.6 +charset-normalizer==3.4.7 idna==3.11 PyYAML==6.0.3 requests==2.33.1 From 103246c198dc43e3232b1eaced33d0e7bcca7c3f Mon Sep 17 00:00:00 2001 From: Chris Schindlbeck Date: Tue, 7 Apr 2026 07:21:00 +0200 Subject: [PATCH 300/305] feat(opentofu): add aliases for opentofu: ttap, ttapp, ttir, ttiu, ttiur, ttpo --- plugins/opentofu/opentofu.plugin.zsh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/opentofu/opentofu.plugin.zsh b/plugins/opentofu/opentofu.plugin.zsh index b7a3ba3b6..d4ce28ec1 100644 --- a/plugins/opentofu/opentofu.plugin.zsh +++ b/plugins/opentofu/opentofu.plugin.zsh @@ -30,14 +30,20 @@ function tofu_version_prompt_info() { alias tt='tofu' alias tta='tofu apply' alias tta!='tofu apply -auto-approve' +alias ttap='tofu apply -parallelism=1' +alias ttapp='tofu apply tfplan' alias ttc='tofu console' alias ttd='tofu destroy' alias ttd!='tofu destroy -auto-approve' alias ttf='tofu fmt' alias ttfr='tofu fmt -recursive' alias tti='tofu init' +alias ttir='tofu init -reconfigure' +alias ttiu='tofu init -upgrade' +alias ttiur='tofu init -upgrade -reconfigure' alias tto='tofu output' alias ttp='tofu plan' +alias ttpo='tofu plan -out tfplan' alias ttv='tofu validate' alias tts='tofu state' alias ttsh='tofu show' From 7c10d9839f05b8b73e26aa4e0f04cc886fbba6a6 Mon Sep 17 00:00:00 2001 From: Chris Schindlbeck Date: Tue, 7 Apr 2026 07:21:12 +0200 Subject: [PATCH 301/305] feat(terraform): add aliases for terraform: tfapp, tfpo --- plugins/terraform/terraform.plugin.zsh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/plugins/terraform/terraform.plugin.zsh b/plugins/terraform/terraform.plugin.zsh index 1359ddd44..8e57b00db 100644 --- a/plugins/terraform/terraform.plugin.zsh +++ b/plugins/terraform/terraform.plugin.zsh @@ -4,21 +4,21 @@ function tf_prompt_info() { # check if in terraform dir and file exists [[ -d "${TF_DATA_DIR:-.terraform}" && -r "${TF_DATA_DIR:-.terraform}/environment" ]] || return - local workspace="$(< "${TF_DATA_DIR:-.terraform}/environment")" + local workspace="$(<"${TF_DATA_DIR:-.terraform}/environment")" echo "${ZSH_THEME_TF_PROMPT_PREFIX-[}${workspace:gs/%/%%}${ZSH_THEME_TF_PROMPT_SUFFIX-]}" } function tf_version_prompt_info() { - local terraform_version - terraform_version=$(terraform --version | head -n 1 | cut -d ' ' -f 2) - echo "${ZSH_THEME_TF_VERSION_PROMPT_PREFIX-[}${terraform_version:gs/%/%%}${ZSH_THEME_TF_VERSION_PROMPT_SUFFIX-]}" + local terraform_version + terraform_version=$(terraform --version | head -n 1 | cut -d ' ' -f 2) + echo "${ZSH_THEME_TF_VERSION_PROMPT_PREFIX-[}${terraform_version:gs/%/%%}${ZSH_THEME_TF_VERSION_PROMPT_SUFFIX-]}" } - alias tf='terraform' alias tfa='terraform apply' alias tfa!='terraform apply -auto-approve' alias tfap='terraform apply -parallelism=1' +alias tfapp='terraform apply tfplan' alias tfc='terraform console' alias tfd='terraform destroy' alias tfd!='terraform destroy -auto-approve' @@ -31,6 +31,7 @@ alias tfiu='terraform init -upgrade' alias tfiur='terraform init -upgrade -reconfigure' alias tfo='terraform output' alias tfp='terraform plan' +alias tfpo='terraform plan -out tfplan' alias tfv='terraform validate' alias tfs='terraform state' alias tft='terraform test' From 46c673072ee5646e4e2d540a07400c22a21ca72d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 09:54:23 +0200 Subject: [PATCH 302/305] chore(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 (#13688) 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 197bdd314..2d2bd8ef3 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@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: SARIF file path: results.sarif From 1708d84b70d38b8a9b2306f6b8e14bda287f3107 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 09:54:42 +0200 Subject: [PATCH 303/305] chore(deps): bump step-security/harden-runner from 2.16.1 to 2.17.0 (#13687) 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 8af40663f..07c3fa2a5 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@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 + uses: step-security/harden-runner@f808768d1510423e83855289c910610ca9b43176 # v2.17.0 with: egress-policy: audit diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index 504d9bba0..b6395b222 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@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 + uses: step-security/harden-runner@f808768d1510423e83855289c910610ca9b43176 # v2.17.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@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 + uses: step-security/harden-runner@f808768d1510423e83855289c910610ca9b43176 # v2.17.0 with: egress-policy: audit diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0c4051872..9c4b18587 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@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 + uses: step-security/harden-runner@f808768d1510423e83855289c910610ca9b43176 # v2.17.0 with: egress-policy: audit diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index 526c55bac..a2e9d59c4 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@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 + uses: step-security/harden-runner@f808768d1510423e83855289c910610ca9b43176 # v2.17.0 with: egress-policy: audit - name: Authenticate as @ohmyzsh diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 2d2bd8ef3..5f5bb986e 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@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 + uses: step-security/harden-runner@f808768d1510423e83855289c910610ca9b43176 # v2.17.0 with: egress-policy: audit From c53cfb2de4be426d9d0c593d45754cdcc3eb50b0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 10:51:45 +0200 Subject: [PATCH 304/305] chore(deps): bump actions/create-github-app-token from 3.0.0 to 3.1.1 (#13689) 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 07c3fa2a5..f1745a344 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@f8d387b68d61c58ab83c6c016672934102569859 # v3.0.0 + uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.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 a2e9d59c4..92945a9db 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@f8d387b68d61c58ab83c6c016672934102569859 # v3.0.0 + uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1 with: app-id: ${{ secrets.OHMYZSH_APP_ID }} private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} From 061f773dd356df52a8bccd5e73377c012f97ef14 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Mon, 13 Apr 2026 11:31:03 +0200 Subject: [PATCH 305/305] ci: use `client-id` rather than `app-id` (#13690) --- .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 f1745a344..81c2e5778 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -25,7 +25,7 @@ jobs: id: generate-token uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1 with: - app-id: ${{ secrets.OHMYZSH_APP_ID }} + client-id: ${{ secrets.OHMYZSH_CLIENT_ID }} private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} - name: Setup Python uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 diff --git a/.github/workflows/project.yml b/.github/workflows/project.yml index 92945a9db..88e00ca0f 100644 --- a/.github/workflows/project.yml +++ b/.github/workflows/project.yml @@ -24,7 +24,7 @@ jobs: id: generate-token uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1 with: - app-id: ${{ secrets.OHMYZSH_APP_ID }} + client-id: ${{ secrets.OHMYZSH_CLIENT_ID }} private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }} - name: Read project data env: