mirror of
https://github.com/robbyrussell/oh-my-zsh.git
synced 2026-09-28 05:56:07 +02:00
Compare commits
22
Commits
@@ -16,7 +16,7 @@ jobs:
|
|||||||
contents: write # this is needed to push commits and branches
|
contents: write # this is needed to push commits and branches
|
||||||
steps:
|
steps:
|
||||||
- name: Harden the runner (Audit all outbound calls)
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
|
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
certifi==2026.7.22
|
certifi==2026.7.22
|
||||||
charset-normalizer==3.5.0
|
charset-normalizer==3.5.1
|
||||||
idna==3.18
|
idna==3.19
|
||||||
PyYAML==6.0.3
|
PyYAML==6.0.3
|
||||||
requests==2.34.2
|
requests==2.34.2
|
||||||
semver==3.0.4
|
semver==3.0.4
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
- macos-latest
|
- macos-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Harden the runner (Audit all outbound calls)
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
|
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ jobs:
|
|||||||
- test
|
- test
|
||||||
steps:
|
steps:
|
||||||
- name: Harden the runner (Audit all outbound calls)
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
|
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ jobs:
|
|||||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||||
steps:
|
steps:
|
||||||
- name: Harden the runner (Audit all outbound calls)
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
|
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ jobs:
|
|||||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||||
steps:
|
steps:
|
||||||
- name: Harden the runner (Audit all outbound calls)
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
|
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
- name: Authenticate as @ohmyzsh
|
- name: Authenticate as @ohmyzsh
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden the runner (Audit all outbound calls)
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
|
uses: step-security/harden-runner@05e31511f85b41b11d1cf0ef85d0992719546e2c # v2.21.0
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@@ -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@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
|
uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
|
||||||
with:
|
with:
|
||||||
sarif_file: results.sarif
|
sarif_file: results.sarif
|
||||||
|
|||||||
+1
-1
@@ -519,7 +519,7 @@ function _omz::plugin::load {
|
|||||||
# Check if it has completion to reload compinit
|
# Check if it has completion to reload compinit
|
||||||
local -a comp_files
|
local -a comp_files
|
||||||
comp_files=($base/_*(N))
|
comp_files=($base/_*(N))
|
||||||
has_completion=$(( $#comp_files > 0 ))
|
(( has_completion )) || has_completion=$(( $#comp_files > 0 ))
|
||||||
|
|
||||||
# Load the plugin
|
# Load the plugin
|
||||||
if [[ -f "$base/$plugin.plugin.zsh" ]]; then
|
if [[ -f "$base/$plugin.plugin.zsh" ]]; then
|
||||||
|
|||||||
+1
-1
@@ -271,7 +271,7 @@ function _omz_diag_dump_check_core_commands() {
|
|||||||
unfunction unhash unlimit unset unsetopt vared wait whence where which zcompile
|
unfunction unhash unlimit unset unsetopt vared wait whence where which zcompile
|
||||||
zle zmodload zparseopts zregexparse zstyle )
|
zle zmodload zparseopts zregexparse zstyle )
|
||||||
if is-at-least 5.1; then
|
if is-at-least 5.1; then
|
||||||
reserved_word+=( declare export integer float local readonly typeset )
|
reserved_words+=( declare export integer float local readonly typeset )
|
||||||
else
|
else
|
||||||
builtins+=( declare export integer float local readonly typeset )
|
builtins+=( declare export integer float local readonly typeset )
|
||||||
fi
|
fi
|
||||||
|
|||||||
+22
-11
@@ -39,16 +39,27 @@ function _omz_git_prompt_info() {
|
|||||||
echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${ref//\%/%%}${upstream//\%/%%}$(parse_git_dirty)${ZSH_THEME_GIT_PROMPT_SUFFIX}"
|
echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${ref//\%/%%}${upstream//\%/%%}$(parse_git_dirty)${ZSH_THEME_GIT_PROMPT_SUFFIX}"
|
||||||
}
|
}
|
||||||
|
|
||||||
function _omz_git_prompt_status() {
|
# Match an extended regular expression against a subject, forcing the C locale
|
||||||
# OHMYZSH-13330: avoid "regex matching error: illegal byte sequence".
|
# only for the duration of the call.
|
||||||
# zsh's "=~" operator delegates to the C library regex, which aborts with
|
#
|
||||||
# REG_ILLSEQ when the subject contains an invalid byte sequence under a
|
# OHMYZSH-13330: zsh's "=~" operator delegates to the C library regex, which
|
||||||
# multibyte locale (e.g. a filename with non-UTF-8 bytes in `git status`
|
# aborts with REG_ILLSEQ when the subject contains an invalid byte sequence
|
||||||
# output). Forcing the C locale makes every byte a valid character, so the
|
# under a multibyte locale (e.g. a filename with non-UTF-8 bytes in `git
|
||||||
# regex matching below never fails that way. `git status --porcelain` is
|
# status` output). Forcing the C locale makes every byte a valid character,
|
||||||
# locale-independent, so this does not change the parsed output.
|
# so the regex matching never fails that way. `git status --porcelain` is
|
||||||
|
# locale-independent, so this does not change the parsed output.
|
||||||
|
#
|
||||||
|
# OHMYZSH-13985: the locale must be scoped to this function and not set for
|
||||||
|
# the whole caller. Assigning LC_ALL makes zsh re-run setlocale() right away,
|
||||||
|
# so leaving it set while the rest of the caller runs breaks multibyte
|
||||||
|
# handling there — most visibly, `echo` refuses to expand Unicode escapes in
|
||||||
|
# theme prompt symbols ("character not in range").
|
||||||
|
function _omz_git_prompt_status_match() {
|
||||||
local -x LC_ALL=C
|
local -x LC_ALL=C
|
||||||
|
[[ "$1" =~ "$2" ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
function _omz_git_prompt_status() {
|
||||||
[[ "$(__git_prompt_git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]] && return
|
[[ "$(__git_prompt_git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]] && return
|
||||||
|
|
||||||
# Maps a git status prefix to an internal constant
|
# Maps a git status prefix to an internal constant
|
||||||
@@ -113,11 +124,11 @@ function _omz_git_prompt_status() {
|
|||||||
status_lines=("${(@f)${status_text}}")
|
status_lines=("${(@f)${status_text}}")
|
||||||
|
|
||||||
# If the tracking line exists, get and parse it
|
# If the tracking line exists, get and parse it
|
||||||
if [[ "$status_lines[1]" =~ "^## [^ ]+ \[(.*)\]" ]]; then
|
if _omz_git_prompt_status_match "$status_lines[1]" "^## [^ ]+ \[(.*)\]"; then
|
||||||
local branch_statuses
|
local branch_statuses
|
||||||
branch_statuses=("${(@s/,/)match}")
|
branch_statuses=("${(@s/,/)match}")
|
||||||
for branch_status in $branch_statuses; do
|
for branch_status in $branch_statuses; do
|
||||||
if [[ ! $branch_status =~ "(behind|diverged|ahead) ([0-9]+)?" ]]; then
|
if ! _omz_git_prompt_status_match "$branch_status" "(behind|diverged|ahead) ([0-9]+)?"; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
local last_parsed_status=$prefix_constant_map[$match[1]]
|
local last_parsed_status=$prefix_constant_map[$match[1]]
|
||||||
@@ -130,7 +141,7 @@ function _omz_git_prompt_status() {
|
|||||||
local status_constant="${prefix_constant_map[$status_prefix]}"
|
local status_constant="${prefix_constant_map[$status_prefix]}"
|
||||||
local status_regex=$'(^|\n)'"$status_prefix"
|
local status_regex=$'(^|\n)'"$status_prefix"
|
||||||
|
|
||||||
if [[ "$status_text" =~ $status_regex ]]; then
|
if _omz_git_prompt_status_match "$status_text" "$status_regex"; then
|
||||||
statuses_seen[$status_constant]=1
|
statuses_seen[$status_constant]=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -9,7 +9,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_op" ]]; then
|
|||||||
_comps[op]=_op
|
_comps[op]=_op
|
||||||
fi
|
fi
|
||||||
|
|
||||||
op completion zsh >| "$ZSH_CACHE_DIR/completions/_op" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_op"
|
||||||
|
zf_mv -f -- =( op completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|
||||||
# Load opswd function
|
# Load opswd function
|
||||||
autoload -Uz opswd
|
autoload -Uz opswd
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_arduino-cli" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Generate and load arduino-cli completion
|
# Generate and load arduino-cli completion
|
||||||
arduino-cli completion zsh >! "$ZSH_CACHE_DIR/completions/_arduino-cli" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_arduino-cli"
|
||||||
|
zf_mv -f -- =( arduino-cli completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_argocd" ]]; then
|
|||||||
_comps[argocd]=_argocd
|
_comps[argocd]=_argocd
|
||||||
fi
|
fi
|
||||||
|
|
||||||
argocd completion zsh >| "$ZSH_CACHE_DIR/completions/_argocd" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_argocd"
|
||||||
|
zf_mv -f -- =( argocd completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -12,4 +12,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_asdf" ]]; then
|
|||||||
autoload -Uz _asdf
|
autoload -Uz _asdf
|
||||||
_comps[asdf]=_asdf
|
_comps[asdf]=_asdf
|
||||||
fi
|
fi
|
||||||
asdf completion zsh >| "$ZSH_CACHE_DIR/completions/_asdf" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_asdf"
|
||||||
|
zf_mv -f -- =( asdf completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_buf" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Generate and load buf completion
|
# Generate and load buf completion
|
||||||
buf completion zsh >! "$ZSH_CACHE_DIR/completions/_buf" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_buf"
|
||||||
|
zf_mv -f -- =( buf completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_bun" ]]; then
|
|||||||
_comps[bun]=_bun
|
_comps[bun]=_bun
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SHELL=zsh bun completions >| "$ZSH_CACHE_DIR/completions/_bun" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_bun"
|
||||||
|
zf_mv -f -- =( SHELL=zsh bun completions ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_charm" ]]; then
|
|||||||
_comps[charm]=_charm
|
_comps[charm]=_charm
|
||||||
fi
|
fi
|
||||||
|
|
||||||
charm completion zsh >| "$ZSH_CACHE_DIR/completions/_charm" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_charm"
|
||||||
|
zf_mv -f -- =( charm completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_chezmoi" ]]; then
|
|||||||
_comps[chezmoi]=_chezmoi
|
_comps[chezmoi]=_chezmoi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
chezmoi completion zsh >| "$ZSH_CACHE_DIR/completions/_chezmoi" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_chezmoi"
|
||||||
|
zf_mv -f -- =( chezmoi completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_codex" ]]; then
|
|||||||
_comps[codex]=_codex
|
_comps[codex]=_codex
|
||||||
fi
|
fi
|
||||||
|
|
||||||
codex completion zsh < /dev/null 2> /dev/null >| "$ZSH_CACHE_DIR/completions/_codex" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_codex"
|
||||||
|
zf_mv -f -- =( codex completion zsh < /dev/null 2> /dev/null ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -25,4 +25,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_deno" ]]; then
|
|||||||
_comps[deno]=_deno
|
_comps[deno]=_deno
|
||||||
fi
|
fi
|
||||||
|
|
||||||
deno completions zsh >| "$ZSH_CACHE_DIR/completions/_deno" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_deno"
|
||||||
|
zf_mv -f -- =( deno completions zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -17,6 +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 |
|
||||||
| 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 |
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
alias dco="$dccmd"
|
alias dco="$dccmd"
|
||||||
alias dcb="$dccmd build"
|
alias dcb="$dccmd build"
|
||||||
|
alias dcc="$dccmd config"
|
||||||
alias dce="$dccmd exec"
|
alias dce="$dccmd exec"
|
||||||
alias dcps="$dccmd ps"
|
alias dcps="$dccmd ps"
|
||||||
alias dcrestart="$dccmd restart"
|
alias dcrestart="$dccmd restart"
|
||||||
|
|||||||
@@ -56,14 +56,19 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_docker" ]]; then
|
|||||||
_comps[docker]=_docker
|
_comps[docker]=_docker
|
||||||
fi
|
fi
|
||||||
|
|
||||||
{
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
|
||||||
|
local plugin_dir="$1"
|
||||||
|
|
||||||
# `docker completion` is only available from 23.0.0 on
|
# `docker completion` is only available from 23.0.0 on
|
||||||
# docker version returns `Docker version 24.0.2, build cb74dfcd85`
|
# docker version returns `Docker version 24.0.2, build cb74dfcd85`
|
||||||
# with `s:,:` remove the comma after the version, and select third word of it
|
# with `s:,:` remove the comma after the version, and select third word of it
|
||||||
if zstyle -t ':omz:plugins:docker' legacy-completion || \
|
if zstyle -t ':omz:plugins:docker' legacy-completion || \
|
||||||
! 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 "${0:h}/completions/_docker" "$ZSH_CACHE_DIR/completions/_docker"
|
command cp "${plugin_dir}/completions/_docker" "$ZSH_CACHE_DIR/completions/_docker"
|
||||||
else
|
else
|
||||||
command docker completion zsh | tee "$ZSH_CACHE_DIR/completions/_docker" > /dev/null
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_docker"
|
||||||
|
zf_mv -f -- =( command docker completion zsh ) "$TMPPREFIX"
|
||||||
fi
|
fi
|
||||||
} &|
|
} "${0:A:h}" &|
|
||||||
|
|||||||
@@ -14,4 +14,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_doctl" ]]; then
|
|||||||
_comps[doctl]=_doctl
|
_comps[doctl]=_doctl
|
||||||
fi
|
fi
|
||||||
|
|
||||||
doctl completion zsh >| "$ZSH_CACHE_DIR/completions/_doctl" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_doctl"
|
||||||
|
zf_mv -f -- =( doctl completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -52,8 +52,13 @@ function _configure_eza() {
|
|||||||
if [[ $_val ]]; then
|
if [[ $_val ]]; then
|
||||||
_EZA_TAIL+=("--time-style='$_val'")
|
_EZA_TAIL+=("--time-style='$_val'")
|
||||||
fi
|
fi
|
||||||
if zstyle -t ":omz:plugins:eza" "hyperlink"; then
|
if zstyle -t ':omz:plugins:eza' 'hyperlink'; then
|
||||||
_EZA_TAIL+=("--hyperlink")
|
# eza >= 0.23 needs an explicit WHEN value
|
||||||
|
if command eza --hyperlink=auto --version &>/dev/null; then
|
||||||
|
_EZA_TAIL+=("--hyperlink=auto")
|
||||||
|
else
|
||||||
|
_EZA_TAIL+=("--hyperlink")
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,4 +30,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_flutter" ]]; then
|
|||||||
_comps[flutter]=_flutter
|
_comps[flutter]=_flutter
|
||||||
fi
|
fi
|
||||||
|
|
||||||
flutter zsh-completion < /dev/null >| "$ZSH_CACHE_DIR/completions/_flutter" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_flutter"
|
||||||
|
zf_mv -f -- =( flutter zsh-completion < /dev/null ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_flux" ]]; then
|
|||||||
_comps[flux]=_flux
|
_comps[flux]=_flux
|
||||||
fi
|
fi
|
||||||
|
|
||||||
flux completion zsh >| "$ZSH_CACHE_DIR/completions/_flux" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_flux"
|
||||||
|
zf_mv -f -- =( flux completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -10,7 +10,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_fnm" ]]; then
|
|||||||
_comps[fnm]=_fnm
|
_comps[fnm]=_fnm
|
||||||
fi
|
fi
|
||||||
|
|
||||||
fnm completions --shell=zsh >| "$ZSH_CACHE_DIR/completions/_fnm" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$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
|
||||||
local -a fnm_env_cmd
|
local -a fnm_env_cmd
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_gh" ]]; then
|
|||||||
_comps[gh]=_gh
|
_comps[gh]=_gh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
gh completion --shell zsh >| "$ZSH_CACHE_DIR/completions/_gh" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_gh"
|
||||||
|
zf_mv -f -- =( gh completion --shell zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -137,8 +137,9 @@ function gbda() {
|
|||||||
# Copied and modified from James Roeder (jmaroeder) under MIT License
|
# Copied and modified from James Roeder (jmaroeder) under MIT License
|
||||||
# https://github.com/jmaroeder/plugin-git/blob/216723ef4f9e8dde399661c39c80bdf73f4076c4/functions/gbda.fish
|
# https://github.com/jmaroeder/plugin-git/blob/216723ef4f9e8dde399661c39c80bdf73f4076c4/functions/gbda.fish
|
||||||
function gbds() {
|
function gbds() {
|
||||||
local default_branch=$(git_main_branch)
|
local default_branch
|
||||||
(( ! $? )) || default_branch=$(git_develop_branch)
|
default_branch=$(git_main_branch) \
|
||||||
|
|| default_branch=$(git_develop_branch)
|
||||||
|
|
||||||
git for-each-ref refs/heads/ "--format=%(refname:short)" | \
|
git for-each-ref refs/heads/ "--format=%(refname:short)" | \
|
||||||
while read branch; do
|
while read branch; do
|
||||||
|
|||||||
@@ -9,5 +9,9 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_hasura" ]]; then
|
|||||||
source "$ZSH_CACHE_DIR/completions/_hasura"
|
source "$ZSH_CACHE_DIR/completions/_hasura"
|
||||||
else
|
else
|
||||||
source "$ZSH_CACHE_DIR/completions/_hasura"
|
source "$ZSH_CACHE_DIR/completions/_hasura"
|
||||||
hasura completion zsh --file "$ZSH_CACHE_DIR/completions/_hasura" >/dev/null &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_hasura"
|
||||||
|
zf_mv -f -- =( hasura completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -13,7 +13,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_hcloud" ]]; then
|
|||||||
_comps[hcloud]=_hcloud
|
_comps[hcloud]=_hcloud
|
||||||
fi
|
fi
|
||||||
|
|
||||||
hcloud completion zsh 2> /dev/null >| "$ZSH_CACHE_DIR/completions/_hcloud" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_hcloud"
|
||||||
|
zf_mv -f -- =( hcloud completion zsh 2> /dev/null ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|
||||||
# Main alias
|
# Main alias
|
||||||
alias hc='hcloud'
|
alias hc='hcloud'
|
||||||
|
|||||||
@@ -9,7 +9,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_helm" ]]; then
|
|||||||
source "$ZSH_CACHE_DIR/completions/_helm"
|
source "$ZSH_CACHE_DIR/completions/_helm"
|
||||||
else
|
else
|
||||||
source "$ZSH_CACHE_DIR/completions/_helm"
|
source "$ZSH_CACHE_DIR/completions/_helm"
|
||||||
helm completion zsh | tee "$ZSH_CACHE_DIR/completions/_helm" >/dev/null &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_helm"
|
||||||
|
zf_mv -f -- =( helm completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
alias h='helm'
|
alias h='helm'
|
||||||
|
|||||||
@@ -11,7 +11,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_jj" ]]; then
|
|||||||
_comps[jj]=_jj
|
_comps[jj]=_jj
|
||||||
fi
|
fi
|
||||||
|
|
||||||
COMPLETE=zsh jj >| "$ZSH_CACHE_DIR/completions/_jj" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_jj"
|
||||||
|
zf_mv -f -- =( COMPLETE=zsh jj ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|
||||||
function __jj_prompt_jj() {
|
function __jj_prompt_jj() {
|
||||||
local -a flags
|
local -a flags
|
||||||
@@ -72,4 +76,3 @@ alias jjsq='jj squash'
|
|||||||
alias jjst='jj status'
|
alias jjst='jj status'
|
||||||
alias jjwa='jj workspace add'
|
alias jjwa='jj workspace add'
|
||||||
alias jjwf='jj workspace forget'
|
alias jjwf='jj workspace forget'
|
||||||
|
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ fi
|
|||||||
|
|
||||||
# and then generate it in the background. On first completion,
|
# and then generate it in the background. On first completion,
|
||||||
# the actual completion file will be loaded.
|
# the actual completion file will be loaded.
|
||||||
k9s completion zsh >| "$ZSH_CACHE_DIR/completions/_k9s" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_k9s"
|
||||||
|
zf_mv -f -- =( k9s completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -11,7 +11,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_kind" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Generate and load kind completion
|
# Generate and load kind completion
|
||||||
kind completion zsh >! "$ZSH_CACHE_DIR/completions/_kind" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_kind"
|
||||||
|
zf_mv -f -- =( kind completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|
||||||
# Register aliases
|
# Register aliases
|
||||||
alias kicc="kind create cluster"
|
alias kicc="kind create cluster"
|
||||||
|
|||||||
@@ -10,7 +10,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_kubectl" ]]; then
|
|||||||
_comps[kubectl]=_kubectl
|
_comps[kubectl]=_kubectl
|
||||||
fi
|
fi
|
||||||
|
|
||||||
kubectl completion zsh 2> /dev/null >| "$ZSH_CACHE_DIR/completions/_kubectl" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$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
|
||||||
alias k=kubectl
|
alias k=kubectl
|
||||||
|
|||||||
@@ -10,4 +10,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_minikube" ]]; then
|
|||||||
_comps[minikube]=_minikube
|
_comps[minikube]=_minikube
|
||||||
fi
|
fi
|
||||||
|
|
||||||
minikube completion zsh >| "$ZSH_CACHE_DIR/completions/_minikube" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_minikube"
|
||||||
|
zf_mv -f -- =( minikube completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -1,9 +1,14 @@
|
|||||||
if (( ! $+commands[mise] )); then
|
if (( $+commands[mise] )); then
|
||||||
|
_mise_bin=mise
|
||||||
|
elif [[ -x ~/.local/bin/mise ]]; then
|
||||||
|
_mise_bin=~/.local/bin/mise
|
||||||
|
else
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Load mise hooks
|
# Load mise hooks
|
||||||
eval "$(mise activate zsh)"
|
eval "$($_mise_bin activate zsh)"
|
||||||
|
unset _mise_bin
|
||||||
|
|
||||||
# If the completion file doesn't exist yet, we need to autoload it and
|
# If the completion file doesn't exist yet, we need to autoload it and
|
||||||
# bind it to `mise`. Otherwise, compinit will have already done that.
|
# bind it to `mise`. Otherwise, compinit will have already done that.
|
||||||
@@ -14,4 +19,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_mise" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Generate and load mise completion
|
# Generate and load mise completion
|
||||||
mise completion zsh >| "$ZSH_CACHE_DIR/completions/_mise" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_mise"
|
||||||
|
zf_mv -f -- =( mise completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -11,7 +11,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_molecule" ]]; then
|
|||||||
_comps[molecule]=_molecule
|
_comps[molecule]=_molecule
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_MOLECULE_COMPLETE=zsh_source molecule >| "$ZSH_CACHE_DIR/completions/_molecule" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_molecule"
|
||||||
|
zf_mv -f -- =( _MOLECULE_COMPLETE=zsh_source molecule ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|
||||||
# Alias
|
# Alias
|
||||||
# molecule: https://docs.ansible.com/projects/molecule/
|
# molecule: https://docs.ansible.com/projects/molecule/
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_atlas" ]]; then
|
|||||||
_comps[atlas]=_atlas
|
_comps[atlas]=_atlas
|
||||||
fi
|
fi
|
||||||
|
|
||||||
atlas completion zsh >| "$ZSH_CACHE_DIR/completions/atlas" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_atlas"
|
||||||
|
zf_mv -f -- =( atlas completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -7,7 +7,11 @@ if (( $+commands[nsc] )); then
|
|||||||
_comps[nsc]=_nsc
|
_comps[nsc]=_nsc
|
||||||
fi
|
fi
|
||||||
|
|
||||||
nsc completion zsh >| "$ZSH_CACHE_DIR/completions/_nsc" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_nsc"
|
||||||
|
zf_mv -f -- =( nsc completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if (( $+commands[nats] )); then
|
if (( $+commands[nats] )); then
|
||||||
@@ -19,5 +23,9 @@ if (( $+commands[nats] )); then
|
|||||||
_comps[nats]=_nats
|
_comps[nats]=_nats
|
||||||
fi
|
fi
|
||||||
|
|
||||||
nats --completion-script-zsh >| "$ZSH_CACHE_DIR/completions/_nats" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_nats"
|
||||||
|
zf_mv -f -- =( nats --completion-script-zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_ngrok" ]]; then
|
|||||||
_comps[ngrok]=_ngrok
|
_comps[ngrok]=_ngrok
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ngrok completion zsh >| "$ZSH_CACHE_DIR/completions/_ngrok" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_ngrok"
|
||||||
|
zf_mv -f -- =( ngrok completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_pass-cli" ]]; then
|
|||||||
_comps[pass-cli]=_pass-cli
|
_comps[pass-cli]=_pass-cli
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pass-cli completions zsh >| "$ZSH_CACHE_DIR/completions/_pass-cli" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_pass-cli"
|
||||||
|
zf_mv -f -- =( pass-cli completions zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -43,7 +43,11 @@ else
|
|||||||
_comps[pipenv]=_pipenv
|
_comps[pipenv]=_pipenv
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_PIPENV_COMPLETE=zsh_source pipenv >| "$ZSH_CACHE_DIR/completions/_pipenv" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_pipenv"
|
||||||
|
zf_mv -f -- =( _PIPENV_COMPLETE=zsh_source pipenv ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if zstyle -T ':omz:plugins:pipenv' auto-shell; then
|
if zstyle -T ':omz:plugins:pipenv' auto-shell; then
|
||||||
|
|||||||
@@ -10,7 +10,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_podman" ]]; then
|
|||||||
_comps[podman]=_podman
|
_comps[podman]=_podman
|
||||||
fi
|
fi
|
||||||
|
|
||||||
podman completion zsh 2> /dev/null >| "$ZSH_CACHE_DIR/completions/_podman" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_podman"
|
||||||
|
zf_mv -f -- =( podman completion zsh 2> /dev/null ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|
||||||
alias pbl='podman build'
|
alias pbl='podman build'
|
||||||
alias pcin='podman container inspect'
|
alias pcin='podman container inspect'
|
||||||
|
|||||||
@@ -39,4 +39,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_poetry" ]]; then
|
|||||||
_comps[poetry]=_poetry
|
_comps[poetry]=_poetry
|
||||||
fi
|
fi
|
||||||
|
|
||||||
poetry completions zsh >| "$ZSH_CACHE_DIR/completions/_poetry" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_poetry"
|
||||||
|
zf_mv -f -- =( poetry completions zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -10,12 +10,16 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_procs" ]]; then
|
|||||||
_comps[procs]=_procs
|
_comps[procs]=_procs
|
||||||
fi
|
fi
|
||||||
|
|
||||||
{
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
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)
|
||||||
if is-at-least "0.14" "${_version#procs }"; then
|
zf_mv -f -- =(
|
||||||
procs --gen-completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs"
|
if is-at-least "0.14" "${_version#procs }"; then
|
||||||
else
|
procs --gen-completion-out zsh
|
||||||
procs --completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs"
|
else
|
||||||
fi
|
procs --completion-out zsh
|
||||||
|
fi
|
||||||
|
) "$TMPPREFIX"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -10,7 +10,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_pulumi" ]]; then
|
|||||||
_comps[pulumi]=_pulumi
|
_comps[pulumi]=_pulumi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pulumi gen-completion zsh >| "$ZSH_CACHE_DIR/completions/_pulumi" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_pulumi"
|
||||||
|
zf_mv -f -- =( pulumi gen-completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|
||||||
# Aliases
|
# Aliases
|
||||||
alias pul='pulumi'
|
alias pul='pulumi'
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_qodana" ]]; then
|
|||||||
_comps[qodana]=_qodana
|
_comps[qodana]=_qodana
|
||||||
fi
|
fi
|
||||||
|
|
||||||
qodana completion zsh >| "$ZSH_CACHE_DIR/completions/_qodana" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_qodana"
|
||||||
|
zf_mv -f -- =( qodana completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -54,6 +54,33 @@ plugins=(... rails)
|
|||||||
| `rta` | `rails test:all` | Runs all Rails tests, including system tests |
|
| `rta` | `rails test:all` | Runs all Rails tests, including system tests |
|
||||||
| `ru` | `rails runner` | Run Ruby code in the context of Rails |
|
| `ru` | `rails runner` | Run Ruby code in the context of Rails |
|
||||||
|
|
||||||
|
### Multiple databases
|
||||||
|
|
||||||
|
Rails applications can define more than one database (`primary`, `cache`, `cable`,
|
||||||
|
`queue`, ...), and each one gets its own namespaced task. These commands accept an
|
||||||
|
optional database name as the first argument:
|
||||||
|
|
||||||
|
`rdc`, `rdd`, `rdm`, `rdmd`, `rdmr`, `rdms`, `rdmu`, `rdr`, `rdrs`, `rdsl`
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
rdm # rails db:migrate
|
||||||
|
rdm cache # rails db:migrate:cache
|
||||||
|
rdm VERSION=20231225 # rails db:migrate VERSION=20231225
|
||||||
|
rdm cache STEP=2 # rails db:migrate:cache STEP=2
|
||||||
|
rdm --trace # rails db:migrate --trace
|
||||||
|
```
|
||||||
|
|
||||||
|
The first argument is read as a database name only when it is a bare word. Flags
|
||||||
|
(`--trace`), variables (`STEP=2`) and other tasks (`db:seed`) are passed through to
|
||||||
|
`rails` unchanged, so previous usage keeps working. When a database name is given,
|
||||||
|
the resolved command is printed so it is clear which database is being used.
|
||||||
|
|
||||||
|
`rdmrs` is not in the list above because Rails does not define a per-database
|
||||||
|
`db:migrate:reset` task.
|
||||||
|
|
||||||
|
Note that these are implemented as shell functions rather than aliases, so they will
|
||||||
|
not appear in the output of `alias`.
|
||||||
|
|
||||||
### Foreman
|
### Foreman
|
||||||
|
|
||||||
| Alias | Command | Description |
|
| Alias | Command | Description |
|
||||||
|
|||||||
@@ -47,19 +47,9 @@ alias rc='rails console'
|
|||||||
alias rcs='rails console --sandbox'
|
alias rcs='rails console --sandbox'
|
||||||
alias rd='rails destroy'
|
alias rd='rails destroy'
|
||||||
alias rdb='rails dbconsole'
|
alias rdb='rails dbconsole'
|
||||||
alias rdc='rails db:create'
|
|
||||||
alias rdd='rails db:drop'
|
|
||||||
alias rdm='rails db:migrate'
|
|
||||||
alias rdmd='rails db:migrate:down'
|
|
||||||
alias rdmr='rails db:migrate:redo'
|
|
||||||
alias rdmrs='rails db:migrate:reset'
|
alias rdmrs='rails db:migrate:reset'
|
||||||
alias rdms='rails db:migrate:status'
|
|
||||||
alias rdmtc='rails db:migrate db:test:clone'
|
alias rdmtc='rails db:migrate db:test:clone'
|
||||||
alias rdmu='rails db:migrate:up'
|
|
||||||
alias rdr='rails db:rollback'
|
|
||||||
alias rdrs='rails db:reset'
|
|
||||||
alias rds='rails db:seed'
|
alias rds='rails db:seed'
|
||||||
alias rdsl='rails db:schema:load'
|
|
||||||
alias rdtc='rails db:test:clone'
|
alias rdtc='rails db:test:clone'
|
||||||
alias rdtp='rails db:test:prepare'
|
alias rdtp='rails db:test:prepare'
|
||||||
alias rgen='rails generate'
|
alias rgen='rails generate'
|
||||||
@@ -106,6 +96,47 @@ alias rkn='rake notes'
|
|||||||
alias rksts='rake stats'
|
alias rksts='rake stats'
|
||||||
alias rkt='rake test'
|
alias rkt='rake test'
|
||||||
|
|
||||||
|
# Database tasks
|
||||||
|
#
|
||||||
|
# Rails applications can define more than one database (primary, cache, cable,
|
||||||
|
# queue, ...). Each one gets its own namespaced task, e.g. `db:migrate:cache`.
|
||||||
|
# The functions below take an optional database name as the first argument:
|
||||||
|
#
|
||||||
|
# rdm -> rails db:migrate
|
||||||
|
# rdm cache -> rails db:migrate:cache
|
||||||
|
# rdm VERSION=20231225 -> rails db:migrate VERSION=20231225
|
||||||
|
# rdm cache STEP=2 -> rails db:migrate:cache STEP=2
|
||||||
|
# rdm --trace -> rails db:migrate --trace
|
||||||
|
#
|
||||||
|
# The first argument is read as a database name only when it is a bare word.
|
||||||
|
# Flags (--trace), variables (STEP=2) and other tasks (db:seed) are passed
|
||||||
|
# through to rails untouched, so the previous alias behavior still works.
|
||||||
|
function _rails_db_command() {
|
||||||
|
local task="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
if [[ $# -gt 0 && "$1" != -* && "$1" != *=* && "$1" != *:* ]]; then
|
||||||
|
task="$task:$1"
|
||||||
|
shift
|
||||||
|
# Echo the resolved task so it is clear which database is being used
|
||||||
|
local -a cmd=(rails "$task" "$@")
|
||||||
|
print -u2 -r -- "Running: ${cmd[*]}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
rails "$task" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
function rdc() { _rails_db_command db:create "$@" }
|
||||||
|
function rdd() { _rails_db_command db:drop "$@" }
|
||||||
|
function rdm() { _rails_db_command db:migrate "$@" }
|
||||||
|
function rdmd() { _rails_db_command db:migrate:down "$@" }
|
||||||
|
function rdmr() { _rails_db_command db:migrate:redo "$@" }
|
||||||
|
function rdms() { _rails_db_command db:migrate:status "$@" }
|
||||||
|
function rdmu() { _rails_db_command db:migrate:up "$@" }
|
||||||
|
function rdr() { _rails_db_command db:rollback "$@" }
|
||||||
|
function rdrs() { _rails_db_command db:reset "$@" }
|
||||||
|
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/destroy'
|
||||||
|
|||||||
@@ -10,7 +10,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_rbw" ]]; then
|
|||||||
_comps[rbw]=_rbw
|
_comps[rbw]=_rbw
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rbw gen-completions zsh >| "$ZSH_CACHE_DIR/completions/_rbw" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$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
|
||||||
# and clears it after 20 seconds
|
# and clears it after 20 seconds
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_rclone" ]]; then
|
|||||||
_comps[rclone]=_rclone
|
_comps[rclone]=_rclone
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rclone completion zsh - >| "$ZSH_CACHE_DIR/completions/_rclone" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_rclone"
|
||||||
|
zf_mv -f -- =( rclone completion zsh - ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -19,7 +19,11 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_rustup" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Generate completion files in the background
|
# Generate completion files in the background
|
||||||
rustup completions zsh >| "$ZSH_CACHE_DIR/completions/_rustup" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$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
|
||||||
source "$(rustup run ${${(z)$(rustup default)}[1]} rustc --print sysroot)"/share/zsh/site-functions/_cargo
|
source "$(rustup run ${${(z)$(rustup default)}[1]} rustc --print sysroot)"/share/zsh/site-functions/_cargo
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
# 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
@@ -0,0 +1,203 @@
|
|||||||
|
# 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'
|
||||||
@@ -12,7 +12,11 @@ function install_autocompletion {
|
|||||||
_comps[$1]=_$1
|
_comps[$1]=_$1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$1 completion zsh >| "$ZSH_CACHE_DIR/completions/_$1" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_$1"
|
||||||
|
zf_mv -f -- =( $1 completion zsh ) "$TMPPREFIX"
|
||||||
|
} "$1" &|
|
||||||
}
|
}
|
||||||
|
|
||||||
install_autocompletion cosign
|
install_autocompletion cosign
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_skaffold" ]]; then
|
|||||||
_comps[skaffold]=_skaffold
|
_comps[skaffold]=_skaffold
|
||||||
fi
|
fi
|
||||||
|
|
||||||
skaffold completion zsh >| "$ZSH_CACHE_DIR/completions/_skaffold" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_skaffold"
|
||||||
|
zf_mv -f -- =( skaffold completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -101,10 +101,18 @@ if zstyle -t :omz:plugins:ssh-agent agent-forwarding \
|
|||||||
&& [[ -n "$SSH_AUTH_SOCK" ]]; then
|
&& [[ -n "$SSH_AUTH_SOCK" ]]; then
|
||||||
if [[ ! -L "$SSH_AUTH_SOCK" ]]; then
|
if [[ ! -L "$SSH_AUTH_SOCK" ]]; then
|
||||||
if [[ -n "$TERMUX_VERSION" ]]; then
|
if [[ -n "$TERMUX_VERSION" ]]; then
|
||||||
ln -sf "$SSH_AUTH_SOCK" "$PREFIX"/tmp/ssh-agent-$USERNAME-screen
|
_omz_ssh_agent_link="$PREFIX"/tmp/ssh-agent-$USERNAME-screen
|
||||||
else
|
else
|
||||||
ln -sf "$SSH_AUTH_SOCK" /tmp/ssh-agent-$USERNAME-screen
|
_omz_ssh_agent_link=/tmp/ssh-agent-$USERNAME-screen
|
||||||
fi
|
fi
|
||||||
|
# `ln -sf` unlinks the old symlink and then creates the new one: two
|
||||||
|
# syscalls, no atomic swap. Shells starting concurrently (a tmux window
|
||||||
|
# opening several panes at once) interleave those steps and all but one
|
||||||
|
# fail with "ln: ...: File exists". Stage the link under a PID-unique
|
||||||
|
# name and move it into place, since rename(2) is atomic.
|
||||||
|
command ln -sf "$SSH_AUTH_SOCK" "$_omz_ssh_agent_link.$$" \
|
||||||
|
&& command mv -f "$_omz_ssh_agent_link.$$" "$_omz_ssh_agent_link"
|
||||||
|
unset _omz_ssh_agent_link
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
_start_agent
|
_start_agent
|
||||||
|
|||||||
@@ -10,4 +10,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_stripe" ]]; then
|
|||||||
_comps[stripe]=_stripe
|
_comps[stripe]=_stripe
|
||||||
fi
|
fi
|
||||||
|
|
||||||
stripe completion --shell zsh --write-to-stdout >| "$ZSH_CACHE_DIR/completions/_stripe" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_stripe"
|
||||||
|
zf_mv -f -- =( stripe completion --shell zsh --write-to-stdout ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ function consume100() {
|
|||||||
|
|
||||||
# Website traffic statistics (G)
|
# Website traffic statistics (G)
|
||||||
function webtraffic() {
|
function webtraffic() {
|
||||||
awk "{sum+=$10} END {print sum/1024/1024/1024}" "$(retlog)"
|
awk '{sum+=$10} END {print sum/1024/1024/1024}' "$(retlog)"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Statistical connections 404
|
# Statistical connections 404
|
||||||
|
|||||||
@@ -22,4 +22,8 @@ if (( $+aliases[tailscale] )); then
|
|||||||
_comps[${aliases[tailscale]:t}]=_tailscale
|
_comps[${aliases[tailscale]:t}]=_tailscale
|
||||||
fi
|
fi
|
||||||
|
|
||||||
tailscale completion zsh >| "$ZSH_CACHE_DIR/completions/_tailscale" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_tailscale"
|
||||||
|
zf_mv -f -- =( tailscale completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_task" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Generate and load task completion
|
# Generate and load task completion
|
||||||
task --completion zsh >! "$ZSH_CACHE_DIR/completions/_task" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_task"
|
||||||
|
zf_mv -f -- =( task --completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_timoni" ]]; then
|
|||||||
_comps[timoni]=_timoni
|
_comps[timoni]=_timoni
|
||||||
fi
|
fi
|
||||||
|
|
||||||
timoni completion zsh >| "$ZSH_CACHE_DIR/completions/_timoni" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_timoni"
|
||||||
|
zf_mv -f -- =( timoni completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -43,5 +43,12 @@ fi
|
|||||||
|
|
||||||
# uv and uvx are installed together (uvx is an alias to `uv tool run`)
|
# uv and uvx are installed together (uvx is an alias to `uv tool run`)
|
||||||
# Overwrites the file each time as completions might change with uv versions.
|
# Overwrites the file each time as completions might change with uv versions.
|
||||||
uv generate-shell-completion zsh >| "$ZSH_CACHE_DIR/completions/_uv" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
uvx --generate-shell-completion zsh >| "$ZSH_CACHE_DIR/completions/_uvx" &|
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_uv"
|
||||||
|
zf_mv -f -- =( uv generate-shell-completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_uvx"
|
||||||
|
zf_mv -f -- =( uvx --generate-shell-completion zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
@@ -11,4 +11,8 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_volta" ]]; then
|
|||||||
_comps[volta]=_volta
|
_comps[volta]=_volta
|
||||||
fi
|
fi
|
||||||
|
|
||||||
volta completions zsh >| "$ZSH_CACHE_DIR/completions/_volta" &|
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_volta"
|
||||||
|
zf_mv -f -- =( volta completions zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
|
|||||||
+2
-2
@@ -221,12 +221,12 @@ supports_hyperlinks() {
|
|||||||
|
|
||||||
# If $TERM_PROGRAM is set, these terminals support hyperlinks
|
# If $TERM_PROGRAM is set, these terminals support hyperlinks
|
||||||
case "$TERM_PROGRAM" in
|
case "$TERM_PROGRAM" in
|
||||||
Hyper|iTerm.app|terminology|WezTerm|vscode) return 0 ;;
|
ghostty|Hyper|iTerm.app|terminology|vscode|WezTerm) return 0 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# These termcap entries support hyperlinks
|
# These termcap entries support hyperlinks
|
||||||
case "$TERM" in
|
case "$TERM" in
|
||||||
xterm-kitty|alacritty|alacritty-direct) return 0 ;;
|
alacritty|alacritty-direct|xterm-ghostty|xterm-kitty) return 0 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# xfce4-terminal supports hyperlinks
|
# xfce4-terminal supports hyperlinks
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ zstyle -s ':omz:update' mode update_mode || {
|
|||||||
if [[ "$update_mode" = disabled ]] \
|
if [[ "$update_mode" = disabled ]] \
|
||||||
|| [[ ! -w "$ZSH" || ! -O "$ZSH" ]] \
|
|| [[ ! -w "$ZSH" || ! -O "$ZSH" ]] \
|
||||||
|| [[ ! -t 1 && ${POWERLEVEL9K_INSTANT_PROMPT:-off} == off ]] \
|
|| [[ ! -t 1 && ${POWERLEVEL9K_INSTANT_PROMPT:-off} == off ]] \
|
||||||
|| ! command git --version 2>&1 >/dev/null \
|
|| ! command git --version >/dev/null 2>&1 \
|
||||||
|| (builtin cd -q "$ZSH"; ! command git rev-parse --is-inside-work-tree &>/dev/null); then
|
|| (builtin cd -q "$ZSH"; ! command git rev-parse --is-inside-work-tree &>/dev/null); then
|
||||||
unset update_mode
|
unset update_mode
|
||||||
return
|
return
|
||||||
|
|||||||
+27
-5
@@ -49,9 +49,31 @@ USER=${USER:-$(id -u -n)}
|
|||||||
# $HOME is defined at the time of login, but it could be unset. If it is unset,
|
# $HOME is defined at the time of login, but it could be unset. If it is unset,
|
||||||
# a tilde by itself (~) will not be expanded to the current user's home directory.
|
# a tilde by itself (~) will not be expanded to the current user's home directory.
|
||||||
# POSIX: https://pubs.opengroup.org/onlinepubs/009696899/basedefs/xbd_chap08.html#tag_08_03
|
# POSIX: https://pubs.opengroup.org/onlinepubs/009696899/basedefs/xbd_chap08.html#tag_08_03
|
||||||
HOME="${HOME:-$(getent passwd $USER 2>/dev/null | cut -d: -f6)}"
|
if [ -z "$HOME" ]; then
|
||||||
# macOS does not have getent, but this works even if $HOME is unset
|
HOME=$(getent passwd "$USER" 2>/dev/null | cut -d: -f6)
|
||||||
HOME="${HOME:-$(eval echo ~"$USER")}"
|
|
||||||
|
# macOS does not have getent; fall back to tilde expansion, but only if
|
||||||
|
# $USER is a safe username. The eval below would otherwise expand any shell
|
||||||
|
# metacharacters in $USER and allow command injection (CWE-78).
|
||||||
|
case "$USER" in
|
||||||
|
*[![:alnum:]_.-]*|'')
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
resolved_home=$(eval echo ~"$USER")
|
||||||
|
# Unknown users are not expanded and produce a literal "~username".
|
||||||
|
[ "$resolved_home" = "~$USER" ] || HOME=$resolved_home
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$HOME" in
|
||||||
|
/*) ;;
|
||||||
|
*)
|
||||||
|
echo "Error: unable to determine the current user's home directory." >&2
|
||||||
|
echo "Set HOME explicitly and rerun the installer." >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Track if $ZSH was provided
|
# Track if $ZSH was provided
|
||||||
@@ -168,12 +190,12 @@ supports_hyperlinks() {
|
|||||||
|
|
||||||
# If $TERM_PROGRAM is set, these terminals support hyperlinks
|
# If $TERM_PROGRAM is set, these terminals support hyperlinks
|
||||||
case "$TERM_PROGRAM" in
|
case "$TERM_PROGRAM" in
|
||||||
Hyper|iTerm.app|terminology|WezTerm|vscode) return 0 ;;
|
ghostty|Hyper|iTerm.app|terminology|vscode|WezTerm) return 0 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# These termcap entries support hyperlinks
|
# These termcap entries support hyperlinks
|
||||||
case "$TERM" in
|
case "$TERM" in
|
||||||
xterm-kitty|alacritty|alacritty-direct) return 0 ;;
|
alacritty|alacritty-direct|xterm-ghostty|xterm-kitty) return 0 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# xfce4-terminal supports hyperlinks
|
# xfce4-terminal supports hyperlinks
|
||||||
|
|||||||
+2
-2
@@ -95,12 +95,12 @@ supports_hyperlinks() {
|
|||||||
|
|
||||||
# If $TERM_PROGRAM is set, these terminals support hyperlinks
|
# If $TERM_PROGRAM is set, these terminals support hyperlinks
|
||||||
case "$TERM_PROGRAM" in
|
case "$TERM_PROGRAM" in
|
||||||
Hyper|iTerm.app|terminology|WezTerm|vscode) return 0 ;;
|
ghostty|Hyper|iTerm.app|terminology|vscode|WezTerm) return 0 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# These termcap entries support hyperlinks
|
# These termcap entries support hyperlinks
|
||||||
case "$TERM" in
|
case "$TERM" in
|
||||||
xterm-kitty|alacritty|alacritty-direct) return 0 ;;
|
alacritty|alacritty-direct|xterm-ghostty|xterm-kitty) return 0 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# xfce4-terminal supports hyperlinks
|
# xfce4-terminal supports hyperlinks
|
||||||
|
|||||||
Reference in New Issue
Block a user