mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-01-05 23:19:51 +00:00
Compare commits
21 Commits
ddec79ad43
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2daffdf101 | ||
|
|
28d4ab6e98 | ||
|
|
72625e2f2f | ||
|
|
d23d3ea69f | ||
|
|
a79b37b954 | ||
|
|
0f45f82c0a | ||
|
|
129aeee6bc | ||
|
|
3a73094983 | ||
|
|
95de26572e | ||
|
|
945d89f7ae | ||
|
|
8a231b1930 | ||
|
|
475b18f39a | ||
|
|
d4a62a2715 | ||
|
|
b5c449e1eb | ||
|
|
7192af5239 | ||
|
|
1fee750c3b | ||
|
|
57781231bb | ||
|
|
a4e15fdb16 | ||
|
|
f84341c574 | ||
|
|
92aed2e936 | ||
|
|
72acd2ca90 |
8
.github/dependencies.yml
vendored
8
.github/dependencies.yml
vendored
@@ -27,6 +27,14 @@ dependencies:
|
||||
postcopy: |
|
||||
set -e
|
||||
test -e dependencies/OMZ-README.md && cat dependencies/OMZ-README.md >> README.md
|
||||
plugins/kube-ps1:
|
||||
repo: jonmosco/kube-ps1
|
||||
branch: master
|
||||
version: 0b0e6daf4197ecabb1ae4f2d46fb148a8e1e73e5
|
||||
precopy: |
|
||||
set -e
|
||||
find . ! -name kube-ps1.sh ! -name LICENSE ! -name README.md -delete
|
||||
test -e kube-ps1.sh && mv kube-ps1.sh kube-ps1.plugin.zsh
|
||||
plugins/wd:
|
||||
repo: mfaerevaag/wd
|
||||
branch: master
|
||||
|
||||
2
.github/workflows/dependencies.yml
vendored
2
.github/workflows/dependencies.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
||||
contents: write # this is needed to push commits and branches
|
||||
steps:
|
||||
- name: Harden the runner (Audit all outbound calls)
|
||||
uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3
|
||||
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
certifi==2025.11.12
|
||||
certifi==2026.1.4
|
||||
charset-normalizer==3.4.4
|
||||
idna==3.11
|
||||
PyYAML==6.0.3
|
||||
requests==2.32.5
|
||||
semver==3.0.4
|
||||
urllib3==2.6.0
|
||||
urllib3==2.6.2
|
||||
|
||||
19
.github/workflows/dependencies/updater.py
vendored
19
.github/workflows/dependencies/updater.py
vendored
@@ -18,6 +18,13 @@ TMP_DIR = os.path.join(os.environ.get("TMP_DIR", "/tmp"), "ohmyzsh")
|
||||
DEPS_YAML_FILE = ".github/dependencies.yml"
|
||||
# Dry run flag
|
||||
DRY_RUN = os.environ.get("DRY_RUN", "0") == "1"
|
||||
# GitHub Token is needed to avoid rate limiting
|
||||
GH_TOKEN = os.environ.get("GH_TOKEN")
|
||||
HEADERS = {
|
||||
"Accept": "application/vnd.github+json",
|
||||
}
|
||||
if GH_TOKEN:
|
||||
HEADERS["Authorization"] = f"Bearer {GH_TOKEN}"
|
||||
|
||||
# utils for tag comparison
|
||||
BASEVERSION = re.compile(
|
||||
@@ -453,7 +460,7 @@ class GitHub:
|
||||
url = f"https://api.github.com/repos/{repo}/git/refs/tags"
|
||||
|
||||
# Send a GET request to the GitHub API
|
||||
response = requests.get(url)
|
||||
response = requests.get(url, headers=HEADERS)
|
||||
current_version = coerce(current_tag)
|
||||
if current_version is None:
|
||||
raise ValueError(
|
||||
@@ -513,7 +520,7 @@ class GitHub:
|
||||
url = f"https://api.github.com/repos/{repo}/compare/{version}...{branch}"
|
||||
|
||||
# Send a GET request to the GitHub API
|
||||
response = requests.get(url)
|
||||
response = requests.get(url, headers=HEADERS)
|
||||
|
||||
# If the request was successful
|
||||
if response.status_code == 200:
|
||||
@@ -597,7 +604,13 @@ def main():
|
||||
DependencyStore.set(data)
|
||||
|
||||
dependencies = data["dependencies"]
|
||||
for path in dependencies:
|
||||
if len(sys.argv) > 1:
|
||||
# argv is list of dependencies to run, default is all of them
|
||||
dependency_list = sys.argv[1:]
|
||||
else:
|
||||
dependency_list = dependencies.keys()
|
||||
|
||||
for path in dependency_list:
|
||||
dependency = Dependency(path, dependencies[path])
|
||||
dependency.update_or_notify()
|
||||
|
||||
|
||||
4
.github/workflows/installer.yml
vendored
4
.github/workflows/installer.yml
vendored
@@ -26,7 +26,7 @@ jobs:
|
||||
- macos-latest
|
||||
steps:
|
||||
- name: Harden the runner (Audit all outbound calls)
|
||||
uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3
|
||||
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
@@ -47,7 +47,7 @@ jobs:
|
||||
- test
|
||||
steps:
|
||||
- name: Harden the runner (Audit all outbound calls)
|
||||
uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3
|
||||
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
|
||||
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||
steps:
|
||||
- name: Harden the runner (Audit all outbound calls)
|
||||
uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3
|
||||
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
|
||||
2
.github/workflows/project.yml
vendored
2
.github/workflows/project.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||
steps:
|
||||
- name: Harden the runner (Audit all outbound calls)
|
||||
uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3
|
||||
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||
with:
|
||||
egress-policy: audit
|
||||
- name: Authenticate as @ohmyzsh
|
||||
|
||||
6
.github/workflows/scorecard.yml
vendored
6
.github/workflows/scorecard.yml
vendored
@@ -36,7 +36,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Harden the runner (Audit all outbound calls)
|
||||
uses: step-security/harden-runner@df199fb7be9f65074067a9eb93f12bb4c5547cf2 # v2.13.3
|
||||
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||
with:
|
||||
egress-policy: audit
|
||||
|
||||
@@ -53,13 +53,13 @@ jobs:
|
||||
publish_results: true
|
||||
|
||||
- name: "Upload artifact"
|
||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
||||
with:
|
||||
name: SARIF file
|
||||
path: results.sarif
|
||||
retention-days: 5
|
||||
|
||||
- name: "Upload to code-scanning"
|
||||
uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||
uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
|
||||
@@ -82,7 +82,7 @@ function detect-clipboard() {
|
||||
function clipcopy() { cat "${1:-/dev/stdin}" | termux-clipboard-set; }
|
||||
function clippaste() { termux-clipboard-get; }
|
||||
elif [ -n "${TMUX:-}" ] && (( ${+commands[tmux]} )); then
|
||||
function clipcopy() { tmux load-buffer "${1:--}"; }
|
||||
function clipcopy() { tmux load-buffer -w "${1:--}"; }
|
||||
function clippaste() { tmux save-buffer -; }
|
||||
else
|
||||
function _retry_clipboard_detection_or_fail() {
|
||||
|
||||
@@ -117,7 +117,7 @@ function _omz_git_prompt_status() {
|
||||
fi
|
||||
|
||||
# For each status prefix, do a regex comparison
|
||||
for status_prefix in ${(k)prefix_constant_map}; do
|
||||
for status_prefix in "${(@k)prefix_constant_map}"; do
|
||||
local status_constant="${prefix_constant_map[$status_prefix]}"
|
||||
local status_regex=$'(^|\n)'"$status_prefix"
|
||||
|
||||
|
||||
@@ -77,7 +77,15 @@ EOF
|
||||
(*.lzma) unlzma "$full_path" ;;
|
||||
(*.z) uncompress "$full_path" ;;
|
||||
(*.zip|*.war|*.jar|*.ear|*.sublime-package|*.ipa|*.ipsw|*.xpi|*.apk|*.aar|*.whl|*.vsix|*.crx|*.pk3|*.pk4) unzip "$full_path" ;;
|
||||
(*.rar) unrar x -ad "$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]* | *.pk7) 7za x "$full_path" ;;
|
||||
|
||||
@@ -235,37 +235,23 @@ These are aliases that have been removed, renamed, or otherwise modified in a wa
|
||||
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` |
|
||||
| :------- | :-------------------------------------------------------- | :-----------------------------------------------------|
|
||||
| `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. |
|
||||
| :----------------------- | :------------------------------------------------------------------------------------------------------------- |
|
||||
| `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**) |
|
||||
|
||||
@@ -287,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
|
||||
@@ -427,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
|
||||
|
||||
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_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,28 @@ 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
|
||||
case "$(_kube_ps1_shell_type)" in
|
||||
"zsh")
|
||||
_KUBE_PS1_OPEN_ESC="%{"
|
||||
_KUBE_PS1_CLOSE_ESC="%}"
|
||||
@@ -64,7 +63,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 +72,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
|
||||
elif [[ "$(_kube_ps1_shell_type)" == "zsh" ]]; then
|
||||
_KUBE_PS1_FG_CODE="%F{$_KUBE_PS1_FG_CODE}"
|
||||
elif [[ "$(_kube_ps1_shell_type)" == "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"
|
||||
_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
|
||||
elif [[ "$(_kube_ps1_shell_type)" == "zsh" ]]; then
|
||||
_KUBE_PS1_BG_CODE="%K{$_KUBE_PS1_BG_CODE}"
|
||||
elif [[ "$(_kube_ps1_shell_type)" == "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"
|
||||
_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="${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 +148,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
|
||||
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}"
|
||||
;;
|
||||
*)
|
||||
case "$(_kube_ps1_shell_type)" in
|
||||
bash)
|
||||
if ((BASH_VERSINFO[0] >= 4)) && [[ $'\u2388' != "\\u2388" ]]; then
|
||||
KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_DEFAULT}"
|
||||
KUBE_PS1_SYMBOL_IMG=$'\u2638\ufe0f'
|
||||
symbol="$(_kube_ps1_color_fg $custom_symbol_color)${symbol_default}${KUBE_PS1_RESET_COLOR}"
|
||||
symbol_img=$'\u2638\ufe0f'
|
||||
else
|
||||
KUBE_PS1_SYMBOL=$'\xE2\x8E\x88'
|
||||
KUBE_PS1_SYMBOL_IMG=$'\xE2\x98\xB8'
|
||||
symbol=$'\xE2\x8E\x88'
|
||||
symbol_img=$'\xE2\x98\xB8'
|
||||
fi
|
||||
;;
|
||||
zsh)
|
||||
KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_DEFAULT}"
|
||||
KUBE_PS1_SYMBOL_IMG="\u2638";;
|
||||
symbol="$(_kube_ps1_color_fg $custom_symbol_color)${symbol_default}${KUBE_PS1_RESET_COLOR}"
|
||||
symbol_img="☸️"
|
||||
;;
|
||||
*)
|
||||
KUBE_PS1_SYMBOL="k8s"
|
||||
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,19 +212,9 @@ _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
|
||||
else
|
||||
if [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then
|
||||
mtime=$(zstat +mtime "${file}")
|
||||
if [[ "$(_kube_ps1_shell_type)" == "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}")
|
||||
@@ -211,12 +222,11 @@ _kube_ps1_file_newer_than() {
|
||||
# BSD stat
|
||||
mtime=$(stat -L -f %m "$file")
|
||||
fi
|
||||
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 +235,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 +273,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 +282,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_type)" == "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_type)" == "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 +325,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 oon kube-ps1 status for this shell instance (default).
|
||||
|
||||
-g --global turn on kube-ps1 status globally
|
||||
-h --help print this message
|
||||
@@ -322,7 +349,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 +363,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 +378,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 +408,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 +423,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
|
||||
|
||||
@@ -16,6 +16,7 @@ plugins=(... kubectl)
|
||||
| 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 |
|
||||
@@ -26,6 +27,7 @@ plugins=(... kubectl)
|
||||
| | | **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** |
|
||||
|
||||
@@ -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,7 @@ 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'
|
||||
|
||||
|
||||
@@ -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,7 +29,7 @@ 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 ttc='tofu console'
|
||||
alias ttd='tofu destroy'
|
||||
alias ttd!='tofu destroy -auto-approve'
|
||||
|
||||
@@ -16,13 +16,15 @@ plugins=(... terraform)
|
||||
## Aliases
|
||||
|
||||
| Alias | Command |
|
||||
| ------- | -------------------------------------- |
|
||||
|---------|----------------------------------------|
|
||||
| `tf` | `terraform` |
|
||||
| `tfa` | `terraform apply` |
|
||||
| `tfaa` | `terraform apply -auto-approve` |
|
||||
| `tfa!` | `terraform apply -auto-approve` |
|
||||
| `tfap` | `terraform apply -parallelism=1` |
|
||||
| `tfc` | `terraform console` |
|
||||
| `tfd` | `terraform destroy` |
|
||||
| `tfd!` | `terraform destroy -auto-approve` |
|
||||
| `tfdp` | `terraform destroy -parallelism=1` |
|
||||
| `tff` | `terraform fmt` |
|
||||
| `tffr` | `terraform fmt -recursive` |
|
||||
| `tfi` | `terraform init` |
|
||||
|
||||
@@ -17,10 +17,12 @@ function tf_version_prompt_info() {
|
||||
|
||||
alias tf='terraform'
|
||||
alias tfa='terraform apply'
|
||||
alias tfaa='terraform apply -auto-approve'
|
||||
alias tfa!='terraform apply -auto-approve'
|
||||
alias tfap='terraform apply -parallelism=1'
|
||||
alias tfc='terraform console'
|
||||
alias tfd='terraform destroy'
|
||||
alias 'tfd!'='terraform destroy -auto-approve'
|
||||
alias tfd!='terraform destroy -auto-approve'
|
||||
alias tfdp='terraform destroy -parallelism=1'
|
||||
alias tff='terraform fmt'
|
||||
alias tffr='terraform fmt -recursive'
|
||||
alias tfi='terraform init'
|
||||
|
||||
@@ -23,6 +23,7 @@ The plugin also supports the following:
|
||||
| `tkss` | tmux kill-session -t | Terminate named running tmux session |
|
||||
| `tksv` | tmux kill-server | Terminate all running tmux sessions |
|
||||
| `tl` | tmux list-sessions | Displays a list of running tmux sessions |
|
||||
| `to` | tmux new-session -A -s | Create or attach to a named tmux session |
|
||||
| `tmux` | `_zsh_tmux_plugin_run` | Start a new tmux session |
|
||||
| `tmuxconf` | `$EDITOR $ZSH_TMUX_CONFIG` | Open .tmux.conf file with an editor |
|
||||
| `ts` | tmux new-session -s | Create a new named tmux session |
|
||||
|
||||
@@ -81,6 +81,7 @@ alias tmuxconf='$EDITOR $ZSH_TMUX_CONFIG'
|
||||
|
||||
_build_tmux_alias "ta" "attach" "-t"
|
||||
_build_tmux_alias "tad" "attach -d" "-t"
|
||||
_build_tmux_alias "to" "new-session -A" "-s"
|
||||
_build_tmux_alias "ts" "new-session" "-s"
|
||||
_build_tmux_alias "tkss" "kill-session" "-t"
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# uv plugin
|
||||
|
||||
This plugin automatically installs [uv](https://github.com/astral-sh/uv)'s completions for you, and keeps them up to date. It also adds convenient aliases for common usage.
|
||||
This plugin automatically installs [uv](https://github.com/astral-sh/uv)'s completions for you,
|
||||
and keeps them up to date. It also adds convenient aliases for common usage.
|
||||
|
||||
To use it, add `uv` to the plugins array in your zshrc file:
|
||||
|
||||
@@ -11,19 +12,25 @@ plugins=(... uv)
|
||||
## Aliases
|
||||
|
||||
| Alias | Command | Description |
|
||||
|:----- |------------------------------------------------------------------------ |:-------------------------------------------------------------------- |
|
||||
| :---- | ---------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- |
|
||||
| uva | `uv add` | Add packages to the project |
|
||||
| uvexp | `uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet` | Export the lock file to `requirements.txt` |
|
||||
| uvi | `uv init` | Initialize a new project in current workspace and environment. |
|
||||
| uvinw | `uv init --no-workspace` | Initialize a new project in a new workspace and environment |
|
||||
| uvl | `uv lock` | Lock the dependencies |
|
||||
| uvlr | `uv lock --refresh` | Rebuild the lock file without upgrading dependencies |
|
||||
| uvlu | `uv lock --upgrade` | Lock the dependencies to the newest compatible versions |
|
||||
| uvp | `uv pip` | Manage pip packages |
|
||||
| uvpy | `uv python` | Manage Python installs |
|
||||
| uvpi | `uv python install` | Install a specific version of python |
|
||||
| uvpl | `uv python list` | Lists all python version installed |
|
||||
| uvpp | `uv python pin` | Pin the current project to use a specific Python version |
|
||||
| uvpu | `uv python uninstall` | Remove a specific version of python |
|
||||
| uvpy | `uv python` | Manage Python installs |
|
||||
| uvr | `uv run` | Run commands within the project's environment |
|
||||
| uvrm | `uv remove` | Remove packages from the project |
|
||||
| uvs | `uv sync` | Sync the environment with the lock file |
|
||||
| uvsr | `uv sync --refresh` | "Force" sync the environment with the lock file (ignore cache) |
|
||||
| uvsu | `uv sync --upgrade` | Sync the environment, allowing upgrades and ignoring the lock file |
|
||||
| uvtr | `uv tree` | Displays the full dependency tree for the current project environment |
|
||||
| uvup | `uv self update` | Update the UV tool to the latest version |
|
||||
| uvv | `uv venv` | Manage virtual environments |
|
||||
|
||||
@@ -7,10 +7,15 @@ alias uv="noglob uv"
|
||||
|
||||
alias uva='uv add'
|
||||
alias uvexp='uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet'
|
||||
alias uvi='uv init'
|
||||
alias uvinw='uv init --no-workspace'
|
||||
alias uvl='uv lock'
|
||||
alias uvlr='uv lock --refresh'
|
||||
alias uvlu='uv lock --upgrade'
|
||||
alias uvp='uv pip'
|
||||
alias uvpi='uv python install'
|
||||
alias uvpl='uv python list'
|
||||
alias uvpu='uv python uninstall'
|
||||
alias uvpy='uv python'
|
||||
alias uvpp='uv python pin'
|
||||
alias uvr='uv run'
|
||||
@@ -18,6 +23,7 @@ alias uvrm='uv remove'
|
||||
alias uvs='uv sync'
|
||||
alias uvsr='uv sync --refresh'
|
||||
alias uvsu='uv sync --upgrade'
|
||||
alias uvtr='uv tree'
|
||||
alias uvup='uv self update'
|
||||
alias uvv='uv venv'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user