From d2d5155d41cbe183ef172fef1e83a29d116a5af6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A9=D0=B0=D0=BD=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=20=D0=9C?= =?UTF-8?q?=D0=B8=D1=85=D0=B0=D0=B8=D0=BB?= <79425045+mikhailde@users.noreply.github.com> Date: Thu, 10 Oct 2024 14:39:07 +0300 Subject: [PATCH 01/70] feat(ssh-agent): add keys regardless of filename (#12741) Co-authored-by: Carlo Sala --- plugins/ssh-agent/ssh-agent.plugin.zsh | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/plugins/ssh-agent/ssh-agent.plugin.zsh b/plugins/ssh-agent/ssh-agent.plugin.zsh index 83548648b..becd5ea17 100644 --- a/plugins/ssh-agent/ssh-agent.plugin.zsh +++ b/plugins/ssh-agent/ssh-agent.plugin.zsh @@ -39,13 +39,16 @@ function _add_identities() { return fi - # add default keys if no identities were set up via zstyle - # this is to mimic the call to ssh-add with no identities - if [[ ${#identities} -eq 0 ]]; then - # key list found on `ssh-add` man page's DESCRIPTION section - for id in id_rsa id_dsa id_ecdsa id_ed25519 id_ed25519_sk identity; do - # check if file exists - [[ -f "$HOME/.ssh/$id" ]] && identities+=($id) + # If no keys specified in zstyle, add default keys. + # Mimics calling ssh-add with no arguments. + if [[ ${#identities[@]} -eq 0 ]]; then + # Iterate over files in .ssh folder. + for file in "$HOME/.ssh"/*; do + # Check if file is a regular file and starts with "-----BEGIN OPENSSH PRIVATE KEY-----". + if [[ -f "$file" && $(command head -n 1 "$file") =~ ^-----BEGIN\ OPENSSH\ PRIVATE\ KEY----- ]]; then + # Add filename (without path) to identities array. + identities+=("${file##*/}") + fi done fi From a82f6c79abdb888f6f63ee2ddc77742a84c28486 Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 21:10:29 +0200 Subject: [PATCH 02/70] feat(wd): update to f0f47b71 (#12747) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/wd/wd.sh | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 2be4cdfb0..d53b0cd4d 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -28,7 +28,7 @@ dependencies: plugins/wd: repo: mfaerevaag/wd branch: master - version: tag:v0.9.0 + version: tag:v0.9.1 precopy: | set -e rm -r test diff --git a/plugins/wd/wd.sh b/plugins/wd/wd.sh index ddd31e6f6..66435a2a6 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.0 +readonly WD_VERSION=0.9.1 # colors readonly WD_BLUE="\033[96m" @@ -59,7 +59,7 @@ wd_print_msg() then local color="${1:-$WD_BLUE}" # Default to blue if no color is provided local msg="$2" - + if [[ -z "$msg" ]]; then print "${WD_RED}*${WD_NOC} Could not print message. Sorry!" else @@ -344,6 +344,7 @@ wd_path() wd_show() { local name_arg=$1 + local show_pwd # if there's an argument we look up the value if [[ -n $name_arg ]] then @@ -358,12 +359,12 @@ wd_show() local wd_matches wd_matches=() # do a reverse lookup to check whether PWD is in $points - PWD="${PWD/$HOME/~}" - if [[ ${points[(r)$PWD]} == "$PWD" ]] + show_pwd="${PWD/$HOME/~}" + if [[ ${points[(r)$show_pwd]} == "$show_pwd" ]] then for name in ${(k)points} do - if [[ $points[$name] == "$PWD" ]] + if [[ $points[$name] == "$show_pwd" ]] then wd_matches[$(($#wd_matches+1))]=$name fi @@ -371,7 +372,7 @@ wd_show() wd_print_msg "$WD_BLUE" "$#wd_matches warp point(s) to current directory: ${WD_GREEN}$wd_matches${WD_NOC}" else - wd_print_msg "$WD_YELLOW" "No warp point to $(echo "$PWD" | sed "s:$HOME:~:")" + wd_print_msg "$WD_YELLOW" "No warp point to $show_pwd" fi fi } From 9bfa3395f34f63d14945e01c45c72ec43d372dfa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 21:11:03 +0200 Subject: [PATCH 03/70] chore(deps): bump charset-normalizer in /.github/workflows/dependencies (#12749) Bumps [charset-normalizer](https://github.com/Ousret/charset_normalizer) from 3.3.2 to 3.4.0. - [Release notes](https://github.com/Ousret/charset_normalizer/releases) - [Changelog](https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md) - [Commits](https://github.com/Ousret/charset_normalizer/compare/3.3.2...3.4.0) --- updated-dependencies: - dependency-name: charset-normalizer 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 eedd6d276..ed0d129b3 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,5 +1,5 @@ certifi==2024.8.30 -charset-normalizer==3.3.2 +charset-normalizer==3.4.0 idna==3.10 PyYAML==6.0.2 requests==2.32.3 From b3ba8da4218c3b9e1e5e45e1d4c00d312ff7226b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Mon, 14 Oct 2024 13:15:39 +0200 Subject: [PATCH 04/70] ci(dependencies): use tag version in git commit if available (#12756) Related: https://github.com/ohmyzsh/ohmyzsh/pull/12747#issuecomment-2410440748 --- .github/workflows/dependencies/updater.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dependencies/updater.py b/.github/workflows/dependencies/updater.py index f85c9eda7..02cff9030 100644 --- a/.github/workflows/dependencies/updater.py +++ b/.github/workflows/dependencies/updater.py @@ -228,7 +228,7 @@ class Dependency: self.__apply_upstream_changes() # Add all changes and commit - has_new_commit = Git.add_and_commit(self.name, short_sha) + has_new_commit = Git.add_and_commit(self.name, new_version) if has_new_commit: # Push changes to remote From 09a94672003b21b8a3d8d15d31098641e7f3a4db Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Tue, 15 Oct 2024 13:02:12 +0200 Subject: [PATCH 05/70] Revert "feat(ssh-agent): add keys regardless of filename (#12741)" (#12761) This reverts commit d2d5155d41cbe183ef172fef1e83a29d116a5af6. Closes #12743 Closes #12745 Closes #12758 --- plugins/ssh-agent/ssh-agent.plugin.zsh | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/plugins/ssh-agent/ssh-agent.plugin.zsh b/plugins/ssh-agent/ssh-agent.plugin.zsh index becd5ea17..83548648b 100644 --- a/plugins/ssh-agent/ssh-agent.plugin.zsh +++ b/plugins/ssh-agent/ssh-agent.plugin.zsh @@ -39,16 +39,13 @@ function _add_identities() { return fi - # If no keys specified in zstyle, add default keys. - # Mimics calling ssh-add with no arguments. - if [[ ${#identities[@]} -eq 0 ]]; then - # Iterate over files in .ssh folder. - for file in "$HOME/.ssh"/*; do - # Check if file is a regular file and starts with "-----BEGIN OPENSSH PRIVATE KEY-----". - if [[ -f "$file" && $(command head -n 1 "$file") =~ ^-----BEGIN\ OPENSSH\ PRIVATE\ KEY----- ]]; then - # Add filename (without path) to identities array. - identities+=("${file##*/}") - fi + # add default keys if no identities were set up via zstyle + # this is to mimic the call to ssh-add with no identities + if [[ ${#identities} -eq 0 ]]; then + # key list found on `ssh-add` man page's DESCRIPTION section + for id in id_rsa id_dsa id_ecdsa id_ed25519 id_ed25519_sk identity; do + # check if file exists + [[ -f "$HOME/.ssh/$id" ]] && identities+=($id) done fi From 9ae155336f24dd459c1030b717e11489ababa624 Mon Sep 17 00:00:00 2001 From: nervo Date: Wed, 16 Oct 2024 20:57:04 +0200 Subject: [PATCH 06/70] feat(scw): use official scw completion (#12755) --- plugins/scw/README.md | 10 +- plugins/scw/_scw | 333 ------------------------------------- plugins/scw/scw.plugin.zsh | 14 ++ 3 files changed, 20 insertions(+), 337 deletions(-) delete mode 100644 plugins/scw/_scw create mode 100644 plugins/scw/scw.plugin.zsh diff --git a/plugins/scw/README.md b/plugins/scw/README.md index d2312c2e5..5dd630d64 100644 --- a/plugins/scw/README.md +++ b/plugins/scw/README.md @@ -1,7 +1,9 @@ -## Scaleway CLI autocomplete plugin +## Scaleway CLI plugin -[scw](https://github.com/scaleway/scaleway-cli): Manage Bare Metal servers from Command Line (as easily as with Docker) +This plugin adds completion for [scw](https://github.com/scaleway/scaleway-cli), the command line interface for Scaleway. -- Adds autocomplete options for all `scw` commands. +To use it, add `scw` to the plugins array in your zshrc file: -Maintainer : Manfred Touron ([@moul](https://github.com/moul)) +```zsh +plugins=(... scw) +``` diff --git a/plugins/scw/_scw b/plugins/scw/_scw deleted file mode 100644 index 0eb125c65..000000000 --- a/plugins/scw/_scw +++ /dev/null @@ -1,333 +0,0 @@ -#compdef scw -# -# zsh completion for scw (https://www.scaleway.com) -# -# Inspired by https://github.com/felixr/docker-zsh-completion - -__scw_get_servers() { - local expl - declare -a servers - servers=(${(f)"$(_call_program commands scw _completion servers-names)"}) - _describe -t servers "servers" servers -} - -__scw_stoppedservers() { - __scw_get_servers -} - -__scw_runningservers() { - __scw_get_servers -} - -__scw_servers () { - __scw_get_servers -} - -__scw_images () { - local expl - declare -a images - images=(${(f)"$(_call_program commands scw _completion images-names)"}) - _describe -t images "images" images -} - -__scw_images_and_snapshots () { - __scw_images - __scw_snapshots -} - -__scw_snapshots () { - local expl - declare -a snapshots - snapshots=(${(f)"$(_call_program commands scw _completion --prefix snapshots-names)"}) - _describe -t snapshots "snapshots" snapshots -} - -__scw_bootscripts () { - local expl - declare -a bootscripts - bootscripts=(${(f)"$(_call_program commands scw _completion bootscripts-names)"}) - _describe -t bootscripts "bootscripts" bootscripts -} - -__scw_tags() { - __scw_images -} - -__scw_repositories_with_tags() { - __scw_images -} - -__scw_search() { - # declare -a scwsearch - local cache_policy - zstyle -s ":completion:${curcontext}:" cache-policy cache_policy - if [[ -z "$cache_policy" ]]; then - zstyle ":completion:${curcontext}:" cache-policy __scw_caching_policy - fi - - local searchterm cachename - searchterm="${words[$CURRENT]%/}" - cachename=_scw-search-$searchterm - - local expl - local -a result - if ( [[ ${(P)+cachename} -eq 0 ]] || _cache_invalid ${cachename#_} ) \ - && ! _retrieve_cache ${cachename#_}; then - _message "Searching for ${searchterm}..." - result=(${${${(f)"$(_call_program commands scw search ${searchterm})"}%% *}[2,-1]}) - _store_cache ${cachename#_} result - fi - _wanted scwsearch expl 'available images' compadd -a result -} - -__scw_caching_policy() -{ - oldp=( "$1"(Nmh+1) ) # 1 hour - (( $#oldp )) -} - - -__scw_repositories () { - __scw_images -} - -__scw_commands () { - # local -a _scw_subcommands - local cache_policy - - zstyle -s ":completion:${curcontext}:" cache-policy cache_policy - if [[ -z "$cache_policy" ]]; then - zstyle ":completion:${curcontext}:" cache-policy __scw_caching_policy - fi - - if ( [[ ${+_scw_subcommands} -eq 0 ]] || _cache_invalid scw_subcommands) \ - && ! _retrieve_cache scw_subcommands; - then - local -a lines - lines=(${(f)"$(_call_program commands scw 2>&1)"}) - _scw_subcommands=(${${${lines[$((${lines[(i)Commands:]} + 1)),${lines[(I) *]}]}## #}/ ##/:}) - _scw_subcommands=($_scw_subcommands 'help:Show help for a command') - _store_cache scw_subcommands _scw_subcommands - fi - _describe -t scw-commands "scw command" _scw_subcommands -} - -__scw_subcommand () { - local -a _command_args - case "$words[1]" in - (attach) - _arguments \ - '--no-stdin[Do not attach stdin]' \ - ':servers:__scw_runningservers' - ;; - (commit) - _arguments \ - {-v,--volume=0}'[Volume slot]:volume: ' \ - ':server:__scw_servers' \ - ':repository:__scw_repositories_with_tags' - ;; - (cp) - _arguments \ - ':server:->server' \ - ':hostpath:_files' - case $state in - (server) - if compset -P '*:'; then - _files - else - __scw_servers -qS ":" - fi - ;; - esac - ;; - (exec) - local state ret - _arguments \ - {-T,--timeout=0}'[Set timeout values to seconds]' \ - {-w,--wait}'[Wait for SSH to be ready]' \ - ':servers:__scw_runningservers' \ - '*::command:->anycommand' && ret=0 - - case $state in - (anycommand) - shift 1 words - (( CURRENT-- )) - _normal - ;; - esac - - return ret - ;; - (history) - _arguments \ - '--no-trunc[Do not truncate output]' \ - {-q,--quiet}'[Only show numeric IDs]' \ - '*:images:__scw_images' - ;; - (images) - _arguments \ - {-a,--all}'[Show all images]' \ - '--no-trunc[Do not truncate output]' \ - {-q,--quiet}'[Only show numeric IDs]' \ - ':repository:__scw_repositories' - ;; - (info) - ;; - (inspect) - _arguments \ - {-f,--format=-}'[Format the output using the given go template]:template: ' \ - '*:servers:__scw_servers' - ;; - (kill) - _arguments \ - '*:servers:__scw_runningservers' - ;; - (login) - _arguments \ - {-o,--organization=-}'[Organization]:organization: ' \ - {-t,--token=-}'[Token]:token: ' \ - ':server: ' - ;; - (logout) - _arguments \ - ':server: ' - ;; - (logs) - _arguments \ - '*:servers:__scw_servers' - ;; - (port) - _arguments \ - '1:servers:__scw_runningservers' \ - '2:port:_ports' - ;; - (start) - _arguments \ - {-T,--timeout=0}'[Set timeout values to seconds]' \ - {-w,--wait}'[Wait for SSH to be ready]' \ - '*:servers:__scw_stoppedservers' - ;; - (rm) - _arguments \ - '*:servers:__scw_stoppedservers' - ;; - (rmi) - _arguments \ - '*:images:__scw_images' - ;; - (restart) - _arguments \ - '*:servers:__scw_runningservers' - ;; - (stop) - _arguments \ - {-t,--terminate}'[Stop and trash a server with its volumes]' \ - {-w,--wait}'[Synchronous stop. Wait for server to be stopped]' \ - '*:servers:__scw_runningservers' - ;; - (top) - _arguments \ - '1:servers:__scw_runningservers' \ - '(-)*:: :->ps-arguments' - case $state in - (ps-arguments) - _ps - ;; - esac - ;; - (ps) - _arguments \ - {-a,--all}'[Show all servers. Only running servers are shown by default]' \ - {-l,--latest}'[Show only the latest created server]' \ - '-n[Show n last created servers, include non-running one]:n:(1 5 10 25 50)' \ - '--no-trunc[Do not truncate output]' \ - {-q,--quiet}'[Only show numeric IDs]' - ;; - (tag) - _arguments \ - {-f,--force}'[force]'\ - ':image:__scw_images'\ - ':repository:__scw_repositories_with_tags' - ;; - (create|run) - _arguments \ - {-a,--attach}'[Attach to stdin, stdout or stderr]' \ - '*'{-e,--environment=-}'[Set environment variables]:environment variable: ' \ - '--name=-[Server name]:name: ' \ - '--bootscript=-[Assign a bootscript]:bootscript:__scw_bootscripts ' \ - '*-v[Bind mount a volume]:volume: '\ - '(-):images:__scw_images_and_snapshots' \ - '(-):command: _command_names -e' \ - '*::arguments: _normal' - - case $state in - (link) - if compset -P '*:'; then - _wanted alias expl 'Alias' compadd -E "" - else - __scw_runningservers -qS ":" - fi - ;; - esac - ;; - (rename) - _arguments \ - ':old name:__scw_servers' \ - ':new name: ' - ;; - (search) - _arguments \ - '--no-trunc[Do not truncate output]' \ - ':term: ' - ;; - (wait) - _arguments '*:servers:__scw_runningservers' - ;; - (help) - _arguments ':subcommand:__scw_commands' - ;; - (*) - _message 'Unknown sub command' - esac - -} - -_scw () { - # Support for subservices, which allows for `compdef _scw scw-shell=_scw_servers`. - # Based on /usr/share/zsh/functions/Completion/Unix/_git without support for `ret`. - if [[ $service != scw ]]; then - _call_function - _$service - return - fi - - local curcontext="$curcontext" state line - typeset -A opt_args - - _arguments -C \ - '-H[tcp://host:port to bind/connect to]:socket: ' \ - '(-): :->command' \ - '(-)*:: :->option-or-argument' - - if (( CURRENT == 1 )); then - - fi - case $state in - (command) - __scw_commands - ;; - (option-or-argument) - curcontext=${curcontext%:*:*}:scw-$words[1]: - __scw_subcommand - ;; - esac -} - -_scw "$@" - -# Local Variables: -# mode: Shell-Script -# sh-indentation: 4 -# indent-tabs-mode: nil -# sh-basic-offset: 4 -# End: -# vim: ft=zsh sw=4 ts=4 et diff --git a/plugins/scw/scw.plugin.zsh b/plugins/scw/scw.plugin.zsh new file mode 100644 index 000000000..cd8ed4ac7 --- /dev/null +++ b/plugins/scw/scw.plugin.zsh @@ -0,0 +1,14 @@ +if (( ! $+commands[scw] )); then + return +fi + +_scw () { + output=($(scw autocomplete complete zsh -- ${CURRENT} ${words})) + opts=('-S' ' ') + if [[ $output == *= ]]; then + opts=('-S' '') + fi + compadd "${opts[@]}" -- "${output[@]}" +} + +compdef _scw scw From 1b5af717a987a58deda1873cb28e4b05ba26bba8 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Wed, 16 Oct 2024 21:09:31 +0200 Subject: [PATCH 07/70] fix(pm2): update completion Closes #12733 --- plugins/pm2/_pm2 | 398 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 302 insertions(+), 96 deletions(-) diff --git a/plugins/pm2/_pm2 b/plugins/pm2/_pm2 index 66320b810..afe4ae0db 100644 --- a/plugins/pm2/_pm2 +++ b/plugins/pm2/_pm2 @@ -1,16 +1,233 @@ -#!/bin/zsh -f #compdef pm2 -#autoload +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for pm2 5.2.2 (https://pm2.keymetrics.io/). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Myoungdo Park +# * Shohei Yoshida +# +# ------------------------------------------------------------------------------ -local -a _1st_arguments +_pm2() { + typeset -A opt_args + local context state line -_1st_arguments=( + local curcontext="$curcontext" + + local ret=1 + + _arguments -C \ + '(- *)'{-v,-V,--version}'[print pm2 version]' \ + '(-s --silent)'{-s,--silent}'[hide all messages]' \ + '--ext[watch only this file extension]:extension' \ + '(-n --name)'{-n,--name}'[set a name for the process in the process list]:name' \ + '(-m --mini-list)'{-m,--mini-list}'[display a compacted list without formatting]' \ + '--interpreter[set a specific interpreter to use for executing app(default: node)]:prog' \ + '(--interpreter-args --node-args)'{--interpreter-args,--node-args}'[set arguments to pass to the interpreter]:args' \ + '(-o --output)'{-o,--output}'[specify log file for stdout]: :_files' \ + '(-e --error)'{-e,--error}'[specify log file for stderr]: :_files' \ + '(-l --log)'{-l,--log}'[specify log file which gathers both stdout and stderr]' \ + '--filter-env[filter out outgoing global values that contain provided strings]:envs' \ + '--log-type[specify log output style]: :(raw json)' \ + '--log-date-format[specify log output style]:format' \ + '--time[enable time logging]' \ + '--disable-logs[disable all logs storage]' \ + '*--env[specify which set of environment variables from ecosystem file must be injected]:env' \ + '(-a --update-env)'{-a,--update-env}'[force and update of the environment with restart/reload]' \ + '(-f --force)'{-f,--force}'[force actions]' \ + '(-i --instances)'{-i,--instances}'[launch number instances]:num' \ + '--parallel[number of parallel actions]:num' \ + '--shutdown-with-message[shutdown an application with process.send("shutdown") instead of process.kill(pid, SIGINT)]' \ + '(-p --pid)'{-p,--pid}'[specify pid file]: :_files' \ + '(-k --kill-timeout)'{-k,--kill-timeout}'[delay before sending final SIGKILL signal to process]:delay' \ + '--listen-timeout[listen timeout an application reload]:delay' \ + '--max-memory-restart[restart the app if an amount of memory is exceeded (in bytes)]:bytes' \ + '--restart-delay[specify a delay between restarts(in milliseconds)]:delay' \ + '--exp-backoff-restart-delay[specify a delay between restarts(in milliseconds)]:delay' \ + '(-x --execute-command)'{-e,--execute-command}'[execute a program using fork system]' \ + '--max-restarts[only start the script COUNT times]:count' \ + '(-u --user)'{-u,--user}'[define user when generating startup script]:username' \ + '--uid[run target script with rights]:uid' \ + '--gid[run target script with rights]:gui' \ + '--namespace[start application within specified namespace]:namespace' \ + '--cwd[run target script from path ]:cwd:_paths -/' \ + '--hp[define home path when generating startup script]: :_paths -/' \ + '--wait-ip[override systemd script to wait for full internet connectivity to launch pm2]' \ + '--service-name[define service name when generating startup script]' \ + '(-c --cron --cron-restart)'{-c,--cron,--cron-restart}'[restart a running process based on a cron pattern]:pattern' \ + '(-w --write)'{-w,--write}'[write configuration in local folder]' \ + '--no-daemon[run pm2 daemon in the foreground if it does not exist already]' \ + '(--disable-source-map-support --source-map-support)--source-map-support[force source map support]' \ + '--only[with json declaration, allow to only act on one application]:app' \ + '(--disable-source-map-support --source-map-support)--disable-source-map-support[force disable source map support]' \ + '--wait-ready[ask pm2 to wait for ready event from your app]' \ + '--merge-logs[merge logs from different instances but keep error and out separated]' \ + '*--watch[watch application folder for changes]: :_files -/' \ + '*--ignore-watch[list of paths to ignore]: :_files' \ + '--no-color[skip colors]' \ + '--no-vizion[start an app without vizion feature]' \ + '--np-autorestart[start an app without automatic restart]' \ + '--no-treekill[Only kill the main process, not detached children]' \ + '--no-pmx[start an app without pmx]' \ + '--no-automation[start an app without automation]' \ + '(--disable-trace --trace)--trace[enable transaction tracing with km]' \ + '(--disable-trace --trace)--disable-trace[disable transaction tracing with km]' \ + "--sort[sort process according to field's]:field_name" \ + '--attach[attach logging after your start/restart/stop/reload]' \ + '--v8[enable v8 data collecting]' \ + '--event-loop-inspector[enable event-loop-inspector dump in pmx]' \ + '--deep-monitoring[enable all monitoring tools]' \ + '(- *)'{-h,--help}'[output usage information]' \ + '1: :_pm2_subcommands' \ + '*:: :->subcmds' && return 0 + + case "$state" in + (subcmds) + case $words[1] in + (start) + _arguments \ + '--watch[watch folder for changes]' \ + '--fresh[Rebuild Dockerfile]' \ + '--daemon[Run container in Daemon mode(debug purposes)]' \ + '--container[Start application in container mode]' \ + '--dist[--with-container; change local Dockerfile to containerize all files in current directory]' \ + '--image-name[with --dist; set the exported image name]:name' \ + '--node-version[with --container, set a specific major Node.js version]:version' \ + '--dockerdaemon[for debugging purpose]' \ + '(- *)'{-h,--help}'[output usage information]' \ + '*: :_pm2_id_namespace_file' \ + && ret=0 + ;; + (trigger) + _arguments \ + '(- *)'{-h,--help}'[output usage information]' \ + '1: :_pm2_id_names' \ + && ret=0 + ;; + (deploy|startOrRestart|startOrReload|startOrGracefulReload) + _arguments \ + '(- *)'{-h,--help}'[output usage information]' \ + '1: :_files -g "*.json"' \ + && ret=0 + ;; + (stop|restart) + _arguments \ + '(- *)'{-h,--help}'[output usage information]' \ + '--watch[Stop watching folder for changes]' \ + '*: :_pm2_id_namespace_all' \ + && ret=0 + ;; + (reload|delete|reset) + _arguments \ + '(- *)'{-h,--help}'[output usage information]' \ + '*: :_pm2_id_namespace_all' \ + && ret=0 + ;; + (module:install) + _arguments \ + '(- *)'{-h,--help}'[output usage information]' \ + '--tarball[is local tarball]' \ + '--install[run yarn install before starting module]' \ + '--docker[is docker container]' \ + '--v1[install module in v1 manner(do not use it)]' \ + '--safe[keep module backup, if new module fail = restore with previous]:time' \ + && ret=0 + ;; + (publish|module:publish) + _arguments \ + '(- *)'{-h,--help}'[output usage information]' \ + '--npm[publish on npm]' \ + '*: :_files -/' \ + && ret=0 + ;; + (link) + _arguments \ + '(- *)'{-h,--help}'[output usage information]' \ + '--info-node[set url info node]:url' \ + && ret=0 + ;; + (plus) + _arguments \ + '(- *)'{-h,--help}'[output usage information]' \ + '--info-node[set url info node]:url' \ + '(-d --discrete)'{-d,--discrete}'[silent mode]' \ + '(-a --install-all)'{-a,--install-all}'[install all modules (force yes)]' \ + && ret=0 + ;; + (dump|save) + _arguments \ + '(- *)'{-h,--help}'[output usage information]' \ + '--force[force deletion of dump file even if empty]' \ + && ret=0 + ;; + (send|attach|describe|env) + _arguments \ + '(- *)'{-h,--help}'[output usage information]' \ + '1: :_pm2_id_names' \ + && ret=0 + ;; + (slist|sysinfos) + _arguments \ + '(- *)'{-h,--help}'[output usage information]' \ + '--tree[show as tree]' \ + && ret=0 + ;; + (logs) + _arguments \ + '(- *)'{-h,--help}'[output usage information]' \ + '--json[json log output]' \ + '--format[formatted log output]' \ + '--raw[raw output]' \ + '--err[only shows error output]' \ + '--out[only shows standard output]' \ + '--line[output the last N lines, instead of the last 15 by default]:lines' \ + '--timestamp[add timestamps(default format YYYY-MM-DD-HH:mm:ss)]:format' \ + '--nostream[print logs without launching the log stream]' \ + '*--highlight[highlights the given value]' \ + '1: :_pm2_id_namespace' \ + && ret=0 + ;; + (serve) + _arguments \ + '(- *)'{-h,--help}'[output usage information]' \ + '--port[specify port to listen to]:port' \ + '--spa[always serving index.html on inexistent sub path]' \ + '--basic-auth-username[set basic auth username]:username' \ + '--basic-auth-password[set basic auth password]:password' \ + '--monitor[frontend app monitoring]:app' \ + '*: :_files -/' \ + && ret=0 + ;; + (*) + _arguments \ + '(- *)'{-h,--help}'[output usage information]' \ + '*: :_files' \ + && ret=0 + ;; + esac + ;; + esac + + return ret +} + +(( $+functions[_pm2_subcommands] )) || +_pm2_subcommands() { + local -a subcommands=( "start:start and daemonize an app" "trigger:trigger process action" "deploy:deploy your json" "startOrRestart:start or restart JSON file" "startOrReload:start or gracefully reload JSON file" "pid:return pid of [app_name] or all" + "create:return pid of [app_name] or all" + "startOrGracefulReload:start or gracefully reload JSON file" "stop:stop a process" "restart:restart a process" "scale:scale up/down a process in cluster mode depending on total_number param" @@ -23,18 +240,23 @@ _1st_arguments=( "sendSignal:send a system signal to the target process" "ping:ping pm2 daemon - if not up it will launch it" "updatePM2:update in-memory PM2 with local PM2" + "update:update in-memory PM2 with local PM2" "install:install or update a module and run it forever" + "module\:install:install or update a module and run it forever" "module\:update:update a module and run it forever" "module\:generate:Generate a sample module in current folder" "uninstall:stop and uninstall a module" + "module\:uninstall:stop and uninstall a module" "package:Check & Package TAR type module" "publish:Publish the module you are currently on" + "module\:publish:Publish the module you are currently on" "set:sets the specified config " "multiset:multiset eg \"key1 val1 key2 val2\"" "get:get value for " + "conf:get / set module config values" "config:get / set module config values" "unset:clears the specified config " - "report:give a full pm2 report for https\://github.com/Unitech/pm2/issues" + "report:give a full pm2 report for https://github.com/Unitech/pm2/issues" "link:link with the pm2 monitoring dashboard" "unlink:unlink with the pm2 monitoring dashboard" "monitor:monitor target process" @@ -43,8 +265,8 @@ _1st_arguments=( "plus:enable pm2 plus" "login:Login to pm2 plus" "logout:Logout from pm2 plus" - "web:launch a health API on 0.0.0.0\:9615" "dump:dump all processes for resurrecting them later" + "save:dump all processes for resurrecting them later" "cleardump:Create empty dump file" "send:send stdin to " "attach:attach stdin/stdout to application identified by " @@ -52,15 +274,27 @@ _1st_arguments=( "unstartup:disable the pm2 startup hook" "startup:enable the pm2 startup hook" "logrotate:copy default logrotate configuration" - "ecosystem:generate a process conf file. (mode = null or simple)" + "ecosystem:generate a process conf file" + "init:generate a process conf file" "reset:reset counters for process" - "describe:describe all parameters of a process id" + "describe:describe all parameters of a process" + "desc:describe all parameters of a process" + "info:describe all parameters of a process" + "show:describe all parameters of a process" + "env:list all environment variables of a process id" "list:list all processes" + "l:list all processes" + "ps:list all processes" + "status:list all processes" "jlist:list all processes in JSON format" + "sysmonit:start system monitoring daemon" + "slist:list system infos in JSON" + "sysinfos:list system infos in JSON" "prettylist:print json in a prettified JSON" "monit:launch termcaps monitoring" "imonit:launch legacy termcaps monitoring" "dashboard:launch dashboard with monitoring and logs" + "dash:launch dashboard with monitoring and logs" "flush:flush logs" "reloadLogs:reload all logs" "logs:stream logs file. Default stream all logs" @@ -70,99 +304,71 @@ _1st_arguments=( "backward:downgrades repository to the previous commit for a given app" "deepUpdate:performs a deep update of PM2" "serve:serve a directory over http via port" + "autoinstall:auto install" "examples:display pm2 usage examples" -) + ) -local -a id_names - -_id_names() { - local app_list - app_list=`pm2 list -m` - - local -a names ids - names=(`echo $app_list | grep '+---' | awk '{print $2}'`) - ids=(`echo $app_list | grep 'pm2 id' | awk '{print $4}'`) - - if (( ${#ids} > 0 )); then - for i in {1..${#ids}}; do - id_names+=( "${ids[i]}:${names[i]}" ) - done - fi + _describe -t subcommands 'subcommand' subcommands "$@" } -_arguments \ - '(-v --version)'{-v,--version}'[output version]' \ - '(-h --help)'{-h,--help}'[output usage information]' \ - '*:: :->subcmds' && return 0 +(( $+functions[_pm2_id_names] )) || +_pm2_id_names() { + local app_list=$(pm2 list -m) + local -a names=(${(@f)"$(echo $app_list | awk '/^\+---/{sub("+--- ", ""); print}')"}) + local -a ids=(${(@f)"$(echo $app_list | awk '/^pm2 id/{sub("pm2 id :", ""); print}')"}) -if (( CURRENT == 1 )); then - _describe "command" _1st_arguments - return + if (( ${#ids} > 0 )); then + local -a id_names + for i in {1..${#ids}}; do + id_names+=( "${ids[i]}:${names[i]}" ) + done + + _describe 'id' id_names + fi +} + +(( $+functions[_pm2_namespaces] )) || +_pm2_namespaces() { + local -a namespaces=(${(@f)"$(pm2 list -m | awk '/^namespace :/{ print $3 }')"}) + if (( ${#namespaces} > 0 )); then + _values 'namespace' $namespaces + fi +} + +(( $+functions[_pm2_id_namespace] )) || +_pm2_id_namespace() { + _alternative \ + 'ids:id:_pm2_id_names' \ + 'namespaces:namespace:_pm2_namespaces' +} + +(( $+functions[_pm2_id_namespace_all] )) || +_pm2_id_namespace_all() { + _alternative \ + 'ids:id:_pm2_id_names' \ + 'namespaces:namespace:_pm2_namespaces' \ + 'all:all:(all)' +} + +(( $+functions[_pm2_id_namespace_file] )) || +_pm2_id_namespace_file() { + _alternative \ + 'ids:id:_pm2_id_names' \ + 'namespaces:namespace:_pm2_namespaces' \ + 'files:file:_files' +} + +if [ "$funcstack[1]" = "_pm2" ]; then + _pm2 "$@" +else + compdef _pm2 pm2 fi -local -a id_comp id_all_comp id_all_files_comp start_options logs_options -id_comp=('1: :->id_comp') -id_all_comp=('1: :->id_all_comp') -id_all_files_comp=('1: :->id_all_files_comp') -start_options=( - '--watch[Watch folder for changes]' - '--fresh[Rebuild Dockerfile]' - '--daemon[Run container in Daemon mode (debug purposes)]' - '--container[Start application in container mode]' - '--dist[with --container; change local Dockerfile to containerize all files in current directory]' - '--image-name[with --dist; set the exported image name]' - '--node-version[with --container, set a specific major Node.js version]' - '--dockerdaemon[for debugging purpose]' - '(-h --help)'{-h,--help}'[output usage information]' - $id_all_files_comp -) -logs_options=( - '--json[json log output]' - '--format[formatted log output]' - '--raw[raw output]' - '--err[only shows error output]' - '--out[only shows standard output]' - '--lines[output the last N lines, instead of the last 15 by default]' - '--timestamp[add timestamps (default format YYYY-MM-DD-HH:mm:ss)]' - '--nostream[print logs without launching the log stream]' - '(-h --help)'{-h,--help}'[output usage information]' - $id_all_comp -) +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: -case "$words[1]" in - start) - _arguments $start_options && return 0 - ;; - logs) - _arguments $logs_options && return 0 - ;; - stop|restart|delete|reload|reset) - _arguments $id_all_comp && return 0 - ;; - env|inspect|monitor|unmonitor|describe) - _arguments $id_comp && return 0 - ;; - deploy|startOrRestart|startOrReload) - _files ;; -esac - -case "$state" in - id_comp) - _id_names - _alternative \ - 'args:app args:(($id_names))' - ;; - id_all_comp) - _id_names - id_names+=(all) - _alternative \ - 'args:app args:(($id_names))' - ;; - id_all_files_comp) - _id_names - id_names+=(all) - _alternative \ - 'args:app args:(($id_names))' \ - 'files:filename:_files' - ;; -esac +# vim: ft=zsh sw=2 ts=2 et From 8da75e390bbe3b64f01fa643cfab815a20bc48f6 Mon Sep 17 00:00:00 2001 From: Lin <56944601+LinPr@users.noreply.github.com> Date: Thu, 17 Oct 2024 16:00:29 +0800 Subject: [PATCH 08/70] feat(buf): add completion plugin --- plugins/buf/README.md | 9 +++++++++ plugins/buf/buf.plugin.zsh | 14 ++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 plugins/buf/README.md create mode 100644 plugins/buf/buf.plugin.zsh diff --git a/plugins/buf/README.md b/plugins/buf/README.md new file mode 100644 index 000000000..946cf38dd --- /dev/null +++ b/plugins/buf/README.md @@ -0,0 +1,9 @@ +# Buf plugin + +This plugin adds completion for [Buf CLI](https://github.com/bufbuild/buf), a tool working with Protocol Buffers. + +To use it, add `buf` to the plugins array in your zshrc file: + +```zsh +plugins=(... buf) +``` \ No newline at end of file diff --git a/plugins/buf/buf.plugin.zsh b/plugins/buf/buf.plugin.zsh new file mode 100644 index 000000000..0b251ac37 --- /dev/null +++ b/plugins/buf/buf.plugin.zsh @@ -0,0 +1,14 @@ +# Autocompletion for the Buf CLI (buf). +if (( !$+commands[buf] )); then + return +fi +# If the completion file doesn't exist yet, we need to autoload it and +# bind it to `buf`. Otherwise, compinit will have already done that. +if [[ ! -f "$ZSH_CACHE_DIR/completions/_buf" ]]; then + typeset -g -A _comps + autoload -Uz _buf + _comps[buf]=_buf +fi + +# Generate and load buf completion +buf completion zsh >! "$ZSH_CACHE_DIR/completions/_buf" &| \ No newline at end of file From 067558da9274986d326533daca047bbcb01f2451 Mon Sep 17 00:00:00 2001 From: Lin <56944601+LinPr@users.noreply.github.com> Date: Thu, 17 Oct 2024 16:01:07 +0800 Subject: [PATCH 09/70] docs(volta): fix typo (#12765) --- plugins/volta/volta.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/volta/volta.plugin.zsh b/plugins/volta/volta.plugin.zsh index ab05ed5df..173b9c871 100644 --- a/plugins/volta/volta.plugin.zsh +++ b/plugins/volta/volta.plugin.zsh @@ -4,7 +4,7 @@ if (( ! $+commands[volta] )); then fi # If the completion file doesn't exist yet, we need to autoload it and -# bind it to `deno`. Otherwise, compinit will have already done that. +# bind it to `volta`. Otherwise, compinit will have already done that. if [[ ! -f "$ZSH_CACHE_DIR/completions/_volta" ]]; then typeset -g -A _comps autoload -Uz _volta From 4ada1541900539ce585a26642eecc7e8e56d16f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Fri, 18 Oct 2024 14:27:54 +0200 Subject: [PATCH 10/70] chore(installer): only serve installer in / and /install.sh This avoids false positive detections on other bruteforced paths, such as .zsh_history or others, which eventually result in automated false vulnerability submissions. --- .github/workflows/installer/vercel.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/installer/vercel.json b/.github/workflows/installer/vercel.json index 524dc3c0f..88ec18725 100644 --- a/.github/workflows/installer/vercel.json +++ b/.github/workflows/installer/vercel.json @@ -1,7 +1,7 @@ { "headers": [ { - "source": "/((?!favicon.ico).*)", + "source": "/(|install.sh)", "headers": [ { "key": "Content-Type", @@ -16,7 +16,7 @@ ], "rewrites": [ { - "source": "/((?!favicon.ico|install.sh).*)", + "source": "/", "destination": "/install.sh" } ] From a9e29fc12c856fd235b37c223feb8b3f05905b6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Sun, 20 Oct 2024 10:48:00 +0200 Subject: [PATCH 11/70] chore: fix note block in README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1303292d2..58828cf7f 100644 --- a/README.md +++ b/README.md @@ -190,8 +190,7 @@ ZSH_THEME="agnoster" # (this is one of the fancy ones) > [!NOTE] > You will many times see screenshots for a zsh theme, and try it out, and find that it doesn't look the same for you. - - +> > This is because many themes require installing a [Powerline Font](https://github.com/powerline/fonts) or a > [Nerd Font](https://github.com/ryanoasis/nerd-fonts) in order to render properly. Without them, these themes > will render weird prompt symbols. Check out @@ -203,6 +202,7 @@ ZSH_THEME="agnoster" # (this is one of the fancy ones) > terminal window (known as _color scheme_) or the font of your terminal. These are settings that you can > change in your terminal emulator. For more information, see > [what is a zsh theme](https://github.com/ohmyzsh/ohmyzsh/wiki/FAQ#what-is-a-zsh-theme). + Open up a new terminal window and your prompt should look something like this: From 7bbebcd520a113eb82e869aecca8f5c825540700 Mon Sep 17 00:00:00 2001 From: nervo Date: Tue, 22 Oct 2024 21:51:40 +0200 Subject: [PATCH 12/70] feat(rclone): create completion plugin (#12754) --- plugins/rclone/README.md | 9 +++++++++ plugins/rclone/rclone.plugin.zsh | 14 ++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 plugins/rclone/README.md create mode 100644 plugins/rclone/rclone.plugin.zsh diff --git a/plugins/rclone/README.md b/plugins/rclone/README.md new file mode 100644 index 000000000..aa2ced94a --- /dev/null +++ b/plugins/rclone/README.md @@ -0,0 +1,9 @@ +# Rclone plugin + +This plugin adds completion for [Rclone](https://rclone.org/), the command-line program to manage files on cloud storage. + +To use it, add `rclone` to the plugins array in your zshrc file: + +```zsh +plugins=(... rclone) +``` diff --git a/plugins/rclone/rclone.plugin.zsh b/plugins/rclone/rclone.plugin.zsh new file mode 100644 index 000000000..a6676131c --- /dev/null +++ b/plugins/rclone/rclone.plugin.zsh @@ -0,0 +1,14 @@ +# Completion +if (( ! $+commands[rclone] )); then + return +fi + +# If the completion file doesn't exist yet, we need to autoload it and +# bind it to `rclone`. Otherwise, compinit will have already done that. +if [[ ! -f "$ZSH_CACHE_DIR/completions/_rclone" ]]; then + typeset -g -A _comps + autoload -Uz _rclone + _comps[rclone]=_rclone +fi + +rclone completion zsh - >| "$ZSH_CACHE_DIR/completions/_rclone" &| From eeb01c18c1d1edff0c2563764a998b2d30947844 Mon Sep 17 00:00:00 2001 From: Carlo Sala Date: Wed, 23 Oct 2024 12:37:25 +0200 Subject: [PATCH 13/70] fix(websearch): allow multi-word parameters --- 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 81eb1c77d..b97e33a0b 100644 --- a/plugins/web-search/web-search.plugin.zsh +++ b/plugins/web-search/web-search.plugin.zsh @@ -50,7 +50,7 @@ function web_search() { # build search url: # join arguments passed with '+', then append to search engine URL - url="${urls[$1]}$(omz_urlencode $param ${@[2,-1]})" + url="${urls[$1]}$(omz_urlencode $param ${(s: :)@[2,-1]})" else # build main page url: # split by '/', then rejoin protocol (1) and domain (2) parts with '//' From 45516ca1d830fd21f75942bf414d540db1ab0db2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Sun, 27 Oct 2024 15:13:05 +0100 Subject: [PATCH 14/70] docs(jsontools): document requirements Fixes #10834 --- plugins/jsontools/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/plugins/jsontools/README.md b/plugins/jsontools/README.md index d92608806..804edba40 100644 --- a/plugins/jsontools/README.md +++ b/plugins/jsontools/README.md @@ -8,6 +8,17 @@ To use it, add `jsontools` to the plugins array in your zshrc file: plugins=(... jsontools) ``` +## Requirements + +The plugin uses one of these tools to process JSON data, in the following order: + +- `node` +- `python3` +- `ruby` + +Any of these must be in `$PATH` before the plugin is loaded, otherwise the plugin exits +prematurely and the functions will not be available. + ## Usage Usage is simple... just take your json data and pipe it into the appropriate jsontool: From 68d189cb35b9826dc186f1697a501314a63e6fe2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Sun, 27 Oct 2024 15:51:38 +0100 Subject: [PATCH 15/70] fix(last-working-dir): save working directory more strictly (#11343) Fixes #11343 --- .../last-working-dir.plugin.zsh | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/plugins/last-working-dir/last-working-dir.plugin.zsh b/plugins/last-working-dir/last-working-dir.plugin.zsh index 684972cc1..b816f6a8f 100644 --- a/plugins/last-working-dir/last-working-dir.plugin.zsh +++ b/plugins/last-working-dir/last-working-dir.plugin.zsh @@ -9,20 +9,23 @@ chpwd_last_working_dir() { [[ "$ZSH_SUBSHELL" -eq 0 ]] || return 0 # Add ".$SSH_USER" suffix to cache file if $SSH_USER is set and non-empty local cache_file="$ZSH_CACHE_DIR/last-working-dir${SSH_USER:+.$SSH_USER}" - builtin pwd >| "$cache_file" + 'builtin' 'echo' '-E' "$PWD" >| "$cache_file" } # Changes directory to the last working directory lwd() { # Add ".$SSH_USER" suffix to cache file if $SSH_USER is set and non-empty local cache_file="$ZSH_CACHE_DIR/last-working-dir${SSH_USER:+.$SSH_USER}" - [[ -r "$cache_file" ]] && cd "$(cat "$cache_file")" + [[ -r "$cache_file" ]] && cd "$(<"$cache_file")" } # Jump to last directory automatically unless: -# - this isn't the first time the plugin is loaded -# - it's not in $HOME directory -[[ -n "$ZSH_LAST_WORKING_DIRECTORY" ]] && return -[[ "$PWD" != "$HOME" ]] && return +# +# - 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 -lwd 2>/dev/null && ZSH_LAST_WORKING_DIRECTORY=1 || true +if lwd 2>/dev/null; then + ZSH_LAST_WORKING_DIRECTORY=1 +fi From fa64758aeaeb17abdefca5d193c1002230048977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Sun, 27 Oct 2024 17:31:38 +0100 Subject: [PATCH 16/70] fix(vagrant-prompt): make `vagrant_prompt_info` generic for any state (#12782) --- plugins/vagrant-prompt/README.md | 25 +++++++++++++++-- .../vagrant-prompt/vagrant-prompt.plugin.zsh | 28 ++++++++++--------- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/plugins/vagrant-prompt/README.md b/plugins/vagrant-prompt/README.md index 0720f4bde..f7bfce4f3 100644 --- a/plugins/vagrant-prompt/README.md +++ b/plugins/vagrant-prompt/README.md @@ -17,11 +17,15 @@ To display Vagrant info on your prompt add the `vagrant_prompt_info` to the `$PROMPT` or `$RPROMPT` variable in your theme. Example: ```zsh -PROMPT='%{$fg[$NCOLOR]%}%B%n%b%{$reset_color%}:%{$fg[blue]%}%B%c/%b%{$reset_color%} $(vagrant_prompt_info)$(svn_prompt_info)$(git_prompt_info)%(!.#.$) ' +PROMPT="$PROMPT"' $(vagrant_prompt_info)' +# or +RPROMPT='$(vagrant_prompt_info)' ``` -`vagrant_prompt_info` makes use of some custom variables. This is an example -definition: +### Customization + +`vagrant_prompt_info` makes use of the following custom variables, which can be set in your +`.zshrc` file: ```zsh ZSH_THEME_VAGRANT_PROMPT_PREFIX="%{$fg_bold[blue]%}[" @@ -31,3 +35,18 @@ ZSH_THEME_VAGRANT_PROMPT_POWEROFF="%{$fg_no_bold[red]%}●" ZSH_THEME_VAGRANT_PROMPT_SUSPENDED="%{$fg_no_bold[yellow]%}●" ZSH_THEME_VAGRANT_PROMPT_NOT_CREATED="%{$fg_no_bold[white]%}○" ``` + +### State to variable mapping + +The plugin uses the output reported by `vagrant status` to print whichever symbol matches, +according to the following table: + +| State | Symbol | +| ----------- | -------------------------------------- | +| running | `ZSH_THEME_VAGRANT_PROMPT_RUNNING` | +| not running | `ZSH_THEME_VAGRANT_PROMPT_POWEROFF` | +| poweroff | `ZSH_THEME_VAGRANT_PROMPT_POWEROFF` | +| paused | `ZSH_THEME_VAGRANT_PROMPT_SUSPENDED` | +| saved | `ZSH_THEME_VAGRANT_PROMPT_SUSPENDED` | +| suspended | `ZSH_THEME_VAGRANT_PROMPT_SUSPENDED` | +| not created | `ZSH_THEME_VAGRANT_PROMPT_NOT_CREATED` | diff --git a/plugins/vagrant-prompt/vagrant-prompt.plugin.zsh b/plugins/vagrant-prompt/vagrant-prompt.plugin.zsh index 29f4038c5..2d8455a53 100644 --- a/plugins/vagrant-prompt/vagrant-prompt.plugin.zsh +++ b/plugins/vagrant-prompt/vagrant-prompt.plugin.zsh @@ -1,16 +1,18 @@ function vagrant_prompt_info() { - local vm_states vm_state - if [[ -d .vagrant && -f Vagrantfile ]]; then - vm_states=(${(f)"$(vagrant status 2> /dev/null | sed -nE 's/^.*(saved|poweroff|running|not created) \([[:alnum:]_]+\)$/\1/p')"}) - printf '%s' $ZSH_THEME_VAGRANT_PROMPT_PREFIX - for vm_state in $vm_states; do - case "$vm_state" in - saved) printf '%s' $ZSH_THEME_VAGRANT_PROMPT_SUSPENDED ;; - running) printf '%s' $ZSH_THEME_VAGRANT_PROMPT_RUNNING ;; - poweroff) printf '%s' $ZSH_THEME_VAGRANT_PROMPT_POWEROFF ;; - "not created") printf '%s' $ZSH_THEME_VAGRANT_PROMPT_NOT_CREATED ;; - esac - done - printf '%s' $ZSH_THEME_VAGRANT_PROMPT_SUFFIX + if [[ ! -d .vagrant || ! -f Vagrantfile ]]; then + return fi + + local vm_states vm_state + vm_states=(${(f)"$(vagrant status 2> /dev/null | sed -nE 's/^[^ ]* *([[:alnum:] ]*) \([[:alnum:]_]+\)$/\1/p')"}) + printf '%s' $ZSH_THEME_VAGRANT_PROMPT_PREFIX + for vm_state in $vm_states; do + case "$vm_state" in + running) printf '%s' $ZSH_THEME_VAGRANT_PROMPT_RUNNING ;; + "not running"|poweroff) printf '%s' $ZSH_THEME_VAGRANT_PROMPT_POWEROFF ;; + paused|saved|suspended) printf '%s' $ZSH_THEME_VAGRANT_PROMPT_SUSPENDED ;; + "not created") printf '%s' $ZSH_THEME_VAGRANT_PROMPT_NOT_CREATED ;; + esac + done + printf '%s' $ZSH_THEME_VAGRANT_PROMPT_SUFFIX } From c690f731618959cba3b85500acee20ebf43e51c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Sun, 27 Oct 2024 20:46:46 +0100 Subject: [PATCH 17/70] feat: add `devcontainers` configuration (#12783) Co-authored-by: Vatsal Gupta <40350810+gvatsal60@users.noreply.github.com> --- .devcontainer/devcontainer.json | 20 ++++++++++++++++++++ .editorconfig | 4 ++++ templates/minimal.zshrc | 5 +++++ templates/zshrc.zsh-template | 2 +- 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 .devcontainer/devcontainer.json create mode 100644 templates/minimal.zshrc diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..d3ad1a3a7 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,20 @@ +{ + "image": "mcr.microsoft.com/devcontainers/base:noble", + "features": { + "ghcr.io/devcontainers/features/common-utils": { + "installZsh": true, + "configureZshAsDefaultShell": true, + "username": "vscode", + "userUid": 1000, + "userGid": 1000 + } + }, + "postCreateCommand": "dir=/workspaces/ohmyzsh; rm -rf $HOME/.oh-my-zsh && ln -s $dir $HOME/.oh-my-zsh && cp $dir/templates/minimal.zshrc $HOME/.zshrc && chgrp -R 1000 $dir && chmod g-w,o-w $dir", + "customizations": { + "codespaces": { + "openFiles": [ + "README.md" + ] + } + } +} diff --git a/.editorconfig b/.editorconfig index b349bcc42..797fb62d0 100644 --- a/.editorconfig +++ b/.editorconfig @@ -9,3 +9,7 @@ indent_style = space [*.py] indent_size = 4 + +[devcontainer.json] +indent_size = 4 +indent_style = tab diff --git a/templates/minimal.zshrc b/templates/minimal.zshrc new file mode 100644 index 000000000..6d4cd9a71 --- /dev/null +++ b/templates/minimal.zshrc @@ -0,0 +1,5 @@ +export ZSH="$HOME/.oh-my-zsh" +ZSH_THEME="robbyrussell" +plugins=(git) + +source $ZSH/oh-my-zsh.sh diff --git a/templates/zshrc.zsh-template b/templates/zshrc.zsh-template index 3546ed82b..fa83cc0c6 100644 --- a/templates/zshrc.zsh-template +++ b/templates/zshrc.zsh-template @@ -2,7 +2,7 @@ # export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH # Path to your Oh My Zsh installation. -export ZSH=$HOME/.oh-my-zsh +export ZSH="$HOME/.oh-my-zsh" # Set name of the theme to load --- if set to "random", it will # load a random theme each time Oh My Zsh is loaded, in which case, From 7ed475cb589c9e82211f71b3a5d7083b69cea93c Mon Sep 17 00:00:00 2001 From: drjaska <88596812+drjaska@users.noreply.github.com> Date: Sun, 3 Nov 2024 16:35:58 +0200 Subject: [PATCH 18/70] feat(autojump): add `termux` install path (#12791) --- plugins/autojump/autojump.plugin.zsh | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/autojump/autojump.plugin.zsh b/plugins/autojump/autojump.plugin.zsh index e385a2de8..a0668a415 100644 --- a/plugins/autojump/autojump.plugin.zsh +++ b/plugins/autojump/autojump.plugin.zsh @@ -6,6 +6,7 @@ autojump_paths=( /run/current-system/sw/share/autojump/autojump.zsh # NixOS installation /etc/profiles/per-user/$USER/share/autojump/autojump.zsh # Home Manager, NixOS with user-scoped packages /usr/share/autojump/autojump.zsh # Debian and Ubuntu package + $PREFIX/share/autojump/autojump.zsh # Termux package /etc/profile.d/autojump.zsh # manual installation /etc/profile.d/autojump.sh # Gentoo installation /usr/local/share/autojump/autojump.zsh # FreeBSD installation From ca5471fe496f00007727fd26db762d19519c2e8f Mon Sep 17 00:00:00 2001 From: Kate Sullivan <75387802+katesullivan@users.noreply.github.com> Date: Thu, 14 Nov 2024 02:00:48 -0600 Subject: [PATCH 19/70] fix(poetry-env): switch venv between poetry dirs (#12804) Co-authored-by: Carlo Sala --- plugins/poetry-env/poetry-env.plugin.zsh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/poetry-env/poetry-env.plugin.zsh b/plugins/poetry-env/poetry-env.plugin.zsh index dd52b1655..dca388dfe 100644 --- a/plugins/poetry-env/poetry-env.plugin.zsh +++ b/plugins/poetry-env/poetry-env.plugin.zsh @@ -6,8 +6,7 @@ _togglePoetryShell() { fi # Deactivate the current environment if moving out of a Poetry directory or into a different Poetry directory - if [[ $poetry_active -eq 1 ]] && [[ $in_poetry_dir -eq 0 ]] \ - && [[ "$PWD" != "$poetry_dir"* ]]; then + if [[ $poetry_active -eq 1 ]] && { [[ $in_poetry_dir -eq 0 ]] || [[ "$PWD" != "$poetry_dir"* ]]; }; then export poetry_active=0 unset poetry_dir (( $+functions[deactivate] )) && deactivate From b5d52682cab844a5ffdc1b1f2ee80de561e0e6aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Tue, 19 Nov 2024 15:43:04 +0100 Subject: [PATCH 20/70] fix(dash): urlencode special parameters like `:` in query (#12811) In macOS, using queries such as `dash php:enum` does not open Dash.app, possibly due to colon character being interpreted as a port. URL-encoding the parameter (: -> %3A) makes this work again. Fixes https://discord.com/channels/642496866407284746/809850042575093760/1308076125456437300 --- plugins/dash/dash.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/dash/dash.plugin.zsh b/plugins/dash/dash.plugin.zsh index f6801a870..9abd691c7 100644 --- a/plugins/dash/dash.plugin.zsh +++ b/plugins/dash/dash.plugin.zsh @@ -1,5 +1,5 @@ # Usage: dash [keyword:]query -dash() { open -a Dash.app dash://"$*" } +dash() { open -a Dash.app "dash://$(omz_urlencode -r $*)" } compdef _dash dash _dash() { From 081d704f3273df6095b712096e3f334b04f52782 Mon Sep 17 00:00:00 2001 From: Olivier Mehani Date: Wed, 20 Nov 2024 06:32:01 +1100 Subject: [PATCH 21/70] feat(pyenv): add prompt customization (#12738) Co-authored-by: Carlo Sala --- plugins/pyenv/README.md | 8 ++++++++ plugins/pyenv/pyenv.plugin.zsh | 10 ++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/plugins/pyenv/README.md b/plugins/pyenv/README.md index 95d79cb52..2476bbd95 100644 --- a/plugins/pyenv/README.md +++ b/plugins/pyenv/README.md @@ -26,6 +26,14 @@ eval "$(pyenv init --path)" - `ZSH_PYENV_VIRTUALENV`: if set to `false`, the plugin will not load pyenv-virtualenv when it finds it. +- `ZSH_THEME_PYENV_NO_SYSTEM`: if set to `true`, the plugin will not show the system or + default Python version when it finds it. +- `ZSH_THEME_PYENV_PREFIX`: the prefix to display before the Python version in + the prompt. + +- `ZSH_THEME_PYENV_SUFFIX`: the prefix to display after the Python version in + the prompt. + ## Functions - `pyenv_prompt_info`: displays the Python version in use by pyenv; or the global Python diff --git a/plugins/pyenv/pyenv.plugin.zsh b/plugins/pyenv/pyenv.plugin.zsh index b5c9a7bd3..cd2a9e0ac 100644 --- a/plugins/pyenv/pyenv.plugin.zsh +++ b/plugins/pyenv/pyenv.plugin.zsh @@ -88,13 +88,19 @@ if [[ $FOUND_PYENV -eq 1 ]]; then function pyenv_prompt_info() { local version="$(pyenv version-name)" - echo "${version:gs/%/%%}" + if [[ "$ZSH_THEME_PYENV_NO_SYSTEM" == "true" ]] && [[ "${version}" == "system" ]]; then + return + fi + echo "${ZSH_THEME_PYENV_PREFIX=}${version:gs/%/%%}${ZSH_THEME_PYENV_SUFFIX=}" } else # Fall back to system python function pyenv_prompt_info() { + if [[ "$ZSH_THEME_PYENV_NO_SYSTEM" == "true" ]]; then + return + fi local version="$(python3 -V 2>&1 | cut -d' ' -f2)" - echo "system: ${version:gs/%/%%}" + echo "${ZSH_THEME_PYENV_PREFIX=}system: ${version:gs/%/%%}${ZSH_THEME_PYENV_SUFFIX=}" } fi From e636eeb6963edf52d726112155bd9712654e2381 Mon Sep 17 00:00:00 2001 From: Hu Yufan <58105986+Hyffer@users.noreply.github.com> Date: Wed, 20 Nov 2024 03:34:28 +0800 Subject: [PATCH 22/70] fix(tailscale): load completion when `tailscale` is an alias (#12726) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes it work when Tailscale is installed via App Store: https://tailscale.com/kb/1080/cli?tab=macos. Co-authored-by: Marc Cornellà --- plugins/tailscale/tailscale.plugin.zsh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/plugins/tailscale/tailscale.plugin.zsh b/plugins/tailscale/tailscale.plugin.zsh index 7f0b1414a..e0e011196 100644 --- a/plugins/tailscale/tailscale.plugin.zsh +++ b/plugins/tailscale/tailscale.plugin.zsh @@ -1,4 +1,4 @@ -if (( ! $+commands[tailscale] )); then +if (( ! $+commands[tailscale] && ! $+aliases[tailscale] )); then return fi @@ -7,7 +7,12 @@ fi if [[ ! -f "$ZSH_CACHE_DIR/completions/_tailscale" ]]; then typeset -g -A _comps autoload -Uz _tailscale - _comps[tailscale]=_tailscale + + if (( $+commands[tailscale] )); then + _comps[tailscale]=_tailscale + elif (( $+aliases[tailscale] )); then + _comps[${aliases[tailscale]:t}]=_tailscale + fi fi tailscale completion zsh >| "$ZSH_CACHE_DIR/completions/_tailscale" &| From 9ad764d80c3b0cca1fb3251cb9c14e25543d5a42 Mon Sep 17 00:00:00 2001 From: nervo Date: Tue, 19 Nov 2024 20:47:20 +0100 Subject: [PATCH 23/70] feat(vault): re-introduce vault plugin (#12753) Co-authored-by: Carlo Sala --- plugins/vault/README.md | 9 +++++++++ plugins/vault/vault.plugin.zsh | 7 +++++++ 2 files changed, 16 insertions(+) create mode 100644 plugins/vault/README.md create mode 100644 plugins/vault/vault.plugin.zsh diff --git a/plugins/vault/README.md b/plugins/vault/README.md new file mode 100644 index 000000000..cc270a385 --- /dev/null +++ b/plugins/vault/README.md @@ -0,0 +1,9 @@ +# Vault plugin + +This plugin adds completion for [Vault](https://www.vaultproject.io/), the secrets and sensitive data manager. + +To use it, add `vault` to the plugins array in your zshrc file: + +```zsh +plugins=(... vault) +``` diff --git a/plugins/vault/vault.plugin.zsh b/plugins/vault/vault.plugin.zsh new file mode 100644 index 000000000..996cd12ad --- /dev/null +++ b/plugins/vault/vault.plugin.zsh @@ -0,0 +1,7 @@ +# Completion +if (( ! $+commands[vault] )); then + return +fi + +autoload -Uz bashcompinit && bashcompinit +complete -o nospace -C vault vault From 2e8d2d74014f366461d36712840ea59e8f734df3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Tue, 19 Nov 2024 21:05:34 +0100 Subject: [PATCH 24/70] fix(pipenv): fix auto-shell functionality when cd-ing out (#12813) Co-authored-by: Jean-Tiare Le Bigot --- plugins/pipenv/pipenv.plugin.zsh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/pipenv/pipenv.plugin.zsh b/plugins/pipenv/pipenv.plugin.zsh index f81c266a4..76d66b301 100644 --- a/plugins/pipenv/pipenv.plugin.zsh +++ b/plugins/pipenv/pipenv.plugin.zsh @@ -19,7 +19,8 @@ if zstyle -T ':omz:plugins:pipenv' auto-shell; then if [[ ! -f "$PWD/Pipfile" ]]; then if [[ "$PIPENV_ACTIVE" == 1 ]]; then if [[ "$PWD" != "$pipfile_dir"* ]]; then - exit + unset PIPENV_ACTIVE pipfile_dir + deactivate fi fi fi @@ -28,7 +29,8 @@ if zstyle -T ':omz:plugins:pipenv' auto-shell; then if [[ "$PIPENV_ACTIVE" != 1 ]]; then if [[ -f "$PWD/Pipfile" ]]; then export pipfile_dir="$PWD" - pipenv shell + source "$(pipenv --venv)/bin/activate" + export PIPENV_ACTIVE=1 fi fi } From 1b9d6e5c82cab11ad58eb43988d4e5a256dabdc6 Mon Sep 17 00:00:00 2001 From: Matheus Pimenta Date: Tue, 19 Nov 2024 20:11:51 +0000 Subject: [PATCH 25/70] feat(timoni): add completion plugin (#12802) --- plugins/timoni/README.md | 9 +++++++++ plugins/timoni/timoni.plugin.zsh | 14 ++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 plugins/timoni/README.md create mode 100644 plugins/timoni/timoni.plugin.zsh diff --git a/plugins/timoni/README.md b/plugins/timoni/README.md new file mode 100644 index 000000000..8701ede48 --- /dev/null +++ b/plugins/timoni/README.md @@ -0,0 +1,9 @@ +# Timoni plugin + +This plugin adds completion for [Timoni](https://timoni.sh), a package manager for Kubernetes, powered by CUE and inspired by Helm. + +To use it, add `timoni` to the plugins array in your zshrc file: + +```zsh +plugins=(... timoni) +``` diff --git a/plugins/timoni/timoni.plugin.zsh b/plugins/timoni/timoni.plugin.zsh new file mode 100644 index 000000000..971eda0b4 --- /dev/null +++ b/plugins/timoni/timoni.plugin.zsh @@ -0,0 +1,14 @@ +# Autocompletion for the Timoni CLI (timoni). +if (( ! $+commands[timoni] )); then + return +fi + +# If the completion file doesn't exist yet, we need to autoload it and +# bind it to `timoni`. Otherwise, compinit will have already done that. +if [[ ! -f "$ZSH_CACHE_DIR/completions/_timoni" ]]; then + typeset -g -A _comps + autoload -Uz _timoni + _comps[timoni]=_timoni +fi + +timoni completion zsh >| "$ZSH_CACHE_DIR/completions/_timoni" &| From 9991822f8cfcef020fa7e99a6d47303bd900f721 Mon Sep 17 00:00:00 2001 From: Markus Hofbauer Date: Tue, 19 Nov 2024 21:20:58 +0100 Subject: [PATCH 26/70] feat(bazel): add bzlmod integrity gen function (#12797) Co-authored-by: Carlo Sala --- plugins/bazel/README.md | 21 ++++++++++++++------- plugins/bazel/bazel.plugin.zsh | 4 ++++ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/plugins/bazel/README.md b/plugins/bazel/README.md index eba4175bc..b0c34a15f 100644 --- a/plugins/bazel/README.md +++ b/plugins/bazel/README.md @@ -1,6 +1,7 @@ # Bazel plugin -This plugin adds completion and aliases for [bazel](https://bazel.build), an open-source build and test tool that scalably supports multi-language and multi-platform projects. +This plugin adds completion and aliases for [bazel](https://bazel.build), an open-source build and test tool +that scalably supports multi-language and multi-platform projects. To use it, add `bazel` to the plugins array in your zshrc file: @@ -14,9 +15,15 @@ The plugin has a copy of [the completion script from the git repository][1]. ## Aliases -| Alias | Command | Description | -| ------- | -------------------------------------- | ------------------------------------------------------ | -| bzb | `bazel build` | The `bazel build` command | -| bzt | `bazel test` | The `bazel test` command | -| bzr | `bazel run` | The `bazel run` command | -| bzq | `bazel query` | The `bazel query` command | +| Alias | Command | Description | +| ----- | ------------- | ------------------------- | +| bzb | `bazel build` | The `bazel build` command | +| bzt | `bazel test` | The `bazel test` command | +| bzr | `bazel run` | The `bazel run` command | +| bzq | `bazel query` | The `bazel query` command | + +## Functions + +| Function | Description | +| -------- | -------------------------------- | +| sri-hash | Generate SRI hash used by bzlmod | diff --git a/plugins/bazel/bazel.plugin.zsh b/plugins/bazel/bazel.plugin.zsh index d239a06b5..818d5652b 100644 --- a/plugins/bazel/bazel.plugin.zsh +++ b/plugins/bazel/bazel.plugin.zsh @@ -3,3 +3,7 @@ alias bzb='bazel build' alias bzt='bazel test' alias bzr='bazel run' alias bzq='bazel query' + +sri-hash() { + openssl dgst -sha256 -binary $1 | openssl base64 -A | sed 's/^/sha256-/' +} From 6c91a5e389a26f532ba2fdbe40216b0d79e33124 Mon Sep 17 00:00:00 2001 From: Chris Texe Date: Wed, 20 Nov 2024 10:04:46 +0100 Subject: [PATCH 27/70] feat(laravel): add alias for `optimize:clear` (#12793) Co-authored-by: Carlo Sala --- 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 21eb89373..d722770c9 100644 --- a/plugins/laravel/README.md +++ b/plugins/laravel/README.md @@ -49,6 +49,7 @@ plugins=(... laravel) | `pacoc` | `php artisan config:clear` | | `pavic` | `php artisan view:clear` | | `paroc` | `php artisan route:clear` | +| `paopc` | `php artisan optimize:clear` | ## Queues diff --git a/plugins/laravel/laravel.plugin.zsh b/plugins/laravel/laravel.plugin.zsh index 86ae27299..ef462b13c 100644 --- a/plugins/laravel/laravel.plugin.zsh +++ b/plugins/laravel/laravel.plugin.zsh @@ -36,6 +36,7 @@ alias pacac='php artisan cache:clear' alias pacoc='php artisan config:clear' alias pavic='php artisan view:clear' alias paroc='php artisan route:clear' +alias paopc='php artisan optimize:clear' # queues alias paqf='php artisan queue:failed' From ccbe504f224a0aae688aaa729d4258e3392a9fc8 Mon Sep 17 00:00:00 2001 From: Bin Chang Date: Thu, 21 Nov 2024 16:01:48 +0800 Subject: [PATCH 28/70] chore: fix some typos (#12818) --- lib/misc.zsh | 2 +- plugins/macports/README.md | 2 +- plugins/opentofu/README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/misc.zsh b/lib/misc.zsh index ff2017713..054485f5a 100644 --- a/lib/misc.zsh +++ b/lib/misc.zsh @@ -19,7 +19,7 @@ setopt multios # enable redirect to multiple streams: echo >file1 > setopt long_list_jobs # show long list format job notifications setopt interactivecomments # recognize comments -# define pager dependant on what is available (less or more) +# define pager depending on what is available (less or more) if (( ${+commands[less]} )); then env_default 'PAGER' 'less' env_default 'LESS' '-R' diff --git a/plugins/macports/README.md b/plugins/macports/README.md index 09bd42df2..ffe3f973f 100644 --- a/plugins/macports/README.md +++ b/plugins/macports/README.md @@ -16,7 +16,7 @@ plugins=(... macports) | pc | `sudo port clean --all installed` | Clean up intermediate installation files for installed ports | | pi | `sudo port install` | Install package given as argument | | pli | `port livecheck installed` | Check for updates for installed ports | -| plm | `port-livecheck-maintainer` | Check for updates of ports mainained by the specified users | +| plm | `port-livecheck-maintainer` | Check for updates of ports maintained by the specified users | | psu | `sudo port selfupdate` | Update ports tree with MacPorts repository | | puni | `sudo port uninstall inactive` | Uninstall inactive ports | | puo | `sudo port upgrade outdated` | Upgrade ports with newer versions available | diff --git a/plugins/opentofu/README.md b/plugins/opentofu/README.md index 56f116492..45b98c3c9 100644 --- a/plugins/opentofu/README.md +++ b/plugins/opentofu/README.md @@ -40,7 +40,7 @@ plugins=(... opentofu) - `tofu_prompt_info`: shows the current workspace when in an OpenTofu project directory. -- `tofu_version_prompt_info`: shows the current version of the `tofu` commmand. +- `tofu_version_prompt_info`: shows the current version of the `tofu` command. To use them, add them to a `PROMPT` variable in your theme or `.zshrc` file: From 366d25435229bfa725109a147d6cb2fef8011b3c Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Sun, 24 Nov 2024 13:25:13 +0100 Subject: [PATCH 29/70] feat(wd): update to v0.9.2 (#12820) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/wd/wd.sh | 42 ++++++++++++++++++++++++---------------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index d53b0cd4d..603bf7566 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -28,7 +28,7 @@ dependencies: plugins/wd: repo: mfaerevaag/wd branch: master - version: tag:v0.9.1 + version: tag:v0.9.2 precopy: | set -e rm -r test diff --git a/plugins/wd/wd.sh b/plugins/wd/wd.sh index 66435a2a6..962ad9afa 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.1 +readonly WD_VERSION=0.9.2 # colors readonly WD_BLUE="\033[96m" @@ -145,14 +145,17 @@ wd_warp() else (( n = $#1 - 1 )) cd -$n > /dev/null + WD_EXIT_CODE=$? fi elif [[ ${points[$point]} != "" ]] then if [[ $sub != "" ]] then cd ${points[$point]/#\~/$HOME}/$sub + WD_EXIT_CODE=$? else cd ${points[$point]/#\~/$HOME} + WD_EXIT_CODE=$? fi else wd_exit_fail "Unknown warp point '${point}'" @@ -185,11 +188,11 @@ wd_add() elif [[ ${points[$point]} == "" ]] || [ ! -z "$force" ] then wd_remove "$point" > /dev/null - printf "%q:%s\n" "${point}" "${PWD/#$HOME/~}" >> "$WD_CONFIG" + printf "%q:%s\n" "${point}" "${PWD/#$HOME/~}" >> "$wd_config_file" if (whence sort >/dev/null); then local config_tmp=$(mktemp "${TMPDIR:-/tmp}/wd.XXXXXXXXXX") - # use 'cat' below to ensure we respect $WD_CONFIG as a symlink - command sort -o "${config_tmp}" "$WD_CONFIG" && command cat "${config_tmp}" >| "$WD_CONFIG" && command rm "${config_tmp}" + # use 'cat' below to ensure we respect $wd_config_file as a symlink + command sort -o "${config_tmp}" "$wd_config_file" && command cat "${config_tmp}" >| "$wd_config_file" && command rm "${config_tmp}" fi wd_export_static_named_directories @@ -240,7 +243,7 @@ wd_remove() then local config_tmp=$(mktemp "${TMPDIR:-/tmp}/wd.XXXXXXXXXX") # Copy and delete in two steps in order to preserve symlinks - if sed -n "/^${point_name}:.*$/!p" "$WD_CONFIG" >| "$config_tmp" && command cp "$config_tmp" "$WD_CONFIG" && command rm "$config_tmp" + if sed -n "/^${point_name}:.*$/!p" "$wd_config_file" >| "$config_tmp" && command cp "$config_tmp" "$wd_config_file" && command rm "$config_tmp" then wd_print_msg "$WD_GREEN" "Warp point removed" else @@ -257,7 +260,7 @@ wd_browse() { echo "This functionality requires fzf. Please install fzf first." return 1 fi - local entries=("${(@f)$(sed "s:${HOME}:~:g" "$WD_CONFIG" | awk -F ':' '{print $1 " -> " $2}')}") + local entries=("${(@f)$(sed "s:${HOME}:~:g" "$wd_config_file" | awk -F ':' '{print $1 " -> " $2}')}") local script_path="${${(%):-%x}:h}" local wd_remove_output=$(mktemp "${TMPDIR:-/tmp}/wd.XXXXXXXXXX") entries=("All warp points:" "Press enter to select. Press delete to remove" "${entries[@]}") @@ -275,7 +278,7 @@ wd_browse() { } wd_browse_widget() { - if [[ -e $WD_CONFIG ]]; then + if [[ -e $wd_config_file ]]; then wd_browse saved_buffer=$BUFFER saved_cursor=$CURSOR @@ -298,7 +301,7 @@ wd_list_all() { wd_print_msg "$WD_BLUE" "All warp points:" - entries=$(sed "s:${HOME}:~:g" "$WD_CONFIG") + entries=$(sed "s:${HOME}:~:g" "$wd_config_file") max_warp_point_length=0 while IFS= read -r line @@ -398,7 +401,7 @@ wd_clean() { count=$((count+1)) fi fi - done < "$WD_CONFIG" + done < "$wd_config_file" if [[ $count -eq 0 ]] then @@ -406,7 +409,7 @@ wd_clean() { else if [ ! -z "$force" ] || wd_yesorno "Removing ${count} warp points. Continue? (y/n)" then - echo "$wd_tmp" >! "$WD_CONFIG" + echo "$wd_tmp" >! "$wd_config_file" wd_print_msg "$WD_GREEN" "Cleanup complete. ${count} warp point(s) removed" else wd_print_msg "$WD_BLUE" "Cleanup aborted" @@ -417,7 +420,7 @@ wd_clean() { wd_export_static_named_directories() { if [[ ! -z $WD_EXPORT ]] then - command grep '^[0-9a-zA-Z_-]\+:' "$WD_CONFIG" | sed -e "s,~,$HOME," -e 's/:/=/' | while read -r warpdir ; do + command grep '^[0-9a-zA-Z_-]\+:' "$wd_config_file" | sed -e "s,~,$HOME," -e 's/:/=/' | while read -r warpdir ; do hash -d "$warpdir" done fi @@ -442,16 +445,19 @@ then echo "wd version $WD_VERSION" fi +# set the config file from variable or default +typeset wd_config_file=${WD_CONFIG:-$HOME/.warprc} if [[ ! -z $wd_alt_config ]] then - WD_CONFIG=$wd_alt_config[2] + # prefer the flag if provided + wd_config_file=$wd_alt_config[2] fi # check if config file exists -if [ ! -e "$WD_CONFIG" ] +if [ ! -e "$wd_config_file" ] then # if not, create config file - touch "$WD_CONFIG" + touch "$wd_config_file" else wd_export_static_named_directories fi @@ -473,7 +479,7 @@ do val=${(j,:,)arr[2,-1]} points[$key]=$val -done < "$WD_CONFIG" +done < "$wd_config_file" # get opts args=$(getopt -o a:r:c:lhs -l add:,rm:,clean,list,ls:,path:,help,show -- $*) @@ -484,11 +490,11 @@ then wd_print_usage # check if config file is writeable -elif [ ! -w "$WD_CONFIG" ] +elif [ ! -w "$wd_config_file" ] then # do nothing # can't run `exit`, as this would exit the executing shell - wd_exit_fail "\'$WD_CONFIG\' is not writeable." + wd_exit_fail "\'$wd_config_file\' is not writeable." else # parse rest of options @@ -572,8 +578,10 @@ unset wd_print_msg unset wd_yesorno unset wd_print_usage unset wd_alt_config +unset wd_config_file unset wd_quiet_mode unset wd_print_version +unset wd_force_mode unset wd_export_static_named_directories unset wd_o From 69a6359f7cf8978d464573fb7b023ee3cd00181a Mon Sep 17 00:00:00 2001 From: Jonathan Stacks Date: Thu, 28 Nov 2024 00:57:21 -0800 Subject: [PATCH 30/70] feat(ngrok): add completion plugin (#12826) --- plugins/ngrok/README.md | 20 ++++++++++++++++++++ plugins/ngrok/ngrok.plugin.zsh | 14 ++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 plugins/ngrok/README.md create mode 100644 plugins/ngrok/ngrok.plugin.zsh diff --git a/plugins/ngrok/README.md b/plugins/ngrok/README.md new file mode 100644 index 000000000..6c37b1905 --- /dev/null +++ b/plugins/ngrok/README.md @@ -0,0 +1,20 @@ +# ngrok plugin + +This plugin adds completion for the [ngrok](https://ngrok.com) CLI. + +To use it, add `ngrok` to the plugins array in your zshrc file: + +```zsh +plugins=(... ngrok) +``` + +This plugin does not add any aliases. + +## Cache + +This plugin caches the completion script and is automatically updated asynchronously when the plugin is +loaded, which is usually when you start up a new terminal emulator. + +The cache is stored at: + +- `$ZSH_CACHE/completions/_ngrok` completions script diff --git a/plugins/ngrok/ngrok.plugin.zsh b/plugins/ngrok/ngrok.plugin.zsh new file mode 100644 index 000000000..ca3c82db0 --- /dev/null +++ b/plugins/ngrok/ngrok.plugin.zsh @@ -0,0 +1,14 @@ +# Autocompletion for ngrok +if (( ! $+commands[ngrok] )); then + return +fi + +# If the completion file doesn't exist yet, we need to autoload it and +# bind it to `ngrok`. Otherwise, compinit will have already done that. +if [[ ! -f "$ZSH_CACHE_DIR/completions/_ngrok" ]]; then + typeset -g -A _comps + autoload -Uz _ngrok + _comps[ngrok]=_ngrok +fi + +ngrok completion zsh >| "$ZSH_CACHE_DIR/completions/_ngrok" &| From 62e3e0b2fdd25919de6ae2d4e09317e1bd07a2dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 15 Dec 2024 23:38:56 +0100 Subject: [PATCH 31/70] chore(deps): bump certifi from 2024.8.30 to 2024.12.14 in /.github/workflows/dependencies (#12848) 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 ed0d129b3..8ca4477c9 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,4 +1,4 @@ -certifi==2024.8.30 +certifi==2024.12.14 charset-normalizer==3.4.0 idna==3.10 PyYAML==6.0.2 From b9e73b44811becbdf24cff54441c73839a29c523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Fran=C3=A7ois?= Date: Sun, 15 Dec 2024 23:40:09 +0100 Subject: [PATCH 32/70] docs(per-directory-history): add variable docs (#12844) --- plugins/per-directory-history/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/per-directory-history/README.md b/plugins/per-directory-history/README.md index 2816c11ba..c7d062a0c 100644 --- a/plugins/per-directory-history/README.md +++ b/plugins/per-directory-history/README.md @@ -35,6 +35,7 @@ toggle set the `PER_DIRECTORY_HISTORY_TOGGLE` environment variable. function above (default `^G`) * `PER_DIRECTORY_HISTORY_PRINT_MODE_CHANGE` is a variable which toggles whether the current mode is printed to the screen following a mode change (default `true`) +* `HISTORY_START_WITH_GLOBAL` is a global variable that defines how to start the plugin: global or local (default `false`) ## History From 048e166c9ea6c70d383141d89054740ae8d59681 Mon Sep 17 00:00:00 2001 From: "ohmyzsh[bot]" <54982679+ohmyzsh[bot]@users.noreply.github.com> Date: Sun, 22 Dec 2024 11:46:24 +0100 Subject: [PATCH 33/70] feat(z): update to dd94ef04 (#12862) Co-authored-by: ohmyzsh[bot] <54982679+ohmyzsh[bot]@users.noreply.github.com> --- .github/dependencies.yml | 2 +- plugins/z/LICENSE | 2 +- plugins/z/MANUAL.md | 51 ++++++++++++++++++++-------------------- plugins/z/z.plugin.zsh | 3 +-- 4 files changed, 28 insertions(+), 30 deletions(-) diff --git a/.github/dependencies.yml b/.github/dependencies.yml index 603bf7566..3386e55a0 100644 --- a/.github/dependencies.yml +++ b/.github/dependencies.yml @@ -36,7 +36,7 @@ dependencies: plugins/z: branch: master repo: agkozak/zsh-z - version: afaf2965b41fdc6ca66066e09382726aa0b6aa04 + version: dd94ef04acc41748ba171eb219971cb455e0040b precopy: | set -e test -e README.md && mv -f README.md MANUAL.md diff --git a/plugins/z/LICENSE b/plugins/z/LICENSE index 6af13b9e0..162cba8d1 100644 --- a/plugins/z/LICENSE +++ b/plugins/z/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2018-2023 Alexandros Kozak +Copyright (c) 2018-2024 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/MANUAL.md b/plugins/z/MANUAL.md index 106d8c107..eddf787dd 100644 --- a/plugins/z/MANUAL.md +++ b/plugins/z/MANUAL.md @@ -6,15 +6,15 @@ ![Zsh-z demo](img/demo.gif) -Zsh-z is a command line tool that allows you to jump quickly to directories that you have visited frequently in the past, or recently -- but most often a combination of the two (a concept known as ["frecency"](https://en.wikipedia.org/wiki/Frecency)). It works by keeping track of when you go to directories and how much time you spend in them. It is then in the position to guess where you want to go when you type a partial string, e.g., `z src` might take you to `~/src/zsh`. `z zsh` might also get you there, and `z c/z` might prove to be even more specific -- it all depends on your habits and how much time you have been using Zsh-z to build up a database. After using Zsh-z for a little while, you will get to where you want to be by typing considerably less than you would need if you were using `cd`. +Zsh-z is a command-line tool that allows you to jump quickly to directories that you have visited frequently or recently -- but most often a combination of the two (a concept known as ["frecency"](https://en.wikipedia.org/wiki/Frecency)). It works by keeping track of when you go to directories and how much time you spend in them. Based on this data, it predicts where you want to go when you type a partial string. For example, `z src` might take you to `~/src/zsh`. `z zsh` might also get you there, and `z c/z` might prove to be even more specific -- it all depends on your habits and how long you have been using Zsh-z to build up a database. After using Zsh-z for a little while, you will get to where you want to be by typing considerably less than you would need to if you were using `cd`. -Zsh-z is a native Zsh port of [rupa/z](https://github.com/rupa/z), a tool written for `bash` and Zsh that uses embedded `awk` scripts to do the heavy lifting. It was quite possibly my most used command line tool for a couple of years. I decided to translate it, `awk` parts and all, into pure Zsh script, to see if by eliminating calls to external tools (`awk`, `sort`, `date`, `sed`, `mv`, `rm`, and `chown`) and reducing forking through subshells I could make it faster. The performance increase is impressive, particularly on systems where forking is slow, such as Cygwin, MSYS2, and WSL. I have found that, in those environments, switching directories using Zsh-z can be over 100% faster than it is using `rupa/z`. +Zsh-z is a native Zsh port of [`rupa/z`](https://github.com/rupa/z), a tool written for `bash` and Zsh that uses embedded `awk` scripts to do the heavy lifting. `rupa/z` was my most used command-line tool for a couple of years. I decided to translate it, `awk` parts and all, into pure Zsh script, to see if by eliminating calls to external tools (`awk`, `sort`, `date`, `sed`, `mv`, `rm`, and `chown`) and reducing forking through subshells I could make it faster. The performance increase is impressive, particularly on systems where forking is slow, such as Cygwin, MSYS2, and WSL. I have found that in those environments, switching directories using Zsh-z can be over 100% faster than it is using `rupa/z`. -There is a noteworthy stability increase as well. Race conditions have always been a problem with `rupa/z`, and users of that utility will occasionally lose their `.z` databases. By having Zsh-z only use Zsh (`rupa/z` uses a hybrid shell code that works on `bash` as well), I have been able to implement a `zsh/system`-based file-locking mechanism similar to [the one @mafredri once proposed for `rupa/z`](https://github.com/rupa/z/pull/199). It is now nearly impossible to crash the database, even through extreme testing. +There is also a significant stability improvement. Race conditions have always been a problem with `rupa/z`, and users of that utility occasionally lose their `~/.z` databases. By having Zsh-z only use Zsh (`rupa/z` uses a hybrid shell code standard that works on `bash` as well), I have been able to implement a `zsh/system`-based file-locking mechanism similar to [the one @mafredri once proposed for `rupa/z`](https://github.com/rupa/z/pull/199). It is now nearly impossible to crash the database. -There are other, smaller improvements which I try to document in [Improvements and Fixes](#improvements-and-fixes). These include the new default behavior of sorting your tab completions by frecency rather than just letting Zsh sort the raw results alphabetically (a behavior which can be restored if you like it -- [see below](#settings)). +There are other, smaller improvements which I document below in [Improvements and Fixes](#improvements-and-fixes). For instance, tab completions are now sorted by frecency by default rather than alphabetically (the latter behavior can be restored if you like it -- [see below](#settings)). -Zsh-z is a drop-in replacement for `rupa/z` and will, by default, use the same database (`~/.z`), so you can go on using `rupa/z` when you launch `bash`. +Zsh-z is a drop-in replacement for `rupa/z` and will, by default, use the same database (`~/.z`, or whatever database file you specify), so you can go on using `rupa/z` when you launch `bash`. ## Table of Contents - [News](#news) @@ -37,13 +37,13 @@ Zsh-z is a drop-in replacement for `rupa/z` and will, by default, use the same d - August 24, 2023 + Zsh-z will now run when `setopt NO_UNSET` has been enabled (props @ntninja). - August 23, 2023 - + Better logic for loading `zsh/files` (props @z0rc) + + Better logic for loading `zsh/files` (props @z0rc). - August 2, 2023 - + Zsh-z still uses the `zsh/files` module when possible, but will fall back on the standard `chown`, `mv`, and `rm` commands in its absence. + + Zsh-z still uses the `zsh/files` module when possible but will fall back on the standard `chown`, `mv`, and `rm` commands in its absence. - April 27, 2023 + Zsh-z now allows the user to specify the directory-changing command using the `ZSHZ_CD` environment variable (default: `builtin cd`; props @basnijholt). - January 27, 2023 - + If the datafile directory specified by `ZSHZ_DATA` or `_Z_DATA` does not already exist, create it (props @mattmc3). + + If the database file directory specified by `ZSHZ_DATA` or `_Z_DATA` does not already exist, create it (props @mattmc3). - June 29, 2022 + Zsh-z is less likely to leave temporary files sitting around (props @mafredri). - June 27, 2022 @@ -69,7 +69,7 @@ Zsh-z is a drop-in replacement for `rupa/z` and will, by default, use the same d + Fixed the explanation string printed during completion so that it may be formatted with `zstyle`. + Zsh-z now declares `ZSHZ_EXCLUDE_DIRS` as an array with unique elements so that you do not have to. - July 29, 2021 - + Temporarily disabling use of `print -v`, which seems to be mangling CJK multibyte strings. + + Temporarily disabling the use of `print -v`, which was mangling CJK multibyte strings. - July 27, 2021 + Internal escaping of path names now works with older versions of ZSH. + Zsh-z now detects and discards any incomplete or incorrectly formatted database entries. @@ -102,7 +102,7 @@ Zsh-z is a drop-in replacement for `rupa/z` and will, by default, use the same d - December 22, 2020 + `ZSHZ_CASE`: when set to `ignore`, pattern matching is case-insensitive; when set to `smart`, patterns are matched case-insensitively when they are all lowercase and case-sensitively when they have uppercase characters in them (a behavior very much like Vim's `smartcase` setting). + `ZSHZ_KEEP_DIRS` is an array of directory names that should not be removed from the database, even if they are not currently available (useful when a drive is not always mounted). - + Symlinked datafiles were having their symlinks overwritten; this bug has been fixed. + + Symlinked database files were having their symlinks overwritten; this bug has been fixed. @@ -118,7 +118,7 @@ For tab completion to work, `_zshz` *must* be in the same directory as `zsh-z.pl autoload -U compinit; compinit -in your .zshrc somewhere below where you source `zsh-z.plugin.zsh`. +in your `.zshrc` somewhere below where you source `zsh-z.plugin.zsh`. If you add @@ -188,7 +188,7 @@ Add a backslash to the end of the last line add `'zsh-z'` to the list, e.g., Then relaunch `zsh`. ### For [zcomet](https://github.com/agkozak/zcomet) users - + Simply add zcomet load agkozak/zsh-z @@ -228,7 +228,7 @@ Add the line to your `.zshrc`. -`zsh-z` supports `zinit`'s `unload` feature; just run `zinit unload agkozak/zshz` to restore the shell to its state before `zsh-z` was loaded. +Zsh-z supports `zinit`'s `unload` feature; just run `zinit unload agkozak/zsh-z` to restore the shell to its state before Zsh-z was loaded. ### For [Znap](https://github.com/marlonrichert/zsh-snap) users @@ -249,7 +249,7 @@ somewhere above the line that says `zplug load`. Then run zplug install zplug load -to install `zsh-z`. +to install Zsh-z. ## Command Line Options @@ -263,9 +263,9 @@ to install `zsh-z`. - `-x` Remove a directory (by default, the current directory) from the database - `-xR` Remove a directory (by default, the current directory) and its subdirectories from the database -# Settings +## Settings -Zsh-z has environment variables (they all begin with `ZSHZ_`) that change its behavior if you set them; you can also keep your old ones if you have been using `rupa/z` (they begin with `_Z_`). +Zsh-z has environment variables (they all begin with `ZSHZ_`) that change its behavior if you set them. You can also keep your old ones if you have been using `rupa/z` (whose environment variables begin with `_Z_`). * `ZSHZ_CMD` changes the command name (default: `z`) * `ZSHZ_CD` specifies the default directory-changing command (default: `builtin cd`) @@ -324,19 +324,18 @@ A good example might involve a directory tree that has Git repositories within i (As a Zsh user, I tend to use `**` instead of `find`, but it is good to see how deep your directory trees go before doing that.) - ## Other Improvements and Fixes * `z -x` works, with the help of `chpwd_functions`. -* Zsh-z works on Solaris. +* Zsh-z is compatible with Solaris. * Zsh-z uses the "new" `zshcompsys` completion system instead of the old `compctl` one. -* There is no error message when the database file has not yet been created. -* There is support for special characters (e.g., `[`) in directory names. -* If `z -l` only returns one match, a common root is not printed. -* Exit status codes increasingly make sense. -* Completions work with options `-c`, `-r`, and `-t`. -* If `~/foo` and `~/foob` are matches, `~/foo` is *not* the common root. Only a common parent directory can be a common root. -* `z -x` and the new, recursive `z -xR` can take an argument so that you can remove directories other than `PWD` from the database. +* No error message is displayed when the database file has not yet been created. +* Special characters (e.g., `[`) in directory names are now supported. +* If `z -l` returns only one match, a common root is not printed. +* Exit status codes are more logical. +* Completions now work with options `-c`, `-r`, and `-t`. +* If `~/foo` and `~/foob` are matches, `~/foo` is no longer considered the common root. Only a common parent directory can be a common root. +* `z -x` and the new, recursive `z -xR` can now accept an argument so that you can remove directories other than `PWD` from the database. ## Migrating from Other Tools @@ -358,7 +357,7 @@ the line That will re-bind `z` or the command of your choice to the underlying Zsh-z function. -## Known Bugs +## Known Bug It is possible to run a completion on a string with spaces in it, e.g., `z us bi` might take you to `/usr/local/bin`. This works, but as things stand, after the completion the command line reads z us /usr/local/bin. diff --git a/plugins/z/z.plugin.zsh b/plugins/z/z.plugin.zsh index a41a4ae25..bf15b01de 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-2023 Alexandros Kozak +# Copyright (c) 2018-2024 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 @@ -120,7 +120,6 @@ fi [[ ${builtins[zf_mv]-} == 'defined' ]] && ZSHZ[MV]='zf_mv' [[ ${builtins[zf_rm]-} == 'defined' ]] && ZSHZ[RM]='zf_rm' - # Load zsh/system, if necessary [[ ${modules[zsh/system]-} == 'loaded' ]] || zmodload zsh/system &> /dev/null From f733dc340b2a1c5b2e61a4da7de790b2f557175f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 22 Dec 2024 16:19:12 +0100 Subject: [PATCH 34/70] chore(deps): bump urllib3 from 2.2.3 to 2.3.0 in /.github/workflows/dependencies (#12863) 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 8ca4477c9..5204e2cb7 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.2 -urllib3==2.2.3 +urllib3==2.3.0 From 9c8afcc3ee2fe6da2e2487a623498a9105cbd38c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 29 Dec 2024 13:22:49 +0100 Subject: [PATCH 35/70] chore(deps): bump charset-normalizer in /.github/workflows/dependencies (#12874) Bumps [charset-normalizer](https://github.com/jawah/charset_normalizer) from 3.4.0 to 3.4.1. - [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.0...3.4.1) --- updated-dependencies: - dependency-name: charset-normalizer 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 5204e2cb7..a3922cd03 100644 --- a/.github/workflows/dependencies/requirements.txt +++ b/.github/workflows/dependencies/requirements.txt @@ -1,5 +1,5 @@ certifi==2024.12.14 -charset-normalizer==3.4.0 +charset-normalizer==3.4.1 idna==3.10 PyYAML==6.0.2 requests==2.32.3 From d82669199b5d900b50fd06dd3518c277f0def869 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kalle=20Ahlstr=C3=B6m?= <71292737+kahlstrm@users.noreply.github.com> Date: Mon, 30 Dec 2024 11:15:05 +0200 Subject: [PATCH 36/70] fix(af-magic): add logic for virtualenv separator (#12875) --- themes/af-magic.zsh-theme | 2 ++ 1 file changed, 2 insertions(+) diff --git a/themes/af-magic.zsh-theme b/themes/af-magic.zsh-theme index 70549d01f..668c4e5de 100644 --- a/themes/af-magic.zsh-theme +++ b/themes/af-magic.zsh-theme @@ -13,6 +13,8 @@ function afmagic_dashes { # the prompt, account for it when returning the number of 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} )) else echo $COLUMNS fi From 5c17bcd21f104d2508e0bc94d984c4d9e6a607da Mon Sep 17 00:00:00 2001 From: Bhanu Date: Wed, 8 Jan 2025 00:34:00 -0800 Subject: [PATCH 37/70] 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 38/70] 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 39/70] 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 40/70] 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 41/70] 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 42/70] 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 43/70] 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 44/70] 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 45/70] 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 46/70] 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 47/70] 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 48/70] 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 49/70] 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 50/70] 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 51/70] 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 52/70] 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 53/70] 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 54/70] 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 55/70] 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 56/70] 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 57/70] 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 58/70] 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 59/70] 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 60/70] 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 61/70] 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 62/70] 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 63/70] 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 64/70] 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 65/70] 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 66/70] 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 67/70] 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 68/70] 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 69/70] 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 70/70] 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