mirror of
https://github.com/robbyrussell/oh-my-zsh.git
synced 2026-09-28 05:56:07 +02:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
76439de772 | ||
|
|
3bf157dc77 | ||
|
|
2e0c643117 |
@@ -5,7 +5,6 @@ plugins/eza/ @pepoluan
|
|||||||
plugins/genpass/ @atoponce
|
plugins/genpass/ @atoponce
|
||||||
plugins/git-lfs/ @hellovietduc
|
plugins/git-lfs/ @hellovietduc
|
||||||
plugins/gitfast/ @felipec
|
plugins/gitfast/ @felipec
|
||||||
plugins/hermes/ @Uhm-why
|
|
||||||
plugins/kube-ps1/ @mcornella
|
plugins/kube-ps1/ @mcornella
|
||||||
plugins/kubectl/ @mcornella
|
plugins/kubectl/ @mcornella
|
||||||
plugins/kubectx/ @mcornella
|
plugins/kubectx/ @mcornella
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ dependencies:
|
|||||||
plugins/history-substring-search:
|
plugins/history-substring-search:
|
||||||
repo: zsh-users/zsh-history-substring-search
|
repo: zsh-users/zsh-history-substring-search
|
||||||
branch: master
|
branch: master
|
||||||
version: a0bdb0d47dbaba31dba2db7af8c48a5d9c74049a
|
version: 14c8d2e0ffaee98f2df9850b19944f32546fdea5
|
||||||
precopy: |
|
precopy: |
|
||||||
set -e
|
set -e
|
||||||
rm -f zsh-history-substring-search.plugin.zsh
|
rm -f zsh-history-substring-search.plugin.zsh
|
||||||
@@ -30,7 +30,7 @@ dependencies:
|
|||||||
plugins/kube-ps1:
|
plugins/kube-ps1:
|
||||||
repo: jonmosco/kube-ps1
|
repo: jonmosco/kube-ps1
|
||||||
branch: master
|
branch: master
|
||||||
version: b4cd09ec8d4dc007173e28da40aeebf8eff8c87f
|
version: 04af46f7fe888ad287abcab6699b9bb10234bc3d
|
||||||
precopy: |
|
precopy: |
|
||||||
set -e
|
set -e
|
||||||
find . ! -name kube-ps1.sh ! -name LICENSE ! -name README.md -delete
|
find . ! -name kube-ps1.sh ! -name LICENSE ! -name README.md -delete
|
||||||
@@ -55,46 +55,3 @@ dependencies:
|
|||||||
set -e
|
set -e
|
||||||
test -e _zshz && mv -f _zshz _z
|
test -e _zshz && mv -f _zshz _z
|
||||||
test -e zsh-z.plugin.zsh && mv -f zsh-z.plugin.zsh z.plugin.zsh
|
test -e zsh-z.plugin.zsh && mv -f zsh-z.plugin.zsh z.plugin.zsh
|
||||||
plugins/zsh-autosuggestions:
|
|
||||||
repo: zsh-users/zsh-autosuggestions
|
|
||||||
branch: master
|
|
||||||
version: 85919cd1ffa7d2d5412f6d3fe437ebdbeeec4fc5
|
|
||||||
precopy: |
|
|
||||||
set -e
|
|
||||||
test -e README.md && mv -f README.md MANUAL.md
|
|
||||||
sed -i 's|\[INSTALL.md\](INSTALL.md)|[the Oh My Zsh plugin README](README.md)|' MANUAL.md
|
|
||||||
rm -f zsh-autosuggestions.plugin.zsh
|
|
||||||
mv -f zsh-autosuggestions.zsh zsh-autosuggestions.plugin.zsh
|
|
||||||
find . -depth -mindepth 1 \
|
|
||||||
! -path './LICENSE' \
|
|
||||||
! -path './MANUAL.md' \
|
|
||||||
! -path './src' \
|
|
||||||
! -path './src/*' \
|
|
||||||
! -path './zsh-autosuggestions.plugin.zsh' \
|
|
||||||
-delete
|
|
||||||
plugins/zsh-syntax-highlighting:
|
|
||||||
repo: zsh-users/zsh-syntax-highlighting
|
|
||||||
branch: master
|
|
||||||
version: 2fc57d63067c18b1100ecdbf684fa5baf49459d1
|
|
||||||
precopy: |
|
|
||||||
set -e
|
|
||||||
version=$(<.version)
|
|
||||||
test -e README.md && mv -f README.md MANUAL.md
|
|
||||||
sed -i 's|\[INSTALL.md\](INSTALL.md)|[the Oh My Zsh plugin README](README.md)|' MANUAL.md
|
|
||||||
rm -f zsh-syntax-highlighting.plugin.zsh
|
|
||||||
mv -f zsh-syntax-highlighting.zsh zsh-syntax-highlighting.plugin.zsh
|
|
||||||
mv -f COPYING.md LICENSE
|
|
||||||
sed -i "s|typeset -g ZSH_HIGHLIGHT_VERSION=.*|typeset -g ZSH_HIGHLIGHT_VERSION=$version|" zsh-syntax-highlighting.plugin.zsh
|
|
||||||
sed -i 's|typeset -g ZSH_HIGHLIGHT_REVISION=.*|typeset -g ZSH_HIGHLIGHT_REVISION=HEAD|' zsh-syntax-highlighting.plugin.zsh
|
|
||||||
find highlighters -type d -name test-data -prune -exec rm -rf {} +
|
|
||||||
find . -depth -mindepth 1 \
|
|
||||||
! -path './LICENSE' \
|
|
||||||
! -path './MANUAL.md' \
|
|
||||||
! -path './docs' \
|
|
||||||
! -path './docs/*' \
|
|
||||||
! -path './highlighters' \
|
|
||||||
! -path './highlighters/*' \
|
|
||||||
! -path './images' \
|
|
||||||
! -path './images/*' \
|
|
||||||
! -path './zsh-syntax-highlighting.plugin.zsh' \
|
|
||||||
-delete
|
|
||||||
|
|||||||
@@ -3,5 +3,5 @@ charset-normalizer==3.5.1
|
|||||||
idna==3.19
|
idna==3.19
|
||||||
PyYAML==6.0.3
|
PyYAML==6.0.3
|
||||||
requests==2.34.2
|
requests==2.34.2
|
||||||
semver==3.1.0
|
semver==3.0.4
|
||||||
urllib3==2.8.0
|
urllib3==2.7.0
|
||||||
|
|||||||
@@ -60,6 +60,6 @@ jobs:
|
|||||||
retention-days: 5
|
retention-days: 5
|
||||||
|
|
||||||
- name: "Upload to code-scanning"
|
- name: "Upload to code-scanning"
|
||||||
uses: github/codeql-action/upload-sarif@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
|
uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
|
||||||
with:
|
with:
|
||||||
sarif_file: results.sarif
|
sarif_file: results.sarif
|
||||||
|
|||||||
@@ -171,6 +171,19 @@ adds any) and extra goodies that are included in that particular plugin.
|
|||||||
|
|
||||||
### Themes
|
### Themes
|
||||||
|
|
||||||
|
Preview installed themes in your current directory without changing your prompt or `.zshrc`:
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
omz theme browse # Interactive browser
|
||||||
|
omz theme browse agn # Start with a theme-name filter
|
||||||
|
omz theme preview agnoster # Print one isolated static preview
|
||||||
|
```
|
||||||
|
|
||||||
|
In the browser, type to filter, use Up/Down or Ctrl-P/Ctrl-N to navigate, and press Enter
|
||||||
|
for explicit use/save actions. Esc or Ctrl-C cancels without applying a theme.
|
||||||
|
See the [theme browser guide](tools/theme-browser/README.md) for shortcuts, preview limitations,
|
||||||
|
and local testing instructions.
|
||||||
|
|
||||||
We'll admit it. Early in the Oh My Zsh world, we may have gotten a bit too theme-happy. We have over one
|
We'll admit it. Early in the Oh My Zsh world, we may have gotten a bit too theme-happy. We have over one
|
||||||
hundred and fifty themes now bundled. Most of them have
|
hundred and fifty themes now bundled. Most of them have
|
||||||
[screenshots](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes) on the wiki (We are working on updating this!).
|
[screenshots](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes) on the wiki (We are working on updating this!).
|
||||||
@@ -474,22 +487,6 @@ zstyle ':omz:update' frequency 7
|
|||||||
zstyle ':omz:update' frequency 0
|
zstyle ':omz:update' frequency 0
|
||||||
```
|
```
|
||||||
|
|
||||||
By default, updates always pull the latest changes. If you'd rather let others kick the tires first
|
|
||||||
before an update reaches your machine, you can set a cooldown (in days). You'll still get everything —
|
|
||||||
just a little later:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# Only apply updates that are at least 10 days old
|
|
||||||
zstyle ':omz:update' cooldown 10
|
|
||||||
```
|
|
||||||
|
|
||||||
`omz update` honors this setting. If you call `upgrade.sh` directly, pass the same
|
|
||||||
value with `-c`, because that script does not read your `.zshrc`:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ZSH/tools/upgrade.sh -c 10
|
|
||||||
```
|
|
||||||
|
|
||||||
### Updates Verbosity
|
### Updates Verbosity
|
||||||
|
|
||||||
You can also limit the update verbosity with the following settings:
|
You can also limit the update verbosity with the following settings:
|
||||||
|
|||||||
+47
-11
@@ -51,7 +51,7 @@ function _omz {
|
|||||||
_describe 'command' subcmds ;;
|
_describe 'command' subcmds ;;
|
||||||
pr) subcmds=('clean:Delete all Pull Request branches' 'test:Test a Pull Request')
|
pr) subcmds=('clean:Delete all Pull Request branches' 'test:Test a Pull Request')
|
||||||
_describe 'command' subcmds ;;
|
_describe 'command' subcmds ;;
|
||||||
theme) subcmds=('list:List themes' 'set:Set a theme in your .zshrc file' 'use:Load a theme')
|
theme) subcmds=('browse:Browse theme previews' 'preview:Preview a theme without applying it' 'list:List themes' 'set:Set a theme in your .zshrc file' 'use:Load a theme')
|
||||||
_describe 'command' subcmds ;;
|
_describe 'command' subcmds ;;
|
||||||
esac
|
esac
|
||||||
elif (( CURRENT == 4 )); then
|
elif (( CURRENT == 4 )); then
|
||||||
@@ -77,6 +77,10 @@ function _omz {
|
|||||||
local -a opts
|
local -a opts
|
||||||
opts=('--enabled:List enabled plugins only')
|
opts=('--enabled:List enabled plugins only')
|
||||||
_describe -o 'options' opts ;;
|
_describe -o 'options' opts ;;
|
||||||
|
theme::(browse|preview))
|
||||||
|
local -a themes
|
||||||
|
themes=("${(@f)$(source "$ZSH/tools/theme-browser/preview.zsh"; _omz_theme_names)}")
|
||||||
|
_describe 'theme' themes ;;
|
||||||
theme::(set|use))
|
theme::(set|use))
|
||||||
local -aU themes
|
local -aU themes
|
||||||
themes=("$ZSH"/themes/*.zsh-theme(-.N:t:r) "$ZSH_CUSTOM"/**/*.zsh-theme(-.N:r:gs:"$ZSH_CUSTOM"/themes/:::gs:"$ZSH_CUSTOM"/:::))
|
themes=("$ZSH"/themes/*.zsh-theme(-.N:t:r) "$ZSH_CUSTOM"/**/*.zsh-theme(-.N:r:gs:"$ZSH_CUSTOM"/themes/:::gs:"$ZSH_CUSTOM"/:::))
|
||||||
@@ -738,9 +742,6 @@ function _omz::reload {
|
|||||||
|
|
||||||
# Old zsh versions don't have ZSH_ARGZERO
|
# Old zsh versions don't have ZSH_ARGZERO
|
||||||
local zsh="${ZSH_ARGZERO:-${functrace[-1]%:*}}"
|
local zsh="${ZSH_ARGZERO:-${functrace[-1]%:*}}"
|
||||||
# ZSH_ARGZERO is how zsh was invoked, not the path to it, so re-resolve
|
|
||||||
# anything that is not absolute via $PATH at exec time (see #13919)
|
|
||||||
[[ "${zsh#-}" != /* ]] && (( $+commands[zsh] )) && zsh="zsh"
|
|
||||||
# Check whether to run a login shell
|
# Check whether to run a login shell
|
||||||
[[ "$zsh" = -* || -o login ]] && exec -l "${zsh#-}" || exec "$zsh"
|
[[ "$zsh" = -* || -o login ]] && exec -l "${zsh#-}" || exec "$zsh"
|
||||||
}
|
}
|
||||||
@@ -752,6 +753,8 @@ Usage: ${(j: :)${(s.::.)0#_}} <command> [options]
|
|||||||
|
|
||||||
Available commands:
|
Available commands:
|
||||||
|
|
||||||
|
browse [filter] Browse installed themes without applying them
|
||||||
|
preview <theme> Preview a theme in the current directory
|
||||||
list List all available Oh My Zsh themes
|
list List all available Oh My Zsh themes
|
||||||
set <theme> Set a theme in your .zshrc file
|
set <theme> Set a theme in your .zshrc file
|
||||||
use <theme> Load a theme
|
use <theme> Load a theme
|
||||||
@@ -766,6 +769,45 @@ EOF
|
|||||||
$0::$command "$@"
|
$0::$command "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _omz::theme::preview {
|
||||||
|
if (( $# != 1 )); then
|
||||||
|
print -u2 -r -- 'Usage: omz theme preview <theme>'
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
source "$ZSH/tools/theme-browser/preview.zsh"
|
||||||
|
_omz_theme_preview "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
function _omz::theme::browse {
|
||||||
|
if (( $# > 1 )); then
|
||||||
|
print -u2 -r -- 'Usage: omz theme browse [filter]'
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if [[ ! -o interactive || ! -t 0 || ! -t 1 ]]; then
|
||||||
|
print -u2 -r -- 'omz theme browse requires an interactive terminal; use omz theme preview <theme> instead.'
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
source "$ZSH/tools/theme-browser/preview.zsh"
|
||||||
|
source "$ZSH/tools/theme-browser/browser.zsh"
|
||||||
|
local selection action name
|
||||||
|
selection=$(_omz_theme_browser "$1") || return $?
|
||||||
|
[[ -n $selection ]] || return 0
|
||||||
|
action=${selection%%$'\n'*}
|
||||||
|
name=${selection#*$'\n'}
|
||||||
|
_omz_theme_resolve "$name" >/dev/null || return 1
|
||||||
|
case $action in
|
||||||
|
use) _omz::theme::use "$name" ;;
|
||||||
|
set)
|
||||||
|
# The existing set command interpolates the name into shell and awk text.
|
||||||
|
[[ $name != *[^a-zA-Z0-9_./-]* ]] || {
|
||||||
|
print -u2 -r -- 'Cannot save this theme name safely; set ZSH_THEME manually.'
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
_omz::theme::set "$name" ;;
|
||||||
|
*) return 1 ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
function _omz::theme::list {
|
function _omz::theme::list {
|
||||||
local -a custom_themes builtin_themes
|
local -a custom_themes builtin_themes
|
||||||
custom_themes=("$ZSH_CUSTOM"/**/*.zsh-theme(-.N:r:gs:"$ZSH_CUSTOM"/themes/:::gs:"$ZSH_CUSTOM"/:::))
|
custom_themes=("$ZSH_CUSTOM"/**/*.zsh-theme(-.N:r:gs:"$ZSH_CUSTOM"/themes/:::gs:"$ZSH_CUSTOM"/:::))
|
||||||
@@ -906,11 +948,8 @@ function _omz::update {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Run update script
|
# Run update script
|
||||||
local verbose_mode cooldown_days
|
|
||||||
zstyle -s ':omz:update' verbose verbose_mode || verbose_mode=default
|
zstyle -s ':omz:update' verbose verbose_mode || verbose_mode=default
|
||||||
zstyle -s ':omz:update' cooldown cooldown_days || cooldown_days=0
|
ZSH="$ZSH" command zsh -f "$ZSH/tools/upgrade.sh" -i -v $verbose_mode || return $?
|
||||||
[[ $cooldown_days == <-> ]] || cooldown_days=0
|
|
||||||
ZSH="$ZSH" command zsh -f "$ZSH/tools/upgrade.sh" -i -v $verbose_mode -c $cooldown_days || return $?
|
|
||||||
|
|
||||||
# Update last updated file
|
# Update last updated file
|
||||||
zmodload zsh/datetime
|
zmodload zsh/datetime
|
||||||
@@ -922,9 +961,6 @@ function _omz::update {
|
|||||||
if [[ "$(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
|
# Old zsh versions don't have ZSH_ARGZERO
|
||||||
local zsh="${ZSH_ARGZERO:-${functrace[-1]%:*}}"
|
local zsh="${ZSH_ARGZERO:-${functrace[-1]%:*}}"
|
||||||
# ZSH_ARGZERO is how zsh was invoked, not the path to it, so re-resolve
|
|
||||||
# anything that is not absolute via $PATH at exec time (see #13919)
|
|
||||||
[[ "${zsh#-}" != /* ]] && (( $+commands[zsh] )) && zsh="zsh"
|
|
||||||
# Check whether to run a login shell
|
# Check whether to run a login shell
|
||||||
[[ "$zsh" = -* || -o login ]] && exec -l "${zsh#-}" || exec "$zsh"
|
[[ "$zsh" = -* || -o login ]] && exec -l "${zsh#-}" || exec "$zsh"
|
||||||
fi
|
fi
|
||||||
|
|||||||
+10
-21
@@ -12,16 +12,10 @@ function __git_prompt_git() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function _omz_git_prompt_info() {
|
function _omz_git_prompt_info() {
|
||||||
# Get the git dir and the current branch name in one call. Outside a repo
|
# If we are on a folder not tracked by git, get out.
|
||||||
# there is no output. On a detached HEAD the branch is "HEAD". On an unborn
|
# Otherwise, check for hide-info at global and local repository level
|
||||||
# branch git exits non-zero after printing the git dir.
|
if ! __git_prompt_git rev-parse --git-dir &> /dev/null \
|
||||||
local -a info
|
|| [[ "$(__git_prompt_git config --get oh-my-zsh.hide-info 2>/dev/null)" == 1 ]]; then
|
||||||
info=("${(@f)$(__git_prompt_git rev-parse --git-dir --abbrev-ref HEAD 2> /dev/null)}")
|
|
||||||
local unborn=$(( $? != 0 ))
|
|
||||||
[[ -n "$info[1]" ]] || return 0
|
|
||||||
|
|
||||||
# Check for hide-info at global and local repository level
|
|
||||||
if [[ "$(__git_prompt_git config --get oh-my-zsh.hide-info 2>/dev/null)" == 1 ]]; then
|
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -29,15 +23,11 @@ function _omz_git_prompt_info() {
|
|||||||
# - the current branch name
|
# - the current branch name
|
||||||
# - the tag name if we are on a tag
|
# - the tag name if we are on a tag
|
||||||
# - the short SHA of the current commit
|
# - the short SHA of the current commit
|
||||||
# a git dir path may contain newlines, so the branch is the last line
|
local ref
|
||||||
local ref="$info[-1]"
|
ref=$(__git_prompt_git symbolic-ref --short HEAD 2> /dev/null) \
|
||||||
if (( unborn )); then
|
|| ref=$(__git_prompt_git describe --tags --exact-match HEAD 2> /dev/null) \
|
||||||
ref=$(__git_prompt_git symbolic-ref --short HEAD 2> /dev/null) || return 0
|
|| ref=$(__git_prompt_git rev-parse --short HEAD 2> /dev/null) \
|
||||||
elif [[ "$ref" == HEAD ]]; then
|
|| return 0
|
||||||
ref=$(__git_prompt_git describe --tags --exact-match HEAD 2> /dev/null) \
|
|
||||||
|| ref=$(__git_prompt_git rev-parse --short HEAD 2> /dev/null) \
|
|
||||||
|| return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Use global ZSH_THEME_GIT_SHOW_UPSTREAM=1 for including upstream remote info
|
# Use global ZSH_THEME_GIT_SHOW_UPSTREAM=1 for including upstream remote info
|
||||||
local upstream
|
local upstream
|
||||||
@@ -254,8 +244,7 @@ function parse_git_dirty() {
|
|||||||
FLAGS+="--ignore-submodules=${GIT_STATUS_IGNORE_SUBMODULES:-dirty}"
|
FLAGS+="--ignore-submodules=${GIT_STATUS_IGNORE_SUBMODULES:-dirty}"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
# only non-emptiness matters, so keep one line instead of the whole list
|
STATUS=$(__git_prompt_git status ${FLAGS} 2> /dev/null | tail -n 1)
|
||||||
__git_prompt_git status ${FLAGS} 2> /dev/null | read -r STATUS
|
|
||||||
fi
|
fi
|
||||||
if [[ -n $STATUS ]]; then
|
if [[ -n $STATUS ]]; then
|
||||||
echo "$ZSH_THEME_GIT_PROMPT_DIRTY"
|
echo "$ZSH_THEME_GIT_PROMPT_DIRTY"
|
||||||
|
|||||||
+4
-10
@@ -14,16 +14,10 @@ FX=(
|
|||||||
reverse "%{[07m%}" no-reverse "%{[27m%}"
|
reverse "%{[07m%}" no-reverse "%{[27m%}"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Build the tables with array operations instead of a 256-iteration loop
|
for color in {000..255}; do
|
||||||
() {
|
FG[$color]="%{[38;5;${color}m%}"
|
||||||
setopt localoptions noksharrays
|
BG[$color]="%{[48;5;${color}m%}"
|
||||||
local -a codes fg bg
|
done
|
||||||
codes=({000..255})
|
|
||||||
fg=( "%{"$'\e'"[38;5;"${^codes}"m%}" )
|
|
||||||
bg=( "%{"$'\e'"[48;5;"${^codes}"m%}" )
|
|
||||||
FG=( ${codes:^fg} )
|
|
||||||
BG=( ${codes:^bg} )
|
|
||||||
}
|
|
||||||
|
|
||||||
# Show all 256 colors with color number
|
# Show all 256 colors with color number
|
||||||
function spectrum_ls() {
|
function spectrum_ls() {
|
||||||
|
|||||||
+2
-8
@@ -22,8 +22,7 @@ function title {
|
|||||||
print -Pn "\e]1;${1:q}\a" # set tab name
|
print -Pn "\e]1;${1:q}\a" # set tab name
|
||||||
;;
|
;;
|
||||||
screen*|tmux*)
|
screen*|tmux*)
|
||||||
print -Pn "\e]2;${2:q}\e\\" # set tmux pane title
|
print -Pn "\ek${1:q}\e\\" # set screen hardstatus
|
||||||
print -Pn "\ek${1:q}\e\\" # set screen hardstatus/tmux window name if `allow-rename` is on
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
if [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then
|
if [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then
|
||||||
@@ -32,12 +31,7 @@ function title {
|
|||||||
else
|
else
|
||||||
# Try to use terminfo to set the title if the feature is available
|
# Try to use terminfo to set the title if the feature is available
|
||||||
if (( ${+terminfo[fsl]} && ${+terminfo[tsl]} )); then
|
if (( ${+terminfo[fsl]} && ${+terminfo[tsl]} )); then
|
||||||
# Emit the capabilities with echoti so terminfo does its own parameter
|
print -Pn "${terminfo[tsl]}$1${terminfo[fsl]}"
|
||||||
# substitution: some terminals (vt320) take a column argument, and
|
|
||||||
# running prompt expansion over the capability string mangles it.
|
|
||||||
echoti tsl 0
|
|
||||||
print -Pn "$1"
|
|
||||||
echoti fsl
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -13,92 +13,69 @@ ZSH_THEME_RUBY_PROMPT_PREFIX="("
|
|||||||
ZSH_THEME_RUBY_PROMPT_SUFFIX=")"
|
ZSH_THEME_RUBY_PROMPT_SUFFIX=")"
|
||||||
|
|
||||||
|
|
||||||
# The command probes below fork a process each, and their result doesn't change
|
|
||||||
# from one shell to the next, so they're cached for a day (like lib/grep.zsh).
|
|
||||||
typeset -A __omz_probes
|
|
||||||
__omz_probe_cache="$ZSH_CACHE_DIR/appearance-probes"
|
|
||||||
__omz_probe_cached=("$__omz_probe_cache"(Nm-1))
|
|
||||||
[[ -z "$__omz_probe_cached" ]] || source "$__omz_probe_cache"
|
|
||||||
|
|
||||||
function __omz_test_cmd_args {
|
|
||||||
# Usage: __omz_test_cmd_args cmd args...
|
|
||||||
# Runs `cmd args... /dev/null` and remembers whether it succeeded, so a
|
|
||||||
# command needing two operands passes the first one itself:
|
|
||||||
# e.g. __omz_test_cmd_args gls --color -> gls --color /dev/null
|
|
||||||
# __omz_test_cmd_args diff --color /dev/null -> diff --color /dev/null /dev/null
|
|
||||||
local key="$*"
|
|
||||||
if (( ! ${+__omz_probes[$key]} )); then
|
|
||||||
command "$@" /dev/null &>/dev/null
|
|
||||||
__omz_probes[$key]=$?
|
|
||||||
if [[ -w "$ZSH_CACHE_DIR" ]]; then
|
|
||||||
print -r -- "__omz_probes=(" "${(@qqkv)__omz_probes}" ")" >| "$__omz_probe_cache"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
return $__omz_probes[$key]
|
|
||||||
}
|
|
||||||
|
|
||||||
# Use diff --color if available
|
# Use diff --color if available
|
||||||
if __omz_test_cmd_args diff --color /dev/null; then
|
if command diff --color /dev/null{,} &>/dev/null; then
|
||||||
function diff {
|
function diff {
|
||||||
command diff --color "$@"
|
command diff --color "$@"
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set up ls coloring. Done in a function so the early return below still
|
# Don't set ls coloring if disabled
|
||||||
# reaches the cleanup at the end of this file.
|
[[ "$DISABLE_LS_COLORS" != true ]] || return 0
|
||||||
() {
|
|
||||||
# Don't set ls coloring if disabled
|
|
||||||
[[ "$DISABLE_LS_COLORS" != true ]] || return 0
|
|
||||||
|
|
||||||
# Default coloring for BSD-based ls
|
# Default coloring for BSD-based ls
|
||||||
export LSCOLORS="Gxfxcxdxbxegedabagacad"
|
export LSCOLORS="Gxfxcxdxbxegedabagacad"
|
||||||
|
|
||||||
# Default coloring for GNU-based ls
|
# Default coloring for GNU-based ls
|
||||||
if [[ -z "$LS_COLORS" ]]; then
|
if [[ -z "$LS_COLORS" ]]; then
|
||||||
# Define LS_COLORS via dircolors if available. Otherwise, set a default
|
# Define LS_COLORS via dircolors if available. Otherwise, set a default
|
||||||
# equivalent to LSCOLORS (generated via https://geoff.greer.fm/lscolors)
|
# equivalent to LSCOLORS (generated via https://geoff.greer.fm/lscolors)
|
||||||
if (( $+commands[dircolors] )); then
|
if (( $+commands[dircolors] )); then
|
||||||
[[ -f "$HOME/.dircolors" ]] \
|
[[ -f "$HOME/.dircolors" ]] \
|
||||||
&& source <(dircolors -b "$HOME/.dircolors") \
|
&& source <(dircolors -b "$HOME/.dircolors") \
|
||||||
|| source <(dircolors -b)
|
|| source <(dircolors -b)
|
||||||
else
|
else
|
||||||
export LS_COLORS="di=1;36:ln=35:so=32:pi=33:ex=31:bd=34;46:cd=34;43:su=30;41:sg=30;46:tw=30;42:ow=30;43"
|
export LS_COLORS="di=1;36:ln=35:so=32:pi=33:ex=31:bd=34;46:cd=34;43:su=30;41:sg=30;46:tw=30;42:ow=30;43"
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Find the option for using colors in ls, depending on the version
|
function test-ls-args {
|
||||||
case "$OSTYPE" in
|
# Usage: test-ls-args cmd args...
|
||||||
netbsd*)
|
# e.g. test-ls-args gls --color
|
||||||
# On NetBSD, test if `gls` (GNU ls) is installed (this one supports colors);
|
command "$@" /dev/null &>/dev/null
|
||||||
# otherwise, leave ls as is, because NetBSD's ls doesn't support -G
|
|
||||||
__omz_test_cmd_args gls --color && alias ls='gls --color=tty'
|
|
||||||
;;
|
|
||||||
openbsd*)
|
|
||||||
# On OpenBSD, `gls` (ls from GNU coreutils) and `colorls` (ls from base,
|
|
||||||
# with color and multibyte support) are available from ports.
|
|
||||||
# `colorls` will be installed on purpose and can't be pulled in by installing
|
|
||||||
# coreutils (which might be installed for ), so prefer it to `gls`.
|
|
||||||
__omz_test_cmd_args gls --color && alias ls='gls --color=tty'
|
|
||||||
__omz_test_cmd_args colorls -G && alias ls='colorls -G'
|
|
||||||
;;
|
|
||||||
(darwin|freebsd)*)
|
|
||||||
# This alias works by default just using $LSCOLORS
|
|
||||||
__omz_test_cmd_args ls -G && alias ls='ls -G'
|
|
||||||
# Only use GNU ls if installed and there are user defaults for $LS_COLORS,
|
|
||||||
# as the default coloring scheme is not very pretty
|
|
||||||
zstyle -t ':omz:lib:theme-and-appearance' gnu-ls \
|
|
||||||
&& __omz_test_cmd_args gls --color \
|
|
||||||
&& alias ls='gls --color=tty'
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
if __omz_test_cmd_args ls --color; then
|
|
||||||
alias ls='ls --color=tty'
|
|
||||||
elif __omz_test_cmd_args ls -G; then
|
|
||||||
alias ls='ls -G'
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unfunction __omz_test_cmd_args
|
# Find the option for using colors in ls, depending on the version
|
||||||
unset __omz_probes __omz_probe_cache __omz_probe_cached
|
case "$OSTYPE" in
|
||||||
|
netbsd*)
|
||||||
|
# On NetBSD, test if `gls` (GNU ls) is installed (this one supports colors);
|
||||||
|
# otherwise, leave ls as is, because NetBSD's ls doesn't support -G
|
||||||
|
test-ls-args gls --color && alias ls='gls --color=tty'
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
# On OpenBSD, `gls` (ls from GNU coreutils) and `colorls` (ls from base,
|
||||||
|
# with color and multibyte support) are available from ports.
|
||||||
|
# `colorls` will be installed on purpose and can't be pulled in by installing
|
||||||
|
# coreutils (which might be installed for ), so prefer it to `gls`.
|
||||||
|
test-ls-args gls --color && alias ls='gls --color=tty'
|
||||||
|
test-ls-args colorls -G && alias ls='colorls -G'
|
||||||
|
;;
|
||||||
|
(darwin|freebsd)*)
|
||||||
|
# This alias works by default just using $LSCOLORS
|
||||||
|
test-ls-args ls -G && alias ls='ls -G'
|
||||||
|
# Only use GNU ls if installed and there are user defaults for $LS_COLORS,
|
||||||
|
# as the default coloring scheme is not very pretty
|
||||||
|
zstyle -t ':omz:lib:theme-and-appearance' gnu-ls \
|
||||||
|
&& test-ls-args gls --color \
|
||||||
|
&& alias ls='gls --color=tty'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if test-ls-args ls --color; then
|
||||||
|
alias ls='ls --color=tty'
|
||||||
|
elif test-ls-args ls -G; then
|
||||||
|
alias ls='ls -G'
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
unfunction test-ls-args
|
||||||
|
|||||||
+3
-104
@@ -100,28 +100,7 @@ done
|
|||||||
# Figure out the SHORT hostname
|
# Figure out the SHORT hostname
|
||||||
if [[ "$OSTYPE" = darwin* ]]; then
|
if [[ "$OSTYPE" = darwin* ]]; then
|
||||||
# macOS's $HOST changes with dhcp, etc. Use LocalHostName if possible.
|
# macOS's $HOST changes with dhcp, etc. Use LocalHostName if possible.
|
||||||
# scutil costs a fork on every start, so remember its answer for a day
|
SHORT_HOST=$(scutil --get LocalHostName 2>/dev/null) || SHORT_HOST="${HOST/.*/}"
|
||||||
# (like lib/grep.zsh) and re-check sooner if $HOST changes.
|
|
||||||
__omz_host_cache="$ZSH_CACHE_DIR/localhostname"
|
|
||||||
__omz_host_cached=("$__omz_host_cache"(Nm-1))
|
|
||||||
__omz_host_key=
|
|
||||||
SHORT_HOST=
|
|
||||||
if [[ -n "$__omz_host_cached" ]]; then
|
|
||||||
if ! { read -r __omz_host_key && read -r SHORT_HOST } < "$__omz_host_cache"; then
|
|
||||||
__omz_host_key=
|
|
||||||
SHORT_HOST=
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [[ "$__omz_host_key" != "$HOST" || -z "$SHORT_HOST" ]]; then
|
|
||||||
# only cache what scutil actually answered, so a transient failure
|
|
||||||
# doesn't pin the fallback name for a day
|
|
||||||
if SHORT_HOST=$(scutil --get LocalHostName 2>/dev/null) && [[ -n "$SHORT_HOST" ]]; then
|
|
||||||
[[ ! -w "$ZSH_CACHE_DIR" ]] || print -rl -- "$HOST" "$SHORT_HOST" >| "$__omz_host_cache"
|
|
||||||
else
|
|
||||||
SHORT_HOST="${HOST/.*/}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
unset __omz_host_cache __omz_host_cached __omz_host_key
|
|
||||||
else
|
else
|
||||||
SHORT_HOST="${HOST/.*/}"
|
SHORT_HOST="${HOST/.*/}"
|
||||||
fi
|
fi
|
||||||
@@ -131,89 +110,9 @@ if [[ -z "$ZSH_COMPDUMP" ]]; then
|
|||||||
ZSH_COMPDUMP="${ZDOTDIR:-$HOME}/.zcompdump-${SHORT_HOST}-${ZSH_VERSION}"
|
ZSH_COMPDUMP="${ZDOTDIR:-$HOME}/.zcompdump-${SHORT_HOST}-${ZSH_VERSION}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Resolve the commit $ZSH is checked out at into $REPLY by reading the git
|
# Construct zcompdump OMZ metadata
|
||||||
# directory, so that no git process is forked on every startup.
|
zcompdump_revision="#omz revision: $(builtin cd -q "$ZSH"; git rev-parse HEAD 2>/dev/null)"
|
||||||
# Handles .git files (worktrees, submodules), worktree common dirs, detached
|
|
||||||
# HEADs and packed refs. Returns 1 if anything is unexpected.
|
|
||||||
_omz_git_head() {
|
|
||||||
local gitdir="$ZSH/.git" common head ref
|
|
||||||
local -a lines
|
|
||||||
REPLY=
|
|
||||||
|
|
||||||
# .git may be a file pointing at the real git dir
|
|
||||||
if [[ -f "$gitdir" ]]; then
|
|
||||||
read -r head 2>/dev/null < "$gitdir" || return 1
|
|
||||||
[[ "$head" = "gitdir: "* ]] || return 1
|
|
||||||
gitdir="${head#gitdir: }"
|
|
||||||
[[ -n "$gitdir" ]] || return 1
|
|
||||||
[[ "$gitdir" = /* ]] || gitdir="$ZSH/$gitdir"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# worktrees keep their refs in the common git dir
|
|
||||||
common="$gitdir"
|
|
||||||
if [[ -f "$gitdir/commondir" ]]; then
|
|
||||||
read -r common 2>/dev/null < "$gitdir/commondir" || return 1
|
|
||||||
[[ "$common" = /* ]] || common="$gitdir/$common"
|
|
||||||
fi
|
|
||||||
|
|
||||||
[[ -r "$gitdir/HEAD" ]] || return 1
|
|
||||||
read -r head 2>/dev/null < "$gitdir/HEAD" || return 1
|
|
||||||
|
|
||||||
if [[ "$head" = ref:\ * ]]; then
|
|
||||||
ref="${head#ref: }"
|
|
||||||
|
|
||||||
# Only use well-formed full ref names as paths. Besides matching Git's ref
|
|
||||||
# rules, this prevents a malformed HEAD from escaping the git directory.
|
|
||||||
[[ "$ref" = refs/?* \
|
|
||||||
&& "$ref" != *..* \
|
|
||||||
&& "$ref" != *//* \
|
|
||||||
&& "$ref" != */ \
|
|
||||||
&& "$ref" != */.* \
|
|
||||||
&& "$ref" != *.lock \
|
|
||||||
&& "$ref" != *.lock/* \
|
|
||||||
&& "$ref" != *. \
|
|
||||||
&& "$ref" != *'@{'* \
|
|
||||||
&& "$ref" != *[[:cntrl:]\ \~\^\:\?\*\[\\]* \
|
|
||||||
]] || return 1
|
|
||||||
|
|
||||||
case "$ref" in
|
|
||||||
# These namespaces are private to each worktree and are never resolved
|
|
||||||
# from the common directory or its packed-refs file.
|
|
||||||
refs/bisect/*|refs/worktree/*|refs/rewritten/*)
|
|
||||||
[[ -r "$gitdir/$ref" ]] || return 1
|
|
||||||
read -r REPLY 2>/dev/null < "$gitdir/$ref" || return 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
if [[ -r "$common/$ref" ]]; then
|
|
||||||
read -r REPLY 2>/dev/null < "$common/$ref" || return 1
|
|
||||||
elif [[ -r "$common/packed-refs" ]]; then
|
|
||||||
lines=("${(@f)$(<"$common/packed-refs")}")
|
|
||||||
REPLY="${lines[(r)* ${(b)ref}]%% *}"
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
# detached HEAD: the file holds the commit itself
|
|
||||||
REPLY="$head"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# only an object ID is a usable answer: a symbolic ref, a malformed file or
|
|
||||||
# a missed packed entry all fall through to the git fallback instead
|
|
||||||
[[ -n "$REPLY" && -z "${REPLY//[0-9a-f]/}" ]] \
|
|
||||||
&& (( ${#REPLY} == 40 || ${#REPLY} == 64 ))
|
|
||||||
}
|
|
||||||
|
|
||||||
# Construct zcompdump OMZ metadata. The helper reports through $REPLY, so
|
|
||||||
# call it in a scope that keeps that out of the global namespace.
|
|
||||||
() {
|
|
||||||
local REPLY
|
|
||||||
_omz_git_head || REPLY="$(builtin cd -q "$ZSH"; git rev-parse HEAD 2>/dev/null)"
|
|
||||||
typeset -g zcompdump_revision="#omz revision: $REPLY"
|
|
||||||
}
|
|
||||||
zcompdump_fpath="#omz fpath: $fpath"
|
zcompdump_fpath="#omz fpath: $fpath"
|
||||||
unset -f _omz_git_head
|
|
||||||
|
|
||||||
# Check whether the zcompdump file carries the current OMZ metadata lines
|
# Check whether the zcompdump file carries the current OMZ metadata lines
|
||||||
_omz_compdump_has_metadata() {
|
_omz_compdump_has_metadata() {
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._op"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_op"
|
||||||
zf_mv -f -- =( op completion zsh ) "$ZSH_CACHE_DIR/completions/_op"
|
zf_mv -f -- =( op completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|
||||||
# Load opswd function
|
# Load opswd function
|
||||||
|
|||||||
@@ -1,122 +0,0 @@
|
|||||||
# AppSignal CLI plugin
|
|
||||||
|
|
||||||
This plugin adds aliases, guard rails and completion for the
|
|
||||||
[AppSignal CLI](https://docs.appsignal.com/cli).
|
|
||||||
|
|
||||||
To use it, add `appsignal-cli` to the plugins array in your zshrc file:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
plugins=(... appsignal-cli)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Requirements
|
|
||||||
|
|
||||||
[AppSignal CLI](https://docs.appsignal.com/cli) 2.1 or newer, installed and on
|
|
||||||
your `PATH`. The plugin does nothing if it is not:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
brew install appsignal/appsignal-cli/appsignal-cli
|
|
||||||
# or
|
|
||||||
curl -sSL https://github.com/appsignal/appsignal-cli/releases/latest/download/install.sh | sudo sh
|
|
||||||
```
|
|
||||||
|
|
||||||
Most commands need `appsignal-cli auth login` first.
|
|
||||||
|
|
||||||
## Aliases
|
|
||||||
|
|
||||||
| Alias | Command | Description |
|
|
||||||
| :------ | :----------------------------- | :--------------------------------- |
|
|
||||||
| `asig` | `appsignal-cli` | The AppSignal CLI itself |
|
|
||||||
| `aslog` | `appsignal-cli logs tail` | Stream log lines as they arrive |
|
|
||||||
| `asinc` | `appsignal-cli incidents list` | List incidents for an application |
|
|
||||||
|
|
||||||
`aslog` and `asinc` complete like the commands they stand in for, so
|
|
||||||
`aslog --<TAB>` offers the flags of `appsignal-cli logs tail`.
|
|
||||||
|
|
||||||
## Functions
|
|
||||||
|
|
||||||
| Function | Description |
|
|
||||||
| :-------------- | :----------------------------------------------------------------- |
|
|
||||||
| `appsignal-cli` | Wraps the CLI to confirm before irreversible commands. See Settings |
|
|
||||||
|
|
||||||
## Completion
|
|
||||||
|
|
||||||
Every command completes with a description of what it does, at every level, and
|
|
||||||
so do their flags and allowed values: incident states and severities, sort
|
|
||||||
orders, log severities, trigger fields and comparison operators, output formats
|
|
||||||
and skill targets. `samples` and `sample` complete like `traces`, as they do in
|
|
||||||
the CLI itself.
|
|
||||||
|
|
||||||
`--org` completes offline from the `org` key of your project's
|
|
||||||
`.appsignal.toml` and of the global config.
|
|
||||||
|
|
||||||
The AppSignal CLI ships no completion generator of its own, so `_appsignal-cli`
|
|
||||||
is written from its command definitions and kept in this repository. It targets
|
|
||||||
AppSignal CLI 2.1.x.
|
|
||||||
|
|
||||||
## Settings
|
|
||||||
|
|
||||||
Set these with `zstyle` in your zshrc, before Oh My Zsh is sourced.
|
|
||||||
|
|
||||||
### Confirming destructive commands
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
zstyle ':omz:plugins:appsignal-cli' confirm-destructive no
|
|
||||||
```
|
|
||||||
|
|
||||||
By default the plugin asks for confirmation before four operations that the CLI
|
|
||||||
itself performs without a prompt:
|
|
||||||
|
|
||||||
- `appsignal-cli logs metrics delete`
|
|
||||||
- `appsignal-cli logs triggers delete`
|
|
||||||
- `appsignal-cli triggers archive`, which also closes the trigger's alerts and
|
|
||||||
incidents
|
|
||||||
- `appsignal-cli incidents update --state CLOSED` when it names more than one
|
|
||||||
incident, since that flag accepts a comma-separated list
|
|
||||||
|
|
||||||
Nothing else is intercepted, and the prompt is skipped when stdin is not a
|
|
||||||
terminal, so scripts, pipelines and CI are unaffected. Set the style to `no` to
|
|
||||||
turn the prompt off entirely, or run `command appsignal-cli` for a single
|
|
||||||
invocation.
|
|
||||||
|
|
||||||
### Completing applications
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
zstyle ':omz:plugins:appsignal-cli' dynamic-app-completion yes
|
|
||||||
```
|
|
||||||
|
|
||||||
Off by default. When enabled, `--app`, `--app-id` and `--environment` are
|
|
||||||
completed from `appsignal-cli apps list --output json`, showing each
|
|
||||||
application's name and environment next to its ID instead of making you copy
|
|
||||||
IDs by hand. It is opt-in because it runs the CLI and makes a network call when
|
|
||||||
you press <kbd>Tab</kbd>, and because it needs you to be authenticated. Results
|
|
||||||
are cached for five minutes.
|
|
||||||
|
|
||||||
### Disabling the aliases
|
|
||||||
|
|
||||||
This works for every Oh My Zsh plugin:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
zstyle ':omz:plugins:appsignal-cli' aliases no
|
|
||||||
```
|
|
||||||
|
|
||||||
## Caveats
|
|
||||||
|
|
||||||
- `appsignal-cli` and the AppSignal Ruby gem's `appsignal` command are different
|
|
||||||
tools. The gem's command installs and diagnoses the agent inside your app;
|
|
||||||
this one queries your data. The plugin deliberately leaves `appsignal` alone,
|
|
||||||
so it keeps working in projects that use the gem.
|
|
||||||
- `appsignal-cli` is a shell function here. Run `command appsignal-cli` to reach
|
|
||||||
the binary directly.
|
|
||||||
- Most commands need exactly one of `--app-id` or `--app`. `--environment` only
|
|
||||||
narrows `--app`; it does nothing next to `--app-id`.
|
|
||||||
- `appsignal-cli project init` writes `.appsignal.toml`, and `auth login` then
|
|
||||||
stores OAuth tokens in it. Do not commit that file.
|
|
||||||
- `incidents delete-note`, `auth logout` and the `--clear-*` flags of
|
|
||||||
`logs metrics update` and `logs triggers update` are destructive too, but are
|
|
||||||
not prompted for: each affects a single note, login or field.
|
|
||||||
- `triggers create` and `triggers update` have their own `--format`, for the
|
|
||||||
format of the metric value. Everywhere else `--format` is a synonym for
|
|
||||||
`--output`.
|
|
||||||
- The CLI sends usage telemetry by default. `APPSIGNAL_CLI_TELEMETRY=0` turns it
|
|
||||||
off, and `APPSIGNAL_CLI_DEBUG=1` shows internal errors.
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,108 +0,0 @@
|
|||||||
# AppSignal CLI: completion, aliases and guard rails.
|
|
||||||
# https://docs.appsignal.com/cli
|
|
||||||
|
|
||||||
if (( ! $+commands[appsignal-cli] )); then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Does this invocation need confirming? Sets REPLY to the reason.
|
|
||||||
#
|
|
||||||
# The command path is collected from the leading bare words. Only the global
|
|
||||||
# flags may precede a subcommand, so the first other flag ends the path: that
|
|
||||||
# way an option value such as `--app "My App"` is never mistaken for one.
|
|
||||||
function _appsignal_cli_is_destructive() {
|
|
||||||
zstyle -T ':omz:plugins:appsignal-cli' confirm-destructive || return 1
|
|
||||||
|
|
||||||
# Nobody to answer: CI and pipelines are unaffected.
|
|
||||||
[[ -t 0 ]] || return 1
|
|
||||||
|
|
||||||
local -a args=("$@") path numbers
|
|
||||||
local arg state=""
|
|
||||||
integer i=1 n=$# path_done=0
|
|
||||||
|
|
||||||
while (( i <= n )); do
|
|
||||||
arg="$args[i]"
|
|
||||||
case "$arg" in
|
|
||||||
--) break ;;
|
|
||||||
--state=*) state="${arg#--state=}"; path_done=1 ;;
|
|
||||||
--state) state="$args[i+1]"; (( i++ )); path_done=1 ;;
|
|
||||||
--number=*) numbers+=(${(s:,:)${arg#--number=}}); path_done=1 ;;
|
|
||||||
# --number takes one or more values, comma-separated or repeated.
|
|
||||||
--number)
|
|
||||||
path_done=1
|
|
||||||
while (( i < n )) && [[ "$args[i+1]" != -* ]]; do
|
|
||||||
(( i++ ))
|
|
||||||
numbers+=(${(s:,:)args[i]})
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
# The output flag is global, so it can appear before the subcommand.
|
|
||||||
-o|--output|--format) (( i++ )) ;;
|
|
||||||
-o*|--output=*|--format=*) ;;
|
|
||||||
-*) path_done=1 ;;
|
|
||||||
*) (( path_done )) || path+=("$arg") ;;
|
|
||||||
esac
|
|
||||||
(( i++ ))
|
|
||||||
done
|
|
||||||
|
|
||||||
case "${(j: :)path[1,3]}" in
|
|
||||||
"logs metrics delete")
|
|
||||||
REPLY="deleting a log-derived metric cannot be undone."
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
"logs triggers delete")
|
|
||||||
REPLY="deleting a log-based trigger cannot be undone."
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
"triggers archive")
|
|
||||||
REPLY="archiving a trigger also closes its alerts and incidents."
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
"incidents update")
|
|
||||||
if [[ "${(U)state}" == CLOSED ]] && (( $#numbers > 1 )); then
|
|
||||||
REPLY="this closes $#numbers incidents at once."
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Adds a confirmation prompt before irreversible operations. Everything else
|
|
||||||
# passes straight through, so `logs tail` keeps streaming and pipes stay clean.
|
|
||||||
function appsignal-cli() {
|
|
||||||
local REPLY
|
|
||||||
if _appsignal_cli_is_destructive "$@"; then
|
|
||||||
print -u2 -- "appsignal-cli: $REPLY"
|
|
||||||
if ! read -q "?Continue? [y/N] "; then
|
|
||||||
print -u2 -- ""
|
|
||||||
return 130
|
|
||||||
fi
|
|
||||||
print -u2 -- ""
|
|
||||||
fi
|
|
||||||
|
|
||||||
command appsignal-cli "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Complete the aliases like the commands they stand in for.
|
|
||||||
if (( $+functions[compdef] )); then
|
|
||||||
_aslog() {
|
|
||||||
words=(appsignal-cli logs tail ${words[2,-1]})
|
|
||||||
(( CURRENT += 2 ))
|
|
||||||
_appsignal-cli
|
|
||||||
}
|
|
||||||
|
|
||||||
_asinc() {
|
|
||||||
words=(appsignal-cli incidents list ${words[2,-1]})
|
|
||||||
(( CURRENT += 2 ))
|
|
||||||
_appsignal-cli
|
|
||||||
}
|
|
||||||
|
|
||||||
compdef _appsignal-cli asig
|
|
||||||
compdef _aslog aslog
|
|
||||||
compdef _asinc asinc
|
|
||||||
fi
|
|
||||||
|
|
||||||
alias asig='appsignal-cli'
|
|
||||||
alias aslog='appsignal-cli logs tail'
|
|
||||||
alias asinc='appsignal-cli incidents list'
|
|
||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
# Generate and load arduino-cli completion
|
# Generate and load arduino-cli completion
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._arduino-cli"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_arduino-cli"
|
||||||
zf_mv -f -- =( arduino-cli completion zsh ) "$ZSH_CACHE_DIR/completions/_arduino-cli"
|
zf_mv -f -- =( arduino-cli completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._argocd"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_argocd"
|
||||||
zf_mv -f -- =( argocd completion zsh ) "$ZSH_CACHE_DIR/completions/_argocd"
|
zf_mv -f -- =( argocd completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -14,6 +14,6 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_asdf" ]]; then
|
|||||||
fi
|
fi
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._asdf"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_asdf"
|
||||||
zf_mv -f -- =( asdf completion zsh ) "$ZSH_CACHE_DIR/completions/_asdf"
|
zf_mv -f -- =( asdf completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ function aws_regions() {
|
|||||||
function aws_profiles() {
|
function aws_profiles() {
|
||||||
aws --no-cli-pager configure list-profiles 2> /dev/null && return
|
aws --no-cli-pager configure list-profiles 2> /dev/null && return
|
||||||
[[ -r "${AWS_CONFIG_FILE:-$HOME/.aws/config}" ]] || return 1
|
[[ -r "${AWS_CONFIG_FILE:-$HOME/.aws/config}" ]] || return 1
|
||||||
command grep -Eo '^[[:space:]]*\[[[:space:]]*(profile[[:space:]]+)?[^][:space:]]+[[:space:]]*\]' "${AWS_CONFIG_FILE:-$HOME/.aws/config}" | command sed -E 's/^[[:space:]]*\[[[:space:]]*(profile[[:space:]]+)?([^][:space:]]+)[[:space:]]*\]$/\2/'
|
grep --color=never -Eo '\[.*\]' "${AWS_CONFIG_FILE:-$HOME/.aws/config}" | sed -E 's/^[[:space:]]*\[(profile)?[[:space:]]*([^[:space:]]+)\][[:space:]]*$/\2/g'
|
||||||
}
|
}
|
||||||
|
|
||||||
function _aws_regions() {
|
function _aws_regions() {
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
# Generate and load buf completion
|
# Generate and load buf completion
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._buf"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_buf"
|
||||||
zf_mv -f -- =( buf completion zsh ) "$ZSH_CACHE_DIR/completions/_buf"
|
zf_mv -f -- =( buf completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._bun"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_bun"
|
||||||
zf_mv -f -- =( SHELL=zsh bun completions ) "$ZSH_CACHE_DIR/completions/_bun"
|
zf_mv -f -- =( SHELL=zsh bun completions ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._charm"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_charm"
|
||||||
zf_mv -f -- =( charm completion zsh ) "$ZSH_CACHE_DIR/completions/_charm"
|
zf_mv -f -- =( charm completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._chezmoi"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_chezmoi"
|
||||||
zf_mv -f -- =( chezmoi completion zsh ) "$ZSH_CACHE_DIR/completions/_chezmoi"
|
zf_mv -f -- =( chezmoi completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._codex"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_codex"
|
||||||
zf_mv -f -- =( codex completion zsh < /dev/null 2> /dev/null ) "$ZSH_CACHE_DIR/completions/_codex"
|
zf_mv -f -- =( codex completion zsh < /dev/null 2> /dev/null ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -99,21 +99,18 @@ $ find . -type f 2>/dev/null
|
|||||||
## File extension aliases
|
## File extension aliases
|
||||||
|
|
||||||
These are special aliases that are triggered when a file name is passed as the command. For example,
|
These are special aliases that are triggered when a file name is passed as the command. For example,
|
||||||
if the pdf file extension is aliased to `open_command`, running `file.pdf` opens that file with
|
if the pdf file extension is aliased to `acroread` (a popular Linux pdf reader), when running `file.pdf`
|
||||||
whatever application your system uses for PDFs.
|
that file will be open with `acroread`.
|
||||||
|
|
||||||
### Reading Docs
|
### Reading Docs
|
||||||
|
|
||||||
These use `open_command`, which picks the right opener for your platform: `open` on macOS,
|
| Alias | Command | Description |
|
||||||
`xdg-open` on Linux, `cygstart` on Cygwin.
|
| ----- | ---------- | ---------------------------------- |
|
||||||
|
| pdf | `acroread` | Opens up a document using acroread |
|
||||||
| Alias | Command | Description |
|
| ps | `gv` | Opens up a .ps file using gv |
|
||||||
| ----- | -------------- | ----------------------------------------------- |
|
| dvi | `xdvi` | Opens up a .dvi file using xdvi |
|
||||||
| pdf | `open_command` | Opens up a .pdf file in your default viewer |
|
| chm | `xchm` | Opens up a .chm file using xchm |
|
||||||
| ps | `open_command` | Opens up a .ps file in your default viewer |
|
| djvu | `djview` | Opens up a .djvu file using djview |
|
||||||
| dvi | `open_command` | Opens up a .dvi file in your default viewer |
|
|
||||||
| chm | `open_command` | Opens up a .chm file in your default viewer |
|
|
||||||
| djvu | `open_command` | Opens up a .djvu file in your default viewer |
|
|
||||||
|
|
||||||
### Listing files inside a packed file
|
### Listing files inside a packed file
|
||||||
|
|
||||||
|
|||||||
@@ -71,9 +71,12 @@ if is-at-least 4.2.0; then
|
|||||||
_media_fts=(ape avi flv m4a mkv mov mp3 mpeg mpg ogg ogm rm wav webm)
|
_media_fts=(ape avi flv m4a mkv mov mp3 mpeg mpg ogg ogm rm wav webm)
|
||||||
for ft in $_media_fts; do alias -s $ft=mplayer; done
|
for ft in $_media_fts; do alias -s $ft=mplayer; done
|
||||||
|
|
||||||
# read documents with the platform's default application
|
#read documents
|
||||||
_doc_fts=(pdf ps dvi chm djvu)
|
alias -s pdf=acroread
|
||||||
for ft in $_doc_fts; do alias -s $ft=open_command; done
|
alias -s ps=gv
|
||||||
|
alias -s dvi=xdvi
|
||||||
|
alias -s chm=xchm
|
||||||
|
alias -s djvu=djview
|
||||||
|
|
||||||
#list what's inside packed file
|
#list what's inside packed file
|
||||||
alias -s zip="unzip -l"
|
alias -s zip="unzip -l"
|
||||||
|
|||||||
@@ -27,6 +27,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._deno"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_deno"
|
||||||
zf_mv -f -- =( deno completions zsh ) "$ZSH_CACHE_DIR/completions/_deno"
|
zf_mv -f -- =( deno completions zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ plugins=(... docker-compose)
|
|||||||
|-----------|----------------------------------|----------------------------------------------------------------------------------|
|
|-----------|----------------------------------|----------------------------------------------------------------------------------|
|
||||||
| dco | `docker-compose` | Docker-compose main command |
|
| dco | `docker-compose` | Docker-compose main command |
|
||||||
| dcb | `docker-compose build` | Build containers |
|
| dcb | `docker-compose build` | Build containers |
|
||||||
| dcc | `docker-compose config` | Parse, resolve and render compose file in canonical format |
|
| dcc | `docker-compose config` | Parse, resolve and render compose file in canonical format |
|
||||||
| dce | `docker-compose exec` | Execute command inside a container |
|
| dce | `docker-compose exec` | Execute command inside a container |
|
||||||
| dcps | `docker-compose ps` | List containers |
|
| dcps | `docker-compose ps` | List containers |
|
||||||
| dcrestart | `docker-compose restart` | Restart container |
|
| dcrestart | `docker-compose restart` | Restart container |
|
||||||
@@ -35,6 +35,3 @@ plugins=(... docker-compose)
|
|||||||
| dcpull | `docker-compose pull` | Pull image of a service |
|
| dcpull | `docker-compose pull` | Pull image of a service |
|
||||||
| dcstart | `docker-compose start` | Start a container |
|
| dcstart | `docker-compose start` | Start a container |
|
||||||
| dck | `docker-compose kill` | Kills containers |
|
| dck | `docker-compose kill` | Kills containers |
|
||||||
| dcv | `docker-compose version` | Show version information |
|
|
||||||
| dcsts | `docker-compose stats` | Show stats of containers |
|
|
||||||
| dci | `docker-compose images` | List images |
|
|
||||||
|
|||||||
@@ -24,8 +24,5 @@ alias dclF="$dccmd logs -f --tail 0"
|
|||||||
alias dcpull="$dccmd pull"
|
alias dcpull="$dccmd pull"
|
||||||
alias dcstart="$dccmd start"
|
alias dcstart="$dccmd start"
|
||||||
alias dck="$dccmd kill"
|
alias dck="$dccmd kill"
|
||||||
alias dcv="$dccmd version"
|
|
||||||
alias dcsts="$dccmd stats"
|
|
||||||
alias dci="$dccmd images"
|
|
||||||
|
|
||||||
unset dccmd
|
unset dccmd
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ zmodload -F zsh/files b:zf_mv
|
|||||||
! is-at-least 23.0.0 ${${(s:,:z)"$(command docker --version)"}[3]}; then
|
! is-at-least 23.0.0 ${${(s:,:z)"$(command docker --version)"}[3]}; then
|
||||||
command cp "${plugin_dir}/completions/_docker" "$ZSH_CACHE_DIR/completions/_docker"
|
command cp "${plugin_dir}/completions/_docker" "$ZSH_CACHE_DIR/completions/_docker"
|
||||||
else
|
else
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._docker"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_docker"
|
||||||
zf_mv -f -- =( command docker completion zsh ) "$ZSH_CACHE_DIR/completions/_docker"
|
zf_mv -f -- =( command docker completion zsh ) "$TMPPREFIX"
|
||||||
fi
|
fi
|
||||||
} "${0:A:h}" &|
|
} "${0:A:h}" &|
|
||||||
|
|||||||
@@ -16,6 +16,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._doctl"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_doctl"
|
||||||
zf_mv -f -- =( doctl completion zsh ) "$ZSH_CACHE_DIR/completions/_doctl"
|
zf_mv -f -- =( doctl completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -1,33 +1,14 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
emacsfun() {
|
emacsfun() {
|
||||||
local cmd frames arg tty
|
local cmd frames
|
||||||
|
|
||||||
# Build the Emacs Lisp command to check for suitable frames
|
# Build the Emacs Lisp command to check for suitable frames
|
||||||
# See https://www.gnu.org/software/emacs/manual/html_node/elisp/Frames.html#index-framep
|
# See https://www.gnu.org/software/emacs/manual/html_node/elisp/Frames.html#index-framep
|
||||||
for arg in "$@"; do
|
case "$*" in
|
||||||
case "$arg" in
|
*-t*|*--tty*|*-nw*) cmd="(memq 't (mapcar 'framep (frame-list)))" ;; # if != nil, there are tty frames
|
||||||
-t|--tty|-nw) tty=1; break ;;
|
*) cmd="(delete 't (mapcar 'framep (frame-list)))" ;; # if != nil, there are graphical terminals (x, w32, ns)
|
||||||
esac
|
esac
|
||||||
done
|
|
||||||
|
|
||||||
if [ -n "$tty" ]; then
|
|
||||||
cmd="(memq 't (mapcar 'framep (frame-list)))" # if != nil, there are tty frames
|
|
||||||
else
|
|
||||||
cmd="(delete 't (mapcar 'framep (frame-list)))" # if != nil, there are graphical terminals (x, w32, ns)
|
|
||||||
fi
|
|
||||||
|
|
||||||
# A tty frame needs the client to stay attached, so drop the --no-wait the
|
|
||||||
# `emacs` alias adds. Otherwise emacsclient returns at once and nothing opens.
|
|
||||||
if [ -n "$tty" ]; then
|
|
||||||
for arg do
|
|
||||||
shift
|
|
||||||
case "$arg" in
|
|
||||||
--no-wait) continue ;;
|
|
||||||
esac
|
|
||||||
set -- "$@" "$arg"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if there are suitable frames
|
# Check if there are suitable frames
|
||||||
frames="$(emacsclient -a '' -n -e "$cmd" 2>/dev/null |sed 's/.*\x07//g' )"
|
frames="$(emacsclient -a '' -n -e "$cmd" 2>/dev/null |sed 's/.*\x07//g' )"
|
||||||
|
|||||||
@@ -45,36 +45,6 @@ If `yes`, always add `-h` flag to add a header row for each column.
|
|||||||
|
|
||||||
Default: `no`
|
Default: `no`
|
||||||
|
|
||||||
### `links`
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
zstyle ':omz:plugins:eza' 'links' yes|no
|
|
||||||
```
|
|
||||||
|
|
||||||
If `yes`, always add `-H` flag to show hard links for each file.
|
|
||||||
|
|
||||||
Default: `no`
|
|
||||||
|
|
||||||
### `octal`
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
zstyle ':omz:plugins:eza' 'octal' yes|no
|
|
||||||
```
|
|
||||||
|
|
||||||
If `yes`, always add `-o` flag to show file permissions as octal numbers.
|
|
||||||
|
|
||||||
Default: `no`
|
|
||||||
|
|
||||||
### `inodes`
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
zstyle ':omz:plugins:eza' 'inodes' yes|no
|
|
||||||
```
|
|
||||||
|
|
||||||
If `yes`, always add `-i` flag to show the inode for each file.
|
|
||||||
|
|
||||||
Default: `no`
|
|
||||||
|
|
||||||
### `show-group`
|
### `show-group`
|
||||||
|
|
||||||
```zsh
|
```zsh
|
||||||
|
|||||||
@@ -21,15 +21,6 @@ function _configure_eza() {
|
|||||||
if zstyle -t ':omz:plugins:eza' 'header'; then
|
if zstyle -t ':omz:plugins:eza' 'header'; then
|
||||||
_EZA_HEAD+=("h")
|
_EZA_HEAD+=("h")
|
||||||
fi
|
fi
|
||||||
if zstyle -t ':omz:plugins:eza' 'links'; then
|
|
||||||
_EZA_HEAD+=("H")
|
|
||||||
fi
|
|
||||||
if zstyle -t ':omz:plugins:eza' 'octal'; then
|
|
||||||
_EZA_HEAD+=("o")
|
|
||||||
fi
|
|
||||||
if zstyle -t ':omz:plugins:eza' 'inodes'; then
|
|
||||||
_EZA_HEAD+=("i")
|
|
||||||
fi
|
|
||||||
zstyle -s ':omz:plugins:eza' 'size-prefix' _val
|
zstyle -s ':omz:plugins:eza' 'size-prefix' _val
|
||||||
case "${_val:l}" in
|
case "${_val:l}" in
|
||||||
binary)
|
binary)
|
||||||
|
|||||||
@@ -32,6 +32,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._flutter"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_flutter"
|
||||||
zf_mv -f -- =( flutter zsh-completion < /dev/null ) "$ZSH_CACHE_DIR/completions/_flutter"
|
zf_mv -f -- =( flutter zsh-completion < /dev/null ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._flux"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_flux"
|
||||||
zf_mv -f -- =( flux completion zsh ) "$ZSH_CACHE_DIR/completions/_flux"
|
zf_mv -f -- =( flux completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._fnm"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_fnm"
|
||||||
zf_mv -f -- =( fnm completions --shell=zsh ) "$ZSH_CACHE_DIR/completions/_fnm"
|
zf_mv -f -- =( fnm completions --shell=zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|
||||||
if zstyle -t ':omz:plugins:fnm' autostart; then
|
if zstyle -t ':omz:plugins:fnm' autostart; then
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ function frontend() {
|
|||||||
codepen 'https://codepen.io/search/pens?q='
|
codepen 'https://codepen.io/search/pens?q='
|
||||||
compassdoc 'http://compass-style.org/search?q='
|
compassdoc 'http://compass-style.org/search?q='
|
||||||
cssflow 'http://www.cssflow.com/search?q='
|
cssflow 'http://www.cssflow.com/search?q='
|
||||||
dartlang $(_frontend_fallback 'dart.dev')
|
dartlang 'https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:'
|
||||||
emberjs $(_frontend_fallback 'emberjs.com/')
|
emberjs $(_frontend_fallback 'emberjs.com/')
|
||||||
flowtype $(_frontend_fallback 'flow.org/en/docs/')
|
flowtype $(_frontend_fallback 'flow.org/en/docs/')
|
||||||
fontello 'http://fontello.com/#search='
|
fontello 'http://fontello.com/#search='
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._gcx"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_gcx"
|
||||||
zf_mv -f -- =( gcx completion zsh ) "$ZSH_CACHE_DIR/completions/_gcx"
|
zf_mv -f -- =( gcx completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -17,4 +17,7 @@ plugin is loaded, which is usually when you start up a new terminal emulator.
|
|||||||
|
|
||||||
The cache is stored at:
|
The cache is stored at:
|
||||||
|
|
||||||
- `$ZSH_CACHE_DIR/completions/_gh` completions script
|
- `$ZSH/plugins/gh/_gh` completions script
|
||||||
|
|
||||||
|
- `$ZSH_CACHE_DIR/gh_version` version of GitHub CLI, used to invalidate
|
||||||
|
the cache.
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._gh"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_gh"
|
||||||
zf_mv -f -- =( gh completion --shell zsh ) "$ZSH_CACHE_DIR/completions/_gh"
|
zf_mv -f -- =( gh completion --shell zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -103,7 +103,6 @@ plugins=(... git)
|
|||||||
| `glods` | `git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short` |
|
| `glods` | `git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short` |
|
||||||
| `glol` | `git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'` |
|
| `glol` | `git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'` |
|
||||||
| `glola` | `git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --all` |
|
| `glola` | `git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --all` |
|
||||||
| `glolm` | `git log $(git_main_branch) --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'` |
|
|
||||||
| `glols` | `git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --stat` |
|
| `glols` | `git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --stat` |
|
||||||
| `glo` | `git log --oneline --decorate` |
|
| `glo` | `git log --oneline --decorate` |
|
||||||
| `glog` | `git log --oneline --decorate --graph` |
|
| `glog` | `git log --oneline --decorate --graph` |
|
||||||
@@ -255,7 +254,6 @@ receive further support.
|
|||||||
| `git_current_user_name` | Returns the `user.name` config value (Lives in `lib/git.zsh`) |
|
| `git_current_user_name` | Returns the `user.name` config value (Lives in `lib/git.zsh`) |
|
||||||
| `git_develop_branch` | Returns the name of the “development” branch: `dev`, `devel`, `development` if they exist, `develop` otherwise |
|
| `git_develop_branch` | Returns the name of the “development” branch: `dev`, `devel`, `development` if they exist, `develop` otherwise |
|
||||||
| `git_main_branch` | Returns the name of the main branch: `main` if it exists, `master` otherwise |
|
| `git_main_branch` | Returns the name of the main branch: `main` if it exists, `master` otherwise |
|
||||||
| `gbcopy` | Copies current branch name to clipboard |
|
|
||||||
| `grename <old> <new>` | Renames branch `<old>` to `<new>`, including on the origin remote |
|
| `grename <old> <new>` | Renames branch `<old>` to `<new>`, including on the origin remote |
|
||||||
| `gbda` | Deletes all merged branches |
|
| `gbda` | Deletes all merged branches |
|
||||||
| `gbds` | Deletes all squash-merged branches (**Note: performance degrades with number of branches**) |
|
| `gbds` | Deletes all squash-merged branches (**Note: performance degrades with number of branches**) |
|
||||||
|
|||||||
@@ -49,16 +49,6 @@ function git_main_branch() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
function gbcopy() {
|
|
||||||
command git rev-parse --git-dir &>/dev/null || return
|
|
||||||
|
|
||||||
local branch
|
|
||||||
branch="$(git_current_branch)" || return
|
|
||||||
[[ -n "$branch" ]] || return 1
|
|
||||||
|
|
||||||
print -rn -- "$branch" | clipcopy
|
|
||||||
}
|
|
||||||
|
|
||||||
function grename() {
|
function grename() {
|
||||||
if [[ -z "$1" || -z "$2" ]]; then
|
if [[ -z "$1" || -z "$2" ]]; then
|
||||||
echo "Usage: $0 old_branch new_branch"
|
echo "Usage: $0 old_branch new_branch"
|
||||||
@@ -249,7 +239,6 @@ alias glod='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgre
|
|||||||
alias glola='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset" --all'
|
alias glola='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset" --all'
|
||||||
alias glols='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset" --stat'
|
alias glols='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset" --stat'
|
||||||
alias glol='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset"'
|
alias glol='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset"'
|
||||||
alias glolm='git log $(git_main_branch) --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset"'
|
|
||||||
alias glo='git log --oneline --decorate'
|
alias glo='git log --oneline --decorate'
|
||||||
alias glog='git log --oneline --decorate --graph'
|
alias glog='git log --oneline --decorate --graph'
|
||||||
alias gloga='git log --oneline --decorate --graph --all'
|
alias gloga='git log --oneline --decorate --graph --all'
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
# GitLab CLI plugin
|
|
||||||
|
|
||||||
This plugin adds completion for the [GitLab CLI](https://docs.gitlab.com/cli/).
|
|
||||||
|
|
||||||
To use it, add `glab` to the plugins array in your zshrc file:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
plugins=(... glab)
|
|
||||||
```
|
|
||||||
|
|
||||||
This plugin does not add any aliases.
|
|
||||||
|
|
||||||
## Cache
|
|
||||||
|
|
||||||
This plugin caches the completion script at `$ZSH_CACHE_DIR/completions/_glab`.
|
|
||||||
|
|
||||||
The cache is regenerated in the background whenever the plugin is loaded, which
|
|
||||||
usually happens when you start a new Zsh session.
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
# Autocompletion for the GitLab CLI (glab).
|
|
||||||
if (( ! $+commands[glab] )); then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If the completion file doesn't exist yet, we need to autoload it and
|
|
||||||
# bind it to `glab`. Otherwise, compinit will have already done that.
|
|
||||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_glab" ]]; then
|
|
||||||
typeset -g -A _comps
|
|
||||||
autoload -Uz _glab
|
|
||||||
_comps[glab]=_glab
|
|
||||||
fi
|
|
||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
|
||||||
() {
|
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._glab"
|
|
||||||
zf_mv -f -- =( glab completion -s zsh ) "$ZSH_CACHE_DIR/completions/_glab"
|
|
||||||
} &|
|
|
||||||
+11
-95
@@ -81,7 +81,6 @@ _go() {
|
|||||||
'tool[run specified go tool]'
|
'tool[run specified go tool]'
|
||||||
'version[print Go version]'
|
'version[print Go version]'
|
||||||
'vet[run go tool vet on packages]'
|
'vet[run go tool vet on packages]'
|
||||||
'work[workspace maintenance]'
|
|
||||||
)
|
)
|
||||||
if (( CURRENT == 2 )); then
|
if (( CURRENT == 2 )); then
|
||||||
# explain go commands
|
# explain go commands
|
||||||
@@ -89,38 +88,19 @@ _go() {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
build_flags=(
|
build_flags=(
|
||||||
'-C[change to dir before running the command]:directory:_path_files -/'
|
'-a[force reinstallation of packages that are already up to date]'
|
||||||
'-a[force rebuilding of packages that are already up-to-date]'
|
|
||||||
'-n[print the commands but do not run them]'
|
'-n[print the commands but do not run them]'
|
||||||
'-p[number of parallel builds]:number'
|
'-p[number of parallel builds]:number'
|
||||||
'-race[enable data race detection]'
|
'-race[enable data race detection]'
|
||||||
'-msan[enable interoperation with memory sanitizer]'
|
|
||||||
'-asan[enable interoperation with address sanitizer]'
|
|
||||||
'-cover[enable code coverage instrumentation]'
|
|
||||||
'-covermode[set the mode for coverage analysis]:mode:(set count atomic)'
|
|
||||||
'-coverpkg[apply coverage analysis to matching packages]:pattern'
|
|
||||||
'-v[print the names of packages as they are compiled]'
|
|
||||||
'-work[print temporary directory name and keep it]'
|
|
||||||
'-x[print the commands]'
|
'-x[print the commands]'
|
||||||
'-asmflags[arguments to pass on each go tool asm invocation]:flags'
|
'-work[print temporary directory name and keep it]'
|
||||||
'-buildmode[build mode to use]:mode:(archive c-archive c-shared default shared exe pie plugin)'
|
'-ccflags[flags for 5c/6c/8c]:flags'
|
||||||
'-buildvcs[stamp binaries with version control information]:mode:(true false auto)'
|
'-gcflags[flags for 5g/6g/8g]:flags'
|
||||||
'-compiler[name of compiler to use]:name:(gccgo gc)'
|
'-ldflags[flags for 5l/6l/8l]:flags'
|
||||||
'-gccgoflags[arguments to pass on each gccgo compiler/linker invocation]:flags'
|
'-gccgoflags[flags for gccgo]:flags'
|
||||||
'-gcflags[arguments to pass on each go tool compile invocation]:flags'
|
'-compiler[name of compiler to use]:name'
|
||||||
'-installsuffix[suffix to use in the package installation directory]:suffix'
|
'-installsuffix[suffix to add to package directory]:suffix'
|
||||||
'-json[emit build output in JSON suitable for automated processing]'
|
|
||||||
'-ldflags[arguments to pass on each go tool link invocation]:flags'
|
|
||||||
'-linkshared[build code that will be linked against shared libraries]'
|
|
||||||
'-mod[module download mode to use]:mode:(readonly vendor mod)'
|
|
||||||
'-modcacherw[leave newly-created directories in the module cache read-write]'
|
|
||||||
'-modfile[read and write an alternate go.mod file]:file:_files -g "*.mod"'
|
|
||||||
'-overlay[read a JSON config file that provides an overlay for build operations]:file:_files -g "*.json"'
|
|
||||||
'-pgo[specify the file path of a profile for profile-guided optimization]:file:_files'
|
|
||||||
'-pkgdir[install and load all packages from dir]:directory:_path_files -/'
|
|
||||||
'-tags[list of build tags to consider satisfied]:tags'
|
'-tags[list of build tags to consider satisfied]:tags'
|
||||||
'-trimpath[remove all file system paths from the resulting executable]'
|
|
||||||
'-toolexec[program to use to invoke toolchain programs]:command'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
case ${words[2]} in
|
case ${words[2]} in
|
||||||
@@ -145,20 +125,17 @@ _go() {
|
|||||||
;;
|
;;
|
||||||
install)
|
install)
|
||||||
_arguments -s -w : ${build_flags[@]} \
|
_arguments -s -w : ${build_flags[@]} \
|
||||||
|
"-v[show package names]" \
|
||||||
'*:importpaths:__go_packages'
|
'*:importpaths:__go_packages'
|
||||||
;;
|
;;
|
||||||
get)
|
get)
|
||||||
_arguments -s -w : \
|
_arguments -s -w : \
|
||||||
${build_flags[@]} \
|
${build_flags[@]}
|
||||||
"-t[consider modules needed to build tests of packages]" \
|
|
||||||
"-u[update modules providing dependencies to newer minor or patch releases]" \
|
|
||||||
"-u=[update modules providing dependencies to patch releases]:mode:(patch)" \
|
|
||||||
"-tool[add a matching tool line to go.mod for each listed package]" \
|
|
||||||
"*:importpaths:__go_packages"
|
|
||||||
;;
|
;;
|
||||||
build)
|
build)
|
||||||
_arguments -s -w : \
|
_arguments -s -w : \
|
||||||
${build_flags[@]} \
|
${build_flags[@]} \
|
||||||
|
"-v[show package names]" \
|
||||||
"-o[output file]:file:_files" \
|
"-o[output file]:file:_files" \
|
||||||
"*:args:{ _alternative ':importpaths:__go_packages' ':files:_path_files -g \"*.go\"' }"
|
"*:args:{ _alternative ':importpaths:__go_packages' ':files:_path_files -g \"*.go\"' }"
|
||||||
;;
|
;;
|
||||||
@@ -261,60 +238,6 @@ _go() {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
work)
|
|
||||||
local -a work_commands
|
|
||||||
work_commands+=(
|
|
||||||
'edit[edit go.work from tools or scripts]'
|
|
||||||
'init[initialize workspace file]'
|
|
||||||
'sync[sync workspace build list to modules]'
|
|
||||||
'use[add modules to workspace file]'
|
|
||||||
'vendor[make vendored copy of dependencies]'
|
|
||||||
)
|
|
||||||
|
|
||||||
if (( CURRENT == 3 )); then
|
|
||||||
_values 'go work commands' ${work_commands[@]} "help[display help]"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
case ${words[3]} in
|
|
||||||
help)
|
|
||||||
_values 'go work commands' ${work_commands[@]}
|
|
||||||
;;
|
|
||||||
edit)
|
|
||||||
_arguments -s -w : \
|
|
||||||
"-fmt[reformat the go.work file]" \
|
|
||||||
"-godebug[=key=value add a godebug key=value line]:key=value" \
|
|
||||||
"-dropgodebug[=key drop an existing godebug line]:key" \
|
|
||||||
"-use[=path add a use directive]:directory:_path_files -/" \
|
|
||||||
"-dropuse[=path drop a use directive]:directory:_path_files -/" \
|
|
||||||
"-replace[=old{@v}=new{@v} add a replacement of the given module path and version pair]:name" \
|
|
||||||
"-dropreplace[=old{@v} drop a replacement of the given module path and version pair]:name" \
|
|
||||||
"-go[={version} set the expected Go language version]:number" \
|
|
||||||
"-toolchain[=name set the Go toolchain to use]:name" \
|
|
||||||
"-print[print the final go.work in its text format]" \
|
|
||||||
"-json[print the final go.work file in JSON format]" \
|
|
||||||
"1:go.work file:_files -g 'go.work'"
|
|
||||||
;;
|
|
||||||
init)
|
|
||||||
_arguments -s -w : \
|
|
||||||
"*:module directories:_path_files -/"
|
|
||||||
;;
|
|
||||||
sync)
|
|
||||||
;;
|
|
||||||
use)
|
|
||||||
_arguments -s -w : \
|
|
||||||
"-r[search recursively for modules in the argument directories]" \
|
|
||||||
"*:module directories:_path_files -/"
|
|
||||||
;;
|
|
||||||
vendor)
|
|
||||||
_arguments -s -w : \
|
|
||||||
"-e[attempt to proceed despite errors encountered while loading packages]" \
|
|
||||||
"-v[print the names of vendored modules and packages]" \
|
|
||||||
"-o[create the vendor directory at the given path]:output directory:_path_files -/" \
|
|
||||||
"*:flags"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
help)
|
help)
|
||||||
_values "${commands[@]}" \
|
_values "${commands[@]}" \
|
||||||
'environment[show Go environment variables available]' \
|
'environment[show Go environment variables available]' \
|
||||||
@@ -324,13 +247,6 @@ _go() {
|
|||||||
'testflag[description of testing flags]' \
|
'testflag[description of testing flags]' \
|
||||||
'testfunc[description of testing functions]'
|
'testfunc[description of testing functions]'
|
||||||
;;
|
;;
|
||||||
version)
|
|
||||||
_arguments -s -w : \
|
|
||||||
"-m[print module version information]" \
|
|
||||||
"-v[report unrecognized files]" \
|
|
||||||
"-json[print module version information in JSON format]" \
|
|
||||||
"*:file:_files"
|
|
||||||
;;
|
|
||||||
run)
|
run)
|
||||||
_arguments -s -w : \
|
_arguments -s -w : \
|
||||||
${build_flags[@]} \
|
${build_flags[@]} \
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ function gradle-or-gradlew() {
|
|||||||
|
|
||||||
# if gradlew found, run it instead of gradle
|
# if gradlew found, run it instead of gradle
|
||||||
if [[ -f "$project_root/gradlew" ]]; then
|
if [[ -f "$project_root/gradlew" ]]; then
|
||||||
|
echo "executing gradlew instead of gradle"
|
||||||
"$project_root/gradlew" "$@"
|
"$project_root/gradlew" "$@"
|
||||||
else
|
else
|
||||||
command gradle "$@"
|
command gradle "$@"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ else
|
|||||||
source "$ZSH_CACHE_DIR/completions/_hasura"
|
source "$ZSH_CACHE_DIR/completions/_hasura"
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._hasura"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_hasura"
|
||||||
zf_mv -f -- =( hasura completion zsh ) "$ZSH_CACHE_DIR/completions/_hasura"
|
zf_mv -f -- =( hasura completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._hcloud"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_hcloud"
|
||||||
zf_mv -f -- =( hcloud completion zsh 2> /dev/null ) "$ZSH_CACHE_DIR/completions/_hcloud"
|
zf_mv -f -- =( hcloud completion zsh 2> /dev/null ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|
||||||
# Main alias
|
# Main alias
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ else
|
|||||||
source "$ZSH_CACHE_DIR/completions/_helm"
|
source "$ZSH_CACHE_DIR/completions/_helm"
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._helm"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_helm"
|
||||||
zf_mv -f -- =( helm completion zsh ) "$ZSH_CACHE_DIR/completions/_helm"
|
zf_mv -f -- =( helm completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -1,163 +0,0 @@
|
|||||||
# herdr plugin
|
|
||||||
|
|
||||||
This plugin adds completion, aliases, an interactive session picker and a prompt
|
|
||||||
function for [herdr](https://herdr.dev), the runtime your
|
|
||||||
coding agents live on. herdr keeps agent terminals running in the background across
|
|
||||||
projects and machines, so you can close your terminal, reconnect later, and pick up
|
|
||||||
where the agents left off.
|
|
||||||
|
|
||||||
To use it, add `herdr` to the plugins array in your zshrc file:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
plugins=(... herdr)
|
|
||||||
```
|
|
||||||
|
|
||||||
Install herdr first if you have not already:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
curl -fsSL https://herdr.dev/install.sh | sh # or: brew install herdr
|
|
||||||
```
|
|
||||||
|
|
||||||
## Learning herdr from the terminal
|
|
||||||
|
|
||||||
The fastest way to explore herdr is tab completion. Every command group and flag shows a
|
|
||||||
short description, so you can discover what is available without leaving the shell:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ herdr <TAB>
|
|
||||||
agent -- Control and inspect agent panes
|
|
||||||
session -- Manage named persistent sessions
|
|
||||||
workspace -- Manage workspaces over the socket API
|
|
||||||
worktree -- Manage Git worktree-backed workspaces
|
|
||||||
...
|
|
||||||
$ herdr agent <TAB>
|
|
||||||
list -- List agents
|
|
||||||
prompt -- Submit a prompt to an agent
|
|
||||||
start -- Start a supported interactive agent in an existing pane
|
|
||||||
wait -- Wait until an agent reaches one of the requested states
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|
||||||
A few other ways to learn as you go:
|
|
||||||
|
|
||||||
- `herdr <group>` with no subcommand prints that group's help, for example `herdr pane`.
|
|
||||||
- `herdr --skill` prints the instructions herdr gives to agents that drive it. It is a
|
|
||||||
good tour of the full command surface.
|
|
||||||
- Most control commands return JSON, so you can pipe them into `jq` in scripts.
|
|
||||||
|
|
||||||
## Common workflows
|
|
||||||
|
|
||||||
### Start and reconnect
|
|
||||||
|
|
||||||
```sh
|
|
||||||
herdr # launch, or attach to the default session
|
|
||||||
herdr --session work # use or create a named session
|
|
||||||
herdr session list # see running and stopped sessions
|
|
||||||
herdr session attach work # reconnect to a named session
|
|
||||||
herdr status # check the local client and running server
|
|
||||||
herdr update # install the latest release
|
|
||||||
```
|
|
||||||
|
|
||||||
### Organize work into workspaces and tabs
|
|
||||||
|
|
||||||
```sh
|
|
||||||
herdr workspace list
|
|
||||||
herdr workspace create --cwd ~/projects/app
|
|
||||||
herdr tab create
|
|
||||||
herdr pane split --direction right
|
|
||||||
herdr worktree create --branch feature/login # open a Git worktree in its own workspace
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run and watch agents
|
|
||||||
|
|
||||||
```sh
|
|
||||||
herdr agent list # what is running, and is it idle, working or blocked
|
|
||||||
herdr agent start reviewer --kind claude --pane w1:p2
|
|
||||||
herdr agent prompt reviewer "review the last commit" --wait
|
|
||||||
herdr agent read reviewer # read the agent's terminal output
|
|
||||||
herdr agent wait reviewer --until idle
|
|
||||||
herdr agent attach reviewer # jump straight into that terminal
|
|
||||||
```
|
|
||||||
|
|
||||||
### Work across machines
|
|
||||||
|
|
||||||
```sh
|
|
||||||
herdr --remote user@build-box # attach through SSH with your local keybindings
|
|
||||||
```
|
|
||||||
|
|
||||||
### Keep the server healthy
|
|
||||||
|
|
||||||
```sh
|
|
||||||
herdr config check # validate config.toml
|
|
||||||
herdr server reload-config # apply config changes without restarting panes
|
|
||||||
herdr server stop
|
|
||||||
herdr channel set preview # switch between stable and preview releases
|
|
||||||
herdr integration status # which agent CLIs have herdr hooks installed
|
|
||||||
```
|
|
||||||
|
|
||||||
See the [CLI reference](https://herdr.dev/docs/cli-reference/) for every command and flag.
|
|
||||||
|
|
||||||
## Aliases
|
|
||||||
|
|
||||||
| Alias | Command |
|
|
||||||
| ------- | ----------------------------- |
|
|
||||||
| `hrdr` | `herdr` |
|
|
||||||
| `hrdrst` | `herdr status` |
|
|
||||||
| `hrdrup` | `herdr update` |
|
|
||||||
| `hrdrsl` | `herdr session list` |
|
|
||||||
| `hrdrsa` | `herdr session attach` |
|
|
||||||
| `hrdrr` | `herdr --remote` |
|
|
||||||
| `hrdral` | `herdr agent list` |
|
|
||||||
| `hrdrwl` | `herdr workspace list` |
|
|
||||||
| `hrdrwc` | `herdr workspace create` |
|
|
||||||
| `hrdrwt` | `herdr worktree create` |
|
|
||||||
| `hrdrps` | `herdr pane split` |
|
|
||||||
| `hrdrrc` | `herdr server reload-config` |
|
|
||||||
|
|
||||||
Tab completion works through the aliases too, so `hrdr agent <TAB>` completes the same
|
|
||||||
way `herdr agent <TAB>` does.
|
|
||||||
|
|
||||||
## Session picker
|
|
||||||
|
|
||||||
`hrdrs` lists your herdr sessions and attaches to the one you pick. It uses
|
|
||||||
[fzf](https://github.com/junegunn/fzf) when it is installed and falls back to a numbered
|
|
||||||
menu otherwise, so it works everywhere.
|
|
||||||
|
|
||||||
```
|
|
||||||
$ hrdrs
|
|
||||||
name status directory
|
|
||||||
1) default running /Users/me/.config/herdr
|
|
||||||
2) work stopped /Users/me/projects/app
|
|
||||||
Attach to session: 2
|
|
||||||
```
|
|
||||||
|
|
||||||
## Prompt
|
|
||||||
|
|
||||||
This plugin provides the `herdr_prompt_info` function to show the current pane ID in
|
|
||||||
your prompt when the shell is running inside herdr. It reads environment variables only,
|
|
||||||
so it adds no cost to prompt rendering.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
```
|
|
||||||
PROMPT="%~$ "
|
|
||||||
RPROMPT='$(herdr_prompt_info)'
|
|
||||||
```
|
|
||||||
changes your prompt inside a herdr pane to:
|
|
||||||
```
|
|
||||||
~/projects/app$ ▋ w1:p4
|
|
||||||
```
|
|
||||||
and shows nothing outside herdr.
|
|
||||||
|
|
||||||
Wrap it with `ZSH_THEME_HERDR_PROMPT_PREFIX` and `ZSH_THEME_HERDR_PROMPT_SUFFIX`, for
|
|
||||||
example:
|
|
||||||
```
|
|
||||||
ZSH_THEME_HERDR_PROMPT_PREFIX="%{$fg[cyan]%}[herdr "
|
|
||||||
ZSH_THEME_HERDR_PROMPT_SUFFIX="]%{$reset_color%}"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Cache
|
|
||||||
|
|
||||||
This plugin caches the completion script and automatically updates it when the plugin is
|
|
||||||
loaded, which is usually when you start a new terminal emulator.
|
|
||||||
|
|
||||||
The cache is stored at `$ZSH_CACHE_DIR/completions/_herdr`.
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
# Aliases, helpers and completion for herdr (https://herdr.dev), the runtime for coding agents.
|
|
||||||
|
|
||||||
# PROMPT
|
|
||||||
# Defined before the herdr check so themes can reference it on machines without herdr.
|
|
||||||
function herdr_prompt_info {
|
|
||||||
[[ "$HERDR_ENV" == 1 ]] || return
|
|
||||||
echo "${ZSH_THEME_HERDR_PROMPT_PREFIX}${HERDR_PANE_ID:gs/%/%%}${ZSH_THEME_HERDR_PROMPT_SUFFIX}"
|
|
||||||
}
|
|
||||||
|
|
||||||
if (( ! $+commands[herdr] )); then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ALIASES
|
|
||||||
alias hrdr='herdr'
|
|
||||||
alias hrdrst='herdr status'
|
|
||||||
alias hrdrup='herdr update'
|
|
||||||
alias hrdrsl='herdr session list'
|
|
||||||
alias hrdrsa='herdr session attach'
|
|
||||||
alias hrdrr='herdr --remote'
|
|
||||||
alias hrdral='herdr agent list'
|
|
||||||
alias hrdrwl='herdr workspace list'
|
|
||||||
alias hrdrwc='herdr workspace create'
|
|
||||||
alias hrdrwt='herdr worktree create'
|
|
||||||
alias hrdrps='herdr pane split'
|
|
||||||
alias hrdrrc='herdr server reload-config'
|
|
||||||
|
|
||||||
# FUNCTIONS
|
|
||||||
# Pick a session and attach to it, with fzf if available or a numbered menu otherwise.
|
|
||||||
function hrdrs {
|
|
||||||
setopt localoptions extendedglob
|
|
||||||
local -a lines
|
|
||||||
lines=("${(@f)$(herdr session list 2>/dev/null)}")
|
|
||||||
lines=("${(@)lines%%[[:space:]]#[^[:space:]]#}") # drop the socket column
|
|
||||||
if (( $#lines < 2 )); then
|
|
||||||
print "hrdrs: no herdr sessions found" >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
local choice
|
|
||||||
if (( $+commands[fzf] )); then
|
|
||||||
choice=$(print -l -- "${lines[@]}" | fzf --header-lines=1 --prompt='herdr session> ') || return
|
|
||||||
else
|
|
||||||
print -- "${lines[1]}"
|
|
||||||
local PS3="Attach to session: "
|
|
||||||
select choice in "${lines[@]:1}"; do
|
|
||||||
[[ -n "$choice" ]] && break
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
[[ -n "$choice" ]] || return 1
|
|
||||||
|
|
||||||
herdr session attach "${${(z)choice}[1]}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# COMPLETION
|
|
||||||
# If the completion file doesn't exist yet, we need to autoload it and
|
|
||||||
# bind it to `herdr`. Otherwise, compinit will have already done that.
|
|
||||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_herdr" ]]; then
|
|
||||||
typeset -g -A _comps
|
|
||||||
autoload -Uz _herdr
|
|
||||||
_comps[herdr]=_herdr
|
|
||||||
fi
|
|
||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
|
||||||
() {
|
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._herdr"
|
|
||||||
zf_mv -f -- =( herdr completion zsh < /dev/null 2> /dev/null ) "$ZSH_CACHE_DIR/completions/_herdr"
|
|
||||||
} &|
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
# hermes plugin
|
|
||||||
|
|
||||||
This plugin adds completions for the Hermes AI agent.
|
|
||||||
|
|
||||||
To use it, add `hermes` to the plugin array in your zshrc file:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
plugins=(... hermes)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
hermes <TAB>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Common Workflows
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
# First time setup/updating overall config
|
|
||||||
hermes setup
|
|
||||||
|
|
||||||
# Starting the tui chat
|
|
||||||
hermes
|
|
||||||
|
|
||||||
# Changing default model
|
|
||||||
hermes model
|
|
||||||
```
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
if (( ! $+commands[hermes] )); then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_hermes" ]]; then
|
|
||||||
typeset -g -A _comps
|
|
||||||
autoload -Uz _hermes
|
|
||||||
_comps[hermes]=_hermes
|
|
||||||
fi
|
|
||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
|
||||||
() {
|
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._hermes"
|
|
||||||
zf_mv -f -- =( hermes completion zsh < /dev/null 2> /dev/null ) "$ZSH_CACHE_DIR/completions/_hermes"
|
|
||||||
} &|
|
|
||||||
@@ -20,7 +20,7 @@ Requirements
|
|||||||
Install
|
Install
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
Using the [Homebrew]( https://brew.sh ) package manager:
|
Using the [Homebrew](https://brew.sh) package manager:
|
||||||
|
|
||||||
brew install zsh-history-substring-search
|
brew install zsh-history-substring-search
|
||||||
echo 'source $(brew --prefix)/share/zsh-history-substring-search/zsh-history-substring-search.zsh' >> ~/.zshrc
|
echo 'source $(brew --prefix)/share/zsh-history-substring-search/zsh-history-substring-search.zsh' >> ~/.zshrc
|
||||||
@@ -51,7 +51,7 @@ Using [zplug](https://github.com/zplug/zplug):
|
|||||||
|
|
||||||
1. Add this repo to `~/.zshrc`:
|
1. Add this repo to `~/.zshrc`:
|
||||||
|
|
||||||
zplug "zsh-users/zsh-history-substring-search", as:plugin
|
zplug "zsh-users/zsh-history-substring-search", as: plugin
|
||||||
|
|
||||||
Using [antigen](https://github.com/zsh-users/antigen):
|
Using [antigen](https://github.com/zsh-users/antigen):
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ Using [Zinit](https://github.com/zdharma-continuum/zinit):
|
|||||||
|
|
||||||
1. Use the `Oh-my-zsh` Zinit snippet in `~/.zshrc`:
|
1. Use the `Oh-my-zsh` Zinit snippet in `~/.zshrc`:
|
||||||
|
|
||||||
zinit snippet OMZ::plugins/git/git.plugin.zsh
|
zinit snippet OMZ::plugins/git/git.plugin.zsh`
|
||||||
|
|
||||||
2. Load the plugin in `~/.zshrc`:
|
2. Load the plugin in `~/.zshrc`:
|
||||||
|
|
||||||
|
|||||||
@@ -295,8 +295,8 @@ _history-substring-search-begin() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
#
|
#
|
||||||
# Escape and join query parts with wildcard character '*' as seperator
|
# Escape and join query parts with wildcard character '*' as separator
|
||||||
# `(j:CHAR:)` join array to string with CHAR as seperator
|
# `(j:CHAR:)` join array to string with CHAR as separator
|
||||||
#
|
#
|
||||||
local search_pattern="${(j:*:)_history_substring_search_query_parts[@]//(#m)[\][()|\\*?#<>~^]/\\$MATCH}*"
|
local search_pattern="${(j:*:)_history_substring_search_query_parts[@]//(#m)[\][()|\\*?#<>~^]/\\$MATCH}*"
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ plugins=(... jj)
|
|||||||
| jjopl | `jj op log` |
|
| jjopl | `jj op log` |
|
||||||
| jjor | `jj op restore` |
|
| jjor | `jj op restore` |
|
||||||
| jjrb | `jj rebase` |
|
| jjrb | `jj rebase` |
|
||||||
| jjrbm | `jj rebase -o "trunk()"` |
|
| jjrbm | `jj rebase -d "trunk()"` |
|
||||||
| jjrs | `jj restore` |
|
| jjrs | `jj restore` |
|
||||||
| jjrt | `cd "$(jj root \|\| echo .)"` |
|
| jjrt | `cd "$(jj root \|\| echo .)"` |
|
||||||
| jjs | `jj show` |
|
| jjs | `jj show` |
|
||||||
@@ -120,10 +120,10 @@ that.
|
|||||||
|
|
||||||
### Git async-prompt compatibility
|
### Git async-prompt compatibility
|
||||||
|
|
||||||
If you use a wrapper function that calls `git_prompt_info` (as shown above), it won't work with the default
|
If you use a wrapper function that calls `git_prompt_info` (as shown above), it won't work with
|
||||||
git async-prompt mode. This is because async-prompt only registers its background worker when it detects
|
the default git async-prompt mode. This is because async-prompt only registers its background worker
|
||||||
`$(git_prompt_info)` literally in your prompt variables. A wrapper like `$(_my_theme_vcs_info)` won't match,
|
when it detects `$(git_prompt_info)` literally in your prompt variables. A wrapper like
|
||||||
so the async output stays empty.
|
`$(_my_theme_vcs_info)` won't match, so the async output stays empty.
|
||||||
|
|
||||||
To fix this, add one of the following to your `.zshrc` **before** Oh My Zsh is sourced:
|
To fix this, add one of the following to your `.zshrc` **before** Oh My Zsh is sourced:
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._jj"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_jj"
|
||||||
zf_mv -f -- =( COMPLETE=zsh jj ) "$ZSH_CACHE_DIR/completions/_jj"
|
zf_mv -f -- =( COMPLETE=zsh jj ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|
||||||
function __jj_prompt_jj() {
|
function __jj_prompt_jj() {
|
||||||
@@ -81,7 +81,7 @@ alias jjop='jj op'
|
|||||||
alias jjopl='jj op log'
|
alias jjopl='jj op log'
|
||||||
alias jjor='jj op restore'
|
alias jjor='jj op restore'
|
||||||
alias jjrb='jj rebase'
|
alias jjrb='jj rebase'
|
||||||
alias jjrbm='jj rebase -o "trunk()"'
|
alias jjrbm='jj rebase -d "trunk()"'
|
||||||
alias jjrs='jj restore'
|
alias jjrs='jj restore'
|
||||||
alias jjrt='cd "$(jj root || echo .)"'
|
alias jjrt='cd "$(jj root || echo .)"'
|
||||||
alias jjs='jj show'
|
alias jjs='jj show'
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
# the actual completion file will be loaded.
|
# the actual completion file will be loaded.
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._k9s"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_k9s"
|
||||||
zf_mv -f -- =( k9s completion zsh ) "$ZSH_CACHE_DIR/completions/_k9s"
|
zf_mv -f -- =( k9s completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ fi
|
|||||||
# Generate and load kind completion
|
# Generate and load kind completion
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._kind"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_kind"
|
||||||
zf_mv -f -- =( kind completion zsh ) "$ZSH_CACHE_DIR/completions/_kind"
|
zf_mv -f -- =( kind completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|
||||||
# Register aliases
|
# Register aliases
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Kubernetes prompt info for bash, fish, and zsh
|
# Kubernetes prompt helper for bash/zsh
|
||||||
# Displays current context and namespace
|
# Displays current context and namespace
|
||||||
|
|
||||||
# Copyright 2026 Jon Mosco
|
# Copyright 2026 Jon Mosco
|
||||||
@@ -121,7 +121,7 @@ _kube_ps1_color_fg() {
|
|||||||
if [[ "${_KUBE_PS1_TPUT_AVAILABLE}" == "true" ]]; then
|
if [[ "${_KUBE_PS1_TPUT_AVAILABLE}" == "true" ]]; then
|
||||||
_KUBE_PS1_FG_CODE="$(tput setaf "${_KUBE_PS1_FG_CODE}")"
|
_KUBE_PS1_FG_CODE="$(tput setaf "${_KUBE_PS1_FG_CODE}")"
|
||||||
elif [[ $_KUBE_PS1_FG_CODE -ge 0 ]] && [[ $_KUBE_PS1_FG_CODE -le 255 ]]; then
|
elif [[ $_KUBE_PS1_FG_CODE -ge 0 ]] && [[ $_KUBE_PS1_FG_CODE -le 255 ]]; then
|
||||||
_KUBE_PS1_FG_CODE=$'\033'"[38;5;${_KUBE_PS1_FG_CODE}m"
|
_KUBE_PS1_FG_CODE="\033[38;5;${_KUBE_PS1_FG_CODE}m"
|
||||||
else
|
else
|
||||||
_KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}"
|
_KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}"
|
||||||
fi
|
fi
|
||||||
@@ -154,7 +154,7 @@ _kube_ps1_color_bg() {
|
|||||||
if [[ "${_KUBE_PS1_TPUT_AVAILABLE}" == "true" ]]; then
|
if [[ "${_KUBE_PS1_TPUT_AVAILABLE}" == "true" ]]; then
|
||||||
_KUBE_PS1_BG_CODE="$(tput setab "${_KUBE_PS1_BG_CODE}")"
|
_KUBE_PS1_BG_CODE="$(tput setab "${_KUBE_PS1_BG_CODE}")"
|
||||||
elif [[ $_KUBE_PS1_BG_CODE -ge 0 ]] && [[ $_KUBE_PS1_BG_CODE -le 255 ]]; then
|
elif [[ $_KUBE_PS1_BG_CODE -ge 0 ]] && [[ $_KUBE_PS1_BG_CODE -le 255 ]]; then
|
||||||
_KUBE_PS1_BG_CODE=$'\033'"[48;5;${_KUBE_PS1_BG_CODE}m"
|
_KUBE_PS1_BG_CODE="\033[48;5;${_KUBE_PS1_BG_CODE}m"
|
||||||
else
|
else
|
||||||
_KUBE_PS1_BG_CODE="${_KUBE_PS1_DEFAULT_BG}"
|
_KUBE_PS1_BG_CODE="${_KUBE_PS1_DEFAULT_BG}"
|
||||||
fi
|
fi
|
||||||
@@ -412,8 +412,6 @@ kube_ps1() {
|
|||||||
|
|
||||||
local KUBE_PS1
|
local KUBE_PS1
|
||||||
local KUBE_PS1_RESET_COLOR="${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_DEFAULT_FG}${_KUBE_PS1_CLOSE_ESC}"
|
local KUBE_PS1_RESET_COLOR="${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_DEFAULT_FG}${_KUBE_PS1_CLOSE_ESC}"
|
||||||
local ctx_color="${KUBE_PS1_CTX_COLOR-red}"
|
|
||||||
local ns_color="${KUBE_PS1_NS_COLOR-cyan}"
|
|
||||||
|
|
||||||
# Background Color
|
# Background Color
|
||||||
[[ -n "${KUBE_PS1_BG_COLOR}" ]] && KUBE_PS1+="$(_kube_ps1_color_bg "${KUBE_PS1_BG_COLOR}")"
|
[[ -n "${KUBE_PS1_BG_COLOR}" ]] && KUBE_PS1+="$(_kube_ps1_color_bg "${KUBE_PS1_BG_COLOR}")"
|
||||||
@@ -434,29 +432,22 @@ kube_ps1() {
|
|||||||
|
|
||||||
# Context
|
# Context
|
||||||
if [[ "${KUBE_PS1_CONTEXT_ENABLE}" == true ]]; then
|
if [[ "${KUBE_PS1_CONTEXT_ENABLE}" == true ]]; then
|
||||||
|
local ctx_color="${KUBE_PS1_CTX_COLOR:-red}"
|
||||||
|
|
||||||
# Allow custom function to override color based on context
|
# Allow custom function to override color based on context
|
||||||
if [[ -n "${KUBE_PS1_CTX_COLOR_FUNCTION}" ]]; then
|
if [[ -n "${KUBE_PS1_CTX_COLOR_FUNCTION}" ]]; then
|
||||||
ctx_color="$("${KUBE_PS1_CTX_COLOR_FUNCTION}" "${KUBE_PS1_CONTEXT}")"
|
ctx_color="$("${KUBE_PS1_CTX_COLOR_FUNCTION}" "${KUBE_PS1_CONTEXT}")"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n "${ctx_color}" ]]; then
|
KUBE_PS1+="$(_kube_ps1_color_fg "${ctx_color}")${KUBE_PS1_CONTEXT}${KUBE_PS1_RESET_COLOR}"
|
||||||
KUBE_PS1+="$(_kube_ps1_color_fg "${ctx_color}")${KUBE_PS1_CONTEXT}${KUBE_PS1_RESET_COLOR}"
|
|
||||||
else
|
|
||||||
KUBE_PS1+="${KUBE_PS1_CONTEXT}"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Namespace
|
# Namespace
|
||||||
if [[ "${KUBE_PS1_NS_ENABLE}" == true ]]; then
|
if [[ "${KUBE_PS1_NS_ENABLE}" == true ]]; then
|
||||||
if [[ -n "${KUBE_PS1_DIVIDER}" && "${KUBE_PS1_CONTEXT_ENABLE}" == true ]]; then
|
if [[ -n "${KUBE_PS1_DIVIDER}" ]] && [[ "${KUBE_PS1_CONTEXT_ENABLE}" == true ]]; then
|
||||||
KUBE_PS1+="${KUBE_PS1_DIVIDER}"
|
KUBE_PS1+="${KUBE_PS1_DIVIDER}"
|
||||||
fi
|
fi
|
||||||
|
KUBE_PS1+="$(_kube_ps1_color_fg "${KUBE_PS1_NS_COLOR:-cyan}")${KUBE_PS1_NAMESPACE}${KUBE_PS1_RESET_COLOR}"
|
||||||
if [[ -n "${ns_color}" ]]; then
|
|
||||||
KUBE_PS1+="$(_kube_ps1_color_fg "${ns_color}")${KUBE_PS1_NAMESPACE}${KUBE_PS1_RESET_COLOR}"
|
|
||||||
else
|
|
||||||
KUBE_PS1+="${KUBE_PS1_NAMESPACE}"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Suffix
|
# Suffix
|
||||||
@@ -469,5 +460,5 @@ kube_ps1() {
|
|||||||
# Close Background color if defined
|
# Close Background color if defined
|
||||||
[[ -n "${KUBE_PS1_BG_COLOR}" ]] && KUBE_PS1+="${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_DEFAULT_BG}${_KUBE_PS1_CLOSE_ESC}"
|
[[ -n "${KUBE_PS1_BG_COLOR}" ]] && KUBE_PS1+="${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_DEFAULT_BG}${_KUBE_PS1_CLOSE_ESC}"
|
||||||
|
|
||||||
printf '%s' "${KUBE_PS1}"
|
echo "${KUBE_PS1}"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ plugins=(... kubectl)
|
|||||||
| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig |
|
| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig |
|
||||||
| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig |
|
| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig |
|
||||||
| kccc | `kubectl config current-context` | Display the current-context |
|
| kccc | `kubectl config current-context` | Display the current-context |
|
||||||
| kcrc | `kubectl config rename-context` | Rename a context from the kubeconfig file |
|
|
||||||
| kcgc | `kubectl config get-contexts` | List of contexts available |
|
| kcgc | `kubectl config get-contexts` | List of contexts available |
|
||||||
| | | **General aliases** |
|
| | | **General aliases** |
|
||||||
| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector |
|
| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector |
|
||||||
@@ -131,7 +130,7 @@ plugins=(... kubectl)
|
|||||||
| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail |
|
| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail |
|
||||||
| kdelss | `kubectl delete statefulset` | Delete the statefulset |
|
| kdelss | `kubectl delete statefulset` | Delete the statefulset |
|
||||||
| ksss | `kubectl scale statefulset` | Scale a statefulset |
|
| ksss | `kubectl scale statefulset` | Scale a statefulset |
|
||||||
| krsss | `kubectl rollout status statefulset` | Check the rollout status of a statefulset |
|
| krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment |
|
||||||
| krrss | `kubectl rollout restart statefulset` | Rollout restart a statefulset |
|
| krrss | `kubectl rollout restart statefulset` | Rollout restart a statefulset |
|
||||||
| | | **Service Accounts management** |
|
| | | **Service Accounts management** |
|
||||||
| kdsa | `kubectl describe sa` | Describe a service account in details |
|
| kdsa | `kubectl describe sa` | Describe a service account in details |
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._kubectl"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_kubectl"
|
||||||
zf_mv -f -- =( kubectl completion zsh 2> /dev/null ) "$ZSH_CACHE_DIR/completions/_kubectl"
|
zf_mv -f -- =( kubectl completion zsh 2> /dev/null ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|
||||||
# This command is used a LOT both below and in daily life
|
# This command is used a LOT both below and in daily life
|
||||||
@@ -36,7 +36,6 @@ alias kcuc='kubectl config use-context'
|
|||||||
alias kcsc='kubectl config set-context'
|
alias kcsc='kubectl config set-context'
|
||||||
alias kcdc='kubectl config delete-context'
|
alias kcdc='kubectl config delete-context'
|
||||||
alias kccc='kubectl config current-context'
|
alias kccc='kubectl config current-context'
|
||||||
alias kcrc='kubectl config rename-context'
|
|
||||||
|
|
||||||
# List all contexts
|
# List all contexts
|
||||||
alias kcgc='kubectl config get-contexts'
|
alias kcgc='kubectl config get-contexts'
|
||||||
|
|||||||
@@ -12,6 +12,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._minikube"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_minikube"
|
||||||
zf_mv -f -- =( minikube completion zsh ) "$ZSH_CACHE_DIR/completions/_minikube"
|
zf_mv -f -- =( minikube completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -21,6 +21,6 @@ fi
|
|||||||
# Generate and load mise completion
|
# Generate and load mise completion
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._mise"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_mise"
|
||||||
zf_mv -f -- =( mise completion zsh ) "$ZSH_CACHE_DIR/completions/_mise"
|
zf_mv -f -- =( mise completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
+2
-2
@@ -157,13 +157,13 @@ case $state in
|
|||||||
'*::file:_files'
|
'*::file:_files'
|
||||||
;;
|
;;
|
||||||
(test)
|
(test)
|
||||||
_path_files -X "All tests" -g "test/**/*_test.exs" -g "apps/*/test/**/*_test.exs"
|
_files
|
||||||
;;
|
;;
|
||||||
(test.watch)
|
(test.watch)
|
||||||
_files
|
_files
|
||||||
;;
|
;;
|
||||||
(run)
|
(run)
|
||||||
_files -g "*.(exs|ex)"
|
_files
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._molecule"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_molecule"
|
||||||
zf_mv -f -- =( _MOLECULE_COMPLETE=zsh_source molecule ) "$ZSH_CACHE_DIR/completions/_molecule"
|
zf_mv -f -- =( _MOLECULE_COMPLETE=zsh_source molecule ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|
||||||
# Alias
|
# Alias
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._atlas"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_atlas"
|
||||||
zf_mv -f -- =( atlas completion zsh ) "$ZSH_CACHE_DIR/completions/_atlas"
|
zf_mv -f -- =( atlas completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ if (( $+commands[nsc] )); then
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._nsc"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_nsc"
|
||||||
zf_mv -f -- =( nsc completion zsh ) "$ZSH_CACHE_DIR/completions/_nsc"
|
zf_mv -f -- =( nsc completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ if (( $+commands[nats] )); then
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._nats"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_nats"
|
||||||
zf_mv -f -- =( nats --completion-script-zsh ) "$ZSH_CACHE_DIR/completions/_nats"
|
zf_mv -f -- =( nats --completion-script-zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._ngrok"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_ngrok"
|
||||||
zf_mv -f -- =( ngrok completion zsh ) "$ZSH_CACHE_DIR/completions/_ngrok"
|
zf_mv -f -- =( ngrok completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -19,6 +19,4 @@ Provided aliases:
|
|||||||
- `ot`: generates a MFA code based on the given key and copies it to the clipboard
|
- `ot`: generates a MFA code based on the given key and copies it to the clipboard
|
||||||
(on Linux it relies on xsel, on MacOS X it uses pbcopy instead).
|
(on Linux it relies on xsel, on MacOS X it uses pbcopy instead).
|
||||||
|
|
||||||
The plugin stores its internal files in `$OTP_HOME`, which can be set in your zshrc.
|
The plugin uses `$HOME/.otp` to store its internal files.
|
||||||
If `$OTP_HOME` is not set it defaults to either `$HOME/.otp` or `$XDG_DATA_HOME/otp`,
|
|
||||||
depending on whether `~/.otp` already exists, or whether `$XDG_DATA_HOME` is set.
|
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
if [[ -z "$OTP_HOME" ]]; then
|
export OTP_HOME=~/.otp
|
||||||
if [[ ! -d "$HOME/.otp" ]] && [[ -n "$XDG_DATA_HOME" ]]; then
|
|
||||||
export OTP_HOME="$XDG_DATA_HOME/otp"
|
|
||||||
else
|
|
||||||
export OTP_HOME=~/.otp
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
mkdir -p $OTP_HOME
|
mkdir -p $OTP_HOME
|
||||||
|
|
||||||
function ot () {
|
function ot () {
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._pass-cli"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_pass-cli"
|
||||||
zf_mv -f -- =( pass-cli completions zsh ) "$ZSH_CACHE_DIR/completions/_pass-cli"
|
zf_mv -f -- =( pass-cli completions zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ else
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._pipenv"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_pipenv"
|
||||||
zf_mv -f -- =( _PIPENV_COMPLETE=zsh_source pipenv ) "$ZSH_CACHE_DIR/completions/_pipenv"
|
zf_mv -f -- =( _PIPENV_COMPLETE=zsh_source pipenv ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -23,16 +23,6 @@ plugins=(... podman)
|
|||||||
| pirm | `podman image rm` | Remove one or more images |
|
| pirm | `podman image rm` | Remove one or more images |
|
||||||
| pit | `podman image tag` | Add a name and tag to a particular image |
|
| pit | `podman image tag` | Add a name and tag to a particular image |
|
||||||
| plo | `podman container logs` | Fetch the logs of a podman container |
|
| plo | `podman container logs` | Fetch the logs of a podman container |
|
||||||
| pmif | `podman machine info` | Display machine host info |
|
|
||||||
| pmit | `podman machine init` | Initialize a virtual machine |
|
|
||||||
| pmis | `podman machine inspect` | Inspect an existing machine |
|
|
||||||
| pml | `podman machine list` | List machines |
|
|
||||||
| pmo | `podman machine os` | Manage a Podman virtual machine's OS |
|
|
||||||
| pmrm | `podman machine rm` | Remove an existing machine |
|
|
||||||
| pms | `podman machine set` | Set a virtual machine setting |
|
|
||||||
| pmss | `podman machine ssh` | SSH into an existing machine |
|
|
||||||
| pmst | `podman machine start` | Start an existing machine |
|
|
||||||
| pmsp | `podman machine stop` | Stop an existing machine |
|
|
||||||
| pnc | `podman network create` | Create a new network |
|
| pnc | `podman network create` | Create a new network |
|
||||||
| pncn | `podman network connect` | Connect a container to a network |
|
| pncn | `podman network connect` | Connect a container to a network |
|
||||||
| pndcn | `podman network disconnect` | Disconnect a container from a network |
|
| pndcn | `podman network disconnect` | Disconnect a container from a network |
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._podman"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_podman"
|
||||||
zf_mv -f -- =( podman completion zsh 2> /dev/null ) "$ZSH_CACHE_DIR/completions/_podman"
|
zf_mv -f -- =( podman completion zsh 2> /dev/null ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|
||||||
alias pbl='podman build'
|
alias pbl='podman build'
|
||||||
@@ -26,16 +26,6 @@ alias pils='podman image ls'
|
|||||||
alias pipu='podman image push'
|
alias pipu='podman image push'
|
||||||
alias pirm='podman image rm'
|
alias pirm='podman image rm'
|
||||||
alias pit='podman image tag'
|
alias pit='podman image tag'
|
||||||
alias pmif='podman machine info'
|
|
||||||
alias pmit='podman machine init'
|
|
||||||
alias pmis='podman machine inspect'
|
|
||||||
alias pml='podman machine list'
|
|
||||||
alias pmo='podman machine os'
|
|
||||||
alias pmrm='podman machine rm'
|
|
||||||
alias pms='podman machine set'
|
|
||||||
alias pmss='podman machine ssh'
|
|
||||||
alias pmst='podman machine start'
|
|
||||||
alias pmsp='podman machine stop'
|
|
||||||
alias plo='podman container logs'
|
alias plo='podman container logs'
|
||||||
alias pnc='podman network create'
|
alias pnc='podman network create'
|
||||||
alias pncn='podman network connect'
|
alias pncn='podman network connect'
|
||||||
|
|||||||
@@ -41,6 +41,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._poetry"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_poetry"
|
||||||
zf_mv -f -- =( poetry completions zsh ) "$ZSH_CACHE_DIR/completions/_poetry"
|
zf_mv -f -- =( poetry completions zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._procs"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_procs"
|
||||||
autoload -Uz is-at-least
|
autoload -Uz is-at-least
|
||||||
local _version=$(procs --version)
|
local _version=$(procs --version)
|
||||||
zf_mv -f -- =(
|
zf_mv -f -- =(
|
||||||
@@ -21,5 +21,5 @@ zmodload -F zsh/files b:zf_mv
|
|||||||
else
|
else
|
||||||
procs --completion-out zsh
|
procs --completion-out zsh
|
||||||
fi
|
fi
|
||||||
) "$ZSH_CACHE_DIR/completions/_procs"
|
) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._pulumi"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_pulumi"
|
||||||
zf_mv -f -- =( pulumi gen-completion zsh ) "$ZSH_CACHE_DIR/completions/_pulumi"
|
zf_mv -f -- =( pulumi gen-completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|
||||||
# Aliases
|
# Aliases
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._qodana"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_qodana"
|
||||||
zf_mv -f -- =( qodana completion zsh ) "$ZSH_CACHE_DIR/completions/_qodana"
|
zf_mv -f -- =( qodana completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ function rdsl() { _rails_db_command db:schema:load "$@" }
|
|||||||
|
|
||||||
# legacy stuff
|
# legacy stuff
|
||||||
alias sc='ruby script/console'
|
alias sc='ruby script/console'
|
||||||
|
alias sd='ruby script/destroy'
|
||||||
alias sd='ruby script/server --debugger'
|
alias sd='ruby script/server --debugger'
|
||||||
alias sg='ruby script/generate'
|
alias sg='ruby script/generate'
|
||||||
alias sp='ruby script/plugin'
|
alias sp='ruby script/plugin'
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._rbw"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_rbw"
|
||||||
zf_mv -f -- =( rbw gen-completions zsh ) "$ZSH_CACHE_DIR/completions/_rbw"
|
zf_mv -f -- =( rbw gen-completions zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|
||||||
# rbwpw function copies the password of a service to the clipboard
|
# rbwpw function copies the password of a service to the clipboard
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._rclone"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_rclone"
|
||||||
zf_mv -f -- =( rclone completion zsh - ) "$ZSH_CACHE_DIR/completions/_rclone"
|
zf_mv -f -- =( rclone completion zsh - ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -22,6 +22,6 @@ fi
|
|||||||
# Overwrites the file each time as completions might change with ruff versions.
|
# Overwrites the file each time as completions might change with ruff versions.
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._ruff"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_ruff"
|
||||||
zf_mv -f -- =( ruff generate-shell-completion zsh ) "$ZSH_CACHE_DIR/completions/_ruff"
|
zf_mv -f -- =( ruff generate-shell-completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ fi
|
|||||||
# Generate completion files in the background
|
# Generate completion files in the background
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._rustup"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_rustup"
|
||||||
zf_mv -f -- =( rustup completions zsh ) "$ZSH_CACHE_DIR/completions/_rustup"
|
zf_mv -f -- =( rustup completions zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
cat >| "$ZSH_CACHE_DIR/completions/_cargo" <<'EOF'
|
cat >| "$ZSH_CACHE_DIR/completions/_cargo" <<'EOF'
|
||||||
#compdef cargo
|
#compdef cargo
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
# Load bracketed-paste-magic if zsh version is >= 5.1
|
# Load bracketed-paste-magic if zsh version is >= 5.1
|
||||||
autoload -Uz is-at-least
|
autoload -Uz is-at-least
|
||||||
if is-at-least 5.1; then
|
if is-at-least 5.1; then
|
||||||
|
set zle_bracketed_paste # Explicitly restore this zsh default
|
||||||
autoload -Uz bracketed-paste-magic
|
autoload -Uz bracketed-paste-magic
|
||||||
zle -N bracketed-paste bracketed-paste-magic
|
zle -N bracketed-paste bracketed-paste-magic
|
||||||
return ### The rest of this file is NOT executed on zsh version >= 5.1 ###
|
return ### The rest of this file is NOT executed on zsh version >= 5.1 ###
|
||||||
|
|||||||
@@ -34,8 +34,6 @@ if [[ "$TERM" == screen* ]]; then
|
|||||||
# tell GNU screen what the tab window title ($1) and the hardstatus($2) should be
|
# tell GNU screen what the tab window title ($1) and the hardstatus($2) should be
|
||||||
function screen_set()
|
function screen_set()
|
||||||
{
|
{
|
||||||
[[ "${DISABLE_AUTO_TITLE:-}" != true ]] || return 0
|
|
||||||
|
|
||||||
# set the tab window title (%t) for screen
|
# set the tab window title (%t) for screen
|
||||||
print -nR $'\033k'$1$'\033'\\\
|
print -nR $'\033k'$1$'\033'\\\
|
||||||
|
|
||||||
|
|||||||
@@ -1,112 +0,0 @@
|
|||||||
# Shopify CLI plugin
|
|
||||||
|
|
||||||
This plugin adds aliases, helper functions and completion for the
|
|
||||||
[Shopify CLI](https://shopify.dev/docs/api/shopify-cli).
|
|
||||||
|
|
||||||
To use it, add `shopify` to the plugins array in your zshrc file:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
plugins=(... shopify)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Requirements
|
|
||||||
|
|
||||||
[Shopify CLI](https://shopify.dev/docs/api/shopify-cli) 4.0 or newer, installed
|
|
||||||
and on your `PATH`. The plugin does nothing if it is not:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
npm install -g @shopify/cli
|
|
||||||
# or
|
|
||||||
brew tap shopify/shopify && brew install shopify-cli
|
|
||||||
```
|
|
||||||
|
|
||||||
## Aliases
|
|
||||||
|
|
||||||
| Alias | Command | Description |
|
|
||||||
| :----- | :-------- | :--------------------- |
|
|
||||||
| `shop` | `shopify` | The Shopify CLI itself |
|
|
||||||
|
|
||||||
## Functions
|
|
||||||
|
|
||||||
| Function | Description |
|
|
||||||
| :------------- | :--------------------------------------------------------------------------------- |
|
|
||||||
| `shopd` | Runs `theme dev`, `app dev` or `hydrogen dev`, whichever fits the current project |
|
|
||||||
| `shopi` | Shows what the current project is connected to |
|
|
||||||
| `shopify_here` | Prints the kind of Shopify project you are in and the commands worth running in it |
|
|
||||||
| `shopify` | Wraps the CLI to confirm before irreversible commands. See Settings |
|
|
||||||
|
|
||||||
`shopd` and `shopi` work out which topic applies by looking at the project you
|
|
||||||
are standing in, so you do not have to remember whether this directory is a
|
|
||||||
theme, an app or a Hydrogen storefront. They complete like the command they
|
|
||||||
stand in for, so in a theme `shopd --<TAB>` offers the flags of
|
|
||||||
`shopify theme dev`.
|
|
||||||
|
|
||||||
## Completion
|
|
||||||
|
|
||||||
Every command completes with a description of what it does, at every level, and
|
|
||||||
so do their flags, short forms and allowed values. `--environment` completes
|
|
||||||
from the `[environments.*]` sections of your local `shopify.theme.toml` or
|
|
||||||
`shopify.app.toml`.
|
|
||||||
|
|
||||||
The Shopify CLI ships no completion generator of its own, so `_shopify` is
|
|
||||||
generated from `shopify commands --json` and kept in this repository. It targets
|
|
||||||
Shopify CLI 4.x.
|
|
||||||
|
|
||||||
## Settings
|
|
||||||
|
|
||||||
Set these with `zstyle` in your zshrc, before Oh My Zsh is sourced.
|
|
||||||
|
|
||||||
### Confirming destructive commands
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
zstyle ':omz:plugins:shopify' confirm-destructive no
|
|
||||||
```
|
|
||||||
|
|
||||||
By default the plugin asks for confirmation before three irreversible
|
|
||||||
operations:
|
|
||||||
|
|
||||||
- `shopify theme push` with `--live`/`-l` or `--publish`/`-p`, which overwrites
|
|
||||||
or publishes the live storefront
|
|
||||||
- `shopify theme delete`, which the CLI's own help describes as impossible to
|
|
||||||
undo
|
|
||||||
- `shopify app deploy --allow-deletes`, which can permanently remove extensions
|
|
||||||
|
|
||||||
Nothing else is intercepted, and the prompt is skipped when the command already
|
|
||||||
carries `--force`/`-f` or when stdin is not a terminal, so scripts, pipelines
|
|
||||||
and CI are unaffected. Set the style to `no` to turn the prompt off entirely.
|
|
||||||
|
|
||||||
### Completing theme IDs
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
zstyle ':omz:plugins:shopify' dynamic-theme-completion yes
|
|
||||||
```
|
|
||||||
|
|
||||||
Off by default. When enabled, `--theme` is completed from
|
|
||||||
`shopify theme list --json`, showing each theme's name and role next to its ID
|
|
||||||
instead of making you copy IDs by hand. It is opt-in because it runs the CLI and
|
|
||||||
makes a network call when you press <kbd>Tab</kbd>, and because it needs you to
|
|
||||||
be authenticated. Results are cached for five minutes.
|
|
||||||
|
|
||||||
### Disabling the aliases
|
|
||||||
|
|
||||||
This works for every Oh My Zsh plugin:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
zstyle ':omz:plugins:shopify' aliases no
|
|
||||||
```
|
|
||||||
|
|
||||||
## Caveats
|
|
||||||
|
|
||||||
- `shopify` is a shell function here. Run `command shopify` to reach the binary
|
|
||||||
directly.
|
|
||||||
- When a project has its own copy of the CLI in `node_modules/.bin/shopify`,
|
|
||||||
that one is used in preference to the global install. App and Hydrogen
|
|
||||||
projects normally pin the CLI in `package.json`, and running a different
|
|
||||||
global version against them is a common source of confusing errors.
|
|
||||||
- `--password` and `--store-password` are unrelated, and you often need both.
|
|
||||||
`--password` is the CLI's own authentication token, from the Theme Access app
|
|
||||||
or the Admin API. `--store-password` is the password for a
|
|
||||||
password-protected storefront.
|
|
||||||
- `shopify theme push` deletes remote files that are missing locally, and
|
|
||||||
`shopify theme pull` deletes local files that are missing remotely, unless you
|
|
||||||
pass `--nodelete`/`-n`. The plugin does not prompt for these.
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,203 +0,0 @@
|
|||||||
# Shopify CLI: completion, aliases and guard rails.
|
|
||||||
# https://shopify.dev/docs/api/shopify-cli
|
|
||||||
|
|
||||||
if (( ! $+commands[shopify] )); then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prefer a project-local CLI: app and Hydrogen projects pin their own version.
|
|
||||||
# The walk stops at $HOME so a stray ~/node_modules cannot hijack every project.
|
|
||||||
# $commands avoids resolving back to the wrapper function below.
|
|
||||||
function _shopify_bin() {
|
|
||||||
local dir="$PWD"
|
|
||||||
while [[ -n "$dir" && "$dir" != "/" && "$dir" != "$HOME" ]]; do
|
|
||||||
if [[ -x "$dir/node_modules/.bin/shopify" ]]; then
|
|
||||||
print -r -- "$dir/node_modules/.bin/shopify"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
dir="${dir:h}"
|
|
||||||
done
|
|
||||||
print -r -- "$commands[shopify]"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Print the project type in $PWD: hydrogen, app or theme.
|
|
||||||
# Hydrogen is tested first because those projects usually carry a
|
|
||||||
# shopify.app.toml too. shopify.theme.toml is not a theme marker: it only
|
|
||||||
# exists once environments are configured.
|
|
||||||
function _shopify_project_type() {
|
|
||||||
local dir="$PWD"
|
|
||||||
local -a app_config
|
|
||||||
|
|
||||||
while [[ -n "$dir" && "$dir" != "/" && "$dir" != "$HOME" ]]; do
|
|
||||||
if [[ -x "$dir/node_modules/.bin/h2" ]] ||
|
|
||||||
[[ -r "$dir/package.json" && "$(<"$dir/package.json")" == *'"@shopify/hydrogen"'* ]]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
app_config=("$dir"/shopify.app*.toml(N))
|
|
||||||
if (( $#app_config )); then
|
|
||||||
print -r -- app
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -f "$dir/config/settings_schema.json" && -f "$dir/layout/theme.liquid" ]]; then
|
|
||||||
print -r -- theme
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
dir="${dir:h}"
|
|
||||||
done
|
|
||||||
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Does this invocation need confirming? Sets REPLY to the reason.
|
|
||||||
function _shopify_is_destructive() {
|
|
||||||
zstyle -T ':omz:plugins:shopify' confirm-destructive || return 1
|
|
||||||
|
|
||||||
# Nobody to answer: CI and pipelines are unaffected.
|
|
||||||
[[ -t 0 ]] || return 1
|
|
||||||
|
|
||||||
local topic="$1" subcommand="$2" arg
|
|
||||||
local -a long
|
|
||||||
local short=""
|
|
||||||
|
|
||||||
# Short flags can be bundled, so collect them as characters: -al counts as l.
|
|
||||||
for arg in "${@[3,-1]}"; do
|
|
||||||
[[ "$arg" == "--" ]] && break
|
|
||||||
case "$arg" in
|
|
||||||
--*) long+=("${arg%%=*}") ;;
|
|
||||||
-?*) short+="${${arg%%=*}#-}" ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# An explicit force flag states the intent already.
|
|
||||||
if (( long[(I)--force] )) || [[ "$short" == *f* ]]; then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$topic $subcommand" in
|
|
||||||
"theme push")
|
|
||||||
if (( long[(I)--live] || long[(I)--publish] )) || [[ "$short" == *[lp]* ]]; then
|
|
||||||
REPLY="this overwrites or publishes the live theme on the storefront."
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
"theme delete")
|
|
||||||
REPLY="deleting a theme cannot be undone."
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
"app deploy")
|
|
||||||
if (( long[(I)--allow-deletes] )); then
|
|
||||||
REPLY="this can permanently remove app extensions."
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Adds a confirmation prompt before irreversible operations. Everything else
|
|
||||||
# passes straight through, so `theme dev` stays interactive and pipes stay clean.
|
|
||||||
function shopify() {
|
|
||||||
local REPLY
|
|
||||||
if _shopify_is_destructive "$@"; then
|
|
||||||
print -u2 -- "shopify: $REPLY"
|
|
||||||
if ! read -q "?Continue? [y/N] "; then
|
|
||||||
print -u2 -- ""
|
|
||||||
return 130
|
|
||||||
fi
|
|
||||||
print -u2 -- ""
|
|
||||||
fi
|
|
||||||
|
|
||||||
"$(_shopify_bin)" "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Print the commands worth running in the current directory.
|
|
||||||
function shopify_here() {
|
|
||||||
local project_type
|
|
||||||
project_type="$(_shopify_project_type)"
|
|
||||||
|
|
||||||
case "$project_type" in
|
|
||||||
theme)
|
|
||||||
print -- "Shopify theme project."
|
|
||||||
print -- " shopify theme dev Preview locally with live reload"
|
|
||||||
print -- " shopify theme check Lint the theme"
|
|
||||||
print -- " shopify theme list List the themes on the store"
|
|
||||||
print -- " shopify theme pull Download a remote theme into this folder"
|
|
||||||
print -- " shopify theme push Upload this folder to a remote theme"
|
|
||||||
;;
|
|
||||||
app)
|
|
||||||
print -- "Shopify app project."
|
|
||||||
print -- " shopify app dev Run the app against a development store"
|
|
||||||
print -- " shopify app info Show how the app is configured"
|
|
||||||
print -- " shopify app deploy Deploy the app and its extensions"
|
|
||||||
print -- " shopify app logs Stream app logs"
|
|
||||||
;;
|
|
||||||
hydrogen)
|
|
||||||
print -- "Hydrogen storefront."
|
|
||||||
print -- " shopify hydrogen dev Run the storefront locally"
|
|
||||||
print -- " shopify hydrogen build Build for production"
|
|
||||||
print -- " shopify hydrogen deploy Deploy to Oxygen"
|
|
||||||
print -- " shopify hydrogen link Link this project to a storefront"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
print -- "No Shopify project found here."
|
|
||||||
print -- " shopify theme init Start a new theme"
|
|
||||||
print -- " shopify app init Start a new app"
|
|
||||||
print -- " shopify hydrogen init Start a new Hydrogen storefront"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
# Run the dev server for whichever kind of project this is.
|
|
||||||
function shopd() {
|
|
||||||
local project_type
|
|
||||||
if ! project_type="$(_shopify_project_type)"; then
|
|
||||||
print -u2 -- "shopd: not inside a Shopify theme, app or Hydrogen project."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
shopify "$project_type" dev "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Show what the current project is connected to.
|
|
||||||
function shopi() {
|
|
||||||
local project_type
|
|
||||||
if ! project_type="$(_shopify_project_type)"; then
|
|
||||||
print -u2 -- "shopi: not inside a Shopify theme, app or Hydrogen project."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
case "$project_type" in
|
|
||||||
hydrogen) shopify hydrogen list "$@" ;;
|
|
||||||
*) shopify "$project_type" info "$@" ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
# Complete the helpers like the commands they stand in for.
|
|
||||||
if (( $+functions[compdef] )); then
|
|
||||||
_shopd() {
|
|
||||||
local project_type
|
|
||||||
project_type="$(_shopify_project_type)" || return 1
|
|
||||||
words=(shopify "$project_type" dev ${words[2,-1]})
|
|
||||||
(( CURRENT += 2 ))
|
|
||||||
_shopify
|
|
||||||
}
|
|
||||||
|
|
||||||
_shopi() {
|
|
||||||
local project_type
|
|
||||||
project_type="$(_shopify_project_type)" || return 1
|
|
||||||
if [[ "$project_type" == hydrogen ]]; then
|
|
||||||
words=(shopify hydrogen list ${words[2,-1]})
|
|
||||||
else
|
|
||||||
words=(shopify "$project_type" info ${words[2,-1]})
|
|
||||||
fi
|
|
||||||
(( CURRENT += 2 ))
|
|
||||||
_shopify
|
|
||||||
}
|
|
||||||
|
|
||||||
compdef _shopd shopd
|
|
||||||
compdef _shopi shopi
|
|
||||||
fi
|
|
||||||
|
|
||||||
alias shop='shopify'
|
|
||||||
@@ -14,8 +14,8 @@ function install_autocompletion {
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._$1"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_$1"
|
||||||
zf_mv -f -- =( $1 completion zsh ) "$ZSH_CACHE_DIR/completions/_$1"
|
zf_mv -f -- =( $1 completion zsh ) "$TMPPREFIX"
|
||||||
} "$1" &|
|
} "$1" &|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._skaffold"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_skaffold"
|
||||||
zf_mv -f -- =( skaffold completion zsh ) "$ZSH_CACHE_DIR/completions/_skaffold"
|
zf_mv -f -- =( skaffold completion zsh ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -21,18 +21,6 @@ To enable **agent forwarding support** add the following to your zshrc file:
|
|||||||
zstyle :omz:plugins:ssh-agent agent-forwarding yes
|
zstyle :omz:plugins:ssh-agent agent-forwarding yes
|
||||||
```
|
```
|
||||||
|
|
||||||
### `honor-existing`
|
|
||||||
|
|
||||||
If your session already provides an ssh-agent — a desktop keyring, `gpg-agent`,
|
|
||||||
KeePassXC, or an agent forwarded over SSH — the plugin normally ignores it and
|
|
||||||
starts one of its own, which leaves you with two agents. Set this to reuse the
|
|
||||||
running agent instead, and only start a new one when `$SSH_AUTH_SOCK` is empty
|
|
||||||
or does not answer:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
zstyle :omz:plugins:ssh-agent honor-existing yes
|
|
||||||
```
|
|
||||||
|
|
||||||
### `helper`
|
### `helper`
|
||||||
|
|
||||||
To set an **external helper** to ask for the passwords and possibly store
|
To set an **external helper** to ask for the passwords and possibly store
|
||||||
|
|||||||
@@ -1,28 +1,16 @@
|
|||||||
# Get the filename to store/lookup the environment from
|
# Get the filename to store/lookup the environment from
|
||||||
ssh_env_cache="$HOME/.ssh/environment-$SHORT_HOST"
|
ssh_env_cache="$HOME/.ssh/environment-$SHORT_HOST"
|
||||||
|
|
||||||
# Test if $SSH_AUTH_SOCK points at a listening agent
|
|
||||||
function _is_agent_running() {
|
|
||||||
local REPLY
|
|
||||||
[[ -n "$SSH_AUTH_SOCK" && -S "$SSH_AUTH_SOCK" ]] || return 1
|
|
||||||
zmodload zsh/net/socket 2>/dev/null || return 1
|
|
||||||
zsocket "$SSH_AUTH_SOCK" 2>/dev/null || return 1
|
|
||||||
exec {REPLY}>&- # close the probe connection
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
function _start_agent() {
|
function _start_agent() {
|
||||||
# Reuse an agent the session already provides, if enabled
|
|
||||||
if zstyle -t :omz:plugins:ssh-agent honor-existing && _is_agent_running; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if ssh-agent is already running
|
# Check if ssh-agent is already running
|
||||||
if [[ -f "$ssh_env_cache" ]]; then
|
if [[ -f "$ssh_env_cache" ]]; then
|
||||||
. "$ssh_env_cache" > /dev/null
|
. "$ssh_env_cache" > /dev/null
|
||||||
|
|
||||||
# Test if $SSH_AUTH_SOCK is visible
|
# Test if $SSH_AUTH_SOCK is visible
|
||||||
_is_agent_running && return 0
|
zmodload zsh/net/socket
|
||||||
|
if [[ -S "$SSH_AUTH_SOCK" ]] && zsocket "$SSH_AUTH_SOCK" 2>/dev/null; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -d "$HOME/.ssh" ]]; then
|
if [[ ! -d "$HOME/.ssh" ]]; then
|
||||||
@@ -136,4 +124,4 @@ if ! zstyle -t :omz:plugins:ssh-agent lazy; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
unset agent_forwarding ssh_env_cache
|
unset agent_forwarding ssh_env_cache
|
||||||
unfunction _start_agent _add_identities _is_agent_running
|
unfunction _start_agent _add_identities
|
||||||
|
|||||||
@@ -12,6 +12,6 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/._stripe"
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_stripe"
|
||||||
zf_mv -f -- =( stripe completion --shell zsh --write-to-stdout ) "$ZSH_CACHE_DIR/completions/_stripe"
|
zf_mv -f -- =( stripe completion --shell zsh --write-to-stdout ) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ Related: [#9798](https://github.com/ohmyzsh/ohmyzsh/pull/9798).
|
|||||||
| Alias | Commands | Description |
|
| Alias | Commands | Description |
|
||||||
| ----- | ------------------- | ---------------------------------------- |
|
| ----- | ------------------- | ---------------------------------------- |
|
||||||
| zar | `sudo zypper ar` | add a repository |
|
| zar | `sudo zypper ar` | add a repository |
|
||||||
|
| zcl | `sudo zypper clean` | clean cache |
|
||||||
| zlr | `zypper lr` | list repositories |
|
| zlr | `zypper lr` | list repositories |
|
||||||
| zmr | `sudo zypper mr` | modify repositories |
|
| zmr | `sudo zypper mr` | modify repositories |
|
||||||
| znr | `sudo zypper nr` | rename repositories (for the alias only) |
|
| znr | `sudo zypper nr` | rename repositories (for the alias only) |
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ alias zwp='zypper --no-refresh wp'
|
|||||||
|
|
||||||
#Repositories commands
|
#Repositories commands
|
||||||
alias zar='sudo zypper ar'
|
alias zar='sudo zypper ar'
|
||||||
|
alias zcl='sudo zypper clean'
|
||||||
alias zlr='zypper lr'
|
alias zlr='zypper lr'
|
||||||
alias zmr='sudo zypper mr'
|
alias zmr='sudo zypper mr'
|
||||||
alias znr='sudo zypper nr'
|
alias znr='sudo zypper nr'
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ plugins=(... systemadmin)
|
|||||||
| mkdir | `mkdir -pv` | Automatically create parent directories and display verbose output |
|
| mkdir | `mkdir -pv` | Automatically create parent directories and display verbose output |
|
||||||
| psmem | `ps -e -orss=,args= \| sort -b -k1 -nr` | Display the processes using the most memory |
|
| psmem | `ps -e -orss=,args= \| sort -b -k1 -nr` | Display the processes using the most memory |
|
||||||
| psmem10 | `ps -e -orss=,args= \| sort -b -k1 -nr \| head -n 10` | Display the top 10 processes using the most memory |
|
| psmem10 | `ps -e -orss=,args= \| sort -b -k1 -nr \| head -n 10` | Display the top 10 processes using the most memory |
|
||||||
| pszombie| `ps -eo user,pid,ppid,state,comm \| awk '$4=="Z"'` | List zombie processes with ownership and parent process details |
|
|
||||||
| pscpu | `ps -e -o pcpu,cpu,nice,state,cputime,args \|sort -k1 -nr` | Display the top processes using the most CPU |
|
| pscpu | `ps -e -o pcpu,cpu,nice,state,cputime,args \|sort -k1 -nr` | Display the top processes using the most CPU |
|
||||||
| pscpu10 | `ps -e -o pcpu,cpu,nice,state,cputime,args \|sort -k1 -nr \| head -n 10` | Display the top 10 processes using the most CPU |
|
| pscpu10 | `ps -e -o pcpu,cpu,nice,state,cputime,args \|sort -k1 -nr \| head -n 10` | Display the top 10 processes using the most CPU |
|
||||||
| hist10 | `print -l ${(o)history%% *} \| uniq -c \| sort -nr \| head -n 10` | Display the top 10 most used commands in the history |
|
| hist10 | `print -l ${(o)history%% *} \| uniq -c \| sort -nr \| head -n 10` | Display the top 10 most used commands in the history |
|
||||||
@@ -33,10 +32,10 @@ plugins=(... systemadmin)
|
|||||||
| killit | Kills any process that matches a regular expression passed to it |
|
| killit | Kills any process that matches a regular expression passed to it |
|
||||||
| tree | List contents of directories in a tree-like format (if tree isn't installed) |
|
| tree | List contents of directories in a tree-like format (if tree isn't installed) |
|
||||||
| sortcons | Sort connections by state |
|
| sortcons | Sort connections by state |
|
||||||
| con80 | View all connections on ports 80 and 443, or on the ports given as arguments (`con80 8080`) |
|
| con80 | View all 80 Port Connections |
|
||||||
| sortconip | On the connected IP sorted by the number of connections |
|
| sortconip | On the connected IP sorted by the number of connections |
|
||||||
| req20 | List the top 20 requests on ports 80 and 443, or on the ports given as arguments (`req20 8080`) |
|
| req20 | List the top 20 requests on port 80 |
|
||||||
| http20 | List the top 20 connections to ports 80 and 443 based on tcpdump data, or to the ports given as arguments |
|
| http20 | List the top 20 connections to port 80 based on tcpdump data |
|
||||||
| timewait20 | List the top 20 time_wait connections |
|
| timewait20 | List the top 20 time_wait connections |
|
||||||
| syn20 | List the top 20 SYN connections |
|
| syn20 | List the top 20 SYN connections |
|
||||||
| port_pro | Output all processes according to the port number |
|
| port_pro | Output all processes according to the port number |
|
||||||
@@ -49,4 +48,5 @@ plugins=(... systemadmin)
|
|||||||
| d0 | Delete 0 byte files recursively in the current directory or another if specified |
|
| d0 | Delete 0 byte files recursively in the current directory or another if specified |
|
||||||
| geteip | Gather information regarding an external IP address using [icanhazip.com](https://icanhazip.com) |
|
| geteip | Gather information regarding an external IP address using [icanhazip.com](https://icanhazip.com) |
|
||||||
| getip | Determine the local IP Address with `ip addr` or `ifconfig` |
|
| getip | Determine the local IP Address with `ip addr` or `ifconfig` |
|
||||||
|
| clrz | Clear zombie processes |
|
||||||
| conssec | Show number of concurrent connections per second based on nginx/access.log file or another log file if specified |
|
| conssec | Show number of concurrent connections per second based on nginx/access.log file or another log file if specified |
|
||||||
|
|||||||
@@ -28,8 +28,6 @@ alias mkdir='mkdir -pv'
|
|||||||
# get top process eating memory
|
# get top process eating memory
|
||||||
alias psmem='ps -e -orss=,args= | sort -b -k1 -nr'
|
alias psmem='ps -e -orss=,args= | sort -b -k1 -nr'
|
||||||
alias psmem10='ps -e -orss=,args= | sort -b -k1 -nr | head -n 10'
|
alias psmem10='ps -e -orss=,args= | sort -b -k1 -nr | head -n 10'
|
||||||
# list all zombie processes with ownership and parent process details
|
|
||||||
alias pszombie="ps -eo user,pid,ppid,state,comm | awk '\$4==\"Z\"'"
|
|
||||||
# get top process eating cpu if not work try execute : export LC_ALL='C'
|
# get top process eating cpu if not work try execute : export LC_ALL='C'
|
||||||
alias pscpu='ps -e -o pcpu,cpu,nice,state,cputime,args | sort -k1,1n -nr'
|
alias pscpu='ps -e -o pcpu,cpu,nice,state,cputime,args | sort -k1,1n -nr'
|
||||||
alias pscpu10='ps -e -o pcpu,cpu,nice,state,cputime,args | sort -k1,1n -nr | head -n 10'
|
alias pscpu10='ps -e -o pcpu,cpu,nice,state,cputime,args | sort -k1,1n -nr | head -n 10'
|
||||||
@@ -65,90 +63,60 @@ fi
|
|||||||
|
|
||||||
# Sort connection state
|
# Sort connection state
|
||||||
function sortcons() {
|
function sortcons() {
|
||||||
if (( $+commands[ss] )); then
|
{
|
||||||
LANG= ss -nat | awk 'NR > 1 {print $1}'
|
LANG= ss -nat | awk 'NR > 1 {print $1}' \
|
||||||
else
|
|| LANG= netstat -nat | awk 'NR > 2 {print $6}'
|
||||||
LANG= netstat -nat | awk 'NR > 2 {print $6}'
|
} | sort | uniq -c | sort -rn
|
||||||
fi | sort | uniq -c | sort -rn
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function _systemadmin_validate_ports() {
|
# View all 80 Port Connections
|
||||||
local port
|
|
||||||
for port in "$@"; do
|
|
||||||
if [[ $port != <0-65535> || ( $port == 0* && $port != 0 ) ]]; then
|
|
||||||
print -u2 "systemadmin: invalid port '$port' (expected 0 to 65535 without leading zeros)"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# View all connections on the given ports (default 80 and 443)
|
|
||||||
function con80() {
|
function con80() {
|
||||||
local -a ports=("$@")
|
{
|
||||||
(( $# )) || ports=(80 443)
|
LANG= ss -nat || LANG= netstat -nat
|
||||||
_systemadmin_validate_ports "${ports[@]}" || return
|
} | grep -E ":80[^0-9]" | wc -l
|
||||||
if (( $+commands[ss] )); then
|
|
||||||
LANG= ss -nat
|
|
||||||
else
|
|
||||||
LANG= netstat -nat
|
|
||||||
fi | grep -E ":(${(j:|:)ports})([[:space:]]|$)" | wc -l
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# On the connected IP sorted by the number of connections
|
# On the connected IP sorted by the number of connections
|
||||||
function sortconip() {
|
function sortconip() {
|
||||||
if (( $+commands[ss] )); then
|
{
|
||||||
LANG= ss -ntu | awk 'NR > 1 {print $6}'
|
LANG= ss -ntu | awk 'NR > 1 {print $6}' \
|
||||||
else
|
|| LANG= netstat -ntu | awk 'NR > 2 {print $5}'
|
||||||
LANG= netstat -ntu | awk 'NR > 2 {print $5}'
|
} | cut -d: -f1 | sort | uniq -c | sort -n
|
||||||
fi | cut -d: -f1 | sort | uniq -c | sort -n
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# top20 of Find the number of requests on the given ports (default 80 and 443)
|
# top20 of Find the number of requests on 80 port
|
||||||
function req20() {
|
function req20() {
|
||||||
local -a ports=("$@")
|
{
|
||||||
(( $# )) || ports=(80 443)
|
LANG= ss -tn | awk '$4 ~ /:80$/ {print $5}' \
|
||||||
_systemadmin_validate_ports "${ports[@]}" || return
|
|| LANG= netstat -tn | awk '$4 ~ /:80$/ {print $5}'
|
||||||
if (( $+commands[ss] )); then
|
} | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -n 20
|
||||||
LANG= ss -tn
|
|
||||||
else
|
|
||||||
LANG= netstat -tn
|
|
||||||
fi | awk -v ports="${(j:|:)ports}" '$4 ~ ":("ports")$" {print $5}' \
|
|
||||||
| awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -n 20
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# top20 of Using tcpdump to view access to the given ports (default 80 and 443)
|
# top20 of Using tcpdump port 80 access to view
|
||||||
function http20() {
|
function http20() {
|
||||||
local -a ports=("$@")
|
sudo tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | head -n 20
|
||||||
(( $# )) || ports=(80 443)
|
|
||||||
_systemadmin_validate_ports "${ports[@]}" || return
|
|
||||||
sudo tcpdump -i eth0 -tnn -c 1000 "dst port ${(j: or :)ports}" | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | head -n 20
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# top20 of Find time_wait connection
|
# top20 of Find time_wait connection
|
||||||
function timewait20() {
|
function timewait20() {
|
||||||
if (( $+commands[ss] )); then
|
{
|
||||||
LANG= ss -nat
|
LANG= ss -nat | awk 'NR > 1 && /TIME-WAIT/ {print $5}' \
|
||||||
else
|
|| LANG= netstat -nat | awk 'NR > 2 && /TIME_WAIT/ {print $5}'
|
||||||
LANG= netstat -nat
|
} | sort | uniq -c | sort -rn | head -n 20
|
||||||
fi | awk '/TIME[-_]WAIT/ {print $5}' | sort | uniq -c | sort -rn | head -n 20
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# top20 of Find SYN connection
|
# top20 of Find SYN connection
|
||||||
function syn20() {
|
function syn20() {
|
||||||
if (( $+commands[ss] )); then
|
{
|
||||||
LANG= ss -an
|
LANG= ss -an | awk '/SYN/ {print $5}' \
|
||||||
else
|
|| LANG= netstat -an | awk '/SYN/ {print $5}'
|
||||||
LANG= netstat -an
|
} | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -n20
|
||||||
fi | awk '/SYN/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -n20
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Printing process according to the port number
|
# Printing process according to the port number
|
||||||
function port_pro() {
|
function port_pro() {
|
||||||
if (( $+commands[ss] )); then
|
LANG= ss -ntlp | awk "NR > 1 && /:${1:-}/ {print \$6}" | sed 's/.*pid=\([^,]*\).*/\1/' \
|
||||||
LANG= ss -ntlp | awk "NR > 1 && /:${1:-}/ {print \$6}" | sed 's/.*pid=\([^,]*\).*/\1/'
|
|| LANG= netstat -ntlp | awk "NR > 2 && /:${1:-}/ {print \$7}" | cut -d/ -f1
|
||||||
else
|
|
||||||
LANG= netstat -ntlp | awk "NR > 2 && /:${1:-}/ {print \$7}" | cut -d/ -f1
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# top10 of gain access to the ip address
|
# top10 of gain access to the ip address
|
||||||
@@ -209,6 +177,11 @@ function getip() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Clear zombie processes
|
||||||
|
function clrz() {
|
||||||
|
ps -eal | awk '{ if ($2 == "Z") {print $4}}' | kill -9
|
||||||
|
}
|
||||||
|
|
||||||
# Second concurrent
|
# Second concurrent
|
||||||
function conssec() {
|
function conssec() {
|
||||||
awk '{if($9~/200|30|404/)COUNT[$4]++}END{for( a in COUNT) print a,COUNT[a]}' "$(retlog)" | sort -k 2 -nr | head -n10
|
awk '{if($9~/200|30|404/)COUNT[$4]++}END{for( a in COUNT) print a,COUNT[a]}' "$(retlog)" | sort -k 2 -nr | head -n10
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ plugins=(... systemd)
|
|||||||
| `sc-set-environment` | `sudo systemctl set-environment` | Set one or more systemd manager environment variables |
|
| `sc-set-environment` | `sudo systemctl set-environment` | Set one or more systemd manager environment variables |
|
||||||
| `sc-unset-environment` | `sudo systemctl unset-environment` | Unset one or more systemd manager environment variables |
|
| `sc-unset-environment` | `sudo systemctl unset-environment` | Unset one or more systemd manager environment variables |
|
||||||
| `sc-edit` | `sudo systemctl edit` | Edit a drop-in snippet or a whole replacement file with `--full` |
|
| `sc-edit` | `sudo systemctl edit` | Edit a drop-in snippet or a whole replacement file with `--full` |
|
||||||
| `sc-edit-full` | `sudo systemctl edit --full` | Edit the whole unit file instead of a drop-in snippet |
|
|
||||||
| `sc-enable-now` | `sudo systemctl enable --now` | Enable and start unit(s) |
|
| `sc-enable-now` | `sudo systemctl enable --now` | Enable and start unit(s) |
|
||||||
| `sc-disable-now` | `sudo systemctl disable --now` | Disable and stop unit(s) |
|
| `sc-disable-now` | `sudo systemctl disable --now` | Disable and stop unit(s) |
|
||||||
| `sc-mask-now` | `sudo systemctl mask --now` | Mask and stop unit(s) |
|
| `sc-mask-now` | `sudo systemctl mask --now` | Mask and stop unit(s) |
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user