mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-01-23 02:35:38 +01:00
Merge branch 'master' of github.com:ohmyzsh/ohmyzsh
This commit is contained in:
commit
5f16e1d9e1
43 changed files with 1219 additions and 339 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,21 +19,30 @@ Example for installing the nodejs plugin and the many runtimes for it:
|
|||
|
||||
```sh
|
||||
# Add plugin to asdf
|
||||
asdf plugin add nodejs
|
||||
asdf plugin add nodejs
|
||||
|
||||
# Install the latest available nodejs runtime version
|
||||
# Install the latest available version
|
||||
asdf install nodejs latest
|
||||
|
||||
# Install nodejs v16.5.0 runtime version
|
||||
# Uninstall the latest version
|
||||
asdf uninstall nodejs latest
|
||||
|
||||
# Install a specific version
|
||||
asdf install nodejs 16.5.0
|
||||
|
||||
# Set the latest version in .tools-version in the current working directory
|
||||
# Set the latest version in .tool-versions of the `current directory`
|
||||
asdf set nodejs latest
|
||||
|
||||
# Set a version globally that will apply to all directories under $HOME
|
||||
asdf set -u nodejs 16.5.0
|
||||
# Set a specific version in the `parent directory`
|
||||
asdf set -p nodejs 16.5.0 # -p is shorthand for --parent
|
||||
|
||||
# Set a global version under `$HOME`
|
||||
asdf set -u nodejs 16.5.0 # -u is shorthand for --home
|
||||
```
|
||||
|
||||
For more commands, run `asdf help` or refer to the
|
||||
[asdf CLI documentation](https://asdf-vm.com/manage/commands.html#all-commands).
|
||||
|
||||
## Maintainer
|
||||
|
||||
- [@RobLoach](https://github.com/RobLoach)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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. |
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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` |
|
||||
|
|
|
|||
|
|
@ -200,6 +200,7 @@ alias gc!='git commit --verbose --amend'
|
|||
alias gcn='git commit --verbose --no-edit'
|
||||
alias gcn!='git commit --verbose --no-edit --amend'
|
||||
alias gcf='git config --list'
|
||||
alias gcfu='git commit --fixup'
|
||||
alias gdct='git describe --tags $(git rev-list --tags --max-count=1)'
|
||||
alias gd='git diff'
|
||||
alias gdca='git diff --cached'
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ plugins=(... jj)
|
|||
| jje | `jj edit` |
|
||||
| jjgcl | `jj git clone` |
|
||||
| jjgf | `jj git fetch` |
|
||||
| jjgfa | `jj git fetch --all-remotes` |
|
||||
| jjgp | `jj git push` |
|
||||
| jjl | `jj log` |
|
||||
| jjla | `jj log -r "all()"` |
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ alias jjds='jj desc'
|
|||
alias jje='jj edit'
|
||||
alias jjgcl='jj git clone'
|
||||
alias jjgf='jj git fetch'
|
||||
alias jjgfa='jj git fetch --all-remotes'
|
||||
alias jjgp='jj git push'
|
||||
alias jjl='jj log'
|
||||
alias jjla='jj log -r "all()"'
|
||||
|
|
|
|||
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
|
||||
|
|
@ -11,124 +11,126 @@ plugins=(... kubectl)
|
|||
|
||||
## Aliases
|
||||
|
||||
| Alias | Command | Description |
|
||||
| :------- | :------------------------------------------------- | :----------------------------------------------------------------------------------------------- |
|
||||
| k | `kubectl` | The kubectl command |
|
||||
| kca | `kubectl --all-namespaces` | The kubectl command targeting all namespaces |
|
||||
| kaf | `kubectl apply -f` | Apply a YML file |
|
||||
| keti | `kubectl exec -ti` | Drop into an interactive terminal on a container |
|
||||
| | | **Manage configuration quickly to switch contexts between local, dev and staging** |
|
||||
| kcuc | `kubectl config use-context` | Set the current-context in a kubeconfig file |
|
||||
| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig |
|
||||
| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig |
|
||||
| kccc | `kubectl config current-context` | Display the current-context |
|
||||
| kcgc | `kubectl config get-contexts` | List of contexts available |
|
||||
| | | **General aliases** |
|
||||
| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector |
|
||||
| kdelf | `kubectl delete -f` | Delete a pod using the type and name specified in -f argument |
|
||||
| | | **Pod management** |
|
||||
| kgp | `kubectl get pods` | List all pods in ps output format |
|
||||
| kgpl | `kgp -l` | Get pods by label. Example: `kgpl "app=myapp" -n myns` |
|
||||
| kgpn | `kgp -n` | Get pods by namespace. Example: `kgpn kube-system` |
|
||||
| kgpsl | `kubectl get pods --show-labels` | List all pods in ps output format with labels |
|
||||
| kgpw | `kgp --watch` | After listing/getting the requested object, watch for changes |
|
||||
| kgpwide | `kgp -o wide` | Output in plain-text format with any additional information. For pods, the node name is included |
|
||||
| kep | `kubectl edit pods` | Edit pods from the default editor |
|
||||
| kdp | `kubectl describe pods` | Describe all pods |
|
||||
| kdelp | `kubectl delete pods` | Delete all pods matching passed arguments |
|
||||
| | | **Service management** |
|
||||
| kgs | `kubectl get svc` | List all services in ps output format |
|
||||
| kgsw | `kgs --watch` | After listing all services, watch for changes |
|
||||
| kgswide | `kgs -o wide` | After listing all services, output in plain-text format with any additional information |
|
||||
| kes | `kubectl edit svc` | Edit services(svc) from the default editor |
|
||||
| kds | `kubectl describe svc` | Describe all services in detail |
|
||||
| kdels | `kubectl delete svc` | Delete all services matching passed argument |
|
||||
| | | **Ingress management** |
|
||||
| kgi | `kubectl get ingress` | List ingress resources in ps output format |
|
||||
| kei | `kubectl edit ingress` | Edit ingress resource from the default editor |
|
||||
| kdi | `kubectl describe ingress` | Describe ingress resource in detail |
|
||||
| kdeli | `kubectl delete ingress` | Delete ingress resources matching passed argument |
|
||||
| | | **Namespace management** |
|
||||
| kgns | `kubectl get namespaces` | List the current namespaces in a cluster |
|
||||
| kcn | `kubectl config set-context --current --namespace` | Change current namespace |
|
||||
| kens | `kubectl edit namespace` | Edit namespace resource from the default editor |
|
||||
| kdns | `kubectl describe namespace` | Describe namespace resource in detail |
|
||||
| kdelns | `kubectl delete namespace` | Delete the namespace. WARNING! This deletes everything in the namespace |
|
||||
| | | **ConfigMap management** |
|
||||
| kgcm | `kubectl get configmaps` | List the configmaps in ps output format |
|
||||
| kecm | `kubectl edit configmap` | Edit configmap resource from the default editor |
|
||||
| kdcm | `kubectl describe configmap` | Describe configmap resource in detail |
|
||||
| kdelcm | `kubectl delete configmap` | Delete the configmap |
|
||||
| | | **Secret management** |
|
||||
| kgsec | `kubectl get secret` | Get secret for decoding |
|
||||
| kdsec | `kubectl describe secret` | Describe secret resource in detail |
|
||||
| kdelsec | `kubectl delete secret` | Delete the secret |
|
||||
| | | **Deployment management** |
|
||||
| kgd | `kubectl get deployment` | Get the deployment |
|
||||
| kgdw | `kgd --watch` | After getting the deployment, watch for changes |
|
||||
| kgdwide | `kgd -o wide` | After getting the deployment, output in plain-text format with any additional information |
|
||||
| ked | `kubectl edit deployment` | Edit deployment resource from the default editor |
|
||||
| kdd | `kubectl describe deployment` | Describe deployment resource in detail |
|
||||
| kdeld | `kubectl delete deployment` | Delete the deployment |
|
||||
| ksd | `kubectl scale deployment` | Scale a deployment |
|
||||
| krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment |
|
||||
| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime |
|
||||
| | | **Rollout management** |
|
||||
| kgrs | `kubectl get replicaset` | List all ReplicaSets `rs` created by the deployment |
|
||||
| kdrs | `kubectl describe replicaset` | Describe ReplicaSet in detail |
|
||||
| kers | `kubectl edit replicaset` | Edit ReplicaSet from the default editor |
|
||||
| krh | `kubectl rollout history` | Check the revisions of this deployment |
|
||||
| kru | `kubectl rollout undo` | Rollback to the previous revision |
|
||||
| | | **Port forwarding** |
|
||||
| kpf | `kubectl port-forward` | Forward one or more local ports to a pod |
|
||||
| | | **Tools for accessing all information** |
|
||||
| kga | `kubectl get all` | List all resources in ps format |
|
||||
| kgaa | `kubectl get all --all-namespaces` | List the requested object(s) across all namespaces |
|
||||
| | | **Logs** |
|
||||
| kl | `kubectl logs` | Print the logs for a container or resource |
|
||||
| klf | `kubectl logs -f` | Stream the logs for a container or resource (follow) |
|
||||
| | | **File copy** |
|
||||
| kcp | `kubectl cp` | Copy files and directories to and from containers |
|
||||
| | | **Node management** |
|
||||
| kgno | `kubectl get nodes` | List the nodes in ps output format |
|
||||
| kgnosl | `kubectl get nodes --show-labels` | List the nodes in ps output format with labels |
|
||||
| keno | `kubectl edit node` | Edit nodes resource from the default editor |
|
||||
| kdno | `kubectl describe node` | Describe node resource in detail |
|
||||
| kdelno | `kubectl delete node` | Delete the node |
|
||||
| | | **Persistent Volume Claim management** |
|
||||
| kgpvc | `kubectl get pvc` | List all PVCs |
|
||||
| kgpvcw | `kgpvc --watch` | After listing/getting the requested object, watch for changes |
|
||||
| kepvc | `kubectl edit pvc` | Edit pvcs from the default editor |
|
||||
| kdpvc | `kubectl describe pvc` | Describe all pvcs |
|
||||
| kdelpvc | `kubectl delete pvc` | Delete all pvcs matching passed arguments |
|
||||
| | | **StatefulSets management** |
|
||||
| kgss | `kubectl get statefulset` | List the statefulsets in ps format |
|
||||
| kgssw | `kgss --watch` | After getting the list of statefulsets, watch for changes |
|
||||
| kgsswide | `kgss -o wide` | After getting the statefulsets, output in plain-text format with any additional information |
|
||||
| kess | `kubectl edit statefulset` | Edit statefulset resource from the default editor |
|
||||
| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail |
|
||||
| kdelss | `kubectl delete statefulset` | Delete the statefulset |
|
||||
| ksss | `kubectl scale statefulset` | Scale a statefulset |
|
||||
| krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment |
|
||||
| | | **Service Accounts management** |
|
||||
| kdsa | `kubectl describe sa` | Describe a service account in details |
|
||||
| kdelsa | `kubectl delete sa` | Delete the service account |
|
||||
| | | **DaemonSet management** |
|
||||
| kgds | `kubectl get daemonset` | List all DaemonSets in ps output format |
|
||||
| kgdsw | `kgds --watch` | After listing all DaemonSets, watch for changes |
|
||||
| keds | `kubectl edit daemonset` | Edit DaemonSets from the default editor |
|
||||
| kdds | `kubectl describe daemonset` | Describe all DaemonSets in detail |
|
||||
| kdelds | `kubectl delete daemonset` | Delete all DaemonSets matching passed argument |
|
||||
| | | **CronJob management** |
|
||||
| kgcj | `kubectl get cronjob` | List all CronJobs in ps output format |
|
||||
| kecj | `kubectl edit cronjob` | Edit CronJob from the default editor |
|
||||
| kdcj | `kubectl describe cronjob` | Describe a CronJob in details |
|
||||
| kdelcj | `kubectl delete cronjob` | Delete the CronJob |
|
||||
| | | **Job management** |
|
||||
| kgj | `kubectl get job` | List all Job in ps output format |
|
||||
| kej | `kubectl edit job` | Edit a Job in details |
|
||||
| kdj | `kubectl describe job` | Describe the Job |
|
||||
| kdelj | `kubectl delete job` | Delete the Job |
|
||||
| Alias | Command | Description |
|
||||
| :------- | :------------------------------------------------------ | :----------------------------------------------------------------------------------------------- |
|
||||
| k | `kubectl` | The kubectl command |
|
||||
| kca | `kubectl --all-namespaces` | The kubectl command targeting all namespaces |
|
||||
| kaf | `kubectl apply -f` | Apply a YML file |
|
||||
| keti | `kubectl exec -ti` | Drop into an interactive terminal on a container |
|
||||
| | | **Manage configuration quickly to switch contexts between local, dev and staging** |
|
||||
| kcuc | `kubectl config use-context` | Set the current-context in a kubeconfig file |
|
||||
| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig |
|
||||
| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig |
|
||||
| kccc | `kubectl config current-context` | Display the current-context |
|
||||
| kcgc | `kubectl config get-contexts` | List of contexts available |
|
||||
| | | **General aliases** |
|
||||
| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector |
|
||||
| kdelf | `kubectl delete -f` | Delete a pod using the type and name specified in -f argument |
|
||||
| kge | `kubectl get events --sort-by=".lastTimestamp"` | Get events (sorted by timestamp) |
|
||||
| kgew | `kubectl get events --watch --sort-by=".lastTimestamp"` | Get events and watch as they occur (sorted by timestamp) |
|
||||
| | | **Pod management** |
|
||||
| kgp | `kubectl get pods` | List all pods in ps output format |
|
||||
| kgpl | `kgp -l` | Get pods by label. Example: `kgpl "app=myapp" -n myns` |
|
||||
| kgpn | `kgp -n` | Get pods by namespace. Example: `kgpn kube-system` |
|
||||
| kgpsl | `kubectl get pods --show-labels` | List all pods in ps output format with labels |
|
||||
| kgpw | `kgp --watch` | After listing/getting the requested object, watch for changes |
|
||||
| kgpwide | `kgp -o wide` | Output in plain-text format with any additional information. For pods, the node name is included |
|
||||
| kep | `kubectl edit pods` | Edit pods from the default editor |
|
||||
| kdp | `kubectl describe pods` | Describe all pods |
|
||||
| kdelp | `kubectl delete pods` | Delete all pods matching passed arguments |
|
||||
| | | **Service management** |
|
||||
| kgs | `kubectl get svc` | List all services in ps output format |
|
||||
| kgsw | `kgs --watch` | After listing all services, watch for changes |
|
||||
| kgswide | `kgs -o wide` | After listing all services, output in plain-text format with any additional information |
|
||||
| kes | `kubectl edit svc` | Edit services(svc) from the default editor |
|
||||
| kds | `kubectl describe svc` | Describe all services in detail |
|
||||
| kdels | `kubectl delete svc` | Delete all services matching passed argument |
|
||||
| | | **Ingress management** |
|
||||
| kgi | `kubectl get ingress` | List ingress resources in ps output format |
|
||||
| kei | `kubectl edit ingress` | Edit ingress resource from the default editor |
|
||||
| kdi | `kubectl describe ingress` | Describe ingress resource in detail |
|
||||
| kdeli | `kubectl delete ingress` | Delete ingress resources matching passed argument |
|
||||
| | | **Namespace management** |
|
||||
| kgns | `kubectl get namespaces` | List the current namespaces in a cluster |
|
||||
| kcn | `kubectl config set-context --current --namespace` | Change current namespace |
|
||||
| kens | `kubectl edit namespace` | Edit namespace resource from the default editor |
|
||||
| kdns | `kubectl describe namespace` | Describe namespace resource in detail |
|
||||
| kdelns | `kubectl delete namespace` | Delete the namespace. WARNING! This deletes everything in the namespace |
|
||||
| | | **ConfigMap management** |
|
||||
| kgcm | `kubectl get configmaps` | List the configmaps in ps output format |
|
||||
| kecm | `kubectl edit configmap` | Edit configmap resource from the default editor |
|
||||
| kdcm | `kubectl describe configmap` | Describe configmap resource in detail |
|
||||
| kdelcm | `kubectl delete configmap` | Delete the configmap |
|
||||
| | | **Secret management** |
|
||||
| kgsec | `kubectl get secret` | Get secret for decoding |
|
||||
| kdsec | `kubectl describe secret` | Describe secret resource in detail |
|
||||
| kdelsec | `kubectl delete secret` | Delete the secret |
|
||||
| | | **Deployment management** |
|
||||
| kgd | `kubectl get deployment` | Get the deployment |
|
||||
| kgdw | `kgd --watch` | After getting the deployment, watch for changes |
|
||||
| kgdwide | `kgd -o wide` | After getting the deployment, output in plain-text format with any additional information |
|
||||
| ked | `kubectl edit deployment` | Edit deployment resource from the default editor |
|
||||
| kdd | `kubectl describe deployment` | Describe deployment resource in detail |
|
||||
| kdeld | `kubectl delete deployment` | Delete the deployment |
|
||||
| ksd | `kubectl scale deployment` | Scale a deployment |
|
||||
| krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment |
|
||||
| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime |
|
||||
| | | **Rollout management** |
|
||||
| kgrs | `kubectl get replicaset` | List all ReplicaSets `rs` created by the deployment |
|
||||
| kdrs | `kubectl describe replicaset` | Describe ReplicaSet in detail |
|
||||
| kers | `kubectl edit replicaset` | Edit ReplicaSet from the default editor |
|
||||
| krh | `kubectl rollout history` | Check the revisions of this deployment |
|
||||
| kru | `kubectl rollout undo` | Rollback to the previous revision |
|
||||
| | | **Port forwarding** |
|
||||
| kpf | `kubectl port-forward` | Forward one or more local ports to a pod |
|
||||
| | | **Tools for accessing all information** |
|
||||
| kga | `kubectl get all` | List all resources in ps format |
|
||||
| kgaa | `kubectl get all --all-namespaces` | List the requested object(s) across all namespaces |
|
||||
| | | **Logs** |
|
||||
| kl | `kubectl logs` | Print the logs for a container or resource |
|
||||
| klf | `kubectl logs -f` | Stream the logs for a container or resource (follow) |
|
||||
| | | **File copy** |
|
||||
| kcp | `kubectl cp` | Copy files and directories to and from containers |
|
||||
| | | **Node management** |
|
||||
| kgno | `kubectl get nodes` | List the nodes in ps output format |
|
||||
| kgnosl | `kubectl get nodes --show-labels` | List the nodes in ps output format with labels |
|
||||
| keno | `kubectl edit node` | Edit nodes resource from the default editor |
|
||||
| kdno | `kubectl describe node` | Describe node resource in detail |
|
||||
| kdelno | `kubectl delete node` | Delete the node |
|
||||
| | | **Persistent Volume Claim management** |
|
||||
| kgpvc | `kubectl get pvc` | List all PVCs |
|
||||
| kgpvcw | `kgpvc --watch` | After listing/getting the requested object, watch for changes |
|
||||
| kepvc | `kubectl edit pvc` | Edit pvcs from the default editor |
|
||||
| kdpvc | `kubectl describe pvc` | Describe all pvcs |
|
||||
| kdelpvc | `kubectl delete pvc` | Delete all pvcs matching passed arguments |
|
||||
| | | **StatefulSets management** |
|
||||
| kgss | `kubectl get statefulset` | List the statefulsets in ps format |
|
||||
| kgssw | `kgss --watch` | After getting the list of statefulsets, watch for changes |
|
||||
| kgsswide | `kgss -o wide` | After getting the statefulsets, output in plain-text format with any additional information |
|
||||
| kess | `kubectl edit statefulset` | Edit statefulset resource from the default editor |
|
||||
| kdss | `kubectl describe statefulset` | Describe statefulset resource in detail |
|
||||
| kdelss | `kubectl delete statefulset` | Delete the statefulset |
|
||||
| ksss | `kubectl scale statefulset` | Scale a statefulset |
|
||||
| krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment |
|
||||
| | | **Service Accounts management** |
|
||||
| kdsa | `kubectl describe sa` | Describe a service account in details |
|
||||
| kdelsa | `kubectl delete sa` | Delete the service account |
|
||||
| | | **DaemonSet management** |
|
||||
| kgds | `kubectl get daemonset` | List all DaemonSets in ps output format |
|
||||
| kgdsw | `kgds --watch` | After listing all DaemonSets, watch for changes |
|
||||
| keds | `kubectl edit daemonset` | Edit DaemonSets from the default editor |
|
||||
| kdds | `kubectl describe daemonset` | Describe all DaemonSets in detail |
|
||||
| kdelds | `kubectl delete daemonset` | Delete all DaemonSets matching passed argument |
|
||||
| | | **CronJob management** |
|
||||
| kgcj | `kubectl get cronjob` | List all CronJobs in ps output format |
|
||||
| kecj | `kubectl edit cronjob` | Edit CronJob from the default editor |
|
||||
| kdcj | `kubectl describe cronjob` | Describe a CronJob in details |
|
||||
| kdelcj | `kubectl delete cronjob` | Delete the CronJob |
|
||||
| | | **Job management** |
|
||||
| kgj | `kubectl get job` | List all Job in ps output format |
|
||||
| kej | `kubectl edit job` | Edit a Job in details |
|
||||
| kdj | `kubectl describe job` | Describe the Job |
|
||||
| kdelj | `kubectl delete job` | Delete the Job |
|
||||
|
||||
## Wrappers
|
||||
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@ alias kcgc='kubectl config get-contexts'
|
|||
# General aliases
|
||||
alias kdel='kubectl delete'
|
||||
alias kdelf='kubectl delete -f'
|
||||
alias kge='kubectl get events --sort-by=".lastTimestamp"'
|
||||
alias kgew='kubectl get events --sort-by=".lastTimestamp" --watch'
|
||||
|
||||
# Pod management.
|
||||
alias kgp='kubectl get pods'
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
|
|
@ -3,11 +3,19 @@ if (( ! $+commands[procs] )); then
|
|||
fi
|
||||
|
||||
# If the completion file doesn't exist yet, we need to autoload it and
|
||||
# bind it to `minikube`. Otherwise, compinit will have already done that.
|
||||
# bind it to `procs`. Otherwise, compinit will have already done that.
|
||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_procs" ]]; then
|
||||
typeset -g -A _comps
|
||||
autoload -Uz _procs
|
||||
_comps[procs]=_procs
|
||||
fi
|
||||
|
||||
procs --gen-completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs" &|
|
||||
{
|
||||
autoload -Uz is-at-least
|
||||
local _version=$(procs --version)
|
||||
if is-at-least "0.14" "${_version#procs }"; then
|
||||
procs --gen-completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs"
|
||||
else
|
||||
procs --completion-out zsh >| "$ZSH_CACHE_DIR/completions/_procs"
|
||||
fi
|
||||
} &|
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ virtual environments:
|
|||
`<venv-name>/bin/activate`, and automatically deactivate it when navigating out of it (keeps venv activated
|
||||
in subdirectories).
|
||||
- To enable the feature, set `PYTHON_AUTO_VRUN=true` before sourcing oh-my-zsh.
|
||||
- The plugin activates the first existing virtual environment, in order, appearing in `$PYTON_VENV_NAMES`.
|
||||
- The plugin activates the first existing virtual environment, in order, appearing in `$PYTHON_VENV_NAMES`.
|
||||
The default virtual environment name is `venv`. To use a different name, set
|
||||
`PYTHON_VENV_NAME=<venv-name>`. For example: `PYTHON_VENV_NAME=".venv"`
|
||||
|
||||
|
|
|
|||
|
|
@ -1,16 +1,26 @@
|
|||
# rsync
|
||||
|
||||
This plugin adds aliases for frequent [rsync](https://rsync.samba.org/) commands.
|
||||
This plugin adds aliases for frequent [rsync](https://rsync.samba.org/) commands, simplifying file transfer and synchronization tasks.
|
||||
|
||||
To use it add `rsync` to the plugins array in you zshrc file.
|
||||
To use it add `rsync` to the plugins array in you `.zshrc` file.
|
||||
|
||||
```zsh
|
||||
plugins=(... rsync)
|
||||
```
|
||||
|
||||
| Alias | Command |
|
||||
| ------------------- | ------------------------------------------------ |
|
||||
| *rsync-copy* | `rsync -avz --progress -h` |
|
||||
| *rsync-move* | `rsync -avz --progress -h --remove-source-files` |
|
||||
| *rsync-update* | `rsync -avzu --progress -h` |
|
||||
| *rsync-synchronize* | `rsync -avzu --delete --progress -h` |
|
||||
| Alias | Command | Description |
|
||||
| ------------------- | ------------------------------------------------ | ------------|
|
||||
| `rsync-copy` | `rsync -avz --progress -h` | Recursively copy files and directories, preserving permissions, timestamps, and symbolic links. Compression is enabled for faster transfers. Progress is displayed in a human-readable format. |
|
||||
| `rsync-move` | `rsync -avz --progress -h --remove-source-files` | Same as rsync-copy, but removes the source files after a successful transfer (effectively performing a move). |
|
||||
| `rsync-update` | `rsync -avzu --progress -h` | Like rsync-copy, but only updates files if the source is newer than the destination (or if the destination file is missing). |
|
||||
| `rsync-synchronize` | `rsync -avzu --delete --progress -h` | Performs bidirectional-style sync: updates files as in rsync-update and deletes files in the destination that no longer exist in the source. Useful for directory synchronization. |
|
||||
|
||||
Explanation of Flags:
|
||||
- -a: Archive mode; preserves symbolic links, permissions, timestamps, etc.
|
||||
- -v: Verbose; shows details of the transfer process.
|
||||
- -z: Compress file data during transfer for efficiency.
|
||||
- -u: Skip files that are newer on the receiver.
|
||||
- --progress: Show progress during file transfer.
|
||||
- -h: Output numbers in human-readable format (e.g., 1K, 234M).
|
||||
- --remove-source-files: Deletes source files after they are copied (used in rsync-move).
|
||||
- --delete: Deletes files in the destination that are not present in the source (used in rsync-synchronize).
|
||||
|
|
|
|||
|
|
@ -15,25 +15,26 @@ plugins=(... terraform)
|
|||
|
||||
## Aliases
|
||||
|
||||
| Alias | Command |
|
||||
|---------|----------------------------------|
|
||||
| `tf` | `terraform` |
|
||||
| `tfa` | `terraform apply` |
|
||||
| `tfaa` | `terraform apply -auto-approve` |
|
||||
| `tfc` | `terraform console` |
|
||||
| `tfd` | `terraform destroy` |
|
||||
| `tfd!` | `terraform destroy -auto-approve`|
|
||||
| `tff` | `terraform fmt` |
|
||||
| `tffr` | `terraform fmt -recursive` |
|
||||
| `tfi` | `terraform init` |
|
||||
| `tfiu` | `terraform init -upgrade` |
|
||||
| `tfo` | `terraform output` |
|
||||
| `tfp` | `terraform plan` |
|
||||
| `tfv` | `terraform validate` |
|
||||
| `tfs` | `terraform state` |
|
||||
| `tft` | `terraform test` |
|
||||
| `tfsh` | `terraform show` |
|
||||
|
||||
| Alias | Command |
|
||||
| ------- | -------------------------------------- |
|
||||
| `tf` | `terraform` |
|
||||
| `tfa` | `terraform apply` |
|
||||
| `tfaa` | `terraform apply -auto-approve` |
|
||||
| `tfc` | `terraform console` |
|
||||
| `tfd` | `terraform destroy` |
|
||||
| `tfd!` | `terraform destroy -auto-approve` |
|
||||
| `tff` | `terraform fmt` |
|
||||
| `tffr` | `terraform fmt -recursive` |
|
||||
| `tfi` | `terraform init` |
|
||||
| `tfir` | `terraform init -reconfigure` |
|
||||
| `tfiu` | `terraform init -upgrade` |
|
||||
| `tfiur` | `terraform init -upgrade -reconfigure` |
|
||||
| `tfo` | `terraform output` |
|
||||
| `tfp` | `terraform plan` |
|
||||
| `tfv` | `terraform validate` |
|
||||
| `tfs` | `terraform state` |
|
||||
| `tft` | `terraform test` |
|
||||
| `tfsh` | `terraform show` |
|
||||
|
||||
## Prompt function
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,9 @@ alias 'tfd!'='terraform destroy -auto-approve'
|
|||
alias tff='terraform fmt'
|
||||
alias tffr='terraform fmt -recursive'
|
||||
alias tfi='terraform init'
|
||||
alias tfir='terraform init -reconfigure'
|
||||
alias tfiu='terraform init -upgrade'
|
||||
alias tfiur='terraform init -upgrade -reconfigure'
|
||||
alias tfo='terraform output'
|
||||
alias tfp='terraform plan'
|
||||
alias tfv='terraform validate'
|
||||
|
|
|
|||
|
|
@ -1,46 +1,76 @@
|
|||
# universalarchive plugin
|
||||
|
||||
Lets you compress files by a command `ua <format> <files>`, supporting various
|
||||
compression formats (e.g. 7z, tar.gz, lzma, ...).
|
||||
The `universalarchive` plugin provides a convenient command-line interface for archiving files and directories using a wide variety of compression formats - without having to remember the exact syntax for each tool.
|
||||
|
||||
To enable it, add `universalarchive` to the plugins array in your zshrc file:
|
||||
To enable it, add `universalarchive` to the plugins array in your `.zshrc` file:
|
||||
|
||||
```zsh
|
||||
plugins=(... universalarchive)
|
||||
```
|
||||
|
||||
## Features
|
||||
- Compress files and directories using a simple, unified command: ua <format> <files>
|
||||
- Automatically detects file/directory names to generate appropriate output names
|
||||
- Supports fallback naming if an output file already exists
|
||||
- Works with many common and advanced compression formats
|
||||
- Designed for simplicity and quick use in the terminal
|
||||
|
||||
## Usage
|
||||
|
||||
Run `ua <format> <files>` to compress `<files>` into an archive file using `<format>`.
|
||||
For example:
|
||||
|
||||
Basic command format:
|
||||
```sh
|
||||
ua xz *.html
|
||||
ua <format> <files...>
|
||||
```
|
||||
- `<format>`: the archive format to use (e.g., `zip`, `tar.gz`, `xz`, `7z`, etc.)
|
||||
- `<files...>`: one or more files or directories to compress
|
||||
|
||||
## Examples:
|
||||
|
||||
Compresses `notes.txt` and `images` into `notes.zip`
|
||||
```sh
|
||||
ua zip notes.txt images/
|
||||
```
|
||||
|
||||
this command will compress all `.html` files in directory `folder` into `folder.xz`.
|
||||
Creates `myproject.tar.gz`
|
||||
```sh
|
||||
ua tar.gz myproject/
|
||||
```
|
||||
|
||||
This plugin saves you from having to remember which command line arguments compress a file.
|
||||
Compresses all .log files into `current_folder.xz`
|
||||
```sh
|
||||
ua xz *.log
|
||||
```
|
||||
|
||||
## Supported compression formats
|
||||
The plugin will generate a default archive filename based on the input:
|
||||
- For a file, the output is derived from the file name without its extension.
|
||||
- For a directory, it uses the directory name.
|
||||
- For multiple files, it uses the name of the common parent directory.
|
||||
|
||||
| Extension | Description |
|
||||
|:-----------------|:-------------------------------|
|
||||
| `7z` | 7zip file |
|
||||
| `bz2` | Bzip2 file |
|
||||
| `gz` | Gzip file |
|
||||
| `lzma` | LZMA archive |
|
||||
| `lzo` | LZO archive |
|
||||
| `rar` | WinRAR archive |
|
||||
| `tar` | Tarball |
|
||||
| `tbz`/`tar.bz2` | Tarball with bzip2 compression |
|
||||
| `tgz`/`tar.gz` | Tarball with gzip compression |
|
||||
| `tlz`/`tar.lzma` | Tarball with lzma compression |
|
||||
| `txz`/`tar.xz` | Tarball with lzma2 compression |
|
||||
| `tZ`/`tar.Z` | Tarball with LZW compression |
|
||||
| `xz` | LZMA2 archive |
|
||||
| `Z` | Z archive (LZW) |
|
||||
| `zip` | Zip archive |
|
||||
| `zst` | Zstd archive |
|
||||
If the output file already exists, a unique filename is generated using `mktemp`.
|
||||
|
||||
See [list of archive formats](https://en.wikipedia.org/wiki/List_of_archive_formats) for more information regarding the archive formats.
|
||||
## Supported Archive Formats
|
||||
|
||||
| Format | Description | Tool Used |
|
||||
|:-----------------|:-------------------------------|:-----------------|
|
||||
| `7z` | 7zip archive | `7z` |
|
||||
| `bz2` | Bzip2-compressed file | `bzip2` |
|
||||
| `gz` | Gzip-compressed file | `gzip` |
|
||||
| `lzma` | LZMA-compressed file | `lzma` |
|
||||
| `lzo` | LZO-compressed file | `lzop` |
|
||||
| `rar` | WinRAR archive | `rar` |
|
||||
| `tar` | Uncompressed tarball | `tar` |
|
||||
| `tbz`,`tar.bz2` | Tarball compressed with Bzip2 | `tar + bzip2` |
|
||||
| `tgz`,`tar.gz` | Tarball compressed with Gzip | `tar + gzip` |
|
||||
| `tlz`,`tar.lzma` | Tarball compressed with LZMA | `tar + lzma` |
|
||||
| `txz`,`tar.xz` | Tarball compressed with LZMA2 | `tar + xz` |
|
||||
| `tZ`,`tar.Z` | Tarball compressed with LZW | `tar + compress` |
|
||||
| `xz` | XZ-compressed file | `xz` |
|
||||
| `Z` | LZW-compressed file | `compress` |
|
||||
| `zip` | Standard Zip archive | `zip` |
|
||||
| `zst` | Zstandard-compressed file | `zstd` |
|
||||
|
||||
> Note: Some formats may require specific tools to be installed on your system (e.g. `7z`, `rar`, `lzop`, `zstd`). Make sure these tools are available in your `$PATH`.
|
||||
|
||||
## Auto-Completion
|
||||
|
||||
The plugin provides tab-completion for supported formats and input files. Type `ua <TAB>` to see available formats, and `ua <format> <TAB>` to browse files.
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ hasn't been defined by theme, *Insert mode* is not displayed by default.
|
|||
|
||||
You can change these indicators by setting the `MODE_INDICATOR` (*Normal mode*) and
|
||||
`INSERT_MODE_INDICATORS` (*Insert mode*) variables.
|
||||
This settings support Prompt Expansion sequences. For example:
|
||||
These settings support Prompt Expansion sequences. For example:
|
||||
|
||||
```zsh
|
||||
MODE_INDICATOR="%F{white}+%f"
|
||||
|
|
@ -157,6 +157,27 @@ NOTE: delete/kill commands (`dd`, `D`, `c{motion}`, `C`, `x`,`X`) and yank comma
|
|||
(`y`, `Y`) will copy to the clipboard. Contents can then be put back using paste commands
|
||||
(`P`, `p`).
|
||||
|
||||
## Text objects
|
||||
|
||||
Standard text objects are supported with `i` ("inside") and `a` ("around"), e.g., for words; thus, you can select the word the cursor is in with `viw`, or delete the current word, including surrounding spaces, with `daw`.
|
||||
|
||||
For other text objects, you can rely on the built-in functionality of Zsh and enable it accordingly.
|
||||
For example, for quoted strings, you can copy the commented snippet of <https://sourceforge.net/p/zsh/code/ci/master/tree/Functions/Zle/select-quoted>: place this in your `.zsrhc` file, e.g., after sourcing oh-my-zsh:
|
||||
|
||||
```sh
|
||||
autoload -U select-quoted
|
||||
zle -N select-quoted
|
||||
for m in visual viopp; do
|
||||
for c in {a,i}{\',\",\`}; do
|
||||
bindkey -M $m $c select-quoted
|
||||
done
|
||||
done
|
||||
```
|
||||
|
||||
Now, in normal mode, you can select everything inside a double-quoted string with `vi"`.
|
||||
Note that this works even if you're not already inside a quoted string.
|
||||
For example, you can replace everything inside a single-quoted string in the current line, from wherever the cursor is, with `ci'`.
|
||||
|
||||
## Known issues
|
||||
|
||||
### Low `$KEYTIMEOUT`
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ function _wd() {
|
|||
'rm:Removes the given warp point'
|
||||
'list:Outputs all stored warp points'
|
||||
'ls:Show files from given warp point'
|
||||
'open:Open warp point in the default file explorer'
|
||||
'path:Show path to given warp point'
|
||||
'show:Outputs all warp points that point to the current directory or shows a specific target directory for a point'
|
||||
'help:Show this extremely helpful text'
|
||||
|
|
@ -73,6 +74,9 @@ function _wd() {
|
|||
ls)
|
||||
_describe -t points "Warp points" warp_points && ret=0
|
||||
;;
|
||||
open)
|
||||
_describe -t points "Warp points" warp_points && ret=0
|
||||
;;
|
||||
path)
|
||||
_describe -t points "Warp points" warp_points && ret=0
|
||||
;;
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
# @github.com/mfaerevaag/wd
|
||||
|
||||
# version
|
||||
readonly WD_VERSION=0.9.3
|
||||
readonly WD_VERSION=0.10.0
|
||||
|
||||
# colors
|
||||
readonly WD_BLUE="\033[96m"
|
||||
|
|
@ -86,6 +86,7 @@ Commands:
|
|||
show Print warp points to current directory
|
||||
list Print all stored warp points
|
||||
ls <point> Show files from given warp point (ls)
|
||||
open <point> Open the warp point in the default file explorer (open / xdg-open)
|
||||
path <point> Show the path to given warp point (pwd)
|
||||
clean Remove points warping to nonexistent directories (will prompt unless --force is used)
|
||||
|
||||
|
|
@ -377,6 +378,21 @@ wd_ls()
|
|||
ls "${dir/#\~/$HOME}"
|
||||
}
|
||||
|
||||
wd_open()
|
||||
{
|
||||
wd_getdir "$1"
|
||||
if command -v open >/dev/null 2>&1; then
|
||||
# MacOS, Ubuntu (alias)
|
||||
open "${dir/#\~/$HOME}"
|
||||
elif command -v xdg-open >/dev/null 2>&1; then
|
||||
# Most Linux desktops
|
||||
xdg-open "${dir/#\~/$HOME}"
|
||||
else
|
||||
echo "No known file opener found (need 'open' or 'xdg-open')." >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
wd_path()
|
||||
{
|
||||
wd_getdir "$1"
|
||||
|
|
@ -521,7 +537,7 @@ do
|
|||
done < "$wd_config_file"
|
||||
|
||||
# get opts
|
||||
args=$(getopt -o a:r:c:lhs -l add:,rm:,clean,list,ls:,path:,help,show -- $*)
|
||||
args=$(getopt -o a:r:c:lhs -l add:,rm:,clean,list,ls:,open:,path:,help,show -- $*)
|
||||
|
||||
# check if no arguments were given, and that version is not set
|
||||
if [[ ($? -ne 0 || $#* -eq 0) && -z $wd_print_version ]]
|
||||
|
|
@ -571,6 +587,10 @@ else
|
|||
wd_ls "$2"
|
||||
break
|
||||
;;
|
||||
"-o"|"--open"|"open")
|
||||
wd_open "$2"
|
||||
break
|
||||
;;
|
||||
"-p"|"--path"|"path")
|
||||
wd_path "$2"
|
||||
break
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2018-2024 Alexandros Kozak
|
||||
Copyright (c) 2018-2025 Alexandros Kozak
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
# https://github.com/agkozak/zsh-z
|
||||
#
|
||||
# Copyright (c) 2018-2024 Alexandros Kozak
|
||||
# Copyright (c) 2018-2025 Alexandros Kozak
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
@ -294,7 +294,16 @@ zshz() {
|
|||
owner=${ZSHZ_OWNER:-${_Z_OWNER}}
|
||||
|
||||
if (( ZSHZ[USE_FLOCK] )); then
|
||||
${ZSHZ[MV]} "$tempfile" "$datafile" 2> /dev/null || ${ZSHZ[RM]} -f "$tempfile"
|
||||
# An unsual case: if inside Docker container where datafile could be bind
|
||||
# mounted
|
||||
if [[ -r '/proc/1/cgroup' && "$(< '/proc/1/cgroup')" == *docker* ]]; then
|
||||
print "$(< "$tempfile")" > "$datafile" 2> /dev/null
|
||||
${ZSHZ[RM]} -f "$tempfile"
|
||||
# All other cases
|
||||
else
|
||||
${ZSHZ[MV]} "$tempfile" "$datafile" 2> /dev/null ||
|
||||
${ZSHZ[RM]} -f "$tempfile"
|
||||
fi
|
||||
|
||||
if [[ -n $owner ]]; then
|
||||
${ZSHZ[CHOWN]} ${owner}:"$(id -ng ${owner})" "$datafile"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue