mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-01-06 15:39:51 +00:00
Compare commits
50 Commits
90a22b61e6
...
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 | ||
|
|
ddec79ad43 | ||
|
|
0ebeae78d0 | ||
|
|
3b66f643e4 | ||
|
|
953f526dea | ||
|
|
1b4497fc8f | ||
|
|
a98a9f7122 | ||
|
|
5f7f419759 | ||
|
|
e9fc134236 | ||
|
|
977c4f93a6 | ||
|
|
ee30bc535a | ||
|
|
ca5c467db1 | ||
|
|
a449c0247d | ||
|
|
343c5a83cb | ||
|
|
beadd56dd7 | ||
|
|
0116e7a5af | ||
|
|
441299ca77 | ||
|
|
fc2d0f8848 | ||
|
|
b04e01d418 | ||
|
|
15bcada010 | ||
|
|
b52dd1a425 | ||
|
|
8a4d6fc0a2 | ||
|
|
73d79fe137 | ||
|
|
8c5a60644a | ||
|
|
9d93dfaa60 | ||
|
|
5a282b9b30 | ||
|
|
dca16e8f9a | ||
|
|
a0576348d0 | ||
|
|
18d0a63df8 | ||
|
|
e70086a76a |
10
.github/dependencies.yml
vendored
10
.github/dependencies.yml
vendored
@@ -12,7 +12,7 @@ dependencies:
|
|||||||
plugins/gradle:
|
plugins/gradle:
|
||||||
repo: gradle/gradle-completion
|
repo: gradle/gradle-completion
|
||||||
branch: master
|
branch: master
|
||||||
version: 25c3d368527e7679e30a63f53cb20540cb285a24
|
version: a9d7c822e42cc6a5b028b59e46cffcc8e7bc1134
|
||||||
precopy: |
|
precopy: |
|
||||||
set -e
|
set -e
|
||||||
find . ! -name _gradle ! -name LICENSE -delete
|
find . ! -name _gradle ! -name LICENSE -delete
|
||||||
@@ -27,6 +27,14 @@ dependencies:
|
|||||||
postcopy: |
|
postcopy: |
|
||||||
set -e
|
set -e
|
||||||
test -e dependencies/OMZ-README.md && cat dependencies/OMZ-README.md >> README.md
|
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:
|
plugins/wd:
|
||||||
repo: mfaerevaag/wd
|
repo: mfaerevaag/wd
|
||||||
branch: master
|
branch: master
|
||||||
|
|||||||
13
.github/workflows/dependencies.yml
vendored
13
.github/workflows/dependencies.yml
vendored
@@ -4,32 +4,31 @@ on:
|
|||||||
schedule:
|
schedule:
|
||||||
- cron: "0 6 * * 0"
|
- cron: "0 6 * * 0"
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check:
|
check:
|
||||||
name: Check for updates
|
name: Check for updates
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||||
|
permissions:
|
||||||
|
contents: write # this is needed to push commits and branches
|
||||||
steps:
|
steps:
|
||||||
- name: Harden the runner (Audit all outbound calls)
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1
|
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Authenticate as @ohmyzsh
|
- name: Authenticate as @ohmyzsh
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4
|
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
|
||||||
with:
|
with:
|
||||||
app-id: ${{ secrets.OHMYZSH_APP_ID }}
|
app-id: ${{ secrets.OHMYZSH_APP_ID }}
|
||||||
private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }}
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
|
||||||
with:
|
with:
|
||||||
python-version: "3.12"
|
python-version: "3.12"
|
||||||
cache: "pip"
|
cache: "pip"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
certifi==2025.10.5
|
certifi==2026.1.4
|
||||||
charset-normalizer==3.4.4
|
charset-normalizer==3.4.4
|
||||||
idna==3.11
|
idna==3.11
|
||||||
PyYAML==6.0.3
|
PyYAML==6.0.3
|
||||||
requests==2.32.5
|
requests==2.32.5
|
||||||
semver==3.0.4
|
semver==3.0.4
|
||||||
urllib3==2.5.0
|
urllib3==2.6.2
|
||||||
|
|||||||
91
.github/workflows/dependencies/updater.py
vendored
91
.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"
|
DEPS_YAML_FILE = ".github/dependencies.yml"
|
||||||
# Dry run flag
|
# Dry run flag
|
||||||
DRY_RUN = os.environ.get("DRY_RUN", "0") == "1"
|
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
|
# utils for tag comparison
|
||||||
BASEVERSION = re.compile(
|
BASEVERSION = re.compile(
|
||||||
@@ -219,32 +226,33 @@ class Dependency:
|
|||||||
# Create new branch
|
# Create new branch
|
||||||
branch = Git.checkout_or_create_branch(branch_name)
|
branch = Git.checkout_or_create_branch(branch_name)
|
||||||
|
|
||||||
# Update dependencies.yml file
|
|
||||||
self.__update_yaml(
|
|
||||||
f"tag:{new_version}" if is_tag else status["version"]
|
|
||||||
)
|
|
||||||
|
|
||||||
# Update dependency files
|
# Update dependency files
|
||||||
self.__apply_upstream_changes()
|
self.__apply_upstream_changes()
|
||||||
|
|
||||||
# Add all changes and commit
|
if not Git.repo_is_clean():
|
||||||
has_new_commit = Git.add_and_commit(self.name, new_version)
|
# Update dependencies.yml file
|
||||||
|
self.__update_yaml(
|
||||||
if has_new_commit:
|
f"tag:{new_version}" if is_tag else status["version"]
|
||||||
# Push changes to remote
|
|
||||||
Git.push(branch)
|
|
||||||
|
|
||||||
# Create GitHub PR
|
|
||||||
GitHub.create_pr(
|
|
||||||
branch,
|
|
||||||
f"feat({self.name}): update to version {new_version}",
|
|
||||||
f"""## Description
|
|
||||||
|
|
||||||
Update for **{self.desc}**: update to version [{new_version}]({status['head_url']}).
|
|
||||||
Check out the [list of changes]({status['compare_url']}).
|
|
||||||
""",
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Add all changes and commit
|
||||||
|
has_new_commit = Git.add_and_commit(self.name, new_version)
|
||||||
|
|
||||||
|
if has_new_commit:
|
||||||
|
# Push changes to remote
|
||||||
|
Git.push(branch)
|
||||||
|
|
||||||
|
# Create GitHub PR
|
||||||
|
GitHub.create_pr(
|
||||||
|
branch,
|
||||||
|
f"chore({self.name}): update to version {new_version}",
|
||||||
|
f"""## Description
|
||||||
|
|
||||||
|
Update for **{self.desc}**: update to version [{new_version}]({status["head_url"]}).
|
||||||
|
Check out the [list of changes]({status["compare_url"]}).
|
||||||
|
""",
|
||||||
|
)
|
||||||
|
|
||||||
# Clean up repository
|
# Clean up repository
|
||||||
Git.clean_repo()
|
Git.clean_repo()
|
||||||
except (CommandRunner.Exception, shutil.Error) as e:
|
except (CommandRunner.Exception, shutil.Error) as e:
|
||||||
@@ -275,8 +283,8 @@ Check out the [list of changes]({status['compare_url']}).
|
|||||||
|
|
||||||
There is a new version of `{self.name}` {self.kind} available.
|
There is a new version of `{self.name}` {self.kind} available.
|
||||||
|
|
||||||
New version: [{new_version}]({status['head_url']})
|
New version: [{new_version}]({status["head_url"]})
|
||||||
Check out the [list of changes]({status['compare_url']}).
|
Check out the [list of changes]({status["compare_url"]}).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
print("Creating GitHub issue", file=sys.stderr)
|
print("Creating GitHub issue", file=sys.stderr)
|
||||||
@@ -377,21 +385,28 @@ class Git:
|
|||||||
)
|
)
|
||||||
return branch_name
|
return branch_name
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def repo_is_clean() -> bool:
|
||||||
|
"""
|
||||||
|
Returns `True` if the repo is clean.
|
||||||
|
Returns `False` if the repo is dirty.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
CommandRunner.run_or_fail(
|
||||||
|
["git", "diff", "--exit-code"], stage="CheckRepoClean"
|
||||||
|
)
|
||||||
|
return True
|
||||||
|
except CommandRunner.Exception:
|
||||||
|
return False
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def add_and_commit(scope: str, version: str) -> bool:
|
def add_and_commit(scope: str, version: str) -> bool:
|
||||||
"""
|
"""
|
||||||
Returns `True` if there were changes and were indeed commited.
|
Returns `True` if there were changes and were indeed commited.
|
||||||
Returns `False` if the repo was clean and no changes were commited.
|
Returns `False` if the repo was clean and no changes were commited.
|
||||||
"""
|
"""
|
||||||
# check if repo is clean (clean => no error, no commit)
|
if Git.repo_is_clean():
|
||||||
try:
|
|
||||||
CommandRunner.run_or_fail(
|
|
||||||
["git", "diff", "--exit-code"], stage="CheckRepoClean"
|
|
||||||
)
|
|
||||||
return False
|
return False
|
||||||
except CommandRunner.Exception:
|
|
||||||
# if it's other kind of error just throw!
|
|
||||||
pass
|
|
||||||
|
|
||||||
user_name = os.environ.get("GIT_APP_NAME")
|
user_name = os.environ.get("GIT_APP_NAME")
|
||||||
user_email = os.environ.get("GIT_APP_EMAIL")
|
user_email = os.environ.get("GIT_APP_EMAIL")
|
||||||
@@ -415,7 +430,7 @@ class Git:
|
|||||||
f"user.email={user_email}",
|
f"user.email={user_email}",
|
||||||
"commit",
|
"commit",
|
||||||
"-m",
|
"-m",
|
||||||
f"feat({scope}): update to {version}",
|
f"chore({scope}): update to {version}",
|
||||||
],
|
],
|
||||||
stage="CreateCommit",
|
stage="CreateCommit",
|
||||||
env=clean_env,
|
env=clean_env,
|
||||||
@@ -445,7 +460,7 @@ class GitHub:
|
|||||||
url = f"https://api.github.com/repos/{repo}/git/refs/tags"
|
url = f"https://api.github.com/repos/{repo}/git/refs/tags"
|
||||||
|
|
||||||
# Send a GET request to the GitHub API
|
# Send a GET request to the GitHub API
|
||||||
response = requests.get(url)
|
response = requests.get(url, headers=HEADERS)
|
||||||
current_version = coerce(current_tag)
|
current_version = coerce(current_tag)
|
||||||
if current_version is None:
|
if current_version is None:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
@@ -505,7 +520,7 @@ class GitHub:
|
|||||||
url = f"https://api.github.com/repos/{repo}/compare/{version}...{branch}"
|
url = f"https://api.github.com/repos/{repo}/compare/{version}...{branch}"
|
||||||
|
|
||||||
# Send a GET request to the GitHub API
|
# Send a GET request to the GitHub API
|
||||||
response = requests.get(url)
|
response = requests.get(url, headers=HEADERS)
|
||||||
|
|
||||||
# If the request was successful
|
# If the request was successful
|
||||||
if response.status_code == 200:
|
if response.status_code == 200:
|
||||||
@@ -589,7 +604,13 @@ def main():
|
|||||||
DependencyStore.set(data)
|
DependencyStore.set(data)
|
||||||
|
|
||||||
dependencies = data["dependencies"]
|
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 = Dependency(path, dependencies[path])
|
||||||
dependency.update_or_notify()
|
dependency.update_or_notify()
|
||||||
|
|
||||||
|
|||||||
8
.github/workflows/installer.yml
vendored
8
.github/workflows/installer.yml
vendored
@@ -26,12 +26,12 @@ jobs:
|
|||||||
- macos-latest
|
- macos-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Harden the runner (Audit all outbound calls)
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1
|
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Set up git repository
|
- name: Set up git repository
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
- name: Install zsh
|
- name: Install zsh
|
||||||
if: runner.os == 'Linux'
|
if: runner.os == 'Linux'
|
||||||
run: sudo apt-get update; sudo apt-get install zsh
|
run: sudo apt-get update; sudo apt-get install zsh
|
||||||
@@ -47,12 +47,12 @@ jobs:
|
|||||||
- test
|
- test
|
||||||
steps:
|
steps:
|
||||||
- name: Harden the runner (Audit all outbound calls)
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1
|
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
- name: Install Vercel CLI
|
- name: Install Vercel CLI
|
||||||
run: npm install -g vercel
|
run: npm install -g vercel
|
||||||
- name: Setup project and deploy
|
- name: Setup project and deploy
|
||||||
|
|||||||
4
.github/workflows/main.yml
vendored
4
.github/workflows/main.yml
vendored
@@ -24,12 +24,12 @@ jobs:
|
|||||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||||
steps:
|
steps:
|
||||||
- name: Harden the runner (Audit all outbound calls)
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1
|
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Set up git repository
|
- name: Set up git repository
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
- name: Install zsh
|
- name: Install zsh
|
||||||
run: sudo apt-get update; sudo apt-get install zsh
|
run: sudo apt-get update; sudo apt-get install zsh
|
||||||
- name: Check syntax
|
- name: Check syntax
|
||||||
|
|||||||
4
.github/workflows/project.yml
vendored
4
.github/workflows/project.yml
vendored
@@ -17,12 +17,12 @@ jobs:
|
|||||||
if: github.repository == 'ohmyzsh/ohmyzsh'
|
if: github.repository == 'ohmyzsh/ohmyzsh'
|
||||||
steps:
|
steps:
|
||||||
- name: Harden the runner (Audit all outbound calls)
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1
|
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
- name: Authenticate as @ohmyzsh
|
- name: Authenticate as @ohmyzsh
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4
|
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
|
||||||
with:
|
with:
|
||||||
app-id: ${{ secrets.OHMYZSH_APP_ID }}
|
app-id: ${{ secrets.OHMYZSH_APP_ID }}
|
||||||
private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }}
|
||||||
|
|||||||
8
.github/workflows/scorecard.yml
vendored
8
.github/workflows/scorecard.yml
vendored
@@ -36,12 +36,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden the runner (Audit all outbound calls)
|
- name: Harden the runner (Audit all outbound calls)
|
||||||
uses: step-security/harden-runner@f4a75cfd619ee5ce8d5b864b0d183aff3c69b55a # v2.13.1
|
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: "Checkout code"
|
- name: "Checkout code"
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
@@ -53,13 +53,13 @@ jobs:
|
|||||||
publish_results: true
|
publish_results: true
|
||||||
|
|
||||||
- name: "Upload artifact"
|
- name: "Upload artifact"
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
||||||
with:
|
with:
|
||||||
name: SARIF file
|
name: SARIF file
|
||||||
path: results.sarif
|
path: results.sarif
|
||||||
retention-days: 5
|
retention-days: 5
|
||||||
|
|
||||||
- name: "Upload to code-scanning"
|
- name: "Upload to code-scanning"
|
||||||
uses: github/codeql-action/upload-sarif@0499de31b99561a6d14a36a5f662c2a54f91beee # v4.31.2
|
uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
|
||||||
with:
|
with:
|
||||||
sarif_file: results.sarif
|
sarif_file: results.sarif
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ To learn more, visit [ohmyz.sh](https://ohmyz.sh), follow [@ohmyzsh](https://x.c
|
|||||||
Twitter), and join us on [Discord](https://discord.gg/ohmyzsh).
|
Twitter), and join us on [Discord](https://discord.gg/ohmyzsh).
|
||||||
|
|
||||||
[](https://github.com/ohmyzsh/ohmyzsh/actions?query=workflow%3ACI)
|
[](https://github.com/ohmyzsh/ohmyzsh/actions?query=workflow%3ACI)
|
||||||
|
[](https://www.bestpractices.dev/projects/10713)
|
||||||
[](https://twitter.com/intent/follow?screen_name=ohmyzsh)
|
[](https://twitter.com/intent/follow?screen_name=ohmyzsh)
|
||||||
[](https://mstdn.social/@ohmyzsh)
|
[](https://mstdn.social/@ohmyzsh)
|
||||||
[](https://discord.gg/ohmyzsh)
|
[](https://discord.gg/ohmyzsh)
|
||||||
@@ -547,7 +548,7 @@ We're on social media:
|
|||||||
## Merchandise
|
## Merchandise
|
||||||
|
|
||||||
We have
|
We have
|
||||||
[stickers, shirts, and coffee mugs available](https://shop.planetargon.com/collections/oh-my-zsh?utm_source=github)
|
[stickers, shirts, and coffee mugs available](https://commitgoods.com/collections/oh-my-zsh?utm_source=github)
|
||||||
for you to show off your love of Oh My Zsh. Again, you will become the talk of the town!
|
for you to show off your love of Oh My Zsh. Again, you will become the talk of the town!
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|||||||
11
lib/cli.zsh
11
lib/cli.zsh
@@ -28,6 +28,7 @@ function _omz {
|
|||||||
'plugin:Manage plugins'
|
'plugin:Manage plugins'
|
||||||
'pr:Manage Oh My Zsh Pull Requests'
|
'pr:Manage Oh My Zsh Pull Requests'
|
||||||
'reload:Reload the current zsh session'
|
'reload:Reload the current zsh session'
|
||||||
|
'shop:Open the Oh My Zsh shop'
|
||||||
'theme:Manage themes'
|
'theme:Manage themes'
|
||||||
'update:Update Oh My Zsh'
|
'update:Update Oh My Zsh'
|
||||||
'version:Show the version'
|
'version:Show the version'
|
||||||
@@ -173,6 +174,7 @@ Available commands:
|
|||||||
plugin <command> Manage plugins
|
plugin <command> Manage plugins
|
||||||
pr <command> Manage Oh My Zsh Pull Requests
|
pr <command> Manage Oh My Zsh Pull Requests
|
||||||
reload Reload the current zsh session
|
reload Reload the current zsh session
|
||||||
|
shop Open the Oh My Zsh shop
|
||||||
theme <command> Manage themes
|
theme <command> Manage themes
|
||||||
update Update Oh My Zsh
|
update Update Oh My Zsh
|
||||||
version Show the version
|
version Show the version
|
||||||
@@ -721,6 +723,15 @@ function _omz::pr::test {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _omz::shop {
|
||||||
|
local shop_url="https://commitgoods.com/collections/oh-my-zsh"
|
||||||
|
|
||||||
|
_omz::log info "Opening Oh My Zsh shop in your browser..."
|
||||||
|
_omz::log info "$shop_url"
|
||||||
|
|
||||||
|
open_command "$shop_url"
|
||||||
|
}
|
||||||
|
|
||||||
function _omz::reload {
|
function _omz::reload {
|
||||||
# Delete current completion cache
|
# Delete current completion cache
|
||||||
command rm -f $_comp_dumpfile $ZSH_COMPDUMP
|
command rm -f $_comp_dumpfile $ZSH_COMPDUMP
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ function detect-clipboard() {
|
|||||||
function clipcopy() { cat "${1:-/dev/stdin}" | termux-clipboard-set; }
|
function clipcopy() { cat "${1:-/dev/stdin}" | termux-clipboard-set; }
|
||||||
function clippaste() { termux-clipboard-get; }
|
function clippaste() { termux-clipboard-get; }
|
||||||
elif [ -n "${TMUX:-}" ] && (( ${+commands[tmux]} )); then
|
elif [ -n "${TMUX:-}" ] && (( ${+commands[tmux]} )); then
|
||||||
function clipcopy() { tmux load-buffer "${1:--}"; }
|
function clipcopy() { tmux load-buffer -w "${1:--}"; }
|
||||||
function clippaste() { tmux save-buffer -; }
|
function clippaste() { tmux save-buffer -; }
|
||||||
else
|
else
|
||||||
function _retry_clipboard_detection_or_fail() {
|
function _retry_clipboard_detection_or_fail() {
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ function _omz_git_prompt_status() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# For each status prefix, do a regex comparison
|
# 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_constant="${prefix_constant_map[$status_prefix]}"
|
||||||
local status_regex=$'(^|\n)'"$status_prefix"
|
local status_regex=$'(^|\n)'"$status_prefix"
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
This plugin provides completion for [docker-compose](https://docs.docker.com/compose/) as well as some
|
This plugin provides completion for [docker-compose](https://docs.docker.com/compose/) as well as some
|
||||||
aliases for frequent docker-compose commands.
|
aliases for frequent docker-compose commands.
|
||||||
|
This plugin chooses automatically between the legacy `docker-compose` command and the modern
|
||||||
|
`docker compose` subcommand, preferring `docker-compose` when both are available.
|
||||||
|
|
||||||
To use it, add docker-compose to the plugins array of your zshrc file:
|
To use it, add docker-compose to the plugins array of your zshrc file:
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# .NET Core CLI plugin
|
# .NET CLI plugin
|
||||||
|
|
||||||
This plugin provides completion and useful aliases for [.NET Core CLI](https://dotnet.microsoft.com/).
|
This plugin provides completion and useful aliases for [.NET CLI](https://dotnet.microsoft.com/).
|
||||||
|
|
||||||
To use it, add `dotnet` to the plugins array in your zshrc file.
|
To use it, add `dotnet` to the plugins array in your zshrc file.
|
||||||
|
|
||||||
|
|||||||
@@ -77,7 +77,15 @@ EOF
|
|||||||
(*.lzma) unlzma "$full_path" ;;
|
(*.lzma) unlzma "$full_path" ;;
|
||||||
(*.z) uncompress "$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" ;;
|
(*.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)
|
(*.rpm)
|
||||||
rpm2cpio "$full_path" | cpio --quiet -id ;;
|
rpm2cpio "$full_path" | cpio --quiet -id ;;
|
||||||
(*.7z | *.7z.[0-9]* | *.pk7) 7za x "$full_path" ;;
|
(*.7z | *.7z.[0-9]* | *.pk7) 7za x "$full_path" ;;
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
# Fig plugin
|
|
||||||
|
|
||||||
This plugin sets up completion for [Fig](https://fig.io/).
|
|
||||||
|
|
||||||
To use it, add `fig` to the plugins array in your zshrc file:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
plugins=(... fig)
|
|
||||||
```
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
if ! (( $+commands[fig] )); then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If the completion file doesn't exist yet, we need to autoload it and
|
|
||||||
# bind it to `fig`. Otherwise, compinit will have already done that
|
|
||||||
if [[ ! -f "$ZSH_CACHE_DIR/completions/_fig" ]]; then
|
|
||||||
autoload -Uz _fig
|
|
||||||
typeset -g -A _comps
|
|
||||||
_comps[fig]=_fig
|
|
||||||
fi
|
|
||||||
|
|
||||||
fig completion zsh >| "$ZSH_CACHE_DIR/completions/_fig" &|
|
|
||||||
@@ -234,40 +234,26 @@ branch exists. We do this via the function `git_main_branch`.
|
|||||||
These are aliases that have been removed, renamed, or otherwise modified in a way that may, or may not,
|
These are aliases that have been removed, renamed, or otherwise modified in a way that may, or may not,
|
||||||
receive further support.
|
receive further support.
|
||||||
|
|
||||||
| Alias | Command | Modification |
|
| Alias | Command | Modification |
|
||||||
| :------- | :-------------------------------------------------------- | :-------------------------------------------------------- |
|
| :------- | :-------------------------------------------------------- | :-----------------------------------------------------|
|
||||||
| `gap` | `git add --patch` | New alias: `gapa`. |
|
| `gap` | `git add --patch` | New alias: `gapa` |
|
||||||
| `gcl` | `git config --list` | New alias: `gcf`. |
|
| `gcl` | `git config --list` | New alias: `gcf` |
|
||||||
| `gdc` | `git diff --cached` | New alias: `gdca`. |
|
| `gdt` | `git difftool` | No replacement |
|
||||||
| `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` |
|
|
||||||
|
|
||||||
## Functions
|
## Functions
|
||||||
|
|
||||||
### Current
|
### Current
|
||||||
|
|
||||||
| Command | Description |
|
| Command | Description |
|
||||||
| :----------------------- | :-------------------------------------------------------------------------------------------------------------- |
|
| :----------------------- | :------------------------------------------------------------------------------------------------------------- |
|
||||||
| `current_branch` | Returns the name of the current branch. |
|
| `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_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_current_user_name` | Returns the `user.name` config value (Lives in `lib/git.zsh`) |
|
||||||
| `git_develop_branch` | Returns the name of the “development” branch: `dev`, `devel`, `development` if they exist, `develop` otherwise. |
|
| `git_develop_branch` | Returns the name of the “development” branch: `dev`, `devel`, `development` if they exist, `develop` otherwise |
|
||||||
| `git_main_branch` | Returns the name of the main branch: `main` if it exists, `master` otherwise. |
|
| `git_main_branch` | Returns the name of the main branch: `main` if it exists, `master` otherwise |
|
||||||
| `grename <old> <new>` | Renames branch `<old>` to `<new>`, including on the origin remote. |
|
| `grename <old> <new>` | Renames branch `<old>` to `<new>`, including on the origin remote |
|
||||||
| `gbda` | Deletes all merged branches |
|
| `gbda` | Deletes all merged branches |
|
||||||
| `gbds` | Deletes all squash-merged branches (**Note: performance degrades with number of branches**) |
|
| `gbds` | Deletes all squash-merged branches (**Note: performance degrades with number of branches**) |
|
||||||
|
|
||||||
### Work in Progress (WIP)
|
### Work in Progress (WIP)
|
||||||
|
|
||||||
@@ -287,4 +273,3 @@ Note that `gwip` and `gunwip` are aliases, but are also documented here to group
|
|||||||
|
|
||||||
| Command | Description | Reason |
|
| 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)
|
# (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
|
# Check for develop and similarly named branches
|
||||||
function git_develop_branch() {
|
function git_develop_branch() {
|
||||||
command git rev-parse --git-dir &>/dev/null || return
|
command git rev-parse --git-dir &>/dev/null || return
|
||||||
@@ -102,7 +94,7 @@ function work_in_progress() {
|
|||||||
alias grt='cd "$(git rev-parse --show-toplevel || echo .)"'
|
alias grt='cd "$(git rev-parse --show-toplevel || echo .)"'
|
||||||
|
|
||||||
function ggpnp() {
|
function ggpnp() {
|
||||||
if [[ "$#" == 0 ]]; then
|
if [[ $# == 0 ]]; then
|
||||||
ggl && ggp
|
ggl && ggp
|
||||||
else
|
else
|
||||||
ggl "${*}" && ggp "${*}"
|
ggl "${*}" && ggp "${*}"
|
||||||
@@ -281,7 +273,7 @@ alias gprav='git pull --rebase --autostash -v'
|
|||||||
|
|
||||||
function ggu() {
|
function ggu() {
|
||||||
local b
|
local b
|
||||||
[[ "$#" != 1 ]] && b="$(git_current_branch)"
|
[[ $# != 1 ]] && b="$(git_current_branch)"
|
||||||
git pull --rebase origin "${b:-$1}"
|
git pull --rebase origin "${b:-$1}"
|
||||||
}
|
}
|
||||||
compdef _git ggu=git-pull
|
compdef _git ggu=git-pull
|
||||||
@@ -293,11 +285,11 @@ alias gprumi='git pull --rebase=interactive upstream $(git_main_branch)'
|
|||||||
alias ggpull='git pull origin "$(git_current_branch)"'
|
alias ggpull='git pull origin "$(git_current_branch)"'
|
||||||
|
|
||||||
function ggl() {
|
function ggl() {
|
||||||
if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
|
if [[ $# != 0 ]] && [[ $# != 1 ]]; then
|
||||||
git pull origin "${*}"
|
git pull origin "${*}"
|
||||||
else
|
else
|
||||||
local b
|
local b
|
||||||
[[ "$#" == 0 ]] && b="$(git_current_branch)"
|
[[ $# == 0 ]] && b="$(git_current_branch)"
|
||||||
git pull origin "${b:-$1}"
|
git pull origin "${b:-$1}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -310,7 +302,7 @@ alias gpd='git push --dry-run'
|
|||||||
|
|
||||||
function ggf() {
|
function ggf() {
|
||||||
local b
|
local b
|
||||||
[[ "$#" != 1 ]] && b="$(git_current_branch)"
|
[[ $# != 1 ]] && b="$(git_current_branch)"
|
||||||
git push --force origin "${b:-$1}"
|
git push --force origin "${b:-$1}"
|
||||||
}
|
}
|
||||||
compdef _git ggf=git-push
|
compdef _git ggf=git-push
|
||||||
@@ -322,7 +314,7 @@ is-at-least 2.30 "$git_version" \
|
|||||||
|
|
||||||
function ggfl() {
|
function ggfl() {
|
||||||
local b
|
local b
|
||||||
[[ "$#" != 1 ]] && b="$(git_current_branch)"
|
[[ $# != 1 ]] && b="$(git_current_branch)"
|
||||||
git push --force-with-lease origin "${b:-$1}"
|
git push --force-with-lease origin "${b:-$1}"
|
||||||
}
|
}
|
||||||
compdef _git ggfl=git-push
|
compdef _git ggfl=git-push
|
||||||
@@ -337,11 +329,11 @@ alias gpod='git push origin --delete'
|
|||||||
alias ggpush='git push origin "$(git_current_branch)"'
|
alias ggpush='git push origin "$(git_current_branch)"'
|
||||||
|
|
||||||
function ggp() {
|
function ggp() {
|
||||||
if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
|
if [[ $# != 0 ]] && [[ $# != 1 ]]; then
|
||||||
git push origin "${*}"
|
git push origin "${*}"
|
||||||
else
|
else
|
||||||
local b
|
local b
|
||||||
[[ "$#" == 0 ]] && b="$(git_current_branch)"
|
[[ $# == 0 ]] && b="$(git_current_branch)"
|
||||||
git push origin "${b:-$1}"
|
git push origin "${b:-$1}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -427,19 +419,13 @@ alias gke='\gitk --all $(git log --walk-reflogs --pretty=%h) &!'
|
|||||||
|
|
||||||
unset git_version
|
unset git_version
|
||||||
|
|
||||||
# Logic for adding warnings on deprecated aliases
|
# Logic for adding warnings on deprecated aliases or functions
|
||||||
local old_alias new_alias
|
local old_name new_name
|
||||||
for old_alias new_alias (
|
for old_name new_name (
|
||||||
# TODO(2023-10-19): remove deprecated `git pull --rebase` aliases
|
current_branch git_current_branch
|
||||||
gup gpr
|
|
||||||
gupv gprv
|
|
||||||
gupa gpra
|
|
||||||
gupav gprav
|
|
||||||
gupom gprom
|
|
||||||
gupomi gpromi
|
|
||||||
); do
|
); do
|
||||||
aliases[$old_alias]="
|
aliases[$old_name]="
|
||||||
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\"
|
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_alias"
|
$new_name"
|
||||||
done
|
done
|
||||||
unset old_alias new_alias
|
unset old_name new_name
|
||||||
|
|||||||
@@ -12,6 +12,16 @@ plugins=(... jj)
|
|||||||
|
|
||||||
| Alias | Command |
|
| Alias | Command |
|
||||||
| ------ | ----------------------------- |
|
| ------ | ----------------------------- |
|
||||||
|
| jjb | `jj bookmark` |
|
||||||
|
| jjbc | `jj bookmark create` |
|
||||||
|
| jjbd | `jj bookmark delete` |
|
||||||
|
| jjbf | `jj bookmark forget` |
|
||||||
|
| jjbl | `jj bookmark list` |
|
||||||
|
| jjbm | `jj bookmark move` |
|
||||||
|
| jjbr | `jj bookmark rename` |
|
||||||
|
| jjbs | `jj bookmark set` |
|
||||||
|
| jjbt | `jj bookmark track` |
|
||||||
|
| jjbu | `jj bookmark untrack` |
|
||||||
| jjc | `jj commit` |
|
| jjc | `jj commit` |
|
||||||
| jjcmsg | `jj commit --message` |
|
| jjcmsg | `jj commit --message` |
|
||||||
| jjd | `jj diff` |
|
| jjd | `jj diff` |
|
||||||
@@ -22,14 +32,20 @@ plugins=(... jj)
|
|||||||
| jjgf | `jj git fetch` |
|
| jjgf | `jj git fetch` |
|
||||||
| jjgfa | `jj git fetch --all-remotes` |
|
| jjgfa | `jj git fetch --all-remotes` |
|
||||||
| jjgp | `jj git push` |
|
| jjgp | `jj git push` |
|
||||||
|
| jjgpa | `jj git push --all` |
|
||||||
|
| jjgpd | `jj git push --deleted` |
|
||||||
|
| jjgpt | `jj git push --tracked` |
|
||||||
| jjl | `jj log` |
|
| jjl | `jj log` |
|
||||||
| jjla | `jj log -r "all()"` |
|
| jjla | `jj log -r "all()"` |
|
||||||
| jjn | `jj new` |
|
| jjn | `jj new` |
|
||||||
|
| jjnt | `jj new "trunk()"` |
|
||||||
| jjrb | `jj rebase` |
|
| jjrb | `jj rebase` |
|
||||||
|
| jjrbm | `jj rebase -d "trunk()"` |
|
||||||
| jjrs | `jj restore` |
|
| jjrs | `jj restore` |
|
||||||
| jjrt | `cd "$(jj root \|\| echo .)"` |
|
| jjrt | `cd "$(jj root \|\| echo .)"` |
|
||||||
| jjsp | `jj split` |
|
| jjsp | `jj split` |
|
||||||
| jjsq | `jj squash` |
|
| jjsq | `jj squash` |
|
||||||
|
| jjst | `jj status` |
|
||||||
|
|
||||||
## Prompt usage
|
## Prompt usage
|
||||||
|
|
||||||
@@ -88,3 +104,4 @@ that.
|
|||||||
## Contributors
|
## Contributors
|
||||||
|
|
||||||
- [nasso](https://github.com/nasso) - Plugin Author
|
- [nasso](https://github.com/nasso) - Plugin Author
|
||||||
|
- [imp](https://github.com/imp) - Occasional Alias Contributor
|
||||||
|
|||||||
@@ -34,6 +34,16 @@ function jj_prompt_template() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Aliases (sorted alphabetically)
|
# Aliases (sorted alphabetically)
|
||||||
|
alias jjb='jj bookmark'
|
||||||
|
alias jjbc='jj bookmark create'
|
||||||
|
alias jjbd='jj bookmark delete'
|
||||||
|
alias jjbf='jj bookmark forget'
|
||||||
|
alias jjbl='jj bookmark list'
|
||||||
|
alias jjbm='jj bookmark move'
|
||||||
|
alias jjbr='jj bookmark rename'
|
||||||
|
alias jjbs='jj bookmark set'
|
||||||
|
alias jjbt='jj bookmark track'
|
||||||
|
alias jjbu='jj bookmark untrack'
|
||||||
alias jjc='jj commit'
|
alias jjc='jj commit'
|
||||||
alias jjcmsg='jj commit --message'
|
alias jjcmsg='jj commit --message'
|
||||||
alias jjd='jj diff'
|
alias jjd='jj diff'
|
||||||
@@ -44,11 +54,17 @@ alias jjgcl='jj git clone'
|
|||||||
alias jjgf='jj git fetch'
|
alias jjgf='jj git fetch'
|
||||||
alias jjgfa='jj git fetch --all-remotes'
|
alias jjgfa='jj git fetch --all-remotes'
|
||||||
alias jjgp='jj git push'
|
alias jjgp='jj git push'
|
||||||
|
alias jjgpa='jj git push --all'
|
||||||
|
alias jjgpd='jj git push --deleted'
|
||||||
|
alias jjgpt='jj git push --tracked'
|
||||||
alias jjl='jj log'
|
alias jjl='jj log'
|
||||||
alias jjla='jj log -r "all()"'
|
alias jjla='jj log -r "all()"'
|
||||||
alias jjn='jj new'
|
alias jjn='jj new'
|
||||||
|
alias jjnt='jj new "trunk()"'
|
||||||
alias jjrb='jj rebase'
|
alias jjrb='jj rebase'
|
||||||
|
alias jjrbm='jj rebase -d "trunk()"'
|
||||||
alias jjrs='jj restore'
|
alias jjrs='jj restore'
|
||||||
alias jjrt='cd "$(jj root || echo .)"'
|
alias jjrt='cd "$(jj root || echo .)"'
|
||||||
alias jjsp='jj split'
|
alias jjsp='jj split'
|
||||||
alias jjsq='jj squash'
|
alias jjsq='jj squash'
|
||||||
|
alias jjst='jj status'
|
||||||
|
|||||||
@@ -20,10 +20,11 @@ function {
|
|||||||
zstyle -a :omz:plugins:keychain options options
|
zstyle -a :omz:plugins:keychain options options
|
||||||
|
|
||||||
# Check keychain version to decide whether to use --agents
|
# Check keychain version to decide whether to use --agents
|
||||||
local version_string=$(keychain --version 2>&1 | head -n 2 | tail -n 1 | cut -d ' ' -f 4)
|
local version_string=$(keychain --version 2>&1)
|
||||||
# start keychain, only use --agents for versions below 2.9.0
|
# start keychain, only use --agents for versions below 2.9.0
|
||||||
autoload -Uz is-at-least
|
autoload -Uz is-at-least
|
||||||
if is-at-least 2.9 "$version_string"; then
|
if [[ "$version_string" =~ 'keychain ([0-9]+\.[0-9]+)' ]] && \
|
||||||
|
is-at-least 2.9 "$match[1]"; then
|
||||||
keychain ${^options:-} ${^identities} --host $SHORT_HOST
|
keychain ${^options:-} ${^identities} --host $SHORT_HOST
|
||||||
else
|
else
|
||||||
keychain ${^options:-} --agents ${agents:-gpg} ${^identities} --host $SHORT_HOST
|
keychain ${^options:-} --agents ${agents:-gpg} ${^identities} --host $SHORT_HOST
|
||||||
|
|||||||
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
|
# 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
|
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`).
|
configured on `kubectl` to your Bash/Zsh prompt strings (i.e. the `$PS1`).
|
||||||
|
|
||||||
Inspired by several tools used to simplify usage of `kubectl`.
|
Inspired by several tools used to simplify usage of `kubectl`.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
### MacOS
|
### Packages
|
||||||
|
|
||||||
|
### MacOS Brew Ports
|
||||||
|
|
||||||
Homebrew package manager:
|
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
|
1. Clone this repository
|
||||||
2. Source the kube-ps1.sh in your `~/.zshrc` or your `~/.bashrc`
|
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
|
#### Zsh
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
source /path/to/kube-ps1.sh
|
source /path/to/kube-ps1.sh
|
||||||
PROMPT='$(kube_ps1)'$PROMPT
|
PROMPT='$(kube_ps1)'$PROMPT # or RPROMPT='$(kube_ps1)'
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Bash
|
#### Bash
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
source /path/to/kube-ps1.sh
|
source /path/to/kube-ps1.sh
|
||||||
PS1='[\u@\h \W $(kube_ps1)]\$ '
|
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
|
## Requirements
|
||||||
|
|
||||||
The default prompt assumes you have the `kubectl` command line utility installed.
|
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
|
If using this with OpenShift, the `oc` tool needs installed. It can be obtained
|
||||||
from brew ports:
|
from brew ports:
|
||||||
|
|
||||||
```
|
```sh
|
||||||
brew install openshift-cli
|
brew install openshift-cli
|
||||||
```
|
```
|
||||||
|
|
||||||
or the source can be downloaded:
|
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
|
KUBE_PS1_BINARY=oc
|
||||||
```
|
```
|
||||||
|
|
||||||
If neither binary is available, the prompt will print the following:
|
If neither binary is available, the prompt will print the following:
|
||||||
|
|
||||||
```
|
```sh
|
||||||
(<symbol>|BINARY-N/A:N/A)
|
(<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:
|
The default prompt layout is:
|
||||||
|
|
||||||
```
|
```sh
|
||||||
(<symbol>|<context>:<namespace>)
|
(<symbol>|<context>:<namespace>)
|
||||||
```
|
```
|
||||||
|
|
||||||
If the current-context is not set, kube-ps1 will return the following:
|
If the current-context is not set, kube-ps1 will return the following:
|
||||||
|
|
||||||
```
|
```sh
|
||||||
(<symbol>|N/A:N/A)
|
(<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
|
You can enable it again in the current shell by running `kubeon`, and globally
|
||||||
with `kubeon -g`.
|
with `kubeon -g`.
|
||||||
|
|
||||||
```
|
```sh
|
||||||
kubeon : turn on kube-ps1 status for this shell. Takes precedence over
|
kubeon : turn on kube-ps1 status for this shell. Takes precedence over
|
||||||
global setting for current session
|
global setting for current session
|
||||||
kubeon -g : turn on kube-ps1 status globally
|
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
|
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
|
## Customization
|
||||||
|
|
||||||
The default settings can be overridden in `~/.bashrc` or `~/.zshrc` by setting
|
The default settings can be overridden in `~/.bashrc` or `~/.zshrc` by setting
|
||||||
the following environment variables:
|
the following variables:
|
||||||
|
|
||||||
| Variable | Default | Meaning |
|
| Variable | Default | Meaning |
|
||||||
| :------- | :-----: | ------- |
|
| :------- | :-----: | ------- |
|
||||||
| `KUBE_PS1_BINARY` | `kubectl` | Default Kubernetes binary |
|
| `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_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_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_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_CUSTOM` | `⎈` | Change the Default prompt symbol. Unicode `\u2388`. Options are `k8s`, `img`, `oc` |
|
||||||
| `KUBE_PS1_SYMBOL_USE_IMG` | `false` | ☸️ , Unicode `\u2638` as the prompt symbol |
|
| `KUBE_PS1_SYMBOL_COLOR` | `blue` | Change the Default symbol color. |
|
||||||
| `KUBE_PS1_SEPARATOR` | | | Separator between symbol and context name |
|
| `KUBE_PS1_SEPARATOR` | | | Separator between symbol and context name |
|
||||||
| `KUBE_PS1_DIVIDER` | `:` | Separator between context and namespace |
|
| `KUBE_PS1_DIVIDER` | `:` | Separator between context and namespace |
|
||||||
| `KUBE_PS1_SUFFIX` | `)` | Prompt closing character |
|
| `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_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_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 |
|
| `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 |
|
||||||
For terminals that do not support UTF-8, the symbol will be replaced with the
|
|
||||||
string `k8s`.
|
|
||||||
|
|
||||||
To disable a feature, set it to an empty string:
|
To disable a feature, set it to an empty string:
|
||||||
|
|
||||||
```
|
```sh
|
||||||
KUBE_PS1_SEPARATOR=''
|
KUBE_PS1_SEPARATOR=''
|
||||||
```
|
```
|
||||||
|
|
||||||
## Colors
|
## Colors
|
||||||
|
|
||||||
The default colors are set with the following environment variables:
|
The default colors are set with the following variables:
|
||||||
|
|
||||||
| Variable | Default | Meaning |
|
| Variable | Default | Meaning |
|
||||||
| :------- | :-----: | ------- |
|
| :------- | :-----: | ------- |
|
||||||
@@ -166,13 +230,13 @@ namespace.
|
|||||||
Set the variable to an empty string if you do not want color for each
|
Set the variable to an empty string if you do not want color for each
|
||||||
prompt section:
|
prompt section:
|
||||||
|
|
||||||
```
|
```sh
|
||||||
KUBE_PS1_CTX_COLOR=''
|
KUBE_PS1_CTX_COLOR=''
|
||||||
```
|
```
|
||||||
|
|
||||||
Names are usable for the following colors:
|
Names are usable for the following colors:
|
||||||
|
|
||||||
```
|
```text
|
||||||
black, red, green, yellow, blue, magenta, cyan
|
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.
|
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
|
### Bug Reports and shell configuration
|
||||||
|
|
||||||
Due to the vast ways of customizing the shell, please try the prompt with a
|
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:
|
This can be done as follows for each shell before loading kube-ps1:
|
||||||
|
|
||||||
Bash:
|
Bash:
|
||||||
```bash
|
|
||||||
|
```sh
|
||||||
bash --norc
|
bash --norc
|
||||||
```
|
```
|
||||||
|
|
||||||
Zsh:
|
Zsh:
|
||||||
```bash
|
|
||||||
|
```sh
|
||||||
zsh -f
|
zsh -f
|
||||||
or
|
or
|
||||||
zsh --no-rcs
|
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)
|
### Contributors
|
||||||
* Jared Yanovich
|
|
||||||
|
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
|
# Kubernetes prompt helper for bash/zsh
|
||||||
# Displays current context and namespace
|
# Displays current context and namespace
|
||||||
|
|
||||||
# Copyright 2021 Jon Mosco
|
# Copyright 2026 Jon Mosco
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with 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
|
# Override these values in ~/.zshrc or ~/.bashrc
|
||||||
KUBE_PS1_BINARY="${KUBE_PS1_BINARY:-kubectl}"
|
KUBE_PS1_BINARY="${KUBE_PS1_BINARY:-kubectl}"
|
||||||
KUBE_PS1_SYMBOL_ENABLE="${KUBE_PS1_SYMBOL_ENABLE:-true}"
|
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_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_NS_ENABLE="${KUBE_PS1_NS_ENABLE:-true}"
|
||||||
KUBE_PS1_CONTEXT_ENABLE="${KUBE_PS1_CONTEXT_ENABLE:-true}"
|
KUBE_PS1_CONTEXT_ENABLE="${KUBE_PS1_CONTEXT_ENABLE:-true}"
|
||||||
KUBE_PS1_PREFIX="${KUBE_PS1_PREFIX-(}"
|
KUBE_PS1_PREFIX="${KUBE_PS1_PREFIX-(}"
|
||||||
@@ -34,29 +34,28 @@ KUBE_PS1_SEPARATOR="${KUBE_PS1_SEPARATOR-|}"
|
|||||||
KUBE_PS1_DIVIDER="${KUBE_PS1_DIVIDER-:}"
|
KUBE_PS1_DIVIDER="${KUBE_PS1_DIVIDER-:}"
|
||||||
KUBE_PS1_SUFFIX="${KUBE_PS1_SUFFIX-)}"
|
KUBE_PS1_SUFFIX="${KUBE_PS1_SUFFIX-)}"
|
||||||
|
|
||||||
KUBE_PS1_SYMBOL_COLOR="${KUBE_PS1_SYMBOL_COLOR-blue}"
|
KUBE_PS1_HIDE_IF_NOCONTEXT="${KUBE_PS1_HIDE_IF_NOCONTEXT:-false}"
|
||||||
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_KUBECONFIG_CACHE="${KUBECONFIG}"
|
_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_DISABLE_PATH="${HOME}/.kube/kube-ps1/disabled"
|
_KUBE_PS1_LAST_TIME=0
|
||||||
KUBE_PS1_LAST_TIME=0
|
|
||||||
KUBE_PS1_CLUSTER_FUNCTION="${KUBE_PS1_CLUSTER_FUNCTION}"
|
|
||||||
KUBE_PS1_NAMESPACE_FUNCTION="${KUBE_PS1_NAMESPACE_FUNCTION}"
|
|
||||||
|
|
||||||
# Determine our shell
|
# Determine our shell
|
||||||
if [ "${ZSH_VERSION-}" ]; then
|
_kube_ps1_shell_type() {
|
||||||
KUBE_PS1_SHELL="zsh"
|
local _KUBE_PS1_SHELL_TYPE
|
||||||
elif [ "${BASH_VERSION-}" ]; then
|
|
||||||
KUBE_PS1_SHELL="bash"
|
if [ "${ZSH_VERSION-}" ]; then
|
||||||
fi
|
_KUBE_PS1_SHELL_TYPE="zsh"
|
||||||
|
elif [ "${BASH_VERSION-}" ]; then
|
||||||
|
_KUBE_PS1_SHELL_TYPE="bash"
|
||||||
|
fi
|
||||||
|
echo $_KUBE_PS1_SHELL_TYPE
|
||||||
|
}
|
||||||
|
|
||||||
_kube_ps1_init() {
|
_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")
|
"zsh")
|
||||||
_KUBE_PS1_OPEN_ESC="%{"
|
_KUBE_PS1_OPEN_ESC="%{"
|
||||||
_KUBE_PS1_CLOSE_ESC="%}"
|
_KUBE_PS1_CLOSE_ESC="%}"
|
||||||
@@ -64,7 +63,7 @@ _kube_ps1_init() {
|
|||||||
_KUBE_PS1_DEFAULT_FG="%f"
|
_KUBE_PS1_DEFAULT_FG="%f"
|
||||||
setopt PROMPT_SUBST
|
setopt PROMPT_SUBST
|
||||||
autoload -U add-zsh-hook
|
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 -F zsh/stat b:zstat
|
||||||
zmodload zsh/datetime
|
zmodload zsh/datetime
|
||||||
;;
|
;;
|
||||||
@@ -73,75 +72,75 @@ _kube_ps1_init() {
|
|||||||
_KUBE_PS1_CLOSE_ESC=$'\002'
|
_KUBE_PS1_CLOSE_ESC=$'\002'
|
||||||
_KUBE_PS1_DEFAULT_BG=$'\033[49m'
|
_KUBE_PS1_DEFAULT_BG=$'\033[49m'
|
||||||
_KUBE_PS1_DEFAULT_FG=$'\033[39m'
|
_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
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
_kube_ps1_color_fg() {
|
_kube_ps1_color_fg() {
|
||||||
local KUBE_PS1_FG_CODE
|
local _KUBE_PS1_FG_CODE
|
||||||
case "${1}" in
|
case "${1}" in
|
||||||
black) KUBE_PS1_FG_CODE=0;;
|
black) _KUBE_PS1_FG_CODE=0;;
|
||||||
red) KUBE_PS1_FG_CODE=1;;
|
red) _KUBE_PS1_FG_CODE=1;;
|
||||||
green) KUBE_PS1_FG_CODE=2;;
|
green) _KUBE_PS1_FG_CODE=2;;
|
||||||
yellow) KUBE_PS1_FG_CODE=3;;
|
yellow) _KUBE_PS1_FG_CODE=3;;
|
||||||
blue) KUBE_PS1_FG_CODE=4;;
|
blue) _KUBE_PS1_FG_CODE=4;;
|
||||||
magenta) KUBE_PS1_FG_CODE=5;;
|
magenta) _KUBE_PS1_FG_CODE=5;;
|
||||||
cyan) KUBE_PS1_FG_CODE=6;;
|
cyan) _KUBE_PS1_FG_CODE=6;;
|
||||||
white) KUBE_PS1_FG_CODE=7;;
|
white) _KUBE_PS1_FG_CODE=7;;
|
||||||
# 256
|
# 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}";;
|
[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
|
*) _KUBE_PS1_FG_CODE=default
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [[ "${KUBE_PS1_FG_CODE}" == "default" ]]; then
|
if [[ "${_KUBE_PS1_FG_CODE}" == "default" ]]; then
|
||||||
KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}"
|
_KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}"
|
||||||
return
|
return
|
||||||
elif [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then
|
elif [[ "$(_kube_ps1_shell_type)" == "zsh" ]]; then
|
||||||
KUBE_PS1_FG_CODE="%F{$KUBE_PS1_FG_CODE}"
|
_KUBE_PS1_FG_CODE="%F{$_KUBE_PS1_FG_CODE}"
|
||||||
elif [[ "${KUBE_PS1_SHELL}" == "bash" ]]; then
|
elif [[ "$(_kube_ps1_shell_type)" == "bash" ]]; then
|
||||||
if tput setaf 1 &> /dev/null; then
|
if tput setaf 1 &> /dev/null; then
|
||||||
KUBE_PS1_FG_CODE="$(tput setaf ${KUBE_PS1_FG_CODE})"
|
_KUBE_PS1_FG_CODE="$(tput setaf "${_KUBE_PS1_FG_CODE}")"
|
||||||
elif [[ $KUBE_PS1_FG_CODE -ge 0 ]] && [[ $KUBE_PS1_FG_CODE -le 256 ]]; then
|
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="\033[38;5;${_KUBE_PS1_FG_CODE}m"
|
||||||
else
|
else
|
||||||
KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}"
|
_KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_FG}"
|
||||||
fi
|
fi
|
||||||
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() {
|
_kube_ps1_color_bg() {
|
||||||
local KUBE_PS1_BG_CODE
|
local _KUBE_PS1_BG_CODE
|
||||||
case "${1}" in
|
case "${1}" in
|
||||||
black) KUBE_PS1_BG_CODE=0;;
|
black) _KUBE_PS1_BG_CODE=0;;
|
||||||
red) KUBE_PS1_BG_CODE=1;;
|
red) _KUBE_PS1_BG_CODE=1;;
|
||||||
green) KUBE_PS1_BG_CODE=2;;
|
green) _KUBE_PS1_BG_CODE=2;;
|
||||||
yellow) KUBE_PS1_BG_CODE=3;;
|
yellow) _KUBE_PS1_BG_CODE=3;;
|
||||||
blue) KUBE_PS1_BG_CODE=4;;
|
blue) _KUBE_PS1_BG_CODE=4;;
|
||||||
magenta) KUBE_PS1_BG_CODE=5;;
|
magenta) _KUBE_PS1_BG_CODE=5;;
|
||||||
cyan) KUBE_PS1_BG_CODE=6;;
|
cyan) _KUBE_PS1_BG_CODE=6;;
|
||||||
white) KUBE_PS1_BG_CODE=7;;
|
white) _KUBE_PS1_BG_CODE=7;;
|
||||||
# 256
|
# 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}";;
|
[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';;
|
*) _KUBE_PS1_BG_CODE=$'\033[0m';;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [[ "${KUBE_PS1_BG_CODE}" == "default" ]]; then
|
if [[ "${_KUBE_PS1_BG_CODE}" == "default" ]]; then
|
||||||
KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_BG}"
|
_KUBE_PS1_FG_CODE="${_KUBE_PS1_DEFAULT_BG}"
|
||||||
return
|
return
|
||||||
elif [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then
|
elif [[ "$(_kube_ps1_shell_type)" == "zsh" ]]; then
|
||||||
KUBE_PS1_BG_CODE="%K{$KUBE_PS1_BG_CODE}"
|
_KUBE_PS1_BG_CODE="%K{$_KUBE_PS1_BG_CODE}"
|
||||||
elif [[ "${KUBE_PS1_SHELL}" == "bash" ]]; then
|
elif [[ "$(_kube_ps1_shell_type)" == "bash" ]]; then
|
||||||
if tput setaf 1 &> /dev/null; then
|
if tput setaf 1 &> /dev/null; then
|
||||||
KUBE_PS1_BG_CODE="$(tput setab ${KUBE_PS1_BG_CODE})"
|
_KUBE_PS1_BG_CODE="$(tput setab "${_KUBE_PS1_BG_CODE}")"
|
||||||
elif [[ $KUBE_PS1_BG_CODE -ge 0 ]] && [[ $KUBE_PS1_BG_CODE -le 256 ]]; then
|
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="\033[48;5;${_KUBE_PS1_BG_CODE}m"
|
||||||
else
|
else
|
||||||
KUBE_PS1_BG_CODE="${DEFAULT_BG}"
|
_KUBE_PS1_BG_CODE="${DEFAULT_BG}"
|
||||||
fi
|
fi
|
||||||
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() {
|
_kube_ps1_binary_check() {
|
||||||
@@ -149,38 +148,60 @@ _kube_ps1_binary_check() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_kube_ps1_symbol() {
|
_kube_ps1_symbol() {
|
||||||
|
# Exit early if symbol display is disabled
|
||||||
[[ "${KUBE_PS1_SYMBOL_ENABLE}" == false ]] && return
|
[[ "${KUBE_PS1_SYMBOL_ENABLE}" == false ]] && return
|
||||||
|
|
||||||
case "${KUBE_PS1_SHELL}" in
|
local symbol_arg="${KUBE_PS1_SYMBOL_CUSTOM}"
|
||||||
bash)
|
|
||||||
if ((BASH_VERSINFO[0] >= 4)) && [[ $'\u2388' != "\\u2388" ]]; then
|
local symbol=""
|
||||||
KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_DEFAULT}"
|
local symbol_default=$'\u2388'
|
||||||
KUBE_PS1_SYMBOL_IMG=$'\u2638\ufe0f'
|
local symbol_img="☸️"
|
||||||
else
|
local k8s_glyph=$'\Uf10fe'
|
||||||
KUBE_PS1_SYMBOL=$'\xE2\x8E\x88'
|
local k8s_symbol_color=blue
|
||||||
KUBE_PS1_SYMBOL_IMG=$'\xE2\x98\xB8'
|
local oc_glyph=$'\ue7b7'
|
||||||
fi
|
local oc_symbol_color=red
|
||||||
|
local custom_symbol_color="${KUBE_PS1_SYMBOL_COLOR:-$k8s_symbol_color}"
|
||||||
|
|
||||||
|
# Choose the symbol based on the provided argument or environment variable
|
||||||
|
case "${symbol_arg}" in
|
||||||
|
"img")
|
||||||
|
symbol="${symbol_img}"
|
||||||
|
;;
|
||||||
|
"k8s")
|
||||||
|
symbol="$(_kube_ps1_color_fg "${custom_symbol_color}")${k8s_glyph}${KUBE_PS1_RESET_COLOR}"
|
||||||
|
;;
|
||||||
|
"oc")
|
||||||
|
symbol="$(_kube_ps1_color_fg ${oc_symbol_color})${oc_glyph}${KUBE_PS1_RESET_COLOR}"
|
||||||
;;
|
;;
|
||||||
zsh)
|
|
||||||
KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_DEFAULT}"
|
|
||||||
KUBE_PS1_SYMBOL_IMG="\u2638";;
|
|
||||||
*)
|
*)
|
||||||
KUBE_PS1_SYMBOL="k8s"
|
case "$(_kube_ps1_shell_type)" in
|
||||||
|
bash)
|
||||||
|
if ((BASH_VERSINFO[0] >= 4)) && [[ $'\u2388' != "\\u2388" ]]; then
|
||||||
|
symbol="$(_kube_ps1_color_fg $custom_symbol_color)${symbol_default}${KUBE_PS1_RESET_COLOR}"
|
||||||
|
symbol_img=$'\u2638\ufe0f'
|
||||||
|
else
|
||||||
|
symbol=$'\xE2\x8E\x88'
|
||||||
|
symbol_img=$'\xE2\x98\xB8'
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
zsh)
|
||||||
|
symbol="$(_kube_ps1_color_fg $custom_symbol_color)${symbol_default}${KUBE_PS1_RESET_COLOR}"
|
||||||
|
symbol_img="☸️"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
symbol="k8s"
|
||||||
|
esac
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [[ "${KUBE_PS1_SYMBOL_USE_IMG}" == true ]]; then
|
# Append padding if enabled
|
||||||
KUBE_PS1_SYMBOL="${KUBE_PS1_SYMBOL_IMG}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${KUBE_PS1_SYMBOL_PADDING}" == true ]]; then
|
if [[ "${KUBE_PS1_SYMBOL_PADDING}" == true ]]; then
|
||||||
echo "${KUBE_PS1_SYMBOL} "
|
echo "${symbol} "
|
||||||
else
|
else
|
||||||
echo "${KUBE_PS1_SYMBOL}"
|
echo "${symbol}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_kube_ps1_split() {
|
_kube_ps1_split_config() {
|
||||||
type setopt >/dev/null 2>&1 && setopt SH_WORD_SPLIT
|
type setopt >/dev/null 2>&1 && setopt SH_WORD_SPLIT
|
||||||
local IFS=$1
|
local IFS=$1
|
||||||
echo $2
|
echo $2
|
||||||
@@ -191,32 +212,21 @@ _kube_ps1_file_newer_than() {
|
|||||||
local file=$1
|
local file=$1
|
||||||
local check_time=$2
|
local check_time=$2
|
||||||
|
|
||||||
if [[ "${KUBE_PS1_KUBECONFIG_SYMLINK}" == "true" ]]; then
|
if [[ "$(_kube_ps1_shell_type)" == "zsh" ]]; then
|
||||||
if [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then
|
# Use zstat '-F %s.%s' to make it compatible with low zsh version (eg: 5.0.2)
|
||||||
mtime=$(zstat -L +mtime "${file}")
|
mtime=$(zstat -L +mtime -F %s.%s "${file}")
|
||||||
elif stat -c "%s" /dev/null &> /dev/null; then
|
elif stat -c "%s" /dev/null &> /dev/null; then
|
||||||
# GNU stat
|
# GNU stat
|
||||||
mtime=$(stat -c %Y "${file}")
|
mtime=$(stat -L -c %Y "${file}")
|
||||||
else
|
|
||||||
# BSD stat
|
|
||||||
mtime=$(stat -f %m "$file")
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
if [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then
|
# BSD stat
|
||||||
mtime=$(zstat +mtime "${file}")
|
mtime=$(stat -L -f %m "$file")
|
||||||
elif stat -c "%s" /dev/null &> /dev/null; then
|
|
||||||
# GNU stat
|
|
||||||
mtime=$(stat -L -c %Y "${file}")
|
|
||||||
else
|
|
||||||
# BSD stat
|
|
||||||
mtime=$(stat -L -f %m "$file")
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[[ "${mtime}" -gt "${check_time}" ]]
|
[[ "${mtime}" -gt "${check_time}" ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
_kube_ps1_update_cache() {
|
_kube_ps1_prompt_update() {
|
||||||
local return_code=$?
|
local return_code=$?
|
||||||
|
|
||||||
[[ "${KUBE_PS1_ENABLED}" == "off" ]] && return $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.
|
# No ability to fetch context/namespace; display N/A.
|
||||||
KUBE_PS1_CONTEXT="BINARY-N/A"
|
KUBE_PS1_CONTEXT="BINARY-N/A"
|
||||||
KUBE_PS1_NAMESPACE="N/A"
|
KUBE_PS1_NAMESPACE="N/A"
|
||||||
return
|
return $return_code
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${KUBECONFIG}" != "${KUBE_PS1_KUBECONFIG_CACHE}" ]]; then
|
if [[ "${KUBECONFIG}" != "${_KUBE_PS1_KUBECONFIG_CACHE}" ]]; then
|
||||||
# User changed KUBECONFIG; unconditionally refetch.
|
# User changed KUBECONFIG; unconditionally refetch.
|
||||||
KUBE_PS1_KUBECONFIG_CACHE=${KUBECONFIG}
|
_KUBE_PS1_KUBECONFIG_CACHE=${KUBECONFIG}
|
||||||
_kube_ps1_get_context_ns
|
_kube_ps1_get_context_ns
|
||||||
return
|
return $return_code
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# kubectl will read the environment variable $KUBECONFIG
|
# kubectl will read the environment variable $KUBECONFIG
|
||||||
# otherwise set it to ~/.kube/config
|
# otherwise set it to ~/.kube/config
|
||||||
local conf
|
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
|
[[ -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
|
_kube_ps1_get_context_ns
|
||||||
return
|
return $return_code
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if [[ "${config_file_cache}" != "${_KUBE_PS1_CFGFILES_READ_CACHE}" ]]; then
|
||||||
|
_kube_ps1_get_context_ns
|
||||||
|
return $return_code
|
||||||
|
fi
|
||||||
|
|
||||||
return $return_code
|
return $return_code
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,8 +273,8 @@ _kube_ps1_get_context() {
|
|||||||
# Set namespace to 'N/A' if it is not defined
|
# Set namespace to 'N/A' if it is not defined
|
||||||
KUBE_PS1_CONTEXT="${KUBE_PS1_CONTEXT:-N/A}"
|
KUBE_PS1_CONTEXT="${KUBE_PS1_CONTEXT:-N/A}"
|
||||||
|
|
||||||
if [[ ! -z "${KUBE_PS1_CLUSTER_FUNCTION}" ]]; then
|
if [[ -n "${KUBE_PS1_CLUSTER_FUNCTION}" ]]; then
|
||||||
KUBE_PS1_CONTEXT=$($KUBE_PS1_CLUSTER_FUNCTION $KUBE_PS1_CONTEXT)
|
KUBE_PS1_CONTEXT="$("${KUBE_PS1_CLUSTER_FUNCTION}" "${KUBE_PS1_CONTEXT}")"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -264,27 +282,36 @@ _kube_ps1_get_context() {
|
|||||||
_kube_ps1_get_ns() {
|
_kube_ps1_get_ns() {
|
||||||
if [[ "${KUBE_PS1_NS_ENABLE}" == true ]]; then
|
if [[ "${KUBE_PS1_NS_ENABLE}" == true ]]; then
|
||||||
KUBE_PS1_NAMESPACE="$(${KUBE_PS1_BINARY} config view --minify --output 'jsonpath={..namespace}' 2>/dev/null)"
|
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:-N/A}"
|
||||||
KUBE_PS1_NAMESPACE="${KUBE_PS1_NAMESPACE:-default}"
|
|
||||||
|
|
||||||
if [[ ! -z "${KUBE_PS1_NAMESPACE_FUNCTION}" ]]; then
|
if [[ -n "${KUBE_PS1_NAMESPACE_FUNCTION}" ]]; then
|
||||||
KUBE_PS1_NAMESPACE=$($KUBE_PS1_NAMESPACE_FUNCTION $KUBE_PS1_NAMESPACE)
|
KUBE_PS1_NAMESPACE="$("${KUBE_PS1_NAMESPACE_FUNCTION}" "${KUBE_PS1_NAMESPACE}")"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_kube_ps1_get_context_ns() {
|
_kube_ps1_get_context_ns() {
|
||||||
# Set the command time
|
# 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
|
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
|
else
|
||||||
KUBE_PS1_LAST_TIME=$(date +%s)
|
_KUBE_PS1_LAST_TIME=$(date +%s)
|
||||||
fi
|
fi
|
||||||
elif [[ "${KUBE_PS1_SHELL}" == "zsh" ]]; then
|
elif [[ "$(_kube_ps1_shell_type)" == "zsh" ]]; then
|
||||||
KUBE_PS1_LAST_TIME=$EPOCHSECONDS
|
_KUBE_PS1_LAST_TIME=$EPOCHREALTIME
|
||||||
fi
|
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_context
|
||||||
_kube_ps1_get_ns
|
_kube_ps1_get_ns
|
||||||
}
|
}
|
||||||
@@ -298,7 +325,7 @@ Toggle kube-ps1 prompt on
|
|||||||
|
|
||||||
Usage: kubeon [-g | --global] [-h | --help]
|
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
|
-g --global turn on kube-ps1 status globally
|
||||||
-h --help print this message
|
-h --help print this message
|
||||||
@@ -322,7 +349,7 @@ kubeon() {
|
|||||||
if [[ "${1}" == '-h' || "${1}" == '--help' ]]; then
|
if [[ "${1}" == '-h' || "${1}" == '--help' ]]; then
|
||||||
_kubeon_usage
|
_kubeon_usage
|
||||||
elif [[ "${1}" == '-g' || "${1}" == '--global' ]]; then
|
elif [[ "${1}" == '-g' || "${1}" == '--global' ]]; then
|
||||||
rm -f -- "${KUBE_PS1_DISABLE_PATH}"
|
rm -f -- "${_KUBE_PS1_DISABLE_PATH}"
|
||||||
elif [[ "$#" -ne 0 ]]; then
|
elif [[ "$#" -ne 0 ]]; then
|
||||||
echo -e "error: unrecognized flag ${1}\\n"
|
echo -e "error: unrecognized flag ${1}\\n"
|
||||||
_kubeon_usage
|
_kubeon_usage
|
||||||
@@ -336,8 +363,8 @@ kubeoff() {
|
|||||||
if [[ "${1}" == '-h' || "${1}" == '--help' ]]; then
|
if [[ "${1}" == '-h' || "${1}" == '--help' ]]; then
|
||||||
_kubeoff_usage
|
_kubeoff_usage
|
||||||
elif [[ "${1}" == '-g' || "${1}" == '--global' ]]; then
|
elif [[ "${1}" == '-g' || "${1}" == '--global' ]]; then
|
||||||
mkdir -p -- "$(dirname "${KUBE_PS1_DISABLE_PATH}")"
|
mkdir -p -- "$(dirname "${_KUBE_PS1_DISABLE_PATH}")"
|
||||||
touch -- "${KUBE_PS1_DISABLE_PATH}"
|
touch -- "${_KUBE_PS1_DISABLE_PATH}"
|
||||||
elif [[ $# -ne 0 ]]; then
|
elif [[ $# -ne 0 ]]; then
|
||||||
echo "error: unrecognized flag ${1}" >&2
|
echo "error: unrecognized flag ${1}" >&2
|
||||||
_kubeoff_usage
|
_kubeoff_usage
|
||||||
@@ -351,22 +378,29 @@ kubeoff() {
|
|||||||
kube_ps1() {
|
kube_ps1() {
|
||||||
[[ "${KUBE_PS1_ENABLED}" == "off" ]] && return
|
[[ "${KUBE_PS1_ENABLED}" == "off" ]] && return
|
||||||
[[ -z "${KUBE_PS1_CONTEXT}" ]] && [[ "${KUBE_PS1_CONTEXT_ENABLE}" == true ]] && 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
|
||||||
local KUBE_PS1_RESET_COLOR="${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_DEFAULT_FG}${_KUBE_PS1_CLOSE_ESC}"
|
local KUBE_PS1_RESET_COLOR="${_KUBE_PS1_OPEN_ESC}${_KUBE_PS1_DEFAULT_FG}${_KUBE_PS1_CLOSE_ESC}"
|
||||||
|
|
||||||
|
# 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
|
# 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
|
# Prefix
|
||||||
if [[ -z "${KUBE_PS1_PREFIX_COLOR:-}" ]] && [[ -n "${KUBE_PS1_PREFIX}" ]]; then
|
if [[ -z "${KUBE_PS1_PREFIX_COLOR:-}" ]] && [[ -n "${KUBE_PS1_PREFIX}" ]]; then
|
||||||
KUBE_PS1+="${KUBE_PS1_PREFIX}"
|
KUBE_PS1+="${KUBE_PS1_PREFIX}"
|
||||||
else
|
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
|
fi
|
||||||
|
|
||||||
# Symbol
|
# 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
|
if [[ -n "${KUBE_PS1_SEPARATOR}" ]] && [[ "${KUBE_PS1_SYMBOL_ENABLE}" == true ]]; then
|
||||||
KUBE_PS1+="${KUBE_PS1_SEPARATOR}"
|
KUBE_PS1+="${KUBE_PS1_SEPARATOR}"
|
||||||
@@ -374,7 +408,14 @@ kube_ps1() {
|
|||||||
|
|
||||||
# Context
|
# Context
|
||||||
if [[ "${KUBE_PS1_CONTEXT_ENABLE}" == true ]]; then
|
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
|
fi
|
||||||
|
|
||||||
# Namespace
|
# Namespace
|
||||||
@@ -382,14 +423,14 @@ kube_ps1() {
|
|||||||
if [[ -n "${KUBE_PS1_DIVIDER}" ]] && [[ "${KUBE_PS1_CONTEXT_ENABLE}" == true ]]; then
|
if [[ -n "${KUBE_PS1_DIVIDER}" ]] && [[ "${KUBE_PS1_CONTEXT_ENABLE}" == true ]]; then
|
||||||
KUBE_PS1+="${KUBE_PS1_DIVIDER}"
|
KUBE_PS1+="${KUBE_PS1_DIVIDER}"
|
||||||
fi
|
fi
|
||||||
KUBE_PS1+="$(_kube_ps1_color_fg ${KUBE_PS1_NS_COLOR})${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
|
fi
|
||||||
|
|
||||||
# Suffix
|
# Suffix
|
||||||
if [[ -z "${KUBE_PS1_SUFFIX_COLOR:-}" ]] && [[ -n "${KUBE_PS1_SUFFIX}" ]]; then
|
if [[ -z "${KUBE_PS1_SUFFIX_COLOR:-}" ]] && [[ -n "${KUBE_PS1_SUFFIX}" ]]; then
|
||||||
KUBE_PS1+="${KUBE_PS1_SUFFIX}"
|
KUBE_PS1+="${KUBE_PS1_SUFFIX}"
|
||||||
else
|
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
|
fi
|
||||||
|
|
||||||
# Close Background color if defined
|
# Close Background color if defined
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ plugins=(... kubectl)
|
|||||||
| k | `kubectl` | The kubectl command |
|
| k | `kubectl` | The kubectl command |
|
||||||
| kca | `kubectl --all-namespaces` | The kubectl command targeting all namespaces |
|
| kca | `kubectl --all-namespaces` | The kubectl command targeting all namespaces |
|
||||||
| kaf | `kubectl apply -f` | Apply a YML file |
|
| 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 |
|
| keti | `kubectl exec -ti` | Drop into an interactive terminal on a container |
|
||||||
| | | **Manage configuration quickly to switch contexts between local, dev and staging** |
|
| | | **Manage configuration quickly to switch contexts between local, dev and staging** |
|
||||||
| kcuc | `kubectl config use-context` | Set the current-context in a kubeconfig file |
|
| kcuc | `kubectl config use-context` | Set the current-context in a kubeconfig file |
|
||||||
@@ -26,8 +27,9 @@ plugins=(... kubectl)
|
|||||||
| | | **General aliases** |
|
| | | **General aliases** |
|
||||||
| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector |
|
| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector |
|
||||||
| kdelf | `kubectl delete -f` | Delete a pod using the type and name specified in -f argument |
|
| 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) |
|
| 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) |
|
| kgew | `kubectl get events --watch --sort-by=".lastTimestamp"` | Get events and watch as they occur (sorted by timestamp) |
|
||||||
| | | **Pod management** |
|
| | | **Pod management** |
|
||||||
| kgp | `kubectl get pods` | List all pods in ps output format |
|
| kgp | `kubectl get pods` | List all pods in ps output format |
|
||||||
| kgpl | `kgp -l` | Get pods by label. Example: `kgpl "app=myapp" -n myns` |
|
| kgpl | `kgp -l` | Get pods by label. Example: `kgpl "app=myapp" -n myns` |
|
||||||
@@ -74,6 +76,7 @@ plugins=(... kubectl)
|
|||||||
| kdeld | `kubectl delete deployment` | Delete the deployment |
|
| kdeld | `kubectl delete deployment` | Delete the deployment |
|
||||||
| ksd | `kubectl scale deployment` | Scale a deployment |
|
| ksd | `kubectl scale deployment` | Scale a deployment |
|
||||||
| krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment |
|
| krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment |
|
||||||
|
| krrd | `kubectl rollout restart deployment` | Rollout restart a deployment |
|
||||||
| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime |
|
| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime |
|
||||||
| | | **Rollout management** |
|
| | | **Rollout management** |
|
||||||
| kgrs | `kubectl get replicaset` | List all ReplicaSets `rs` created by the deployment |
|
| kgrs | `kubectl get replicaset` | List all ReplicaSets `rs` created by the deployment |
|
||||||
@@ -112,6 +115,7 @@ plugins=(... kubectl)
|
|||||||
| kdelss | `kubectl delete statefulset` | Delete the statefulset |
|
| kdelss | `kubectl delete statefulset` | Delete the statefulset |
|
||||||
| ksss | `kubectl scale statefulset` | Scale a statefulset |
|
| ksss | `kubectl scale statefulset` | Scale a statefulset |
|
||||||
| krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment |
|
| krsss | `kubectl rollout status statefulset` | Check the rollout status of a deployment |
|
||||||
|
| krrss | `kubectl rollout restart statefulset` | Rollout restart a statefulset |
|
||||||
| | | **Service Accounts management** |
|
| | | **Service Accounts management** |
|
||||||
| kdsa | `kubectl describe sa` | Describe a service account in details |
|
| kdsa | `kubectl describe sa` | Describe a service account in details |
|
||||||
| kdelsa | `kubectl delete sa` | Delete the service account |
|
| kdelsa | `kubectl delete sa` | Delete the service account |
|
||||||
|
|||||||
@@ -21,6 +21,9 @@ alias kca='_kca(){ kubectl "$@" --all-namespaces; unset -f _kca; }; _kca'
|
|||||||
# Apply a YML file
|
# Apply a YML file
|
||||||
alias kaf='kubectl apply -f'
|
alias kaf='kubectl apply -f'
|
||||||
|
|
||||||
|
# Apply a kustomization directory
|
||||||
|
alias kapk='kubectl apply -k'
|
||||||
|
|
||||||
# Drop into an interactive terminal on a container
|
# Drop into an interactive terminal on a container
|
||||||
alias keti='kubectl exec -t -i'
|
alias keti='kubectl exec -t -i'
|
||||||
|
|
||||||
@@ -36,6 +39,7 @@ alias kcgc='kubectl config get-contexts'
|
|||||||
# General aliases
|
# General aliases
|
||||||
alias kdel='kubectl delete'
|
alias kdel='kubectl delete'
|
||||||
alias kdelf='kubectl delete -f'
|
alias kdelf='kubectl delete -f'
|
||||||
|
alias kdelk='kubectl delete -k'
|
||||||
alias kge='kubectl get events --sort-by=".lastTimestamp"'
|
alias kge='kubectl get events --sort-by=".lastTimestamp"'
|
||||||
alias kgew='kubectl get events --sort-by=".lastTimestamp" --watch'
|
alias kgew='kubectl get events --sort-by=".lastTimestamp" --watch'
|
||||||
|
|
||||||
@@ -98,6 +102,7 @@ alias kdd='kubectl describe deployment'
|
|||||||
alias kdeld='kubectl delete deployment'
|
alias kdeld='kubectl delete deployment'
|
||||||
alias ksd='kubectl scale deployment'
|
alias ksd='kubectl scale deployment'
|
||||||
alias krsd='kubectl rollout status deployment'
|
alias krsd='kubectl rollout status deployment'
|
||||||
|
alias krrd='kubectl rollout restart deployment'
|
||||||
|
|
||||||
function kres(){
|
function kres(){
|
||||||
kubectl set env $@ REFRESHED_AT=$(date +%Y%m%d%H%M%S)
|
kubectl set env $@ REFRESHED_AT=$(date +%Y%m%d%H%M%S)
|
||||||
@@ -120,6 +125,7 @@ alias kdss='kubectl describe statefulset'
|
|||||||
alias kdelss='kubectl delete statefulset'
|
alias kdelss='kubectl delete statefulset'
|
||||||
alias ksss='kubectl scale statefulset'
|
alias ksss='kubectl scale statefulset'
|
||||||
alias krsss='kubectl rollout status statefulset'
|
alias krsss='kubectl rollout status statefulset'
|
||||||
|
alias krrss='kubectl rollout restart statefulset'
|
||||||
|
|
||||||
# Port forwarding
|
# Port forwarding
|
||||||
alias kpf="kubectl port-forward"
|
alias kpf="kubectl port-forward"
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ plugins=(... opentofu)
|
|||||||
|--------|------------------------------|
|
|--------|------------------------------|
|
||||||
| `tt` | `tofu` |
|
| `tt` | `tofu` |
|
||||||
| `tta` | `tofu apply` |
|
| `tta` | `tofu apply` |
|
||||||
| `ttaa` | `tofu apply -auto-approve` |
|
| `tta!` | `tofu apply -auto-approve` |
|
||||||
| `ttc` | `tofu console` |
|
| `ttc` | `tofu console` |
|
||||||
| `ttd` | `tofu destroy` |
|
| `ttd` | `tofu destroy` |
|
||||||
| `ttd!` | `tofu destroy -auto-approve` |
|
| `ttd!` | `tofu destroy -auto-approve` |
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ function tofu_version_prompt_info() {
|
|||||||
|
|
||||||
alias tt='tofu'
|
alias tt='tofu'
|
||||||
alias tta='tofu apply'
|
alias tta='tofu apply'
|
||||||
alias ttaa='tofu apply -auto-approve'
|
alias tta!='tofu apply -auto-approve'
|
||||||
alias ttc='tofu console'
|
alias ttc='tofu console'
|
||||||
alias ttd='tofu destroy'
|
alias ttd='tofu destroy'
|
||||||
alias ttd!='tofu destroy -auto-approve'
|
alias ttd!='tofu destroy -auto-approve'
|
||||||
|
|||||||
41
plugins/pulumi/README.md
Normal file
41
plugins/pulumi/README.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Pulumi
|
||||||
|
|
||||||
|
This is an **Oh My Zsh plugin** for the [**Pulumi CLI**](https://www.pulumi.com/docs/iac/cli/),
|
||||||
|
an Infrastructure as Code (IaC) tool for building, deploying and managing cloud infrastucture.
|
||||||
|
|
||||||
|
This plugin provides:
|
||||||
|
|
||||||
|
- 🚀 Short, intuitive aliases for common Pulumi commands
|
||||||
|
- 🎯 Auto-completion support for Pulumi
|
||||||
|
|
||||||
|
To use it, add `pulumi` to the plugins array in your `.zshrc` file:
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
plugins=(... pulumi)
|
||||||
|
```
|
||||||
|
|
||||||
|
## ⚡ Aliases
|
||||||
|
|
||||||
|
| Alias | Command | Description |
|
||||||
|
| -------- | ---------------------- | ----------------------------- |
|
||||||
|
| `pul` | `pulumi` | Shortcut for Pulumi CLI |
|
||||||
|
| `pulcs` | `pulumi config set` | Set Pulumi configuration |
|
||||||
|
| `puld` | `pulumi destroy` | Destroy all resources |
|
||||||
|
| `pullog` | `pulumi logs -f` | Tail Pulumi logs in real-time |
|
||||||
|
| `pulp` | `pulumi preview` | Show planned changes |
|
||||||
|
| `pulr` | `pulumi refresh` | Refresh state from cloud |
|
||||||
|
| `puls` | `pulumi stack` | Show stack details |
|
||||||
|
| `pulsh` | `pulumi stack history` | Show stack history |
|
||||||
|
| `pulsi` | `pulumi stack init` | Initialize a new stack |
|
||||||
|
| `pulsl` | `pulumi stack ls` | List available stacks |
|
||||||
|
| `pulso` | `pulumi stack output` | Show stack outputs |
|
||||||
|
| `pulss` | `pulumi stack select` | Switch stack |
|
||||||
|
| `pulu` | `pulumi up` | Deploy infrastructure |
|
||||||
|
|
||||||
|
## 🎯 Autocompletion
|
||||||
|
|
||||||
|
If `pulumi gen-completion zsh` is available, this plugin **automatically loads Pulumi auto-completion**.
|
||||||
|
|
||||||
|
## 🛠️ Contribution
|
||||||
|
|
||||||
|
Feel free to open an issue or PR for improvements! 🚀
|
||||||
28
plugins/pulumi/pulumi.plugin.zsh
Normal file
28
plugins/pulumi/pulumi.plugin.zsh
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
if (( ! $+commands[pulumi] )); then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If the completion file doesn't exist yet, we need to autoload it and
|
||||||
|
# bind it to `pulumi`. Otherwise, compinit will have already done that.
|
||||||
|
if [[ ! -f "$ZSH_CACHE_DIR/completions/_pulumi" ]]; then
|
||||||
|
typeset -g -A _comps
|
||||||
|
autoload -Uz _pulumi
|
||||||
|
_comps[pulumi]=_pulumi
|
||||||
|
fi
|
||||||
|
|
||||||
|
pulumi gen-completion zsh >| "$ZSH_CACHE_DIR/completions/_pulumi" &|
|
||||||
|
|
||||||
|
# Aliases
|
||||||
|
alias pul='pulumi'
|
||||||
|
alias pulcs='pulumi config set'
|
||||||
|
alias puld='pulumi destroy'
|
||||||
|
alias pullog='pulumi logs -f'
|
||||||
|
alias pulp='pulumi preview'
|
||||||
|
alias pulr='pulumi refresh'
|
||||||
|
alias puls='pulumi stack'
|
||||||
|
alias pulsh='pulumi stack history'
|
||||||
|
alias pulsi='pulumi stack init'
|
||||||
|
alias pulsl='pulumi stack ls'
|
||||||
|
alias pulso='pulumi stack output'
|
||||||
|
alias pulss='pulumi stack select'
|
||||||
|
alias pulu='pulumi up'
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
# rbfu plugin
|
|
||||||
|
|
||||||
This plugin starts [rbfu](https://github.com/hmans/rbfu), a minimal Ruby version
|
|
||||||
manager, and adds some useful functions.
|
|
||||||
|
|
||||||
To use it, add `rbfu` to the plugins array in your zshrc file:
|
|
||||||
|
|
||||||
```zsh
|
|
||||||
plugins=(... rbfu)
|
|
||||||
```
|
|
||||||
|
|
||||||
**Note: `rbfu` is deprecated and should no longer be used.**
|
|
||||||
|
|
||||||
## Functions
|
|
||||||
|
|
||||||
- `rbfu-rubies`: lists all installed rubies available to rbfu.
|
|
||||||
|
|
||||||
- `rvm_prompt_info`: shows the Ruby version being used with rbfu.
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
# Enables rbfu with --auto option, if available.
|
|
||||||
#
|
|
||||||
# Also provides a command to list all installed/available
|
|
||||||
# rubies. To ensure compatibility with themes, creates the
|
|
||||||
# rvm_prompt_info function to return the $RBFU_RUBY_VERSION
|
|
||||||
# version.
|
|
||||||
|
|
||||||
command -v rbfu &>/dev/null || return
|
|
||||||
|
|
||||||
eval "$(rbfu --init --auto)"
|
|
||||||
|
|
||||||
# Internal: Print ruby version details, if it's currently active, etc.
|
|
||||||
function _rbfu_rubies_print() {
|
|
||||||
# 1: path to ruby file
|
|
||||||
# 2: active ruby
|
|
||||||
local rb rb_out
|
|
||||||
rb="${$1:t}"
|
|
||||||
rb_out="$rb"
|
|
||||||
|
|
||||||
# If the ruby is a symlink, add @ to the name.
|
|
||||||
if [[ -h "$1" ]]; then
|
|
||||||
rb_out="${rb_out}${fg[green]}@${reset_color}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If the ruby is active, add * to the name and show it in red.
|
|
||||||
if [[ "$rb" = "$2" ]]; then
|
|
||||||
rb_out="${fg[red]}${rb_out} ${fg[red]}*${reset_color}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo $rb_out
|
|
||||||
}
|
|
||||||
|
|
||||||
# Public: Provide a list with all available rubies, this basically depends
|
|
||||||
# on ~/.rfbu/rubies. Highlights the currently active ruby version and aliases.
|
|
||||||
function rbfu-rubies() {
|
|
||||||
local rbfu_dir active_rb
|
|
||||||
rbfu_dir="${RBFU_RUBIES:-${HOME}/.rbfu/rubies}"
|
|
||||||
active_rb="${RBFU_RUBY_VERSION:-system}"
|
|
||||||
|
|
||||||
_rbfu_rubies_print "${rbfu_dir}/system" "$active_rb"
|
|
||||||
for rb in ${rbfu_dir}/*(N); do
|
|
||||||
_rbfu_rubies_print "$rb" "$active_rb"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# Public: Create rvm_prompt_info command for themes compatibility, unless
|
|
||||||
# it has already been defined.
|
|
||||||
(( ${+functions[rvm_prompt_info]} )) || \
|
|
||||||
function rvm_prompt_info() { echo "${${RBFU_RUBY_VERSION:=system}:gs/%/%%}" }
|
|
||||||
@@ -16,13 +16,15 @@ plugins=(... terraform)
|
|||||||
## Aliases
|
## Aliases
|
||||||
|
|
||||||
| Alias | Command |
|
| Alias | Command |
|
||||||
| ------- | -------------------------------------- |
|
|---------|----------------------------------------|
|
||||||
| `tf` | `terraform` |
|
| `tf` | `terraform` |
|
||||||
| `tfa` | `terraform apply` |
|
| `tfa` | `terraform apply` |
|
||||||
| `tfaa` | `terraform apply -auto-approve` |
|
| `tfa!` | `terraform apply -auto-approve` |
|
||||||
|
| `tfap` | `terraform apply -parallelism=1` |
|
||||||
| `tfc` | `terraform console` |
|
| `tfc` | `terraform console` |
|
||||||
| `tfd` | `terraform destroy` |
|
| `tfd` | `terraform destroy` |
|
||||||
| `tfd!` | `terraform destroy -auto-approve` |
|
| `tfd!` | `terraform destroy -auto-approve` |
|
||||||
|
| `tfdp` | `terraform destroy -parallelism=1` |
|
||||||
| `tff` | `terraform fmt` |
|
| `tff` | `terraform fmt` |
|
||||||
| `tffr` | `terraform fmt -recursive` |
|
| `tffr` | `terraform fmt -recursive` |
|
||||||
| `tfi` | `terraform init` |
|
| `tfi` | `terraform init` |
|
||||||
|
|||||||
@@ -17,10 +17,12 @@ function tf_version_prompt_info() {
|
|||||||
|
|
||||||
alias tf='terraform'
|
alias tf='terraform'
|
||||||
alias tfa='terraform apply'
|
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 tfc='terraform console'
|
||||||
alias tfd='terraform destroy'
|
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 tff='terraform fmt'
|
||||||
alias tffr='terraform fmt -recursive'
|
alias tffr='terraform fmt -recursive'
|
||||||
alias tfi='terraform init'
|
alias tfi='terraform init'
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ The plugin also supports the following:
|
|||||||
| `tkss` | tmux kill-session -t | Terminate named running tmux session |
|
| `tkss` | tmux kill-session -t | Terminate named running tmux session |
|
||||||
| `tksv` | tmux kill-server | Terminate all running tmux sessions |
|
| `tksv` | tmux kill-server | Terminate all running tmux sessions |
|
||||||
| `tl` | tmux list-sessions | Displays a list of 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 |
|
| `tmux` | `_zsh_tmux_plugin_run` | Start a new tmux session |
|
||||||
| `tmuxconf` | `$EDITOR $ZSH_TMUX_CONFIG` | Open .tmux.conf file with an editor |
|
| `tmuxconf` | `$EDITOR $ZSH_TMUX_CONFIG` | Open .tmux.conf file with an editor |
|
||||||
| `ts` | tmux new-session -s | Create a new named tmux session |
|
| `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 "ta" "attach" "-t"
|
||||||
_build_tmux_alias "tad" "attach -d" "-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 "ts" "new-session" "-s"
|
||||||
_build_tmux_alias "tkss" "kill-session" "-t"
|
_build_tmux_alias "tkss" "kill-session" "-t"
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# uv plugin
|
# 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:
|
To use it, add `uv` to the plugins array in your zshrc file:
|
||||||
|
|
||||||
@@ -10,19 +11,26 @@ plugins=(... uv)
|
|||||||
|
|
||||||
## Aliases
|
## Aliases
|
||||||
|
|
||||||
| Alias | Command | Description |
|
| Alias | Command | Description |
|
||||||
|:----- |------------------------------------------------------------------------ |:-------------------------------------------------------------------- |
|
| :---- | ---------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- |
|
||||||
| uva | `uv add` | Add packages to the project |
|
| 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` |
|
| uvexp | `uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet` | Export the lock file to `requirements.txt` |
|
||||||
| uvl | `uv lock` | Lock the dependencies |
|
| uvi | `uv init` | Initialize a new project in current workspace and environment. |
|
||||||
| uvlr | `uv lock --refresh` | Rebuild the lock file without upgrading dependencies |
|
| uvinw | `uv init --no-workspace` | Initialize a new project in a new workspace and environment |
|
||||||
| uvlu | `uv lock --upgrade` | Lock the dependencies to the newest compatible versions |
|
| uvl | `uv lock` | Lock the dependencies |
|
||||||
| uvp | `uv pip` | Manage pip packages |
|
| uvlr | `uv lock --refresh` | Rebuild the lock file without upgrading dependencies |
|
||||||
| uvpy | `uv python` | Manage Python installs |
|
| uvlu | `uv lock --upgrade` | Lock the dependencies to the newest compatible versions |
|
||||||
| uvr | `uv run` | Run commands within the project's environment |
|
| uvp | `uv pip` | Manage pip packages |
|
||||||
| uvrm | `uv remove` | Remove packages from the project |
|
| uvpi | `uv python install` | Install a specific version of python |
|
||||||
| uvs | `uv sync` | Sync the environment with the lock file |
|
| uvpl | `uv python list` | Lists all python version installed |
|
||||||
| uvsr | `uv sync --refresh` | "Force" sync the environment with the lock file (ignore cache) |
|
| uvpp | `uv python pin` | Pin the current project to use a specific Python version |
|
||||||
| uvsu | `uv sync --upgrade` | Sync the environment, allowing upgrades and ignoring the lock file |
|
| uvpu | `uv python uninstall` | Remove a specific version of python |
|
||||||
| uvup | `uv self update` | Update the UV tool to the latest version |
|
| uvpy | `uv python` | Manage Python installs |
|
||||||
| uvv | `uv venv` | Manage virtual environments |
|
| 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,16 +7,23 @@ alias uv="noglob uv"
|
|||||||
|
|
||||||
alias uva='uv add'
|
alias uva='uv add'
|
||||||
alias uvexp='uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet'
|
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 uvl='uv lock'
|
||||||
alias uvlr='uv lock --refresh'
|
alias uvlr='uv lock --refresh'
|
||||||
alias uvlu='uv lock --upgrade'
|
alias uvlu='uv lock --upgrade'
|
||||||
alias uvp='uv pip'
|
alias uvp='uv pip'
|
||||||
|
alias uvpi='uv python install'
|
||||||
|
alias uvpl='uv python list'
|
||||||
|
alias uvpu='uv python uninstall'
|
||||||
alias uvpy='uv python'
|
alias uvpy='uv python'
|
||||||
|
alias uvpp='uv python pin'
|
||||||
alias uvr='uv run'
|
alias uvr='uv run'
|
||||||
alias uvrm='uv remove'
|
alias uvrm='uv remove'
|
||||||
alias uvs='uv sync'
|
alias uvs='uv sync'
|
||||||
alias uvsr='uv sync --refresh'
|
alias uvsr='uv sync --refresh'
|
||||||
alias uvsu='uv sync --upgrade'
|
alias uvsu='uv sync --upgrade'
|
||||||
|
alias uvtr='uv tree'
|
||||||
alias uvup='uv self update'
|
alias uvup='uv self update'
|
||||||
alias uvv='uv venv'
|
alias uvv='uv venv'
|
||||||
|
|
||||||
|
|||||||
@@ -505,7 +505,7 @@ print_success() {
|
|||||||
printf '\n'
|
printf '\n'
|
||||||
printf '%s\n' "• Follow us on X: $(fmt_link @ohmyzsh https://x.com/ohmyzsh)"
|
printf '%s\n' "• Follow us on X: $(fmt_link @ohmyzsh https://x.com/ohmyzsh)"
|
||||||
printf '%s\n' "• Join our Discord community: $(fmt_link "Discord server" https://discord.gg/ohmyzsh)"
|
printf '%s\n' "• Join our Discord community: $(fmt_link "Discord server" https://discord.gg/ohmyzsh)"
|
||||||
printf '%s\n' "• Get stickers, t-shirts, coffee mugs and more: $(fmt_link "Planet Argon Shop" https://shop.planetargon.com/collections/oh-my-zsh)"
|
printf '%s\n' "• Get stickers, t-shirts, coffee mugs and more: $(fmt_link "CommitGoods Shop" https://commitgoods.com/collections/oh-my-zsh)"
|
||||||
printf '%s\n' $FMT_RESET
|
printf '%s\n' $FMT_RESET
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ if LANG= git pull --quiet --rebase $remote $branch; then
|
|||||||
printf "${BLUE}%s${RESET}\n\n" "$message"
|
printf "${BLUE}%s${RESET}\n\n" "$message"
|
||||||
printf "${BLUE}${BOLD}%s %s${RESET}\n" "To keep up with the latest news and updates, follow us on X:" "$(fmt_link @ohmyzsh https://x.com/ohmyzsh)"
|
printf "${BLUE}${BOLD}%s %s${RESET}\n" "To keep up with the latest news and updates, follow us on X:" "$(fmt_link @ohmyzsh https://x.com/ohmyzsh)"
|
||||||
printf "${BLUE}${BOLD}%s %s${RESET}\n" "Want to get involved in the community? Join our Discord:" "$(fmt_link "Discord server" https://discord.gg/ohmyzsh)"
|
printf "${BLUE}${BOLD}%s %s${RESET}\n" "Want to get involved in the community? Join our Discord:" "$(fmt_link "Discord server" https://discord.gg/ohmyzsh)"
|
||||||
printf "${BLUE}${BOLD}%s %s${RESET}\n" "Get your Oh My Zsh swag at:" "$(fmt_link "Planet Argon Shop" https://shop.planetargon.com/collections/oh-my-zsh)"
|
printf "${BLUE}${BOLD}%s %s${RESET}\n" "Get your Oh My Zsh swag at:" "$(fmt_link "CommitGoods Shop" https://commitgoods.com/collections/oh-my-zsh)"
|
||||||
elif [[ $verbose_mode == minimal ]]; then
|
elif [[ $verbose_mode == minimal ]]; then
|
||||||
printf "${BLUE}%s${RESET}\n" "$message"
|
printf "${BLUE}%s${RESET}\n" "$message"
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user