mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-05-22 04:51:12 +02:00
Merge branch 'ohmyzsh:master' into rbenv-add-completion
This commit is contained in:
commit
aeabedd85d
192 changed files with 5040 additions and 1488 deletions
|
|
@ -6,14 +6,4 @@ function _opswd() {
|
|||
[[ -z "$services" ]] || compadd -a -- services
|
||||
}
|
||||
|
||||
# TODO: 2022-03-26: Remove support for op CLI 1
|
||||
autoload -Uz is-at-least
|
||||
is-at-least 2.0.0 $(op --version) || {
|
||||
function _opswd() {
|
||||
local -a services
|
||||
services=("${(@f)$(op list items --categories Login 2>/dev/null | op get item - --fields title 2>/dev/null)}")
|
||||
[[ -z "$services" ]] || compadd -a -- services
|
||||
}
|
||||
}
|
||||
|
||||
_opswd "$@"
|
||||
|
|
|
|||
|
|
@ -46,45 +46,4 @@ function opswd() {
|
|||
(sleep 20 && clipcopy </dev/null 2>/dev/null) &!
|
||||
}
|
||||
|
||||
# TODO: 2022-03-26: Remove support for op CLI 1
|
||||
autoload -Uz is-at-least
|
||||
is-at-least 2.0.0 $(op --version) || {
|
||||
print -ru2 ${(%):-"%F{yellow}opswd: usage with op version $(op --version) is deprecated. Upgrade to CLI 2 and reload zsh.
|
||||
For instructions, see https://developer.1password.com/docs/cli/upgrade.%f"}
|
||||
|
||||
# opswd puts the password of the named service into the clipboard. If there's a
|
||||
# one time password, it will be copied into the clipboard after 10 seconds. The
|
||||
# clipboard is cleared after another 20 seconds.
|
||||
function opswd() {
|
||||
if [[ $# -lt 1 ]]; then
|
||||
echo "Usage: opswd <service>"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local service=$1
|
||||
|
||||
# If not logged in, print error and return
|
||||
op list users > /dev/null || return
|
||||
|
||||
local password
|
||||
# Copy the password to the clipboard
|
||||
if ! password=$(op get item "$service" --fields password 2>/dev/null); then
|
||||
echo "error: could not obtain password for $service"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo -n "$password" | clipcopy
|
||||
echo "✔ password for $service copied to clipboard"
|
||||
|
||||
# If there's a one time password, copy it to the clipboard after 5 seconds
|
||||
local totp
|
||||
if totp=$(op get totp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then
|
||||
sleep 10 && echo -n "$totp" | clipcopy
|
||||
echo "✔ TOTP for $service copied to clipboard"
|
||||
fi
|
||||
|
||||
(sleep 20 && clipcopy </dev/null 2>/dev/null) &!
|
||||
}
|
||||
}
|
||||
|
||||
opswd "$@"
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ plugins=(... alias-finder)
|
|||
|
||||
To enable it for every single command, set zstyle in your `~/.zshrc`.
|
||||
|
||||
If the user has installed `rg`([ripgrep](https://github.com/BurntSushi/ripgrep)), it will be used because it's faster. Otherwise, it will use the `grep` command.
|
||||
|
||||
```zsh
|
||||
# ~/.zshrc
|
||||
|
||||
|
|
@ -28,7 +30,7 @@ When you execute a command alias finder will look at your defined aliases and su
|
|||
|
||||
Running the un-aliased `git status` command:
|
||||
```sh
|
||||
╭─tim@fox ~/repo/gitopolis ‹main›
|
||||
╭─tim@fox ~/repo/gitopolis ‹main›
|
||||
╰─$ git status
|
||||
|
||||
gst='git status' # <=== shorter suggestion from alias-finder
|
||||
|
|
@ -40,7 +42,7 @@ nothing to commit, working tree clean
|
|||
|
||||
Running a shorter `git st` alias from `.gitconfig` that it suggested :
|
||||
```sh
|
||||
╭─tim@fox ~/repo/gitopolis ‹main›
|
||||
╭─tim@fox ~/repo/gitopolis ‹main›
|
||||
╰─$ git st
|
||||
gs='git st' # <=== shorter suggestion from alias-finder
|
||||
## main...origin/main
|
||||
|
|
@ -48,7 +50,7 @@ gs='git st' # <=== shorter suggestion from alias-finder
|
|||
|
||||
Running the shortest `gs` shell alias that it found:
|
||||
```sh
|
||||
╭─tim@fox ~/repo/gitopolis ‹main›
|
||||
╭─tim@fox ~/repo/gitopolis ‹main›
|
||||
╰─$ gs
|
||||
# <=== no suggestions alias-finder because this is the shortest
|
||||
## main...origin/main
|
||||
|
|
|
|||
|
|
@ -36,14 +36,22 @@ alias-finder() {
|
|||
# make filter to find only shorter results than current cmd
|
||||
if [[ $cheaper == true ]]; then
|
||||
cmdLen=$(echo -n "$cmd" | wc -c)
|
||||
filter="^'{0,1}.{0,$((cmdLen - 1))}="
|
||||
if [[ $cmdLen -le 1 ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
filter="^'?.{1,$((cmdLen - 1))}'?=" # some aliases is surrounded by single quotes
|
||||
fi
|
||||
|
||||
alias | grep -E "$filter" | grep -E "=$finder"
|
||||
if (( $+commands[rg] )); then
|
||||
alias | rg "$filter" | rg "=$finder"
|
||||
else
|
||||
alias | grep -E "$filter" | grep -E "=$finder"
|
||||
fi
|
||||
|
||||
if [[ $exact == true ]]; then
|
||||
break # because exact case is only one
|
||||
elif [[ $longer = true ]]; then
|
||||
elif [[ $longer == true ]]; then
|
||||
break # because above grep command already found every longer aliases during first cycle
|
||||
fi
|
||||
|
||||
|
|
|
|||
|
|
@ -178,26 +178,27 @@ fi
|
|||
|
||||
# Check Arch Linux PGP Keyring before System Upgrade to prevent failure.
|
||||
function upgrade() {
|
||||
sudo pacman -Sy
|
||||
echo ":: Checking Arch Linux PGP Keyring..."
|
||||
local installedver="$(LANG= sudo pacman -Qi archlinux-keyring | grep -Po '(?<=Version : ).*')"
|
||||
local currentver="$(LANG= sudo pacman -Si archlinux-keyring | grep -Po '(?<=Version : ).*')"
|
||||
if [ $installedver != $currentver ]; then
|
||||
echo " Arch Linux PGP Keyring is out of date."
|
||||
echo " Updating before full system upgrade."
|
||||
sudo pacman -Sy --needed --noconfirm archlinux-keyring
|
||||
sudo pacman -S --needed --noconfirm archlinux-keyring
|
||||
else
|
||||
echo " Arch Linux PGP Keyring is up to date."
|
||||
echo " Proceeding with full system upgrade."
|
||||
fi
|
||||
if (( $+commands[yay] )); then
|
||||
yay -Syu
|
||||
yay -Su
|
||||
elif (( $+commands[trizen] )); then
|
||||
trizen -Syu
|
||||
trizen -Su
|
||||
elif (( $+commands[pacaur] )); then
|
||||
pacaur -Syu
|
||||
pacaur -Su
|
||||
elif (( $+commands[aura] )); then
|
||||
sudo aura -Syu
|
||||
sudo aura -Su
|
||||
else
|
||||
sudo pacman -Syu
|
||||
sudo pacman -Su
|
||||
fi
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,32 +1,48 @@
|
|||
## asdf
|
||||
# asdf
|
||||
|
||||
Adds integration with [asdf](https://github.com/asdf-vm/asdf), the extendable version manager, with support for Ruby, Node.js, Elixir, Erlang and more.
|
||||
|
||||
### Installation
|
||||
## Installation
|
||||
|
||||
1. [Download asdf](https://asdf-vm.com/guide/getting-started.html#_2-download-asdf) by running the following:
|
||||
|
||||
```
|
||||
git clone https://github.com/asdf-vm/asdf.git ~/.asdf
|
||||
```
|
||||
|
||||
2. [Enable asdf](https://asdf-vm.com/guide/getting-started.html#_3-install-asdf) by adding it to your `plugins` definition in `~/.zshrc`.
|
||||
|
||||
```
|
||||
plugins=(asdf)
|
||||
```
|
||||
|
||||
### Usage
|
||||
|
||||
See the [asdf documentation](https://asdf-vm.com/guide/getting-started.html#_4-install-a-plugin) for information on how to use asdf:
|
||||
1. [Install](https://asdf-vm.com/guide/getting-started.html#_1-install-asdf) asdf and ensure that's it's discoverable on `$PATH`;
|
||||
2. Enable it by adding it to your `plugins` definition in `~/.zshrc`:
|
||||
|
||||
```sh
|
||||
plugins=(asdf)
|
||||
```
|
||||
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
|
||||
|
||||
## Usage
|
||||
|
||||
Refer to the [asdf plugin documentation](https://asdf-vm.com/guide/getting-started.html#_4-install-a-plugin) for information on how to add a plugin and install the many runtime versions for it.
|
||||
|
||||
Example for installing the nodejs plugin and the many runtimes for it:
|
||||
|
||||
```sh
|
||||
# Add plugin to asdf
|
||||
asdf plugin add nodejs
|
||||
|
||||
# Install the latest available version
|
||||
asdf install nodejs latest
|
||||
asdf global nodejs latest
|
||||
asdf local nodejs latest
|
||||
|
||||
# Uninstall the latest version
|
||||
asdf uninstall nodejs latest
|
||||
|
||||
# Install a specific version
|
||||
asdf install nodejs 16.5.0
|
||||
|
||||
# Set the latest version in .tool-versions of the `current directory`
|
||||
asdf set nodejs latest
|
||||
|
||||
# Set a specific version in the `parent directory`
|
||||
asdf set -p nodejs 16.5.0 # -p is shorthand for --parent
|
||||
|
||||
# Set a global version under `$HOME`
|
||||
asdf set -u nodejs 16.5.0 # -u is shorthand for --home
|
||||
```
|
||||
|
||||
### Maintainer
|
||||
For more commands, run `asdf help` or refer to the
|
||||
[asdf CLI documentation](https://asdf-vm.com/manage/commands.html#all-commands).
|
||||
|
||||
## Maintainer
|
||||
|
||||
- [@RobLoach](https://github.com/RobLoach)
|
||||
|
|
|
|||
|
|
@ -1,30 +1,15 @@
|
|||
# Find where asdf should be installed
|
||||
ASDF_DIR="${ASDF_DIR:-$HOME/.asdf}"
|
||||
ASDF_COMPLETIONS="$ASDF_DIR/completions"
|
||||
(( ! $+commands[asdf] )) && return
|
||||
|
||||
if [[ ! -f "$ASDF_DIR/asdf.sh" || ! -f "$ASDF_COMPLETIONS/_asdf" ]]; then
|
||||
# If not found, check for archlinux/AUR package (/opt/asdf-vm/)
|
||||
if [[ -f "/opt/asdf-vm/asdf.sh" ]]; then
|
||||
ASDF_DIR="/opt/asdf-vm"
|
||||
ASDF_COMPLETIONS="$ASDF_DIR"
|
||||
# If not found, check for Homebrew package
|
||||
elif (( $+commands[brew] )); then
|
||||
_ASDF_PREFIX="$(brew --prefix asdf)"
|
||||
ASDF_DIR="${_ASDF_PREFIX}/libexec"
|
||||
ASDF_COMPLETIONS="${_ASDF_PREFIX}/share/zsh/site-functions"
|
||||
unset _ASDF_PREFIX
|
||||
else
|
||||
return
|
||||
fi
|
||||
fi
|
||||
export ASDF_DATA_DIR="${ASDF_DATA_DIR:-$HOME/.asdf}"
|
||||
|
||||
# Load command
|
||||
if [[ -f "$ASDF_DIR/asdf.sh" ]]; then
|
||||
source "$ASDF_DIR/asdf.sh"
|
||||
# Load completions
|
||||
if [[ -f "$ASDF_COMPLETIONS/_asdf" ]]; then
|
||||
fpath+=("$ASDF_COMPLETIONS")
|
||||
autoload -Uz _asdf
|
||||
compdef _asdf asdf # compdef is already loaded before loading plugins
|
||||
fi
|
||||
# Add shims to the front of the path, removing if already present.
|
||||
path=("$ASDF_DATA_DIR/shims" ${path:#$ASDF_DATA_DIR/shims})
|
||||
|
||||
# If the completion file doesn't exist yet, we need to autoload it and
|
||||
# bind it to `asdf`. Otherwise, compinit will have already done that.
|
||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_asdf" ]]; then
|
||||
typeset -g -A _comps
|
||||
autoload -Uz _asdf
|
||||
_comps[asdf]=_asdf
|
||||
fi
|
||||
asdf completion zsh >| "$ZSH_CACHE_DIR/completions/_asdf" &|
|
||||
|
|
|
|||
|
|
@ -19,6 +19,12 @@ For example:
|
|||
BATTERY_CHARGING="⚡️"
|
||||
```
|
||||
|
||||
You can see the power of your charger using the following setting (MacOS only)
|
||||
|
||||
```zsh
|
||||
BATTERY_SHOW_WATTS=true
|
||||
```
|
||||
|
||||
## Requirements
|
||||
|
||||
- On Linux, you must have the `acpi` or `acpitool` commands installed on your operating system.
|
||||
|
|
|
|||
|
|
@ -17,8 +17,13 @@
|
|||
# Modified to add support for OpenBSD #
|
||||
###########################################
|
||||
|
||||
: ${BATTERY_SHOW_WATTS:=false}
|
||||
|
||||
|
||||
if [[ "$OSTYPE" = darwin* ]]; then
|
||||
function get_charger_power() {
|
||||
echo "$(ioreg -rc AppleSmartBattery | grep -o '"Watts"=[0-9]\+' | head -1 | grep -o '[0-9]\+')W "
|
||||
}
|
||||
function battery_is_charging() {
|
||||
ioreg -rc AppleSmartBattery | command grep -q '^.*"ExternalConnected"\ =\ Yes'
|
||||
}
|
||||
|
|
@ -58,7 +63,10 @@ if [[ "$OSTYPE" = darwin* ]]; then
|
|||
fi
|
||||
echo "%{$fg[$color]%}[${battery_pct}%%]%{$reset_color%}"
|
||||
else
|
||||
echo "${BATTERY_CHARGING-⚡️}"
|
||||
if [[ "${BATTERY_SHOW_WATTS}" = "true" ]] ; then
|
||||
watts=$(get_charger_power)
|
||||
fi
|
||||
echo "${watts}${BATTERY_CHARGING-⚡️}"
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,9 +60,11 @@ function bgnotify_formatted {
|
|||
}
|
||||
|
||||
function bgnotify_appid {
|
||||
if (( ${+commands[osascript]} )); then
|
||||
osascript -e "tell application id \"$(bgnotify_programid)\" to get the {id, frontmost, id of front window, visible of front window}" 2>/dev/null
|
||||
elif [[ -n $WAYLAND_DISPLAY ]] && (( ${+commands[swaymsg]} )); then # wayland+sway
|
||||
if (( ${+commands[lsappinfo]} )); then
|
||||
lsappinfo info -only bundleid "$(lsappinfo front)" | awk -F= '{print $2}' | tr -d '"' 2>/dev/null
|
||||
elif (( ${+commands[osascript]} )); then
|
||||
osascript -e "tell application id \"$(bgnotify_programid)\" to get the {id, frontmost, id of front window, visible of front window}" 2>/dev/null
|
||||
elif [[ -n $WAYLAND_DISPLAY ]] && ([[ -n $SWAYSOCK ]] || [[ -n $I3SOCK ]]) && (( ${+commands[swaymsg]} )); then # wayland+sway
|
||||
local app_id=$(bgnotify_find_sway_appid)
|
||||
[[ -n "$app_id" ]] && echo "$app_id" || echo $EPOCHSECONDS
|
||||
elif [[ -z $WAYLAND_DISPLAY ]] && [[ -n $DISPLAY ]] && (( ${+commands[xprop]} )); then
|
||||
|
|
@ -108,6 +110,7 @@ function bgnotify_programid {
|
|||
case "$TERM_PROGRAM" in
|
||||
iTerm.app) echo 'com.googlecode.iterm2' ;;
|
||||
Apple_Terminal) echo 'com.apple.terminal' ;;
|
||||
ghostty) echo 'com.mitchellh.ghostty' ;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ function branch_prompt_info() {
|
|||
while [[ "$dir" != '/' ]]; do
|
||||
# Found .git directory
|
||||
if [[ -d "${dir}/.git" ]]; then
|
||||
branch="${"$(<"${dir}/.git/HEAD")"##*/}"
|
||||
branch="${"$(<"${dir}/.git/HEAD")"##ref: refs/heads/}"
|
||||
echo '±' "${branch:gs/%/%%}"
|
||||
return
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ the `brew` binary before sourcing `oh-my-zsh.sh` and it'll set up the environmen
|
|||
| Alias | Command | Description |
|
||||
| -------- | --------------------------------------- | --------------------------------------------------------------------- |
|
||||
| `ba` | `brew autoremove` | Uninstall unnecessary formulae. |
|
||||
| `bcfg` | `brew config` | Show Homebrew and system configuration info useful for debugging. |
|
||||
| `bci` | `brew info --cask` | Display information about the given cask. |
|
||||
| `bcin` | `brew install --cask` | Install the given cask. |
|
||||
| `bcl` | `brew list --cask` | List installed casks. |
|
||||
|
|
@ -31,13 +32,18 @@ the `brew` binary before sourcing `oh-my-zsh.sh` and it'll set up the environmen
|
|||
| `bcubc` | `brew upgrade --cask && brew cleanup` | Upgrade outdated casks, then run cleanup. |
|
||||
| `bcubo` | `brew update && brew outdated --cask` | Update Homebrew data, then list outdated casks. |
|
||||
| `bcup` | `brew upgrade --cask` | Upgrade all outdated casks. |
|
||||
| `bdr` | `brew doctor` | Check your system for potential problems. |
|
||||
| `bfu` | `brew upgrade --formula` | Upgrade only formulae (not casks). |
|
||||
| `bi` | `brew install` | Install a formula. |
|
||||
| `bih` | `brew install --HEAD` | Install a formula with --HEAD |
|
||||
| `bl` | `brew list` | List all installed formulae. |
|
||||
| `bo` | `brew outdated` | List installed formulae that have an updated version available. |
|
||||
| `br` | `brew reinstall` | Reinstall a formula. |
|
||||
| `brewp` | `brew pin` | Pin a specified formula so that it's not upgraded. |
|
||||
| `brews` | `brew list -1` | List installed formulae or the installed files for a given formula. |
|
||||
| `brewsp` | `brew list --pinned` | List pinned formulae, or show the version of a given formula. |
|
||||
| `brh` | `brew reinstall --HEAD` | Reinstall a formula with --HEAD |
|
||||
| `bs` | `brew search` | Perform a substring search of cask tokens and formula names for text. |
|
||||
| `bsl` | `brew services list` | List all running services. |
|
||||
| `bsoff` | `brew services stop` | Stop the service and unregister it from launching at login (or boot). |
|
||||
| `bsoffa` | `bsoff --all` | Stop all started services. |
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ if [[ -d "$HOMEBREW_PREFIX/share/zsh/site-functions" ]]; then
|
|||
fi
|
||||
|
||||
alias ba='brew autoremove'
|
||||
alias bcfg='brew config'
|
||||
alias bci='brew info --cask'
|
||||
alias bcin='brew install --cask'
|
||||
alias bcl='brew list --cask'
|
||||
|
|
@ -44,12 +45,17 @@ alias bcrin='brew reinstall --cask'
|
|||
alias bcubc='brew upgrade --cask && brew cleanup'
|
||||
alias bcubo='brew update && brew outdated --cask'
|
||||
alias bcup='brew upgrade --cask'
|
||||
alias bdr='brew doctor'
|
||||
alias bfu='brew upgrade --formula'
|
||||
alias bi='brew install'
|
||||
alias bih='brew install --HEAD'
|
||||
alias bl='brew list'
|
||||
alias bo='brew outdated'
|
||||
alias br='brew reinstall'
|
||||
alias brewp='brew pin'
|
||||
alias brewsp='brew list --pinned'
|
||||
alias brh='brew reinstall --HEAD'
|
||||
alias bs='brew search'
|
||||
alias bsl='brew services list'
|
||||
alias bsoff='brew services stop'
|
||||
alias bsoffa='bsoff --all'
|
||||
|
|
|
|||
|
|
@ -11,18 +11,18 @@ plugins=(... bundler)
|
|||
|
||||
## Aliases
|
||||
|
||||
| Alias | Command | Description |
|
||||
|--------|--------------------------------------|------------------------------------------------------------------------------------------|
|
||||
| `ba` | `bundle add` | Add gem to the Gemfile and run bundle install |
|
||||
| `bck` | `bundle check` | Verifies if dependencies are satisfied by installed gems |
|
||||
| `bcn` | `bundle clean` | Cleans up unused gems in your bundler directory |
|
||||
| `be` | `bundle exec` | Execute a command in the context of the bundle |
|
||||
| `bi` | `bundle install --jobs=<core_count>` | Install the dependencies specified in your Gemfile (using all cores in bundler >= 1.4.0) |
|
||||
| `bl` | `bundle list` | List all the gems in the bundle |
|
||||
| `bo` | `bundle open` | Opens the source directory for a gem in your bundle |
|
||||
| `bout` | `bundle outdated` | List installed gems with newer versions available |
|
||||
| `bp` | `bundle package` | Package your needed .gem files into your application |
|
||||
| `bu` | `bundle update` | Update your gems to the latest available versions |
|
||||
| Alias | Command | Description |
|
||||
| ------ | ----------------- | -------------------------------------------------------- |
|
||||
| `ba` | `bundle add` | Add gem to the Gemfile and run bundle install |
|
||||
| `bck` | `bundle check` | Verifies if dependencies are satisfied by installed gems |
|
||||
| `bcn` | `bundle clean` | Cleans up unused gems in your bundler directory |
|
||||
| `be` | `bundle exec` | Execute a command in the context of the bundle |
|
||||
| `bi` | `bundle install` | Install the dependencies specified in your Gemfile |
|
||||
| `bl` | `bundle list` | List all the gems in the bundle |
|
||||
| `bo` | `bundle open` | Opens the source directory for a gem in your bundle |
|
||||
| `bout` | `bundle outdated` | List installed gems with newer versions available |
|
||||
| `bp` | `bundle package` | Package your needed .gem files into your application |
|
||||
| `bu` | `bundle update` | Update your gems to the latest available versions |
|
||||
|
||||
## Gem wrapper
|
||||
|
||||
|
|
|
|||
|
|
@ -4,45 +4,13 @@ alias ba="bundle add"
|
|||
alias bck="bundle check"
|
||||
alias bcn="bundle clean"
|
||||
alias be="bundle exec"
|
||||
alias bi="bundle_install"
|
||||
alias bi="bundle install"
|
||||
alias bl="bundle list"
|
||||
alias bo="bundle open"
|
||||
alias bout="bundle outdated"
|
||||
alias bp="bundle package"
|
||||
alias bu="bundle update"
|
||||
|
||||
## Functions
|
||||
|
||||
bundle_install() {
|
||||
# Bail out if bundler is not installed
|
||||
if (( ! $+commands[bundle] )); then
|
||||
echo "Bundler is not installed"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Bail out if not in a bundled project
|
||||
if ! _within-bundled-project; then
|
||||
echo "Can't 'bundle install' outside a bundled project"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check the bundler version is at least 1.4.0
|
||||
autoload -Uz is-at-least
|
||||
local bundler_version=$(bundle version | cut -d' ' -f3)
|
||||
if ! is-at-least 1.4.0 "$bundler_version"; then
|
||||
bundle install "$@"
|
||||
return $?
|
||||
fi
|
||||
|
||||
# If bundler is at least 1.4.0, use all the CPU cores to bundle install
|
||||
if [[ "$OSTYPE" = (darwin|freebsd)* ]]; then
|
||||
local cores_num="$(sysctl -n hw.ncpu)"
|
||||
else
|
||||
local cores_num="$(nproc)"
|
||||
fi
|
||||
BUNDLE_JOBS="$cores_num" bundle install "$@"
|
||||
}
|
||||
|
||||
## Gem wrapper
|
||||
|
||||
bundled_commands=(
|
||||
|
|
|
|||
|
|
@ -15,6 +15,13 @@ _source-from-omz-settings() {
|
|||
fi
|
||||
}
|
||||
|
||||
_source-from-default-location() {
|
||||
[[ -r /usr/local/share/chruby/chruby.sh ]] || return 1
|
||||
|
||||
source /usr/local/share/chruby/chruby.sh
|
||||
source /usr/local/share/chruby/auto.sh
|
||||
}
|
||||
|
||||
_source-from-homebrew() {
|
||||
(( $+commands[brew] )) || return 1
|
||||
|
||||
|
|
@ -22,6 +29,8 @@ _source-from-homebrew() {
|
|||
# check default brew prefix
|
||||
if [[ -h /usr/local/opt/chruby ]];then
|
||||
_brew_prefix="/usr/local/opt/chruby"
|
||||
elif [[ -h /opt/homebrew/opt/chruby ]]; then
|
||||
_brew_prefix="/opt/homebrew/opt/chruby"
|
||||
else
|
||||
# ok , it is not default prefix
|
||||
# this call to brew is expensive ( about 400 ms ), so at least let's make it only once
|
||||
|
|
@ -34,27 +43,14 @@ _source-from-homebrew() {
|
|||
source $_brew_prefix/share/chruby/auto.sh
|
||||
}
|
||||
|
||||
_load-chruby-dirs() {
|
||||
local dir
|
||||
for dir in "$HOME/.rubies" "$PREFIX/opt/rubies"; do
|
||||
if [[ -d "$dir" ]]; then
|
||||
RUBIES+=("$dir")
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Load chruby
|
||||
if _source-from-omz-settings; then
|
||||
_load-chruby-dirs
|
||||
elif [[ -r "/usr/local/share/chruby/chruby.sh" ]] ; then
|
||||
source /usr/local/share/chruby/chruby.sh
|
||||
source /usr/local/share/chruby/auto.sh
|
||||
_load-chruby-dirs
|
||||
elif _source-from-homebrew; then
|
||||
_load-chruby-dirs
|
||||
fi
|
||||
_source-from-omz-settings || \
|
||||
_source-from-default-location || \
|
||||
_source-from-homebrew
|
||||
|
||||
unfunction _source-from-homebrew _source-from-omz-settings _load-chruby-dirs
|
||||
unfunction _source-from-homebrew \
|
||||
_source-from-default-location \
|
||||
_source-from-omz-settings
|
||||
|
||||
|
||||
## chruby utility functions and aliases
|
||||
|
|
|
|||
|
|
@ -36,3 +36,10 @@ Last login: Fri Jan 30 23:12:26 on ttys001
|
|||
- `cowsay` if using `chuck_cow`
|
||||
|
||||
Available via homebrew, apt, ...
|
||||
|
||||
> [!NOTE]
|
||||
> In addition to installing `fortune`, it may be necessary to run:
|
||||
>
|
||||
> `strfile $ZSH/plugins/chucknorris/fortunes/chucknorris\n`
|
||||
>
|
||||
> (include the "\n" literally) to write the fortune data to the proper directory.
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ function colored() {
|
|||
environment+=( PATH="${__colored_man_pages_dir}:$PATH" )
|
||||
fi
|
||||
|
||||
command env $environment "$@"
|
||||
command env "${environment[@]}" "$@"
|
||||
}
|
||||
|
||||
# Colorize man and dman/debman (from debian-goodies)
|
||||
|
|
|
|||
|
|
@ -22,14 +22,15 @@ Try: sudo apt install <selected package>
|
|||
|
||||
It works out of the box with the command-not-found packages for:
|
||||
|
||||
- [Ubuntu](https://www.porcheron.info/command-not-found-for-zsh/)
|
||||
- [Ubuntu](https://launchpad.net/ubuntu/+source/command-not-found)
|
||||
- [Debian](https://packages.debian.org/search?keywords=command-not-found)
|
||||
- [Arch Linux](https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found)
|
||||
- [macOS (Homebrew)](https://github.com/Homebrew/homebrew-command-not-found)
|
||||
- [Arch Linux](https://wiki.archlinux.org/title/Zsh#pkgfile_"command_not_found"_handler)
|
||||
- [macOS (Homebrew)](https://github.com/Homebrew/brew/blob/main/docs/Command-Not-Found.md)
|
||||
- [Fedora](https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound)
|
||||
- [NixOS](https://github.com/NixOS/nixpkgs/tree/master/nixos/modules/programs/command-not-found)
|
||||
- [Termux](https://github.com/termux/command-not-found)
|
||||
- [SUSE](https://www.unix.com/man-page/suse/1/command-not-found/)
|
||||
- [Gentoo](https://github.com/AndrewAmmerlaan/command-not-found-gentoo/tree/main)
|
||||
- [Void Linux](https://codeberg.org/classabbyamp/xbps-command-not-found)
|
||||
|
||||
You can add support for other platforms by submitting a Pull Request.
|
||||
|
|
|
|||
|
|
@ -1,9 +1,15 @@
|
|||
## Platforms with a built-in command-not-found handler init file
|
||||
|
||||
for file (
|
||||
# Arch Linux. Must have pkgfile installed: https://wiki.archlinux.org/index.php/Pkgfile#Command_not_found
|
||||
# Arch Linux. Must have pkgfile installed: https://wiki.archlinux.org/title/Zsh#pkgfile_"command_not_found"_handler
|
||||
/usr/share/doc/pkgfile/command-not-found.zsh
|
||||
# Homebrew: https://github.com/Homebrew/homebrew-command-not-found
|
||||
# Void Linux: https://codeberg.org/classabbyamp/xbps-command-not-found
|
||||
/usr/share/zsh/plugins/xbps-command-not-found/xbps-command-not-found.zsh
|
||||
# Homebrew: https://github.com/Homebrew/brew/blob/main/docs/Command-Not-Found.md
|
||||
/opt/homebrew/Library/Homebrew/command-not-found/handler.sh
|
||||
/usr/local/Homebrew/Library/Homebrew/command-not-found/handler.sh
|
||||
/home/linuxbrew/.linuxbrew/Homebrew/Library/Homebrew/command-not-found/handler.sh
|
||||
# Old homebrew implementation
|
||||
/opt/homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
|
||||
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
|
||||
/home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/homebrew/homebrew-command-not-found/handler.sh
|
||||
|
|
|
|||
|
|
@ -114,13 +114,13 @@ that file will be open with `acroread`.
|
|||
|
||||
### Listing files inside a packed file
|
||||
|
||||
| Alias | Command | Description |
|
||||
| ------ | ---------- | --------------------------------- |
|
||||
| zip | `unzip -l` | Lists files inside a .zip file |
|
||||
| rar | `unrar l` | Lists files inside a .rar file |
|
||||
| tar | `tar tf` | Lists files inside a .tar file |
|
||||
| tar.gz | `echo` | Lists files inside a .tar.gz file |
|
||||
| ace | `unace l` | Lists files inside a .ace file |
|
||||
| Alias | Command | Description |
|
||||
| ------ | ------------ | --------------------------------- |
|
||||
| zip | `unzip -l` | Lists files inside a .zip file |
|
||||
| rar | `unrar l` | Lists files inside a .rar file |
|
||||
| tar | `tar tf` | Lists files inside a .tar file |
|
||||
| tar.gz | `tar -ztf` | Lists files inside a .tar.gz file |
|
||||
| ace | `unace l` | Lists files inside a .ace file |
|
||||
|
||||
### Some other features
|
||||
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ alias cnl='conda list'
|
|||
alias cnle='conda list --export'
|
||||
alias cnles='conda list --explicit > spec-file.txt'
|
||||
alias cnr='conda remove'
|
||||
alias cnrn='conda remove -y -all -n'
|
||||
alias cnrp='conda remove -y -all -p'
|
||||
alias cnrn='conda remove -y --all -n'
|
||||
alias cnrp='conda remove -y --all -p'
|
||||
alias cnry='conda remove -y'
|
||||
alias cnsr='conda search'
|
||||
alias cnu='conda update'
|
||||
|
|
|
|||
|
|
@ -1,7 +1,19 @@
|
|||
# Copies the contents of a given file to the system or X Windows clipboard
|
||||
#
|
||||
# copyfile <file>
|
||||
# Usage: copyfile <file>
|
||||
function copyfile {
|
||||
emulate -L zsh
|
||||
|
||||
if [[ -z "$1" ]]; then
|
||||
echo "Usage: copyfile <file>"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$1" ]]; then
|
||||
echo "Error: '$1' is not a valid file."
|
||||
return 1
|
||||
fi
|
||||
|
||||
clipcopy $1
|
||||
echo ${(%):-"%B$1%b copied to clipboard."}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,9 +83,9 @@ else
|
|||
}
|
||||
alias ac="su -ls '$apt_pref clean' root"
|
||||
alias ad="su -lc '$apt_pref update' root"
|
||||
alias adg="su -lc '$apt_pref update && aptitude $apt_upgr' root"
|
||||
alias adu="su -lc '$apt_pref update && aptitude dist-upgrade' root"
|
||||
alias afu="su -lc '$apt-file update'"
|
||||
alias adg="su -lc '$apt_pref update && $apt_pref $apt_upgr' root"
|
||||
alias adu="su -lc '$apt_pref update && $apt_pref dist-upgrade' root"
|
||||
alias afu="su -lc 'apt-file update'"
|
||||
alias au="su -lc '$apt_pref $apt_upgr' root"
|
||||
function ai() {
|
||||
cmd="su -lc '$apt_pref install $@' root"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
# Don't continue if direnv is not found
|
||||
command -v direnv &>/dev/null || return
|
||||
# If direnv is not found, don't continue and print a warning
|
||||
if (( ! $+commands[direnv] )); then
|
||||
echo "Warning: direnv not found. Please install direnv and ensure it's in your PATH before using this plugin."
|
||||
return
|
||||
fi
|
||||
|
||||
_direnv_hook() {
|
||||
trap -- '' SIGINT;
|
||||
|
|
|
|||
|
|
@ -60,3 +60,46 @@ to `/usr` again.
|
|||
After that, <kbd>Alt</kbd> + <kbd>Down</kbd> will probably go to `/usr/bin` if `bin` is the first directory in alphabetical
|
||||
order (depends on your `/usr` folder structure). <kbd>Alt</kbd> + <kbd>Up</kbd> will return to `/usr`, and once more will get
|
||||
you to the root folder (`/`).
|
||||
|
||||
### cde
|
||||
|
||||
This plugin also provides a `cde` alias that allows you to change to a directory without clearing the next directory stack.
|
||||
This changes the default behavior of `dirhistory`, which is to clear the next directory stack when changing directories.
|
||||
|
||||
For example, if the shell was started, and the following commands were entered:
|
||||
|
||||
```shell
|
||||
cd ~
|
||||
cd /usr
|
||||
cd share
|
||||
cd doc
|
||||
|
||||
# <Alt + Left>
|
||||
# <Alt + Left>
|
||||
```
|
||||
|
||||
The directory stack would look like this:
|
||||
|
||||
```sh
|
||||
➜ /usr typeset -pm dirhistory_\*
|
||||
typeset -ax dirhistory_past=( /home/user /usr )
|
||||
typeset -ax dirhistory_future=( /usr/share/doc /usr/share )
|
||||
```
|
||||
|
||||
This means that pressing <kbd>Alt</kbd> + <kbd>Right</kbd>, you'd go to `/usr/share` and `/usr/share/doc` (the "future" directories).
|
||||
|
||||
If you run `cd /usr/bin`, the "future" directories will be removed, and you won't be able to access them with <kbd>Alt</kbd> + <kbd>Right</kbd>:
|
||||
|
||||
```sh
|
||||
➜ /u/bin typeset -pm dirhistory_\*
|
||||
typeset -ax dirhistory_past=( /home/user /usr )
|
||||
typeset -ax dirhistory_future=( /usr/bin )
|
||||
```
|
||||
|
||||
If you instead run `cde /usr/bin`, the "future" directories will be preserved:
|
||||
|
||||
```sh
|
||||
➜ /u/bin typeset -pm dirhistory_\*
|
||||
typeset -ax dirhistory_past=( /home/user /usr /usr/bin )
|
||||
typeset -ax dirhistory_future=( /usr/share/doc /usr/share )
|
||||
```
|
||||
|
|
|
|||
|
|
@ -11,9 +11,10 @@ dirhistory_past=($PWD)
|
|||
dirhistory_future=()
|
||||
export dirhistory_past
|
||||
export dirhistory_future
|
||||
|
||||
export DIRHISTORY_SIZE=30
|
||||
|
||||
alias cde='dirhistory_cd'
|
||||
|
||||
# Pop the last element of dirhistory_past.
|
||||
# Pass the name of the variable to return the result in.
|
||||
# Returns the element if the array was not empty,
|
||||
|
|
@ -136,7 +137,11 @@ for keymap in emacs vicmd viins; do
|
|||
|
||||
case "$TERM_PROGRAM" in
|
||||
Apple_Terminal) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # Terminal.app
|
||||
iTerm.app) bindkey -M $keymap "^[^[[D" dirhistory_zle_dirhistory_back ;; # iTerm2
|
||||
ghostty) bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back ;; # ghostty
|
||||
iTerm.app)
|
||||
bindkey -M $keymap "^[^[[D" dirhistory_zle_dirhistory_back
|
||||
bindkey -M $keymap "^[b" dirhistory_zle_dirhistory_back
|
||||
;;
|
||||
esac
|
||||
|
||||
if (( ${+terminfo[kcub1]} )); then
|
||||
|
|
@ -151,7 +156,11 @@ for keymap in emacs vicmd viins; do
|
|||
|
||||
case "$TERM_PROGRAM" in
|
||||
Apple_Terminal) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # Terminal.app
|
||||
iTerm.app) bindkey -M $keymap "^[^[[C" dirhistory_zle_dirhistory_future ;; # iTerm2
|
||||
ghostty) bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future ;; # ghostty
|
||||
iTerm.app)
|
||||
bindkey -M $keymap "^[^[[C" dirhistory_zle_dirhistory_future
|
||||
bindkey -M $keymap "^[f" dirhistory_zle_dirhistory_future
|
||||
;;
|
||||
esac
|
||||
|
||||
if (( ${+terminfo[kcuf1]} )); then
|
||||
|
|
@ -200,6 +209,7 @@ for keymap in emacs vicmd viins; do
|
|||
case "$TERM_PROGRAM" in
|
||||
Apple_Terminal) bindkey -M $keymap "^[[A" dirhistory_zle_dirhistory_up ;; # Terminal.app
|
||||
iTerm.app) bindkey -M $keymap "^[^[[A" dirhistory_zle_dirhistory_up ;; # iTerm2
|
||||
ghostty) bindkey -M $keymap "^[[1;3A" dirhistory_zle_dirhistory_up ;; # ghostty
|
||||
esac
|
||||
|
||||
if (( ${+terminfo[kcuu1]} )); then
|
||||
|
|
@ -215,6 +225,7 @@ for keymap in emacs vicmd viins; do
|
|||
case "$TERM_PROGRAM" in
|
||||
Apple_Terminal) bindkey -M $keymap "^[[B" dirhistory_zle_dirhistory_down ;; # Terminal.app
|
||||
iTerm.app) bindkey -M $keymap "^[^[[B" dirhistory_zle_dirhistory_down ;; # iTerm2
|
||||
ghostty) bindkey -M $keymap "^[[1;3B" dirhistory_zle_dirhistory_down ;; # ghostty
|
||||
esac
|
||||
|
||||
if (( ${+terminfo[kcud1]} )); then
|
||||
|
|
|
|||
570
plugins/dnf/_dnf5
Normal file
570
plugins/dnf/_dnf5
Normal file
|
|
@ -0,0 +1,570 @@
|
|||
#compdef dnf5
|
||||
# based on dnf-5.2.6.2
|
||||
|
||||
# utility functions
|
||||
|
||||
_dnf5_helper() {
|
||||
_call_program specs $service "${(q-)@}" "${(q-)PREFIX}\*" \
|
||||
-qC --assumeno --nogpgcheck 2>/dev/null </dev/null
|
||||
}
|
||||
|
||||
_dnf5_repositories() {
|
||||
# required option: -T (all|disabled|enabled)
|
||||
local selected expl
|
||||
zparseopts -D -E - T:=selected
|
||||
selected=$selected[2]
|
||||
_wanted $selected-repositories expl "$selected repository" \
|
||||
compadd "$@" - "${(@)${(f)$(_dnf5_helper repo list --$selected)}[2,-1]%% *}"
|
||||
}
|
||||
|
||||
_dnf5_packages() {
|
||||
# required option: -T (all|available|installed|upgradable)
|
||||
local selected opt expl
|
||||
zparseopts -D -E - T:=selected
|
||||
selected=$selected[2]
|
||||
case $selected in
|
||||
all) opt='' ;; # option --all does not exist
|
||||
upgradable) opt='--upgrades' ;;
|
||||
*) opt="--$selected" ;;
|
||||
esac
|
||||
_wanted $selected-packages expl "$selected package" \
|
||||
compadd "$@" - $(_dnf5_helper repoquery $opt --qf='%{name} ')
|
||||
}
|
||||
|
||||
_dnf5_rpm_files() {
|
||||
local expl
|
||||
_wanted rpm-files expl 'rpm file' _files -g '(#i)*.rpm(-.)'
|
||||
}
|
||||
|
||||
_dnf5_packages_or_rpms() {
|
||||
if [[ "$words[CURRENT]" = (*/*|\~*) ]]; then # if looks like a path name
|
||||
_dnf5_rpm_files
|
||||
else
|
||||
_dnf5_packages "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
_dnf5_groups() {
|
||||
# optional option: -T (available|installed)
|
||||
local update_policy selected line pat groups
|
||||
zparseopts -D -E - T:=selected
|
||||
selected=$selected[2]
|
||||
if [[ -z $selected ]]; then
|
||||
selected=all
|
||||
opt= # option --all does not exist
|
||||
else
|
||||
opt=--$selected
|
||||
fi
|
||||
# XXX hidden groups are not included
|
||||
for line in ${${(f)"$(_dnf5_helper group list $opt)"}[2,-1]}; do
|
||||
line=( ${(z)line} )
|
||||
groups+=( "$line[1]:$line[2,-2]" )
|
||||
done
|
||||
_describe -t $selected-groups "$selected group" groups
|
||||
}
|
||||
|
||||
_dnf5_environments() {
|
||||
local line envs
|
||||
for line in ${${(f)"$(_dnf5_helper environment list)"}[2,-1]}; do
|
||||
line=( ${(z)line} )
|
||||
envs+=( "$line[1]:$line[2,-2]" )
|
||||
done
|
||||
_describe -t environments 'environment' envs
|
||||
}
|
||||
|
||||
# completers for (several) dnf commands
|
||||
|
||||
_dnf5-advisory () {
|
||||
_arguments : \
|
||||
$advisory_opts \
|
||||
'--contains-pkgs=[only show advisories containing specified packages]: : _sequence _dnf5_packages -T installed' \
|
||||
+ '(with)' \
|
||||
'--with-cve[show only advisories referencing CVE ticket]' \
|
||||
'--with-bz[show only advisories referencing Bugzilla ticket]' \
|
||||
+ '(type)' \
|
||||
'--all[show all advisories]' \
|
||||
'--available[show advisories containing newer versions of installed packages (default)]' \
|
||||
'--installed[show advisories containing equal and older version of installed packages]' \
|
||||
'--updates[show advisories containing upgradable packages]' \
|
||||
+ args \
|
||||
':subcommand:(list info summary)' '*:advisory spec:'
|
||||
}
|
||||
|
||||
_dnf5-group() {
|
||||
local -a tmp
|
||||
if (( CURRENT == 2 )); then
|
||||
tmp=(
|
||||
'list:list all matching groups'
|
||||
'info:print detailed information about groups'
|
||||
'install:install packages from specified groups'
|
||||
'remove:remove removable packages in specified groups'
|
||||
'upgrade:upgrade specified groups and packages in them'
|
||||
)
|
||||
_describe -t subcommands 'subcommand' tmp
|
||||
else
|
||||
case $words[2] in
|
||||
list|info)
|
||||
tmp=(
|
||||
'(--installed)--available[show only available groups]'
|
||||
'(--available)--installed[show only installed groups]'
|
||||
'--hidden[show also hidden groups]'
|
||||
'--contains-pkgs=[show only groups containing specified packages]: : _sequence _dnf5_packages -T all'
|
||||
'*: : _dnf5_groups'
|
||||
)
|
||||
;;
|
||||
install)
|
||||
tmp=( $common_opts
|
||||
'--with-optional[include optional packages from the groups]'
|
||||
'*: : _dnf5_groups -T available' )
|
||||
;|
|
||||
upgrade)
|
||||
tmp=( ${common_opts:#--skip-broken*}
|
||||
'*: : _dnf5_groups -T installed' )
|
||||
;|
|
||||
remove)
|
||||
tmp=( $offline_opts
|
||||
'*: : _dnf5_groups -T installed' )
|
||||
;|
|
||||
install|remove)
|
||||
tmp+=( '--no-packages[operate on groups only, not manipulate any packages]' )
|
||||
;|
|
||||
install|upgrade)
|
||||
tmp+=( $downgrade_opts )
|
||||
;;
|
||||
esac
|
||||
_arguments : $tmp
|
||||
fi
|
||||
}
|
||||
|
||||
_dnf5-history() {
|
||||
local -a tmp
|
||||
if (( CURRENT == 2 )); then
|
||||
tmp=(
|
||||
'list:list info about recorded transactions'
|
||||
'info:print detailed about specific transactions'
|
||||
'undo:revert all actions from the specified transaction'
|
||||
'redo:repeat the specified transaction'
|
||||
'rollback:undo all transactions performed after the specified transaction'
|
||||
'store:store the transaction into a directory'
|
||||
)
|
||||
_describe -t subcommands 'subcommand' tmp
|
||||
else
|
||||
case $words[2] in
|
||||
list|info)
|
||||
tmp=( '--reverse[reverse the order of transactions in output]' )
|
||||
;;
|
||||
undo|rollback|redo)
|
||||
tmp=( '--skip-unavailable[allow skipping impossible actions]' )
|
||||
;|
|
||||
undo|rollback)
|
||||
tmp+=( $replay_opts )
|
||||
;;
|
||||
store)
|
||||
tmp=( {-o,--output=}'[directory for storing the transaction (default ./transaction)]: : _directories')
|
||||
esac
|
||||
_arguments : $tmp '2:transaction:( )'
|
||||
fi
|
||||
}
|
||||
|
||||
_dnf5-mark() {
|
||||
local -a tmp
|
||||
if (( CURRENT == 2 )); then
|
||||
tmp=(
|
||||
'user:mark the package as user-installed'
|
||||
'dependency:mark the package as a dependency'
|
||||
'weak:mark the package as a weak dependency'
|
||||
'group:mark the package as installed by the specified group'
|
||||
)
|
||||
_describe -t subcommands 'subcommand' tmp
|
||||
else
|
||||
tmp=(
|
||||
'--skip-unavailable[skip packages not installed on the system]'
|
||||
'--store=[store the transaction in specified directory]: : _directories'
|
||||
)
|
||||
if [[ $words[2] = group ]]; then
|
||||
tmp+=( '2:group-id: _dnf5_groups -T installed' )
|
||||
fi
|
||||
_arguments : $tmp '*: : _dnf5_packages -T installed'
|
||||
fi
|
||||
}
|
||||
|
||||
_dnf5-module() {
|
||||
local -a tmp
|
||||
if (( CURRENT == 2 )); then
|
||||
tmp=(
|
||||
'list:list module streams'
|
||||
'info:print details about module streams'
|
||||
'enable:enable module streams'
|
||||
'disable:disable modules including all their streams'
|
||||
"reset:reset module state so it's no longer enabled or disabled"
|
||||
)
|
||||
_describe -t subcommands 'subcommand' tmp
|
||||
elif (( CURRENT == 3 )) && [[ $cur = -* ]]; then
|
||||
case $words[2] in
|
||||
list|info) tmp=( --enabled --disabled ) ;;
|
||||
enable) tmp=( --skip-broken --skip-unavailable ) ;;
|
||||
*) tmp=( --skip-unavailable ) ;;
|
||||
esac
|
||||
_wanted options expl 'option' compadd -a tmp
|
||||
else
|
||||
_message 'module spec'
|
||||
fi
|
||||
}
|
||||
|
||||
_dnf5-offline() { # also used by the 'system-upgrade' command
|
||||
local -a tmp
|
||||
if (( CURRENT == 2 )); then
|
||||
tmp=(
|
||||
'clean:remove any stored offline transactions and cached packages'
|
||||
'log:list boots during which offline transaction was attempted'
|
||||
'reboot:prepare the system for offline transaction and reboot'
|
||||
)
|
||||
if [[ $cmd = offline ]]; then
|
||||
tmp+=( 'status:show status of the current offline transaction' )
|
||||
else
|
||||
tmp+=( 'download:download all packages needed for upgrade' )
|
||||
fi
|
||||
_describe -t subcommands 'subcommand' tmp && ret=0
|
||||
else
|
||||
case $words[2] in
|
||||
download)
|
||||
_arguments : \
|
||||
'--releasever=[the version to upgrade to]:version number:' \
|
||||
'--no-downgrade:do not install packages older than currently installed' '*: :' && ret=0
|
||||
;;
|
||||
log)
|
||||
_arguments : \
|
||||
'--number=[show log of transaction specified by number]:transaction number:' '*: :' && ret=0
|
||||
;;
|
||||
reboot)
|
||||
_wanted options expl 'option' compadd -- --poweroff && ret=0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
_dnf5-repoquery() {
|
||||
local v
|
||||
local -a opts=(
|
||||
$advisory_opts
|
||||
'--arch=[limit results to specified architectures]:list of archs: '
|
||||
'--available[limit results to available packages]'
|
||||
'--disable-modular-filtering[include packages of inactive module streams]'
|
||||
'--duplicates[limit to installed duplicate packages]'
|
||||
'--exactdeps[limit to packages that require capability specified by ==what{requires,depends}]'
|
||||
'--extras[limit to installed packages that are not present in any available repository]'
|
||||
'--file=[limit results to packages which own specified file]:list of files: _sequence _files'
|
||||
'--installed[query installed packages]'
|
||||
'--installonly[limit to installed installonly packages]'
|
||||
'--latest-limit=[limit to latest packages of specified number]:number:'
|
||||
'--leaves[limit to groups of installed packages not required by other installed packages]'
|
||||
'--providers-of=[select packages that provide specified attribute]:attribute:(conflicts depends enhances obsoletes provides recommends requires requires_pre suggests supplement)'
|
||||
'--recent[limit to only recently changed packages]'
|
||||
'--recursive[make --whatrequires/--providers-of work recursively]'
|
||||
'--security[limit to packages in security advisories]'
|
||||
'--srpm[use the corresponding source RPM]'
|
||||
'--unneeded[limit to unneeded installed packages]'
|
||||
'--upgrades[limit to available packages that provide upgrade for installed packages]'
|
||||
'--userinstalled[limit to packages that are not installed as dependencies]'
|
||||
'--whatdepends=[limit to packages that require, enhance, recommend, suggest of supplement specified capability]:list of capability:'
|
||||
'--whatconflicts=[limit to packages that conflicts with specified capabilities]:list of capability: '
|
||||
)
|
||||
for v in enhance obsolete provide recommend require suggest supplement; do
|
||||
opts+=( "--what${v}s=[limit to packages that $v specified capabilities]:list of capability: ")
|
||||
done
|
||||
# mutually exclusive formatting options
|
||||
opts+=(
|
||||
+ '(format)'
|
||||
'--conflicts[display capabilities that the package conflicts with]'
|
||||
'--depends[display capabilities that the package depends on, enables, recommends, suggests or supplements]'
|
||||
'--files[show files in the package]'
|
||||
'--requires-pre[display capabilities required to run pre/post scripts of the package]'
|
||||
'--sourcerpm[display source RPM of the package]'
|
||||
'--location[display location of the package]'
|
||||
'--info[show detailed information about the package]'
|
||||
'--changelogs[print the package changelogs]'
|
||||
'(- *)--querytags[list tags recognized by --queryformat]'
|
||||
'--queryformat=[specify output format]:format:'
|
||||
)
|
||||
for v in enhance obsolete provide recommend require suggest supplement; do
|
||||
opts+=( "--${v}s[display capabilities ${v}ed by the package]" )
|
||||
done
|
||||
|
||||
_arguments : '*: : _dnf5_packages -T all' $opts
|
||||
}
|
||||
|
||||
# dnf commands
|
||||
|
||||
_dnf5_commands() {
|
||||
local -a dnf_cmds=(
|
||||
'advisory:manage advisories'
|
||||
'autoremove:remove unneeded packages'
|
||||
'check:check for problems in package database'
|
||||
'check-upgrade:check for available package upgrades'
|
||||
'clean:remove or invalidate cached data'
|
||||
'distro-sync:up/downgrade installed packages to the latest available'
|
||||
'downgrade:downgrade packages'
|
||||
'download:download packages'
|
||||
'environment:manage comps environments'
|
||||
'group:manage comps groups'
|
||||
'history:manage transaction history'
|
||||
'info:provide detailed information about packages'
|
||||
'install:install packages'
|
||||
'leaves:list groups of leaf packages'
|
||||
'list:list installed or available packages'
|
||||
'makecache:generate the metadata cache'
|
||||
'mark:change the reason of an installed package'
|
||||
'module:manage modules'
|
||||
'offline:manage offline transactions'
|
||||
'provides:find what package provides the given value'
|
||||
'reinstall:reinstall packages'
|
||||
'remove:remove packages'
|
||||
'replay:replay stored transactions'
|
||||
'repo:manage repositories'
|
||||
'repoquery:search for packages in repositories'
|
||||
'search:search for packages using keywords'
|
||||
'swap:remove software and install another in the single transaction'
|
||||
'system-upgrade:upgrade the system to a new major release'
|
||||
'upgrade:upgrade packages'
|
||||
'versionlock:protect packages from updates to newer versions'
|
||||
)
|
||||
_describe -t dnf-commands 'dnf command' dnf_cmds
|
||||
}
|
||||
|
||||
# subcommands and options
|
||||
|
||||
_dnf5_subcmds_opts() {
|
||||
local cur=$words[CURRENT] cmd=$words[1] expl ret=1
|
||||
local -a tmp
|
||||
# common options
|
||||
local -a offline_opts=(
|
||||
'(--store)--offline[store the transaction to be performed offline]'
|
||||
'(--offline)--store=[store the transaction in specified directory]: : _directories'
|
||||
)
|
||||
local -a common_opts=(
|
||||
$offline_opts
|
||||
'--allowerasing[allow erasing of installed packages]'
|
||||
'--skip-broken[resolve dependency problems by skipping problematic packages]'
|
||||
"--skip-unavailable[skip packages that can't be synchronized]"
|
||||
'--downloadonly[download packages without executing transaction]'
|
||||
)
|
||||
local -a advisory_opts=(
|
||||
'--advisories=[consider only specified advisories]:list of advisories:'
|
||||
'--advisory-severities=[limit to advisories with specified severity]:severity:_sequence compadd - critical important moderate low none'
|
||||
'--bzs=[limit to advisories that fix specified Bugzilla ID]:list of Bugzilla ID:'
|
||||
'--cves=[limit to advisories that fix specified CVE ID]:list of CVD ID]:'
|
||||
'--security[limit to security advisories]'
|
||||
'--bugfix[limit to bugfix advisories]'
|
||||
'--enhancement[limit to enhancement advisories]'
|
||||
'--newpackage[limit to newpackage advisories]'
|
||||
)
|
||||
local -a downgrade_opts=(
|
||||
'(--no-allow-downgrade)--allow-downgrade[enable downgrade of dependencies]'
|
||||
'(--allow-downgrade)--no-allow-downgrade[disable downgrade of dependencies]'
|
||||
)
|
||||
local -a replay_opts=(
|
||||
'--ignore-extras[not consider extra packages]'
|
||||
'--ignore-installed[mismatches between installed and stored transaction are not errors]'
|
||||
)
|
||||
# Deal with some aliases (not comprehensive)
|
||||
case $cmd in
|
||||
check-updgrade) cmd=check-update;;
|
||||
dg) cmd=downgrade;;
|
||||
dsync) cmd=distro-sync;;
|
||||
grp) cmd=group;;
|
||||
if) cmd=info;;
|
||||
in) cmd=install;;
|
||||
ls) cmd=list;;
|
||||
mc) cmd=makecache;;
|
||||
rei) cmd=reinstall;;
|
||||
rm) cmd=remove ;;
|
||||
rq) cmd=repoquery;;
|
||||
se) cmd=search;;
|
||||
update|up) cmd=upgrade;;
|
||||
esac
|
||||
local curcontext="${curcontext%:*:*}:dnf-${cmd}:"
|
||||
|
||||
case $cmd in
|
||||
advisory|group|history|mark|module|offline|repoquery)
|
||||
_dnf5-$cmd && ret=0
|
||||
;;
|
||||
system-upgrade)
|
||||
_dnf5-offline && ret=0
|
||||
;;
|
||||
autoremove)
|
||||
_arguments : $offline_opts && ret=0
|
||||
;;
|
||||
check)
|
||||
_arguments : \
|
||||
'--dependencies[show missing dependencies and conflicts]' \
|
||||
'--duplicates[show duplicated packages]' \
|
||||
'--obsoleted[show obsoleted packages]' && ret=0
|
||||
;;
|
||||
check-upgrade)
|
||||
_arguments : \
|
||||
$advisory_opts \
|
||||
'--changelogs[print package changelogs]' \
|
||||
'--minimal[reports the lowest versions of packages that fix advisories]' \
|
||||
'*: : _dnf5_packages -T installed' && ret=0
|
||||
;;
|
||||
clean)
|
||||
tmp=(
|
||||
'dbcache:remove cache files generated from the repository metadata'
|
||||
'expire-cache:mark the repository metadata expired'
|
||||
'metadata:remove the repository metadata'
|
||||
'packages:remove any cached packages'
|
||||
'all:clean all'
|
||||
)
|
||||
_describe -t cache-types 'cache type' tmp && ret=0
|
||||
;;
|
||||
distro-sync)
|
||||
_arguments : $common_opts '*: : _dnf5_packages -T installed' && ret=0
|
||||
;;
|
||||
downgrade)
|
||||
_arguments : \
|
||||
$common_opts $downgrade_opts \
|
||||
'*: : _dnf5_packages -T installed' && ret=0
|
||||
;;
|
||||
download)
|
||||
_arguments : \
|
||||
'--arch=[limit to packages of specified architecture]:list of architectures:' \
|
||||
'--resolve[resolve and download needed dependencies]' \
|
||||
'--alldeps[with --resolve, also download already installed dependencies]' \
|
||||
'--destdir=[download to the specified directory]: : _directories' \
|
||||
'--srpm[download the source rpm]' \
|
||||
'--url[print the list of URLs where the rpms can be downloaded]' \
|
||||
'*--urlprotocol=[with --url, limit to specified protocols]:protocol:_sequence compadd - http https ftp file' \
|
||||
'*: : _dnf5_packages -T all' && ret=0
|
||||
;;
|
||||
environment)
|
||||
_arguments : \
|
||||
'--available[show only available environments]' \
|
||||
'--installed[show only installed environments]' \
|
||||
':subcommand:(list info)' \
|
||||
'*: : _dnf5_environments' && ret=0
|
||||
;;
|
||||
info|list)
|
||||
_arguments : \
|
||||
'--showduplicates[show all versions of the packages]' \
|
||||
'*: : _dnf5_packages -T all' \
|
||||
+ '(type)' \
|
||||
'--installed[list only installed packages]:*: : _dnf5_packages -T installed' \
|
||||
'--available[list only available packages]:*: : _dnf5_packages -T available' \
|
||||
'--extras[list only extras]' \
|
||||
'--obsoletes[list only installed but obsoleted packages]:*: : _dnf5_packages -T installed' \
|
||||
'--recent[list only recently added packages]' \
|
||||
'--upgrades[list only available upgrades of installed packages]:*: : _dnf5_packages -T upgradable' \
|
||||
'--autoremove[list only packages that will be autoremoved]:*: : _dnf5_packages -T installed' &&ret=0
|
||||
;;
|
||||
install)
|
||||
_arguments : \
|
||||
$common_opts $downgrade_opts $advisory_opts \
|
||||
'*: : _dnf5_packages_or_rpms -T available' && ret=0
|
||||
;;
|
||||
leaves|makecache)
|
||||
# nothing to complete
|
||||
;;
|
||||
provides)
|
||||
_files && ret=0
|
||||
;;
|
||||
reinstall)
|
||||
_arguments : \
|
||||
$common_opts $downgrade_opts \
|
||||
'*: : _dnf5_packages_or_rpms -T installed' && ret=0
|
||||
;;
|
||||
remove)
|
||||
_arguments : \
|
||||
$offline_opts \
|
||||
'--no-autoremove[not remove dependencies that are no longer used]' \
|
||||
'*: : _dnf5_packages -T installed' && ret=0
|
||||
;;
|
||||
replay)
|
||||
_arguments : \
|
||||
$replay_opts \
|
||||
':transaction path:_directories' && ret=0
|
||||
;;
|
||||
repo)
|
||||
_arguments : \
|
||||
'--all[show info about all repositories]' \
|
||||
'--enabled[show info only about enabled repositories]' \
|
||||
'--disabled[show info only about disabled repositories]' \
|
||||
':subcommand:(list info)' && ret=0
|
||||
;;
|
||||
search)
|
||||
_arguments : \
|
||||
'--all[search patterns also inside description and URL fields]' \
|
||||
'--showduplicates[show all versions of packages, not only the latest ones]' \
|
||||
'*:search pattern:' && ret=0
|
||||
;;
|
||||
swap)
|
||||
_arguments : \
|
||||
$offline_opts \
|
||||
'--allowerasing[allow erasing of installed packages]' \
|
||||
': : _dnf5_packages -T installed' \
|
||||
': : _dnf5_packages -T available' && ret=0
|
||||
;;
|
||||
upgrade)
|
||||
_arguments : \
|
||||
${common_opts:#--skip-broken*} $downgrade_opts $advisory_opts \
|
||||
'--minimal[upgrade only to the lowest available versions that fix advisories]' \
|
||||
'--destdir=[specify directory into which downloading packages]: : _directories' \
|
||||
'*: : _dnf5_packages_or_rpms -T upgradable' && ret=0
|
||||
;;
|
||||
versionlock)
|
||||
_arguments : \
|
||||
':subcommand:(add exclude clear delete list)' \
|
||||
'*: : _dnf5_packages -T all' && ret=0
|
||||
;;
|
||||
esac
|
||||
return ret
|
||||
}
|
||||
|
||||
# main completer
|
||||
|
||||
_dnf5() {
|
||||
local curcontext="$curcontext" state state_descr line ret=1
|
||||
typeset -A opt_args
|
||||
local -a opts=(
|
||||
'(-y --assumeyes)--assumeno[answer no for all questions]'
|
||||
'--best[try the best available package version]'
|
||||
'(-C --cacheonly)'{-C,--cacheonly}"[run entirely from system cache, don't update cache]"
|
||||
'--comment=[add comment to transaction history]:comment:'
|
||||
'(-c --config)'{-c+,--config=}'[specify configuration file]:config file:_files'
|
||||
'--debugsolver[dump detailed solving results in file ./debugdata]'
|
||||
'*--disable-plugin=[disable specified plugins]:list of plugin names:'
|
||||
'(--repo)*--disable-repo=[disable specified repos]: : _sequence _dnf5_repositories -T enabled'
|
||||
'--dump-main-config[print main configuration values to stdout]'
|
||||
'*--dump-repo-config=[print repository configuration values to stdout]:repi id'
|
||||
'--dump-variables[print variable values to stdout]'
|
||||
'*--enable-plugin=[enable specified plugins]:list of plugin names:'
|
||||
'*--enable-repo=[enable additional repos]: : _sequence _dnf5_repositories -T disabled'
|
||||
'--forcearch=[force the use of the specified arch]:arch:'
|
||||
'(-)'{-h,--help}'[show the help message]'
|
||||
'--installroot=[set install root]: : _directories'
|
||||
'--no-best[do not limit transactions to best candidates]'
|
||||
'--no-docs[do not install documentation]'
|
||||
'--no-gpgcheck[skip checking GPG signatures on packages]'
|
||||
'--no-plugins[disable all plugins]'
|
||||
'(-q --quiet)'{-q,--quiet}'[show just the relevant content]'
|
||||
'--refresh[force refreshing metadata before running the command]'
|
||||
'--releasever=[override distribution release in config files]:release ver:'
|
||||
'(--disablerepo)*--repo=[enable just the specified repo]: : _sequence _dnf5_repositories -T all'
|
||||
'*--repofrompath=[specify additional repos]:repository_label,path_or_url: '
|
||||
'*--setopt=[override option in config file]:repoid.option=value:'
|
||||
'*--setvar=[override DNF5 variable value]'
|
||||
'--show-new-leaves[show newly installed leaf packages]'
|
||||
'--use-host-config[use config files and variables from host system]'
|
||||
'(- *)--version[show dnf version]'
|
||||
'(-y --assumeyes --assumeno)'{-y,--assumeyes}'[answer yes for all questions]'
|
||||
'*'{-x+,--exclude=}'[exclude specified packages from transaction]: : _sequence _dnf5_packages -T all'
|
||||
)
|
||||
_arguments -C -s : $opts ': :->command' '*:: :->cmd_args' && ret=0
|
||||
|
||||
case $state in
|
||||
command) _dnf5_commands && ret=0 ;;
|
||||
cmd_args) _dnf5_subcmds_opts && ret=0 ;;
|
||||
esac
|
||||
return ret
|
||||
}
|
||||
|
||||
_dnf5 "$@"
|
||||
|
|
@ -6,14 +6,22 @@ command -v dnf5 > /dev/null && dnfprog=dnf5
|
|||
|
||||
alias dnfl="${dnfprog} list" # List packages
|
||||
alias dnfli="${dnfprog} list installed" # List installed packages
|
||||
alias dnfgl="${dnfprog} grouplist" # List package groups
|
||||
alias dnfmc="${dnfprog} makecache" # Generate metadata cache
|
||||
alias dnfp="${dnfprog} info" # Show package information
|
||||
alias dnfs="${dnfprog} search" # Search package
|
||||
|
||||
alias dnfu="sudo ${dnfprog} upgrade" # Upgrade package
|
||||
alias dnfi="sudo ${dnfprog} install" # Install package
|
||||
alias dnfgi="sudo ${dnfprog} groupinstall" # Install package group
|
||||
alias dnfr="sudo ${dnfprog} remove" # Remove package
|
||||
alias dnfgr="sudo ${dnfprog} groupremove" # Remove package group
|
||||
alias dnfc="sudo ${dnfprog} clean all" # Clean cache
|
||||
|
||||
# Conditional aliases based on dnfprog value
|
||||
if [[ "${dnfprog}" == "dnf5" ]]; then
|
||||
alias dnfgl="${dnfprog} group list" # List package groups (dnf5)
|
||||
alias dnfgi="sudo ${dnfprog} group install" # Install package group (dnf5)
|
||||
alias dnfgr="sudo ${dnfprog} group remove" # Remove package group (dnf5)
|
||||
else
|
||||
alias dnfgl="${dnfprog} grouplist" # List package groups (dnf)
|
||||
alias dnfgi="sudo ${dnfprog} groupinstall" # Install package group (dnf)
|
||||
alias dnfgr="sudo ${dnfprog} groupremove" # Remove package group (dnf)
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
This plugin provides completion for [docker-compose](https://docs.docker.com/compose/) as well as some
|
||||
aliases for frequent docker-compose commands.
|
||||
This plugin chooses automatically between the legacy `docker-compose` command and the modern
|
||||
`docker compose` subcommand, preferring `docker-compose` when both are available.
|
||||
|
||||
To use it, add docker-compose to the plugins array of your zshrc file:
|
||||
|
||||
|
|
|
|||
|
|
@ -39,6 +39,10 @@ following setting. See https://github.com/ohmyzsh/ohmyzsh/issues/11789 for more
|
|||
zstyle ':omz:plugins:docker' legacy-completion yes
|
||||
```
|
||||
|
||||
### For Podman's Docker wrapper users
|
||||
|
||||
If you use Podman's Docker wrapper, you need to enable legacy completion. See above section.
|
||||
|
||||
## Aliases
|
||||
|
||||
| Alias | Command | Description |
|
||||
|
|
@ -47,6 +51,7 @@ zstyle ':omz:plugins:docker' legacy-completion yes
|
|||
| dcin | `docker container inspect` | Display detailed information on one or more containers |
|
||||
| dcls | `docker container ls` | List all the running docker containers |
|
||||
| dclsa | `docker container ls -a` | List all running and stopped containers |
|
||||
| dcprune | `docker container prune` | Remove all stopped containers |
|
||||
| dib | `docker image build` | Build an image from a Dockerfile (same as docker build) |
|
||||
| dii | `docker image inspect` | Display detailed information on one or more images |
|
||||
| dils | `docker image ls` | List docker images |
|
||||
|
|
@ -60,6 +65,7 @@ zstyle ':omz:plugins:docker' legacy-completion yes
|
|||
| dndcn | `docker network disconnect` | Disconnect a container from a network |
|
||||
| dni | `docker network inspect` | Return information about one or more networks |
|
||||
| dnls | `docker network ls` | List all networks the engine daemon knows about, including those spanning multiple hosts |
|
||||
| dnprune | `docker network prune` | Remove all unused networks |
|
||||
| dnrm | `docker network rm` | Remove one or more networks |
|
||||
| dpo | `docker container port` | List port mappings or a specific mapping for the container |
|
||||
| dps | `docker ps` | List all the running docker containers |
|
||||
|
|
@ -69,10 +75,12 @@ zstyle ':omz:plugins:docker' legacy-completion yes
|
|||
| drit | `docker container run -it` | Create a new container and start it in an interactive shell |
|
||||
| drm | `docker container rm` | Remove the specified container(s) |
|
||||
| drm! | `docker container rm -f` | Force the removal of a running container (uses SIGKILL) |
|
||||
| dsprune | `docker system prune` | Remove unused data |
|
||||
| dst | `docker container start` | Start one or more stopped containers |
|
||||
| drs | `docker container restart` | Restart one or more containers |
|
||||
| dsta | `docker stop $(docker ps -q)` | Stop all running containers |
|
||||
| dstp | `docker container stop` | Stop one or more running containers |
|
||||
| dsts | `docker stats` | Display real-time streaming statistics for containers |
|
||||
| dtop | `docker top` | Display the running processes of a container |
|
||||
| dvi | `docker volume inspect` | Display detailed information about one or more volumes |
|
||||
| dvls | `docker volume ls` | List all the volumes known to docker |
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ alias dbl='docker build'
|
|||
alias dcin='docker container inspect'
|
||||
alias dcls='docker container ls'
|
||||
alias dclsa='docker container ls -a'
|
||||
alias dcprune='docker container prune'
|
||||
alias dib='docker image build'
|
||||
alias dii='docker image inspect'
|
||||
alias dils='docker image ls'
|
||||
|
|
@ -15,6 +16,7 @@ alias dncn='docker network connect'
|
|||
alias dndcn='docker network disconnect'
|
||||
alias dni='docker network inspect'
|
||||
alias dnls='docker network ls'
|
||||
alias dnprune='docker network prune'
|
||||
alias dnrm='docker network rm'
|
||||
alias dpo='docker container port'
|
||||
alias dps='docker ps'
|
||||
|
|
@ -24,10 +26,12 @@ alias dr='docker container run'
|
|||
alias drit='docker container run -it'
|
||||
alias drm='docker container rm'
|
||||
alias 'drm!'='docker container rm -f'
|
||||
alias dsprune='docker system prune'
|
||||
alias dst='docker container start'
|
||||
alias drs='docker container restart'
|
||||
alias dsta='docker stop $(docker ps -q)'
|
||||
alias dstp='docker container stop'
|
||||
alias dsts='docker stats'
|
||||
alias dtop='docker top'
|
||||
alias dvi='docker volume inspect'
|
||||
alias dvls='docker volume ls'
|
||||
|
|
|
|||
|
|
@ -78,6 +78,14 @@ change.
|
|||
NOTE: if a directory is found in both the allowed and disallowed lists, the disallowed list
|
||||
takes preference, _i.e._ the .env file will never be sourced.
|
||||
|
||||
## Named Pipe (FIFO) Support
|
||||
|
||||
The plugin supports `.env` files provided as UNIX named pipes (FIFOs) in addition to regular files.
|
||||
This is useful when secrets managers like [1Password Environments](https://developer.1password.com/docs/environment/)
|
||||
mount `.env` files as named pipes to inject secrets on-the-fly without writing them to disk.
|
||||
|
||||
No additional configuration is required — the plugin automatically detects and sources named pipes.
|
||||
|
||||
## Version Control
|
||||
|
||||
**It's strongly recommended to add `.env` file to `.gitignore`**, because usually it contains sensitive information such as your credentials, secret keys, passwords etc. You don't want to commit this file, it's supposed to be local only.
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
## Functions
|
||||
|
||||
source_env() {
|
||||
if [[ ! -f "$ZSH_DOTENV_FILE" ]]; then
|
||||
if [[ ! -f "$ZSH_DOTENV_FILE" ]] && [[ ! -p "$ZSH_DOTENV_FILE" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# .NET Core CLI plugin
|
||||
# .NET CLI plugin
|
||||
|
||||
This plugin provides completion and useful aliases for [.NET Core CLI](https://dotnet.microsoft.com/).
|
||||
This plugin provides completion and useful aliases for [.NET CLI](https://dotnet.microsoft.com/).
|
||||
|
||||
To use it, add `dotnet` to the plugins array in your zshrc file.
|
||||
|
||||
|
|
@ -23,3 +23,4 @@ plugins=(... dotnet)
|
|||
| dp | dotnet pack | Create a NuGet package. |
|
||||
| dng | dotnet nuget | Provides additional NuGet commands. |
|
||||
| db | dotnet build | Build a .NET project |
|
||||
| dres | dotnet restore | Restore dependencies and project-specific tools for a project. |
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ _dotnet_completion() {
|
|||
|
||||
compdef _dotnet_completion dotnet
|
||||
|
||||
# Aliases bellow are here for backwards compatibility
|
||||
# Aliases below are here for backwards compatibility
|
||||
# added by Shaun Tabone (https://github.com/xontab)
|
||||
|
||||
alias dn='dotnet new'
|
||||
|
|
@ -24,3 +24,4 @@ alias da='dotnet add'
|
|||
alias dp='dotnet pack'
|
||||
alias dng='dotnet nuget'
|
||||
alias db='dotnet build'
|
||||
alias dres='dotnet restore'
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ alias eeval="$EMACS_PLUGIN_LAUNCHER --eval"
|
|||
alias eframe='emacsclient --alternate-editor="" --create-frame'
|
||||
|
||||
# Emacs ANSI Term tracking
|
||||
if [[ -n "$INSIDE_EMACS" ]]; then
|
||||
if [[ -n "$INSIDE_EMACS" ]] && [[ "$INSIDE_EMACS" != "vterm" ]]; then
|
||||
chpwd_emacs() { print -P "\033AnSiTc %d"; }
|
||||
print -P "\033AnSiTc %d" # Track current working directory
|
||||
print -P "\033AnSiTu %n" # Track username
|
||||
|
|
|
|||
|
|
@ -29,5 +29,5 @@ plugins=(... ember-cli)
|
|||
|
||||
- [BilalBudhani](https://github.com/BilalBudhani)
|
||||
- [eubenesa](https://github.com/eubenesa)
|
||||
- [scottkidder](https://github.com/scottkidder]
|
||||
- [scottkidder](https://github.com/scottkidder)
|
||||
- [t-sauer](https://www.github.com/t-sauer)
|
||||
|
|
|
|||
|
|
@ -14,53 +14,56 @@ plugins=(... extract)
|
|||
|
||||
## Supported file extensions
|
||||
|
||||
| Extension | Description |
|
||||
| :---------------- | :----------------------------------- |
|
||||
| `7z` | 7zip file |
|
||||
| `Z` | Z archive (LZW) |
|
||||
| `apk` | Android app file |
|
||||
| `aar` | Android library file |
|
||||
| `bz2` | Bzip2 file |
|
||||
| `cab` | Microsoft cabinet archive |
|
||||
| `cpio` | Cpio archive |
|
||||
| `deb` | Debian package |
|
||||
| `ear` | Enterprise Application aRchive |
|
||||
| `exe` | Windows executable file |
|
||||
| `gz` | Gzip file |
|
||||
| `ipa` | iOS app package |
|
||||
| `ipsw` | iOS firmware file |
|
||||
| `jar` | Java Archive |
|
||||
| `lrz` | LRZ archive |
|
||||
| `lz4` | LZ4 archive |
|
||||
| `lzma` | LZMA archive |
|
||||
| `obscpio` | cpio archive used on OBS |
|
||||
| `rar` | WinRAR archive |
|
||||
| `rpm` | RPM package |
|
||||
| `sublime-package` | Sublime Text package |
|
||||
| `tar` | Tarball |
|
||||
| `tar.bz2` | Tarball with bzip2 compression |
|
||||
| `tar.gz` | Tarball with gzip compression |
|
||||
| `tar.lrz` | Tarball with lrzip compression |
|
||||
| `tar.lz` | Tarball with lzip compression |
|
||||
| `tar.lz4` | Tarball with lz4 compression |
|
||||
| `tar.xz` | Tarball with lzma2 compression |
|
||||
| `tar.zma` | Tarball with lzma compression |
|
||||
| `tar.zst` | Tarball with zstd compression |
|
||||
| `tbz` | Tarball with bzip compression |
|
||||
| `tbz2` | Tarball with bzip2 compression |
|
||||
| `tgz` | Tarball with gzip compression |
|
||||
| `tlz` | Tarball with lzma compression |
|
||||
| `txz` | Tarball with lzma2 compression |
|
||||
| `tzst` | Tarball with zstd compression |
|
||||
| `vsix` | VS Code extension zip file |
|
||||
| `war` | Web Application archive (Java-based) |
|
||||
| `whl` | Python wheel file |
|
||||
| `xpi` | Mozilla XPI module file |
|
||||
| `xz` | LZMA2 archive |
|
||||
| `zip` | Zip archive |
|
||||
| `zlib` | zlib archive |
|
||||
| `zst` | Zstandard file (zstd) |
|
||||
| `zpaq` | Zpaq file |
|
||||
| Extension | Description |
|
||||
| :---------------- | :-------------------------------------- |
|
||||
| `7z` | 7zip file |
|
||||
| `apk` | Android app file |
|
||||
| `aar` | Android library file |
|
||||
| `bz2` | Bzip2 file |
|
||||
| `cab` | Microsoft cabinet archive |
|
||||
| `cpio` | Cpio archive |
|
||||
| `deb` | Debian package |
|
||||
| `ear` | Enterprise Application aRchive |
|
||||
| `exe` | Windows executable file |
|
||||
| `gz` | Gzip file |
|
||||
| `ipa` | iOS app package |
|
||||
| `ipsw` | iOS firmware file |
|
||||
| `jar` | Java Archive |
|
||||
| `lrz` | LRZ archive |
|
||||
| `lz4` | LZ4 archive |
|
||||
| `lzma` | LZMA archive |
|
||||
| `obscpio` | cpio archive used on OBS |
|
||||
| `pk3` | Renamed Zip archive used by Quake games |
|
||||
| `pk4` | Renamed Zip archive used by Quake games |
|
||||
| `pk7` | Renamed 7zip file used by Quake games |
|
||||
| `rar` | WinRAR archive |
|
||||
| `rpm` | RPM package |
|
||||
| `sublime-package` | Sublime Text package |
|
||||
| `tar` | Tarball |
|
||||
| `tar.bz2` | Tarball with bzip2 compression |
|
||||
| `tar.gz` | Tarball with gzip compression |
|
||||
| `tar.lrz` | Tarball with lrzip compression |
|
||||
| `tar.lz` | Tarball with lzip compression |
|
||||
| `tar.lz4` | Tarball with lz4 compression |
|
||||
| `tar.xz` | Tarball with lzma2 compression |
|
||||
| `tar.zma` | Tarball with lzma compression |
|
||||
| `tar.zst` | Tarball with zstd compression |
|
||||
| `tbz` | Tarball with bzip compression |
|
||||
| `tbz2` | Tarball with bzip2 compression |
|
||||
| `tgz` | Tarball with gzip compression |
|
||||
| `tlz` | Tarball with lzma compression |
|
||||
| `txz` | Tarball with lzma2 compression |
|
||||
| `tzst` | Tarball with zstd compression |
|
||||
| `vsix` | VS Code extension zip file |
|
||||
| `war` | Web Application archive (Java-based) |
|
||||
| `whl` | Python wheel file |
|
||||
| `xpi` | Mozilla XPI module file |
|
||||
| `xz` | LZMA2 archive |
|
||||
| `Z` | Z archive (LZW) |
|
||||
| `zip` | Zip archive |
|
||||
| `zlib` | zlib archive |
|
||||
| `zst` | Zstandard file (zstd) |
|
||||
| `zpaq` | Zpaq file |
|
||||
|
||||
See [list of archive formats](https://en.wikipedia.org/wiki/List_of_archive_formats) for more information
|
||||
regarding archive formats.
|
||||
|
|
|
|||
|
|
@ -19,6 +19,9 @@ local -a exts=(
|
|||
lz4
|
||||
lzma
|
||||
obscpio
|
||||
pk3
|
||||
pk4
|
||||
pk7
|
||||
rar
|
||||
rpm
|
||||
sublime-package
|
||||
|
|
|
|||
|
|
@ -76,11 +76,19 @@ EOF
|
|||
(*.lz4) lz4 -d "$full_path" ;;
|
||||
(*.lzma) unlzma "$full_path" ;;
|
||||
(*.z) uncompress "$full_path" ;;
|
||||
(*.zip|*.war|*.jar|*.ear|*.sublime-package|*.ipa|*.ipsw|*.xpi|*.apk|*.aar|*.whl|*.vsix|*.crx) unzip "$full_path" ;;
|
||||
(*.rar) unrar x -ad "$full_path" ;;
|
||||
(*.zip|*.war|*.jar|*.ear|*.sublime-package|*.ipa|*.ipsw|*.xpi|*.apk|*.aar|*.whl|*.vsix|*.crx|*.pk3|*.pk4) unzip "$full_path" ;;
|
||||
(*.rar)
|
||||
if (( $+commands[unrar] )); then
|
||||
unrar x -ad "$full_path"
|
||||
elif (( $+commands[unar] )); then
|
||||
unar -o . "$full_path"
|
||||
else
|
||||
echo "extract: cannot extract RAR files: install unrar or unar" >&2
|
||||
success=1
|
||||
fi ;;
|
||||
(*.rpm)
|
||||
rpm2cpio "$full_path" | cpio --quiet -id ;;
|
||||
(*.7z | *.7z.[0-9]*) 7za x "$full_path" ;;
|
||||
(*.7z | *.7z.[0-9]* | *.pk7) 7za x "$full_path" ;;
|
||||
(*.deb)
|
||||
command mkdir -p "control" "data"
|
||||
ar vx "$full_path" > /dev/null
|
||||
|
|
|
|||
|
|
@ -65,6 +65,29 @@ If `yes`, sets the `--icons` option of `eza`, adding icons for files and folders
|
|||
|
||||
Default: `no`
|
||||
|
||||
### `color-scale`
|
||||
|
||||
```zsh
|
||||
zstyle ':omz:plugins:eza' 'color-scale' all|age|size
|
||||
```
|
||||
|
||||
Highlight levels of field(s) distinctly. Use comma(,) separated list of `all`, `age`, `size`
|
||||
|
||||
Default: `none`
|
||||
|
||||
### `color-scale-mode`
|
||||
|
||||
```zsh
|
||||
zstyle ':omz:plugins:eza' 'color-scale-mode' gradient|fixed
|
||||
```
|
||||
|
||||
Choose the mode for highlighting:
|
||||
|
||||
- `gradient` (default) -- gradient coloring
|
||||
- `fixed` -- fixed coloring
|
||||
|
||||
Default: `gradient`
|
||||
|
||||
### `size-prefix`
|
||||
|
||||
```zsh
|
||||
|
|
|
|||
|
|
@ -34,6 +34,14 @@ function _configure_eza() {
|
|||
if zstyle -t ':omz:plugins:eza' 'icons'; then
|
||||
_EZA_TAIL+=("--icons=auto")
|
||||
fi
|
||||
zstyle -s ':omz:plugins:eza' 'color-scale' _val
|
||||
if [[ $_val ]]; then
|
||||
_EZA_TAIL+=("--color-scale=$_val")
|
||||
fi
|
||||
zstyle -s ':omz:plugins:eza' 'color-scale-mode' _val
|
||||
if [[ $_val == (gradient|fixed) ]]; then
|
||||
_EZA_TAIL+=("--color-scale-mode=$_val")
|
||||
fi
|
||||
zstyle -s ':omz:plugins:eza' 'time-style' _val
|
||||
if [[ $_val ]]; then
|
||||
_EZA_TAIL+=("--time-style='$_val'")
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
# Fig plugin
|
||||
|
||||
This plugin sets up completion for [Fig](https://fig.io/).
|
||||
|
||||
To use it, add `fig` to the plugins array in your zshrc file:
|
||||
|
||||
```zsh
|
||||
plugins=(... fig)
|
||||
```
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
if ! (( $+commands[fig] )); then
|
||||
return
|
||||
fi
|
||||
|
||||
# If the completion file doesn't exist yet, we need to autoload it and
|
||||
# bind it to `fig`. Otherwise, compinit will have already done that
|
||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_fig" ]]; then
|
||||
autoload -Uz _fig
|
||||
typeset -g -A _comps
|
||||
_comps[fig]=_fig
|
||||
fi
|
||||
|
||||
fig completion zsh >| "$ZSH_CACHE_DIR/completions/_fig" &|
|
||||
|
|
@ -26,4 +26,4 @@ if [[ ! -f "$ZSH_CACHE_DIR/completions/_flutter" ]]; then
|
|||
_comps[flutter]=_flutter
|
||||
fi
|
||||
|
||||
flutter zsh-completion >| "$ZSH_CACHE_DIR/completions/_flutter" &|
|
||||
flutter zsh-completion < /dev/null >| "$ZSH_CACHE_DIR/completions/_flutter" &|
|
||||
35
plugins/foot/README.md
Normal file
35
plugins/foot/README.md
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# foot
|
||||
|
||||
This plugin adds shell integration for [foot, a fast, lightweight and
|
||||
minimalistic Wayland terminal emulator](https://codeberg.org/dnkl/foot).
|
||||
|
||||
To use, add `foot` to the list of plugins in your `.zshrc` file:
|
||||
|
||||
```zsh
|
||||
plugins=(... foot)
|
||||
```
|
||||
|
||||
## Spawning new terminal instances in the current working directory
|
||||
|
||||
When spawning a new terminal instance (with `ctrl+shift+n` by default), the new
|
||||
instance will start in the current working directory.
|
||||
|
||||
## Jumping between prompts
|
||||
|
||||
Foot can move the current viewport to focus prompts of already executed
|
||||
commands (bound to ctrl+shift+z/x by default).
|
||||
|
||||
## Piping last command's output
|
||||
|
||||
The key binding `pipe-command-output` can pipe the last command's output to an
|
||||
application of your choice (similar to the other `pipe-*` key bindings):
|
||||
|
||||
```
|
||||
[key-bindings]
|
||||
pipe-command-output=[sh -c "f=$(mktemp); cat - > $f; footclient emacsclient -nw $f; rm $f"] Control+Shift+g
|
||||
```
|
||||
|
||||
When pressing ctrl+shift+g, the last command's output is written to a
|
||||
temporary file, then an emacsclient is started in a new footclient instance.
|
||||
The temporary file is removed after the footclient instance has closed.
|
||||
|
||||
10
plugins/foot/foot.plugin.zsh
Normal file
10
plugins/foot/foot.plugin.zsh
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
function precmd {
|
||||
print -Pn "\e]133;A\e\\"
|
||||
if ! builtin zle; then
|
||||
print -n "\e]133;D\e\\"
|
||||
fi
|
||||
}
|
||||
|
||||
function preexec {
|
||||
print -n "\e]133;C\e\\"
|
||||
}
|
||||
|
|
@ -18,7 +18,7 @@ You can change the fetch interval in your .zshrc:
|
|||
GIT_AUTO_FETCH_INTERVAL=1200 # in seconds
|
||||
```
|
||||
|
||||
A log of `git fetch --all` will be saved in `.git/FETCH_LOG`.
|
||||
A log of `git-fetch-all` will be saved in `.git/FETCH_LOG`.
|
||||
|
||||
## Toggle auto-fetch per folder
|
||||
|
||||
|
|
|
|||
|
|
@ -23,9 +23,10 @@ def get_tagname_or_hash():
|
|||
return hash_
|
||||
return None
|
||||
|
||||
# Re-use method from https://github.com/magicmonty/bash-git-prompt to get stashs count
|
||||
# Re-use method from https://github.com/magicmonty/bash-git-prompt to get stash count
|
||||
# Use `--git-common-dir` to avoid problems with git worktrees, which don't have individual stashes
|
||||
def get_stash():
|
||||
cmd = Popen(['git', 'rev-parse', '--git-dir'], stdout=PIPE, stderr=PIPE)
|
||||
cmd = Popen(['git', 'rev-parse', '--git-common-dir'], stdout=PIPE, stderr=PIPE)
|
||||
so, se = cmd.communicate()
|
||||
stash_file = '%s%s' % (so.decode('utf-8').rstrip(), '/logs/refs/stash')
|
||||
|
||||
|
|
@ -35,7 +36,6 @@ def get_stash():
|
|||
except IOError:
|
||||
return 0
|
||||
|
||||
|
||||
# `git status --porcelain --branch` can collect all information
|
||||
# branch, remote_branch, untracked, staged, changed, conflicts, ahead, behind
|
||||
po = Popen(['git', 'status', '--porcelain', '--branch'], env=dict(os.environ, LANG="C"), stdout=PIPE, stderr=PIPE)
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ plugins=(... git)
|
|||
| `gcss` | `git commit -S -s` |
|
||||
| `gcssm` | `git commit -S -s -m` |
|
||||
| `gcf` | `git config --list` |
|
||||
| `gcfu` | `git commit --fixup` |
|
||||
| `gdct` | `git describe --tags $(git rev-list --tags --max-count=1)` |
|
||||
| `gd` | `git diff` |
|
||||
| `gdca` | `git diff --cached` |
|
||||
|
|
@ -90,7 +91,7 @@ plugins=(... git)
|
|||
| `gdnolock` | `git diff $@ ":(exclude)package-lock.json" ":(exclude)\*.lock"` |
|
||||
| `gdt` | `git diff-tree --no-commit-id --name-only -r` |
|
||||
| `gf` | `git fetch` |
|
||||
| `gfa` | `git fetch --all --tags --prune` |
|
||||
| `gfa` | `git fetch --all --tags --prune` |
|
||||
| `gfo` | `git fetch origin` |
|
||||
| `gg` | `git gui citool` |
|
||||
| `gga` | `git gui citool --amend` |
|
||||
|
|
@ -212,7 +213,7 @@ plugins=(... git)
|
|||
| `gtv` | `git tag \| sort -V` |
|
||||
| `gignore` | `git update-index --assume-unchanged` |
|
||||
| `gunignore` | `git update-index --no-assume-unchanged` |
|
||||
| `gwch` | `git whatchanged -p --abbrev-commit --pretty=medium` |
|
||||
| `gwch` | `git log --patch --abbrev-commit --pretty=medium --raw` |
|
||||
| `gwt` | `git worktree` |
|
||||
| `gwtls` | `git worktree list` |
|
||||
| `gwtmv` | `git worktree move` |
|
||||
|
|
@ -233,40 +234,26 @@ branch exists. We do this via the function `git_main_branch`.
|
|||
These are aliases that have been removed, renamed, or otherwise modified in a way that may, or may not,
|
||||
receive further support.
|
||||
|
||||
| Alias | Command | Modification |
|
||||
| :------- | :-------------------------------------------------------- | :-------------------------------------------------------- |
|
||||
| `gap` | `git add --patch` | New alias: `gapa`. |
|
||||
| `gcl` | `git config --list` | New alias: `gcf`. |
|
||||
| `gdc` | `git diff --cached` | New alias: `gdca`. |
|
||||
| `gdt` | `git difftool` | No replacement. |
|
||||
| `ggpull` | `git pull origin $(current_branch)` | New alias: `ggl`. (`ggpull` still exists for now though.) |
|
||||
| `ggpur` | `git pull --rebase origin $(current_branch)` | New alias: `ggu`. (`ggpur` still exists for now though.) |
|
||||
| `ggpush` | `git push origin $(current_branch)` | New alias: `ggp`. (`ggpush` still exists for now though.) |
|
||||
| `gk` | `gitk --all --branches` | Now aliased to `gitk --all --branches`. |
|
||||
| `glg` | `git log --stat --max-count=10` | Now aliased to `git log --stat --color`. |
|
||||
| `glgg` | `git log --graph --max-count=10` | Now aliased to `git log --graph --color`. |
|
||||
| `gwc` | `git whatchanged -p --abbrev-commit --pretty = medium` | New alias: `gwch`. |
|
||||
| `gup` | `git pull --rebase` | now alias `gpr` |
|
||||
| `gupv` | `git pull --rebase -v` | now alias `gprv` |
|
||||
| `gupa` | `git pull --rebase --autostash` | now alias `gpra` |
|
||||
| `gupav` | `git pull --rebase --autostash -v` | now alias `gprav` |
|
||||
| `gupom` | `git pull --rebase origin $(git_main_branch)` | now alias `gprom` |
|
||||
| `gupomi` | `git pull --rebase=interactive origin $(git_main_branch)` | now alias `gpromi` |
|
||||
| Alias | Command | Modification |
|
||||
| :------- | :-------------------------------------------------------- | :-----------------------------------------------------|
|
||||
| `gap` | `git add --patch` | New alias: `gapa` |
|
||||
| `gcl` | `git config --list` | New alias: `gcf` |
|
||||
| `gdt` | `git difftool` | No replacement |
|
||||
|
||||
## Functions
|
||||
|
||||
### Current
|
||||
|
||||
| Command | Description |
|
||||
| :----------------------- | :-------------------------------------------------------------------------------------------------------------- |
|
||||
| `current_branch` | Returns the name of the current branch. |
|
||||
| `git_current_user_email` | Returns the `user.email` config value. (Lives in `lib/git.zsh`.) |
|
||||
| `git_current_user_name` | Returns the `user.name` config value. (Lives in `lib/git.zsh`.) |
|
||||
| `git_develop_branch` | Returns the name of the “development” branch: `dev`, `devel`, `development` if they exist, `develop` otherwise. |
|
||||
| `git_main_branch` | Returns the name of the main branch: `main` if it exists, `master` otherwise. |
|
||||
| `grename <old> <new>` | Renames branch `<old>` to `<new>`, including on the origin remote. |
|
||||
| `gbda` | Deletes all merged branches |
|
||||
| `gbds` | Deletes all squash-merged branches (**Note: performance degrades with number of branches**) |
|
||||
| Command | Description |
|
||||
| :----------------------- | :------------------------------------------------------------------------------------------------------------- |
|
||||
| `git_current_branch` | Returns the name of the current branch (Lives in `lib/git.zsh`) |
|
||||
| `git_current_user_email` | Returns the `user.email` config value (Lives in `lib/git.zsh`) |
|
||||
| `git_current_user_name` | Returns the `user.name` config value (Lives in `lib/git.zsh`) |
|
||||
| `git_develop_branch` | Returns the name of the “development” branch: `dev`, `devel`, `development` if they exist, `develop` otherwise |
|
||||
| `git_main_branch` | Returns the name of the main branch: `main` if it exists, `master` otherwise |
|
||||
| `grename <old> <new>` | Renames branch `<old>` to `<new>`, including on the origin remote |
|
||||
| `gbda` | Deletes all merged branches |
|
||||
| `gbds` | Deletes all squash-merged branches (**Note: performance degrades with number of branches**) |
|
||||
|
||||
### Work in Progress (WIP)
|
||||
|
||||
|
|
@ -286,4 +273,3 @@ Note that `gwip` and `gunwip` are aliases, but are also documented here to group
|
|||
|
||||
| Command | Description | Reason |
|
||||
| :------------------- | :-------------------------------------- | :--------------------------------------------------------------- |
|
||||
| `current_repository` | Return the names of the current remotes | Didn't work properly. Use `git remote -v` instead (`grv` alias). |
|
||||
|
|
|
|||
|
|
@ -8,14 +8,6 @@ git_version="${${(As: :)$(git version 2>/dev/null)}[3]}"
|
|||
# (order should follow README)
|
||||
#
|
||||
|
||||
# The name of the current branch
|
||||
# Back-compatibility wrapper for when this function was defined here in
|
||||
# the plugin, before being pulled in to core lib/git.zsh as git_current_branch()
|
||||
# to fix the core -> git plugin dependency.
|
||||
function current_branch() {
|
||||
git_current_branch
|
||||
}
|
||||
|
||||
# Check for develop and similarly named branches
|
||||
function git_develop_branch() {
|
||||
command git rev-parse --git-dir &>/dev/null || return
|
||||
|
|
@ -31,16 +23,26 @@ function git_develop_branch() {
|
|||
return 1
|
||||
}
|
||||
|
||||
# Check if main exists and use instead of master
|
||||
# Get the default branch name from common branch names or fallback to remote HEAD
|
||||
function git_main_branch() {
|
||||
command git rev-parse --git-dir &>/dev/null || return
|
||||
local ref
|
||||
|
||||
local remote ref
|
||||
|
||||
for ref in refs/{heads,remotes/{origin,upstream}}/{main,trunk,mainline,default,stable,master}; do
|
||||
if command git show-ref -q --verify $ref; then
|
||||
echo ${ref:t}
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
# Fallback: try to get the default branch from remote HEAD symbolic refs
|
||||
for remote in origin upstream; do
|
||||
ref=$(command git rev-parse --abbrev-ref $remote/HEAD 2>/dev/null)
|
||||
if [[ $ref == $remote/* ]]; then
|
||||
echo ${ref#"$remote/"}; return 0
|
||||
fi
|
||||
done
|
||||
|
||||
# If no main branch was found, fall back to master but return error
|
||||
echo master
|
||||
|
|
@ -86,13 +88,13 @@ function work_in_progress() {
|
|||
# Aliases
|
||||
# (sorted alphabetically by command)
|
||||
# (order should follow README)
|
||||
# (in some cases force the alisas order to match README, like for example gke and gk)
|
||||
# (in some cases force the alias order to match README, like for example gke and gk)
|
||||
#
|
||||
|
||||
alias grt='cd "$(git rev-parse --show-toplevel || echo .)"'
|
||||
|
||||
function ggpnp() {
|
||||
if [[ "$#" == 0 ]]; then
|
||||
if [[ $# == 0 ]]; then
|
||||
ggl && ggp
|
||||
else
|
||||
ggl "${*}" && ggp "${*}"
|
||||
|
|
@ -200,6 +202,7 @@ alias gc!='git commit --verbose --amend'
|
|||
alias gcn='git commit --verbose --no-edit'
|
||||
alias gcn!='git commit --verbose --no-edit --amend'
|
||||
alias gcf='git config --list'
|
||||
alias gcfu='git commit --fixup'
|
||||
alias gdct='git describe --tags $(git rev-list --tags --max-count=1)'
|
||||
alias gd='git diff'
|
||||
alias gdca='git diff --cached'
|
||||
|
|
@ -269,10 +272,11 @@ alias gpra='git pull --rebase --autostash'
|
|||
alias gprav='git pull --rebase --autostash -v'
|
||||
|
||||
function ggu() {
|
||||
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
|
||||
git pull --rebase origin "${b:=$1}"
|
||||
local b
|
||||
[[ $# != 1 ]] && b="$(git_current_branch)"
|
||||
git pull --rebase origin "${b:-$1}"
|
||||
}
|
||||
compdef _git ggu=git-checkout
|
||||
compdef _git ggu=git-pull
|
||||
|
||||
alias gprom='git pull --rebase origin $(git_main_branch)'
|
||||
alias gpromi='git pull --rebase=interactive origin $(git_main_branch)'
|
||||
|
|
@ -281,14 +285,15 @@ alias gprumi='git pull --rebase=interactive upstream $(git_main_branch)'
|
|||
alias ggpull='git pull origin "$(git_current_branch)"'
|
||||
|
||||
function ggl() {
|
||||
if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
|
||||
if [[ $# != 0 ]] && [[ $# != 1 ]]; then
|
||||
git pull origin "${*}"
|
||||
else
|
||||
[[ "$#" == 0 ]] && local b="$(git_current_branch)"
|
||||
git pull origin "${b:=$1}"
|
||||
local b
|
||||
[[ $# == 0 ]] && b="$(git_current_branch)"
|
||||
git pull origin "${b:-$1}"
|
||||
fi
|
||||
}
|
||||
compdef _git ggl=git-checkout
|
||||
compdef _git ggl=git-pull
|
||||
|
||||
alias gluc='git pull upstream $(git_current_branch)'
|
||||
alias glum='git pull upstream $(git_main_branch)'
|
||||
|
|
@ -296,10 +301,11 @@ alias gp='git push'
|
|||
alias gpd='git push --dry-run'
|
||||
|
||||
function ggf() {
|
||||
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
|
||||
git push --force origin "${b:=$1}"
|
||||
local b
|
||||
[[ $# != 1 ]] && b="$(git_current_branch)"
|
||||
git push --force origin "${b:-$1}"
|
||||
}
|
||||
compdef _git ggf=git-checkout
|
||||
compdef _git ggf=git-push
|
||||
|
||||
alias gpf!='git push --force'
|
||||
is-at-least 2.30 "$git_version" \
|
||||
|
|
@ -307,10 +313,11 @@ is-at-least 2.30 "$git_version" \
|
|||
|| alias gpf='git push --force-with-lease'
|
||||
|
||||
function ggfl() {
|
||||
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
|
||||
git push --force-with-lease origin "${b:=$1}"
|
||||
local b
|
||||
[[ $# != 1 ]] && b="$(git_current_branch)"
|
||||
git push --force-with-lease origin "${b:-$1}"
|
||||
}
|
||||
compdef _git ggfl=git-checkout
|
||||
compdef _git ggfl=git-push
|
||||
|
||||
alias gpsup='git push --set-upstream origin $(git_current_branch)'
|
||||
is-at-least 2.30 "$git_version" \
|
||||
|
|
@ -322,14 +329,15 @@ alias gpod='git push origin --delete'
|
|||
alias ggpush='git push origin "$(git_current_branch)"'
|
||||
|
||||
function ggp() {
|
||||
if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
|
||||
if [[ $# != 0 ]] && [[ $# != 1 ]]; then
|
||||
git push origin "${*}"
|
||||
else
|
||||
[[ "$#" == 0 ]] && local b="$(git_current_branch)"
|
||||
git push origin "${b:=$1}"
|
||||
local b
|
||||
[[ $# == 0 ]] && b="$(git_current_branch)"
|
||||
git push origin "${b:-$1}"
|
||||
fi
|
||||
}
|
||||
compdef _git ggp=git-checkout
|
||||
compdef _git ggp=git-push
|
||||
|
||||
alias gpu='git push upstream'
|
||||
alias grb='git rebase'
|
||||
|
|
@ -398,7 +406,7 @@ alias gts='git tag --sign'
|
|||
alias gtv='git tag | sort -V'
|
||||
alias gignore='git update-index --assume-unchanged'
|
||||
alias gunignore='git update-index --no-assume-unchanged'
|
||||
alias gwch='git whatchanged -p --abbrev-commit --pretty=medium'
|
||||
alias gwch='git log --patch --abbrev-commit --pretty=medium --raw'
|
||||
alias gwt='git worktree'
|
||||
alias gwta='git worktree add'
|
||||
alias gwtls='git worktree list'
|
||||
|
|
@ -411,19 +419,13 @@ alias gke='\gitk --all $(git log --walk-reflogs --pretty=%h) &!'
|
|||
|
||||
unset git_version
|
||||
|
||||
# Logic for adding warnings on deprecated aliases
|
||||
local old_alias new_alias
|
||||
for old_alias new_alias (
|
||||
# TODO(2023-10-19): remove deprecated `git pull --rebase` aliases
|
||||
gup gpr
|
||||
gupv gprv
|
||||
gupa gpra
|
||||
gupav gprav
|
||||
gupom gprom
|
||||
gupomi gpromi
|
||||
# Logic for adding warnings on deprecated aliases or functions
|
||||
local old_name new_name
|
||||
for old_name new_name (
|
||||
current_branch git_current_branch
|
||||
); do
|
||||
aliases[$old_alias]="
|
||||
print -Pu2 \"%F{yellow}[oh-my-zsh] '%F{red}${old_alias}%F{yellow}' is a deprecated alias, using '%F{green}${new_alias}%F{yellow}' instead.%f\"
|
||||
$new_alias"
|
||||
aliases[$old_name]="
|
||||
print -Pu2 \"%F{yellow}[oh-my-zsh] '%F{red}${old_name}%F{yellow}' is deprecated, using '%F{green}${new_name}%F{yellow}' instead.%f\"
|
||||
$new_name"
|
||||
done
|
||||
unset old_alias new_alias
|
||||
unset old_name new_name
|
||||
|
|
|
|||
40
plugins/gitfast/MANUAL.adoc
Normal file
40
plugins/gitfast/MANUAL.adoc
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
This project is a friendly fork of the official Git completion
|
||||
(`contrib/completion`) and prompt scripts for Bash, Zsh, and possibly other
|
||||
shells.
|
||||
|
||||
Most Git developers use the Bash shell, for which the completion scripts work
|
||||
rather well, however, Zsh is typically neglected. I've sent many patches to fix
|
||||
the issues, many have been merged, but many have been ignored, thus the need for
|
||||
a canonical location of a good, working Zsh completion.
|
||||
|
||||
There are advantages for Bash users too. Currently the scripts under `contrib` are tied to the
|
||||
specific Git version, for example the completion scripts of version v2.40
|
||||
(https://git.kernel.org/pub/scm/git/git.git/plain/contrib/completion/git-completion.bash?h=v2.40.0[git-completion.bash])
|
||||
have issues with older versions of Git (e.g. v2.33); the ones in
|
||||
this project don't.
|
||||
|
||||
With `git-completion` you can be sure you are using the latest completion that
|
||||
works in both shells, and any Git version.
|
||||
|
||||
This is a sister project of the
|
||||
https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/gitfast[Oh My Zsh
|
||||
gitfast] plugin (that I also maintain), which has similar needs.
|
||||
|
||||
== Installation ==
|
||||
|
||||
* https://github.com/felipec/git-completion/wiki/Bash[Bash instructions]
|
||||
* https://github.com/felipec/git-completion/wiki/Zsh[Zsh instructions]
|
||||
|
||||
== Improvements from upstream ==
|
||||
|
||||
This is a short list of the benefits you get:
|
||||
|
||||
* Easier installation
|
||||
* Tons of bug fixes
|
||||
* Works with older versions of git
|
||||
* Zsh: much more options
|
||||
* Zsh: quoting works properly
|
||||
* Zsh: automatic suffix removal
|
||||
|
||||
For a full list of all the patches on top of upstream git check
|
||||
https://github.com/felipec/git-completion/wiki/Patches[Patches].
|
||||
|
|
@ -2,23 +2,11 @@
|
|||
|
||||
# zsh completion wrapper for git
|
||||
#
|
||||
# Copyright (c) 2012-2020 Felipe Contreras <felipe.contreras@gmail.com>
|
||||
# Copyright (c) 2012-2024 Felipe Contreras <felipe.contreras@gmail.com>
|
||||
#
|
||||
# The recommended way to install this script is to make a copy of it as a
|
||||
# file named '_git' inside any directory in your fpath.
|
||||
# The recommended way to use this script is to prepend its location to your $fpath:
|
||||
#
|
||||
# For example, create a directory '~/.zsh/', copy this file to '~/.zsh/_git',
|
||||
# and then add the following to your ~/.zshrc file:
|
||||
#
|
||||
# fpath=(~/.zsh $fpath)
|
||||
#
|
||||
# You need git's bash completion script installed. By default bash-completion's
|
||||
# location will be used (e.g. pkg-config --variable=completionsdir bash-completion).
|
||||
#
|
||||
# If your bash completion script is somewhere else, you can specify the
|
||||
# location in your ~/.zshrc:
|
||||
#
|
||||
# zstyle ':completion:*:*:git:*' script ~/.git-completion.bash
|
||||
# fpath=($git_completion_srcdir $fpath)
|
||||
#
|
||||
|
||||
zstyle -T ':completion:*:*:git:*' tag-order && \
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
# bash/zsh completion support for core Git.
|
||||
#
|
||||
# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
|
||||
# Copyright (c) 2012-2024 Felipe Contreras <felipe.contreras@gmail.com>
|
||||
#
|
||||
# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
|
||||
# Distributed under the GNU General Public License, version 2.0.
|
||||
#
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# gitignore
|
||||
|
||||
This plugin enables you the use of [gitignore.io](https://www.toptal.com/developers/gitignore) from the command line. You need an active internet connection.
|
||||
This plugin enables you to use [gitignore.io](https://www.gitignore.io) from the command line. You need an active internet connection to fetch templates. The plugin uses the gitignore.io CDN endpoint to simplify access and improve reliability.
|
||||
|
||||
To use it, add `gitignore` to the plugins array in your zshrc file:
|
||||
|
||||
|
|
@ -14,4 +14,4 @@ plugins=(... gitignore)
|
|||
|
||||
* `gi [TEMPLATENAME]`: Show git-ignore output on the command line, e.g. `gi java` to exclude class and package files.
|
||||
|
||||
* `gi [TEMPLATENAME] >> .gitignore`: Appending programming language settings to your projects .gitignore.
|
||||
* `gi [TEMPLATENAME] >> .gitignore`: Append the template rules to your project's `.gitignore` file.
|
||||
|
|
|
|||
|
|
@ -1,12 +1,21 @@
|
|||
function gi() { curl -fLw '\n' https://www.toptal.com/developers/gitignore/api/"${(j:,:)@}" }
|
||||
# gitignore plugin for oh-my-zsh
|
||||
# Uses gitignore.io CDN endpoint
|
||||
function _gi_curl() {
|
||||
curl -sfL "https://www.gitignore.io/api/$1"
|
||||
}
|
||||
|
||||
function gi() {
|
||||
local query="${(j:,:)@}"
|
||||
_gi_curl "$query" || return 1
|
||||
}
|
||||
|
||||
_gitignoreio_get_command_list() {
|
||||
curl -sfL https://www.toptal.com/developers/gitignore/api/list | tr "," "\n"
|
||||
_gi_curl "list" | tr "," "\n"
|
||||
}
|
||||
|
||||
_gitignoreio () {
|
||||
compset -P '*,'
|
||||
compadd -S '' `_gitignoreio_get_command_list`
|
||||
compadd -S '' $(_gitignoreio_get_command_list)
|
||||
}
|
||||
|
||||
compdef _gitignoreio gi
|
||||
compdef _gitignoreio gi
|
||||
|
|
@ -1,6 +1,11 @@
|
|||
# gpg-agent
|
||||
|
||||
Enables [GPG's gpg-agent](https://www.gnupg.org/documentation/manuals/gnupg/) if it is not running.
|
||||
Applies some fixes for some common issues encountered with [GPG's gpg-agent](https://www.gnupg.org/documentation/manuals/gnupg/).
|
||||
|
||||
More specifically, this plugin:
|
||||
|
||||
- Updates the `GPG_TTY` environment variable before each shell execution.
|
||||
- Updates the `SSH_AUTH_SOCK` environment variable if `enable-ssh-support` is turned on.
|
||||
|
||||
To use it, add `gpg-agent` to the plugins array of your zshrc file:
|
||||
|
||||
|
|
|
|||
|
|
@ -19,18 +19,18 @@ __gradle-init-cache-dir() {
|
|||
}
|
||||
|
||||
__gradle-set-settings-file() {
|
||||
# In order of precedence: --settings-file=filename, settings.gradle, settings.gradle.kts
|
||||
# In order of precedence: settings.gradle, settings.gradle.kts
|
||||
|
||||
local default_gradle_settings_file="$project_root_dir/settings.gradle"
|
||||
if [[ ! -f $default_gradle_settings_file ]]; then
|
||||
default_gradle_settings_file="$project_root_dir/settings.gradle.kts"
|
||||
fi
|
||||
gradle_settings_file=${${(v)opt_args[(i)-c|--settings-file]}:-$default_gradle_settings_file}
|
||||
gradle_settings_file=$default_gradle_settings_file
|
||||
}
|
||||
|
||||
__gradle-set-build-file() {
|
||||
__gradle-set-settings-file
|
||||
# In order of precedence: --build-file=filename, rootProject.buildFileName, build.gradle, build.gradle.kts
|
||||
# In order of precedence: rootProject.buildFileName, build.gradle, build.gradle.kts
|
||||
|
||||
local default_gradle_build_file_name="build.gradle"
|
||||
if [[ -r $gradle_settings_file ]]; then
|
||||
|
|
@ -45,8 +45,7 @@ __gradle-set-build-file() {
|
|||
default_gradle_build_file="$project_root_dir/build.gradle.kts"
|
||||
fi
|
||||
|
||||
# If a build file is specified after '-b' or '--build-file', use this file.
|
||||
gradle_build_file=${${(v)opt_args[(i)-b|--build-file]}:-$default_gradle_build_file}
|
||||
gradle_build_file=$default_gradle_build_file
|
||||
}
|
||||
|
||||
__gradle-set-cache-name() {
|
||||
|
|
@ -94,10 +93,11 @@ __gradle-generate-tasks-cache() {
|
|||
# Reuse Gradle Daemon if IDLE but don't start a new one.
|
||||
local gradle_tasks_output
|
||||
if [[ ! -z "$($gradle_cmd --status 2>/dev/null | grep IDLE)" ]]; then
|
||||
gradle_tasks_output="$($gradle_cmd --daemon --no-scan --build-file $gradle_build_file --console=plain -q tasks --all 2>/dev/null)"
|
||||
gradle_tasks_output="$(cd "$project_root_dir" && "$gradle_cmd" --daemon --no-scan --console=plain -q tasks --all 2>/dev/null)"
|
||||
else
|
||||
gradle_tasks_output="$($gradle_cmd --no-daemon --no-scan --build-file $gradle_build_file --console=plain -q tasks --all 2>/dev/null)"
|
||||
gradle_tasks_output="$(cd "$project_root_dir" && "$gradle_cmd" --no-daemon --no-scan --console=plain -q tasks --all 2>/dev/null)"
|
||||
fi
|
||||
|
||||
local gradle_all_tasks="" root_tasks="" subproject_tasks="" output_line
|
||||
local -a match
|
||||
for output_line in ${(f)"$(printf "%s\n" "${gradle_tasks_output[@]}")"}; do
|
||||
|
|
@ -199,106 +199,161 @@ __gradle_subcommand() {
|
|||
;;
|
||||
(dependencyInsight)
|
||||
_arguments \
|
||||
'--all-variants[Show all variants of each dependency]' \
|
||||
'--configuration=[Looks for the dependency in given configuration.]:dependency configuration:_gradle_dependency_configurations' \
|
||||
'--dependency=[Shows the details of given dependency.]' \
|
||||
'--configuration=[Looks for the dependency in given configuration.]:dependency configuration:_gradle_dependency_configurations' && ret=0
|
||||
'--single-path[Show at most one path to each dependency]' && ret=0
|
||||
;;
|
||||
(help)
|
||||
_arguments \
|
||||
'--task[The task to show help for.]' && ret=0
|
||||
'--task=[The task to show help for.]' && ret=0
|
||||
;;
|
||||
(init)
|
||||
_arguments \
|
||||
'--dsl=[DSL to be used in generated scripts.]:dsl:(groovy kotlin)' \
|
||||
'--package=[Package for the generated source.]' \
|
||||
'--project-name=[Name of the generated project.]' \
|
||||
'--test-framework=[Test framework to be used.]:test framework:(junit kotlintest scalatest spock testng)' \
|
||||
'--type=[Project type to generate.]:project type:(basic cpp-application cpp-library groovy-application groovy-library java-application java-library kotlin-application kotlin-library pom scala-library)' && ret=0
|
||||
'--comments[Include clarifying comments in files.]' \
|
||||
'--dsl=[Set the build script DSL to be used in generated scripts.]' \
|
||||
'--incubating[Allow the generated build to use new features and APIs.]' \
|
||||
'--insecure-protocol=[How to handle insecure URLs used for Maven Repositories.]' \
|
||||
'--java-version=[Provides java version to use in the project.]' \
|
||||
'--overwrite[Allow existing files in the build directory to be overwritten?]' \
|
||||
'--package=[Set the package for source files.]' \
|
||||
'--project-name=[Set the project name.]' \
|
||||
'--split-project[Split functionality across multiple subprojects?]' \
|
||||
'--test-framework=[Set the test framework to be used.]' \
|
||||
'--type=[Set the type of project to generate.]' \
|
||||
'--use-defaults[Use default values for options not configured explicitly]' && ret=0
|
||||
;;
|
||||
(tasks)
|
||||
_arguments \
|
||||
'--all[List all tasks, including subproject tasks.]' \
|
||||
'--group=[Show tasks only from given task group.]' && ret=0
|
||||
'--all[Show additional tasks and detail.]' \
|
||||
'--group=[Show tasks for a specific group.]' \
|
||||
'--groups=[Show tasks for specific groups (can be used multiple times to specify multiple groups).]' \
|
||||
'--types[Show task class types]' && ret=0
|
||||
;;
|
||||
(test)
|
||||
_arguments -C \
|
||||
'--debug-jvm[Enable debugging for the test process. The process is started suspended and listening on port 5005. Requires the "java" plugin.]' \
|
||||
'--fail-fast[Stops test execution after the first failed test. Requires the "java" plugin.]' \
|
||||
'--tests=[Sets test class or method name to be included, * is supported. Requires the "java" plugin.]' \
|
||||
'--debug-jvm[Enable debugging for the test process. The process is started suspended and listening on port 5005.]' \
|
||||
'--fail-fast[Stops test execution after the first failed test.]' \
|
||||
'--test-dry-run[Simulate test execution.]' \
|
||||
'--tests=[Sets test class or method name to be included (in addition to the test task filters), '*' is supported.]' \
|
||||
'(-)*:: :->task-or-option' && ret=0
|
||||
;;
|
||||
(wrapper)
|
||||
_arguments \
|
||||
'--distribution-type=[Binary-only or all with docs and sources]:*:distribution type:(bin all)' \
|
||||
'--gradle-version=[Set Gradle version for wrapper]' \
|
||||
'--gradle-distribution-sha256-sum=[SHA-256 checksum]' \
|
||||
'--gradle-distribution-url=[Set Gradle distribution URL]' && ret=0
|
||||
'--distribution-type=[The type of the Gradle distribution to be used by the wrapper.]:*:distribution type:(bin all)' \
|
||||
'--gradle-distribution-sha256-sum=[The SHA-256 hash sum of the gradle distribution.]' \
|
||||
'--gradle-distribution-url=[The URL to download the Gradle distribution from.]' \
|
||||
'--gradle-version=[The version of the Gradle distribution required by the wrapper. The following labels are allowed: latest, release-candidate, release-milestone, release-nightly, and nightly.]' \
|
||||
'--network-timeout=[Timeout in ms to use when the wrapper is performing network operations.]' \
|
||||
'--validate-url[Sets task to validate the configured distribution url.]' && ret=0
|
||||
;;
|
||||
(*)
|
||||
_arguments -C \
|
||||
{-a,--no-rebuild}'[Do not rebuild project dependencies.]' \
|
||||
'(--no-build-cache)--build-cache[Enable the Gradle build cache.]' \
|
||||
{-b,--build-file}'[Specifies the build file.]:build script:_files -g \*.gradle' \
|
||||
{-C,--cache}'[Specifies how compiled build scripts should be cached.]:cache policy:(on rebuild)' \
|
||||
{-c,--settings-file}'[Specifies the settings file.]:settings file:_files -g \*.gradle' \
|
||||
'(--configuration-cache)--no-configuration-cache[Disables the configuration cache. Gradle will not reuse the build configuration from previous builds.]' \
|
||||
'--configuration-cache-problems=[Configures how the configuration cache handles problems]:problem handling:(fail warn)' \
|
||||
'(--no-configure-on-demand)--configure-on-demand[Only relevant projects are configured in this build run.]' \
|
||||
'(--no-configuration-cache)--configuration-cache[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \
|
||||
'--console=[Specifies which type of console output to generate.]:console output type:(plain auto rich verbose)' \
|
||||
'--continue[Continues task execution after a task failure.]' \
|
||||
'-Dorg.gradle.cache.reserved.mb=[Reserve Gradle Daemon memory for operations.]' \
|
||||
'-Dorg.gradle.caching=[Set true to enable Gradle build cache.]:enable build cache:(true false)' \
|
||||
'-Dorg.gradle.console=[Set type of console output to generate.]:console output type:(plain auto rich verbose)' \
|
||||
'-Dorg.gradle.daemon.debug=[Set true to debug Gradle Daemon.]:enable daemon debug:(true false)' \
|
||||
'-Dorg.gradle.daemon.idletimeout=[Kill Gradle Daemon after # idle millis.]' \
|
||||
'-Dorg.gradle.debug=[Set true to debug Gradle Client.]' \
|
||||
'-Dorg.gradle.jvmargs=[Set JVM arguments.]' \
|
||||
'-Dorg.gradle.java.home=[Set JDK home dir.]' \
|
||||
'-Dorg.gradle.logging.level=[Set default Gradle log level.]:log level:(quiet warn lifecycle info debug)' \
|
||||
'-Dorg.gradle.parallel=[Set true to enable parallel project builds.]:enable parallel build:(true false)' \
|
||||
'-Dorg.gradle.priority=[Set priority for Gradle worker processes.]:priority:(low normal)' \
|
||||
'-Dorg.gradle.unsafe.watch-fs=[Set true to enable Gradle file watcher.]:enable watcher:(true false)' \
|
||||
'-Dorg.gradle.warning.mode=[Set types of warnings to log.]:warning level:(all summary none)' \
|
||||
'-Dorg.gradle.workers.max=[Set the number of workers Gradle is allowed to use.]' \
|
||||
'(-i --info -w --warn -q --quiet)'{-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \
|
||||
'(--no-daemon)--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \
|
||||
'--foreground[Starts the Gradle daemon in the foreground.]' \
|
||||
{-g,--gradle-user-home}'[Specifies the gradle user home directory.]:file:_directories' \
|
||||
\*--include-build'[Includes the specified build in the composite.]:file:_directories' \
|
||||
\*{-I,--init-script}'[Specifies an initialization script.]:init script:_files -g \*.gradle' \
|
||||
'(-d --debug -w --warn -q --quiet)'{-i,--info}'[Set log level to info.]' \
|
||||
'--max-workers[Set the maximum number of concurrent workers that Gradle may use.]:number workers' \
|
||||
{-m,--dry-run}'[Runs the builds with all task actions disabled.]' \
|
||||
'--no-color[Do not use color in the console output. (Removed in Gradle 3.0)]' \
|
||||
'(--build-cache)--no-build-cache[Do not use the Gradle build cache.]' \
|
||||
'(--configure-on-demand)--no-configure-on-demand[Disables configuration on demand.]' \
|
||||
'(--daemon)--no-daemon[Do not use the Gradle daemon to run the build.]' \
|
||||
'(--parallel)--no-parallel[Disables parallel execution to build projects.]' \
|
||||
'(--scan)--no-scan[Do not create a build scan.]' \
|
||||
'--offline[The build should operate without accessing network resources.]' \
|
||||
\*{-P+,--project-prop}'[Set project property for the build script (e.g. -Pmyprop=myvalue).]:project property (prop=val):' \
|
||||
{-p,--project-dir}'[Specifies the start directory for Gradle.]:start directory:_directories' \
|
||||
'(--no-parallel)--parallel[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]' \
|
||||
'--profile[Profiles build execution time and generates a report in the <build_dir>/reports/profile directory.]' \
|
||||
'--priority[Set priority for Gradle worker processes.]:priority:(low normal)' \
|
||||
'--project-cache-dir[Specifies the project-specific cache directory.]:cache directory:_directories' \
|
||||
'(-d --debug -w --warn -i --info)'{-q,--quiet}'[Log errors only.]' \
|
||||
'--recompile-scripts[Force build script recompiling.]' \
|
||||
'--refresh[Refresh the state of resources of the type(s) specified.]:refresh policy:(dependencies)' \
|
||||
'--refresh-dependencies[Refresh the state of dependencies.]' \
|
||||
'--rerun-tasks[Ignore previously cached task results.]' \
|
||||
'(--no-scan)--scan[Create a build scan.]' \
|
||||
'(-S --full-stacktrace)'{-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \
|
||||
'(-s --stacktrace)'{-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \
|
||||
'--system-prop[system property (prop=val)]' \
|
||||
'-Dgradle.user.home=[Specifies the Gradle user home directory. Defaults to ~/.gradle]:gradle.user.home:_directories' \
|
||||
'-Dorg.gradle.caching.debug=[]' \
|
||||
'-Dorg.gradle.caching=[Enables the Gradle build cache. Gradle will try to reuse outputs from previous builds.]:org.gradle.caching:(true false)' \
|
||||
'-Dorg.gradle.configuration-cache.entries-per-key=[]' \
|
||||
'-Dorg.gradle.configuration-cache.fine-grained-property-tracking=[]' \
|
||||
'-Dorg.gradle.configuration-cache.heap-dump-dir=[]:org.gradle.configuration cache.heap dump dir:_directories' \
|
||||
'-Dorg.gradle.configuration-cache.inputs.unsafe.ignore.file-system-checks=[]' \
|
||||
'-Dorg.gradle.configuration-cache.inputs.unsafe.ignore.in-serialization=[]' \
|
||||
'-Dorg.gradle.configuration-cache.integrity-check=[]' \
|
||||
'-Dorg.gradle.configuration-cache.max-problems=[]' \
|
||||
'-Dorg.gradle.configuration-cache.parallel=[]' \
|
||||
'-Dorg.gradle.configuration-cache.problems=[Configures how the configuration cache handles problems (fail or warn). Defaults to fail.]:org.gradle.configuration cache.problems:(fail warn)' \
|
||||
'-Dorg.gradle.configuration-cache.read-only=[]' \
|
||||
'-Dorg.gradle.configuration-cache.unsafe.ignore.unsupported-build-events-listeners=[]' \
|
||||
'-Dorg.gradle.configuration-cache=[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \
|
||||
'-Dorg.gradle.configureondemand=[Configure necessary projects only. Gradle will attempt to reduce configuration time for large multi-project builds.]' \
|
||||
'-Dorg.gradle.console.unicode=[Specifies which character types are allowed in console output to generate. Values are 'auto' (default), 'disable' or 'enable'.]' \
|
||||
'-Dorg.gradle.console=[Specifies which type of console output to generate. Values are 'plain', 'colored', 'auto' (default), 'rich' or 'verbose'.]:org.gradle.console:(plain auto rich verbose)' \
|
||||
'-Dorg.gradle.continue=[Continue task execution after a task failure.]' \
|
||||
'-Dorg.gradle.continuous.quietperiod=[]' \
|
||||
'-Dorg.gradle.daemon.healthcheckinterval=[]' \
|
||||
'-Dorg.gradle.daemon.idletimeout=[]' \
|
||||
'-Dorg.gradle.daemon.registry.base=[]:org.gradle.daemon.registry.base:_directories' \
|
||||
'-Dorg.gradle.daemon=[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \
|
||||
'-Dorg.gradle.debug.host=[]' \
|
||||
'-Dorg.gradle.debug.port=[]' \
|
||||
'-Dorg.gradle.debug.server=[]' \
|
||||
'-Dorg.gradle.debug.suspend=[]' \
|
||||
'-Dorg.gradle.debug=[]:org.gradle.debug:(true false)' \
|
||||
'-Dorg.gradle.dependency.verification=[Configures the dependency verification mode. Values are 'strict', 'lenient' or 'off'.]:org.gradle.dependency.verification:(strict lenient off)' \
|
||||
'-Dorg.gradle.java.home=[]:org.gradle.java.home:_directories' \
|
||||
'-Dorg.gradle.java.installations.auto-detect=[]' \
|
||||
'-Dorg.gradle.java.installations.auto-download=[]' \
|
||||
'-Dorg.gradle.java.installations.fromEnv=[]' \
|
||||
'-Dorg.gradle.java.installations.idea-jdks-directory=[]:org.gradle.java.installations.idea jdks directory:_directories' \
|
||||
'-Dorg.gradle.java.installations.paths=[]:org.gradle.java.installations.paths:_directories' \
|
||||
'-Dorg.gradle.jvmargs=[]' \
|
||||
'-Dorg.gradle.logging.level=[]:org.gradle.logging.level:(quiet warn info debug)' \
|
||||
'-Dorg.gradle.logging.stacktrace=[]' \
|
||||
'-Dorg.gradle.native=[]' \
|
||||
'-Dorg.gradle.parallel=[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]:org.gradle.parallel:(true false)' \
|
||||
'-Dorg.gradle.priority=[Specifies the scheduling priority for the Gradle daemon and all processes launched by it. Values are 'normal' (default) or 'low']:org.gradle.priority:(normal low)' \
|
||||
'-Dorg.gradle.problems.report=[(Experimental) enables HTML problems report]' \
|
||||
'-Dorg.gradle.projectcachedir=[Specify the project-specific cache directory. Defaults to .gradle in the root project directory.]:org.gradle.projectcachedir:_directories' \
|
||||
'-Dorg.gradle.tooling.parallel=[]' \
|
||||
'-Dorg.gradle.unsafe.isolated-projects=[]' \
|
||||
'-Dorg.gradle.vfs.verbose=[]' \
|
||||
'-Dorg.gradle.vfs.watch=[Enables watching the file system for changes, allowing data about the file system to be re-used for the next build.]:org.gradle.vfs.watch:(true false)' \
|
||||
'-Dorg.gradle.warning.mode=[Specifies which mode of warnings to generate. Values are 'all', 'fail', 'summary'(default) or 'none']' \
|
||||
'-Dorg.gradle.welcome=[]:org.gradle.welcome:(once never)' \
|
||||
'-Dorg.gradle.workers.max=[Configure the number of concurrent workers Gradle is allowed to use.]' \
|
||||
(--no-build-cache)'--build-cache[Enables the Gradle build cache. Gradle will try to reuse outputs from previous builds.]' \
|
||||
(--no-configuration-cache)'--configuration-cache[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \
|
||||
'--configuration-cache-problems[Configures how the configuration cache handles problems (fail or warn). Defaults to fail.]:configuration cache problems:(fail warn)' \
|
||||
(--no-configure-on-demand)'--configure-on-demand[Configure necessary projects only. Gradle will attempt to reduce configuration time for large multi-project builds. (incubating)]' \
|
||||
'--console[Specifies which type of console output to generate. Values are 'plain', 'colored', 'auto' (default), 'rich' or 'verbose'.]:console:(plain auto rich verbose)' \
|
||||
'--console-unicode[Specifies which character types are allowed in console output to generate. Values are 'auto' (default), 'disable' or 'enable'.]' \
|
||||
(--no-continue)'--continue[Continue task execution after a task failure.]' \
|
||||
{-t,--continuous}'[Enables continuous build. Gradle does not exit and will re-execute tasks when task file inputs change.]' \
|
||||
{-u,--no-search-upward}"[Don't search in parent folders for a settings.gradle file.]" \
|
||||
'(--write-locks)--update-locks[Perform a partial update of the dependency lock.]' \
|
||||
'(-d --debug -q --quiet -i --info)'{-w,--warn}'[Log warnings and errors only.]' \
|
||||
'--warning-mode=[Set types of warnings to log.]:warning mode:(all summary none)' \
|
||||
'(--no-watch-fs)--watch-fs[Gradle watches filesystem for incremental builds.]' \
|
||||
'(--update-locks)--write-locks[Persists dependency resolution for locked configurations.]' \
|
||||
{-x,--exclude-task}'[Specify a task to be excluded from execution.]' && ret=0
|
||||
(--no-daemon)'--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \
|
||||
(--quiet,-q,--warn,-w,--info,-i){-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \
|
||||
{-F,--dependency-verification}'[Configures the dependency verification mode. Values are 'strict', 'lenient' or 'off'.]:dependency verification:(strict lenient off)' \
|
||||
{-m,--dry-run}'[Run the builds with all task actions disabled.]' \
|
||||
\*{-x,--exclude-task}'[Specify a task to be excluded from execution.]' \
|
||||
'--export-keys[Exports the public keys used for dependency verification.]' \
|
||||
'--foreground[Starts the Gradle daemon in the foreground.]' \
|
||||
(--stacktrace,-s){-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \
|
||||
{-g,--gradle-user-home}'[Specifies the Gradle user home directory. Defaults to ~/.gradle]:gradle user home:_directories' \
|
||||
\*'--include-build[Include the specified build in the composite.]:include build:_directories' \
|
||||
(--quiet,-q,--warn,-w,--debug,-d){-i,--info}'[Set log level to info.]' \
|
||||
\*{-I,--init-script}'[Specify an initialization script.]:init script:_files -g \*.gradle(|.kts)' \
|
||||
'--max-workers[Configure the number of concurrent workers Gradle is allowed to use.]' \
|
||||
(--build-cache)'--no-build-cache[Disables the Gradle build cache.]' \
|
||||
(--configuration-cache)'--no-configuration-cache[Disables the configuration cache.]' \
|
||||
(--configure-on-demand)'--no-configure-on-demand[Disables the use of configuration on demand. (incubating)]' \
|
||||
(--continue)'--no-continue[Stop task execution after a task failure.]' \
|
||||
(--daemon)'--no-daemon[Do not use the Gradle daemon to run the build. Useful occasionally if you have configured Gradle to always run with the daemon by default.]' \
|
||||
(--parallel)'--no-parallel[Disables parallel execution to build projects.]' \
|
||||
(--problems-report)'--no-problems-report[(Experimental) disables HTML problems report]' \
|
||||
{-a,--no-rebuild}'[Do not rebuild project dependencies.]' \
|
||||
(--scan)'--no-scan[Disables the creation of a Build Scan.]' \
|
||||
(--watch-fs)'--no-watch-fs[Disables watching the file system.]' \
|
||||
'--offline[Execute the build without accessing network resources.]' \
|
||||
(--no-parallel)'--parallel[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]' \
|
||||
'--priority[Specifies the scheduling priority for the Gradle daemon and all processes launched by it. Values are 'normal' (default) or 'low']' \
|
||||
(--no-problems-report)'--problems-report[(Experimental) enables HTML problems report]' \
|
||||
'--profile[Profile build execution time and generates a report in the <build_dir>/reports/profile directory.]' \
|
||||
'--project-cache-dir[Specify the project-specific cache directory. Defaults to .gradle in the root project directory.]:project cache dir:_directories' \
|
||||
{-p,--project-dir}'[Specifies the start directory for Gradle. Defaults to current directory.]:project dir:_directories' \
|
||||
'--property-upgrade-report[(Experimental) Runs build with experimental property upgrade report.]' \
|
||||
(--warn,-w,--info,-i,--debug,-d){-q,--quiet}'[Log errors only.]' \
|
||||
{-U,--refresh-dependencies}'[Refresh the state of dependencies.]' \
|
||||
'--refresh-keys[Refresh the public keys used for dependency verification.]' \
|
||||
'--rerun[Causes the task to be re-run even if up-to-date.]' \
|
||||
'--rerun-tasks[Ignore previously cached task results.]' \
|
||||
(--no-scan)'--scan[Generate a Build Scan (powered by Develocity).]' \
|
||||
{-V,--show-version}'[Print version info and continue.]' \
|
||||
(--full-stacktrace,-S){-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \
|
||||
'--task-graph[Print task graph instead of executing tasks.]' \
|
||||
\*'--update-locks[Perform a partial update of the dependency lock, letting passed in module notations change version. (incubating)]' \
|
||||
(--quiet,-q,--info,-i,--debug,-d){-w,--warn}'[Set log level to warn.]' \
|
||||
'--warning-mode[Specifies which mode of warnings to generate. Values are 'all', 'fail', 'summary'(default) or 'none']:warning mode:(all summary none)' \
|
||||
(--no-watch-fs)'--watch-fs[Enables watching the file system for changes, allowing data about the file system to be re-used for the next build.]' \
|
||||
'--write-locks[Persists dependency resolution for locked configurations, ignoring existing locking information if it exists]' \
|
||||
{-M,--write-verification-metadata}'[Generates checksums for dependencies used in the project (comma-separated list)]' && ret=0
|
||||
;;
|
||||
esac
|
||||
|
||||
|
|
@ -324,76 +379,116 @@ _gradle() {
|
|||
typeset -A opt_args
|
||||
|
||||
_arguments -C \
|
||||
'(-)'{-\?,-h,--help}'[Shows a help message.]' \
|
||||
{-a,--no-rebuild}'[Do not rebuild project dependencies.]' \
|
||||
'(--no-build-cache)--build-cache[Enable the Gradle build cache.]' \
|
||||
{-b,--build-file}'[Specifies the build file.]:build script:_files -g \*.gradle' \
|
||||
{-C,--cache}'[Specifies how compiled build scripts should be cached.]:cache policy:(on rebuild)' \
|
||||
{-c,--settings-file}'[Specifies the settings file.]:settings file:_files -g \*.gradle:->argument-expected' \
|
||||
'(--no-configuration-cache)--configuration-cache[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \
|
||||
'(--configuration-cache)--no-configuration-cache[Disables the configuration cache. Gradle will not reuse the build configuration from previous builds.]' \
|
||||
'--configuration-cache-problems=[Configures how the configuration cache handles problems]:problem handling:(fail warn)' \
|
||||
'(--no-configure-on-demand)--configure-on-demand[Only relevant projects are configured in this build run.]' \
|
||||
'--console=[Specifies which type of console output to generate.]:console output type:(plain auto rich verbose)' \
|
||||
'--continue[Continues task execution after a task failure.]' \
|
||||
'-Dorg.gradle.cache.reserved.mb=[Reserve Gradle Daemon memory for operations.]' \
|
||||
'-Dorg.gradle.caching=[Set true to enable Gradle build cache.]' \
|
||||
'-Dorg.gradle.console=[Set type of console output to generate.]:console output type:(plain auto rich verbose)' \
|
||||
'-Dorg.gradle.daemon.debug=[Set true to debug Gradle Daemon.]' \
|
||||
'-Dorg.gradle.daemon.idletimeout=[Kill Gradle Daemon after # idle millis.]' \
|
||||
'-Dorg.gradle.debug=[Set true to debug Gradle Client.]' \
|
||||
'-Dorg.gradle.jvmargs=[Set JVM arguments.]' \
|
||||
'-Dorg.gradle.java.home=[Set JDK home dir.]' \
|
||||
'-Dorg.gradle.logging.level=[Set default Gradle log level.]:log level:(quiet warn lifecycle info debug)' \
|
||||
'-Dorg.gradle.parallel=[Set true to enable parallel project builds.]:(true false)' \
|
||||
'-Dorg.gradle.priority=[Set priority for Gradle worker processes.]:priority:(low normal)' \
|
||||
'-Dorg.gradle.unsafe.watch-fs=[Set true to enable Gradle file watcher.]:enable watcher:(true false)' \
|
||||
'-Dorg.gradle.warning.mode=[Set types of warnings to log.]:warning level:(all summary none)' \
|
||||
'-Dorg.gradle.workers.max=[Set the number of workers Gradle is allowed to use.]' \
|
||||
'(-i --info -w --warn -q --quiet)'{-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \
|
||||
'(--no-daemon)--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \
|
||||
'--foreground[Starts the Gradle daemon in the foreground.]' \
|
||||
{-g,--gradle-user-home}'[Specifies the gradle user home directory.]:home directory:_directories:->argument-expected' \
|
||||
'(-)--gui[Launches the Gradle GUI. (Removed in Gradle 4.0)]' \
|
||||
\*--include-build'[Includes the specified build in the composite.]:file:_directories:->argument-expected' \
|
||||
\*{-I,--init-script}'[Specifies an initialization script.]:init script:_files -g \*.gradle:->argument-expected' \
|
||||
'(-d --debug -w --warn -q --quiet)'{-i,--info}'[Set log level to info.]' \
|
||||
'--max-workers[Set the maximum number of concurrent workers that Gradle may use.]:number workers:->argument-expected' \
|
||||
{-m,--dry-run}'[Runs the builds with all task actions disabled.]' \
|
||||
'--no-color[Do not use color in the console output. (Removed in Gradle 3.0)]' \
|
||||
'(--build-cache)--no-build-cache[Do not use the Gradle build cache.]' \
|
||||
'(--configure-on-demand)--no-configure-on-demand[Disables configuration on demand.]' \
|
||||
'(--daemon)--no-daemon[Do not use the Gradle daemon to run the build.]' \
|
||||
'(--parallel)--no-parallel[Disables parallel execution to build projects.]' \
|
||||
'(--scan)--no-scan[Do not create a build scan.]' \
|
||||
'--offline[The build should operate without accessing network resources.]' \
|
||||
\*{-P+,--project-prop}'[Set project property for the build script (e.g. -Pmyprop=myvalue).]:project property (prop=val):->argument-expected' \
|
||||
{-p,--project-dir}'[Specifies the start directory for Gradle.]:start directory:_directories:->argument-expected' \
|
||||
'(--no-parallel)--parallel[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]' \
|
||||
'--priority=[Set priority for Gradle worker processes.]:priority:(low normal)' \
|
||||
'--profile[Profiles build execution time and generates a report in the <build_dir>/reports/profile directory.]' \
|
||||
'--project-cache-dir=[Specifies the project-specific cache directory.]:cache directory:_directories:->argument-expected' \
|
||||
'(-d --debug -w --warn -i --info)'{-q,--quiet}'[Log errors only.]' \
|
||||
'--recompile-scripts[Force build script recompiling.]' \
|
||||
'--refresh[Refresh the state of resources of the type(s) specified.]:refresh policy:(dependencies)' \
|
||||
'--refresh-dependencies[Refresh the state of dependencies.]' \
|
||||
'--rerun-tasks[Ignore previously cached task results.]' \
|
||||
'(--no-scan)--scan[Create a build scan.]' \
|
||||
'(-S --full-stacktrace)'{-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \
|
||||
'(-s --stacktrace)'{-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \
|
||||
'(-)--status[Shows status of running and recently stopped Gradle Daemons.]' \
|
||||
'(-)--stop[Stops all Gradle daemons.]' \
|
||||
'--system-prop[system property (prop=val)]' \
|
||||
'-Dgradle.user.home=[Specifies the Gradle user home directory. Defaults to ~/.gradle]:gradle.user.home:_directories:->argument-expected' \
|
||||
'-Dorg.gradle.caching.debug=[]:->argument-expected' \
|
||||
'-Dorg.gradle.caching=[Enables the Gradle build cache. Gradle will try to reuse outputs from previous builds.]:org.gradle.caching:(true false):->argument-expected' \
|
||||
'-Dorg.gradle.configuration-cache.entries-per-key=[]:->argument-expected' \
|
||||
'-Dorg.gradle.configuration-cache.fine-grained-property-tracking=[]:->argument-expected' \
|
||||
'-Dorg.gradle.configuration-cache.heap-dump-dir=[]:org.gradle.configuration cache.heap dump dir:_directories:->argument-expected' \
|
||||
'-Dorg.gradle.configuration-cache.inputs.unsafe.ignore.file-system-checks=[]:->argument-expected' \
|
||||
'-Dorg.gradle.configuration-cache.inputs.unsafe.ignore.in-serialization=[]:->argument-expected' \
|
||||
'-Dorg.gradle.configuration-cache.integrity-check=[]:->argument-expected' \
|
||||
'-Dorg.gradle.configuration-cache.max-problems=[]:->argument-expected' \
|
||||
'-Dorg.gradle.configuration-cache.parallel=[]:->argument-expected' \
|
||||
'-Dorg.gradle.configuration-cache.problems=[Configures how the configuration cache handles problems (fail or warn). Defaults to fail.]:org.gradle.configuration cache.problems:(fail warn):->argument-expected' \
|
||||
'-Dorg.gradle.configuration-cache.read-only=[]:->argument-expected' \
|
||||
'-Dorg.gradle.configuration-cache.unsafe.ignore.unsupported-build-events-listeners=[]:->argument-expected' \
|
||||
'-Dorg.gradle.configuration-cache=[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]:->argument-expected' \
|
||||
'-Dorg.gradle.configureondemand=[Configure necessary projects only. Gradle will attempt to reduce configuration time for large multi-project builds.]:->argument-expected' \
|
||||
'-Dorg.gradle.console.unicode=[Specifies which character types are allowed in console output to generate. Values are 'auto' (default), 'disable' or 'enable'.]:->argument-expected' \
|
||||
'-Dorg.gradle.console=[Specifies which type of console output to generate. Values are 'plain', 'colored', 'auto' (default), 'rich' or 'verbose'.]:org.gradle.console:(plain auto rich verbose):->argument-expected' \
|
||||
'-Dorg.gradle.continue=[Continue task execution after a task failure.]:->argument-expected' \
|
||||
'-Dorg.gradle.continuous.quietperiod=[]:->argument-expected' \
|
||||
'-Dorg.gradle.daemon.healthcheckinterval=[]:->argument-expected' \
|
||||
'-Dorg.gradle.daemon.idletimeout=[]:->argument-expected' \
|
||||
'-Dorg.gradle.daemon.registry.base=[]:org.gradle.daemon.registry.base:_directories:->argument-expected' \
|
||||
'-Dorg.gradle.daemon=[Uses the Gradle daemon to run the build. Starts the daemon if not running.]:->argument-expected' \
|
||||
'-Dorg.gradle.debug.host=[]:->argument-expected' \
|
||||
'-Dorg.gradle.debug.port=[]:->argument-expected' \
|
||||
'-Dorg.gradle.debug.server=[]:->argument-expected' \
|
||||
'-Dorg.gradle.debug.suspend=[]:->argument-expected' \
|
||||
'-Dorg.gradle.debug=[]:org.gradle.debug:(true false):->argument-expected' \
|
||||
'-Dorg.gradle.dependency.verification=[Configures the dependency verification mode. Values are 'strict', 'lenient' or 'off'.]:org.gradle.dependency.verification:(strict lenient off):->argument-expected' \
|
||||
'-Dorg.gradle.java.home=[]:org.gradle.java.home:_directories:->argument-expected' \
|
||||
'-Dorg.gradle.java.installations.auto-detect=[]:->argument-expected' \
|
||||
'-Dorg.gradle.java.installations.auto-download=[]:->argument-expected' \
|
||||
'-Dorg.gradle.java.installations.fromEnv=[]:->argument-expected' \
|
||||
'-Dorg.gradle.java.installations.idea-jdks-directory=[]:org.gradle.java.installations.idea jdks directory:_directories:->argument-expected' \
|
||||
'-Dorg.gradle.java.installations.paths=[]:org.gradle.java.installations.paths:_directories:->argument-expected' \
|
||||
'-Dorg.gradle.jvmargs=[]:->argument-expected' \
|
||||
'-Dorg.gradle.logging.level=[]:org.gradle.logging.level:(quiet warn info debug):->argument-expected' \
|
||||
'-Dorg.gradle.logging.stacktrace=[]:->argument-expected' \
|
||||
'-Dorg.gradle.native=[]:->argument-expected' \
|
||||
'-Dorg.gradle.parallel=[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]:org.gradle.parallel:(true false):->argument-expected' \
|
||||
'-Dorg.gradle.priority=[Specifies the scheduling priority for the Gradle daemon and all processes launched by it. Values are 'normal' (default) or 'low']:org.gradle.priority:(normal low):->argument-expected' \
|
||||
'-Dorg.gradle.problems.report=[(Experimental) enables HTML problems report]:->argument-expected' \
|
||||
'-Dorg.gradle.projectcachedir=[Specify the project-specific cache directory. Defaults to .gradle in the root project directory.]:org.gradle.projectcachedir:_directories:->argument-expected' \
|
||||
'-Dorg.gradle.tooling.parallel=[]:->argument-expected' \
|
||||
'-Dorg.gradle.unsafe.isolated-projects=[]:->argument-expected' \
|
||||
'-Dorg.gradle.vfs.verbose=[]:->argument-expected' \
|
||||
'-Dorg.gradle.vfs.watch=[Enables watching the file system for changes, allowing data about the file system to be re-used for the next build.]:org.gradle.vfs.watch:(true false):->argument-expected' \
|
||||
'-Dorg.gradle.warning.mode=[Specifies which mode of warnings to generate. Values are 'all', 'fail', 'summary'(default) or 'none']:->argument-expected' \
|
||||
'-Dorg.gradle.welcome=[]:org.gradle.welcome:(once never):->argument-expected' \
|
||||
'-Dorg.gradle.workers.max=[Configure the number of concurrent workers Gradle is allowed to use.]:->argument-expected' \
|
||||
(--no-build-cache)'--build-cache[Enables the Gradle build cache. Gradle will try to reuse outputs from previous builds.]' \
|
||||
(--no-configuration-cache)'--configuration-cache[Enables the configuration cache. Gradle will try to reuse the build configuration from previous builds.]' \
|
||||
'--configuration-cache-problems[Configures how the configuration cache handles problems (fail or warn). Defaults to fail.]:configuration cache problems:(fail warn):->argument-expected' \
|
||||
(--no-configure-on-demand)'--configure-on-demand[Configure necessary projects only. Gradle will attempt to reduce configuration time for large multi-project builds. (incubating)]' \
|
||||
'--console[Specifies which type of console output to generate. Values are 'plain', 'colored', 'auto' (default), 'rich' or 'verbose'.]:console:(plain auto rich verbose):->argument-expected' \
|
||||
'--console-unicode[Specifies which character types are allowed in console output to generate. Values are 'auto' (default), 'disable' or 'enable'.]:->argument-expected' \
|
||||
(--no-continue)'--continue[Continue task execution after a task failure.]' \
|
||||
{-t,--continuous}'[Enables continuous build. Gradle does not exit and will re-execute tasks when task file inputs change.]' \
|
||||
{-u,--no-search-upward}"[Don't search in parent folders for a settings.gradle file.]" \
|
||||
'(--write-locks)--update-locks[Perform a partial update of the dependency lock.]' \
|
||||
'(-)'{-v,--version}'[Print version info.]' \
|
||||
'(-d --debug -q --quiet -i --info)'{-w,--warn}'[Log warnings and errors only.]' \
|
||||
'--warning-mode=[Set types of warnings to log.]:warning mode:(all summary none)' \
|
||||
'(--update-locks)--write-locks[Persists dependency resolution for locked configurations.]' \
|
||||
'(--no-watch-fs)--watch-fs[Gradle watches filesystem for incremental builds.]' \
|
||||
{-x,--exclude-task}'[Specify a task to be excluded from execution.]' \
|
||||
'(-)*:: :->task-or-option' && ret=0
|
||||
(--no-daemon)'--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \
|
||||
(--quiet,-q,--warn,-w,--info,-i){-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \
|
||||
{-F,--dependency-verification}'[Configures the dependency verification mode. Values are 'strict', 'lenient' or 'off'.]:dependency verification:(strict lenient off):->argument-expected' \
|
||||
{-m,--dry-run}'[Run the builds with all task actions disabled.]' \
|
||||
\*{-x,--exclude-task}'[Specify a task to be excluded from execution.]' \
|
||||
'--export-keys[Exports the public keys used for dependency verification.]' \
|
||||
'--foreground[Starts the Gradle daemon in the foreground.]' \
|
||||
(--stacktrace,-s){-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \
|
||||
{-g,--gradle-user-home}'[Specifies the Gradle user home directory. Defaults to ~/.gradle]:gradle user home:_directories:->argument-expected' \
|
||||
{-h,--help}'[Shows a help message.]' \
|
||||
\*'--include-build[Include the specified build in the composite.]:include build:_directories:->argument-expected' \
|
||||
(--quiet,-q,--warn,-w,--debug,-d){-i,--info}'[Set log level to info.]' \
|
||||
\*{-I,--init-script}'[Specify an initialization script.]:init script:_files -g \*.gradle(|.kts):->argument-expected' \
|
||||
'--max-workers[Configure the number of concurrent workers Gradle is allowed to use.]:->argument-expected' \
|
||||
(--build-cache)'--no-build-cache[Disables the Gradle build cache.]' \
|
||||
(--configuration-cache)'--no-configuration-cache[Disables the configuration cache.]' \
|
||||
(--configure-on-demand)'--no-configure-on-demand[Disables the use of configuration on demand. (incubating)]' \
|
||||
(--continue)'--no-continue[Stop task execution after a task failure.]' \
|
||||
(--daemon)'--no-daemon[Do not use the Gradle daemon to run the build. Useful occasionally if you have configured Gradle to always run with the daemon by default.]' \
|
||||
(--parallel)'--no-parallel[Disables parallel execution to build projects.]' \
|
||||
(--problems-report)'--no-problems-report[(Experimental) disables HTML problems report]' \
|
||||
{-a,--no-rebuild}'[Do not rebuild project dependencies.]' \
|
||||
(--scan)'--no-scan[Disables the creation of a Build Scan.]' \
|
||||
(--watch-fs)'--no-watch-fs[Disables watching the file system.]' \
|
||||
'--offline[Execute the build without accessing network resources.]' \
|
||||
(--no-parallel)'--parallel[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]' \
|
||||
'--priority[Specifies the scheduling priority for the Gradle daemon and all processes launched by it. Values are 'normal' (default) or 'low']:->argument-expected' \
|
||||
(--no-problems-report)'--problems-report[(Experimental) enables HTML problems report]' \
|
||||
'--profile[Profile build execution time and generates a report in the <build_dir>/reports/profile directory.]' \
|
||||
'--project-cache-dir[Specify the project-specific cache directory. Defaults to .gradle in the root project directory.]:project cache dir:_directories:->argument-expected' \
|
||||
{-p,--project-dir}'[Specifies the start directory for Gradle. Defaults to current directory.]:project dir:_directories:->argument-expected' \
|
||||
'--property-upgrade-report[(Experimental) Runs build with experimental property upgrade report.]' \
|
||||
(--warn,-w,--info,-i,--debug,-d){-q,--quiet}'[Log errors only.]' \
|
||||
{-U,--refresh-dependencies}'[Refresh the state of dependencies.]' \
|
||||
'--refresh-keys[Refresh the public keys used for dependency verification.]' \
|
||||
'--rerun[Causes the task to be re-run even if up-to-date.]' \
|
||||
'--rerun-tasks[Ignore previously cached task results.]' \
|
||||
(--no-scan)'--scan[Generate a Build Scan (powered by Develocity).]' \
|
||||
{-V,--show-version}'[Print version info and continue.]' \
|
||||
(--full-stacktrace,-S){-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \
|
||||
'--status[Shows status of running and recently stopped Gradle daemon(s).]' \
|
||||
'--stop[Stops the Gradle daemon if it is running.]' \
|
||||
'--task-graph[Print task graph instead of executing tasks.]' \
|
||||
\*'--update-locks[Perform a partial update of the dependency lock, letting passed in module notations change version. (incubating)]' \
|
||||
{-v,--version}'[Print version info and exit.]' \
|
||||
(--quiet,-q,--info,-i,--debug,-d){-w,--warn}'[Set log level to warn.]' \
|
||||
'--warning-mode[Specifies which mode of warnings to generate. Values are 'all', 'fail', 'summary'(default) or 'none']:warning mode:(all summary none):->argument-expected' \
|
||||
(--no-watch-fs)'--watch-fs[Enables watching the file system for changes, allowing data about the file system to be re-used for the next build.]' \
|
||||
'--write-locks[Persists dependency resolution for locked configurations, ignoring existing locking information if it exists]' \
|
||||
{-M,--write-verification-metadata}'[Generates checksums for dependencies used in the project (comma-separated list)]:->argument-expected' \
|
||||
'(-)*:: :->task-or-option' && ret=0
|
||||
|
||||
if [[ $words[CURRENT] != -* && $state != "argument-expected" ]]; then
|
||||
__gradle_tasks && ret=0
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ files=(
|
|||
/etc/grc.zsh # default
|
||||
/usr/local/etc/grc.zsh # homebrew darwin-x64
|
||||
/opt/homebrew/etc/grc.zsh # homebrew darwin-arm64
|
||||
/home/linuxbrew/.linuxbrew/etc/grc.zsh # linuxbrew
|
||||
/usr/share/grc/grc.zsh # Gentoo Linux (app-misc/grc)
|
||||
)
|
||||
|
||||
|
|
|
|||
143
plugins/hcloud/README.md
Normal file
143
plugins/hcloud/README.md
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
# hcloud plugin
|
||||
|
||||
This plugin adds completion for the [Hetzner Cloud CLI](https://github.com/hetznercloud/cli),
|
||||
as well as some aliases for common hcloud commands.
|
||||
|
||||
To use it, add `hcloud` to the plugins array in your zshrc file:
|
||||
|
||||
```zsh
|
||||
plugins=(... hcloud)
|
||||
```
|
||||
|
||||
## Aliases
|
||||
|
||||
| Alias | Command | Description |
|
||||
| :--------- | :---------------------------------------- | :------------------------------------------------------------ |
|
||||
| hc | `hcloud` | The hcloud command |
|
||||
| | | **Context Management** |
|
||||
| hcctx | `hcloud context` | Manage contexts |
|
||||
| hcctxls | `hcloud context list` | List all contexts |
|
||||
| hcctxu | `hcloud context use` | Use a context |
|
||||
| hcctxc | `hcloud context create` | Create a new context |
|
||||
| hcctxd | `hcloud context delete` | Delete a context |
|
||||
| hcctxa | `hcloud context active` | Show active context |
|
||||
| | | **Server Management** |
|
||||
| hcs | `hcloud server` | Manage servers |
|
||||
| hcsl | `hcloud server list` | List all servers |
|
||||
| hcsc | `hcloud server create` | Create a server |
|
||||
| hcsd | `hcloud server delete` | Delete a server |
|
||||
| hcsdesc | `hcloud server describe` | Describe a server |
|
||||
| hcspoff | `hcloud server poweroff` | Power off a server |
|
||||
| hcspon | `hcloud server poweron` | Power on a server |
|
||||
| hcsr | `hcloud server reboot` | Reboot a server |
|
||||
| hcsreset | `hcloud server reset` | Reset a server |
|
||||
| hcssh | `hcloud server ssh` | SSH into a server |
|
||||
| hcse | `hcloud server enable-rescue` | Enable rescue mode for a server |
|
||||
| hcsdr | `hcloud server disable-rescue` | Disable rescue mode for a server |
|
||||
| hcsip | `hcloud server ip` | Manage server IPs |
|
||||
| hcsa | `hcloud server attach-iso` | Attach an ISO to a server |
|
||||
| hcsda | `hcloud server detach-iso` | Detach an ISO from a server |
|
||||
| hcscip | `hcloud server change-type` | Change server type |
|
||||
| | | **Volume Management** |
|
||||
| hcv | `hcloud volume` | Manage volumes |
|
||||
| hcvl | `hcloud volume list` | List all volumes |
|
||||
| hcvc | `hcloud volume create` | Create a volume |
|
||||
| hcvd | `hcloud volume delete` | Delete a volume |
|
||||
| hcvdesc | `hcloud volume describe` | Describe a volume |
|
||||
| hcva | `hcloud volume attach` | Attach a volume to a server |
|
||||
| hcvda | `hcloud volume detach` | Detach a volume from a server |
|
||||
| hcvr | `hcloud volume resize` | Resize a volume |
|
||||
| | | **Network Management** |
|
||||
| hcn | `hcloud network` | Manage networks |
|
||||
| hcnl | `hcloud network list` | List all networks |
|
||||
| hcnc | `hcloud network create` | Create a network |
|
||||
| hcnd | `hcloud network delete` | Delete a network |
|
||||
| hcndesc | `hcloud network describe` | Describe a network |
|
||||
| hcnas | `hcloud network add-subnet` | Add a subnet to a network |
|
||||
| hcnds | `hcloud network delete-subnet` | Delete a subnet from a network |
|
||||
| hcnar | `hcloud network add-route` | Add a route to a network |
|
||||
| hcndr | `hcloud network delete-route` | Delete a route from a network |
|
||||
| | | **Floating IP Management** |
|
||||
| hcfip | `hcloud floating-ip` | Manage floating IPs |
|
||||
| hcfipl | `hcloud floating-ip list` | List all floating IPs |
|
||||
| hcfipc | `hcloud floating-ip create` | Create a floating IP |
|
||||
| hcfipd | `hcloud floating-ip delete` | Delete a floating IP |
|
||||
| hcfipdesc | `hcloud floating-ip describe` | Describe a floating IP |
|
||||
| hcfipa | `hcloud floating-ip assign` | Assign a floating IP to a server |
|
||||
| hcfipua | `hcloud floating-ip unassign` | Unassign a floating IP from a server |
|
||||
| | | **SSH Key Management** |
|
||||
| hcsk | `hcloud ssh-key` | Manage SSH keys |
|
||||
| hcskl | `hcloud ssh-key list` | List all SSH keys |
|
||||
| hcskc | `hcloud ssh-key create` | Create an SSH key |
|
||||
| hcskd | `hcloud ssh-key delete` | Delete an SSH key |
|
||||
| hcskdesc | `hcloud ssh-key describe` | Describe an SSH key |
|
||||
| hcsku | `hcloud ssh-key update` | Update an SSH key |
|
||||
| | | **Image Management** |
|
||||
| hci | `hcloud image` | Manage images |
|
||||
| hcil | `hcloud image list` | List all images |
|
||||
| hcid | `hcloud image delete` | Delete an image |
|
||||
| hcidesc | `hcloud image describe` | Describe an image |
|
||||
| hciu | `hcloud image update` | Update an image |
|
||||
| | | **Firewall Management** |
|
||||
| hcfw | `hcloud firewall` | Manage firewalls |
|
||||
| hcfwl | `hcloud firewall list` | List all firewalls |
|
||||
| hcfwc | `hcloud firewall create` | Create a firewall |
|
||||
| hcfwd | `hcloud firewall delete` | Delete a firewall |
|
||||
| hcfwdesc | `hcloud firewall describe` | Describe a firewall |
|
||||
| hcfwar | `hcloud firewall add-rule` | Add a rule to a firewall |
|
||||
| hcfwdr | `hcloud firewall delete-rule` | Delete a rule from a firewall |
|
||||
| hcfwas | `hcloud firewall apply-to-resource` | Apply a firewall to a resource |
|
||||
| hcfwrs | `hcloud firewall remove-from-resource` | Remove a firewall from a resource |
|
||||
| | | **Load Balancer Management** |
|
||||
| hclb | `hcloud load-balancer` | Manage load balancers |
|
||||
| hclbl | `hcloud load-balancer list` | List all load balancers |
|
||||
| hclbc | `hcloud load-balancer create` | Create a load balancer |
|
||||
| hclbd | `hcloud load-balancer delete` | Delete a load balancer |
|
||||
| hclbdesc | `hcloud load-balancer describe` | Describe a load balancer |
|
||||
| hclbu | `hcloud load-balancer update` | Update a load balancer |
|
||||
| hclbas | `hcloud load-balancer add-service` | Add a service to a load balancer |
|
||||
| hclbds | `hcloud load-balancer delete-service` | Delete a service from a load balancer |
|
||||
| hclbat | `hcloud load-balancer add-target` | Add a target to a load balancer |
|
||||
| hclbdt | `hcloud load-balancer delete-target` | Delete a target from a load balancer |
|
||||
| | | **Certificate Management** |
|
||||
| hccert | `hcloud certificate` | Manage certificates |
|
||||
| hccertl | `hcloud certificate list` | List all certificates |
|
||||
| hccertc | `hcloud certificate create` | Create a certificate |
|
||||
| hccertd | `hcloud certificate delete` | Delete a certificate |
|
||||
| hccertdesc | `hcloud certificate describe` | Describe a certificate |
|
||||
| hccertu | `hcloud certificate update` | Update a certificate |
|
||||
| | | **Datacenter and Location Info** |
|
||||
| hcdc | `hcloud datacenter list` | List all datacenters |
|
||||
| hcloc | `hcloud location list` | List all locations |
|
||||
| hcst | `hcloud server-type list` | List all server types |
|
||||
| hcit | `hcloud image list --type system` | List all system images |
|
||||
|
||||
## Requirements
|
||||
|
||||
This plugin requires the [Hetzner Cloud CLI](https://github.com/hetznercloud/cli) to be installed.
|
||||
|
||||
### Installation
|
||||
|
||||
Install the Hetzner Cloud CLI using one of the following methods:
|
||||
|
||||
**macOS (Homebrew):**
|
||||
```bash
|
||||
brew install hcloud
|
||||
```
|
||||
|
||||
**Linux (from source):**
|
||||
```bash
|
||||
go install github.com/hetznercloud/cli/cmd/hcloud@latest
|
||||
```
|
||||
|
||||
**Or download a prebuilt binary from the [releases page](https://github.com/hetznercloud/cli/releases).**
|
||||
|
||||
### Setup
|
||||
|
||||
After installation, create a context and authenticate:
|
||||
|
||||
```bash
|
||||
hcloud context create my-project
|
||||
```
|
||||
|
||||
You'll be prompted to enter your Hetzner Cloud API token, which you can generate in the [Hetzner Cloud Console](https://console.hetzner.cloud/).
|
||||
129
plugins/hcloud/hcloud.plugin.zsh
Normal file
129
plugins/hcloud/hcloud.plugin.zsh
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
# hcloud plugin for oh-my-zsh
|
||||
# Hetzner Cloud CLI: https://github.com/hetznercloud/cli
|
||||
|
||||
if (( ! $+commands[hcloud] )); then
|
||||
return
|
||||
fi
|
||||
|
||||
# If the completion file doesn't exist yet, we need to autoload it and
|
||||
# bind it to `hcloud`. Otherwise, compinit will have already done that.
|
||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_hcloud" ]]; then
|
||||
typeset -g -A _comps
|
||||
autoload -Uz _hcloud
|
||||
_comps[hcloud]=_hcloud
|
||||
fi
|
||||
|
||||
hcloud completion zsh 2> /dev/null >| "$ZSH_CACHE_DIR/completions/_hcloud" &|
|
||||
|
||||
# Main alias
|
||||
alias hc='hcloud'
|
||||
|
||||
# Context management
|
||||
alias hcctx='hcloud context'
|
||||
alias hcctxls='hcloud context list'
|
||||
alias hcctxu='hcloud context use'
|
||||
alias hcctxc='hcloud context create'
|
||||
alias hcctxd='hcloud context delete'
|
||||
alias hcctxa='hcloud context active'
|
||||
|
||||
# Server management
|
||||
alias hcs='hcloud server'
|
||||
alias hcsl='hcloud server list'
|
||||
alias hcsc='hcloud server create'
|
||||
alias hcsd='hcloud server delete'
|
||||
alias hcsdesc='hcloud server describe'
|
||||
alias hcspoff='hcloud server poweroff'
|
||||
alias hcspon='hcloud server poweron'
|
||||
alias hcsr='hcloud server reboot'
|
||||
alias hcsreset='hcloud server reset'
|
||||
alias hcssh='hcloud server ssh'
|
||||
alias hcse='hcloud server enable-rescue'
|
||||
alias hcsdr='hcloud server disable-rescue'
|
||||
alias hcsip='hcloud server ip'
|
||||
|
||||
# Server actions
|
||||
alias hcsa='hcloud server attach-iso'
|
||||
alias hcsda='hcloud server detach-iso'
|
||||
alias hcscip='hcloud server change-type'
|
||||
|
||||
# Volume management
|
||||
alias hcv='hcloud volume'
|
||||
alias hcvl='hcloud volume list'
|
||||
alias hcvc='hcloud volume create'
|
||||
alias hcvd='hcloud volume delete'
|
||||
alias hcvdesc='hcloud volume describe'
|
||||
alias hcva='hcloud volume attach'
|
||||
alias hcvda='hcloud volume detach'
|
||||
alias hcvr='hcloud volume resize'
|
||||
|
||||
# Network management
|
||||
alias hcn='hcloud network'
|
||||
alias hcnl='hcloud network list'
|
||||
alias hcnc='hcloud network create'
|
||||
alias hcnd='hcloud network delete'
|
||||
alias hcndesc='hcloud network describe'
|
||||
alias hcnas='hcloud network add-subnet'
|
||||
alias hcnds='hcloud network delete-subnet'
|
||||
alias hcnar='hcloud network add-route'
|
||||
alias hcndr='hcloud network delete-route'
|
||||
|
||||
# Floating IP management
|
||||
alias hcfip='hcloud floating-ip'
|
||||
alias hcfipl='hcloud floating-ip list'
|
||||
alias hcfipc='hcloud floating-ip create'
|
||||
alias hcfipd='hcloud floating-ip delete'
|
||||
alias hcfipdesc='hcloud floating-ip describe'
|
||||
alias hcfipa='hcloud floating-ip assign'
|
||||
alias hcfipua='hcloud floating-ip unassign'
|
||||
|
||||
# SSH key management
|
||||
alias hcsk='hcloud ssh-key'
|
||||
alias hcskl='hcloud ssh-key list'
|
||||
alias hcskc='hcloud ssh-key create'
|
||||
alias hcskd='hcloud ssh-key delete'
|
||||
alias hcskdesc='hcloud ssh-key describe'
|
||||
alias hcsku='hcloud ssh-key update'
|
||||
|
||||
# Image management
|
||||
alias hci='hcloud image'
|
||||
alias hcil='hcloud image list'
|
||||
alias hcid='hcloud image delete'
|
||||
alias hcidesc='hcloud image describe'
|
||||
alias hciu='hcloud image update'
|
||||
|
||||
# Firewall management
|
||||
alias hcfw='hcloud firewall'
|
||||
alias hcfwl='hcloud firewall list'
|
||||
alias hcfwc='hcloud firewall create'
|
||||
alias hcfwd='hcloud firewall delete'
|
||||
alias hcfwdesc='hcloud firewall describe'
|
||||
alias hcfwar='hcloud firewall add-rule'
|
||||
alias hcfwdr='hcloud firewall delete-rule'
|
||||
alias hcfwas='hcloud firewall apply-to-resource'
|
||||
alias hcfwrs='hcloud firewall remove-from-resource'
|
||||
|
||||
# Load balancer management
|
||||
alias hclb='hcloud load-balancer'
|
||||
alias hclbl='hcloud load-balancer list'
|
||||
alias hclbc='hcloud load-balancer create'
|
||||
alias hclbd='hcloud load-balancer delete'
|
||||
alias hclbdesc='hcloud load-balancer describe'
|
||||
alias hclbu='hcloud load-balancer update'
|
||||
alias hclbas='hcloud load-balancer add-service'
|
||||
alias hclbds='hcloud load-balancer delete-service'
|
||||
alias hclbat='hcloud load-balancer add-target'
|
||||
alias hclbdt='hcloud load-balancer delete-target'
|
||||
|
||||
# Certificate management
|
||||
alias hccert='hcloud certificate'
|
||||
alias hccertl='hcloud certificate list'
|
||||
alias hccertc='hcloud certificate create'
|
||||
alias hccertd='hcloud certificate delete'
|
||||
alias hccertdesc='hcloud certificate describe'
|
||||
alias hccertu='hcloud certificate update'
|
||||
|
||||
# Datacenter and location info
|
||||
alias hcdc='hcloud datacenter list'
|
||||
alias hcloc='hcloud location list'
|
||||
alias hcst='hcloud server-type list'
|
||||
alias hcit='hcloud image list --type system'
|
||||
|
|
@ -79,7 +79,7 @@ Using [Zinit](https://github.com/zdharma-continuum/zinit):
|
|||
|
||||
2. Load the plugin in `~/.zshrc`:
|
||||
|
||||
zinit load 'zsh-users/zsh-history-substring-search
|
||||
zinit load 'zsh-users/zsh-history-substring-search'
|
||||
zinit ice wait atload'_history_substring_search_config'
|
||||
|
||||
3. Run `exec zsh` to take changes into account:
|
||||
|
|
|
|||
|
|
@ -3,6 +3,13 @@
|
|||
0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
|
||||
0="${${(M)0:#/*}:-$PWD/$0}"
|
||||
|
||||
# Respect case sensitivity settings for globbing in history search
|
||||
if [[ "$CASE_SENSITIVE" = true ]]; then
|
||||
: ${HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS=''}
|
||||
else
|
||||
: ${HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i'}
|
||||
fi
|
||||
|
||||
source ${0:A:h}/history-substring-search.zsh
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -295,8 +295,8 @@ _history-substring-search-begin() {
|
|||
fi
|
||||
|
||||
#
|
||||
# Escape and join query parts with wildcard character '*' as separator
|
||||
# `(j:CHAR:)` join array to string with CHAR as separator
|
||||
# Escape and join query parts with wildcard character '*' as seperator
|
||||
# `(j:CHAR:)` join array to string with CHAR as seperator
|
||||
#
|
||||
local search_pattern="${(j:*:)_history_substring_search_query_parts[@]//(#m)[\][()|\\*?#<>~^]/\\$MATCH}*"
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ This plugin supplies one command, `jira`, through which all its features are exp
|
|||
| `jira new` | Opens a new Jira issue dialogue |
|
||||
| `jira ABC-123` | Opens an existing issue |
|
||||
| `jira ABC-123 m` | Opens an existing issue for adding a comment |
|
||||
| `jira project ABC` | Opens JIRA project summary |
|
||||
| `jira dashboard [rapid_view]` | Opens your JIRA dashboard |
|
||||
| `jira mine` | Queries for your own issues |
|
||||
| `jira tempo` | Opens your JIRA Tempo |
|
||||
|
|
@ -43,6 +44,22 @@ starting with "_": "MP-1234_fix_dashboard". In both these cases, the issue opene
|
|||
This is also checks if the prefix is in the name, and adds it if not, so: "MP-1234" opens the issue "MP-1234",
|
||||
"mp-1234" opens the issue "mp-1234", and "1234" opens the issue "MP-1234".
|
||||
|
||||
If your branch naming convention deviates, you can overwrite the jira_branch function to determine and echo the Jira issue key yourself.
|
||||
Define a function `jira_branch` after sourcing `oh-my-zsh.sh` in your `.zshrc`.
|
||||
Example:
|
||||
```zsh
|
||||
# Determine branch name from naming convention 'type/KEY-123/description'.
|
||||
function jira_branch() {
|
||||
# Get name of the branch
|
||||
issue_arg=$(git rev-parse --abbrev-ref HEAD)
|
||||
# Strip prefixes like feature/ or bugfix/
|
||||
issue_arg=${issue_arg#*/}
|
||||
# Strip suffixes like /some-branch-description
|
||||
issue_arg=${issue_arg%%/*}
|
||||
# Return the value
|
||||
echo $issue_arg
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
#### Debugging usage
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ local -a _1st_arguments
|
|||
_1st_arguments=(
|
||||
'new:create a new issue'
|
||||
'mine:open my issues'
|
||||
'project:open the project'
|
||||
'dashboard:open the dashboard'
|
||||
'tempo:open the tempo'
|
||||
'reported:search for issues reported by a user'
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ jira Performs the default action
|
|||
jira new Opens a new Jira issue dialogue
|
||||
jira ABC-123 Opens an existing issue
|
||||
jira ABC-123 m Opens an existing issue for adding a comment
|
||||
jira project ABC Opens JIRA project summary
|
||||
jira dashboard [rapid_view] Opens your JIRA dashboard
|
||||
jira mine Queries for your own issues
|
||||
jira tempo Opens your JIRA Tempo
|
||||
|
|
@ -17,6 +18,30 @@ jira branch Opens an existing issue matching the current bra
|
|||
EOF
|
||||
}
|
||||
|
||||
# If your branch naming convention deviates, you can partially override this plugin function
|
||||
# to determine the jira issue key based on your formatting.
|
||||
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Customization#partially-overriding-an-existing-plugin
|
||||
function jira_branch() {
|
||||
# Get name of the branch
|
||||
issue_arg=$(git rev-parse --abbrev-ref HEAD)
|
||||
# Strip prefixes like feature/ or bugfix/
|
||||
issue_arg=${issue_arg##*/}
|
||||
# Strip suffixes starting with _
|
||||
issue_arg=(${(s:_:)issue_arg})
|
||||
# If there is only one part, it means that there is a different delimiter. Try with -
|
||||
if [[ ${#issue_arg[@]} = 1 && ${issue_arg} == *-* ]]; then
|
||||
issue_arg=(${(s:-:)issue_arg})
|
||||
issue_arg="${issue_arg[1]}-${issue_arg[2]}"
|
||||
else
|
||||
issue_arg=${issue_arg[1]}
|
||||
fi
|
||||
if [[ "${issue_arg:l}" = ${jira_prefix:l}* ]]; then
|
||||
echo "${issue_arg}"
|
||||
else
|
||||
echo "${jira_prefix}${issue_arg}"
|
||||
fi
|
||||
}
|
||||
|
||||
function jira() {
|
||||
emulate -L zsh
|
||||
local action jira_url jira_prefix
|
||||
|
|
@ -64,6 +89,9 @@ function jira() {
|
|||
elif [[ "$action" == "mine" ]]; then
|
||||
echo "Opening my issues"
|
||||
open_command "${jira_url}/issues/?filter=-1"
|
||||
elif [[ "$action" == "project" ]]; then
|
||||
echo "Opening project"
|
||||
open_command "${jira_url}/jira/software/c/projects/${2}/summary"
|
||||
elif [[ "$action" == "dashboard" ]]; then
|
||||
echo "Opening dashboard"
|
||||
if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then
|
||||
|
|
@ -91,24 +119,7 @@ function jira() {
|
|||
# but `branch` is a special case that will parse the current git branch
|
||||
local issue_arg issue
|
||||
if [[ "$action" == "branch" ]]; then
|
||||
# Get name of the branch
|
||||
issue_arg=$(git rev-parse --abbrev-ref HEAD)
|
||||
# Strip prefixes like feature/ or bugfix/
|
||||
issue_arg=${issue_arg##*/}
|
||||
# Strip suffixes starting with _
|
||||
issue_arg=(${(s:_:)issue_arg})
|
||||
# If there is only one part, it means that there is a different delimiter. Try with -
|
||||
if [[ ${#issue_arg[@]} = 1 && ${issue_arg} == *-* ]]; then
|
||||
issue_arg=(${(s:-:)issue_arg})
|
||||
issue_arg="${issue_arg[1]}-${issue_arg[2]}"
|
||||
else
|
||||
issue_arg=${issue_arg[1]}
|
||||
fi
|
||||
if [[ "${issue_arg:l}" = ${jira_prefix:l}* ]]; then
|
||||
issue="${issue_arg}"
|
||||
else
|
||||
issue="${jira_prefix}${issue_arg}"
|
||||
fi
|
||||
issue=$(jira_branch)
|
||||
else
|
||||
issue_arg=${(U)action}
|
||||
issue="${jira_prefix}${issue_arg}"
|
||||
|
|
|
|||
127
plugins/jj/README.md
Normal file
127
plugins/jj/README.md
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
# jj - Jujutsu CLI
|
||||
|
||||
This plugin provides autocompletion for [jj](https://martinvonz.github.io/jj).
|
||||
|
||||
To use it, add `jj` to the plugins array of your zshrc file:
|
||||
|
||||
```zsh
|
||||
plugins=(... jj)
|
||||
```
|
||||
|
||||
## Aliases
|
||||
|
||||
| Alias | Command |
|
||||
| ------ | ----------------------------- |
|
||||
| jja | `jj abandon` |
|
||||
| jjb | `jj bookmark` |
|
||||
| jjbc | `jj bookmark create` |
|
||||
| jjbd | `jj bookmark delete` |
|
||||
| jjbf | `jj bookmark forget` |
|
||||
| jjbl | `jj bookmark list` |
|
||||
| jjbm | `jj bookmark move` |
|
||||
| jjbr | `jj bookmark rename` |
|
||||
| jjbs | `jj bookmark set` |
|
||||
| jjbt | `jj bookmark track` |
|
||||
| jjbu | `jj bookmark untrack` |
|
||||
| jjc | `jj commit` |
|
||||
| jjcmsg | `jj commit --message` |
|
||||
| jjd | `jj diff` |
|
||||
| jjdmsg | `jj desc --message` |
|
||||
| jjds | `jj desc` |
|
||||
| jje | `jj edit` |
|
||||
| jjgcl | `jj git clone` |
|
||||
| jjgf | `jj git fetch` |
|
||||
| jjgfa | `jj git fetch --all-remotes` |
|
||||
| jjgp | `jj git push` |
|
||||
| jjgpa | `jj git push --all` |
|
||||
| jjgpd | `jj git push --deleted` |
|
||||
| jjgpt | `jj git push --tracked` |
|
||||
| jjl | `jj log` |
|
||||
| jjla | `jj log -r "all()"` |
|
||||
| jjn | `jj new` |
|
||||
| jjnt | `jj new "trunk()"` |
|
||||
| jjrb | `jj rebase` |
|
||||
| jjrbm | `jj rebase -d "trunk()"` |
|
||||
| jjrs | `jj restore` |
|
||||
| jjrt | `cd "$(jj root \|\| echo .)"` |
|
||||
| jjsp | `jj split` |
|
||||
| jjsq | `jj squash` |
|
||||
| jjst | `jj status` |
|
||||
|
||||
## Prompt usage
|
||||
|
||||
Because `jj` has a very powerful [template syntax](https://martinvonz.github.io/jj/latest/templates/), this
|
||||
plugin only exposes a convenience function `jj_prompt_template` to read information from the current change.
|
||||
It is basically the same as `jj log --no-graph -r @ -T $1`:
|
||||
|
||||
```sh
|
||||
_my_theme_jj_info() {
|
||||
jj_prompt_template 'self.change_id().shortest(3)'
|
||||
}
|
||||
|
||||
PROMPT='$(_my_theme_jj_info) $'
|
||||
```
|
||||
|
||||
`jj_prompt_template` escapes `%` signs in the output. Use `jj_prompt_template_raw` if you don't want that
|
||||
(e.g. to colorize the output).
|
||||
|
||||
However, because `jj` can be used inside a Git repository, some themes might clash with it. Generally, you can
|
||||
fix it with a wrapper function that tries `jj` first and then falls back to `git` if it didn't work:
|
||||
|
||||
```sh
|
||||
_my_theme_vcs_info() {
|
||||
jj_prompt_template 'self.change_id().shortest(3)' \
|
||||
|| git_prompt_info
|
||||
}
|
||||
|
||||
PROMPT='$(_my_theme_vcs_info) $'
|
||||
```
|
||||
|
||||
You can find an example
|
||||
[here](https://github.com/nasso/omzsh/blob/e439e494f22f4fd4ef1b6cb64626255f4b341c1b/themes/sunakayu.zsh-theme).
|
||||
|
||||
### Performance
|
||||
|
||||
Sometimes `jj` can be slower than `git`.
|
||||
|
||||
If you feel slowdowns, consider using the following:
|
||||
|
||||
```
|
||||
zstyle :omz:plugins:jj ignore-working-copy yes
|
||||
```
|
||||
|
||||
This will add `--ignore-working-copy` to all `jj` commands executed by your prompt. The downside here is that
|
||||
your prompt might be out-of-sync until the next time `jj` gets a chance to _not_ ignore the working copy (i.e.
|
||||
you manually run a `jj` command).
|
||||
|
||||
If you prefer to keep your prompt always up-to-date but still don't want to _feel_ the slowdown, you can make
|
||||
your prompt asynchronous. This plugin doesn't do this automatically so you'd have to hack your theme a bit for
|
||||
that.
|
||||
|
||||
### Git async-prompt compatibility
|
||||
|
||||
If you use a wrapper function that calls `git_prompt_info` (as shown above), it won't work with
|
||||
the default git async-prompt mode. This is because async-prompt only registers its background worker
|
||||
when it detects `$(git_prompt_info)` literally in your prompt variables. A wrapper like
|
||||
`$(_my_theme_vcs_info)` won't match, so the async output stays empty.
|
||||
|
||||
To fix this, add one of the following to your `.zshrc` **before** Oh My Zsh is sourced:
|
||||
|
||||
```zsh
|
||||
# Option 1: force async handlers to always register (recommended, keeps async behavior)
|
||||
zstyle ':omz:alpha:lib:git' async-prompt force
|
||||
|
||||
# Option 2: disable async-prompt entirely (simpler, but prompt may feel slower in large repos)
|
||||
zstyle ':omz:alpha:lib:git' async-prompt no
|
||||
```
|
||||
|
||||
See [#13555](https://github.com/ohmyzsh/ohmyzsh/issues/13555) for details.
|
||||
|
||||
## See Also
|
||||
|
||||
- [martinvonz/jj](https://github.com/martinvonz/jj)
|
||||
|
||||
## Contributors
|
||||
|
||||
- [nasso](https://github.com/nasso) - Plugin Author
|
||||
- [imp](https://github.com/imp) - Occasional Alias Contributor
|
||||
71
plugins/jj/jj.plugin.zsh
Normal file
71
plugins/jj/jj.plugin.zsh
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
# if jj is not found, don't do the rest of the script
|
||||
if (( ! $+commands[jj] )); then
|
||||
return
|
||||
fi
|
||||
|
||||
# If the completion file doesn't exist yet, we need to autoload it and
|
||||
# bind it to `jj`. Otherwise, compinit will have already done that.
|
||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_jj" ]]; then
|
||||
typeset -g -A _comps
|
||||
autoload -Uz _jj
|
||||
_comps[jj]=_jj
|
||||
fi
|
||||
|
||||
COMPLETE=zsh jj >| "$ZSH_CACHE_DIR/completions/_jj" &|
|
||||
|
||||
function __jj_prompt_jj() {
|
||||
local -a flags
|
||||
flags=("--no-pager")
|
||||
if zstyle -t ':omz:plugins:jj' ignore-working-copy; then
|
||||
flags+=("--ignore-working-copy")
|
||||
fi
|
||||
command jj $flags "$@"
|
||||
}
|
||||
|
||||
# convenience functions for themes
|
||||
function jj_prompt_template_raw() {
|
||||
__jj_prompt_jj log --no-graph -r @ -T "$@" 2> /dev/null
|
||||
}
|
||||
|
||||
function jj_prompt_template() {
|
||||
local out
|
||||
out=$(jj_prompt_template_raw "$@") || return 1
|
||||
echo "${out:gs/%/%%}"
|
||||
}
|
||||
|
||||
# Aliases (sorted alphabetically)
|
||||
alias jja='jj abandon'
|
||||
alias jjb='jj bookmark'
|
||||
alias jjbc='jj bookmark create'
|
||||
alias jjbd='jj bookmark delete'
|
||||
alias jjbf='jj bookmark forget'
|
||||
alias jjbl='jj bookmark list'
|
||||
alias jjbm='jj bookmark move'
|
||||
alias jjbr='jj bookmark rename'
|
||||
alias jjbs='jj bookmark set'
|
||||
alias jjbt='jj bookmark track'
|
||||
alias jjbu='jj bookmark untrack'
|
||||
alias jjc='jj commit'
|
||||
alias jjcmsg='jj commit --message'
|
||||
alias jjd='jj diff'
|
||||
alias jjdmsg='jj desc --message'
|
||||
alias jjds='jj desc'
|
||||
alias jje='jj edit'
|
||||
alias jjgcl='jj git clone'
|
||||
alias jjgf='jj git fetch'
|
||||
alias jjgfa='jj git fetch --all-remotes'
|
||||
alias jjgp='jj git push'
|
||||
alias jjgpa='jj git push --all'
|
||||
alias jjgpd='jj git push --deleted'
|
||||
alias jjgpt='jj git push --tracked'
|
||||
alias jjl='jj log'
|
||||
alias jjla='jj log -r "all()"'
|
||||
alias jjn='jj new'
|
||||
alias jjnt='jj new "trunk()"'
|
||||
alias jjrb='jj rebase'
|
||||
alias jjrbm='jj rebase -d "trunk()"'
|
||||
alias jjrs='jj restore'
|
||||
alias jjrt='cd "$(jj root || echo .)"'
|
||||
alias jjsp='jj split'
|
||||
alias jjsq='jj squash'
|
||||
alias jjst='jj status'
|
||||
16
plugins/kamal/README.md
Normal file
16
plugins/kamal/README.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# Kamal
|
||||
|
||||
This plugin provides completion for [Kamal](https://kamal-deploy.org/) as well as some
|
||||
aliases for frequent Kamal commands.
|
||||
|
||||
To use it, add kamal to the plugins array of your zshrc file:
|
||||
|
||||
```zsh
|
||||
plugins=(... kamal)
|
||||
```
|
||||
|
||||
## Aliase
|
||||
|
||||
| Alias | Command | Description |
|
||||
|-----------|----------------------------------|----------------------------------------------------------------------------------|
|
||||
| kad | `kamal deploy` | Deploy app to servers |
|
||||
691
plugins/kamal/_kamal
Normal file
691
plugins/kamal/_kamal
Normal file
|
|
@ -0,0 +1,691 @@
|
|||
#compdef kamal
|
||||
|
||||
# Description
|
||||
# -----------
|
||||
# zsh completion for Kamal (https://kamal-deploy.org/)
|
||||
# -------------------------------------------------------------------------
|
||||
# Authors
|
||||
# -------
|
||||
# * Igor Aleksandrov <igor.alexandrov@gmail.com>
|
||||
# -------------------------------------------------------------------------
|
||||
# Inspiration
|
||||
# -----------
|
||||
# * docker-compose ohmyzsh completion script by @sdurrheimer Steve Durrheimer
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
# _kamal_commands() {
|
||||
# # Only initialize if empty
|
||||
# if (( ${#kamal_commands} == 0 )); then
|
||||
# kamal_commands=(
|
||||
# accessory
|
||||
# app
|
||||
# audit
|
||||
# build
|
||||
# config
|
||||
# deploy
|
||||
# details
|
||||
# docs
|
||||
# help
|
||||
# init
|
||||
# lock
|
||||
# proxy
|
||||
# prune
|
||||
# redeploy
|
||||
# registry
|
||||
# remove
|
||||
# rollback
|
||||
# secrets
|
||||
# server
|
||||
# setup
|
||||
# upgrade
|
||||
# version
|
||||
# )
|
||||
# fi
|
||||
|
||||
# _values 'Kamal commands' $kamal_commands
|
||||
# }
|
||||
|
||||
typeset -gr _kamal_commands=(
|
||||
'accessory:Control accessory services'
|
||||
'app:Control application deployment'
|
||||
'audit:Audit security of deployment'
|
||||
'build:Build and manage app images'
|
||||
'config:Show effective configuration'
|
||||
'deploy:Deploy app to servers'
|
||||
'details:Show details about deployment'
|
||||
'docs:Open documentation in browser'
|
||||
'help:Show command help'
|
||||
'init:Initialize new Kamal project'
|
||||
'lock:Manage deployment locks'
|
||||
'proxy:Control reverse proxy'
|
||||
'prune:Clean up containers and images'
|
||||
'redeploy:Redeploy current version'
|
||||
'registry:Manage Docker registry access'
|
||||
'remove:Remove app from servers'
|
||||
'rollback:Rollback to a previous version'
|
||||
'secrets:Manage deployment secrets'
|
||||
'server:Control server configuration'
|
||||
'setup:Setup initial deployment'
|
||||
'upgrade:Upgrade deployment'
|
||||
'version:Show Kamal version'
|
||||
)
|
||||
|
||||
# Helper function to display messages
|
||||
_kamal_message() {
|
||||
local msg="$1"
|
||||
_kamal_message "==> $msg"
|
||||
}
|
||||
|
||||
# Helper function to extract destination names from ./config/deploy.*.yml
|
||||
_kamal_destinations() {
|
||||
local -a dests
|
||||
local file
|
||||
|
||||
# Check if config directory exists
|
||||
if [[ ! -d "config" ]]; then
|
||||
_kamal_message "Cannot find Kamal configuration directory at ./config" && return 1
|
||||
fi
|
||||
|
||||
for file in config/deploy.*.yml(N); do
|
||||
[[ $file =~ config/deploy\.(.+)\.yml ]] && dests+=("${match[1]}")
|
||||
done
|
||||
|
||||
_values 'Destination' $dests
|
||||
}
|
||||
|
||||
# Define global _kamal_flags array
|
||||
typeset -ga _kamal_flags
|
||||
_kamal_flags=(
|
||||
'(-v --verbose )'{-v,--verbose}'[Detailed logging]'
|
||||
'(--no-verbose --skip-verbose)'{--no-verbose,--skip-verbose}'[No detailed logging]'
|
||||
'(-q --quiet --no-quiet --skip-quiet)'{-q,--quiet}'[Minimal logging]'
|
||||
'(-q --quiet --no-quiet --skip-quiet)'{--no-quiet,--skip-quiet}'[No minimal logging]'
|
||||
'--version=[Run commands against a specific app version]:version'
|
||||
'(-p --primary --no-primary --skip-primary)'{-p,--primary}'[Run commands only on primary host instead of all]'
|
||||
'(-p --primary --no-primary --skip-primary)'{--no-primary,--skip-primary}'[Do not run commands only on primary host]'
|
||||
'(-h --hosts)'{-h,--hosts=}'[Run commands on these hosts instead of all]:hosts'
|
||||
'(-r --roles)'{-r,--roles=}'[Run commands on these roles instead of all]:roles'
|
||||
'(-c --config-file)'{-c,--config-file=}'[Path to config file]:config file:_files'
|
||||
'(-d --destination)'{-d,--destination=}'[Specify destination to be used for config file]:destination:_kamal_destinations'
|
||||
'(-H --skip-hooks)'{-H,--skip-hooks}'[Do not run hooks]'
|
||||
)
|
||||
|
||||
_kamal() {
|
||||
local context state state_descr line curcontext="$curcontext"
|
||||
typeset -A opt_args
|
||||
|
||||
local ret=1
|
||||
|
||||
_arguments -C \
|
||||
$_kamal_flags \
|
||||
'1: :->command' \
|
||||
'*:: :->args' && ret=0
|
||||
|
||||
case $state in
|
||||
(command)
|
||||
# First argument - show available commands
|
||||
_describe -t kamal-commands "Kamal commands" _kamal_commands && ret=0
|
||||
;;
|
||||
(args)
|
||||
# Subsequent arguments - handle based on the command
|
||||
case $words[1] in
|
||||
(accessory)
|
||||
_kamal_accessory && ret=0
|
||||
;;
|
||||
(app)
|
||||
_kamal_app && ret=0
|
||||
;;
|
||||
(audit)
|
||||
_arguments $_kamal_flags && ret=0
|
||||
;;
|
||||
(build)
|
||||
_kamal_build && ret=0
|
||||
;;
|
||||
(config)
|
||||
_arguments $_kamal_flags && ret=0
|
||||
;;
|
||||
(deploy)
|
||||
_arguments $_kamal_flags && ret=0
|
||||
;;
|
||||
(details)
|
||||
_arguments $_kamal_flags && ret=0
|
||||
;;
|
||||
(docs)
|
||||
_arguments $_kamal_flags && ret=0
|
||||
;;
|
||||
(help)
|
||||
_kamal_help && ret=0
|
||||
;;
|
||||
(init)
|
||||
local -a init_flags
|
||||
init_flags=(
|
||||
$_kamal_flags
|
||||
'(--bundle --no-bundle --skip-bundle)--bundle[Add Kamal to the Gemfile and create a bin/kamal binstub]'
|
||||
'(--bundle --no-bundle --skip-bundle)--no-bundle[Do not add Kamal to the Gemfile and create a bin/kamal binstub]'
|
||||
'(--bundle --no-bundle --skip-bundle)--skip-bundle[Skip add Kamal to the Gemfile and create a bin/kamal binstub]'
|
||||
)
|
||||
_arguments $init_flags && ret=0
|
||||
;;
|
||||
(lock)
|
||||
_kamal_lock && ret=0
|
||||
;;
|
||||
(proxy)
|
||||
_kamal_proxy && ret=0
|
||||
;;
|
||||
(prune)
|
||||
_kamal_prune && ret=0
|
||||
;;
|
||||
(redeploy)
|
||||
_arguments $_kamal_flags && ret=0
|
||||
;;
|
||||
(registry)
|
||||
_kamal_registry && ret=0
|
||||
;;
|
||||
(remove)
|
||||
local -a remove_flags
|
||||
remove_flags=(
|
||||
$_kamal_flags
|
||||
'(-y --confirmed --no-confirmed --skip-confirmed)'{-y,--confirmed}'[Proceed without confirmation question]'
|
||||
'(-y --confirmed --no-confirmed --skip-confirmed)--no-confirmed[Proceed without confirmation question]'
|
||||
'(-y --confirmed --no-confirmed --skip-confirmed)--skip-confirmed[Proceed without confirmation question]'
|
||||
)
|
||||
_arguments $remove_flags && ret=0
|
||||
;;
|
||||
(rollback)
|
||||
if (( CURRENT == 2 )); then
|
||||
_kamal_message "Enter the version to rollback to" && ret=0
|
||||
else
|
||||
_values $_kamal_flags && ret=0
|
||||
fi
|
||||
;;
|
||||
(secrets)
|
||||
_kamal_secrets && ret=0
|
||||
;;
|
||||
(server)
|
||||
_kamal_server && ret=0
|
||||
;;
|
||||
(setup)
|
||||
local -a setup_flags
|
||||
setup_flags=(
|
||||
$_kamal_flags
|
||||
'(-P --skip-push)'{-P,--skip-push}'[Skip image build and push]'
|
||||
)
|
||||
_arguments $setup_flags && ret=0
|
||||
;;
|
||||
(upgrade)
|
||||
local -a upgrade_flags
|
||||
upgrade_flags=(
|
||||
$_kamal_flags
|
||||
'(-y --confirmed --no-confirmed --skip-confirmed)'{-y,--confirmed}'[Proceed without confirmation question]'
|
||||
'(-y --confirmed --no-confirmed --skip-confirmed)--no-confirmed[Do not proceed without confirmation question]'
|
||||
'(-y --confirmed --no-confirmed --skip-confirmed)--skip-confirmed[Skip confirmation question]'
|
||||
'(--rolling --no-rolling --skip-rolling)--rolling[Upgrade one host at a time]'
|
||||
'(--rolling --no-rolling --skip-rolling)--no-rolling[Do not upgrade one host at a time]'
|
||||
'(--rolling --no-rolling --skip-rolling)--skip-rolling[Skip rolling upgrade]'
|
||||
)
|
||||
_arguments $upgrade_flags && ret=0
|
||||
;;
|
||||
(version)
|
||||
_arguments $_kamal_flags && ret=0
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
_kamal_accessory() {
|
||||
local context state line
|
||||
typeset -A opt_args
|
||||
local ret=1
|
||||
|
||||
# Define accessory subcommands
|
||||
local -a accessory_subcommands
|
||||
accessory_subcommands=(
|
||||
"boot:Boot new accessory service on host (use NAME=all to boot all accessories)"
|
||||
"details:Show details about accessory on host (use NAME=all to show all accessories)"
|
||||
"exec:Execute a custom command on servers within the accessory container (use --help to show options)"
|
||||
"help:Describe subcommands or one specific subcommand"
|
||||
"logs:Show log lines from accessory on host (use --help to show options)"
|
||||
"reboot:Reboot existing accessory on host (stop container, remove container, start new container; use NAME=all to boot all accessories)"
|
||||
"remove:Remove accessory container, image and data directory from host (use NAME=all to remove all accessories)"
|
||||
"restart:Restart existing accessory container on host"
|
||||
"start:Start existing accessory container on host"
|
||||
"stop:Stop existing accessory container on host"
|
||||
"upgrade:Upgrade accessories from Kamal 1.x to 2.0 (restart them in 'kamal' network)"
|
||||
)
|
||||
|
||||
_arguments -C \
|
||||
'1: :->subcmd' \
|
||||
'*:: :->args' && ret=0
|
||||
|
||||
case $state in
|
||||
(subcmd)
|
||||
_describe -t accessory-commands "Kamal accessory commands" accessory_subcommands && ret=0
|
||||
;;
|
||||
(args)
|
||||
case $words[1] in
|
||||
(boot|details|exec|logs|reboot|remove|restart|start|stop)
|
||||
# These commands require a NAME parameter
|
||||
if (( CURRENT == 2 )); then
|
||||
# At the NAME position - we could add accessory name completion here
|
||||
# if we had a way to list available accessories
|
||||
_kamal_message "Specify an accessory name (or 'all' for all accessories)" && ret=0
|
||||
elif [[ "$words[1]" == "exec" && CURRENT == 3 ]]; then
|
||||
# For exec, the 3rd argument is a command
|
||||
_kamal_message "Enter a command to execute" && ret=0
|
||||
elif (( CURRENT > 2 )) && [[ "$words[1]" != "exec" || CURRENT > 3 ]]; then
|
||||
_values $_kamal_flags && ret=0
|
||||
fi
|
||||
;;
|
||||
(help)
|
||||
# Remove help itself from the list of commands
|
||||
accessory_subcommands=("${(@)accessory_subcommands:#help*}")
|
||||
_describe -t accessory-help-commands "Kamal accessory help commands" accessory_subcommands
|
||||
;;
|
||||
(upgrade)
|
||||
# For upgrade, show flags immediately
|
||||
_arguments $_kamal_flags && ret=0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
_kamal_app() {
|
||||
local context state line
|
||||
typeset -A opt_args
|
||||
local ret=1
|
||||
|
||||
local -a app_subcommands
|
||||
app_subcommands=(
|
||||
"boot:Boot app on servers (or reboot app if already running)"
|
||||
"containers:Show app containers on servers"
|
||||
"details:Show details about app containers"
|
||||
"exec:Execute a custom command on servers within the app container (use --help to show options)"
|
||||
"help:Describe subcommands or one specific subcommand"
|
||||
"images:Show app images on servers"
|
||||
"logs:Show log lines from app on servers (use --help to show options)"
|
||||
"remove:Remove app containers and images from servers"
|
||||
"stale_containers:Detect app stale containers"
|
||||
"start:Start existing app container on servers"
|
||||
"stop:Stop app container on servers"
|
||||
"version:Show app version currently running on servers"
|
||||
)
|
||||
|
||||
_arguments -C \
|
||||
'1: :->subcmd' \
|
||||
'*:: :->args' && ret=0
|
||||
|
||||
case $state in
|
||||
(subcmd)
|
||||
_describe -t app-commands "Kamal app commands" app_subcommands && ret=0
|
||||
;;
|
||||
(args)
|
||||
case $words[1] in
|
||||
(boot|containers|details|images|logs|remove|stale_containers|start|stop)
|
||||
_arguments $_kamal_flags && ret=0
|
||||
;;
|
||||
(exec)
|
||||
# For exec, the next argument is a command
|
||||
if (( CURRENT == 2 )); then
|
||||
_kamal_message "Enter a command to execute" && ret=0
|
||||
else
|
||||
_values $_kamal_flags && ret=0
|
||||
fi
|
||||
;;
|
||||
(help)
|
||||
# Remove help itself from the list of commands
|
||||
app_subcommands=("${(@)app_subcommands:#help*}")
|
||||
_describe -t app-help-commands "Kamal app help commands" app_subcommands
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
_kamal_build() {
|
||||
local context state line
|
||||
typeset -A opt_args
|
||||
local ret=1
|
||||
|
||||
local -a build_subcommands
|
||||
build_subcommands=(
|
||||
"create:Create a build setup"
|
||||
"deliver:Build app and push app image to registry then pull image on servers"
|
||||
"details:Show build setup"
|
||||
"dev:Build using the working directory, tag it as dirty, and push to local image store."
|
||||
"help:Describe subcommands or one specific subcommand"
|
||||
"pull:Pull app image from registry onto servers"
|
||||
"push:Build and push app image to registry"
|
||||
"remove:Remove build setup"
|
||||
)
|
||||
|
||||
_arguments -C \
|
||||
'1: :->subcmd' \
|
||||
'*:: :->args' && ret=0
|
||||
|
||||
case $state in
|
||||
(subcmd)
|
||||
_describe -t build-commands "Kamal build commands" build_subcommands && ret=0
|
||||
;;
|
||||
(args)
|
||||
case $words[1] in
|
||||
(create|deliver|details|dev|pull|push|remove)
|
||||
_arguments $_kamal_flags && ret=0
|
||||
;;
|
||||
(help)
|
||||
# Remove help itself from the list of commands
|
||||
build_subcommands=("${(@)build_subcommands:#help*}")
|
||||
_describe -t build-help-commands "Kamal build help commands" build_subcommands
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
_kamal_help() {
|
||||
local ret=1
|
||||
|
||||
# Make sure kamal_commands is initialized properly
|
||||
# if (( ${#kamal_commands} == 0 )); then
|
||||
# _kamal_commands >/dev/null
|
||||
# fi
|
||||
|
||||
# If we already have a command after "help", return without suggestions
|
||||
if (( CURRENT > 2 )); then
|
||||
ret=0
|
||||
else
|
||||
local -a help_commands
|
||||
# Filter out help from the list of commands
|
||||
help_commands=("${(@)_kamal_commands:#help}")
|
||||
|
||||
_values 'Kamal help' $help_commands && ret=0
|
||||
fi
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
_kamal_lock() {
|
||||
local context state line
|
||||
typeset -A opt_args
|
||||
local ret=1
|
||||
|
||||
local -a lock_subcommands
|
||||
lock_subcommands=(
|
||||
"acquire:Acquire the deploy lock"
|
||||
"help:Describe subcommands or one specific subcommand"
|
||||
"release:Release the deploy lock"
|
||||
"status:Report lock status"
|
||||
)
|
||||
|
||||
_arguments -C \
|
||||
'1: :->subcmd' \
|
||||
'*:: :->args' && ret=0
|
||||
|
||||
case $state in
|
||||
(subcmd)
|
||||
_describe -t lock-commands "Kamal lock commands" lock_subcommands && ret=0
|
||||
;;
|
||||
(args)
|
||||
case $words[1] in
|
||||
(acquire)
|
||||
local -a acquire_flags
|
||||
acquire_flags=(
|
||||
$_kamal_flags
|
||||
'(-m --message)'{-m,--message=}'[A lock message]:message:' # Required flag
|
||||
)
|
||||
_arguments $acquire_flags && ret=0
|
||||
;;
|
||||
(release|status)
|
||||
_arguments $_kamal_flags && ret=0
|
||||
;;
|
||||
(help)
|
||||
# Remove help itself from the list of commands
|
||||
lock_subcommands=("${(@)lock_subcommands:#help*}")
|
||||
_describe -t lock-help-commands "Kamal lock help commands" lock_subcommands
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
_kamal_proxy() {
|
||||
local context state line
|
||||
typeset -A opt_args
|
||||
local ret=1
|
||||
|
||||
local -a proxy_subcommands
|
||||
proxy_subcommands=(
|
||||
"boot:Boot proxy on servers"
|
||||
"boot_config:Manage kamal-proxy boot configuration"
|
||||
"details:Show details about proxy container from servers"
|
||||
"help:Describe subcommands or one specific subcommand"
|
||||
"logs:Show log lines from proxy on servers"
|
||||
"reboot:Reboot proxy on servers (stop container, remove container, start new container)"
|
||||
"remove:Remove proxy container and image from servers"
|
||||
"restart:Restart existing proxy container on servers"
|
||||
"start:Start existing proxy container on servers"
|
||||
"stop:Stop existing proxy container on servers"
|
||||
)
|
||||
|
||||
_arguments -C \
|
||||
'1: :->subcmd' \
|
||||
'*:: :->args' && ret=0
|
||||
|
||||
case $state in
|
||||
(subcmd)
|
||||
_describe -t proxy-commands "Kamal proxy commands" proxy_subcommands && ret=0
|
||||
;;
|
||||
(args)
|
||||
case $words[1] in
|
||||
(boot|details|logs|reboot|remove|restart|start|stop)
|
||||
_arguments $_kamal_flags && ret=0
|
||||
;;
|
||||
(boot_config)
|
||||
if (( CURRENT == 2 )); then
|
||||
local -a boot_config_commands=(
|
||||
"set:Set boot configuration"
|
||||
"get:Get boot configuration"
|
||||
"reset:Reset boot configuration"
|
||||
)
|
||||
_describe -t boot-config-commands "Boot config commands" boot_config_commands && ret=0
|
||||
else
|
||||
_values $_kamal_flags && ret=0
|
||||
fi
|
||||
;;
|
||||
(help)
|
||||
# Remove help itself from the list of commands
|
||||
proxy_subcommands=("${(@)proxy_subcommands:#help*}")
|
||||
_describe -t proxy-help-commands "Kamal proxy help commands" proxy_subcommands
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
_kamal_prune() {
|
||||
local context state line
|
||||
typeset -A opt_args
|
||||
local ret=1
|
||||
|
||||
local -a prune_subcommands
|
||||
prune_subcommands=(
|
||||
"all:Prune unused images and stopped containers"
|
||||
"containers:Prune all stopped containers, except the last n (default 5)"
|
||||
"help:Describe subcommands or one specific subcommand"
|
||||
"images:Prune unused images"
|
||||
)
|
||||
|
||||
_arguments -C \
|
||||
'1: :->subcmd' \
|
||||
'*:: :->args' && ret=0
|
||||
|
||||
case $state in
|
||||
(subcmd)
|
||||
_describe -t prune-commands "Kamal prune commands" prune_subcommands && ret=0
|
||||
;;
|
||||
(args)
|
||||
case $words[1] in
|
||||
(all|containers|images)
|
||||
_arguments $_kamal_flags && ret=0
|
||||
;;
|
||||
(help)
|
||||
# Remove help itself from the list of commands
|
||||
prune_subcommands=("${(@)prune_subcommands:#help*}")
|
||||
_describe -t prune-help-commands "Kamal prune help commands" prune_subcommands
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
_kamal_registry() {
|
||||
local context state line
|
||||
typeset -A opt_args
|
||||
local ret=1
|
||||
|
||||
local -a registry_subcommands
|
||||
registry_subcommands=(
|
||||
"help:Describe subcommands or one specific subcommand"
|
||||
"login:Log in to registry locally and remotely"
|
||||
"logout:Log out of registry locally and remotely"
|
||||
)
|
||||
|
||||
_arguments -C \
|
||||
'1: :->subcmd' \
|
||||
'*:: :->args' && ret=0
|
||||
|
||||
case $state in
|
||||
(subcmd)
|
||||
_describe -t registry-commands "Kamal registry commands" registry_subcommands && ret=0
|
||||
;;
|
||||
(args)
|
||||
case $words[1] in
|
||||
(help)
|
||||
# Remove help itself from the list of commands
|
||||
registry_subcommands=("${(@)registry_subcommands:#help*}")
|
||||
_describe -t registry-help-commands "Kamal registry help commands" registry_subcommands
|
||||
;;
|
||||
(login|logout)
|
||||
_arguments $_kamal_flags && ret=0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
_kamal_secrets() {
|
||||
local context state line
|
||||
typeset -A opt_args
|
||||
local ret=1
|
||||
|
||||
local -a secrets_subcommands
|
||||
secrets_subcommands=(
|
||||
"extract:Extract a single secret from the results of a fetch call"
|
||||
"fetch:Fetch secrets from a vault"
|
||||
"help:Describe subcommands or one specific subcommand"
|
||||
"print:Print the secrets (for debugging)"
|
||||
)
|
||||
|
||||
_arguments -C \
|
||||
'1: :->subcmd' \
|
||||
'*:: :->args' && ret=0
|
||||
|
||||
case $state in
|
||||
(subcmd)
|
||||
_describe -t secrets-commands "Kamal secrets commands" secrets_subcommands && ret=0
|
||||
;;
|
||||
(args)
|
||||
case $words[1] in
|
||||
(fetch)
|
||||
local -a fetch_flags
|
||||
fetch_flags=(
|
||||
$_kamal_flags
|
||||
'(-a --adapter)'{-a,--adapter=}'[Secret storage adapter]:adapter:(aws-parameter-store)'
|
||||
)
|
||||
_arguments $fetch_flags && ret=0
|
||||
;;
|
||||
(extract|print)
|
||||
_arguments $_kamal_flags && ret=0
|
||||
;;
|
||||
(help)
|
||||
# Remove help itself from the list of commands
|
||||
secrets_subcommands=("${(@)secrets_subcommands:#help*}")
|
||||
_describe -t secrets-help-commands "Kamal secrets help commands" secrets_subcommands
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
_kamal_server() {
|
||||
local context state line
|
||||
typeset -A opt_args
|
||||
local ret=1
|
||||
|
||||
local -a server_subcommands
|
||||
server_subcommands=(
|
||||
"bootstrap:Set up Docker to run Kamal apps"
|
||||
"exec:Run a custom command on the server (use --help to show options)"
|
||||
"help:Describe subcommands or one specific subcommand"
|
||||
)
|
||||
|
||||
local -a server_flags
|
||||
server_flags=(
|
||||
$_kamal_flags
|
||||
'(-i --interactive --no-interactive --skip-interactive)'{-i,--interactive}'[Run the command interactively]'
|
||||
'(-i --interactive --no-interactive --skip-interactive)--no-interactive[Do not run the command interactively]'
|
||||
'(-i --interactive --no-interactive --skip-interactive)--skip-interactive[Skip interactive mode]'
|
||||
)
|
||||
|
||||
_arguments -C \
|
||||
'1: :->subcmd' \
|
||||
'*:: :->args' && ret=0
|
||||
|
||||
case $state in
|
||||
(subcmd)
|
||||
_describe -t server-commands "Kamal server commands" server_subcommands && ret=0
|
||||
;;
|
||||
(args)
|
||||
case $words[1] in
|
||||
(bootstrap)
|
||||
_arguments $server_flags && ret=0
|
||||
;;
|
||||
(exec)
|
||||
if (( CURRENT == 2 )); then
|
||||
# For exec, the next argument is a command
|
||||
_kamal_message "Enter a command to execute" && ret=0
|
||||
else
|
||||
_values $server_flags && ret=0
|
||||
fi
|
||||
;;
|
||||
(help)
|
||||
# Remove help itself from the list of commands
|
||||
server_subcommands=("${(@)server_subcommands:#help*}")
|
||||
_describe -t server-help-commands "Kamal server help commands" server_subcommands
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
_kamal "$@"
|
||||
25
plugins/kamal/kamal.plugin.zsh
Normal file
25
plugins/kamal/kamal.plugin.zsh
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# Find kamal binary (local ./bin/kamal or global)
|
||||
function _kamal_command () {
|
||||
if [ -x "./bin/kamal" ]; then
|
||||
./bin/kamal "$@"
|
||||
else
|
||||
command kamal "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
function which-kamal() {
|
||||
if [ -x "./bin/kamal" ]; then
|
||||
echo "Using local ./bin/kamal"
|
||||
else
|
||||
echo "Using global $(command -v kamal)"
|
||||
fi
|
||||
}
|
||||
|
||||
# Use `_kamal_command`` function for `kamal` command
|
||||
alias kamal='_kamal_command'
|
||||
|
||||
# Aliases
|
||||
alias kad='kamal deploy'
|
||||
|
||||
# Hook up completion
|
||||
compdef _kamal_command=kamal
|
||||
|
|
@ -19,8 +19,16 @@ function {
|
|||
# load additional options
|
||||
zstyle -a :omz:plugins:keychain options options
|
||||
|
||||
# start keychain...
|
||||
keychain ${^options:-} --agents ${agents:-gpg} ${^identities} --host $SHORT_HOST
|
||||
# Check keychain version to decide whether to use --agents
|
||||
local version_string=$(keychain --version 2>&1)
|
||||
# start keychain, only use --agents for versions below 2.9.0
|
||||
autoload -Uz is-at-least
|
||||
if [[ "$version_string" =~ 'keychain ([0-9]+\.[0-9]+)' ]] && \
|
||||
is-at-least 2.9 "$match[1]"; then
|
||||
keychain ${^options:-} ${^identities} --host $SHORT_HOST
|
||||
else
|
||||
keychain ${^options:-} --agents ${agents:-gpg} ${^identities} --host $SHORT_HOST
|
||||
fi
|
||||
|
||||
# Get the filenames to store/lookup the environment from
|
||||
_keychain_env_sh="$HOME/.keychain/$SHORT_HOST-sh"
|
||||
|
|
|
|||
12
plugins/kompose/README.md
Normal file
12
plugins/kompose/README.md
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
# kompose
|
||||
|
||||
This plugin provides completion for [kompose](https://github.com/kubernetes/kompose),
|
||||
to migrate from docker compose to Kubernetes resource definitions.
|
||||
|
||||
To use it, add `kompose` to the plugins array in your zshrc file.
|
||||
|
||||
```
|
||||
plugins=(... kompose)
|
||||
```
|
||||
|
||||
**Author:** [@kevinkirkup](https://github.com/kevinkirkup)
|
||||
3
plugins/kompose/kompose.plugin.zsh
Normal file
3
plugins/kompose/kompose.plugin.zsh
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
if [ $commands[kompose] ]; then
|
||||
source <(kompose completion zsh)
|
||||
fi
|
||||
201
plugins/kube-ps1/LICENSE
Normal file
201
plugins/kube-ps1/LICENSE
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
|
@ -1,49 +1,82 @@
|
|||
# kube-ps1: Kubernetes prompt for bash and zsh
|
||||
|
||||

|
||||
[](https://github.com/jonmosco/kube-ps1/actions/workflows/ci.yml)
|
||||
|
||||
A script that lets you add the current Kubernetes context and namespace
|
||||
configured on `kubectl` to your Bash/Zsh prompt strings (i.e. the `$PS1`).
|
||||
|
||||
Inspired by several tools used to simplify usage of `kubectl`.
|
||||
|
||||

|
||||
|
||||
## Installing
|
||||
|
||||
### MacOS
|
||||
### Packages
|
||||
|
||||
### MacOS Brew Ports
|
||||
|
||||
Homebrew package manager:
|
||||
|
||||
```sh
|
||||
brew update
|
||||
brew install kube-ps1
|
||||
```
|
||||
$ brew update
|
||||
$ brew install kube-ps1
|
||||
|
||||
### Arch Linux
|
||||
|
||||
AUR Package available at [https://aur.archlinux.org/packages/kube-ps1/](https://aur.archlinux.org/packages/kube-ps1/).
|
||||
|
||||
### Oh My Zsh
|
||||
|
||||
https://github.com/ohmyzsh/ohmyzsh
|
||||
|
||||
kube-ps1 is included as a plugin in the oh-my-zsh project. To enable it, edit your `~/.zshrc` and
|
||||
add the plugin:
|
||||
|
||||
```bash
|
||||
plugins=(
|
||||
kube-ps1
|
||||
)
|
||||
PROMPT='$(kube_ps1)'$PROMPT # or RPROMPT='$(kube_ps1)'
|
||||
```
|
||||
### From Source
|
||||
|
||||
## Zsh zinit plugin
|
||||
|
||||
### Using [zinit](https://github.com/zdharma-continuum/zinit)
|
||||
|
||||
Update `.zshrc` with:
|
||||
|
||||
```sh
|
||||
zinit light jonmosco/kube-ps1
|
||||
PROMPT='$(kube_ps1)'$PROMPT # or RPROMPT='$(kube_ps1)'
|
||||
```
|
||||
|
||||
### Fig
|
||||
|
||||
Install `kube-ps1` in zsh, bash, or fish with one click.
|
||||
|
||||
<a href="https://fig.io/plugins/other/kube-ps1" target="_blank"><img src="https://fig.io/badges/install-with-fig.svg" width="120" /></a>
|
||||
|
||||
### From Source (git clone)
|
||||
|
||||
1. Clone this repository
|
||||
2. Source the kube-ps1.sh in your `~/.zshrc` or your `~/.bashrc`
|
||||
|
||||
### Arch Linux
|
||||
AUR Package available at [https://aur.archlinux.org/packages/kube-ps1/](https://aur.archlinux.org/packages/kube-ps1/).
|
||||
|
||||
#### Zsh
|
||||
|
||||
```sh
|
||||
source /path/to/kube-ps1.sh
|
||||
PROMPT='$(kube_ps1)'$PROMPT
|
||||
PROMPT='$(kube_ps1)'$PROMPT # or RPROMPT='$(kube_ps1)'
|
||||
```
|
||||
|
||||
#### Bash
|
||||
|
||||
```sh
|
||||
source /path/to/kube-ps1.sh
|
||||
PS1='[\u@\h \W $(kube_ps1)]\$ '
|
||||
```
|
||||
|
||||
### Zsh Plugin Managers
|
||||
|
||||
#### Using [zplugin](https://github.com/zdharma/zplugin)
|
||||
|
||||
Update `.zshrc` with:
|
||||
```sh
|
||||
zplugin light jonmosco/kube-ps1
|
||||
PROMPT='$(kube_ps1)'$PROMPT
|
||||
```
|
||||
|
||||
## Requirements
|
||||
|
||||
The default prompt assumes you have the `kubectl` command line utility installed.
|
||||
|
|
@ -54,22 +87,23 @@ Official installation instructions and binaries are available:
|
|||
If using this with OpenShift, the `oc` tool needs installed. It can be obtained
|
||||
from brew ports:
|
||||
|
||||
```
|
||||
```sh
|
||||
brew install openshift-cli
|
||||
```
|
||||
|
||||
or the source can be downloaded:
|
||||
|
||||
[OC Client Tools](https://www.openshift.org/download.html)
|
||||
[OC Client Tools](https://github.com/okd-project/okd/releases)
|
||||
|
||||
Set the binary to `oc` with the following environment variable:
|
||||
Set the binary to `oc` with the following variable:
|
||||
|
||||
```
|
||||
```sh
|
||||
KUBE_PS1_BINARY=oc
|
||||
```
|
||||
|
||||
If neither binary is available, the prompt will print the following:
|
||||
|
||||
```
|
||||
```sh
|
||||
(<symbol>|BINARY-N/A:N/A)
|
||||
```
|
||||
|
||||
|
|
@ -90,13 +124,13 @@ tmux, and like the functionality provided by kube-ps1, checkout the
|
|||
|
||||
The default prompt layout is:
|
||||
|
||||
```
|
||||
```sh
|
||||
(<symbol>|<context>:<namespace>)
|
||||
```
|
||||
|
||||
If the current-context is not set, kube-ps1 will return the following:
|
||||
|
||||
```
|
||||
```sh
|
||||
(<symbol>|N/A:N/A)
|
||||
```
|
||||
|
||||
|
|
@ -107,7 +141,7 @@ run `kubeoff`. To disable the prompt for all shell sessions, run `kubeoff -g`.
|
|||
You can enable it again in the current shell by running `kubeon`, and globally
|
||||
with `kubeon -g`.
|
||||
|
||||
```
|
||||
```sh
|
||||
kubeon : turn on kube-ps1 status for this shell. Takes precedence over
|
||||
global setting for current session
|
||||
kubeon -g : turn on kube-ps1 status globally
|
||||
|
|
@ -116,39 +150,69 @@ kubeoff : turn off kube-ps1 status for this shell. Takes precedence over
|
|||
kubeoff -g : turn off kube-ps1 status globally
|
||||
```
|
||||
|
||||
## Symbol
|
||||
|
||||
The default symbols are UTF8 and should work with most fonts. If you want to use the Kubernetes and OpenShift
|
||||
glyphs, you need to install a patched font that contains the glyph. [Nerd Fonts](https://www.nerdfonts.com/) provides both glyphs. Follow their installation instructions to install the patched font.
|
||||
|
||||
`KUBE_PS1_SYMBOL_CUSTOM` options
|
||||
|
||||
| Options | Symbol | Description |
|
||||
| ------------- | ------ | ----------- |
|
||||
| default (empty string) | ⎈ | Default symbol (Unicode `\u2388`) |
|
||||
| img | ☸️ | Symbol often used to represent Kubernetes (Unicode `\u2638`) |
|
||||
| oc |  | Symbol representing OpenShift (Unicode `\ue7b7`) |
|
||||
| k8s |  | Symbol representing Kubernetes (Unicode `\ue7b7`) |
|
||||
|
||||
To set the symbol to one of the custom glyphs, add the following to your `~/.bashrc` or `~/.zshrc`:
|
||||
|
||||
```sh
|
||||
KUBE_PS1_SYMBOL_CUSTOM=img
|
||||
```
|
||||
|
||||
To set the symbol to the default, set the `KUBE_PS1_SYMBOL` to an empty string.
|
||||
|
||||
Heres a demo of the symbols in action:
|
||||

|
||||
|
||||
If the font is not properly installed, and the glyph is not available, it will display an empty set of brackets or similar:
|
||||
|
||||
```sh
|
||||
echo -n "\ue7b7"
|
||||
|
||||
```
|
||||
|
||||
## Customization
|
||||
|
||||
The default settings can be overridden in `~/.bashrc` or `~/.zshrc` by setting
|
||||
the following environment variables:
|
||||
the following variables:
|
||||
|
||||
| Variable | Default | Meaning |
|
||||
| :------- | :-----: | ------- |
|
||||
| `KUBE_PS1_BINARY` | `kubectl` | Default Kubernetes binary |
|
||||
| `KUBE_PS1_NS_ENABLE` | `true` | Display the namespace. If set to `false`, this will also disable `KUBE_PS1_DIVIDER` |
|
||||
| `KUBE_PS1_PREFIX` | `(` | Prompt opening character |
|
||||
| `KUBE_PS1_SYMBOL_ENABLE` | `true ` | Display the prompt Symbol. If set to `false`, this will also disable `KUBE_PS1_SEPARATOR` |
|
||||
| `KUBE_PS1_PREFIX` | `(` | Prompt opening character |
|
||||
| `KUBE_PS1_SYMBOL_ENABLE` | `true` | Display the prompt Symbol. If set to `false`, this will also disable `KUBE_PS1_SEPARATOR` |
|
||||
| `KUBE_PS1_SYMBOL_PADDING` | `false` | Adds a space (padding) after the symbol to prevent clobbering prompt characters |
|
||||
| `KUBE_PS1_SYMBOL_DEFAULT` | `⎈ ` | Default prompt symbol. Unicode `\u2388` |
|
||||
| `KUBE_PS1_SYMBOL_USE_IMG` | `false` | ☸️ , Unicode `\u2638` as the prompt symbol |
|
||||
| `KUBE_PS1_SYMBOL_CUSTOM` | `⎈` | Change the Default prompt symbol. Unicode `\u2388`. Options are `k8s`, `img`, `oc` |
|
||||
| `KUBE_PS1_SYMBOL_COLOR` | `blue` | Change the Default symbol color. |
|
||||
| `KUBE_PS1_SEPARATOR` | | | Separator between symbol and context name |
|
||||
| `KUBE_PS1_DIVIDER` | `:` | Separator between context and namespace |
|
||||
| `KUBE_PS1_SUFFIX` | `)` | Prompt closing character |
|
||||
| `KUBE_PS1_CLUSTER_FUNCTION` | No default, must be user supplied | Function to customize how cluster is displayed |
|
||||
| `KUBE_PS1_NAMESPACE_FUNCTION` | No default, must be user supplied | Function to customize how namespace is displayed |
|
||||
| `KUBE_PS1_KUBECONFIG_SYMLINK` | `false` | Treat `KUBECONFIG` and `~/.kube/config` files as symbolic links |
|
||||
|
||||
For terminals that do not support UTF-8, the symbol will be replaced with the
|
||||
string `k8s`.
|
||||
| `KUBE_PS1_CTX_COLOR_FUNCTION` | No default, must be user supplied | Function to customize context color based on context name |
|
||||
| `KUBE_PS1_HIDE_IF_NOCONTEXT` | `false` | Hide the kube-ps1 prompt if no context is set |
|
||||
|
||||
To disable a feature, set it to an empty string:
|
||||
|
||||
```
|
||||
```sh
|
||||
KUBE_PS1_SEPARATOR=''
|
||||
```
|
||||
|
||||
## Colors
|
||||
|
||||
The default colors are set with the following environment variables:
|
||||
The default colors are set with the following variables:
|
||||
|
||||
| Variable | Default | Meaning |
|
||||
| :------- | :-----: | ------- |
|
||||
|
|
@ -166,13 +230,13 @@ namespace.
|
|||
Set the variable to an empty string if you do not want color for each
|
||||
prompt section:
|
||||
|
||||
```
|
||||
```sh
|
||||
KUBE_PS1_CTX_COLOR=''
|
||||
```
|
||||
|
||||
Names are usable for the following colors:
|
||||
|
||||
```
|
||||
```text
|
||||
black, red, green, yellow, blue, magenta, cyan
|
||||
```
|
||||
|
||||
|
|
@ -216,6 +280,45 @@ export KUBE_PS1_NAMESPACE_FUNCTION=get_namespace_upper
|
|||
|
||||
In both cases, the variable is set to the name of the function, and you must have defined the function in your shell configuration before kube_ps1 is called. The function must accept a single parameter and echo out the final value.
|
||||
|
||||
## Dynamic Context Colors
|
||||
|
||||
You can set different colors for different contexts using the
|
||||
`KUBE_PS1_CTX_COLOR_FUNCTION` variable. This is useful for color-coding
|
||||
contexts to make production environments stand out visually.
|
||||
|
||||
For example, to make production contexts red and development contexts green:
|
||||
|
||||
```sh
|
||||
function kube_ps1_ctx_color() {
|
||||
local context="$1"
|
||||
|
||||
case "$context" in
|
||||
*prod*)
|
||||
echo "red"
|
||||
;;
|
||||
*dev*)
|
||||
echo "green"
|
||||
;;
|
||||
*staging*|*stg*)
|
||||
echo "yellow"
|
||||
;;
|
||||
*)
|
||||
echo "cyan" # default color for other contexts
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
export KUBE_PS1_CTX_COLOR_FUNCTION=kube_ps1_ctx_color
|
||||
```
|
||||
|
||||
The function receives the context name as the first parameter and should echo
|
||||
the desired color name. All color options supported by `KUBE_PS1_CTX_COLOR` are
|
||||
available, including named colors (black, red, green, yellow, blue, magenta,
|
||||
cyan, white) and 256-color codes (0-256).
|
||||
|
||||
If `KUBE_PS1_CTX_COLOR_FUNCTION` is not set, kube-ps1 will use the value of
|
||||
`KUBE_PS1_CTX_COLOR` (default: red).
|
||||
|
||||
### Bug Reports and shell configuration
|
||||
|
||||
Due to the vast ways of customizing the shell, please try the prompt with a
|
||||
|
|
@ -224,18 +327,28 @@ minimal configuration before submitting a bug report.
|
|||
This can be done as follows for each shell before loading kube-ps1:
|
||||
|
||||
Bash:
|
||||
```bash
|
||||
|
||||
```sh
|
||||
bash --norc
|
||||
```
|
||||
|
||||
Zsh:
|
||||
```bash
|
||||
|
||||
```sh
|
||||
zsh -f
|
||||
or
|
||||
zsh --no-rcs
|
||||
```
|
||||
|
||||
## Contributors
|
||||
For the prompt symbol, a patched font that contains the glyphs must be installed.
|
||||
[Nerd Fonts Downloads](https://www.nerdfonts.com/font-downloads) provides patched
|
||||
fonts containing the glyphs. Please consult their documentation for this, support
|
||||
is out of scope for this project.
|
||||
|
||||
* [Ahmet Alp Balkan](https://github.com/ahmetb)
|
||||
* Jared Yanovich
|
||||
### Contributors
|
||||
|
||||
Thank you to everyone in the community for their contributions to kube-ps1!
|
||||
|
||||
<a href="https://github.com/jonmosco/kube-ps1/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=jonmosco/kube-ps1" />
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
# Kubernetes prompt helper for bash/zsh
|
||||
# Displays current context and namespace
|
||||
|
||||
# Copyright 2021 Jon Mosco
|
||||
# Copyright 2026 Jon Mosco
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
|
@ -24,9 +24,9 @@
|
|||
# Override these values in ~/.zshrc or ~/.bashrc
|
||||
KUBE_PS1_BINARY="${KUBE_PS1_BINARY:-kubectl}"
|
||||
KUBE_PS1_SYMBOL_ENABLE="${KUBE_PS1_SYMBOL_ENABLE:-true}"
|
||||
KUBE_PS1_SYMBOL_DEFAULT=${KUBE_PS1_SYMBOL_DEFAULT:-$'\u2388'}
|
||||
KUBE_PS1_SYMBOL_PADDING="${KUBE_PS1_SYMBOL_PADDING:-false}"
|
||||
KUBE_PS1_SYMBOL_USE_IMG="${KUBE_PS1_SYMBOL_USE_IMG:-false}"
|
||||
KUBE_PS1_SYMBOL_COLOR="${KUBE_PS1_SYMBOL_COLOR:-}"
|
||||
|
||||
KUBE_PS1_NS_ENABLE="${KUBE_PS1_NS_ENABLE:-true}"
|
||||
KUBE_PS1_CONTEXT_ENABLE="${KUBE_PS1_CONTEXT_ENABLE:-true}"
|
||||
KUBE_PS1_PREFIX="${KUBE_PS1_PREFIX-(}"
|
||||
|
|
@ -34,29 +34,38 @@ KUBE_PS1_SEPARATOR="${KUBE_PS1_SEPARATOR-|}"
|
|||
KUBE_PS1_DIVIDER="${KUBE_PS1_DIVIDER-:}"
|
||||
KUBE_PS1_SUFFIX="${KUBE_PS1_SUFFIX-)}"
|
||||
|
||||
KUBE_PS1_SYMBOL_COLOR="${KUBE_PS1_SYMBOL_COLOR-blue}"
|
||||
KUBE_PS1_CTX_COLOR="${KUBE_PS1_CTX_COLOR-red}"
|
||||
KUBE_PS1_NS_COLOR="${KUBE_PS1_NS_COLOR-cyan}"
|
||||
KUBE_PS1_BG_COLOR="${KUBE_PS1_BG_COLOR}"
|
||||
KUBE_PS1_HIDE_IF_NOCONTEXT="${KUBE_PS1_HIDE_IF_NOCONTEXT:-false}"
|
||||
|
||||
KUBE_PS1_KUBECONFIG_CACHE="${KUBECONFIG}"
|
||||
KUBE_PS1_KUBECONFIG_SYMLINK="${KUBE_PS1_KUBECONFIG_SYMLINK:-false}"
|
||||
KUBE_PS1_DISABLE_PATH="${HOME}/.kube/kube-ps1/disabled"
|
||||
KUBE_PS1_LAST_TIME=0
|
||||
KUBE_PS1_CLUSTER_FUNCTION="${KUBE_PS1_CLUSTER_FUNCTION}"
|
||||
KUBE_PS1_NAMESPACE_FUNCTION="${KUBE_PS1_NAMESPACE_FUNCTION}"
|
||||
_KUBE_PS1_KUBECONFIG_CACHE="${KUBECONFIG}"
|
||||
_KUBE_PS1_DISABLE_PATH="${HOME}/.kube/kube-ps1/disabled"
|
||||
_KUBE_PS1_LAST_TIME=0
|
||||
|
||||
# Determine our shell
|
||||
if [ "${ZSH_VERSION-}" ]; then
|
||||
KUBE_PS1_SHELL="zsh"
|
||||
elif [ "${BASH_VERSION-}" ]; then
|
||||
KUBE_PS1_SHELL="bash"
|
||||
fi
|
||||
_kube_ps1_shell_type() {
|
||||
local _KUBE_PS1_SHELL_TYPE
|
||||
|
||||
if [ "${ZSH_VERSION-}" ]; then
|
||||
_KUBE_PS1_SHELL_TYPE="zsh"
|
||||
elif [ "${BASH_VERSION-}" ]; then
|
||||
_KUBE_PS1_SHELL_TYPE="bash"
|
||||
fi
|
||||
echo $_KUBE_PS1_SHELL_TYPE
|
||||
}
|
||||
|
||||
_kube_ps1_init() {
|
||||
[[ -f "${KUBE_PS1_DISABLE_PATH}" ]] && KUBE_PS1_ENABLED=off
|
||||
[[ -f "${_KUBE_PS1_DISABLE_PATH}" ]] && KUBE_PS1_ENABLED=off
|
||||
|
||||
case "${KUBE_PS1_SHELL}" in
|
||||
# Detect shell type once and cache it
|
||||
_KUBE_PS1_SHELL="$(_kube_ps1_shell_type)"
|
||||
|
||||
# Check tput availability once
|
||||
if tput setaf 1 &> /dev/null; then
|
||||
_KUBE_PS1_TPUT_AVAILABLE=true
|
||||
else
|
||||
_KUBE_PS1_TPUT_AVAILABLE=false
|
||||
fi
|
||||
|
||||
case "${_KUBE_PS1_SHELL}" in
|
||||
"zsh")
|
||||
_KUBE_PS1_OPEN_ESC="%{"
|
||||
_KUBE_PS1_CLOSE_ESC="%}"
|
||||
|
|
@ -64,7 +73,7 @@ _kube_ps1_init() {
|
|||
_KUBE_PS1_DEFAULT_FG="%f"
|
||||
setopt PROMPT_SUBST
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook precmd _kube_ps1_update_cache
|
||||
add-zsh-hook precmd _kube_ps1_prompt_update
|
||||
zmodload -F zsh/stat b:zstat
|
||||
zmodload zsh/datetime
|
||||
;;
|
||||
|
|
@ -73,75 +82,75 @@ _kube_ps1_init() {
|
|||
_KUBE_PS1_CLOSE_ESC=$'\002'
|
||||
_KUBE_PS1_DEFAULT_BG=$'\033[49m'
|
||||
_KUBE_PS1_DEFAULT_FG=$'\033[39m'
|
||||
[[ $PROMPT_COMMAND =~ _kube_ps1_update_cache ]] || PROMPT_COMMAND="_kube_ps1_update_cache;${PROMPT_COMMAND:-:}"
|
||||
[[ $PROMPT_COMMAND =~ _kube_ps1_prompt_update ]] || PROMPT_COMMAND="_kube_ps1_prompt_update;${PROMPT_COMMAND:-:}"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_kube_ps1_color_fg() {
|
||||
local KUBE_PS1_FG_CODE
|
||||
local _KUBE_PS1_FG_CODE
|
||||
case "${1}" in
|
||||
black) KUBE_PS1_FG_CODE=0;;
|
||||
red) KUBE_PS1_FG_CODE=1;;
|
||||
green) KUBE_PS1_FG_CODE=2;;
|
||||
yellow) KUBE_PS1_FG_CODE=3;;
|
||||
blue) KUBE_PS1_FG_CODE=4;;
|
||||
magenta) KUBE_PS1_FG_CODE=5;;
|
||||
cyan) KUBE_PS1_FG_CODE=6;;
|
||||
white) KUBE_PS1_FG_CODE=7;;
|
||||
black) _KUBE_PS1_FG_CODE=0;;
|
||||
red) _KUBE_PS1_FG_CODE=1;;
|
||||
green) _KUBE_PS1_FG_CODE=2;;
|
||||
yellow) _KUBE_PS1_FG_CODE=3;;
|
||||
blue) _KUBE_PS1_FG_CODE=4;;
|
||||
magenta) _KUBE_PS1_FG_CODE=5;;
|
||||
cyan) _KUBE_PS1_FG_CODE=6;;
|
||||
white) _KUBE_PS1_FG_CODE=7;;
|
||||
# 256
|
||||
[0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-6]) KUBE_PS1_FG_CODE="${1}";;
|
||||
*) KUBE_PS1_FG_CODE=default
|
||||
[0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-6]) _KUBE_PS1_FG_CODE="${1}";;
|
||||
*) _KUBE_PS1_FG_CODE=default
|
||||
esac
|
||||
|
||||
if [[ "${KUBE_PS1_FG_CODE}" == "default" ]]; then
|
||||
KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}"
|
||||
if [[ "${_KUBE_PS1_FG_CODE}" == "default" ]]; then
|
||||
_KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}"
|
||||
return
|
||||
elif [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then
|
||||
KUBE_PS1_FG_CODE="%F{$KUBE_PS1_FG_CODE}"
|
||||
elif [[ "${KUBE_PS1_SHELL}" == "bash" ]]; then
|
||||
if tput setaf 1 &> /dev/null; then
|
||||
KUBE_PS1_FG_CODE="$(tput setaf ${KUBE_PS1_FG_CODE})"
|
||||
elif [[ $KUBE_PS1_FG_CODE -ge 0 ]] && [[ $KUBE_PS1_FG_CODE -le 256 ]]; then
|
||||
KUBE_PS1_FG_CODE="\033[38;5;${KUBE_PS1_FG_CODE}m"
|
||||
elif [[ "${_KUBE_PS1_SHELL}" == "zsh" ]]; then
|
||||
_KUBE_PS1_FG_CODE="%F{$_KUBE_PS1_FG_CODE}"
|
||||
elif [[ "${_KUBE_PS1_SHELL}" == "bash" ]]; then
|
||||
if [[ "${_KUBE_PS1_TPUT_AVAILABLE}" == "true" ]]; then
|
||||
_KUBE_PS1_FG_CODE="$(tput setaf "${_KUBE_PS1_FG_CODE}")"
|
||||
elif [[ $_KUBE_PS1_FG_CODE -ge 0 ]] && [[ $_KUBE_PS1_FG_CODE -le 256 ]]; then
|
||||
_KUBE_PS1_FG_CODE="\033[38;5;${_KUBE_PS1_FG_CODE}m"
|
||||
else
|
||||
KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}"
|
||||
_KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}"
|
||||
fi
|
||||
fi
|
||||
echo ${_KUBE_PS1_OPEN_ESC}${KUBE_PS1_FG_CODE}${_KUBE_PS1_CLOSE_ESC}
|
||||
echo "${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_FG_CODE}${_KUBE_PS1_CLOSE_ESC}"
|
||||
}
|
||||
|
||||
_kube_ps1_color_bg() {
|
||||
local KUBE_PS1_BG_CODE
|
||||
local _KUBE_PS1_BG_CODE
|
||||
case "${1}" in
|
||||
black) KUBE_PS1_BG_CODE=0;;
|
||||
red) KUBE_PS1_BG_CODE=1;;
|
||||
green) KUBE_PS1_BG_CODE=2;;
|
||||
yellow) KUBE_PS1_BG_CODE=3;;
|
||||
blue) KUBE_PS1_BG_CODE=4;;
|
||||
magenta) KUBE_PS1_BG_CODE=5;;
|
||||
cyan) KUBE_PS1_BG_CODE=6;;
|
||||
white) KUBE_PS1_BG_CODE=7;;
|
||||
black) _KUBE_PS1_BG_CODE=0;;
|
||||
red) _KUBE_PS1_BG_CODE=1;;
|
||||
green) _KUBE_PS1_BG_CODE=2;;
|
||||
yellow) _KUBE_PS1_BG_CODE=3;;
|
||||
blue) _KUBE_PS1_BG_CODE=4;;
|
||||
magenta) _KUBE_PS1_BG_CODE=5;;
|
||||
cyan) _KUBE_PS1_BG_CODE=6;;
|
||||
white) _KUBE_PS1_BG_CODE=7;;
|
||||
# 256
|
||||
[0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-6]) KUBE_PS1_BG_CODE="${1}";;
|
||||
*) KUBE_PS1_BG_CODE=$'\033[0m';;
|
||||
[0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-6]) _KUBE_PS1_BG_CODE="${1}";;
|
||||
*) _KUBE_PS1_BG_CODE=$'\033[0m';;
|
||||
esac
|
||||
|
||||
if [[ "${KUBE_PS1_BG_CODE}" == "default" ]]; then
|
||||
KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_BG}"
|
||||
if [[ "${_KUBE_PS1_BG_CODE}" == "default" ]]; then
|
||||
_KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_BG}"
|
||||
return
|
||||
elif [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then
|
||||
KUBE_PS1_BG_CODE="%K{$KUBE_PS1_BG_CODE}"
|
||||
elif [[ "${KUBE_PS1_SHELL}" == "bash" ]]; then
|
||||
if tput setaf 1 &> /dev/null; then
|
||||
KUBE_PS1_BG_CODE="$(tput setab ${KUBE_PS1_BG_CODE})"
|
||||
elif [[ $KUBE_PS1_BG_CODE -ge 0 ]] && [[ $KUBE_PS1_BG_CODE -le 256 ]]; then
|
||||
KUBE_PS1_BG_CODE="\033[48;5;${KUBE_PS1_BG_CODE}m"
|
||||
elif [[ "${_KUBE_PS1_SHELL}" == "zsh" ]]; then
|
||||
_KUBE_PS1_BG_CODE="%K{$_KUBE_PS1_BG_CODE}"
|
||||
elif [[ "${_KUBE_PS1_SHELL}" == "bash" ]]; then
|
||||
if [[ "${_KUBE_PS1_TPUT_AVAILABLE}" == "true" ]]; then
|
||||
_KUBE_PS1_BG_CODE="$(tput setab "${_KUBE_PS1_BG_CODE}")"
|
||||
elif [[ $_KUBE_PS1_BG_CODE -ge 0 ]] && [[ $_KUBE_PS1_BG_CODE -le 256 ]]; then
|
||||
_KUBE_PS1_BG_CODE="\033[48;5;${_KUBE_PS1_BG_CODE}m"
|
||||
else
|
||||
KUBE_PS1_BG_CODE="${DEFAULT_BG}"
|
||||
_KUBE_PS1_BG_CODE="${_KUBE_PS1_DEFAULT_BG}"
|
||||
fi
|
||||
fi
|
||||
echo ${OPEN_ESC}${KUBE_PS1_BG_CODE}${CLOSE_ESC}
|
||||
echo "${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_BG_CODE}${_KUBE_PS1_CLOSE_ESC}"
|
||||
}
|
||||
|
||||
_kube_ps1_binary_check() {
|
||||
|
|
@ -149,38 +158,60 @@ _kube_ps1_binary_check() {
|
|||
}
|
||||
|
||||
_kube_ps1_symbol() {
|
||||
# Exit early if symbol display is disabled
|
||||
[[ "${KUBE_PS1_SYMBOL_ENABLE}" == false ]] && return
|
||||
|
||||
case "${KUBE_PS1_SHELL}" in
|
||||
bash)
|
||||
if ((BASH_VERSINFO[0] >= 4)) && [[ $'\u2388' != "\\u2388" ]]; then
|
||||
KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_DEFAULT}"
|
||||
KUBE_PS1_SYMBOL_IMG=$'\u2638\ufe0f'
|
||||
else
|
||||
KUBE_PS1_SYMBOL=$'\xE2\x8E\x88'
|
||||
KUBE_PS1_SYMBOL_IMG=$'\xE2\x98\xB8'
|
||||
fi
|
||||
local symbol_arg="${KUBE_PS1_SYMBOL_CUSTOM}"
|
||||
|
||||
local symbol=""
|
||||
local symbol_default=$'\u2388'
|
||||
local symbol_img="☸️"
|
||||
local k8s_glyph=$'\Uf10fe'
|
||||
local k8s_symbol_color=blue
|
||||
local oc_glyph=$'\ue7b7'
|
||||
local oc_symbol_color=red
|
||||
local custom_symbol_color="${KUBE_PS1_SYMBOL_COLOR:-$k8s_symbol_color}"
|
||||
|
||||
# Choose the symbol based on the provided argument or environment variable
|
||||
case "${symbol_arg}" in
|
||||
"img")
|
||||
symbol="${symbol_img}"
|
||||
;;
|
||||
"k8s")
|
||||
symbol="$(_kube_ps1_color_fg "${custom_symbol_color}")${k8s_glyph}${KUBE_PS1_RESET_COLOR}"
|
||||
;;
|
||||
"oc")
|
||||
symbol="$(_kube_ps1_color_fg ${oc_symbol_color})${oc_glyph}${KUBE_PS1_RESET_COLOR}"
|
||||
;;
|
||||
zsh)
|
||||
KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_DEFAULT}"
|
||||
KUBE_PS1_SYMBOL_IMG="\u2638";;
|
||||
*)
|
||||
KUBE_PS1_SYMBOL="k8s"
|
||||
case "${_KUBE_PS1_SHELL}" in
|
||||
bash)
|
||||
if ((BASH_VERSINFO[0] >= 4)) && [[ $'\u2388' != "\\u2388" ]]; then
|
||||
symbol="$(_kube_ps1_color_fg $custom_symbol_color)${symbol_default}${KUBE_PS1_RESET_COLOR}"
|
||||
symbol_img=$'\u2638\ufe0f'
|
||||
else
|
||||
symbol=$'\xE2\x8E\x88'
|
||||
symbol_img=$'\xE2\x98\xB8'
|
||||
fi
|
||||
;;
|
||||
zsh)
|
||||
symbol="$(_kube_ps1_color_fg $custom_symbol_color)${symbol_default}${KUBE_PS1_RESET_COLOR}"
|
||||
symbol_img="☸️"
|
||||
;;
|
||||
*)
|
||||
symbol="k8s"
|
||||
esac
|
||||
esac
|
||||
|
||||
if [[ "${KUBE_PS1_SYMBOL_USE_IMG}" == true ]]; then
|
||||
KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_IMG}"
|
||||
fi
|
||||
|
||||
# Append padding if enabled
|
||||
if [[ "${KUBE_PS1_SYMBOL_PADDING}" == true ]]; then
|
||||
echo "${KUBE_PS1_SYMBOL} "
|
||||
echo "${symbol} "
|
||||
else
|
||||
echo "${KUBE_PS1_SYMBOL}"
|
||||
echo "${symbol}"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
_kube_ps1_split() {
|
||||
_kube_ps1_split_config() {
|
||||
type setopt >/dev/null 2>&1 && setopt SH_WORD_SPLIT
|
||||
local IFS=$1
|
||||
echo $2
|
||||
|
|
@ -191,32 +222,21 @@ _kube_ps1_file_newer_than() {
|
|||
local file=$1
|
||||
local check_time=$2
|
||||
|
||||
if [[ "${KUBE_PS1_KUBECONFIG_SYMLINK}" == "true" ]]; then
|
||||
if [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then
|
||||
mtime=$(zstat -L +mtime "${file}")
|
||||
elif stat -c "%s" /dev/null &> /dev/null; then
|
||||
# GNU stat
|
||||
mtime=$(stat -c %Y "${file}")
|
||||
else
|
||||
# BSD stat
|
||||
mtime=$(stat -f %m "$file")
|
||||
fi
|
||||
if [[ "${_KUBE_PS1_SHELL}" == "zsh" ]]; then
|
||||
# Use zstat '-F %s.%s' to make it compatible with low zsh version (eg: 5.0.2)
|
||||
mtime=$(zstat -L +mtime -F %s.%s "${file}")
|
||||
elif stat -c "%s" /dev/null &> /dev/null; then
|
||||
# GNU stat
|
||||
mtime=$(stat -L -c %Y "${file}")
|
||||
else
|
||||
if [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then
|
||||
mtime=$(zstat +mtime "${file}")
|
||||
elif stat -c "%s" /dev/null &> /dev/null; then
|
||||
# GNU stat
|
||||
mtime=$(stat -L -c %Y "${file}")
|
||||
else
|
||||
# BSD stat
|
||||
mtime=$(stat -L -f %m "$file")
|
||||
fi
|
||||
# BSD stat
|
||||
mtime=$(stat -L -f %m "$file")
|
||||
fi
|
||||
|
||||
[[ "${mtime}" -gt "${check_time}" ]]
|
||||
}
|
||||
|
||||
_kube_ps1_update_cache() {
|
||||
_kube_ps1_prompt_update() {
|
||||
local return_code=$?
|
||||
|
||||
[[ "${KUBE_PS1_ENABLED}" == "off" ]] && return $return_code
|
||||
|
|
@ -225,27 +245,35 @@ _kube_ps1_update_cache() {
|
|||
# No ability to fetch context/namespace; display N/A.
|
||||
KUBE_PS1_CONTEXT="BINARY-N/A"
|
||||
KUBE_PS1_NAMESPACE="N/A"
|
||||
return
|
||||
return $return_code
|
||||
fi
|
||||
|
||||
if [[ "${KUBECONFIG}" != "${KUBE_PS1_KUBECONFIG_CACHE}" ]]; then
|
||||
if [[ "${KUBECONFIG}" != "${_KUBE_PS1_KUBECONFIG_CACHE}" ]]; then
|
||||
# User changed KUBECONFIG; unconditionally refetch.
|
||||
KUBE_PS1_KUBECONFIG_CACHE=${KUBECONFIG}
|
||||
_KUBE_PS1_KUBECONFIG_CACHE=${KUBECONFIG}
|
||||
_kube_ps1_get_context_ns
|
||||
return
|
||||
return $return_code
|
||||
fi
|
||||
|
||||
# kubectl will read the environment variable $KUBECONFIG
|
||||
# otherwise set it to ~/.kube/config
|
||||
local conf
|
||||
for conf in $(_kube_ps1_split : "${KUBECONFIG:-${HOME}/.kube/config}"); do
|
||||
local config_file_cache
|
||||
|
||||
for conf in $(_kube_ps1_split_config : "${KUBECONFIG:-${HOME}/.kube/config}"); do
|
||||
[[ -r "${conf}" ]] || continue
|
||||
if _kube_ps1_file_newer_than "${conf}" "${KUBE_PS1_LAST_TIME}"; then
|
||||
config_file_cache+=":${conf}"
|
||||
if _kube_ps1_file_newer_than "${conf}" "${_KUBE_PS1_LAST_TIME}"; then
|
||||
_kube_ps1_get_context_ns
|
||||
return
|
||||
return $return_code
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ "${config_file_cache}" != "${_KUBE_PS1_CFGFILES_READ_CACHE}" ]]; then
|
||||
_kube_ps1_get_context_ns
|
||||
return $return_code
|
||||
fi
|
||||
|
||||
return $return_code
|
||||
}
|
||||
|
||||
|
|
@ -255,8 +283,8 @@ _kube_ps1_get_context() {
|
|||
# Set namespace to 'N/A' if it is not defined
|
||||
KUBE_PS1_CONTEXT="${KUBE_PS1_CONTEXT:-N/A}"
|
||||
|
||||
if [[ ! -z "${KUBE_PS1_CLUSTER_FUNCTION}" ]]; then
|
||||
KUBE_PS1_CONTEXT=$($KUBE_PS1_CLUSTER_FUNCTION $KUBE_PS1_CONTEXT)
|
||||
if [[ -n "${KUBE_PS1_CLUSTER_FUNCTION}" ]]; then
|
||||
KUBE_PS1_CONTEXT="$("${KUBE_PS1_CLUSTER_FUNCTION}" "${KUBE_PS1_CONTEXT}")"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
|
@ -264,27 +292,36 @@ _kube_ps1_get_context() {
|
|||
_kube_ps1_get_ns() {
|
||||
if [[ "${KUBE_PS1_NS_ENABLE}" == true ]]; then
|
||||
KUBE_PS1_NAMESPACE="$(${KUBE_PS1_BINARY} config view --minify --output 'jsonpath={..namespace}' 2>/dev/null)"
|
||||
# Set namespace to 'default' if it is not defined
|
||||
KUBE_PS1_NAMESPACE="${KUBE_PS1_NAMESPACE:-default}"
|
||||
KUBE_PS1_NAMESPACE="${KUBE_PS1_NAMESPACE:-N/A}"
|
||||
|
||||
if [[ ! -z "${KUBE_PS1_NAMESPACE_FUNCTION}" ]]; then
|
||||
KUBE_PS1_NAMESPACE=$($KUBE_PS1_NAMESPACE_FUNCTION $KUBE_PS1_NAMESPACE)
|
||||
if [[ -n "${KUBE_PS1_NAMESPACE_FUNCTION}" ]]; then
|
||||
KUBE_PS1_NAMESPACE="$("${KUBE_PS1_NAMESPACE_FUNCTION}" "${KUBE_PS1_NAMESPACE}")"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
_kube_ps1_get_context_ns() {
|
||||
# Set the command time
|
||||
if [[ "${KUBE_PS1_SHELL}" == "bash" ]]; then
|
||||
if [[ "${_KUBE_PS1_SHELL}" == "bash" ]]; then
|
||||
if ((BASH_VERSINFO[0] >= 4 && BASH_VERSINFO[1] >= 2)); then
|
||||
KUBE_PS1_LAST_TIME=$(printf '%(%s)T')
|
||||
_KUBE_PS1_LAST_TIME=$(printf '%(%s)T')
|
||||
else
|
||||
KUBE_PS1_LAST_TIME=$(date +%s)
|
||||
_KUBE_PS1_LAST_TIME=$(date +%s)
|
||||
fi
|
||||
elif [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then
|
||||
KUBE_PS1_LAST_TIME=$EPOCHSECONDS
|
||||
elif [[ "${_KUBE_PS1_SHELL}" == "zsh" ]]; then
|
||||
_KUBE_PS1_LAST_TIME=$EPOCHREALTIME
|
||||
fi
|
||||
|
||||
KUBE_PS1_CONTEXT="${KUBE_PS1_CONTEXT:-N/A}"
|
||||
KUBE_PS1_NAMESPACE="${KUBE_PS1_NAMESPACE:-N/A}"
|
||||
|
||||
# Cache which cfgfiles we can read in case they change.
|
||||
local conf
|
||||
_KUBE_PS1_CFGFILES_READ_CACHE=
|
||||
for conf in $(_kube_ps1_split_config : "${KUBECONFIG:-${HOME}/.kube/config}"); do
|
||||
[[ -r $conf ]] && _KUBE_PS1_CFGFILES_READ_CACHE+=":$conf"
|
||||
done
|
||||
|
||||
_kube_ps1_get_context
|
||||
_kube_ps1_get_ns
|
||||
}
|
||||
|
|
@ -298,7 +335,7 @@ Toggle kube-ps1 prompt on
|
|||
|
||||
Usage: kubeon [-g | --global] [-h | --help]
|
||||
|
||||
With no arguments, turn off kube-ps1 status for this shell instance (default).
|
||||
With no arguments, turn on kube-ps1 status for this shell instance (default).
|
||||
|
||||
-g --global turn on kube-ps1 status globally
|
||||
-h --help print this message
|
||||
|
|
@ -322,7 +359,7 @@ kubeon() {
|
|||
if [[ "${1}" == '-h' || "${1}" == '--help' ]]; then
|
||||
_kubeon_usage
|
||||
elif [[ "${1}" == '-g' || "${1}" == '--global' ]]; then
|
||||
rm -f -- "${KUBE_PS1_DISABLE_PATH}"
|
||||
rm -f -- "${_KUBE_PS1_DISABLE_PATH}"
|
||||
elif [[ "$#" -ne 0 ]]; then
|
||||
echo -e "error: unrecognized flag ${1}\\n"
|
||||
_kubeon_usage
|
||||
|
|
@ -336,8 +373,8 @@ kubeoff() {
|
|||
if [[ "${1}" == '-h' || "${1}" == '--help' ]]; then
|
||||
_kubeoff_usage
|
||||
elif [[ "${1}" == '-g' || "${1}" == '--global' ]]; then
|
||||
mkdir -p -- "$(dirname "${KUBE_PS1_DISABLE_PATH}")"
|
||||
touch -- "${KUBE_PS1_DISABLE_PATH}"
|
||||
mkdir -p -- "$(dirname "${_KUBE_PS1_DISABLE_PATH}")"
|
||||
touch -- "${_KUBE_PS1_DISABLE_PATH}"
|
||||
elif [[ $# -ne 0 ]]; then
|
||||
echo "error: unrecognized flag ${1}" >&2
|
||||
_kubeoff_usage
|
||||
|
|
@ -351,22 +388,29 @@ kubeoff() {
|
|||
kube_ps1() {
|
||||
[[ "${KUBE_PS1_ENABLED}" == "off" ]] && return
|
||||
[[ -z "${KUBE_PS1_CONTEXT}" ]] && [[ "${KUBE_PS1_CONTEXT_ENABLE}" == true ]] && return
|
||||
[[ "${KUBE_PS1_CONTEXT}" == "N/A" ]] && [[ ${KUBE_PS1_HIDE_IF_NOCONTEXT} == true ]] && return
|
||||
|
||||
|
||||
local KUBE_PS1
|
||||
local KUBE_PS1_RESET_COLOR="${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_DEFAULT_FG}${_KUBE_PS1_CLOSE_ESC}"
|
||||
|
||||
# If background color is set, reset color should also reset the background
|
||||
# if [[ -n "${KUBE_PS1_BG_COLOR}" ]]; then
|
||||
# KUBE_PS1_RESET_COLOR="${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_DEFAULT_FG}${_KUBE_PS1_DEFAULT_BG}${_KUBE_PS1_CLOSE_ESC}"
|
||||
# fi
|
||||
|
||||
# Background Color
|
||||
[[ -n "${KUBE_PS1_BG_COLOR}" ]] && KUBE_PS1+="$(_kube_ps1_color_bg ${KUBE_PS1_BG_COLOR})"
|
||||
[[ -n "${KUBE_PS1_BG_COLOR}" ]] && KUBE_PS1+="$(_kube_ps1_color_bg "${KUBE_PS1_BG_COLOR}")"
|
||||
|
||||
# Prefix
|
||||
if [[ -z "${KUBE_PS1_PREFIX_COLOR:-}" ]] && [[ -n "${KUBE_PS1_PREFIX}" ]]; then
|
||||
KUBE_PS1+="${KUBE_PS1_PREFIX}"
|
||||
else
|
||||
KUBE_PS1+="$(_kube_ps1_color_fg $KUBE_PS1_PREFIX_COLOR)${KUBE_PS1_PREFIX}${KUBE_PS1_RESET_COLOR}"
|
||||
KUBE_PS1+="$(_kube_ps1_color_fg "${KUBE_PS1_PREFIX_COLOR}")${KUBE_PS1_PREFIX}${KUBE_PS1_RESET_COLOR}"
|
||||
fi
|
||||
|
||||
# Symbol
|
||||
KUBE_PS1+="$(_kube_ps1_color_fg $KUBE_PS1_SYMBOL_COLOR)$(_kube_ps1_symbol)${KUBE_PS1_RESET_COLOR}"
|
||||
KUBE_PS1+="$(_kube_ps1_symbol)"
|
||||
|
||||
if [[ -n "${KUBE_PS1_SEPARATOR}" ]] && [[ "${KUBE_PS1_SYMBOL_ENABLE}" == true ]]; then
|
||||
KUBE_PS1+="${KUBE_PS1_SEPARATOR}"
|
||||
|
|
@ -374,7 +418,14 @@ kube_ps1() {
|
|||
|
||||
# Context
|
||||
if [[ "${KUBE_PS1_CONTEXT_ENABLE}" == true ]]; then
|
||||
KUBE_PS1+="$(_kube_ps1_color_fg $KUBE_PS1_CTX_COLOR)${KUBE_PS1_CONTEXT}${KUBE_PS1_RESET_COLOR}"
|
||||
local ctx_color="${KUBE_PS1_CTX_COLOR:-red}"
|
||||
|
||||
# Allow custom function to override color based on context
|
||||
if [[ -n "${KUBE_PS1_CTX_COLOR_FUNCTION}" ]]; then
|
||||
ctx_color="$("${KUBE_PS1_CTX_COLOR_FUNCTION}" "${KUBE_PS1_CONTEXT}")"
|
||||
fi
|
||||
|
||||
KUBE_PS1+="$(_kube_ps1_color_fg "${ctx_color}")${KUBE_PS1_CONTEXT}${KUBE_PS1_RESET_COLOR}"
|
||||
fi
|
||||
|
||||
# Namespace
|
||||
|
|
@ -382,14 +433,14 @@ kube_ps1() {
|
|||
if [[ -n "${KUBE_PS1_DIVIDER}" ]] && [[ "${KUBE_PS1_CONTEXT_ENABLE}" == true ]]; then
|
||||
KUBE_PS1+="${KUBE_PS1_DIVIDER}"
|
||||
fi
|
||||
KUBE_PS1+="$(_kube_ps1_color_fg ${KUBE_PS1_NS_COLOR})${KUBE_PS1_NAMESPACE}${KUBE_PS1_RESET_COLOR}"
|
||||
KUBE_PS1+="$(_kube_ps1_color_fg "${KUBE_PS1_NS_COLOR:-cyan}")${KUBE_PS1_NAMESPACE}${KUBE_PS1_RESET_COLOR}"
|
||||
fi
|
||||
|
||||
# Suffix
|
||||
if [[ -z "${KUBE_PS1_SUFFIX_COLOR:-}" ]] && [[ -n "${KUBE_PS1_SUFFIX}" ]]; then
|
||||
KUBE_PS1+="${KUBE_PS1_SUFFIX}"
|
||||
else
|
||||
KUBE_PS1+="$(_kube_ps1_color_fg $KUBE_PS1_SUFFIX_COLOR)${KUBE_PS1_SUFFIX}${KUBE_PS1_RESET_COLOR}"
|
||||
KUBE_PS1+="$(_kube_ps1_color_fg "${KUBE_PS1_SUFFIX_COLOR}")${KUBE_PS1_SUFFIX}${KUBE_PS1_RESET_COLOR}"
|
||||
fi
|
||||
|
||||
# Close Background color if defined
|
||||
|
|
|
|||
|
|
@ -11,124 +11,130 @@ plugins=(... kubectl)
|
|||
|
||||
## Aliases
|
||||
|
||||
| Alias | Command | Description |
|
||||
| :------- | :------------------------------------------------- | :----------------------------------------------------------------------------------------------- |
|
||||
| k | `kubectl` | The kubectl command |
|
||||
| kca | `kubectl --all-namespaces` | The kubectl command targeting all namespaces |
|
||||
| kaf | `kubectl apply -f` | Apply a YML file |
|
||||
| keti | `kubectl exec -ti` | Drop into an interactive terminal on a container |
|
||||
| | | **Manage configuration quickly to switch contexts between local, dev and staging** |
|
||||
| kcuc | `kubectl config use-context` | Set the current-context in a kubeconfig file |
|
||||
| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig |
|
||||
| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig |
|
||||
| kccc | `kubectl config current-context` | Display the current-context |
|
||||
| kcgc | `kubectl config get-contexts` | List of contexts available |
|
||||
| | | **General aliases** |
|
||||
| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector |
|
||||
| kdelf | `kubectl delete -f` | Delete a pod using the type and name specified in -f argument |
|
||||
| | | **Pod management** |
|
||||
| kgp | `kubectl get pods` | List all pods in ps output format |
|
||||
| kgpl | `kgp -l` | Get pods by label. Example: `kgpl "app=myapp" -n myns` |
|
||||
| kgpn | `kgp -n` | Get pods by namespace. Example: `kgpn kube-system` |
|
||||
| kgpsl | `kubectl get pods --show-labels` | List all pods in ps output format with labels |
|
||||
| kgpw | `kgp --watch` | After listing/getting the requested object, watch for changes |
|
||||
| kgpwide | `kgp -o wide` | Output in plain-text format with any additional information. For pods, the node name is included |
|
||||
| kep | `kubectl edit pods` | Edit pods from the default editor |
|
||||
| kdp | `kubectl describe pods` | Describe all pods |
|
||||
| kdelp | `kubectl delete pods` | Delete all pods matching passed arguments |
|
||||
| | | **Service management** |
|
||||
| kgs | `kubectl get svc` | List all services in ps output format |
|
||||
| kgsw | `kgs --watch` | After listing all services, watch for changes |
|
||||
| kgswide | `kgs -o wide` | After listing all services, output in plain-text format with any additional information |
|
||||
| kes | `kubectl edit svc` | Edit services(svc) from the default editor |
|
||||
| kds | `kubectl describe svc` | Describe all services in detail |
|
||||
| kdels | `kubectl delete svc` | Delete all services matching passed argument |
|
||||
| | | **Ingress management** |
|
||||
| kgi | `kubectl get ingress` | List ingress resources in ps output format |
|
||||
| kei | `kubectl edit ingress` | Edit ingress resource from the default editor |
|
||||
| kdi | `kubectl describe ingress` | Describe ingress resource in detail |
|
||||
| kdeli | `kubectl delete ingress` | Delete ingress resources matching passed argument |
|
||||
| | | **Namespace management** |
|
||||
| kgns | `kubectl get namespaces` | List the current namespaces in a cluster |
|
||||
| kcn | `kubectl config set-context --current --namespace` | Change current namespace |
|
||||
| kens | `kubectl edit namespace` | Edit namespace resource from the default editor |
|
||||
| kdns | `kubectl describe namespace` | Describe namespace resource in detail |
|
||||
| kdelns | `kubectl delete namespace` | Delete the namespace. WARNING! This deletes everything in the namespace |
|
||||
| | | **ConfigMap management** |
|
||||
| kgcm | `kubectl get configmaps` | List the configmaps in ps output format |
|
||||
| kecm | `kubectl edit configmap` | Edit configmap resource from the default editor |
|
||||
| kdcm | `kubectl describe configmap` | Describe configmap resource in detail |
|
||||
| kdelcm | `kubectl delete configmap` | Delete the configmap |
|
||||
| | | **Secret management** |
|
||||
| kgsec | `kubectl get secret` | Get secret for decoding |
|
||||
| kdsec | `kubectl describe secret` | Describe secret resource in detail |
|
||||
| kdelsec | `kubectl delete secret` | Delete the secret |
|
||||
| | | **Deployment management** |
|
||||
| kgd | `kubectl get deployment` | Get the deployment |
|
||||
| kgdw | `kgd --watch` | After getting the deployment, watch for changes |
|
||||
| kgdwide | `kgd -o wide` | After getting the deployment, output in plain-text format with any additional information |
|
||||
| ked | `kubectl edit deployment` | Edit deployment resource from the default editor |
|
||||
| kdd | `kubectl describe deployment` | Describe deployment resource in detail |
|
||||
| kdeld | `kubectl delete deployment` | Delete the deployment |
|
||||
| ksd | `kubectl scale deployment` | Scale a deployment |
|
||||
| krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment |
|
||||
| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime |
|
||||
| | | **Rollout management** |
|
||||
| kgrs | `kubectl get replicaset` | List all ReplicaSets `rs` created by the deployment |
|
||||
| kdrs | `kubectl describe replicaset` | Describe ReplicaSet in detail |
|
||||
| kers | `kubectl edit replicaset` | Edit ReplicaSet from the default editor |
|
||||
| krh | `kubectl rollout history` | Check the revisions of this deployment |
|
||||
| kru | `kubectl rollout undo` | Rollback to the previous revision |
|
||||
| | | **Port forwarding** |
|
||||
| kpf | `kubectl port-forward` | Forward one or more local ports to a pod |
|
||||
| | | **Tools for accessing all information** |
|
||||
| kga | `kubectl get all` | List all resources in ps format |
|
||||
| kgaa | `kubectl get all --all-namespaces` | List the requested object(s) across all namespaces |
|
||||
| | | **Logs** |
|
||||
| kl | `kubectl logs` | Print the logs for a container or resource |
|
||||
| klf | `kubectl logs -f` | Stream the logs for a container or resource (follow) |
|
||||
| | | **File copy** |
|
||||
| kcp | `kubectl cp` | Copy files and directories to and from containers |
|
||||
| | | **Node management** |
|
||||
| kgno | `kubectl get nodes` | List the nodes in ps output format |
|
||||
| kgnosl | `kubectl get nodes --show-labels` | List the nodes in ps output format with labels |
|
||||
| keno | `kubectl edit node` | Edit nodes resource from the default editor |
|
||||
| kdno | `kubectl describe node` | Describe node resource in detail |
|
||||
| kdelno | `kubectl delete node` | Delete the node |
|
||||
| | | **Persistent Volume Claim management** |
|
||||
| kgpvc | `kubectl get pvc` | List all PVCs |
|
||||
| kgpvcw | `kgpvc --watch` | After listing/getting the requested object, watch for changes |
|
||||
| kepvc | `kubectl edit pvc` | Edit pvcs from the default editor |
|
||||
| kdpvc | `kubectl describe pvc` | Describe all pvcs |
|
||||
| kdelpvc | `kubectl delete pvc` | Delete all pvcs matching passed arguments |
|
||||
| | | **StatefulSets management** |
|
||||
| kgss | `kubectl get statefulset` | List the statefulsets in ps format |
|
||||
| kgssw | `kgss --watch` | After getting the list of statefulsets, watch for changes |
|
||||
| kgsswide | `kgss -o wide` | After getting the statefulsets, output in plain-text format with any additional information |
|
||||
| kess | `kubectl edit statefulset` | Edit statefulset resource from the default editor |
|
||||
| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail |
|
||||
| kdelss | `kubectl delete statefulset` | Delete the statefulset |
|
||||
| ksss | `kubectl scale statefulset` | Scale a statefulset |
|
||||
| krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment |
|
||||
| | | **Service Accounts management** |
|
||||
| kdsa | `kubectl describe sa` | Describe a service account in details |
|
||||
| kdelsa | `kubectl delete sa` | Delete the service account |
|
||||
| | | **DaemonSet management** |
|
||||
| kgds | `kubectl get daemonset` | List all DaemonSets in ps output format |
|
||||
| kgdsw | `kgds --watch` | After listing all DaemonSets, watch for changes |
|
||||
| keds | `kubectl edit daemonset` | Edit DaemonSets from the default editor |
|
||||
| kdds | `kubectl describe daemonset` | Describe all DaemonSets in detail |
|
||||
| kdelds | `kubectl delete daemonset` | Delete all DaemonSets matching passed argument |
|
||||
| | | **CronJob management** |
|
||||
| kgcj | `kubectl get cronjob` | List all CronJobs in ps output format |
|
||||
| kecj | `kubectl edit cronjob` | Edit CronJob from the default editor |
|
||||
| kdcj | `kubectl describe cronjob` | Describe a CronJob in details |
|
||||
| kdelcj | `kubectl delete cronjob` | Delete the CronJob |
|
||||
| | | **Job management** |
|
||||
| kgj | `kubectl get job` | List all Job in ps output format |
|
||||
| kej | `kubectl edit job` | Edit a Job in details |
|
||||
| kdj | `kubectl describe job` | Describe the Job |
|
||||
| kdelj | `kubectl delete job` | Delete the Job |
|
||||
| Alias | Command | Description |
|
||||
| :------- | :------------------------------------------------------ | :----------------------------------------------------------------------------------------------- |
|
||||
| k | `kubectl` | The kubectl command |
|
||||
| kca | `kubectl --all-namespaces` | The kubectl command targeting all namespaces |
|
||||
| kaf | `kubectl apply -f` | Apply a YML file |
|
||||
| kapk | `kubectl apply -k` | Apply a kustomization directory |
|
||||
| keti | `kubectl exec -ti` | Drop into an interactive terminal on a container |
|
||||
| | | **Manage configuration quickly to switch contexts between local, dev and staging** |
|
||||
| kcuc | `kubectl config use-context` | Set the current-context in a kubeconfig file |
|
||||
| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig |
|
||||
| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig |
|
||||
| kccc | `kubectl config current-context` | Display the current-context |
|
||||
| kcgc | `kubectl config get-contexts` | List of contexts available |
|
||||
| | | **General aliases** |
|
||||
| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector |
|
||||
| kdelf | `kubectl delete -f` | Delete a pod using the type and name specified in -f argument |
|
||||
| kdelk | `kubectl delete -k` | Delete all resources defined in a kustomization directory |
|
||||
| kge | `kubectl get events --sort-by=".lastTimestamp"` | Get events (sorted by timestamp) |
|
||||
| kgew | `kubectl get events --watch --sort-by=".lastTimestamp"` | Get events and watch as they occur (sorted by timestamp) |
|
||||
| | | **Pod management** |
|
||||
| kgp | `kubectl get pods` | List all pods in ps output format |
|
||||
| kgpl | `kgp -l` | Get pods by label. Example: `kgpl "app=myapp" -n myns` |
|
||||
| kgpn | `kgp -n` | Get pods by namespace. Example: `kgpn kube-system` |
|
||||
| kgpsl | `kubectl get pods --show-labels` | List all pods in ps output format with labels |
|
||||
| kgpw | `kgp --watch` | After listing/getting the requested object, watch for changes |
|
||||
| kgpwide | `kgp -o wide` | Output in plain-text format with any additional information. For pods, the node name is included |
|
||||
| kep | `kubectl edit pods` | Edit pods from the default editor |
|
||||
| kdp | `kubectl describe pods` | Describe all pods |
|
||||
| kdelp | `kubectl delete pods` | Delete all pods matching passed arguments |
|
||||
| | | **Service management** |
|
||||
| kgs | `kubectl get svc` | List all services in ps output format |
|
||||
| kgsw | `kgs --watch` | After listing all services, watch for changes |
|
||||
| kgswide | `kgs -o wide` | After listing all services, output in plain-text format with any additional information |
|
||||
| kes | `kubectl edit svc` | Edit services(svc) from the default editor |
|
||||
| kds | `kubectl describe svc` | Describe all services in detail |
|
||||
| kdels | `kubectl delete svc` | Delete all services matching passed argument |
|
||||
| | | **Ingress management** |
|
||||
| kgi | `kubectl get ingress` | List ingress resources in ps output format |
|
||||
| kei | `kubectl edit ingress` | Edit ingress resource from the default editor |
|
||||
| kdi | `kubectl describe ingress` | Describe ingress resource in detail |
|
||||
| kdeli | `kubectl delete ingress` | Delete ingress resources matching passed argument |
|
||||
| | | **Namespace management** |
|
||||
| kgns | `kubectl get namespaces` | List the current namespaces in a cluster |
|
||||
| kcn | `kubectl config set-context --current --namespace` | Change current namespace |
|
||||
| kens | `kubectl edit namespace` | Edit namespace resource from the default editor |
|
||||
| kdns | `kubectl describe namespace` | Describe namespace resource in detail |
|
||||
| kdelns | `kubectl delete namespace` | Delete the namespace. WARNING! This deletes everything in the namespace |
|
||||
| | | **ConfigMap management** |
|
||||
| kgcm | `kubectl get configmaps` | List the configmaps in ps output format |
|
||||
| kecm | `kubectl edit configmap` | Edit configmap resource from the default editor |
|
||||
| kdcm | `kubectl describe configmap` | Describe configmap resource in detail |
|
||||
| kdelcm | `kubectl delete configmap` | Delete the configmap |
|
||||
| | | **Secret management** |
|
||||
| kgsec | `kubectl get secret` | Get secret for decoding |
|
||||
| kdsec | `kubectl describe secret` | Describe secret resource in detail |
|
||||
| kdelsec | `kubectl delete secret` | Delete the secret |
|
||||
| | | **Deployment management** |
|
||||
| kgd | `kubectl get deployment` | Get the deployment |
|
||||
| kgdw | `kgd --watch` | After getting the deployment, watch for changes |
|
||||
| kgdwide | `kgd -o wide` | After getting the deployment, output in plain-text format with any additional information |
|
||||
| ked | `kubectl edit deployment` | Edit deployment resource from the default editor |
|
||||
| kdd | `kubectl describe deployment` | Describe deployment resource in detail |
|
||||
| kdeld | `kubectl delete deployment` | Delete the deployment |
|
||||
| ksd | `kubectl scale deployment` | Scale a deployment |
|
||||
| krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment |
|
||||
| krrd | `kubectl rollout restart deployment` | Rollout restart a deployment |
|
||||
| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime |
|
||||
| | | **Rollout management** |
|
||||
| kgrs | `kubectl get replicaset` | List all ReplicaSets `rs` created by the deployment |
|
||||
| kdrs | `kubectl describe replicaset` | Describe ReplicaSet in detail |
|
||||
| kers | `kubectl edit replicaset` | Edit ReplicaSet from the default editor |
|
||||
| krh | `kubectl rollout history` | Check the revisions of this deployment |
|
||||
| kru | `kubectl rollout undo` | Rollback to the previous revision |
|
||||
| | | **Port forwarding** |
|
||||
| kpf | `kubectl port-forward` | Forward one or more local ports to a pod |
|
||||
| | | **Tools for accessing all information** |
|
||||
| kga | `kubectl get all` | List all resources in ps format |
|
||||
| kgaa | `kubectl get all --all-namespaces` | List the requested object(s) across all namespaces |
|
||||
| | | **Logs** |
|
||||
| kl | `kubectl logs` | Print the logs for a container or resource |
|
||||
| klf | `kubectl logs -f` | Stream the logs for a container or resource (follow) |
|
||||
| | | **File copy** |
|
||||
| kcp | `kubectl cp` | Copy files and directories to and from containers |
|
||||
| | | **Node management** |
|
||||
| kgno | `kubectl get nodes` | List the nodes in ps output format |
|
||||
| kgnosl | `kubectl get nodes --show-labels` | List the nodes in ps output format with labels |
|
||||
| keno | `kubectl edit node` | Edit nodes resource from the default editor |
|
||||
| kdno | `kubectl describe node` | Describe node resource in detail |
|
||||
| kdelno | `kubectl delete node` | Delete the node |
|
||||
| | | **Persistent Volume Claim management** |
|
||||
| kgpvc | `kubectl get pvc` | List all PVCs |
|
||||
| kgpvcw | `kgpvc --watch` | After listing/getting the requested object, watch for changes |
|
||||
| kepvc | `kubectl edit pvc` | Edit pvcs from the default editor |
|
||||
| kdpvc | `kubectl describe pvc` | Describe all pvcs |
|
||||
| kdelpvc | `kubectl delete pvc` | Delete all pvcs matching passed arguments |
|
||||
| | | **StatefulSets management** |
|
||||
| kgss | `kubectl get statefulset` | List the statefulsets in ps format |
|
||||
| kgssw | `kgss --watch` | After getting the list of statefulsets, watch for changes |
|
||||
| kgsswide | `kgss -o wide` | After getting the statefulsets, output in plain-text format with any additional information |
|
||||
| kess | `kubectl edit statefulset` | Edit statefulset resource from the default editor |
|
||||
| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail |
|
||||
| kdelss | `kubectl delete statefulset` | Delete the statefulset |
|
||||
| ksss | `kubectl scale statefulset` | Scale a statefulset |
|
||||
| krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment |
|
||||
| krrss | `kubectl rollout restart statefulset` | Rollout restart a statefulset |
|
||||
| | | **Service Accounts management** |
|
||||
| kdsa | `kubectl describe sa` | Describe a service account in details |
|
||||
| kdelsa | `kubectl delete sa` | Delete the service account |
|
||||
| | | **DaemonSet management** |
|
||||
| kgds | `kubectl get daemonset` | List all DaemonSets in ps output format |
|
||||
| kgdsw | `kgds --watch` | After listing all DaemonSets, watch for changes |
|
||||
| keds | `kubectl edit daemonset` | Edit DaemonSets from the default editor |
|
||||
| kdds | `kubectl describe daemonset` | Describe all DaemonSets in detail |
|
||||
| kdelds | `kubectl delete daemonset` | Delete all DaemonSets matching passed argument |
|
||||
| | | **CronJob management** |
|
||||
| kgcj | `kubectl get cronjob` | List all CronJobs in ps output format |
|
||||
| kecj | `kubectl edit cronjob` | Edit CronJob from the default editor |
|
||||
| kdcj | `kubectl describe cronjob` | Describe a CronJob in details |
|
||||
| kdelcj | `kubectl delete cronjob` | Delete the CronJob |
|
||||
| | | **Job management** |
|
||||
| kgj | `kubectl get job` | List all Job in ps output format |
|
||||
| kej | `kubectl edit job` | Edit a Job in details |
|
||||
| kdj | `kubectl describe job` | Describe the Job |
|
||||
| kdelj | `kubectl delete job` | Delete the Job |
|
||||
|
||||
## Wrappers
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,9 @@ alias kca='_kca(){ kubectl "$@" --all-namespaces; unset -f _kca; }; _kca'
|
|||
# Apply a YML file
|
||||
alias kaf='kubectl apply -f'
|
||||
|
||||
# Apply a kustomization directory
|
||||
alias kapk='kubectl apply -k'
|
||||
|
||||
# Drop into an interactive terminal on a container
|
||||
alias keti='kubectl exec -t -i'
|
||||
|
||||
|
|
@ -36,6 +39,9 @@ alias kcgc='kubectl config get-contexts'
|
|||
# General aliases
|
||||
alias kdel='kubectl delete'
|
||||
alias kdelf='kubectl delete -f'
|
||||
alias kdelk='kubectl delete -k'
|
||||
alias kge='kubectl get events --sort-by=".lastTimestamp"'
|
||||
alias kgew='kubectl get events --sort-by=".lastTimestamp" --watch'
|
||||
|
||||
# Pod management.
|
||||
alias kgp='kubectl get pods'
|
||||
|
|
@ -96,6 +102,7 @@ alias kdd='kubectl describe deployment'
|
|||
alias kdeld='kubectl delete deployment'
|
||||
alias ksd='kubectl scale deployment'
|
||||
alias krsd='kubectl rollout status deployment'
|
||||
alias krrd='kubectl rollout restart deployment'
|
||||
|
||||
function kres(){
|
||||
kubectl set env $@ REFRESHED_AT=$(date +%Y%m%d%H%M%S)
|
||||
|
|
@ -118,6 +125,7 @@ alias kdss='kubectl describe statefulset'
|
|||
alias kdelss='kubectl delete statefulset'
|
||||
alias ksss='kubectl scale statefulset'
|
||||
alias krsss='kubectl rollout status statefulset'
|
||||
alias krrss='kubectl rollout restart statefulset'
|
||||
|
||||
# Port forwarding
|
||||
alias kpf="kubectl port-forward"
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ plugins=(... laravel)
|
|||
| `pamfs` | `php artisan migrate:fresh --seed` |
|
||||
| `pamr` | `php artisan migrate:rollback` |
|
||||
| `pads` | `php artisan db:seed` |
|
||||
| `padw` | `php artisan db:wipe` |
|
||||
|
||||
## Makers
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ alias pamf='php artisan migrate:fresh'
|
|||
alias pamfs='php artisan migrate:fresh --seed'
|
||||
alias pamr='php artisan migrate:rollback'
|
||||
alias pads='php artisan db:seed'
|
||||
alias padw='php artisan db:wipe'
|
||||
|
||||
# Makers
|
||||
alias pamm='php artisan make:model'
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@ lwd() {
|
|||
#
|
||||
# - This isn't the first time the plugin is loaded
|
||||
# - We're not in the $HOME directory (e.g. if terminal opened a different folder)
|
||||
[[ -z "$ZSH_LAST_WORKING_DIRECTORY" ]] || return
|
||||
[[ "$PWD" == "$HOME" ]] || return
|
||||
[[ -z "$ZSH_LAST_WORKING_DIRECTORY" ]] || return 0
|
||||
[[ "$PWD" == "$HOME" ]] || return 0
|
||||
|
||||
if lwd 2>/dev/null; then
|
||||
ZSH_LAST_WORKING_DIRECTORY=1
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ plugins=(... macos)
|
|||
- [iTerm2](https://iterm2.com/)
|
||||
- [Hyper](https://hyper.is/)
|
||||
- [Tabby](https://tabby.sh/)
|
||||
- [Ghostty](https://ghostty.org)
|
||||
|
||||
## Commands
|
||||
|
||||
|
|
|
|||
|
|
@ -85,6 +85,12 @@ EOF
|
|||
tell application "System Events"
|
||||
tell process "Tabby" to keystroke "t" using command down
|
||||
end tell
|
||||
EOF
|
||||
elif [[ "$the_app" == 'ghostty' ]]; then
|
||||
osascript >/dev/null <<EOF
|
||||
tell application "System Events"
|
||||
tell process "Ghostty" to keystroke "t" using command down
|
||||
end tell
|
||||
EOF
|
||||
else
|
||||
echo "$0: unsupported terminal app: $the_app" >&2
|
||||
|
|
@ -139,6 +145,12 @@ EOF
|
|||
tell application "System Events"
|
||||
tell process "Tabby" to keystroke "D" using command down
|
||||
end tell
|
||||
EOF
|
||||
elif [[ "$the_app" == 'ghostty' ]]; then
|
||||
osascript >/dev/null <<EOF
|
||||
tell application "System Events"
|
||||
tell process "Ghostty" to keystroke "D" using command down
|
||||
end tell
|
||||
EOF
|
||||
else
|
||||
echo "$0: unsupported terminal app: $the_app" >&2
|
||||
|
|
@ -194,6 +206,12 @@ EOF
|
|||
tell application "System Events"
|
||||
tell process "Tabby" to keystroke "d" using command down
|
||||
end tell
|
||||
EOF
|
||||
elif [[ "$the_app" == 'ghostty' ]]; then
|
||||
osascript >/dev/null <<EOF
|
||||
tell application "System Events"
|
||||
tell process "Ghostty" to keystroke "d" using command down
|
||||
end tell
|
||||
EOF
|
||||
else
|
||||
echo "$0: unsupported terminal app: $the_app" >&2
|
||||
|
|
@ -253,7 +271,7 @@ function man-preview() {
|
|||
[[ $# -eq 0 ]] && >&2 echo "Usage: $0 command1 [command2 ...]" && return 1
|
||||
|
||||
local page
|
||||
for page in "${(@f)"$(man -w $@)"}"; do
|
||||
for page in "${(@f)"$(command man -w $@)"}"; do
|
||||
command mandoc -Tpdf $page | open -f -a Preview
|
||||
done
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
# Default commands
|
||||
: ${MAGIC_ENTER_GIT_COMMAND:="git status -u ."} # run when in a git repository
|
||||
: ${MAGIC_ENTER_JJ_COMMAND:="jj st --no-pager ."} # run when in a jj repository
|
||||
: ${MAGIC_ENTER_OTHER_COMMAND:="ls -lh ."} # run anywhere else
|
||||
|
||||
magic-enter() {
|
||||
|
|
@ -9,7 +10,10 @@ magic-enter() {
|
|||
return
|
||||
fi
|
||||
|
||||
if command git rev-parse --is-inside-work-tree &>/dev/null; then
|
||||
# needs to be before git to handle colocated repositories
|
||||
if (( $+commands[jj] )) && command jj st >/dev/null 2>&1; then
|
||||
BUFFER="$MAGIC_ENTER_JJ_COMMAND"
|
||||
elif (( $+commands[git] )) && command git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
BUFFER="$MAGIC_ENTER_GIT_COMMAND"
|
||||
else
|
||||
BUFFER="$MAGIC_ENTER_OTHER_COMMAND"
|
||||
|
|
|
|||
|
|
@ -1,27 +1,17 @@
|
|||
# TODO: 2024-01-03 remove rtx support
|
||||
local __mise=mise
|
||||
if (( ! $+commands[mise] )); then
|
||||
if (( $+commands[rtx] )); then
|
||||
__mise=rtx
|
||||
else
|
||||
return
|
||||
fi
|
||||
return
|
||||
fi
|
||||
|
||||
# Load mise hooks
|
||||
eval "$($__mise activate zsh)"
|
||||
|
||||
# Hook mise into current environment
|
||||
eval "$($__mise hook-env -s zsh)"
|
||||
eval "$(mise activate zsh)"
|
||||
|
||||
# If the completion file doesn't exist yet, we need to autoload it and
|
||||
# bind it to `mise`. Otherwise, compinit will have already done that.
|
||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_$__mise" ]]; then
|
||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_mise" ]]; then
|
||||
typeset -g -A _comps
|
||||
autoload -Uz _$__mise
|
||||
_comps[$__mise]=_$__mise
|
||||
autoload -Uz _mise
|
||||
_comps[mise]=_mise
|
||||
fi
|
||||
|
||||
# Generate and load mise completion
|
||||
$__mise completion zsh >| "$ZSH_CACHE_DIR/completions/_$__mise" &|
|
||||
unset __mise
|
||||
mise completion zsh >| "$ZSH_CACHE_DIR/completions/_mise" &|
|
||||
|
|
|
|||
|
|
@ -146,6 +146,16 @@ case $state in
|
|||
(help)
|
||||
_arguments ':feature:__task_list'
|
||||
;;
|
||||
(format)
|
||||
_arguments -C \
|
||||
'--check-formatted' \
|
||||
'--dot-formatter' \
|
||||
'--dry-run' \
|
||||
'--force' \
|
||||
'--migrate' \
|
||||
'--no-exit' \
|
||||
'*::file:_files'
|
||||
;;
|
||||
(test)
|
||||
_files
|
||||
;;
|
||||
|
|
|
|||
20
plugins/molecule/README.md
Normal file
20
plugins/molecule/README.md
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# Molecule plugin
|
||||
|
||||
This plugin adds aliases and completion for [Molecule](https://ansible.readthedocs.io/projects/molecule/), the
|
||||
project designed to aid in the development and testing of Ansible roles..
|
||||
|
||||
To use it, add `molecule` to the plugins array in your zshrc file:
|
||||
|
||||
```zsh
|
||||
plugins=(... molecule)
|
||||
```
|
||||
|
||||
## Aliases
|
||||
|
||||
| Alias | Command | Description |
|
||||
| :---- | :---------------- | ---------------------------------------------------------------------------------- |
|
||||
| mol | molecule | Molecule aids in the development and testing of Ansible roles. |
|
||||
| mcr | molecule create | Use the provisioner to start the instances. |
|
||||
| mcon | molecule converge | Use the provisioner to configure instances (dependency, create, prepare converge). |
|
||||
| mls | molecule list | List status of instances. |
|
||||
| mvf | molecule verify | Run automated tests against instances. |
|
||||
22
plugins/molecule/molecule.plugin.zsh
Normal file
22
plugins/molecule/molecule.plugin.zsh
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# Completion
|
||||
if (( ! $+commands[molecule] )); then
|
||||
return
|
||||
fi
|
||||
|
||||
# If the completion file doesn't exist yet, we need to autoload it and
|
||||
# bind it to `molecule`. Otherwise, compinit will have already done that.
|
||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_molecule" ]]; then
|
||||
typeset -g -A _comps
|
||||
autoload -Uz _molecule
|
||||
_comps[molecule]=_molecule
|
||||
fi
|
||||
|
||||
_MOLECULE_COMPLETE=zsh_source molecule >| "$ZSH_CACHE_DIR/completions/_molecule" &|
|
||||
|
||||
# Alias
|
||||
# molecule: https://docs.ansible.com/projects/molecule/
|
||||
alias mol='molecule'
|
||||
alias mcr='molecule create'
|
||||
alias mcon='molecule converge'
|
||||
alias mls='molecule list'
|
||||
alias mvf='molecule verify'
|
||||
|
|
@ -33,6 +33,8 @@ if it's found, or the mvn command otherwise.
|
|||
| `mvnct` | `mvn clean test` |
|
||||
| `mvncv` | `mvn clean verify` |
|
||||
| `mvncvst` | `mvn clean verify -DskipTests` |
|
||||
| `mvnv` | `mvn verify` |
|
||||
| `mvnvst` | `mvn verify -DskipTests` |
|
||||
| `mvndp` | `mvn deploy` |
|
||||
| `mvndocs` | `mvn dependency:resolve -Dclassifier=javadoc` |
|
||||
| `mvndt` | `mvn dependency:tree` |
|
||||
|
|
|
|||
|
|
@ -62,6 +62,8 @@ alias mvncp='mvn clean package'
|
|||
alias mvnct='mvn clean test'
|
||||
alias mvncv='mvn clean verify'
|
||||
alias mvncvst='mvn clean verify -DskipTests'
|
||||
alias mvnv='mvn verify'
|
||||
alias mvnvst='mvn verify -DskipTests'
|
||||
alias mvndp='mvn deploy'
|
||||
alias mvndocs='mvn dependency:resolve -Dclassifier=javadoc'
|
||||
alias mvndt='mvn dependency:tree'
|
||||
|
|
@ -101,8 +103,14 @@ function listMavenCompletions {
|
|||
new_file="../pom.xml"
|
||||
fi
|
||||
|
||||
# if file doesn't exist break
|
||||
file="${file:h}/${new_file}"
|
||||
|
||||
# if the file points to a directory, assume it is a pom.xml in that directory
|
||||
if [[ -d "$file" ]]; then
|
||||
file="${file}/pom.xml"
|
||||
fi
|
||||
|
||||
# if file doesn't exist break
|
||||
if ! [[ -e "$file" ]]; then
|
||||
break
|
||||
fi
|
||||
|
|
|
|||
52
plugins/nestjs/README.md
Normal file
52
plugins/nestjs/README.md
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
# NestJS Plugin for Oh My Zsh
|
||||
|
||||
This plugin provides aliases for common [NestJS CLI](https://docs.nestjs.com/cli/overview) commands.
|
||||
|
||||
## Requirements
|
||||
|
||||
- [NestJS CLI](https://docs.nestjs.com/cli/overview#installation) installed globally:
|
||||
`npm install -g @nestjs/cli`
|
||||
|
||||
## Aliases
|
||||
|
||||
| Alias | Command | Description |
|
||||
| :------ | :--------------------------- | :------------------------------------------ |
|
||||
| `nnew` | `nest new` | Create a new NestJS project |
|
||||
| `nb` | `nest build` | Build the NestJS application |
|
||||
| `ns` | `nest start` | Start the application |
|
||||
| `nsw` | `nest start --watch` | Start the application in watch mode |
|
||||
| `nsd` | `nest start --dev` | Start the application in dev mode |
|
||||
| `nsdbg` | `nest start --debug --watch` | Start the application in debug & watch mode |
|
||||
| `ng` | `nest generate` | Generate a NestJS element |
|
||||
| `ngm` | `nest generate module` | Generate a module |
|
||||
| `ngc` | `nest generate controller` | Generate a controller |
|
||||
| `ngs` | `nest generate service` | Generate a service |
|
||||
| `ngg` | `nest generate guard` | Generate a guard |
|
||||
| `ngp` | `nest generate pipe` | Generate a pipe |
|
||||
| `ngf` | `nest generate filter` | Generate a filter |
|
||||
| `ngr` | `nest generate resolver` | Generate a GraphQL resolver |
|
||||
| `ngcl` | `nest generate class` | Generate a class |
|
||||
| `ngi` | `nest generate interface` | Generate an interface |
|
||||
| `ngit` | `nest generate interceptor` | Generate an interceptor |
|
||||
| `ngmi` | `nest generate middleware` | Generate a middleware |
|
||||
| `ngd` | `nest generate decorator` | Generate a custom decorator |
|
||||
| `ngres` | `nest generate resource` | Generate a CRUD resource |
|
||||
| `nglib` | `nest generate library` | Generate a new library |
|
||||
| `ngsub` | `nest generate sub-app` | Generate a new sub-application (monorepo) |
|
||||
| `na` | `nest add` | Add a library to the project |
|
||||
| `ni` | `nest info` | Display NestJS project information |
|
||||
| `nu` | `nest update` | Update NestJS dependencies |
|
||||
|
||||
## Usage
|
||||
|
||||
1. Add `nestjs` to the `plugins` array in your `~/.zshrc` file:
|
||||
|
||||
```zsh
|
||||
plugins=(... nestjs)
|
||||
```
|
||||
|
||||
2. Restart your terminal or source your `~/.zshrc` file:
|
||||
|
||||
```zsh
|
||||
source ~/.zshrc
|
||||
```
|
||||
41
plugins/nestjs/nestjs.plugin.zsh
Normal file
41
plugins/nestjs/nestjs.plugin.zsh
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
# Oh My Zsh plugin for NestJS CLI
|
||||
|
||||
# Check if nest command exists
|
||||
if ! command -v nest &>/dev/null; then
|
||||
return
|
||||
fi
|
||||
|
||||
# Project creation
|
||||
alias nnew='nest new'
|
||||
|
||||
# Basic development
|
||||
alias nb='nest build'
|
||||
alias ns='nest start'
|
||||
alias nsw='nest start --watch'
|
||||
alias nsd='nest start --dev' # Alias for start --watch
|
||||
alias nsdbg='nest start --debug --watch'
|
||||
|
||||
# Code generation (short aliases)
|
||||
alias ng='nest generate'
|
||||
alias ngm='nest generate module'
|
||||
alias ngc='nest generate controller'
|
||||
alias ngs='nest generate service'
|
||||
alias ngg='nest generate guard'
|
||||
alias ngp='nest generate pipe'
|
||||
alias ngf='nest generate filter'
|
||||
alias ngr='nest generate resolver'
|
||||
alias ngcl='nest generate class'
|
||||
alias ngi='nest generate interface'
|
||||
alias ngit='nest generate interceptor'
|
||||
alias ngmi='nest generate middleware'
|
||||
alias ngd='nest generate decorator'
|
||||
alias ngres='nest generate resource'
|
||||
alias nglib='nest generate library'
|
||||
alias ngsub='nest generate sub-app'
|
||||
|
||||
# Other commands
|
||||
alias na='nest add'
|
||||
alias ni='nest info'
|
||||
alias nu='nest update'
|
||||
|
||||
# You can add more aliases or functions here as needed.
|
||||
|
|
@ -19,7 +19,7 @@ plugins=(... opentofu)
|
|||
|--------|------------------------------|
|
||||
| `tt` | `tofu` |
|
||||
| `tta` | `tofu apply` |
|
||||
| `ttaa` | `tofu apply -auto-approve` |
|
||||
| `tta!` | `tofu apply -auto-approve` |
|
||||
| `ttc` | `tofu console` |
|
||||
| `ttd` | `tofu destroy` |
|
||||
| `ttd!` | `tofu destroy -auto-approve` |
|
||||
|
|
|
|||
|
|
@ -29,15 +29,21 @@ function tofu_version_prompt_info() {
|
|||
|
||||
alias tt='tofu'
|
||||
alias tta='tofu apply'
|
||||
alias ttaa='tofu apply -auto-approve'
|
||||
alias tta!='tofu apply -auto-approve'
|
||||
alias ttap='tofu apply -parallelism=1'
|
||||
alias ttapp='tofu apply tfplan'
|
||||
alias ttc='tofu console'
|
||||
alias ttd='tofu destroy'
|
||||
alias ttd!='tofu destroy -auto-approve'
|
||||
alias ttf='tofu fmt'
|
||||
alias ttfr='tofu fmt -recursive'
|
||||
alias tti='tofu init'
|
||||
alias ttir='tofu init -reconfigure'
|
||||
alias ttiu='tofu init -upgrade'
|
||||
alias ttiur='tofu init -upgrade -reconfigure'
|
||||
alias tto='tofu output'
|
||||
alias ttp='tofu plan'
|
||||
alias ttpo='tofu plan -out tfplan'
|
||||
alias ttv='tofu validate'
|
||||
alias tts='tofu state'
|
||||
alias ttsh='tofu show'
|
||||
|
|
|
|||
|
|
@ -8,30 +8,36 @@ To use it, add `perl` to the plugins array in your zshrc file:
|
|||
plugins=(... perl)
|
||||
```
|
||||
|
||||
## Perlbrew activation
|
||||
|
||||
If the plugin detects that `perlbrew` hasn't been activated, yet there is an installation of it in
|
||||
`$PERLBREW_ROOT`, it'll initialize by default. To avoid this behaviour, set `ZSH_PERLBREW_ACTIVATE=false`
|
||||
before `source oh-my-zsh.sh` in your zshrc.
|
||||
|
||||
## Aliases
|
||||
|
||||
| Aliases | Command | Description |
|
||||
| :------------ | :----------------- | :------------------------------------- |
|
||||
| pbi | `perlbrew install` | Install specific perl version |
|
||||
| pbl | `perlbrew list` | List all perl version installed |
|
||||
| pbo | `perlbrew off` | Go back to the system perl |
|
||||
| pbs | `perlbrew switch` | Turn it back on |
|
||||
| pbu | `perlbrew use` | Use specific version of perl |
|
||||
| pd | `perldoc` | Show the perl documentation |
|
||||
| ple | `perl -wlne` | Use perl like awk/sed |
|
||||
| latest-perl | `curl ...` | Show the latest stable release of Perl |
|
||||
| Aliases | Command | Description |
|
||||
| :---------- | :----------------- | :------------------------------------- |
|
||||
| pbi | `perlbrew install` | Install specific perl version |
|
||||
| pbl | `perlbrew list` | List all perl version installed |
|
||||
| pbo | `perlbrew off` | Go back to the system perl |
|
||||
| pbs | `perlbrew switch` | Turn it back on |
|
||||
| pbu | `perlbrew use` | Use specific version of perl |
|
||||
| pd | `perldoc` | Show the perl documentation |
|
||||
| ple | `perl -wlne` | Use perl like awk/sed |
|
||||
| latest-perl | `curl ...` | Show the latest stable release of Perl |
|
||||
|
||||
## Functions
|
||||
|
||||
* `newpl`: creates a basic Perl script file and opens it with $EDITOR.
|
||||
- `newpl`: creates a basic Perl script file and opens it with $EDITOR.
|
||||
|
||||
* `pgs`: Perl Global Substitution: `pgs <find_pattern> <replace_pattern> <filename>`
|
||||
Looks for `<find_pattern>` and replaces it with `<replace_pattern>` in `<filename>`.
|
||||
- `pgs`: Perl Global Substitution: `pgs <find_pattern> <replace_pattern> <filename>` Looks for
|
||||
`<find_pattern>` and replaces it with `<replace_pattern>` in `<filename>`.
|
||||
|
||||
* `prep`: Perl grep, because 'grep -P' is terrible: `prep <pattern> [<filename>]`
|
||||
Lets you work with pipes or files (if no `<filename>` provided, use stdin).
|
||||
- `prep`: Perl grep, because 'grep -P' is terrible: `prep <pattern> [<filename>]` Lets you work with pipes or
|
||||
files (if no `<filename>` provided, use stdin).
|
||||
|
||||
## Requirements
|
||||
|
||||
In order to make this work, you will need to have perl installed.
|
||||
More info on the usage and install: https://www.perl.org/get.html
|
||||
In order to make this work, you will need to have perl installed. More info on the usage and install:
|
||||
https://www.perl.org/get.html
|
||||
|
|
|
|||
|
|
@ -54,3 +54,12 @@ pgs() { # [find] [replace] [filename]
|
|||
prep() { # [pattern] [filename unless STDOUT]
|
||||
perl -nle 'print if /'"$1"'/;' $2
|
||||
}
|
||||
|
||||
# If the 'perlbrew' function isn't defined, perlbrew isn't setup.
|
||||
if [[ $ZSH_PERLBREW_ACTIVATE != false ]] && (( ! $+functions[perlbrew] )); then
|
||||
local _perlbrew="${PERLBREW_ROOT:-${HOME}/perl5/perlbrew}"
|
||||
if [[ -f "${_perlbrew}/etc/bashrc" ]]; then
|
||||
source "${_perlbrew}/etc/bashrc"
|
||||
fi
|
||||
unset _perlbrew
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -20,17 +20,17 @@ the next time you autocomplete `pip install`.
|
|||
|
||||
## Aliases
|
||||
|
||||
| Alias | Description |
|
||||
| :------- | :-------------------------------------------- |
|
||||
| pipi | Install packages |
|
||||
| pipig | Install package from GitHub repository |
|
||||
| pipigb | Install package from GitHub branch |
|
||||
| pipigp | Install package from GitHub pull request |
|
||||
| pipu | Upgrade packages |
|
||||
| pipun | Uninstall packages |
|
||||
| pipgi | Grep through installed packages |
|
||||
| piplo | List outdated packages |
|
||||
| pipreq | Create requirements file |
|
||||
| pipir | Install packages from `requirements.txt` file |
|
||||
| pipupall | Update all installed packages |
|
||||
| pipunall | Uninstall all installed packages |
|
||||
| Alias | Command | Description |
|
||||
| :--------|:----------------------------------------------------------------------------------|:--------------------------------------------- |
|
||||
| pipi | `pip install` | Install packages |
|
||||
| pipig | `pip install "git+https://github.com/user/repo.git"` | Install package from GitHub repository |
|
||||
| pipigb | `pip install "git+https://github.com/user/repo.git@branch"` | Install package from GitHub branch |
|
||||
| pipigp | `pip install "git+https://github.com/user/repo.git@refs/pull/PR_NUMBER/head"` | Install package from GitHub pull request |
|
||||
| pipu | `pip install --upgrade` | Upgrade packages |
|
||||
| pipun | `pip uninstall` | Uninstall packages |
|
||||
| pipgi | `pip freeze \| grep` | Grep through installed packages |
|
||||
| piplo | `pip list --outdated` | List outdated packages |
|
||||
| pipreq | `pip freeze > requirements.txt` | Create requirements file |
|
||||
| pipir | `pip install -r requirements.txt` | Install packages from `requirements.txt` file |
|
||||
| pipupall | `pip list --outdated \| awk 'NR > 2 { print $1 }' \| xargs pip install --upgrade` | Update all installed packages |
|
||||
| pipunall | `pip list --format freeze \| cut -d= -f1 \| xargs pip uninstall` | Uninstall all installed packages |
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue